/*==================================================*
 $Id: slideshow.js,v 1.16 2003/10/14 12:39:00 pat Exp $
 Copyright 2000-2003 Patrick Fitzgerald
 http://slideshow.barelyfitz.com/

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *==================================================*/

// There are two objects defined in this file:
// "slide" - contains all the information for a single slide
// "slideshow" - consists of multiple slide objects and runs the slideshow

//==================================================
// slide object
//==================================================
function slide(src,link,text,target,attr) {
  // This is the constructor function for the slide object.
  // It is called automatically when you create a new slide object.
  // For example:
  // s = new slide();

  // Image URL
  this.src = src;

  // Link URL
  this.link = link;

  // Text to display
  this.text = text;

  // Name of the target window ("_blank")
  this.target = target;

  // Custom duration for the slide, in milliseconds.
  // This is an optional parameter.
this.timeout = 5000

  // Attributes for the target window:
  // width=n,height=n,resizable=yes or no,scrollbars=yes or no,
  // toolbar=yes or no,location=yes or no,directories=yes or no,
  // status=yes or no,menubar=yes or no,copyhistory=yes or no
  // Example: "width=200,height=300"
  this.attr = attr;

  // Create an image object for the slide
  if (document.images) {
    this.image = new Image();
  }

  // Flag to tell when load() has already been called
  this.loaded = false;

  //--------------------------------------------------
  this.load = function() {
    // This method loads the image for the slide

    if (!document.images) { return; }

    if (!this.loaded) {
      this.image.src = this.src;
      this.loaded = true;
    }
  }

  //--------------------------------------------------
  this.hotlink = function() {
    // This method jumps to the slide's link.
    // If a window was specified for the slide, then it opens a new window.

    var mywindow;

    // If this slide does not have a link, do nothing
    if (!this.link) return;

    // Open the link in a separate window?
    if (this.target) {

      // If window attributes are specified,
      // use them to open the new window
      if (this.attr) {
        mywindow = window.open(this.link, this.target, this.attr);
  
      } else {
        // If window attributes are not specified, do not use them
        // (this will copy the attributes from the originating window)
        mywindow = window.open(this.link, this.target);
      }

      // Pop the window to the front
      if (mywindow && mywindow.focus) mywindow.focus();

    } else {
      // Open the link in the current window
      location.href = this.link;
    }
  }
}

