var xmlDoc;

function ParseXMLandCreateDropDownList(searchBoxId, hiddenFieldId, resultsList, XMLData)
{
    //IE
    if (window.ActiveXObject)
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.loadXML(XMLData);
        
        resultsList.innerHTML = "";
    
        var itms = xmlDoc.childNodes[1].childNodes; 
    }
    //Firefox
    else if (document.implementation && document.implementation.createDocument)
    {      
        var parser = new DOMParser();
        xmlDoc = parser.parseFromString(XMLData, "text/xml");
        
        resultsList.innerHTML = "";
    
        var itms = xmlDoc.childNodes[0].childNodes;
    }   
    
    for(var i = 0; i < itms.length; i++) 
    {
        var link = itms[i].childNodes[0].nodeValue; 
        var temp = new Array();
        temp = link.split(';');

        resultsList.innerHTML += "<a href=\"#tops\" style=\"padding:5px 5px 5px 2px;display:block;width:auto;\"" 
        + "onkeyup=\"KeyCheck(event, '" + searchBoxId + "', '" + hiddenFieldId + "', '" + temp[1] + "', '" + resultsList.id + "')\" "
        + "onclick=\"replaceTEXT(event, '" + searchBoxId + "', '" + hiddenFieldId + "', '" + temp[1] + "', '" + resultsList.id + "')\">" + temp[0] + "</a>";
    }                                 
}

