  /***************************************************************************************
	****                       AJAX Support Functions
	***************************************************************************************/
	
		var receiveReq = getXmlHttpRequestObject();
		
		//Gets the browser specific XmlHttpRequest Object
		function getXmlHttpRequestObject() {
			if (window.XMLHttpRequest) {
				return new XMLHttpRequest();
			} else if(window.ActiveXObject) {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} else {
				alert('Cound not create XmlHttpRequest Object.  Consider upgrading your browser.');
			}
		}
    
  /***************************************************************************************
	****                       Command Queue
	***************************************************************************************/
	var queueTiming = 50;
	var commandQueue = new Array;
	
	function queue(func, command) {

	  if(queueInterval > queueTiming) {
	    clearInterval(queueInterval);
	    queueInterval = setInterval("queue('run')", 50);
	  }
	  if(func == "add") commandQueue.unshift(command);
	  if(func == "run") {
	    if(receiveReq) {
		    if(commandQueue.length > 0) {
		    	if(receiveReq.readyState == 4 || receiveReq.readyState == 0) {
		    		eval(commandQueue.pop());
		    	}
		    }
	    }
	  }
	}
	
	queueInterval = setInterval("queue('run')", 50);

  /***************************************************************************************
	****                       Function to retrive variables
	***************************************************************************************/

		function get_var(varname) {
			if (document.layers) { //checks for Netscape 4
							myVar = eval('document.' + varname);
						} else if (document.all && !document.getElementById) { //checks for IE 4
							myVar = eval('document.all.' + varname);
						} else if (document.getElementById) { //Checks for Netscape 6 & IE 5
							myVar = document.getElementById(varname);
						}
	
			if(!myVar) return '';
			else return myVar;
		}

    /***************************************************************************************
    	****                       Function to show / hide select boxes
    	***************************************************************************************/
    function HideSelectboxes() {
      if (!document.getElementsByTagName) { return; }
      var anchors = document.getElementsByTagName("select");

      //  Loop through all <select> elements
      for (var i=0; i<anchors.length; i++) {
        var anchor = anchors[i];
        anchor.style.visibility='hidden';
      }
    }
    
    function ShowSelectboxes() {
      if (!document.getElementsByTagName) { return; }
      var anchors = document.getElementsByTagName("select");

      //  Loop through all <select> elements
      for (var i=0; i<anchors.length; i++) {
        var anchor = anchors[i];
        anchor.style.visibility='visible';
      }
    }
  /****************************************************************************************
     ****                  Function to load select with returned SELECT | AJAX
     *****************************************************************************************/
     
     function show_models(make, id) {
       if(make != "") {
         if(receiveReq.readyState == 4 || receiveReq.readyState == 0) {
           receiveReq.open("GET", "/includes/ajax.php?action=get_models&make=" + make + "&id=" + id, true);
           receiveReq.onreadystatechange = handle_show_models;
           receiveReq.send(null);
         }
       }
     }
     
     function handle_show_models() {
       if(receiveReq.readyState == 4) {
         var response = eval("(" + receiveReq.responseText + ")");
         if(response.models != "" && response.span_id != "") {
           get_var(response.span_id).innerHTML = response.models;
         }
       }
     }
     
    
    function hasClass (obj, className) {
      if (typeof obj == 'undefined' || obj==null || !RegExp) { return false; }
      
      var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
      if (typeof(obj)=="string") {
        return re.test(obj);
      } 
      else if (typeof(obj)=="object" && obj.className) {
        return re.test(obj.className);
      }
      return false;
    }
  /****************************************************************************************
     ****                  Function to add another car AJAX
     *****************************************************************************************/
     
    function add_car() {
      var added = false;
      var checked = 1;
      while(added == false) {
        if(get_var('models_' + checked).style.display == 'none') {
          get_var('models_' + checked).style.display = 'block';
          get_var('model_' + checked + '_enabled').value = 'true';
          break;
        }
        if(checked >= 50) {alert('maximum of 50 models per product'); break;} else { checked++; }
      }
    }
    
    /****************************************************************************************
           ****                  Function to  return the picture frame
           *****************************************************************************************/
    
      function return_pics(product) {
        if(product != "") {
          get_var('images_frame').innerHTML = "";
          HideSelectboxes();
          scrolls = getScrollXY();
          get_var('images_container').style.top = scrolls[1] + 'px';
          get_var('images_loading').style.display = '';
          get_var('images_container').style.display = '';
          if(receiveReq.readyState == 4 || receiveReq.readyState == 0) {
            receiveReq.open("GET", "/includes/ajax.php?action=return_pics&product=" + product, true);
            receiveReq.onreadystatechange = handle_return_pics;
            receiveReq.send(null);
          }
        }
      }
      
      function handle_return_pics() {
        if(receiveReq.readyState == 4) {
           var response = eval("(" + receiveReq.responseText + ")");
           if(response.images != "") {
             get_var('images_frame').innerHTML = response.images;
             get_var('images_loading').style.display = 'none';
           }
        }
      }
      
      function getScrollXY() {
        var scrOfX = 0, scrOfY = 0;
        if( typeof( window.pageYOffset ) == 'number' ) {
          //Netscape compliant
          scrOfY = window.pageYOffset;
          scrOfX = window.pageXOffset;
        } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
          //DOM compliant
          scrOfY = document.body.scrollTop;
          scrOfX = document.body.scrollLeft;
        } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
          //IE6 standards compliant mode
          scrOfY = document.documentElement.scrollTop;
          scrOfX = document.documentElement.scrollLeft;
        }
        return [ scrOfX, scrOfY ];
      }
      
      
      