//==================================================
// slideshow object
//==================================================
function slideshow( slideshowname ) {
  // This is the constructor function for the slideshow object.
  // It is called automatically when you create a new object.
  // For example:
  // ss = new slideshow("ss");

  // Name of this object
  // (required if you want your slideshow to auto-play)
  // For example, "SLIDES1"
  this.name = slideshowname;

  // When we reach the last slide, should we loop around to start the
  // slideshow again?
  this.repeat = true;

  // Number of images to pre-fetch.
  // -1 = preload all images.
  //  0 = load each image is it is used.
  //  n = pre-fetch n images ahead of the current image.
  // I recommend preloading all images unless you have large
  // images, or a large amount of images.
  this.prefetch = -1;

  // IMAGE element on your HTML page.
  // For example, document.images.SLIDES1IMG
  this.image;

  // ID of a DIV element on your HTML page that will contain the text.
  // For example, "slides2text"
  // Note: after you set this variable, you should call
  // the update() method to update the slideshow display.
  this.textid;

  // TEXTAREA element on your HTML page.
  // For example, document.SLIDES1FORM.SLIDES1TEXT
  // This is a depracated method for displaying the text,
  // but you might want to supply it for older browsers.
  this.textarea;

  // Milliseconds to pause between slides.
  // Individual slides can override this.
  this.timeout = 3000;

  // Hook functions to be called before and after updating the slide
  // this.pre_update_hook = function() { }
  // this.post_update_hook = function() { }

  // These are private variables
  this.slides = new Array();
  this.current = 0;
  this.timeoutid = 0;

  //--------------------------------------------------
  // Public methods
  //--------------------------------------------------
  this.add_slide = function(slide) {
    // Add a slide to the slideshow.
    // For example:
    // SLIDES1.add_slide(new slide("s1.jpg", "link.html"))
  
    var i = this.slides.length;
  
    // Prefetch the slide image if necessary
    if (this.prefetch == -1) {
      slide.load();
    }

    this.slides[i] = slide;
  }

  //--------------------------------------------------
  this.play = function(timeout) {
    // This method implements the automatically running slideshow.
    // If you specify the "timeout" argument, then a new default
    // timeout will be set for the slideshow.
  
    // Make sure we're not already playing
    this.pause();
  
    // If the timeout argument was specified (optional)
    // then make it the new default
    if (timeout) {
      this.timeout = timeout;
    }
  
    // If the current slide has a custom timeout, use it;
    // otherwise use the default timeout
    if (typeof this.slides[ this.current ].timeout != 'undefined') {
      timeout = this.slides[ this.current ].timeout;
    } else {
      timeout = this.timeout;
    }

    // After the timeout, call this.loop()
    this.timeoutid = setTimeout( this.name + ".loop()", timeout);
  }

  //--------------------------------------------------
  this.pause = function() {
    // This method stops the slideshow if it is automatically running.
  
    if (this.timeoutid != 0) {

      clearTimeout(this.timeoutid);
      this.timeoutid = 0;

    }
  }

  //--------------------------------------------------
  this.update = function() {
    // This method updates the slideshow image on the page

    // Make sure the slideshow has been initialized correctly
    if (! this.valid_image()) { return; }
  
    // Call the pre-update hook function if one was specified
    if (typeof this.pre_update_hook == 'function') {
      this.pre_update_hook();
    }

    // Convenience variable for the current slide
    var slide = this.slides[ this.current ];

    // Determine if the browser supports filters
    var dofilter = false;
    if (this.image &&
        typeof this.image.filters != 'undefined' &&
        typeof this.image.filters[0] != 'undefined') {

      dofilter = true;

    }

    // Load the slide image if necessary
    slide.load();
  
    // Apply the filters for the image transition
    if (dofilter) {

      // If the user has specified a custom filter for this slide,
      // then set it now
      if (slide.filter &&
          this.image.style &&
          this.image.style.filter) {

        this.image.style.filter = slide.filter;

      }
      this.image.filters[0].Apply();
    }

    // Update the image.
    this.image.src = slide.image.src;

    // Play the image transition filters
    if (dofilter) {
      this.image.filters[0].Play();
    }

    // Update the text
    this.display_text();

    // Call the post-update hook function if one was specified
    if (typeof this.post_update_hook == 'function') {
      this.post_update_hook();
    }

    // Do we need to pre-fetch images?
    if (this.prefetch > 0) {

      var next, prev, count;

      // Pre-fetch the next slide image(s)
      next = this.current;
      prev = this.current;
      count = 0;
      do {

        // Get the next and previous slide number
        // Loop past the ends of the slideshow if necessary
        if (++next >= this.slides.length) next = 0;
        if (--prev < 0) prev = this.slides.length - 1;

        // Preload the slide image
        this.slides[next].load();
        this.slides[prev].load();

        // Keep going until we have fetched
        // the designated number of slides

      } while (++count < this.prefetch);
    }
  }

  //--------------------------------------------------
  this.goto_slide = function(n) {
    // This method jumpts to the slide number you specify.
    // If you use slide number -1, then it jumps to the last slide.
    // You can use this to make links that go to a specific slide,
    // or to go to the beginning or end of the slideshow.
    // Examples:
    // onClick="myslides.goto_slide(0)"
    // onClick="myslides.goto_slide(-1)"
    // onClick="myslides.goto_slide(5)"
  
    if (n == -1) {
      n = this.slides.length - 1;
    }
  
    if (n < this.slides.length && n >= 0) {
      this.current = n;
    }
  
    this.update();
  }


  //--------------------------------------------------
  this.goto_random_slide = function(include_current) {
    // Picks a random slide (other than the current slide) and
    // displays it.
    // If the include_current parameter is true,
    // then 
    // See also: shuffle()

    var i;

    // Make sure there is more than one slide
    if (this.slides.length > 1) {

      // Generate a random slide number,
      // but make sure it is not the current slide
      do {
        i = Math.floor(Math.random()*this.slides.length);
      } while (i == this.current);
 
      // Display the slide
      this.goto_slide(i);
    }
  }


  //--------------------------------------------------
  this.next = function() {
    // This method advances to the next slide.

    // Increment the image number
    if (this.current < this.slides.length - 1) {
      this.current++;
    } else if (this.repeat) {
      this.current = 0;
    }

    this.update();
  }


  //--------------------------------------------------
  this.previous = function() {
    // This method goes to the previous slide.
  
    // Decrement the image number
    if (this.current > 0) {
      this.current--;
    } else if (this.repeat) {
      this.current = this.slides.length - 1;
    }
  
    this.update();
  }


  //--------------------------------------------------
  this.shuffle = function() {
    // This method randomly shuffles the order of the slides.

    var i, i2, slides_copy, slides_randomized;

    // Create a copy of the array containing the slides
    // in sequential order
    slides_copy = new Array();
    for (i = 0; i < this.slides.length; i++) {
      slides_copy[i] = this.slides[i];
    }

    // Create a new array to contain the slides in random order
    slides_randomized = new Array();

    // To populate the new array of slides in random order,
    // loop through the existing slides, picking a random
    // slide, removing it from the ordered list and adding it to
    // the random list.

    do {

      // Pick a random slide from those that remain
      i = Math.floor(Math.random()*slides_copy.length);

      // Add the slide to the end of the randomized array
      slides_randomized[ slides_randomized.length ] =
        slides_copy[i];

      // Remove the slide from the sequential array,
      // so it cannot be chosen again
      for (i2 = i + 1; i2 < slides_copy.length; i2++) {
        slides_copy[i2 - 1] = slides_copy[i2];
      }
      slides_copy.length--;

      // Keep going until we have removed all the slides

    } while (slides_copy.length);

    // Now set the slides to the randomized array
    this.slides = slides_randomized;
  }


  //--------------------------------------------------
  this.get_text = function() {
    // This method returns the text of the current slide
  
    return(this.slides[ this.current ].text);
  }


  //--------------------------------------------------
  this.get_all_text = function(before_slide, after_slide) {
    // Return the text for all of the slides.
    // For the text of each slide, add "before_slide" in front of the
    // text, and "after_slide" after the text.
    // For example:
    // document.write("<ul>");
    // document.write(s.get_all_text("<li>","\n"));
    // document.write("<\/ul>");
  
    all_text = "";
  
    // Loop through all the slides in the slideshow
    for (i=0; i < this.slides.length; i++) {
  
      slide = this.slides[i];
    
      if (slide.text) {
        all_text += before_slide + slide.text + after_slide;
      }
  
    }
  
    return(all_text);
  }


  //--------------------------------------------------
  this.display_text = function(text) {
    // Display the text for the current slide
  
    // If the "text" arg was not supplied (usually it isn't),
    // get the text from the slideshow
    if (!text) {
      text = this.slides[ this.current ].text;
    }
  
    // If a textarea has been specified,
    // then change the text displayed in it
    if (this.textarea && typeof this.textarea.value != 'undefined') {
      this.textarea.value = text;
    }

    // If a text id has been specified,
    // then change the contents of the HTML element
    if (this.textid) {

      r = this.getElementById(this.textid);
      if (!r) { return false; }
      if (typeof r.innerHTML == 'undefined') { return false; }

      // Update the text
      r.innerHTML = text;
    }
  }


  //--------------------------------------------------
  this.hotlink = function() {
    // This method calls the hotlink() method for the current slide.
  
    this.slides[ this.current ].hotlink();
  }


  //--------------------------------------------------
  this.save_position = function(cookiename) {
    // Saves the position of the slideshow in a cookie,
    // so when you return to this page, the position in the slideshow
    // won't be lost.
  
    if (!cookiename) {
      cookiename = this.name + '_slideshow';
    }
  
    document.cookie = cookiename + '=' + this.current;
  }


  //--------------------------------------------------
  this.restore_position = function(cookiename) {
  // If you previously called slideshow_save_position(),
  // returns the slideshow to the previous state.
  
    //Get cookie code by Shelley Powers
  
    if (!cookiename) {
      cookiename = this.name + '_slideshow';
    }
  
    var search = cookiename + "=";
  
    if (document.cookie.length > 0) {
      offset = document.cookie.indexOf(search);
      // if cookie exists
      if (offset != -1) { 
        offset += search.length;
        // set index of beginning of value
        end = document.cookie.indexOf(";", offset);
        // set index of end of cookie value
        if (end == -1) end = document.cookie.length;
        this.current = parseInt(unescape(document.cookie.substring(offset, end)));
        }
     }
  }


  //--------------------------------------------------
  this.noscript = function() {
    // This method is not for use as part of your slideshow,
    // but you can call it to get a plain HTML version of the slideshow
    // images and text.
    // You should copy the HTML and put it within a NOSCRIPT element, to
    // give non-javascript browsers access to your slideshow information.
    // This also ensures that your slideshow text and images are indexed
    // by search engines.
  
    $html = "\n";
  
    // Loop through all the slides in the slideshow
    for (i=0; i < this.slides.length; i++) {
  
      slide = this.slides[i];
  
      $html += '<P>';
  
      if (slide.link) {
        $html += '<a href="' + slide.link + '">';
      }
  
      $html += '<img src="' + slide.src + '" ALT="slideshow image">';
  
      if (slide.link) {
        $html += "<\/a>";
      }
  
      if (slide.text) {
        $html += "<BR>\n" + slide.text;
      }
  
      $html += "<\/P>" + "\n\n";
    }
  
    // Make the HTML browser-safe
    $html = $html.replace(/\&/g, "&amp;" );
    $html = $html.replace(/</g, "&lt;" );
    $html = $html.replace(/>/g, "&gt;" );
  
    return('<pre>' + $html + '</pre>');
  }


  //==================================================
  // Private methods
  //==================================================

  //--------------------------------------------------
  this.loop = function() {
    // This method is for internal use only.
    // This method gets called automatically by a JavaScript timeout.
    // It advances to the next slide, then sets the next timeout.
    // If the next slide image has not completed loading yet,
    // then do not advance to the next slide yet.

    // Make sure the next slide image has finished loading
    if (this.current < this.slides.length - 1) {
      next_slide = this.slides[this.current + 1];
      if (next_slide.image.complete == null || next_slide.image.complete) {
        this.next();
      }
    } else { // we're at the last slide
      this.next();
    }
    
    // Keep playing the slideshow
    this.play( );
  }


  //--------------------------------------------------
  this.valid_image = function() {
    // Returns 1 if a valid image has been set for the slideshow
  
    if (!this.image)
    {
      return false;
    }
    else {
      return true;
    }
  }

  //--------------------------------------------------
  this.getElementById = function(element_id) {
    // This method returns the element corresponding to the id

    if (document.getElementById) {
      return document.getElementById(element_id);
    }
    else if (document.all) {
      return document.all[element_id];
    }
    else if (document.layers) {
      return document.layers[element_id];
    } else {
      return undefined;
    }
  }
  

  //==================================================
  // Deprecated methods
  // I don't recommend the use of the following methods,
  // but they are included for backward compatibility.
  // You can delete them if you don't need them.
  //==================================================

  //--------------------------------------------------
  this.set_image = function(imageobject) {
    // This method is deprecated; you should use
    // the following code instead:
    // s.image = document.images.myimagename;
    // s.update();

    if (!document.images)
      return;
    this.image = imageobject;
  }

  //--------------------------------------------------
  this.set_textarea = function(textareaobject) {
    // This method is deprecated; you should use
    // the following code instead:
    // s.textarea = document.form.textareaname;
    // s.update();

    this.textarea = textareaobject;
    this.display_text();
  }

  //--------------------------------------------------
  this.set_textid = function(textidstr) {
    // This method is deprecated; you should use
    // the following code instead:
    // s.textid = "mytextid";
    // s.update();

    this.textid = textidstr;
    this.display_text();
  }
}

