  
  /* copyright (c) 2009 Paul Durdin. All rights reserved. */

  // functions for handling product spec editing and display
  
  // AJAX call
  function specProcessCall( parameters, responseElement ) {
    http.onreadystatechange = function() {
      if( http.readyState == 4 ) {
        if( document.getElementById( responseElement ) ) document.getElementById( responseElement ).innerHTML = http.responseText;
        var ypos, exp = parent.window.hs.getExpander(), size = parent.window.hs.getPageSize();
        exp.reflow();
        ypos = Math.round((size.height - exp.y.size) / 2);
        if( ypos < 20 ) ypos = 20;
        
        exp.moveTo( exp.x.pos, ypos );
      }
    }
    
    http.open("post", "productSpecProcess.php", true);
    http.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
    // http.setRequestHeader( "Content-length", parameters.length );
    // http.setRequestHeader( "Connection", "close" );
    http.send( parameters );
  }
  
  // submit spec-editing form
  function submitSpecForm( action, id, ajax, randomId ) {
    var formelement = document.getElementById( "specForm" ),
        inputs = formelement.getElementsByTagName( "input" ),
        selects = formelement.getElementsByTagName( "select" ),
        textareas = formelement.getElementsByTagName( "textarea" );
    
    document.getElementById( "formAction" ).value = action;
    document.getElementById( "formId" ).value = id;
    document.getElementById( "formAjax" ).value = ajax;
    
    query = new Array();
    
    var text;
    for( i in inputs ) {
      if( inputs[i].name && inputs[i].value ) {
        if( inputs[i].type == "checkbox" ) inputs[i].value = inputs[i].checked;
        text = inputs[i].value.replace( /&/g, "[amp]" );
        
        query.push( inputs[i].name + '=' + text );
        
        // if deleted a category or added a new one then reload the system editing stuff
        if( inputs[i].name.indexOf("delete_") > -1 && inputs[i].value == "true" ) {
          if( checkinput ) checkinput.value = "0";
        }
      }
    }
    for( i in selects ) {
      if( selects[i].name && selects[i].value ) {
        query.push( selects[i].name + '=' + selects[i].value );
      }
    }
    for( i in textareas ) {
      if( textareas[i].name && textareas[i].value ) {
        var text = textareas[i].value.replace( /&/g, "[amp]" );
        query.push( textareas[i].name + '=' + text );
      }
    }
    
    query = query.join('&');
    
    if( ajax ) specProcessCall( query, action + "Response" + randomId );
    else {
      document.getElementById( "formTarget" ).value = location.href;
      formelement.action = 'productSpecProcess.php';
      formelement.submit();
    }
  }
  
  // populate a form element with a value
  function populate( target, value ) {
    var elem = document.getElementById( target );
    
    if( elem ) elem.value = value;
  }
  
  // display a spec image in a popup
  function displayImage( event, id ) {
    var image = document.getElementById( "specImage" ),
        container = document.getElementById( "specImageContainer" );
    
    if( container.style.display == "block" && ( !id || image.className == "img" + id ) ) {
      container.style.display = "none";
    } else {
      container.style.left = event.clientX + 30 + "px";
      container.style.top = event.clientY - 15 + "px";
      image.src = "images/spec/" + id + ".jpg";
      image.className = "img" + id;
      container.style.display = "block";
    }
  }
  
  // display product brochure
  function displayBrochure( event, id, ajax, category ) {
    var query, content = document.getElementById( "productBrochureContent" ),
        link = document.getElementById( "productBrochureCompareLink" );
    
    if( category > 0 && link ) {
      link.onclick = function() { compareProducts( event, category, true, id, 0 ); avoidBubble(); }
    }
    
    if( ajax ) content.innerHTML = "<div class=\"loadingDiv\"><img src=\"images/ajax-loader-large.gif\" alt=\"Loading\" /></div>";
    
    query = "formAction=productBrochureDisplay&formAjax=1&formId=" + id;
    if( ajax ) specProcessCall( query, "productBrochureContent" );
    
    
    /* var elem = document.getElementById( "productBrochure" );
    var expander = hs.getExpander( elem );
    expander.reflow(); */
    
    avoidBubble( event );
  }
  
  // display product comparison form or results
  function compareProducts( event, category, form, productId, compareAll ) {
    var query, link = document.getElementById( "productBrochureCompareLink" ),
        content = document.getElementById( "productBrochureContent" );
    
    if( form ) {
      // display form
      query = "formAction=productCompareForm&formAjax=1&formId=" + category;
      
      if( productId ) query += "&productId=" + productId;
    } else {
      // submit form and display results
      var formelement = document.getElementById( "compareForm" ),
          inputs = formelement.getElementsByTagName( "input" );
      
      query = new Array();
      
      // get checkbox values first
      for( i in inputs ) {
        if( inputs[i].name ) {
          if( inputs[i].type == "checkbox" ) {
            if( compareAll ) inputs[i].value = "true";
            else inputs[i].value = inputs[i].checked;
          }
          
          query.push( inputs[i].name + '=' + inputs[i].value );
        }
      }
      
      query = query.join('&');
      query += "&formAction=productCompareResults&formAjax=1&formId=" + category;
    }
    content.innerHTML = "<div class=\"loadingDiv\"><img src=\"images/ajax-loader-large.gif\" alt=\"Loading\" /></div>";
    
    specProcessCall( query, "productBrochureContent" );
    avoidBubble( event );
  }
  
  // change selected image in brochure
  function changeBrochureImage( id ) {
    var brochureImage = document.getElementById( "productBrochureImageSelected" );
    
    if( !brochureImage ) return false;
    
    brochureImage.src = "images/spec/image" + id + ".jpg";
  }
  
  function avoidBubble( e ) {
    if ( !e ) var e = window.event;
  	if( e ) { 
      e.cancelBubble = true;
      if( e.stopPropagation ) e.stopPropagation();
      returnValue = false;
    }
  }