function CreateXmlHttp(searchBoxId, hiddenFieldId, resultsList, url, indicatorImgPath) 
{                                
    var that = this;                                                    
    this.updating = false;                                            
    this.callback = function () {}                                   

    this.update = function() 
    {                              
        if (that.updating == true) 
        { 
            return false; 
        }    

        that.updating = true;                                           
        var xmlHttp = null;          

        if (window.XMLHttpRequest) 
        {                                 
            xmlHttp = new XMLHttpRequest();                                
        } 
        else 
        {                                                             
            try
            {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e)
            {
                try
                {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(oc)
                {
                    xmlHttp = null;
                }
            }      
        }                                                              

        if (xmlHttp == null) 
        {                                             
            return false;                                               
        } 
        else 
        {             
            xmlHttp.onreadystatechange = function() 
            {                               
                if (xmlHttp.readyState == 4) 
                { 
                    that.updating = false;                        
                    if (xmlHttp.status == 200) 
                    { 
                        //parseXML
                        ParseXMLandCreateDropDownList(searchBoxId, hiddenFieldId, resultsList, xmlHttp.responseText);
                    } 
                    else 
                    {
                        resultsList.innerHTML = '<p style=\"padding:5px 5px 5px 2px;display:block;width:auto;\">Failed to get the feed you requested</p>';
                    }       
                    delete xmlHttp;         
                } 
                else
                {                            
                    if (indicatorImgPath != "")
                    {
                        resultsList.innerHTML = "<img src='" + indicatorImgPath + "'> loading...";
                    }
                } 
            }                                   
        }    

        var uri = urlCall;  
        xmlHttp.open("GET", uri, true);                            
        xmlHttp.send('');                                        
        return true;                                                                                                                   
    }

    // This area set up on constructor calls.
    var urlCall = url;                                               
} 

var searchResultsListIdGlobal;
var alertTimerId = 0;

function AJAXSearch(mEvent, searchBoxId, searchResultsListId, hiddenFieldId, SearchLabelId, indicatorImgPath, entity, NoOfResults, ProjectID, OrganisationType)
{
    //this is used in the document.onclick event
    searchResultsListIdGlobal = searchResultsListId;    
    var resultsList = document.getElementById(searchResultsListId);
    
    //focus the first result  
    if (resultsList.style.display == "")
    { 
        if (mEvent.keyCode == 40) //Arrow Down;
        {
            SearchBoxUpDownArrowPress(resultsList);
            return;
        }
        else if (mEvent.keyCode == 27) //escape;
        {
            resultsList.style.display = "none";
            return;
        }
    }
    
    clearTimeout(alertTimerId);

    var searchTerm;

    //IE
    if (mEvent.srcElement)
    {
        searchTerm = mEvent.srcElement.value;
        searchBoxId = mEvent.srcElement.id;
    }
    //Firefox
    else if (mEvent.target)
    {
        searchTerm = mEvent.target.value; 
        searchBoxId = mEvent.target.id;
    } 
       
    resultsList.innerHTML = "";
    
    var nSearchTerm = searchTerm.replace(/^\s+|\s+$/, '');
    
    if (nSearchTerm != "")
    {
        var URL;
        if (entity == "Individual")
        {
            //we use the ProjectID as the Usa Rugby indetifier. If = 0 then not USR if = 1 then USR
            if (typeof ProjectID == 'undefined' || ProjectID == null) { ProjectID = 0 }; 
            URL = "AJAX.aspx?method=FindIndividuals&NoOfResults=" + NoOfResults + "&usr=" + ProjectID + "&key="
        }
        else if (entity == "IndividualInOrganisation")
        {
            URL = "AJAX.aspx?method=FindIndividuals&NoOfResults=" + NoOfResults + "&OrganisationID=" + ProjectID + "&RoleName=" + OrganisationType + "&key="
        }
        else if (entity == "IndividualsWithTransfers") //USAR specific
        {            
            URL = "AJAX.aspx?method=FindIndividuals&NoOfResults=" + NoOfResults + "&usr=1&transfers=1&key="
        }
        else if (entity == "Organisation")
        {
            URL = "AJAX.aspx?method=FindOrganisations&NoOfResults=" + NoOfResults + "&OrganisationTypes=" + OrganisationType + "&key="
        }
        else if (entity == "Project")
        {
            URL = "AJAX.aspx?method=FindIndividuals&NoOfResults=" + NoOfResults + "&ProjectID=" + ProjectID + "&usr=0" + "&key="
        }
        divtofill = new CreateXmlHttp(searchBoxId, hiddenFieldId, resultsList, URL + nSearchTerm, indicatorImgPath);         
                    
        alertTimerId = setTimeout("waitabit()", 1000);    
    }  
    else
    {
        resultsList.style.display = "none";
    }
}

function waitabit()
{
    divtofill.update();
    document.getElementById(searchResultsListIdGlobal).style.display = "";
}

function replaceTEXT(mEvent, SearchBoxId, HiddenFieldId, HiddenFieldValue, resultsListId)
{
    var SearchBox = document.getElementById(SearchBoxId);
    var HiddenFieldd = document.getElementById(HiddenFieldId);

    if (HiddenFieldValue != "" && typeof HiddenFieldValue != "undefined")
    {       
        //IE
        if (mEvent.srcElement)
        {
            SearchBox.value = mEvent.srcElement.innerText;
        }
        //Firefox
        else if (mEvent.target)
        {
            SearchBox.value = mEvent.target.textContent;    
        }   
        HiddenFieldd.value = HiddenFieldValue; 
        
        document.getElementById(resultsListId).style.display = "none";
        
        if (typeof(HiddenFieldd.onblur) == "function")
            HiddenFieldd.onblur();
    }
    else
    {
        HiddenFieldd.value = "";
        SearchBox.value = "";
        document.getElementById(resultsListId).style.display = "none";
    }
    
    return false;
}

function ReduceStringLength(s)
{
    return (s.length > 40) ? s.substring(0, 37) + "..." : s;
}

function KeyCheck(mEvent, SearchBoxId, HiddenFieldId, HiddenFieldValue, resultsListId)
{   
    var nextObject;
    var that;
    
    //IE
    if (mEvent.srcElement)
    {
        that = mEvent.srcElement;
    }
    //Firefox
    else if (mEvent.target)
    {
        that = mEvent.target;
    }  
    
    switch(mEvent.keyCode)
    {
        case 13: //Enter;
            replaceTEXT(mEvent, SearchBoxId, HiddenFieldId, HiddenFieldValue, resultsListId);
            break;
        case 27: //escape;
            document.getElementById(resultsListId).style.display = "none";
            break;
        case 38: //Arrow Up;
        
            if (that.previousSibling)
            {
                if (that.previousSibling.tagName == "A")
                {
                    //disable the document's key events to avoid scrolling by pressing the arrow keys
                    //these events are reanabled one we click somewhere inside the document
                    document.onkeyup = function () { return false; }
                    document.onkeydown = function () { return false; }
                    
                    nextObject = that.previousSibling;
                    nextObject.focus();
                    //use javascript to apply style to the focused item in IE 6
                    if (document.all)
                    {
                        nextObject.className = "focus";
                        nextObject.nextSibling.className = "notfocus";
                    }
                }
            }
            break;
        case 40: //Arrow Down;
        
            if (that.nextSibling)
            {
                if (that.nextSibling.tagName == "A")
                {
                    //disable the document's key events to avoid scrolling by pressing the arrow keys
                    //these events are reanabled one we click somewhere inside the document
                    document.onkeyup = function () { return false; }
                    document.onkeydown = function () { return false; }
                    
                    nextObject = that.nextSibling;
                    nextObject.focus();
                    //use javascript to apply style to the focused item in IE 6
                    if (document.all)
                    {
                        nextObject.className = "focus";
                        nextObject.previousSibling.className = "notfocus";
                    }
                }
            }
            break;
    }
}

function SearchBoxUpDownArrowPress(resultsContainer)
{
    //var resultsContainer = document.getElementById("SearchResults");
    var firstResult;
    
    firstResult = resultsContainer.childNodes[0];
    
    //use javascript to apply style to the focused item in IE 6
    if (document.all)
    {
        firstResult.className = "focus";
    }
    
    firstResult.focus();
    
    //disable the document's key events to avoid scrolling by pressing the arrow keys
    //these events are reanabled one we click somewhere inside the document                
    document.onkeyup = function () { return false; }
    document.onkeydown = function () { return false; }
}

//IE
if (window.ActiveXObject)
{
    document.attachEvent('onclick',docOnclickEvent);
}
//Firefox
else
{
    document.addEventListener('click',docOnclickEvent,true);
}

function docOnclickEvent(e)
{
//    if (!e) var e = window.event;
//	e.cancelBubble = true;
//	if (e.stopPropagation) e.stopPropagation();
    if (!e) var e = window.event;
    if (e.srcElement)
    {
        that = e.srcElement;
    }
    //Firefox
    else if (e.target)
    {
        that = e.target;
    }  
    
    document.onkeyup = function () { return true; }
    document.onkeydown = function () { return true; }
    if (document.getElementById(searchResultsListIdGlobal))
    {
        document.getElementById(searchResultsListIdGlobal).style.display = "none";
    }        
}