<!--
 
// Create the slideshow object
ss = new slideshow('ss');
 
// Set the delay between slides, 1000 = 1 sec
// ss.timeout = 3000;
 
// By default, all of the slideshow images are prefetched.
// If you have a large number of slides you can limit the
// number of images that are prefetched.
// ss.prefetch = 1;
 
// By default the slideshow will repeat when you get to the end.
// ss.repeat = false;
 
// Create the slides and add them to the slideshow.
s = new slide();
s.src =  'http://www.hitechcontrols.com/images/index-page/slides/cables.jpg';
s.link = 'http://www.hitechcontrols.com/cable_index.htm';
s.title = 'Cables &amp; Wires';
s.text = '<span class="style187"><a href="http://www.hitechcontrols.com/cable_index.htm">Cables &amp; Wires: Domestic and International</a></span><br /><br /><span class="style94">Your Special Cable May Be Our Standard!<br />Exclusive North American importer of HELUKABELŪ. A one stop source for wires and cables requiring RoHS, UL, CSA, Harmonized &amp; CE approvals. We offer wires for Power, Control, High/Low Temp., Hi-Flex, Robotic, Drag Chain, Servo, VFD, Composite, Ribbon, Data (CAT), Single Conductor, Etc!<br /><br /><span class="style187">Featured Cables:</span><br /><br /><span class="style187">Rubber / All-Weather Cable</span><br /><strong><a href="http://www.hitechcontrols.com/cables/rubber_welding_cables/rubber_welding_cables/h05rrf_h05rnf.html">H05 RN-F</a></strong><strong> / </strong><a href="http://www.hitechcontrols.com/cables/rubber_welding_cables/rubber_welding_cables/h07_rnf.html"><strong>H07 RN-F</strong></a><img src="http://www.hitechcontrols.com/images/approvalpics/small_approvalpics/euro.gif" alt="Euro" width="23" height="17" align="right" /><img src="http://www.hitechcontrols.com/images/approvalpics/small_approvalpics/vde.gif" alt="VDE" width="27" height="17" align="right" /><img src="http://www.hitechcontrols.com/images/approvalpics/small_approvalpics/pct.gif" alt="PCT" width="17" height="17" align="right" /><img src="http://www.hitechcontrols.com/images/approvalpics/small_approvalpics/rohs.gif" alt="RoHS Approved" width="45" height="30" align="right" /><br />&bull; Harmonized / Oil Resistant<br />&bull; Working Voltage<br />&bull; Temperature Range: -22&deg;F to 140&deg;F (-30&deg;C to +60&deg;C)<br />&bull; Dry, Damp &amp; Wet Areas, Outdoor Applications<br />&bull; Typical Applications: Boilers, Heating Plates, Hand Lamps, Electric Tools, Lifts, Cranes, etc.<br /><br /><span class="style187">Hook-Up Wire<br /><a href="http://www.hitechcontrols.com/harmonizedcable/harmonized/fivenorm.html">FIVENORM</a> / <a href="http://www.hitechcontrols.com/harmonizedcable/harmonized/threenorm.html">THREENORM</a></span><a href="http://www.hitechcontrols.com/cables/international_standards/selection_pages/Overall_selection.html#single"><img src="http://www.hitechcontrols.com/images/index-page/fivenorm-threenorm.jpg" alt="Fivenorm / Threenorm" width="225" height="66" border="0" align="right" /></a><img src="http://www.hitechcontrols.com/images/approvalpics/small_approvalpics/ul_csa.gif" alt="UL / CSA Approvals" align="right" width="48" height="17" /><img src="http://www.hitechcontrols.com/images/approvalpics/small_approvalpics/euro.gif" align="right" alt="Euro" width="23" height="17" /><img src="http://www.hitechcontrols.com/images/approvalpics/small_approvalpics/rohs.gif" align="right" alt="RoHS Approved" width="45" height="30" /><br />&bull; FIVENORM Approvals: HAR-UL-CSA-CE-AMW-MTW<br />&bull; THREENORM Approvals: HAR-UL-CSA-CE<br />&bull; PVC Single Conductors, UL-Style 1015, 600V, 221&deg;F (105&deg;C)<br /></span>';
s.target = '_blank';
//s.attr = '';
//s.filter = '';
//s.timeout = '';
ss.add_slide(s);

