﻿var m_tCheckValidity;
var m_tRepopulateById;
var MAX_ITEMS = 10;
var ITEM_TEMPLATE = '<div id="div[ITEM]" onmouseover="javascript:suggestOver(\047[CLIENTID]\047,this);" ' +
                    'onclick="javascript:suggestSelect(\047[CLIENTID]\047,\047[ID]\047,\047[JSNAME]\047,\047[OP]\047);" ' +
                    'onkeydown="suggestKeyPress(\047[CLIENTID]\047,event);" ' +
                    'class="suggest_link">[NAME] ' +
                    '<input type="hidden" id="txtdiv[ITEM]" name="txtdiv[ITEM]" value="[ID][KEYVALUE_SEPERATOR][NAME]"/>' +
                    '</div>';

/** consumer events **/

function RaiseonBlurEvent()
{
    try
    {
        __DDOnBlur();
    }
    catch (e) { }
}

/** Ajax callback events **/

function __AjaxCallbackDD() {
    var sResponse;
    var sClientID;

    sResponse = moXMLHTTP.responseText;

    sClientID = GetKeyValue(sResponse, "clientid");
    sResponse = sResponse.split("&op=")[0];

    BuildSuggestResultsList(sClientID, sResponse);

    hideDDWaiting(sClientID);
}

function __AjaxCallbackDDPcodeTest(sResponse) {
    var sClientID;
    var bRes;
    var hidIDs;

    sClientID = GetKeyValue(sResponse, 'clientid');
    bRes = GetKeyValue(sResponse, 'res');
    sPostcode = GetKeyValue(sResponse, 'kw');

    hideDDWaiting(sClientID);

    if (bRes != 'true') {
        ShowError(sClientID);
    }
    else {
        // store in the id
        hidIDs = document.getElementById(sClientID + '_hidIDs');
        //hidIDs.value = sPostcode;

        try {
            __DDValidPostcodeCallback();
        }
        catch (e) { }
    }
}

/** general routines **/

function SetTxtFocus(CLIENTID) {
    //control may be disabled so try
    try {
        document.getElementById(CLIENTID + '_txtX').focus();
    }
    catch (e) { }
}

function ShowResults(CLIENTID) {
    document.getElementById(CLIENTID + '_search_suggest').style.visibility = 'visible';    
}

function HideResults(CLIENTID) {
    document.getElementById(CLIENTID + '_search_suggest').style.visibility = 'hidden';
    removeLayerIframe(document.getElementById(CLIENTID + '_genX'));
}

function GetDDType(CLIENTID) {
    var sRes;
    sRes = document.getElementById(CLIENTID + '_hidType').value;
    return (sRes);
}

function showDDWaiting(CLIENTID) {
    document.getElementById(CLIENTID + '_imgSearching').style.visibility = 'visible';
}

function hideDDWaiting(CLIENTID) {
    document.getElementById(CLIENTID + '_imgSearching').style.visibility = 'hidden';
}

function HideNoMatches(CLIENTID) {
    var divX;
    divX = document.getElementById(CLIENTID + "_divNoMatches");
    divX.style.display = "none";
}

function ShowNoMatches(CLIENTID) {
    var divX;
    divX = document.getElementById(CLIENTID + "_divNoMatches");
    divX.style.display = "";
}

function HideError(CLIENTID) {
    var divX;
    divX = document.getElementById(CLIENTID + "_divError");
    divX.style.display = "none";
}

function ShowError(CLIENTID) {
    var divX;
    divX = document.getElementById(CLIENTID + "_divError");
    divX.style.display = "";
}

function HideLocalise(CLIENTID) {
    var divX;
    divX = document.getElementById(CLIENTID + "_divLocalise");
    divX.style.display = "none";
}

function ShowLocalise(CLIENTID) {
    var divX;
    divX = document.getElementById(CLIENTID + "_divLocalise");
    divX.style.display = "";
}


