//###########################################################
// Version:  2009-02-18, mrc ltd., Lombard, IL, USA  
//###########################################################
document.write('<script type="text/javascript" src="/mrcjava/mrcclasses/prototype.js"></script>');
var AJAX_HOVER_DELAY=150;
function ajaxlink(element,ev) {//mouseover handler
  url=element.href;
  boxw = element.getAttribute('width');
  boxh = element.getAttribute('height');
  new ALinkObj(element, {boxw:boxw,boxh:boxh,url:url,cursorY:ev.clientY});  
}
stopEvent = function(ev) {
  if(window.event){
    ev.returnValue = false;
    ev.cancelBubble = true;
  }else{
    ev.preventDefault();
    ev.stopPropagation();
  }
}
var keyIsDown = false;
function ALinkObj(elementName, options) {
   if (keyIsDown) {
     return;
  }
  this.element = $(elementName);
  if (!this.element) throw new Error(elementName + ' not found');
  this.element.alinkobj = this;
  this.options = options || {};
  this.boxw = this.options.boxw || 300;  
  this.boxh = this.options.boxh || 200;  
  this.url = this.options.url || "";
  this.cursorY = this.options.cursorY || 0;
  this.inAjaxBox = "n"; 
  this.onmouseover();
  Event.observe(this.element, "mouseout", this.hidebox.bind(this));
  Event.observe(this.element, "mousedown", function() {keyIsDown = true;});
  Event.observe(this.element, "mouseup", function() {keyIsDown = false;});
}

ALinkObj.prototype.onmouseover = function() {

  this.cursorIn = 'y';
  this.ajaxboxid = getAjaxBox();
  this.element.style.cursor = "pointer"; 
  var callDoajax = this.doajax;
  setTimeout(callDoajax.bind(this), AJAX_HOVER_DELAY); 
}
ALinkObj.prototype.doajax = function() {   
  if (this.ajaxBoxSattus == "on") {return;}   
  if (this.cursorIn == 'n') return;   
  var tagtype = this.url;
  new Ajax.Request(tagtype,{ method: 'get',
      onSuccess:displayData.bind(this), 
      onFailure: displayErr.bind(this) } );
} 
function displayData (r) {  
  if (this.cursorIn == 'n') return;
  //Element.setStyle(this.ajaxboxid, {width:this.boxw, height:this.boxh});
  var innerDiv = '<div class="ajaxboxinner">' + r.responseText + "</div>";
  Element.update(this.ajaxboxid, innerDiv);
  this.setAjaxbox();
  this.ajaxBoxSattus = "on"; 
  
  
}
function displayErr(r) {  
  Element.update(this.ajaxboxid, 'Ajax link failed: '+ r.statusText);  
}