s = new slide();
s.src =  'http://www.hitechcontrols.com/images/index-page/slides/enclosures.jpg';
s.link = 'http://www.hitechcontrols.com/enclosure-selection.html';
s.title = 'Industrial Enclosures';
s.text = '<span class="style187"><a href="http://www.hitechcontrols.com/enclosure-selection.html">Industrial Enclosures</a></span><br /><br /><span class="style94">Exclusive importer of <strong>HENSEL &amp; HUMMEL</strong> Industrial Enclosures in North America.<br />Industrial Strength, UV &amp; Impact Resistant, Modular Expandable and Attractive for Indoor or Outdoor applications. Opaque / Transparent covers. Hinged! Exceptional Value! Accessories include DIN rails, Mounting plates, Terminal blocks, Hole plugs, Strain Relief Fittings, Adapters, Etc. International and Domestic Approvals.<br /><br /><a href="http://www.hitechcontrols.com/productsselection_enclosure.htm"><img src="http://www.hitechcontrols.com/images/index-page/slides/small/enclosures.jpg" alt="Industrial Enclosures" width="125" height="113" border="0" align="right" /></a><strong>Materials:</strong> Polycarbonate, ABS (Acryl-Butadiene-Styrene), Aluminum, Steel/Stainless Steel and Polyester.<br /><br /><strong>Types:</strong> Gray or Transparent Lids, available with Hinges and Latches, Plain Walls or Knockouts, Hazardous Location, Fire Proof, Offshore Applications<br /><br /><hr /><br /><span class="style94">We Think Outside the Box!</span><br /><br /><a href="http://www.hitechcontrols.com/alu_enc_index.htm"><img src="http://www.hitechcontrols.com/images/index-page/alu-enclosure.jpg" alt="Aluminum Enclosure" width="125" height="106" border="0" align="left" /></a><span class="style187"><a href="http://www.hitechcontrols.com/alu_enc_index.htm">Aluminum Industrial Enclosures</a></span><br />Custom Customize your own Control Solution Device with the following Cord Grips, Momentary Push Buttons, Etc. NEMA Enclosure Rating: 4, 4x (IP66). We offer 1, 2 and 3 Button Solutions. Industrial Enclosures are made of Powder Coated Gray Die Cast Aluminum alloy. We do the assembly at one low price.</span>';
s.target = '_blank';
ss.add_slide(s);
 