/** postcode functions **/

function IsPostcode(CLIENTID)
{
    var sData;
    var bRes = false;
    var txtX;

    txtX = document.getElementById(CLIENTID + '_hidType');

    sData = txtX.value;

    if (sData == 'LOCAT') {
        txtX = document.getElementById(CLIENTID + '_txtX');
        sData = txtX.value;
        bRes = IsPostcodeValid(sData);
    }

    return (bRes);
}

function CheckValidity(CLIENTID)
{
    var sData;
    var bRes;
    var txtIDs;
    var sIDs;
    var sType;
    var sQS;
    var oXMLHTTP;

    clearTimeout(m_tCheckValidity);
    sIDs = document.getElementById(CLIENTID + '_hidIDs').value;
    sType = document.getElementById(CLIENTID + '_hidType').value;
    sData = document.getElementById(CLIENTID + '_txtX').value;

    // hide any previous errors
    HideError(CLIENTID);
    //HideLocalise(CLIENTID);

    if (sType == 'LOCAT')
    {
        if (IsPostcode(CLIENTID)) 
        {
            if (sData != '')
            {
                // check postcode validity ******SYNCHRONOUSLY******
                showDDWaiting(CLIENTID);
                sQS = 'clientid=' + CLIENTID + '&dscode=OTSSCMLIVE&op=pcodetest&kw=' + sData;

                oXMLHTTP = GetXmlHttpObject();
                oXMLHTTP.open("POST", msURL, false);

                oXMLHTTP.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
                oXMLHTTP.setRequestHeader("Content-length", sQS.length);
                oXMLHTTP.send(sQS);

                __AjaxCallbackDDPcodeTest(oXMLHTTP.responseText);
            }
        }
        else
        {
            if ((sData != '') && (sIDs == ''))
            {
                ShowError(CLIENTID);
                HideResults(CLIENTID);
            }
        }
    }
}

/* suggest functions */

function suggestSearch(CLIENTID, sType)
{
    var txtX;
    var sData;
    var sDSCode;
    var bIsPostcode;
    var hidLastURL;
    var sQS;
    var LyrID = document.getElementById(CLIENTID + '_genX');
    var nCharLimit;

    nCharLimit = 2;
    if (sType.indexOf('GORGS_SEARCH') >-1)
    {
        nCharLimit = 0;
    }
    
    hidLastURL = document.getElementById(CLIENTID + '_hidLastURL');
    txtX = document.getElementById(CLIENTID + '_txtX');
    sData = trim(txtX.value);
    sDSCode = document.getElementById(CLIENTID + "_hidDSCode").value;
    HideError(CLIENTID);
    //HideLocalise(CLIENTID);
    sFW = '3';

    try {
        if (document.getElementById(CLIENTID + '_optStartsWith').checked) { sFW = '2'; }
    }
    catch (e) { }

    sQS = 'dscode=' + sDSCode + '&op=' + sType + '&kw=' + escape(sData) + '&clientid=' + CLIENTID + '&fw=' + sFW

    if (sQS != hidLastURL.value)
    {
        // need minimum number of chars at least
        if ((sData != '') && (sData.length > nCharLimit))
        {
            bIsPostcode = IsPostcode(CLIENTID);
            hidLastURL.value = sQS;
            if (!bIsPostcode)
            {
                showDDWaiting(CLIENTID);
                moXMLHTTP.open("POST", msURL, true);

                // Define an event handler for processing
                moXMLHTTP.onreadystatechange = function() { managestatechange('__AjaxCallbackDD'); }; ; ;
                moXMLHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                moXMLHTTP.send(sQS);
            }
        }
        else
        {
            document.getElementById(CLIENTID + "_hidSelectedID").value="";
            hideDDWaiting(CLIENTID);
            HideResults(CLIENTID);
        }
        //
        // Fix display in IE
        addLayerIframe(LyrID);
        fixFooter();

    }
}

