/*sack file included from the ajax.js to reduce the Http request*/
function sack(file){
this.xmlhttp=null
this.resetData=function(){
this.method="POST"
this.queryStringSeparator="?"
this.argumentSeparator="&"
this.URLString=""
this.encodeURIString=true
this.execute=false
this.element=null
this.elementObj=null
this.requestFile=file
this.vars=new Object()
this.responseStatus=new Array(2)}
this.resetFunctions=function(){
this.onLoading=function(){}
this.onLoaded=function(){}
this.onInteractive=function(){}
this.onCompletion=function(){}
this.onError=function(){}
this.onFail=function(){}}
this.reset=function(){
this.resetFunctions()
this.resetData()}
this.createAJAX=function(){
try{
this.xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
}catch(e1){
try{
this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
}catch(e2){
this.xmlhttp=null}}
if(! this.xmlhttp){
if(typeof XMLHttpRequest !="undefined"){
this.xmlhttp=new XMLHttpRequest()
}else{
this.failed=true}}}
this.setVar=function(name,value){
this.vars[name]=Array(value,false)}
this.encVar=function(name,value,returnvars){
if(true==returnvars){
return Array(encodeURIComponent(name),encodeURIComponent(value))
}else{
this.vars[encodeURIComponent(name)]=Array(encodeURIComponent(value),true)}}
this.processURLString=function(string,encode){
encoded=encodeURIComponent(this.argumentSeparator)
regexp=new RegExp(this.argumentSeparator+"|"+encoded)
varArray=string.split(regexp)
for(i=0;i<varArray.length;i++){
urlVars=varArray[i].split("=")
if(true==encode){
this.encVar(urlVars[0],urlVars[1])
}else{
this.setVar(urlVars[0],urlVars[1])}}}
this.createURLString=function(urlstring){
if(this.encodeURIString&&this.URLString.length){
this.processURLString(this.URLString,true)}
if(urlstring){
if(this.URLString.length){
this.URLString+=this.argumentSeparator+urlstring
}else{
this.URLString=urlstring}}
//this.setVar("rndval",new Date().getTime())
urlstringtemp=new Array()
for(key in this.vars){
if(false==this.vars[key][1]&&true==this.encodeURIString){
encoded=this.encVar(key,this.vars[key][0],true)
delete this.vars[key]
this.vars[encoded[0]]=Array(encoded[1],true)
key=encoded[0]}
urlstringtemp[urlstringtemp.length]=key+"="+this.vars[key][0]}
if(urlstring){
this.URLString+=this.argumentSeparator+urlstringtemp.join(this.argumentSeparator)
}else{
this.URLString+=urlstringtemp.join(this.argumentSeparator)}}
this.runResponse=function(){
eval(this.response)}
this.runAJAX=function(urlstring,x){
if(this.failed){
this.onFail()
}else{
if(x!=false)
this.createURLString(urlstring)
if(this.element){
this.elementObj=document.getElementById(this.element)}
if(this.xmlhttp){
var self=this
if(this.method=="GET"){
//totalurlstring=this.requestFile+this.queryStringSeparator+this.URLString
totalurlstring=this.requestFile+this.URLString
this.xmlhttp.open(this.method,totalurlstring,true)
}else{
this.xmlhttp.open(this.method,this.requestFile,true)
try{
this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
}catch(e){alert("error");}}
this.xmlhttp.onreadystatechange=function(){
switch(self.xmlhttp.readyState){
case 1:
self.onLoading()
break
case 2:
self.onLoaded()
break
case 3:
self.onInteractive()
break
case 4:
self.response=self.xmlhttp.responseText
self.responseXML=self.xmlhttp.responseXML
self.responseStatus[0]=self.xmlhttp.status
self.responseStatus[1]=self.xmlhttp.statusText
if(self.execute){
self.runResponse()}
if(self.elementObj){
elemNodeName=self.elementObj.nodeName
elemNodeName.toLowerCase()
if(elemNodeName=="input"
|| elemNodeName=="select"
|| elemNodeName=="option"
|| elemNodeName=="textarea"){
self.elementObj.value=self.response
}else{
self.elementObj.innerHTML=self.response}}
if(self.responseStatus[0]=="200"){
self.onCompletion()
}else{
self.onError()}
self.URLString=""
break}}
this.xmlhttp.send(this.URLString)}}}
this.reset()
this.createAJAX()}
/* ends here*/