s = new slide();
s.src =  'http://www.hitechcontrols.com/images/index-page/slides/camozzi.jpg';
s.link = 'http://www.hitechcontrols.com/camozzi/index.htm';
s.title = 'Camozzi Pneumatics';
s.text = '<span class="style187"><a href="http://www.hitechcontrols.com/camozzi/index.htm">Camozzi Pneumatics</a></span><br /><br /><span class="style94"><span class="style187">Fittings &amp; Accessories</span><br /><a href="http://www.hitechcontrols.com/camozzi/fittings/overview.html"><img src="http://www.hitechcontrols.com/images/index-page/slides/small/camozzi-fittings.jpg" alt="Camozzi Fittings" width="200" height="68" border="0" align="left" /></a>Camozzi offers a large selection of fittings and accessories suitable for a wide range of applications. Super-rapid fittings and accessories are available in different dimensions from M5 [10-32 UNF] to 1/2" NPTF. Our fittings range includes the patented and longstanding Pro-FitŪ system that guarantees tightening or sealing and facilitates the repeated removal and reassembly of the fitting.<br /><br /><a href="http://www.hitechcontrols.com/camozzi/valves/overview.html"><img src="http://www.hitechcontrols.com/images/index-page/slides/small/logic-valves.jpg" alt="Flow Control Valves" width="175" height="105" border="0" align="right" /></a><span class="style187">Flow Control Valves</span><br /><span class="style94">Camozzi realizes the importance of these valves especially as actuator performance depends essentially on the right choice of automatic valve. The range includes flow regulators, quick release valves, flow control valves, basic logic functions and silencers with different specifications in order to meet most requirements.<br /><br /><img src="http://www.hitechcontrols.com/images/index-page/slides/small/cylinders.jpg" alt="Cylinders" width="56" height="75" border="0" align="left" /><span class="style187">Cylinders</span><br />Mini-Cylinders, Guided, Magnetic, Stainless Steel, Rodless, Rod Lock Cylinders, etc.</span>';
s.target = '_blank';
ss.add_slide(s);

