//  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 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;
  var database_name;
  var condition = '';
  var condtion_field ='';
		
	function ajaxHandler(event){
		if(control_id != ""){
			if(document.getElementById("results_"+control_id).style.visibility == 'visible' && event.target != "[object HTMLDivElement]"){
      	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(html_src_final,database_name)
    {
    	
    	//  Set html file location for list
      var query_search_base = html_src_final+"?q=";
    	
      //  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) + "&database_name=" + database_name + "&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+"&condition="+condition+"&condition_field="+condition_field;
      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, html_src_in, database_name, condition_in, condition_field_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;
		condition = condition_in;
		condition_field = condition_field_in;
		window.setTimeout(query_update_results_internal(html_src_in,database_name), 10);    
		return true;
    }

    function query_update_results_internal(html_src,database_name)
    {
      //  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(html_src,database_name), 500);
        }
      }
      return true;
    }
    
    function show(displayValue){

    	displayValue = displayValue.replace("$$$","'");
      displayValue = displayValue.replace('@@@','"');

    	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{
        	if(document.getElementById(controlArr[counter]).id.indexOf("span_") != -1 || document.getElementById(controlArr[counter]).id.indexOf("div_") != -1){
        		document.getElementById(controlArr[counter]).innerHTML = 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';
    }