var ajaxBox_offsetX = 0;
var ajaxBox_offsetY = 0;
var minimumLettersBeforeLookup = 3;	// Number of letters entered before a lookup is performed.
var targetName ;
var ajax_list_objects = new Array();
var ajax_list_cachedLists = new Array();
var ajax_list_activeInput = false;
var ajax_list_activeItem;
var ajax_list_optionDivFirstItem = false;
var ajax_list_currentLetters = new Array();
var ajax_optionDiv = false;
var ajax_optionDiv_iframe = false;
var selectedText='';
var collegeId;
var ajax_list_MSIE = false;
if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)ajax_list_MSIE=true;
var currentListIndex = 0;

function ajax_getTopPos(inputObj) {
    var returnValue = inputObj.offsetTop;
    while((inputObj = inputObj.offsetParent) != null){
        returnValue += inputObj.offsetTop;
    }
    return returnValue;
}
function ajax_list_cancelEvent() {
return false;
}
function ajax_getLeftPos(inputObj) {
    var returnValue = inputObj.offsetLeft;
    while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
    return returnValue;
}
function ajax_option_setValue(e,inputObj) {
    if(!inputObj)inputObj=this;
        var tmpValue = inputObj.innerHTML;
    if(ajax_list_MSIE)tmpValue = inputObj.innerText;else tmpValue = inputObj.textContent;
    if(!tmpValue)tmpValue = inputObj.innerHTML;
    ajax_list_activeInput.value = tmpValue;
    selectedText=tmpValue;
    if(document.getElementById(ajax_list_activeInput.name + '_hidden')) {
        document.getElementById(ajax_list_activeInput.id + '_hidden').value = inputObj.id; 
    } else if(document.getElementById(collegeId)) {
        document.getElementById(collegeId).value = trim(inputObj.id); 
         if(document.getElementById("printerror") != null)
        document.getElementById("printerror").innerHTML ="";
        var index = null;
        if (document.getElementById("reviewTitle") != null) {
            collegeSplit = document.getElementById("model").value.split(" ");
            for(k=0;k<collegeSplit.length;k++){
                if(startsWith(collegeSplit[k])){
                    index = k; 
                    break;
             }
            }
            var collegeName= "";
            for(k=0;k<collegeSplit.length;k++){
                if (index == k) {
                  collegeName = collegeName+"<span>"+collegeSplit[k]+" ";
                } else {
                    collegeName= collegeName+" "+collegeSplit[k]
                }
            }
            document.getElementById("reviewTitle").innerHTML = document.getElementById("reladef").value+trim(collegeName)+"</span>";
            document.getElementById("titleHidden").value =  document.getElementById("reladef").value+trim(collegeName)+"</span>";
        }
    }
    ajax_options_hide();
}
function ajax_options_hide() {
    if(ajax_optionDiv)ajax_optionDiv.style.display='none';	
    if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='none';
}
function ajax_options_rollOverActiveItem(item,fromKeyBoard) {
   
    if(ajax_list_activeItem)ajax_list_activeItem.className='optionDiv';
    item.className='optionDivSelected';
    ajax_list_activeItem = item;
    if(fromKeyBoard){
        if(ajax_list_activeItem.offsetTop>ajax_optionDiv.offsetHeight){
            ajax_optionDiv.scrollTop = ajax_list_activeItem.offsetTop - ajax_optionDiv.offsetHeight + ajax_list_activeItem.offsetHeight + 2 ;
        }
        if(ajax_list_activeItem.offsetTop<ajax_optionDiv.scrollTop) {
            ajax_optionDiv.scrollTop = 0;	
        }
    }
}
function ajax_option_list_buildList(letters,paramToExternalFile, collegeId) {
    this.collegeId = collegeId;
    ajax_optionDiv.innerHTML = '';
    ajax_list_activeItem = false;
    if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length<=1){
        ajax_options_hide();
        if(document.getElementById(collegeId)!= null){
            document.getElementById(collegeId).value =""; //clear the collegeId field if user select from the list
        }
        return;			
    }
    ajax_list_optionDivFirstItem = false;
    var optionsAdded = false;
    for(var no=0;no<ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length-1;no++){
        if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].length==0)continue;
        optionsAdded = true;
        var div = document.createElement('DIV');
        var items = ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].split(/###/gi);
        if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length==1 && ajax_list_activeInput.value == items[0]){
            ajax_options_hide();
            return;						
        }
        div.innerHTML = items[items.length-1];
        div.id = items[0];
        div.className='optionDiv';
        div.onmouseover = function(){ ajax_options_rollOverActiveItem(this,false) }
        div.onclick = ajax_option_setValue;
        if(!ajax_list_optionDivFirstItem)ajax_list_optionDivFirstItem = div;
            ajax_optionDiv.appendChild(div);
        }	
        if(optionsAdded){
           ajax_optionDiv.style.display='block';
           if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='';
                ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
            }
}
function ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,whichIndex, collegeId) {
   if(whichIndex!=currentListIndex)return;
    var letters = inputObj.value;
    var content = ajax_list_objects[ajaxIndex].response;    
    var elements = content.split('|');
    ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()] = elements;
    ajax_option_list_buildList(letters,paramToExternalFile, collegeId);
}
function ajax_option_resize(inputObj) {
    ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
    ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
    if(ajax_optionDiv_iframe){
        ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
        ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;			
    }		
}
function ajax_showOptions(inputObj,paramToExternalFile,e, countryId, collegeId, clearId, errorid,page) {
    if(page!= null && page == 'college') {
        var ajax_list_externalFile =  '/jsp/autocomplete/autoComplete.jsp';
    } else if(page != null && page == 'category') {
        var ajax_list_externalFile =  '/jsp/autocomplete/categoryAutoComplete.jsp';
    } else if(page!= null && page == 'inst_college') {
//        var ajax_list_externalFile =  '/jsp/autocomplete/searchPodAutoComplete.jsp';  
        var ajax_list_externalFile =  '/jsp/autocomplete/autoComplete.jsp';
    }    
     if(e.keyCode == 46) {
        document.getElementById(collegeId).value = '';
    }
    if(e.keyCode == 9){
    clearComponent(inputObj.id,collegeId,'',clearId);
    }
    if (document.getElementById(countryId) != null && document.getElementById(countryId).value == '0') {// will fire user  keyed in university box without country selection
        inputObj.value == ''
        document.getElementById(countryId).focus();
        alert(document.getElementById(errorid).value);
        if(document.getElementById("printerror") != null){
            document.getElementById("printerror").innerHTML ="";
        }
        } else {
            var form = inputObj.form;
            if(!(isValid(inputObj.value))){
                minimumLettersBeforeLookup = 1
            } else {
                minimumLettersBeforeLookup = 3
            }
            if(e.keyCode==13 || e.keyCode==9)return;
            if(ajax_list_currentLetters[inputObj.name]==inputObj.value)return;
            //if(!ajax_list_cachedLists[paramToExternalFile])
            ajax_list_cachedLists[paramToExternalFile] = new Array();
            ajax_list_currentLetters[inputObj.name] = inputObj.value;
            if(!ajax_optionDiv){
                ajax_optionDiv = document.createElement('DIV');
                ajax_optionDiv.id = 'ajax_listOfOptions';	
                ajax_optionDiv.style.width=inputObj.offsetWidth+"px";
                document.body.appendChild(ajax_optionDiv);
                if(ajax_list_MSIE){
                    ajax_optionDiv_iframe = document.createElement('IFRAME');
                    ajax_optionDiv_iframe.border='0';
                    ajax_optionDiv_iframe.style.width = ajax_optionDiv.clientWidth + 'px';
                    ajax_optionDiv_iframe.style.height = ajax_optionDiv.clientHeight + 'px';
                    ajax_optionDiv_iframe.id = 'ajax_listOfOptions_iframe';
                    document.body.appendChild(ajax_optionDiv_iframe);
                    ajax_optionDiv_iframe.style.width=inputObj.offsetWidth+"px";
                }
                var allInputs = document.getElementsByTagName('INPUT');
                for(var no=0;no<allInputs.length;no++){
                 if(!allInputs[no].onkeyup)allInputs[no].onfocus = ajax_options_hide;
                }			
                var allSelects = document.getElementsByTagName('SELECT');
                for(var no=0;no<allSelects.length;no++){
                    allSelects[no].onfocus = ajax_options_hide;
                }
                var oldonkeydown=document.body.onkeydown;
                if(typeof oldonkeydown!='function'){
                    document.body.onkeydown=ajax_option_keyNavigation;
                }else{
                    document.body.onkeydown=function(){
                    oldonkeydown();
                    ajax_option_keyNavigation() ;}
                }
                var oldonresize=document.body.onresize;
                if(typeof oldonresize!='function'){
                    document.body.onresize=function() {ajax_option_resize(inputObj); };
                }else{
                    document.body.onresize=function(){oldonresize();
                    ajax_option_resize(inputObj) ;}
                }
            } else {
                ajax_optionDiv.style.width=inputObj.offsetWidth+"px";
                if(ajax_list_MSIE){
                    ajax_optionDiv_iframe.style.width=inputObj.offsetWidth+"px";
                }
            }
            if(inputObj.value.length<minimumLettersBeforeLookup){
                ajax_options_hide();
                return;
            }
            ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
            ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
            if(ajax_optionDiv_iframe){
                ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
                ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;			
            }
            ajax_list_activeInput = inputObj;
            ajax_optionDiv.onselectstart =  ajax_list_cancelEvent;
            currentListIndex++;
            if(ajax_list_cachedLists[paramToExternalFile][inputObj.value.toLowerCase()]){
                ajax_option_list_buildList(inputObj.value,paramToExternalFile,currentListIndex);			
            }else{
                var tmpIndex=currentListIndex/1;
                ajax_optionDiv.innerHTML = '';
                var ajaxIndex = ajax_list_objects.length;
                ajax_list_objects[ajaxIndex] = new sack();
                 if(page!= null && page == 'college') {
                    var url = contextPath + ajax_list_externalFile + '?' + paramToExternalFile + '=1&letters=' + escape( encodeURIComponent( inputObj.value ))+"&countryId="+document.getElementById(countryId).value + "&lang=" + minimumLettersBeforeLookup;
                } else if(page != null && page == 'category') {
                    var level = null; 
                    if($("qId")!= null) { level = $("qId").value; }
                    var url = contextPath + ajax_list_externalFile + '?' + paramToExternalFile + '=1&catname=' + escape( encodeURIComponent( inputObj.value ))+ "&lang=" + minimumLettersBeforeLookup + "&page=" + collegeId+"&countryId="+countryId+ "&slevel=" + level;
                } else if(page != null && page == 'inst_college') {
                    //var url = contextPath + ajax_list_externalFile + '?' + paramToExternalFile + '=1&letters=' + escape( encodeURIComponent( inputObj.value ))+"&countryId="+document.getElementById(countryId).value + "&lang=" + minimumLettersBeforeLookup +"&rid="+document.getElementById("regId").value;
                    var url = contextPath + ajax_list_externalFile + '?' + paramToExternalFile + '=1&letters=' + escape( encodeURIComponent( inputObj.value ))+"&countryId="+document.getElementById(countryId).value + "&lang=" + minimumLettersBeforeLookup;
                }
                ajax_list_objects[ajaxIndex].requestFile = url;	// Specifying which file to get
                ajax_list_objects[ajaxIndex].onCompletion = function(){ ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,tmpIndex,collegeId); };	// Specify function that will be executed after file has been found
                if(document.getElementById("indicator")!=null)
                document.getElementById("indicator").style.display =""
                ajax_list_objects[ajaxIndex].runAJAX();		// Execute AJAX function
            }
            if(document.getElementById("indicator")!=null)
            document.getElementById("indicator").style.display ="none"
    }
}
function ajax_option_keyNavigation(e){
    if(document.all)e = event;
    if(!ajax_optionDiv)return;
    if(ajax_optionDiv.style.display=='none')return;
    if(e.keyCode==38){	// Up arrow
        if(!ajax_list_activeItem)return;
        if(ajax_list_activeItem && !ajax_list_activeItem.previousSibling)return;
        ajax_options_rollOverActiveItem(ajax_list_activeItem.previousSibling,true);
    }
    if(e.keyCode==40){	// Down arrow
        if(!ajax_list_activeItem){
            ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
        }else{
            if(!ajax_list_activeItem.nextSibling)return;
                ajax_options_rollOverActiveItem(ajax_list_activeItem.nextSibling,true);
        }
    }
    if(e.keyCode==13 || e.keyCode==9){	// Enter key or tab key
    if(ajax_list_activeItem && ajax_list_activeItem.className=='optionDivSelected')ajax_option_setValue(false,ajax_list_activeItem);
    if(e.keyCode==13)return false; else return true;
    }
    if(e.keyCode==27){	// Escape key
       ajax_options_hide();			
    }
}
document.documentElement.onclick = autoHideList;
function autoHideList(e) {
if(document.all)e = event;
if (e.target) source = e.target;
else if (e.srcElement) source = e.srcElement;
if (source.nodeType == 3) // defeat Safari bug
source = source.parentNode;		
if(source.tagName.toLowerCase()!='input' && source.tagName.toLowerCase()!='textarea')ajax_options_hide();
}
function isValid(parm) {
    val ='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ '
    if (parm == "") return true;
    for (i=0; i<parm.length; i++) {
        if (val.indexOf(parm.charAt(i),0) == -1) return false;
    }

return true;
}
function startsWith(str){
ret = false
 var val ='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
   for(j=0;j<str.length;j++){
    for (i=0; i<val.length; i++) {
        if((val.charAt(i).match("^"+str.charAt(j)) == str.charAt(j)) && ret == false){
         ret= true;
         break;
        }
    }
   }
    return ret;
}