s = new slide();
s.src =  'http://www.hitechcontrols.com/images/index-page/slides/srf.jpg';
s.link = 'http://www.hitechcontrols.com/strainrelief/srf-index.html';
s.title = 'Liquid Tight Strain Relief Fittings';
s.text = '<span class="style187"><a href="http://www.hitechcontrols.com/strainrelief/srf-index.html">Liquid Tight Strain Relief Fittings / Cord Grips / Cable Glands</a></span><br /><br /><span class="style94"><a href="http://www.hitechcontrols.com/strainrelief/srf-index.html"><img src="http://www.sealconusa.com/images/index-page/srf-nylon-sm.jpg" align="left" alt="Nylon Strain Relief Fittings / Cord Grips / Cable Glands" border="0" /></a>Nylon Fittings<br />Standard, Elongated Thread, Reduced / Enlarged Body, Snap Elbow, Multi-Hole, Romex&reg; - Flat Cable Insert, High Performance w/ Clamp (Nylon/Aluminum)</span><br /><br /><hr /><br /><span class="style94"><img src="http://www.sealconusa.com/images/index-page/srf-brass-sm.jpg" align="left" alt="Nickel Plated Brass Strain Relief Fittings / Cord Grips / Cable Glands" border="0" />Nickel Plated Brass Fittings<br />Standard, Elongated Thread, Snap Elbow, EMI/ RFI Standard &amp; Feed-Through,  Multi-Hole, Mini Wadi &amp; Wadi XL (Smallest &amp; Largest Cable O.D.), High Performance w/ Clamp</span><br /><br /><hr /><br /><span class="style94"><img src="http://www.sealconusa.com/images/index-page/srf-pvdf-sm.jpg" align="left" alt="PVDF &amp; Stainless Steel Strain Relief Fittings / Cord Grips / Cable Glands" border="0" />PVDF &amp; Stainless Steel Fittings<br /><strong>PVDF:</strong> Teflon or Nickel Plated Brass, w/ Viton&reg; Insert, Standard or Elongated<br /><strong>Stainless Steel:</strong> Standard 304 - High Performance/ High &amp; Low Temp./ Corrosion Resistant (316 INOX Stainless Steel available on request)</span>';
s.target = '_blank';
ss.add_slide(s);

