  
  /* copyright (c) 2009 Paul Durdin. All rights reserved. */

  // functions for handling system display and system editing
  
  
  /* DISPLAY FUNCTIONS */
  
  // expand or collapse a system category
  function expand_system_category( id ) {
    var q = document.getElementById("expand_" + id);
    var r = document.getElementById("category_container_" + id);
    var s = document.getElementById("category_selected_" + id);
    
    if( q.alt == "Expand" ) {
      r.style.display = "block";
      s.style.display = "none";
      q.src = "images/system_contract.png";
      q.alt = "Contract";
    } else {
      r.style.display = "none";
      s.style.display = "block";
      q.src = "images/system_expand.png";
      q.alt = "Expand";
    }
  }
  
  // update selected item display
  function update_system( category, product, multiple, image ) {
    var r = document.getElementById("category_container_" + category);
    if( multiple ) x = document.getElementById( "checkbox_" + category + "_" + product );
    else x = document.getElementsByName( "radio_" + category );
    
    if( multiple ) {
      if( x.checked == true ) {
        document.getElementById( "product_" + category + "_" + product ).style.background = "#e7e7e7";
        document.getElementById( "price_" + category + "_" + product ).name = "selected_price";
        document.getElementById( "pricedisplay_" + category + "_" + product ).className = "boldPrice";
      } else {
        document.getElementById( "product_" + category + "_" + product ).style.background = "white";
        document.getElementById( "price_" + category + "_" + product ).name = "unselected_price";
        document.getElementById( "pricedisplay_" + category + "_" + product ).className = "";
      }
    } else {
      var len = r.childNodes.length;
      for( var i = 0; i < len; i++ ) {
        if( r.childNodes[i].id ) {
          if( r.childNodes[i].id.substring( 0, 8 ) == "product_" ) r.childNodes[i].style.background = "white";
        }
      }
      document.getElementById( "product_" + category + "_" + product ).style.background = "#e7e7e7";
      
      len = x.length;
      for( var i = 0; i < len; i++ ) {
        if( x[i].checked == true ) document.getElementById( "pricedisplay_" + category + "_" + x[i].value ).className = "boldPrice";
        else document.getElementById( "pricedisplay_" + category + "_" + x[i].value ).className = "";
      }
      
      // set hidden inputs for totalling and ordering
      document.getElementById( "selected_item_" + category ).value = product;
      document.getElementById( "selected_price_" + category ).value = document.getElementById( "price_" + category + "_" + product ).value;
      
      // set visible data for collapsed category row
      document.getElementById( "selected_description_" + category ).innerHTML = document.getElementById( "description_" + category + "_" + product ).innerHTML;
      document.getElementById( "selected_pricedisplay_" + category ).innerHTML = document.getElementById( "pricedisplay_" + category + "_" + product ).innerHTML;
      if( image ) {
        document.getElementById( "selected_image_" + category ).src = "image.php?q=thumb&id=" + product;
        document.getElementById( "selected_image_" + category ).className = "";
      }
      if( !image ) document.getElementById( "selected_image_" + category ).className = "invisible";
    }
    update_system_total();
  }
  
  // update total cost
  function update_system_total() {
    var r = document.getElementsByName("selected_price");
    var s = document.getElementById("total_price");
    var total = 0;
    
    var len = r.length;
    for( var i = 0; i < len; i++ ) {
      if( r[i].value != undefined ) total += Number( r[i].value );
    }
    total = total.toFixed(2);
    s.innerHTML = total;
  }
  
  
  
  /* EDITING FUNCTIONS */
  
  // system-specific AJAX call (as opposed to general AJAX call in ajax.js)
  function systemProcessCall( url, parameters, type, id ) {
    http.onreadystatechange = function() {
      if( http.readyState == 4 ) {
        if( document.getElementById( type + "_" + id ) ) document.getElementById( type + "_" + id ).innerHTML = http.responseText;
        loadEditor( type, id );
      }
      
    }
    
    http.open("post", url, true);
    http.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
    http.setRequestHeader( "Content-length", parameters.length );
    http.setRequestHeader( "Connection", "close" );
    http.send( parameters );
  }
  
  // expand system type row
  function expandRow( id, expandid ) {
    var elem = document.getElementById( id );
    var expandelem = document.getElementById( expandid );
    if( elem && expandelem ) {
      if( elem.style.display == "table-row" ) {
        elem.style.display = "none";
        expandelem.innerHTML = "+";
      } else {
        elem.style.display = "table-row";
        expandelem.innerHTML = "-";
      }
    }
  }
  
  // load system/system category editors
  function loadEditor( type, id ) {
    var query = "action=" + type + "&id=" + id;
    
    http.onreadystatechange = function() {
      if( http.readyState == 4 ) {
        if( document.getElementById( type + "_" + id ) ) document.getElementById( type + "_" + id ).innerHTML = http.responseText;
      }
    }
    
    http.open( "post", "system_edit.php", true );
    http.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
    http.setRequestHeader( "Connection", "close" );
    http.send( query );
  }
  
  // submit an editing form (system or system category)
  function submit_system_form( type ) {
    var formelement = document.getElementById( type + "_editing_form" );
    var inputs = formelement.getElementsByTagName("input");
    var selects = formelement.getElementsByTagName("select");
    var textareas = formelement.getElementsByTagName("textarea");
    var formaction = document.getElementById( type + "_action" );
    var formid = document.getElementById( type + "_id" );
    var checkinput = document.getElementById( "opened_" + type + "_" + formid.value );
    
    query = new Array();
    
    var text;
    for(i in inputs) {
      if(inputs[i].name ) {
        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) {
        query.push( selects[i].name + '=' + selects[i].value );
      }
    }
    for(i in textareas) {
      if(textareas[i].name) {
        var text = textareas[i].value.replace( /&/g, "[amp]" );
        query.push( textareas[i].name + '=' + text );
      }
    }
    
    query = query.join('&');
    
    systemProcessCall( "system_process.php", query, type, formid.value );
    
    if( formaction.value == "category" ) {
      document.getElementById( "category_name_display_" + formid.value ).innerHTML = document.getElementById( "category_name_" + formid.value ).value;
      expandSelection( formid.value, "category" );
    } else if( formaction.value == "system" ) {
      if( document.getElementById( "new_category_" + formid.value ).value > 0 ) checkinput.value = 0;
      document.getElementById( "system_name_display_" + formid.value ).innerHTML = document.getElementById( "system_name_" + formid.value ).value;
    } else setTimeout( "location.reload()" , 500 );
    
  }
  
  // specific for submitting a system
  function submit_system_edit( type, elem ) {
    document.getElementById(type + "_action").value = elem.className;
    document.getElementById(type + "_id").value = elem.id;
    
    if( document.getElementById(type + "_image_" + elem.id).value || document.getElementById(type + "_full_image_" + elem.id).value ) {
      document.getElementById(type + "_ajax_form").value = "0";
      document.getElementById(type + "_editing_form").action = "system_process.php";
      document.getElementById(type + "_editing_form").submit();
    } else submit_system_form( type );
  }
  
  // highlight a row when editing
  function highlightSystemRow( checkbox, id ) {
    var row = document.getElementById( "row_" + id );
    
    if( checkbox.checked == true ) row.className = "includedProduct";
    else row.className = "newProduct";
  }
  
  // expand system details or system category details for editing
  function expandSelection( id, type ) {
    var responsediv = document.getElementById( type + "_" + id );
    var link = document.getElementById( "expand_" + type + "_" + id );
    var alreadyopened = document.getElementById( "opened_" + type + "_" + id );
    
    if( responsediv.style.display == "none" ) {
      responsediv.style.display = "block";
      if( alreadyopened.value == "0" ) {
        alreadyopened.value = "1";
        loadEditor( type, id );
      }
      link.innerHTML = "-";
    } else {
      responsediv.style.display = "none";
      link.innerHTML = "+";
    }
  }
  
  // show/hide none row for the category
  function displayNoneRow( category ) {
    var q = document.getElementById( "category_include_none_" + category );
    var r = document.getElementById( "category_none_row_" + category );
    
    if( q.checked == true ) r.style.display = "table-row";
    else r.style.display = "none";
  }
  
  // handle default checkboxes as radio buttons if not multiple select category
  function selectDefaultRow( category, product ) {
    var r = document.getElementsByTagName( "input" );
    var q = document.getElementById( "checkbox_" + category + "_" + product );
    var t = document.getElementById( "category_multiple_select_" + category );
    
    if( !t.checked ) {
      var len = r.length;
      for( var i = 0; i < len; i++ ) {
        if( r[i].id.indexOf( "checkbox_" + category ) == 0 ) {
          r[i].checked = false;
        }
      }
      q.checked = true;
    }
  }
  
  // enable default product dropdown for category listing in system editing view
  function toggleElement( checkbox, elem ) {
    if( checkbox.checked == true ) document.getElementById( elem ).disabled = false;
    else document.getElementById( elem ).disabled = true;
  }
  
  // expand and shrink textarea elements
  function expandElement( elem ) {
    if( elem ) elem.style.height = "300px";
  }
  function shrinkElement( elem ) {
    if( elem ) elem.style.height = "40px";
  }