// SIMPLE AJAX FUNCTIONS
// Should support multiple AJAX calls from same page now.
// Originally simpleAJAX.js but customized for features within IDX realm.
// Some of these additional features may be useful in application outside of
// IDX realm.
//
// Created by CR : 9/1/10

//var targetID = 'ajaxdata';

var ajaxAsync = false;

function AJAXInteraction(url, targetID, callback) {

    var req = init();
    req.onreadystatechange = processRequest;
        
    function init() {
      if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
    
    function processRequest () {
      if (req.readyState == 4) {
        if (req.status == 200) {
          if (callback) callback(targetID, req.responseText);
        }
      }
    }

    this.doGet = function() {
      req.open("GET", url, ajaxAsync);
      req.send(null);
    }
    
    this.doPost = function(body) {
      req.open("POST", url, ajaxAsync);
      req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      req.send(body);
    }
}

function ajaxLoad(sourceURL,currentTargetID) {
	//alert(sourceURL + " " + currentTargetID);
  	var ai = new AJAXInteraction(sourceURL, currentTargetID, validateResponse);
  	ai.doGet();
	//ai.doPost();
}

function ajaxLoadPost(sourceURL,currentTargetID,postStr) {
	//alert(sourceURL + " " + currentTargetID);
  	var ai = new AJAXInteraction(sourceURL, currentTargetID, validateResponse);
  	//ai.doGet();
	ai.doPost(postStr);
}

function ddUpdate(selectedClass){
	var file = 'processQuery.html';
	ajaxLoad('/idx/getQuery.php?class='+selectedClass,'searchOptions');
	str = "ajaxCount=1&SOURCE=query&CLASS="+selectedClass;
	ajaxLoadPost(file,'resultCounter',str);
	
}

function validateResponse(targetID, myResponse){
	if(myResponse != ''){
		document.getElementById(targetID).innerHTML = parseScript(myResponse);
	}
}


// For evaluating JS in AJAX CALL
// Needs more work and testing
function parseScript(_source) {
		var source = _source;
		var scripts = new Array();
 
		// Strip out tags
		while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {
			var s = source.indexOf("<script");
			var s_e = source.indexOf(">", s);
			var e = source.indexOf("</script", s);
			var e_e = source.indexOf(">", e);
 
			// Add to scripts array
			scripts.push(source.substring(s_e+1, e));
			// Strip from source
			source = source.substring(0, s) + source.substring(e_e+1);
		}
 
		// Loop through every script collected and eval it

		for(var i=0; i<scripts.length; i++) {
			if(scripts[i] != ''){
				try {
					eval(scripts[i]);
				}
				catch(ex) {
					// do what you want here when a script fails
				}
			}
		}
		// Return the cleaned source
		return source;
}

function ddChangeEvent(dd){
	if(!dd){
		var idx = document.getElementById('catID');
		var val = idx.value;
	}else{
		var idx = dd.selectedIndex;
 		var val = dd[idx].value;
  	}
		//alert(val);
	ajaxLoad('/sales/quicksearch.pl?pc='+val,'ajaxdata8');
	ajaxLoad('/sales/quicksearch.pl?pc='+val+'&item=2','ajaxdata9');
}


function sub(f)
{
   if(f){	
	   var file = 'processQuery.html'
	   var str = getFormValues(f,"validate");
	   
		//alert(str);
	   ajaxLoadPost(file,'resultCounter',str);
	   //alert(xmlReq);
	}
}

function updateObj(obj, data)
{
	if(document.getElementById(obj)){
		document.getElementById(obj).innerHTML = data;
	}
}
function checkResultTotal(obj, limit, f)
{
//alert(document.SearchForm);
	ajaxAsync = false;
	sub(document.SearchForm);
	currentTotal = document.getElementById(obj).innerHTML;
	if(currentTotal > limit){
		alert("Please refine your search so that "+limit+" or less listings match your criteria.");
		return false;
	}else{
		return true;
	}
}
function getFormValues(fobj,valFunc){
	var str = "ajaxCount=1&";
    var valueArr = null;
    var val = "";
    var cmd = "";
    for(var i = 0;i < fobj.elements.length;i++){
		//alert(fobj.elements[i].type + " = " + encodeURIComponent(fobj.elements[i].value));
    	switch(fobj.elements[i].type){
	        case "text":
	            str += fobj.elements[i].name + "=" + encodeURIComponent(fobj.elements[i].value) + "&";
            break;
	        case "hidden":
           		str += fobj.elements[i].name + "=" + encodeURIComponent(fobj.elements[i].value) + "&";
            break;
            case "select-one":
				// if(fobj.elements[i].selectedIndex != 0){ // original 
				if (fobj.elements[i].options[fobj.elements[i].selectedIndex].value != '') {
            		str += fobj.elements[i].name + "=" + encodeURIComponent(fobj.elements[i].options[fobj.elements[i].selectedIndex].value) + "&";
				}
            break;
			
			case "select-multiple":
				if (fobj.elements[i].selectedIndex > -1){
    				for (var j=0, x=fobj.elements[i].selectedIndex; x<fobj.elements[i].options.length;x++){
      					if (fobj.elements[i].options[x].selected){
							str += fobj.elements[i].name + "=" + encodeURIComponent(fobj.elements[i].options[x].value) + "&";
						}
					}
 				}
			break;
			case "checkbox":
				if (fobj.elements[i].checked) {
            		str += fobj.elements[i].name + "=" + encodeURIComponent(fobj.elements[i].value) + "&";
				}
            break;
			case "radio":
				if (fobj.elements[i].checked) {
            		str += fobj.elements[i].name + "=" + encodeURIComponent(fobj.elements[i].value) + "&";
				}
            break;
       }
	}

	str = str.substr(0,(str.length - 1));
	//alert(str);
    return str;
}

function resetQuery(){
	currentClass = document.getElementById("class").value
	window.location = "/idx/query.html?class="+currentClass;


}


// END AJAX SECTION

// MISC JS used in IDX

function showHiddenItem(itemID){
	var e=document.getElementById(itemID);
	if(!e)return true;
	if(e.style.display=="none"){
		e.style.display="block"
	}else{
		e.style.display="none"
	}
	return false;
}

function MM_openBrWindow(theURL,winName,features,propID) {
  var myLocation = location.href;
  var newLoc;
  newLoc = theURL + "?REFERER=" + escape(myLocation);
  window.open(newLoc,winName,features);
}