s = new slide();
s.src =  'http://www.hitechcontrols.com/images/index-page/slides/connectors.jpg';
s.link = 'http://www.hitechcontrols.com/connectors/connector-index.html';
s.title = 'Circular Connectors';
s.text = '<span class="style187"><a href="http://www.hitechcontrols.com/connectors/connector-index.html">Circular Connectors</a></span><br /><br /><span class="style94"><strong>Sizes:</strong> M16, M23, M27, M40<br /><strong>Configurations:</strong> Signal (3-28 pole) &amp; Power (6 &amp; 8 pole)<br /><strong>Types:</strong> Push-Pull (Quick Disconnect), Straight, Elbow, Panel Mount, Single Hole &amp; Rotatable Elbow, RJ45 - Industrial Ethernet, Profinet, Over-molded Cordsets, Standard/EMI Ready.<br /><strong> Materials:</strong> Nickel Plated Brass, Stainless Steel and Aluminum. <br /><strong>Approvals:</strong> RoHS, Deca BDE, UR, UL, CSA, T&Uuml;V, etc.<hr /><span class="style187">Unique Features & Benefits of our Circular Connectors</span><br /><br /><img src="http://www.sealconusa.com/images/index-page/connector-disassembled.jpg" align="left" alt="Circular Connectors" border="0" /><span class="style94"><strong>1. Flexible EMI-O-Ring:</strong> reliable EMI protection for light and heavy braided shields<br /><strong>2. Euro-Lock&reg; Solution:</strong> secures the few manageable parts, no tools required <br /><strong>3. Easy Cable Assembly & Shielding:</strong> possible in a single operation, trimming of braided shield not necessary for insertion into connector housing <br /><strong>4. Strain Relief Insert:</strong> w/ four fingers, secured in a recess, prevents cable rotation <br /><strong>5. Versatility of Connectors:</strong> fewer parts make assembly and wiring cost effective <br /><strong>6. Flexibility due to modularity:</strong> male and female contact inserts work with all different style M23 Power Connectors</span>';
s.target = '_blank';
ss.add_slide(s);

