	var hReq = new Array();     // ARRAY OF XML-HTTP REQUESTS
	var xIDX = new Array(0);    // ARRAY OF XML-HTTP REQUEST INDEXES
	xIDX[0] = 1;                // FIRST INDEX SET TO 1 MAKING IT AVAILABLE
	var rIDX;
	
	if(typeof $ != "function"){
    function $(elem){return document.getElementById(elem);}
  }

	function newRequestObj() {
		// find the correct xmlHTTP, works with IE, FF and Opera
		var xmlhttp;
	
		try {
			xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e) {
		  try {
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		  }
		  catch(e) {
			xmlhttp=null;
		  }
		}
		
		if(!xmlhttp&&typeof XMLHttpRequest!="undefined") {
			xmlhttp=new XMLHttpRequest();
		}
		
		return  xmlhttp;
	}
	  
	function getAvailableIDX() {
		var rIDX = xIDX.length;
		
		//go through available xi values
		for (var i=0; i<xIDX.length; i++) {
			//if it's 1 (available), allocate it for use and break
			if (xIDX[i] == 1) {
				xIDX[i] = 0;
				rIDX = i;
				break;
			}
		}
		
		return rIDX;
	}		
	
	function requestURL(url, product_weight, zip_code, output){
		var params = "url=" + url + "&rs=calculate_shippingRates&weight=" + product_weight + "&zip_code=" + zip_code + "&rsrnd=" + new Date().getTime();
		
		rIDX = getAvailableIDX();
		
		xIDX[rIDX] = 0;
		hReq[rIDX] = newRequestObj();
			
		hReq[rIDX].onreadystatechange = function() {
			if (hReq[rIDX].readyState == 4) {
				if (hReq[rIDX].status == 200) {
					output(hReq[rIDX].responseText);			  
				} else {
					//alert("error encountered - " + url + " = " + params);
				}
				
				xIDX[rIDX] = 1;
				hReq[rIDX] = null;
			}
		};
		
		hReq[rIDX].open('GET', "../process/calculate.php?" + params, true);
		hReq[rIDX].send(null);
	}
	/*
	function postParams(url,params,output) {
		rIDX = getAvailableIDX();
		
		xIDX[rIDX] = 0;
		hReq[rIDX] = newRequestObj();
			
		hReq[rIDX].onreadystatechange = function() {
			if (hReq[rIDX].readyState == 4) {
				if (hReq[rIDX].status == 200) {
					output(hReq[rIDX].responseText);			  
				} else {
					//alert("error encountered - " + url + " = " + params);
				}
				
				xIDX[rIDX] = 1;
				hReq[rIDX] = null;
			}
		};
		
		hReq[rIDX].open('POST', url, true);
		hReq[rIDX].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		hReq[rIDX].setRequestHeader("Content-length", params.length);
		hReq[rIDX].setRequestHeader("Connection", "close");
		hReq[rIDX].send(params);
	}*/
	
	function clear(objID) {
		document.getElementById(objID).innerHTML = '';
	}

	function showDiv(div_id) {
		document.getElementById(div_id).style.display = 'block';
	}

	function hideDiv(div_id) {
		document.getElementById(div_id).style.display = 'none';
	}
  
  function getParams(objFrm){
      var str = "";
      for(var v=0;v<objFrm.elements.length;v++){
          var _obj = objFrm.elements[v];
          if(_obj.getAttribute("name") != ""){
              var _type = _obj.getAttribute("type");
              if(_type != "checkbox" || _obj.checked){
                  if(str!="") str += "&";
                  str += objFrm.elements[v].name;      
                  str += "=";
                  str += escape(_obj.value);
              }
          }
      }
      return str;
  }		
  
  function _request(url,params,output) {
		rIDX = getAvailableIDX();

		xIDX[rIDX] = 0;
		hReq[rIDX] = newRequestObj();		         
        	
		hReq[rIDX].onreadystatechange = function() {
		
			if (hReq[rIDX].readyState == 4) {
				if (hReq[rIDX].status == 200) {				  
					output(hReq[rIDX].responseText);			  
				} else {
					//alert("error encountered - " + url + " = " + params);
					if(hReq[rIDX].status == 500){
					  var _text = hReq[rIDX].responseText;
					  if(_text != ""){
					    output(_text);
					  }
					}

				}
				
				//xIDX[rIDX] = 1;
				//hReq[rIDX] = null;
			}
		};
				
		hReq[rIDX].open('POST', url, true);
		hReq[rIDX].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		hReq[rIDX].setRequestHeader("Content-length", params.length);
		hReq[rIDX].setRequestHeader("Connection", "close");
		hReq[rIDX].send(params);
	}
	
	function request(url,params,output) {
    		
		_reqObj = newRequestObj();		         
        	
		_reqObj.onreadystatechange = function() {
		
			if (_reqObj.readyState == 4) {
				if (_reqObj.status == 200) {				  
					output(_reqObj.responseText);			  
				} else {
					//alert("error encountered - " + url);
					//top.location.replace(top.location);
				}
								
			}
		};
				
		_reqObj.open('POST', url, true);
		_reqObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		_reqObj.setRequestHeader("Content-length", params.length);
		_reqObj.setRequestHeader("Connection", "close");
		_reqObj.send(params);
	}