function RepopulateByID(CLIENTID) 
{
    var sIDs;
    var sData;
    var sType;
    var sDSCode;
    var sItem;
    var sItems;
    var sID;
    var sText;
    var asItems;
    var nItem;
    var nItems;
    var spanX;
    var bIDsCleared = false;
    var oXMLHTTP;

    clearTimeout(m_tRepopulateById);
    sIDs = document.getElementById(CLIENTID + '_hidIDs').value;
    sText = document.getElementById(CLIENTID + '_txtX').value;

    if ((sIDs != '') && (sText==''))
    {
        sType = document.getElementById(CLIENTID + '_hidType').value;
        sDSCode = document.getElementById(CLIENTID + "_hidDSCode").value;

        //synchronous get of required data by ID
        showDDWaiting(CLIENTID);
        sQS = 'byid=y&dscode=' + sDSCode + '&op=' + sType + '&kw=' + sIDs + '&clientid=' + CLIENTID;

        oXMLHTTP = GetXmlHttpObject();
        oXMLHTTP.open("POST", msURL, false);

        oXMLHTTP.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        oXMLHTTP.setRequestHeader("Content-length", sQS.length);
        oXMLHTTP.send(sQS);

        sItems = oXMLHTTP.responseText;

        asItems = sItems.split(PAIR_SEPERATOR);
        nItems = asItems.length;

        for (nItem = 0; (nItem < nItems && nItem < MAX_ITEMS); nItem++) 
        {
            bSuspendCallback = true;
            if (nItem == (nItems-1)) {bSuspendCallback = false; }
            sItem = asItems[nItem];
            sID = sItem.split(KEYVALUE_SEPERATOR)[0];
            sText = sItem.split(KEYVALUE_SEPERATOR)[1];
            sText = escape(sText);
            spanX = document.getElementById("span" + sType + sID);
            if (spanX == null) 
            {
                if (!bIDsCleared) 
                {
                    bIDsCleared = true;
                    document.getElementById(CLIENTID + '_hidIDs').value = '';
                }    
                suggestSelect(CLIENTID, sID, sText, sType, bSuspendCallback)
            }
        }
        
        hideDDWaiting(CLIENTID);
    }
}

function BuildSuggestResultsList(CLIENTID, sItems)
{
    var sID;
    var sText;
    var sJSText;
    var sItem;
    var asItems;
    var nItem;
    var nItems;
    var nItemOffset=0;
    var oList;
    var oLI;
    var hidIDs;
    var sType;
    var sFirst;

    //all div IDs must be unique
    while (document.getElementById("div" + nItemOffset) != null)
    {
        nItemOffset = nItemOffset + 1000;
    }

    sType = GetDDType(CLIENTID);

    hidIDs = document.getElementById(CLIENTID + '_hidIDs');

    sIDs = ',' + hidIDs.value + ',';

    oList = document.getElementById(CLIENTID + '_search_suggest');

    //clear the list first
    oList.innerHTML = '';

    if (sItems.indexOf('|') > 0)
    {
        asItems = sItems.split(PAIR_SEPERATOR);
        nItems = asItems.length;

        for (nItem = 0; (nItem < nItems && nItem < MAX_ITEMS); nItem++)
        {
            sItem = asItems[nItem];
            sID = sItem.split(KEYVALUE_SEPERATOR)[0];
            sText = sItem.split(KEYVALUE_SEPERATOR)[1];
            sJSText = sText;
            sJSText = escape(sJSText);

            if (sIDs.indexOf(',' + sID + ',') < 0)
            {
                oLI = document.createElement("li");
                sItem = ITEM_TEMPLATE;

                while (sItem.indexOf("[") > -1)
                {
                    sItem = sItem.replace("[KEYVALUE_SEPERATOR]", KEYVALUE_SEPERATOR);
                    sItem = sItem.replace("[ITEM]", nItem + nItemOffset);
                    sItem = sItem.replace("[ID]", sID);
                    sItem = sItem.replace("[NAME]", sText);
                    sItem = sItem.replace("[JSNAME]", sJSText);
                    sItem = sItem.replace("[OP]", sType);
                    sItem = sItem.replace("[CLIENTID]", CLIENTID);
                }

                oList.innerHTML += sItem;

                if (sFirst == null) { sFirst = "div" + parseInt(nItem + nItemOffset); }
            }
        }
        HideNoMatches(CLIENTID);
        ShowResults(CLIENTID);
        suggestOver(CLIENTID, document.getElementById(sFirst));
    }
    else
    {
        HideResults(CLIENTID);
        ShowNoMatches(CLIENTID);
    }
}