s = new slide();
s.src =  'http://www.hitechcontrols.com/images/index-page/slides/conduit.jpg';
s.link = 'http://www.hitechcontrols.com/conduit/conduit-index.html';
s.title = 'Conduit System';
s.text = '<span class="style187"><a href="http://www.hitechcontrols.com/conduit/conduit-index.html">Conduit System</a></span><br /><br /><span class="style94">High Pull-Out Resistance, Robust Performance, Long Life Expectancy, Fastest/ Easy installation, No Tools required!<br /><br /><strong>Fittings:</strong> Push-In, Turn-to-Seal, Snapclic DUO (Nylon or Nickel Plated Brass), Double-Seal, Flange/Bulkhead<strong><br />Conduit:</strong> Standard and Super Flex Corrugated Conduit<br /><strong>Accessories:</strong> Snap-In Mounting Brackets. NEMA 4 (IP 54/65)<br /><strong>Approvals:</strong> RoHS, Deca BDE, UR, German Lloyd, CE, etc.<br /><br /><hr /><br /><img src="http://www.sealconusa.com/images/index-page/conduit-cable.jpg" align="right" alt="Conduit System" border="0" />Electrical Conduit provides protection to enclosed single or multi-conductors from impact, moisture, and chemical vapors.<br />Varying quantities, sizes, and types of conductors can be pulled into a Conduit, which simplifies design and construction compared to multiple runs of cables or the expense of customized composite cables.<br />Conduit Systems can be made waterproof.<br />To prevent conductor breakages, the use of Conduit tubing is recommended.<br />Advantage of using our Conduit System: Individual conductors are given sufficient flexibility, this prevents tension stress. And the connections provide security against penetration of fluids.</span>';
s.target = '_blank';
ss.add_slide(s);

 
// The following loop sets an attribute for all of the slides.
// This is easier than setting the attributes individually.
 
for (var i=0; i < ss.slides.length; i++) {
 
  s = ss.slides[i];
  s.target = "ss_popup";
  s.attr = "width=800,height=600,resizable=yes,scrollbars=yes";
 
}

 // js accordion menu in footer
 var slideMenu=function(){
	var sp,st,t,m,sa,l,w,sw,ot;
	return{
		build:function(sm,sw,mt,s,sl,h){
			sp=s; st=sw; t=mt;
			m=document.getElementById(sm);
			sa=m.getElementsByTagName('li');
			l=sa.length; w=m.offsetWidth; sw=w/l;
			ot=Math.floor((w-st)/(l-1)); var i=0;
			for(i;i<l;i++){s=sa[i]; s.style.width=sw+'px'; this.timer(s)}
			if(sl!=null){m.timer=setInterval(function(){slideMenu.slide(sa[sl-1])},t)}
		},
		timer:function(s){s.onmouseover=function(){clearInterval(m.timer);m.timer=setInterval(function(){slideMenu.slide(s)},t)}},
		slide:function(s){
			var cw=parseInt(s.style.width,'10');
			if(cw<st){
				var owt=0; var i=0;
				for(i;i<l;i++){
					if(sa[i]!=s){
						var o,ow; var oi=0; o=sa[i]; ow=parseInt(o.style.width,'10');
						if(ow>ot){oi=Math.floor((ow-ot)/sp); oi=(oi>0)?oi:1; o.style.width=(ow-oi)+'px'}
						owt=owt+(ow-oi)}}
				s.style.width=(w-owt)+'px';
			}else{clearInterval(m.timer)}
		}
	};
}();
 // End js accordion menu in footer
//-->