ALinkObj.prototype.hidebox = function() { //context is <a> tag  
  this.cursorIn = 'n';
  var func = this.hidebox2;
  setTimeout(func.bind(this), AJAX_HOVER_DELAY);
  Event.observe(this.ajaxboxid, "mouseover", this.ajaxboxIn.bind(this));
  Event.observe(this.ajaxboxid, "mouseout", this.ajaxboxOut.bind(this));
}
ALinkObj.prototype.hidebox2 = function() { 
  if (this.inAjaxBox == "n" && this.ajaxBoxSattus == "on") { 
    Element.hide(this.ajaxboxid);
    //Element.setStyle(this.element,  {color:this.color0});  
    document.body.removeChild(this.ajaxboxid);  
    this.ajaxBoxSattus = "off"; 
  }  
}
ALinkObj.prototype.ajaxboxIn = function(evt) {  
  this.inAjaxBox = "y"; 
}
ALinkObj.prototype.ajaxboxOut = function(evt) { 
  var eX = Event.pointerX(evt);
  var eY = Event.pointerY(evt);
  var offsetxy = 3;
  var isIn = Position.within($(this.ajaxboxid),eX + offsetxy ,eY + offsetxy);
  var isIn2 = Position.within($(this.ajaxboxid),eX - offsetxy ,eY - offsetxy);
  if (isIn && isIn2) { return; }
  Element.hide(this.ajaxboxid);
  //Element.setStyle(this.element,  {color:this.color0});
  this.ajaxBoxSattus = "off";
  this.inAjaxBox = "n";    
}
ALinkObj.prototype.setAjaxbox = function() { //context is this obj
   var offsetx = 12; var offsety = 3;
   var linkElement = this.element;
   var ajaxbox = $(this.ajaxboxid);

   document.body.appendChild(ajaxbox);  
   Element.show(ajaxbox);  
   if (this.boxh == 0) {
      this.boxh = Element.getHeight(ajaxbox) ;
   }  
   Element.setStyle(this.ajaxboxid, {width:this.boxw, height:this.boxh} );
   
   var linkpos = Position.cumulativeOffset(linkElement); 
   var tagx = linkpos[0];
   var tagy  = linkpos[1]; 
   var tagdim = Element.getDimensions(this.element);  
   var jaxdim = Element.getDimensions(ajaxbox);
   ajaxbox.style.position = 'absolute';
   var bodyh = document.body.clientHeight;
   var bodyw = document.body.clientWidth;
   var winsize = windowSize();
   var winh = winsize.h;   
   var winw = winsize.w;  
   var left = tagx + tagdim.width + offsetx;
   var top  = tagy +  offsety;    
   if (this.cursorY > winh/2 ) {
      top  = tagy + tagdim.height - this.boxh; 
   }
   if (tagx > bodyw/2) {
     left  = tagx - this.boxw - offsetx; 
     var browserName=navigator.appName; 
     if (browserName!="Microsoft Internet Explorer") {left =left-20;}
   }
   var allowh = bodyh - top -30 ;
   //if (this.boxh  >= allowh) {top = top - (this.boxh - allowh);}
   if (top < 0) {top = 0;}
   
   ajaxbox.style.left = left;
   ajaxbox.style.top = top;
   //document.body.appendChild(ajaxbox);  
   //Element.show(ajaxbox);
   this.color0 =  Element.getStyle(linkElement, 'color');
   //Element.setStyle(linkElement, {color:'blue'});
}
function setSmartlinkAjax() {
  var atagls =  document.getElementsByTagName('span');   
  var atags = $A(atagls);  
  for (i = 0; i < atags.length ; i++) {
    var alnkid = atags[i].id;
    if (alnkid.indexOf('ajaxlnk') >= 0)  {
       //new ALinkObj(alnkid);
       Element.addClassName(alnkid, 'ajaxlink');
    }
  }
}
function getAjaxBox() {
  var elemSpan = document.createElement("div");
  //elemSpan.id = "ajaxbox";
  elemSpan.className = "ajaxboxclass"; 
  return elemSpan;
}
function windowSize() {
  var winWidth = 0, winHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    winWidth = window.innerWidth;
    winHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    winWidth = document.documentElement.clientWidth;
    winHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    winWidth = document.body.clientWidth;
    winHeight = document.body.clientHeight;
  }
  var winsize = {"w":winWidth, "h":winHeight};
  return winsize;
}
function addLoadListener(func) {
 if ( typeof window.addEventListener != 'undefined' ) {
  window.addEventListener('load', func, false);
 } else if ( typeof window.document.addEventListener != 'undefined' ) {
  window.document.addEventListener('load', func, false);
 }  else if ( typeof window.attachEvent != 'undefined' ) {
  window.attachEvent('onload', func);
 }  else {
  if ( typeof window.onload != 'function' ) {
   window.onload = func;
  } else {
   var oldFunction = window.onload;
   window.onload = function() { oldFunction(); func(); }
  }
 }
}
//#########################################################
var timedelay=50; //ms
var mrcobj=new Object();
mrcobj.Loader=function(url,onload,onerror,method,params,contentType){
  this.req=null;
  mrcobj.currentLoader=this;
  this.onload=onload;
  this.onerror=(onerror) ? onerror : this.defaultError;
  this.loaddoc(url,method,params,contentType);
}
mrcobj.Loader.prototype.loaddoc=function(url,method,params,contentType){

  if (!method){
    method="GET";
  }
  if (!contentType && method=="POST"){
    contentType='application/x-www-form-urlencoded';
  }
  if (window.XMLHttpRequest){
    this.req=new XMLHttpRequest();
  } else if (window.ActiveXObject){
    this.req=new ActiveXObject("Microsoft.XMLHTTP");
    //document.getElementById("mmsg").innerHTML="window.ActiveXObject ="+this.req;
  }

  if (this.req){
  
    try{
      var loader=this;
      this.req.onreadystatechange=function(){
        mrcobj.Loader.onReadyState.call(loader);
      } 
      this.req.open(method,url,true);

      if (contentType){
        this.req.setRequestHeader('Content-Type', contentType);
      }
      this.req.send(params);
    }catch (err){
      this.onerror.call(this);
    }
  }
}
//####################################
mrcobj.Loader.onReadyState=function(){
  var req=this.req;
  var ready=req.readyState;
 
  try{ 
  var httpStatus=req.status;
  //document.getElementById("mmsg").innerHTML=" ready=" + ready + ", status=" + httpStatus;
  if (ready==4){
    if (httpStatus==200 || httpStatus==0){
      this.onload.call(this);
    }else{
      //this.onerror.call(this);
    }
  }
  }
  catch(e){}
}
//####################################
mrcobj.Loader.prototype.defaultError=function(){
  alert("error fetching data!"
    +"\n\nreadyState:"+this.req.readyState
    +"\nstatus: "+this.req.status
    +"\nheaders: "+this.req.getAllResponseHeaders());
}
//#############################################################
function  init(server_app, qtype) {
  //alert("run!");
  setJaxbox();
  if (qtype == 'I') {
    setJaxboxsRET(server_app);
  }
}
//####################################
function  setJaxboxsRET(server_app) {
  var msg="No matches";// message for no matching record
  var fm=document.forms[0];
  var hasAjax = false;
  for(j=0;j<fm.elements.length;j++){
    var formObj=fm.elements[j];
    if(formObj.type.toLowerCase() == "text" && formObj.name.indexOf("val_") == 0) {
	   if (!$(formObj).hasClassName('noajax') ) {
         formObj.obj = SetProperties(formObj,"k",server_app,true,true,true,true,msg,false, 10000);
		 hasAjax = true;
	   }
    }
  }
  if (hasAjax) {
      Event.observe($$('body')[0], "keyup", HideTheBox2.bindAsEventListener(this) );
	  Event.observe($$('body')[0], "click", HideTheBox.bindAsEventListener(this) );
  }
}
//####################################
function  setJaxbox() {
        var elemSpan = document.createElement("span");
        elemSpan.id = "jaxbox";
        elemSpan.className = "jaxboxclass"; 
        document.body.appendChild(elemSpan);
}
//####################################
function SetProperties(xElem,xHidden,xserverCode,
        xignoreCase,xmatchAnywhere,xmatchTextBoxWidth,
        xshowNoMatchMessage,xnoMatchingDataMessage,xuseTimeout, xtheVisibleTime){
          var props={
            elem: xElem,
            hidden: xHidden,
            serverCode: xserverCode,
            regExFlags: ( (xignoreCase) ? "i" : "" ),//case
            regExAny: ( (xmatchAnywhere) ? "" : "^" ),
            matchAnywhere: xmatchAnywhere,
            matchTextBoxWidth: xmatchTextBoxWidth,
            theVisibleTime: xtheVisibleTime,
            showNoMatchMessage: xshowNoMatchMessage,
            noMatchingDataMessage: xnoMatchingDataMessage,
            useTimeout: xuseTimeout
          };
          AddHandler(xElem);
          return props;
}

 //####################################      