function suggestOver(CLIENTID,div_value)
{
    var hidX;

    hidX = document.getElementById(CLIENTID + "_hidSelectedID");

    // remove highlight fom currently selected item
    if (hidX.value != '')
    {
        suggestOut(document.getElementById(hidX.value));
    }

    if (div_value != null)
    {
        div_value.className = 'suggest_link_over';
        hidX.value = div_value.id;
    }
    else
    {
        hidX.value = '';
    }
}

function suggestOut(div_value)
{
    if (div_value != null)
    {
        div_value.className = 'suggest_link';
    }
}

function suggestKeyPress(CLIENTID, e)
{

    var nKey;
    var hidSelectedDiv;
    var sSelectedDivID;
    var oSelectedDiv;
    var sNextDiv;
    var oNextDiv;
    var sDetails;
    var sID;
    var sText;

    nKey = (window.event) ? event.keyCode : e.keyCode;

    hidSelectedDiv = document.getElementById(CLIENTID + "_hidSelectedID");
    sSelectedDivID = hidSelectedDiv.value;

    if ((nKey == KEY_DOWN) || (nKey == KEY_UP))
    {
        oSelectedDiv = document.getElementById(sSelectedDivID);
        sNextDiv = sSelectedDivID.replace("div", "");

        if (nKey == KEY_DOWN)   {sNextDiv = parseInt(sNextDiv) + 1;}
        if (nKey == KEY_UP)     {sNextDiv = parseInt(sNextDiv) - 1;}

        sNextDiv = "div" + sNextDiv;
        oNextDiv = document.getElementById(sNextDiv);

        if (oNextDiv != null)
        {
            suggestOver(CLIENTID,oNextDiv);
        }
    }

    if (nKey == KEY_ENTER)
    {
        if (sSelectedDivID != '')
        {
            sDetails = document.getElementById("txt" + sSelectedDivID).value;
            if (sDetails != '')
            {
                gbDLLEnterClicked = true;
                sID = sDetails.split(KEYVALUE_SEPERATOR)[0];
                sText = sDetails.split(KEYVALUE_SEPERATOR)[1];
                suggestSelect(CLIENTID, sID, sText, GetDDType(CLIENTID));
            }
        }
    }
}

