﻿// JScript File

function SetupLookup(textbox, lookupURL, booList, txtIdInput){
    if (textbox.div==null){
        textbox.oldValue = textbox.value;
        textbox.lookupURL = lookupURL;
        textbox.div = textbox.nextSibling.nextSibling;
        textbox.div.textbox = textbox;
        textbox.divHasMouse = false;
        textbox.hasList = booList;
        textbox.idInput = txtIdInput;        
        if (window.ActiveXObject){ // for IE                      
            textbox.onkeyup = new Function('', 'LookupKeyUp(this, event)');
            textbox.onkeydown = new Function('', 'return LookupKeyDown(this, event)');
            textbox.onblur = new Function('', 'LookupBlur(this)');
            textbox.onkeypress= new Function('', 'if (this.tagName.match(/^textarea$/i)!= null)this.style.height= this.scrollHeight + "px";');    
            textbox.div.onmouseover = new Function('', 'LookupDivMouseOver(this.previousSibling.previousSibling)');
            textbox.div.onmouseout = new Function('', 'LookupDivMouseOut(this.previousSibling.previousSibling)');
            textbox.autocomplete = 'off';
            
        }else{
            textbox.setAttribute("onkeyup", "LookupKeyUp(this, event)");            
            textbox.setAttribute("onkeypress", "if (this.tagName.match(/^textarea$/i)!= null)this.style.height= this.scrollHeight + 'px';if (event.keyCode==13){event.cancelBubble=true;}");            
            textbox.setAttribute("onkeydown", "return LookupKeyDown(this, event)");
            textbox.setAttribute("onblur", "LookupBlur(this)");
            textbox.setAttribute("autocomplete", "off");
            textbox.div.setAttribute("onmouseover", "LookupDivMouseOver(this.previousSibling.previousSibling)");
            textbox.div.setAttribute("onmouseout", "LookupDivMouseOut(this.previousSibling.previousSibling)");
            
            
        }
        
        setTimeout(function(){
            if (textbox.tagName.match(/^textarea$/i)!= null && textbox.scrollHeight>0){            
                textbox.style.height = textbox.scrollHeight + "px";
            }
            
        }, 50);
    }
}

function LookupHide(textbox){
    textbox.div.innerHTML = "";
    textbox.div.style.display = "none";
    textbox.selectedRow = null;
    ShowDropDowns(textbox);

}
function LookupKeyDown(textbox, event){
    if (event.keyCode == 40){ // key down
        if (textbox.selectedRow != null && textbox.selectedRow.nextSibling !=null){
            LookupChangeSelectedRow(textbox, textbox.selectedRow.nextSibling);
            return false;    
        }
    }
    if (event.keyCode == 38){ // key up
        if (textbox.selectedRow != null && textbox.selectedRow.previousSibling !=null){
            LookupChangeSelectedRow(textbox, textbox.selectedRow.previousSibling);
            return false;    
        }
    }
    if (event.keyCode==13){// enter
        if (textbox.selectedRow!=null){
            event.returnValue = false;
            event.cancelBubble = true;
            event.keyCode=0;
            return false;    
        }
    }
    return true;    
}

function LookupBlur(textbox){
    if (textbox.divHasMouse == false){
        setTimeout(function(){LookupHide(textbox)}, 50);
    }
}

function LookupClickRow(textbox, name, id){
    if (textbox.hasList){
        arrEmails = textbox.value.split(/\s*[;,]\s*/);
        arrEmails[arrEmails.length - 1] = name;        
        textbox.value = arrEmails.join("; ") + "; ";
    }
    else{
        
        textbox.value = name;
        if (textbox.idInput != null){
            textbox.idInput.value = id;
            if (textbox.idInput.getAttribute('onchange') != null)
                textbox.idInput.onchange();
            textbox.style.textDecoration = 'underline';
        }
    }
    if (textbox.tagName.match(/^textarea$/i)!= null){
        textbox.style.height= textbox.scrollHeight + "px";    
    }
    LookupHide(textbox);
}

function LookupChangeSelectedRow(textbox, newRow){
    if (textbox.selectedRow!=null){
        textbox.selectedRow.className = '';
    }
    textbox.selectedRow = newRow;
    if (textbox.selectedRow !=null){
        textbox.selectedRow.className = 'lookupSelectedRow';                                
    }
}