function AddHandler(objText){
        objText.onkeyup = GiveOptions;
        objText.onblur = function(){
          //alert("this.obj.useTimeout=" + this.obj.useTimeout + "  );
          //if(this.obj.useTimeout)StartTimeout();
          //setTimeout("HideTheBox()",10);
        }
         
      }
 
      var arrOptions = new Array();
      var strLastValue = "";
      var bMadeRequest;
      var theTextBox;
      var objLastActive;
      var currentValueSelected = -1;
      var bNoResults = false;
      var isTiming = false;

//####################################
function GiveOptions(e){      
        var intKey = -1;
        if(window.event){
          intKey = event.keyCode;
          theTextBox = event.srcElement;
        }
        else{
          intKey = e.which;
          theTextBox = e.target;
        }
        if(theTextBox.obj.useTimeout){
          //if(isTiming)EraseTimeout();
          //StartTimeout();
        }
        if(theTextBox.value.length == 0  ){
          arrOptions = new Array();
          HideTheBox();
          strLastValue = "";
          return false;
        }
        if(objLastActive == theTextBox){
          if(intKey == 13){
            GrabHighlighted();
            theTextBox.blur();
            //document.forms[0].submit();
            return false;
          }   else if(intKey == 38){
            MoveHighlight(-1);
            GrabHighlighted2()
            return false;
          }   else if(intKey == 40){
            MoveHighlight(1);
            GrabHighlighted2()
            return false;
          }  else {
           // var charCode = (e.charCode)?e.charCode : ((e.which) ? e.which : e.keyCode);
            if (intKey == 32) {
              //alert("space!"); 
              return false}
          }
        }
        if(objLastActive != theTextBox  ||
       theTextBox.value.indexOf(strLastValue) != 0 ||
           ( (arrOptions.length==0 || arrOptions.length==15 ) && !bNoResults) ||
           (theTextBox.value.length > strLastValue.length)){
             objLastActive = theTextBox;
             bMadeRequest = true;
             callajax0(theTextBox.value);
           // document.getElementById("mmsg").innerHTML="get data....theTextBox.value="+theTextBox.value;
        }  else if(!bMadeRequest){
          BuildList(theTextBox.value);
          //document.getElementById("mmsg").innerHTML="not get data................";
        }
        strLastValue = theTextBox.value;
}
 