function suggestSelect(CLIENTID, sID, sName, sType, bSuspendCallback)
{
    var sSelected;
    var oSpan;
    var txtX;
    var sIDs;
    var divX;
    var sSelectMode;
    var hidIDs;

    HideError(CLIENTID);
    HideLocalise(CLIENTID);

    hidIDs = document.getElementById(CLIENTID + '_hidIDs');
    sIDs = ',' + hidIDs.value + ',';
    sName = unescape(sName);

    // prevent duplicate additions
    if (sIDs.indexOf(',' + sID + ',') < 0)
    {
        if (document.getElementById(CLIENTID + '_hidDisabled').value == '')
        {
            sSelected = document.getElementById("divSelectedTemplate").innerHTML;
        }
        else
        {
            sSelected = document.getElementById("divReadOnlyTemplate").innerHTML;
        }
        sSelected = sSelected.replace("[ID]", sID);
        sSelected = sSelected.replace("[DESC]", sName);
        sSelected = sSelected.replace("[CLIENTID]", CLIENTID);
        sSelected = sSelected.replace(" ", "&nbsp;");
        if (hidIDs.value == '')
        {
            hidIDs.value = sID;
        }
        else
        {
            hidIDs.value = hidIDs.value + ',' + sID;
        }

        // create a child node
        oSpan = document.createElement("span");
        oSpan.id = "span" + sType + sID;
        oSpan.innerHTML = sSelected;

        // ensure added at top
        divX = document.getElementById(CLIENTID + '_divOuter');
        divX.insertBefore(oSpan, document.getElementById(CLIENTID + '_txtX'));

        // ensure added below
        //divOuter.appendChild(oSpan);

        //remove any typed text
        document.getElementById(CLIENTID + '_txtX').value = '';

        //remove any displayed results
        document.getElementById(CLIENTID + '_search_suggest').innerHTML = '';

	if ((sType == 'LOCAT') && (sID=="ENGLAND")){
	   ShowLocalise(CLIENTID);
	}
        //get ready for another one
        SetTxtFocus(CLIENTID);
    }
    HideResults(CLIENTID);
    if (bSuspendCallback != true) 
    {
        try {
            __DDCallback(hidIDs.value);
        }
        catch (e) { }
    }
    sSelectMode = document.getElementById(CLIENTID + '_hidMode').value;

    if (sSelectMode == SELECT_MODE_SINGLE)
    {
        //prevent any other characters
        txtX = document.getElementById(CLIENTID + '_txtX');
        txtX.disabled = true;
    }

    document.getElementById(CLIENTID + "_hidSelectedID").value = "";

}

function suggestRemove(CLIENTID, sID)
{
    var oSpan;
    var sIDs;
    var hidIDs;
    var divX;
    var txtX;
    var sSelectMode;
    var sType;

    sType = GetDDType(CLIENTID);
    hidIDs = document.getElementById(CLIENTID + '_hidIDs');
    HideLocalise(CLIENTID);

    // remove from pkeys
    sIDs = hidIDs.value;
    sIDs = ',' + sIDs + ',';
    sIDs = sIDs.replace("," + sID + ",", ",");

    //remove first and last chars
    sIDs = sIDs.substr(1);
    sIDs = sIDs.substr(0, sIDs.length - 1);

    hidIDs.value = sIDs;

    // remove from display
    oSpan = document.getElementById("span" + sType + sID);
    divX = document.getElementById(CLIENTID + '_divOuter');
    divX.removeChild(oSpan);
    try {
        __DDCallback(hidIDs.value);
    }
    catch (e) { }

    sSelectMode = document.getElementById(CLIENTID + '_hidMode').value;

    if (sSelectMode == SELECT_MODE_SINGLE) {
        txtX = document.getElementById(CLIENTID + '_txtX');
        txtX.disabled = false;
    }

    SetTxtFocus(CLIENTID);
}

function checkCR(evt)
{
    var sOpenPopup = '';
    var bAlwaysRaiseEvent = true;
    var evt = (evt) ? evt : ((event) ? event : null);
    var bRes = true;

    sOpenPopup = gsOpenPopup;

    var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);

    if (evt.keyCode == KEY_ENTER)
    {
        bRes = false;
        if (gsOpenPopup!='')
        {
            gsOpenPopup = '';
            document.all("cmdSavePopup" + sOpenPopup).click();
        }
        else
        {
            if ((node.type == "text") || (node.type == "file") || (bAlwaysRaiseEvent == true))
            {
                try
                {
                    __EnterPressed();
                }
                catch (e) { }
            }
        }
    }
    else if (evt.keyCode == KEY_ESCAPE)
    {
        bRes = false;
        // escape pressed
        if (gsOpenPopup!='')
        {
            gsOpenPopup = '';
            document.all("cmdClosePopup" + sOpenPopup).click();
        }
    }
    return bRes;
}

document.onkeypress = checkCR;