function LookupKeyUp(textbox, event){
    if (event.keyCode==13){// enter
        
        if (textbox.selectedRow!=null){
            textbox.div.onclick();            
        }
    }
    else if (textbox.value.match(/[,;]\s*$/)== null && (textbox.oldValue==null || textbox.value!=textbox.oldValue )){
        textbox.oldValue = textbox.value;
        if (textbox.idInput != null){
            textbox.style.textDecoration = '';
            var inputOldValue = textbox.idInput.value;
            textbox.idInput.value = '';
            if (textbox.idInput.getAttribute('onchange') != null && inputOldValue != '')
                textbox.idInput.onchange();        
            
            
        }
        var httpRequest;
        var strCurrentValue;
        if (textbox.hasList){
            var arrEmailAddresses = textbox.value.split(/\s*(;|,)\s*/);
            strCurrentValue = arrEmailAddresses[arrEmailAddresses.length - 1].replace(/^\s*|\s*$/, '');
        }else{
            strCurrentValue = textbox.value.replace(/^\s*|\s*$/, '');
        }
        if (strCurrentValue.match(/^\s*$/)==null){
            clearTimeout(textbox.lookupTimeout);
            textbox.lookupTimeout = setTimeout(
                function(){
                    var strInnerCurrentValue;
                    if (textbox.hasList){
                        var arrInnerEmailAddresses = textbox.value.split(/\s*(;|,)\s*/);
                        strInnerCurrentValue = arrInnerEmailAddresses[arrInnerEmailAddresses.length - 1].replace(/^\s*|\s*$/, '');
                    }else{
                        strInnerCurrentValue = textbox.value.replace(/^\s*|\s*$/, '');
                    }
                    
                    if (strCurrentValue==strInnerCurrentValue){
                        if (window.ActiveXObject) // for IE
                        {
                            httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        else if (window.XMLHttpRequest) // for other browsers
                        {
                            httpRequest = new XMLHttpRequest();
                        }

                        httpRequest.open("Get", textbox.lookupURL + (textbox.lookupURL.match(/\?/)==null? "?": "&") + "search=" + strCurrentValue , true);
        

                        httpRequest.onreadystatechange=function() {
                            if (httpRequest.readyState==4) {
                                var strInnerInnerCurrentValue;
                                if (textbox.hasList){
                                    var arrInnerInnerEmailAddresses = textbox.value.split(/\s*(;|,)\s*/);
                                    strInnerInnerCurrentValue = arrInnerInnerEmailAddresses[arrInnerInnerEmailAddresses.length - 1].replace(/^\s*|\s*$/, '');
                                }else{
                                    strInnerInnerCurrentValue = textbox.value.replace(/^\s*|\s*$/, '');
                                }
                    
                                if (strCurrentValue == strInnerInnerCurrentValue){// has not changed
                                var objXML = httpRequest.responseXML;

                                var strHTML = '<table cellspacing="0" cellpadding="2">';
                                var objStoryNode = objXML.documentElement.firstChild;
                                var booHasFoundMatch = false;
                                while (objStoryNode!=null){
                                    if (objStoryNode.attributes){
                                        //highlight search string
                                        var strName = objStoryNode.getAttribute('name');
                                        
                                        strName = strName.replace(new RegExp('(' + RegExpEscape(strCurrentValue.replace(/^\s*|\s*$/gi, '')) + ')', 'gi'), '<span class=\'SearchText\'>$1</span>');
                                        strHTML += '<tr><td>' + strName + '</td></tr>';
                                        if (objStoryNode.getAttribute('match')=='yes'){
                                            LookupClickRow(textbox, objStoryNode.getAttribute('name'), objStoryNode.getAttribute('id'));
                                        }
                                    }
                                    objStoryNode = objStoryNode.nextSibling; 
                                    
                                }
                                strHTML += '</table>';
                                textbox.div.innerHTML = strHTML;
                                textbox.div.style.display="";
                                HideDropDowns(textbox);

                                textbox.divHasMouse = false;
                                LookupChangeSelectedRow(textbox, textbox.div.firstChild.rows[0]);
                                // put events on the rows
                                var objRow= textbox.div.firstChild.rows[0];
                                var objStoryNode = objXML.documentElement.firstChild;   
                                while (objStoryNode != null && !(objStoryNode.attributes)){
                                    objStoryNode = objStoryNode.nextSibling;
                                }                             
                                var rowOnMouseOver = function(){
                                    LookupChangeSelectedRow(textbox, this);
                                }
                                while (objRow!=null){
                                    objRow.onmouseover = rowOnMouseOver;
                                    if (objStoryNode != null){
                                        objRow.strName = objStoryNode.getAttribute('name');
                                        if (textbox.idInput != null){
                                            objRow.strID = objStoryNode.getAttribute('id');
                                        }
                                        objStoryNode = objStoryNode.nextSibling;
                                        while (objStoryNode && !(objStoryNode.attributes)){
                                            objStoryNode = objStoryNode.nextSibling;
                                        }                             
                                        
                                    }
                                    objRow = objRow.nextSibling;
                                }
                                
                                textbox.div.onclick = function(){
                                        if (textbox.selectedRow!=null){
                                            
                                            LookupClickRow(textbox, textbox.selectedRow.strName, (textbox.idInput==null? null: textbox.selectedRow.strID));
                                            
                                        }
                                    };
                                }
                            }
                        }
                        httpRequest.send(null);
                    }
                }, 100
            );
        }else{
            textbox.div.style.display="none";
            ShowDropDowns(textbox);
        }
    }
    if (textbox.value.match(/[,;]\s*$/)!= null){
        textbox.div.style.display="none";
        ShowDropDowns(textbox);
    }
            

}

	    
function ContainedWithin(child, container){
    var parentEl = child;
    while(parentEl !=null){
        if (container==parentEl){
            return true;
        }
        parentEl = parentEl.parentElement;
    }
    return false;
}

function LookupDivMouseOver(textbox){
    textbox.divHasMouse = true;
    }

function LookupDivMouseOut(textbox){
    textbox.divHasMouse = false;
}


function RegExpEscape(text) {
  if (! arguments.callee.sRE) {
	var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\' ];
	arguments.callee.sRE = new RegExp('(\\' + specials.join('|\\') + ')', 'g');
  }

  return text.replace(arguments.callee.sRE, '\\$1');
}

function HideDropDowns(textbox){
    // hide all dropdowns for I.E.
    if (window.clientInformation != null && window.clientInformation.appVersion.match(/MSIE [1-6]./)!= null){
        textbox.dropdowns = new Array();
        for(var intFrameIndex = 0; intFrameIndex < document.frames.length; intFrameIndex++){
            var arrSelects = document.frames[intFrameIndex].document.getElementsByTagName("select");
            for (var intSelectIndex = 0; intSelectIndex < arrSelects.length; intSelectIndex++){
                textbox.dropdowns.unshift(arrSelects[intSelectIndex]);
                if (arrSelects[intSelectIndex].style.oldVisibility == null){
                    arrSelects[intSelectIndex].style.oldVisibility=arrSelects[intSelectIndex].style.visibility;                
                }
                arrSelects[intSelectIndex].style.visibility="hidden";
                
            }
        }
        var arrSelects = document.getElementsByTagName("select");
        for (var intSelectIndex = 0; intSelectIndex < arrSelects.length; intSelectIndex++){
            textbox.dropdowns.unshift(arrSelects[intSelectIndex]);
            if (arrSelects[intSelectIndex].style.oldVisibility == null){
                arrSelects[intSelectIndex].style.oldVisibility=arrSelects[intSelectIndex].style.visibility;                
            }
            arrSelects[intSelectIndex].style.visibility="hidden";
            
        }
       
    }

}

function ShowDropDowns(textbox){
   if (window.clientInformation != null && window.clientInformation.appVersion.match(/MSIE [1-6]./)!= null && textbox.dropdowns!= null){
        for (var intSelectIndex = 0; intSelectIndex < textbox.dropdowns.length; intSelectIndex++){
            textbox.dropdowns[intSelectIndex].style.visibility= textbox.dropdowns[intSelectIndex].style.oldVisibility;            
        }       
    }

}

function webTrends_dcsMultiTrack(uriParam, uri, tiParam, title) {
    //debugger;
    if (window.dcsMultiTrack)
        dcsMultiTrack(uriParam, uri, tiParam, title);

}