//####################################
function callajax0(xStrText){
   var today=new Date();  
   var t0=today.getTime(); tt0=t0;
   setTimeout('callajax1('+t0+')', timedelay);
   //alert("op");
}
var tt0=0;
//####################################
function callajax1(stamp){
  if(stamp == tt0) {
    var params = setParms(theTextBox);
    var loader1 = new mrcobj.Loader(theTextBox.obj.serverCode, BuildChoices,null,"POST",params);
  }
}
 
//####################################
 function setParms(jbox) {
  var parms="AJAX=Y&AJAXFIELD=" + jbox.name;
  var fm=document.forms[0];
  
  for(j=0;j<fm.elements.length;j++){
    var formObj=fm.elements[j];
    if(formObj.name.indexOf("rls_") == 0) {
      var val = "";
      var indx = formObj.selectedIndex;      
      if (indx == undefined) {
      	val = formObj.value;
      } else {
        val = formObj.options[indx].value;
      }
      //alert(val + ", " + indx);
      parms += "&" + formObj.name + "=" + val;
    } else if(formObj.type.toLowerCase() == "text" || 
           formObj.type.toLowerCase() == "hidden" || 
           formObj.name.indexOf("btn_") == 0) {
      // alert(formObj.name + ", " + formObj.value + ", " + escape(formObj.value));
      parms += "&" + formObj.name + "=" + escape(formObj.value);
    }
  }
  //alert("parms=" + parms );
  return parms;
 }

//####################################00000000000000000
 function BuildChoices(){
   if (theTextBox.value.length == 0) return;
   var jaxfield=theTextBox.name;
   var jaxvalue=theTextBox.value;
   var errcode=0;
   //alert(theTextBox.value+'=='+jaxvalue);
   var strText = this.req.responseText;
   if (strText.length==0) return;
   eval(strText);
   if (errcode==1) return;
   var boxvalue=theTextBox.value;
   try{
      if(fieldtype==0){
         boxvalue=boxvalue.replace(/,/gi,'');
         strLastValue=strLastValue.replace(/,/gi,'');
      }
   }catch(e){}
   if (theTextBox.name != jaxfield || boxvalue != jaxvalue) return; 
   BuildList(strLastValue);
   bMadeRequest = false;
}

//####################################
      function BuildList(theText){
        SetElementPosition(theTextBox);
        var theMatches = MakeMatches(theText);
        theMatches = theMatches.join().replace(/\,/gi,"");
        if(theMatches.length > 0){
          document.getElementById("jaxbox").innerHTML = theMatches;
          document.getElementById("OptionsList_0").className="highEl";
          currentValueSelected = 0;
          bNoResults = false;
        }
        else{
          currentValueSelected = -1;
          bNoResults = true;
          if(theTextBox.obj.showNoMatchMessage)
            document.getElementById("jaxbox").innerHTML = "<span class='noMatchData'>" +
              theTextBox.obj.noMatchingDataMessage +"</span>";
          else HideTheBox();
        }
      }

 //####################################
      function SetElementPosition(theTextBoxInt){
        var selectedPosX = 0;
        var selectedPosY = 0;
        var theElement = theTextBoxInt;
        if (!theElement) return;
        var theElemHeight = theElement.offsetHeight;
        var theElemWidth = theElement.offsetWidth;
        while(theElement != null){
          selectedPosX += theElement.offsetLeft;
          selectedPosY += theElement.offsetTop;
          theElement = theElement.offsetParent;
        }
        xPosElement = document.getElementById("jaxbox");
        xPosElement.style.left = selectedPosX;
        if(theTextBoxInt.obj.matchTextBoxWidth)
          xPosElement.style.width = theElemWidth+20;
        xPosElement.style.top = selectedPosY + theElemHeight
        xPosElement.style.display = "block";
        if(theTextBoxInt.obj.useTimeout){
          xPosElement.onmouseout = StartTimeout;
          xPosElement.onmouseover = EraseTimeout;
        }
        else{
          xPosElement.onmouseout = null;
          xPosElement.onmouseover = null;
        }
      }

 //####################################
      var countForId = 0;
      function MakeMatches(xCompareStr){ 
      	xCompareStr = xCompareStr.replace("$", "\\$");
      	countForId = 0;
        var matchArray = new Array();
        var regExp = new RegExp(theTextBox.obj.regExAny + xCompareStr,theTextBox.obj.regExFlags);
        for(i=0;i<arrOptions.length;i++){
          var theMatch = arrOptions[i].match(regExp);
          //var theMatch = arrOptions[i][0].match(regExp);
          if(theMatch){
            matchArray[matchArray.length]= CreateUnderline(arrOptions[i], xCompareStr,i);
          }
        }
        return matchArray;
      }


 //####################################
      var hiStart = "<span class='spanMatchText'>";
      var hiEnd = "</span>";
      var selStart = "<span style='width:100%;display:block;' class='normalEl' onmouseover='SetHighColor(this)'";
      var selEnd ="</span>";
