//  AJAX example for Roxen CMS.//  Written by Jonas Walldén, jonasw@roxen.com    //  Query    var query_old_txt = "";    var query_callout = 0;    var query_xml_req = 0;    var query_query;    var query_page = "";	var query_search_base = "query.html?q=";	var exception_text="";	var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";	var ch;	var i;	var index;	if(navigator.userAgent.indexOf("MSIE") >= 0) document.onmouseup = ajaxHandler;	else document.addEventListener("mouseup", ajaxHandler, true);	var info_list;	var info_to;	var lookin;	var caption;	var qry_type;	var compare_info;	var control_id="";	var rpv;	var no_rec_msg;			function ajaxHandler(event){		if(control_id != ""){			if(document.getElementById("results_"+control_id).style.visibility == 'visible'){				document.getElementById("results_"+control_id).style.visibility = 'hidden';			}		}	}	    function query_spinning_indicator(on)    {      var o = document.getElementById("spinner_"+control_id);      if (o) {        o.style.display = "inline";        var cur_on = o.style.visibility == "visible";        if (cur_on != on)          o.style.visibility = on ? "visible" : "hidden";      }    }    function query_kill_request()    {      if (query_xml_req) {        query_xml_req.abort();        query_xml_req = 0;      }    }    function query_display_result(xml)    {      var res = document.getElementById("results_"+control_id);      if (!xml){        res.innerHTML = "";        clearDisplay();      }else {        res.innerHTML = xml;        document.getElementById('results_'+control_id).style.visibility='visible';      }    }    function query_send_request()    {      //  Flag that we're no longer waiting for a callout      if (query_callout) {        window.clearTimeout(query_callout);        query_callout = 0;      }      //  Indicate to user that request will be sent to server      query_spinning_indicator(1);      //  Kill any other request that may be pending      query_kill_request();      //  Create a new one. We'll get rid of any Unicode characters in the      //  query string since some browsers escape them incorrectly.      var src = query_search_base + escape(query_query) + "&page=" + escape(query_page) + "&info_list="+info_list;      src = src+"&lookin="+lookin+"&caption="+caption+"&compare_info="+compare_info+"&rpv="+rpv+"&exception_text="+exception_text;      src = src+"&no_rec_msg="+no_rec_msg;      query_page = "";      query_xml_req = 0;      if (window.XMLHttpRequest) {        //  Use XMLHttpRequest which is implemented in Safari and        //  Mozilla/Firefox        query_xml_req = new XMLHttpRequest();      } else {        //  Use ActiveX version for MSIE        try {          query_xml_req = new ActiveXObject("Msxml2.XMLHTTP");        } catch (e) {          try {            query_xml_req = new ActiveXObject("Microsoft.XMLHTTP");          } catch (e) {            query_xml_req = 0;          }        }      }      if (query_xml_req) {        query_xml_req.onreadystatechange = function() {          if (query_xml_req.readyState == 4) {            //  Stop spinning indicator            query_spinning_indicator(0);            //  Safari 1.3/2.0 reports "undefined" for repeated            //  requests to the same URL. It's also over-cached even            //  if the server sets expire headers correctly, but not            //  much we can do about that.            if (query_xml_req.status == 200 ||                query_xml_req.status == undefined) {              query_display_result(query_xml_req.responseText);              query_xml_req = 0;            }          }        }        query_xml_req.open("GET", src, true);        query_xml_req.send(null);      }    }    function query_update_results(event_in, info_list_in, info_to_in, lookin_in, caption_in, qry_type_in, compare_info_in, control_id_in, rpv_in, no_rec_msg_in)    {		info_list = info_list_in;		info_to = info_to_in;		lookin = lookin_in;		caption = caption_in;		qry_type = qry_type_in;		compare_info = compare_info_in;		if(control_id != control_id_in) query_old_txt = "";		control_id = control_id_in;		rpv = rpv_in;		no_rec_msg = no_rec_msg_in;		window.setTimeout(query_update_results_internal, 10);		return true;    }    function query_update_results_internal()    {      //  Get current query string and check whether it's changed      //  compared to the last time.      var inp = document.getElementById(control_id);            if(qry_type == 2){      	exception_text = "";      	//exception when the search string starts from the first alphabet      	for (i = 0; i < inp.value.length; i++) {                    ch = inp.value.charAt(i);                               index = alphabet.indexOf(ch);                         if (index == -1) {                                        exception_text = exception_text + ch;                               }                                                     else {                                                   break;               }        }      }            var cur_txt = inp.value.replace(exception_text, '');      if(exception_text != "") exception_text += " ";      if (cur_txt != query_old_txt || query_page != "") {        //  Yes, string has changed. We want to send it to the server,        //  but to avoid excessive amounts of requests we'll postpone        //  it for 0.5 seconds and only continue if the text field is        //  left unchanged for this period. Otherwise we reset the timer        //  and keep waiting.        query_old_txt = cur_txt;        if (query_callout) {          window.clearTimeout(query_callout);          query_callout = 0;        }        if (cur_txt == "") {          //  No need to send anything. We also kill any outstanding          //  request that's been made so far.          query_display_result(0);          query_spinning_indicator(0);          query_kill_request();        } else {          //  Schedule a request 0.5 seconds from now          query_query = cur_txt;          query_callout =            window.setTimeout(query_send_request, 500);        }      }      return true;    }        function show(displayValue){    	displayArr = displayValue.split("||");    	controlArr = info_to.split(",");    	    	for(counter=0;counter<controlArr.length;counter++){    		if(controlArr[counter] == control_id) document.getElementById(controlArr[counter]).value = exception_text + displayArr[counter];    		else document.getElementById(controlArr[counter]).value = displayArr[counter];    		upfirst('crm',controlArr[counter]);    	}    }        function showNext(page){    	query_page = page;    	window.setTimeout(query_update_results_internal, 10);    }        function clearDisplay(){    	document.getElementById("results_"+control_id).innerHTML = ""		document.getElementById("results_"+control_id).style.visibility='hidden';    }