function CreateUnderline(xStr,xTextMatch,xVal){
  selMid = "onclick='SetText(" + xVal + ")'" + "id='OptionsList_" + countForId + "' theArrayNumber='"+ xVal +"'>";
  var regExp = new RegExp(theTextBox.obj.regExAny + xTextMatch,theTextBox.obj.regExFlags);
  var aStart = xStr.search(regExp);
  var matchedText = xStr.substring(aStart, aStart + xTextMatch.length);
  countForId++;
  return selStart + selMid + xStr.replace(regExp,hiStart + matchedText + hiEnd) + selEnd;
}

//####################################
      function MoveHighlight(xDir){
        if(currentValueSelected >= 0){
          newValue = parseInt(currentValueSelected) + parseInt(xDir);
          if(newValue > -1 && newValue < countForId){
            currentValueSelected = newValue;
            SetHighColor (null);
          }
        }
      }
//####################################
      function SetHighColor(theTextBox){
        if(theTextBox){
          currentValueSelected = theTextBox.id.slice(theTextBox.id.indexOf("_")+1,
          theTextBox.id.length);
        }
        for(i = 0; i < countForId; i++){
          document.getElementById('OptionsList_' + i).className ='normalEl';
        }
        document.getElementById('OptionsList_' + currentValueSelected).className = 'highEl';
      }

//####################################
function SetText(xVal){
     theTextBox.value = arrOptions[xVal]; //set text value
     document.getElementById("jaxbox").style.display = "none";
     currentValueSelected = -1; //remove the selected index
	 if (document.forms[0].btn_search) {
       document.forms[0].btn_search.focus();
	 }
}
//####################################
function GrabHighlighted(){
   if(currentValueSelected >= 0){
     xVal = document.getElementById("OptionsList_" + currentValueSelected).getAttribute("theArrayNumber");
     SetText(xVal);
     HideTheBox();
   }
}
//####################################
function GrabHighlighted2(){
   if(currentValueSelected >= 0){
     xVal = document.getElementById("OptionsList_" + currentValueSelected).getAttribute("theArrayNumber");
     theTextBox.value = arrOptions[xVal]; //set text value
     //SetText(xVal);
     //HideTheBox();
   }
}
//####################################
      function HideTheBox(){
        document.getElementById("jaxbox").style.display = "none";
        currentValueSelected = -1;
        EraseTimeout();
      }
//####################################
// On blur due to TAB key, hide box
function HideTheBox2(evt){
    var intKey = -1;
    if(window.event){
	  intKey = event.keyCode; 
	} else {
	  intKey = evt.which; 
	}
	//alert(intKey + "-----" + evt.keyCode); 
	if(intKey == 9){ HideTheBox(); } //tab key
}
//####################################
      function EraseTimeout(){
        clearTimeout(isTiming);
        isTiming = false;
      }
//####################################
      function StartTimeout(){
     // alert("theTextBox.obj.theVisibleTime=" );
        //isTiming = setTimeout("HideTheBox()",theTextBox.obj.theVisibleTime);
      }
//#######################################################
function setSortImage(names) { // for set grey sort images 
  for (var i=0; i<names.length; i++) {
    var im = names[i];  
    if (document.images[im]) {
      if (im.indexOf("s0") == 0) {
        document.images[im].src =  s0.src ;
      } else {
        document.images[im].src =  s1.src ;
      }
    }
  }
}
//#######################################################
function setDropV(fld, val) { // for set value dropdown field
    var selects = document.getElementsByTagName("select");
    for (var i = 0; i < selects.length; i++) {
       var name0 = "val_" + fld;
       if (selects[i].name == name0) { 
          selects[name0].value=val;  
       }  
    }
}


