DmiGetAdminQryStrValues = function() {
    var qryStrWithQM = window.location.search;
    var qryStr = qryStrWithQM.substring(1);
    // split each name-value pair in the query string
    var arr = qryStr.split('&');
    // variable to hold the admin query string values
    var adminQryStr = '';
    for (i=0; i<arr.length; i++) {
        // split name and value of each param
        var index = arr[i].indexOf('=');
        var key = arr[i].substring(0,index);
        //var val = arr[i].substring(index+1);
        if (key == 'site_code' || key == 'microsite_id' || key == 'microsite_name') {
            adminQryStr = adminQryStr + '&' + arr[i]; 
        };
    };
    return adminQryStr;
};


DmiGetInputElemIdOnPage = function(inpElemId) {
    var inputelements = document.getElementsByTagName("input");
    var idValue;
    for (i=0; i<inputelements.length; i++) {
        idValue = inputelements[i].id;
        if (idValue.indexOf(inpElemId) >= 0) {
            return idValue;
        };
    };
};

DmiAutoCompleteSetupAdmin = function(textBoxId, containerId, dsPageName, customParams, recordDelimStr, fieldDelimStr) {
    // Instantiate an XHRDataSource
    var oDS = new YAHOO.util.XHRDataSource(dsPageName);
    // Set the responseType
    oDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
    // Define the schema of the delimited results
    oDS.responseSchema = {
        recordDelim: recordDelimStr,
        fieldDelim: fieldDelimStr
    };
    // Enable caching
    oDS.maxCacheEntries = 10;

    // get the rendered ID value for the AC field element on the page
    var ACfieldId = DmiGetInputElemIdOnPage(textBoxId);
    // Instantiate AutoComplete
    var ACconfigs = {
        maxResultsDisplayed: 20,
        useIFrame: true,
        animHoriz: false,
        animVert: false,
        allowBrowserAutocomplete: false
    };
    var oAC = new YAHOO.widget.AutoComplete(ACfieldId, containerId, oDS, ACconfigs);
    oAC.generateRequest = function(sQuery) {
        return "?userInputStr=" + sQuery + "&" + customParams;
    };

    return {
        oDS: oDS,
        oAC: oAC
    };
};

DmiAutoCompleteSetup = function(textBoxId, dsPageName, customParams, recordDelimStr, fieldDelimStr, dataDelimChar) {
    var HtmlStartPattern = "DMI:AJAX:BEGIN";
    var HtmlEndPattern   = "DMI:AJAX:END";
    
    // Instantiate an XHRDataSource
    var oDS = new YAHOO.util.XHRDataSource(dsPageName);
    // Set the responseType
    oDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
    // Define the schema of the delimited results
    oDS.responseSchema = {
        recordDelim: recordDelimStr,
        fieldDelim: fieldDelimStr
    };
    // Enable caching
    oDS.maxCacheEntries = 10;

    // provide the over-ride methods for the DataSource component
    oDS.doBeforeParseData = function(oRequest, oFullResponse, oCallback) {
        var response = oFullResponse;
        var idx;
        idx = response.indexOf(HtmlStartPattern);
        if (idx >= 0 && response.length > (idx + HtmlStartPattern.length)) {
            var substringLen = response.length - (idx + HtmlStartPattern.length);
            response = response.substr(idx + HtmlStartPattern.length, substringLen);
        };
        idx = response.indexOf(HtmlEndPattern);
        if (idx >= 0) {
            response = response.substr(0, idx);
        };

        var dataOnlyStr = '';
        var startidx, endidx;

        // look for the first data-chunk-deliminator
        startidx = response.indexOf(dataDelimChar, 0);
        while (startidx >= 0) {
            // since the starting deliminator has been found, there has to be an ending deliminator
            // extract the data between them
            endidx = response.indexOf(dataDelimChar, startidx+1);
            dataOnlyStr = dataOnlyStr + response.slice(startidx+1, endidx);
            // then check if there is another data-chunk in the response
            startidx = response.indexOf(dataDelimChar, endidx+1);
        };

        return dataOnlyStr;
    };

    // get the "div" element
    var elParent = document.getElementById(textBoxId).parentNode;
    // set the default css Class (for skinning) on the "span" element (parent of the "div") -- if it does not have one
    if (!elParent.parentNode.className) {
        elParent.parentNode.className = "yui-skin-sam";
    };
    // create the "div" element (the "container") for holding the AC results
    var elACContainer = document.createElement("div");
    elParent.appendChild(elACContainer);

    // first, set the Config params
    var ACconfigs = {
        maxResultsDisplayed: 200,
        useIFrame: true,
        animHoriz: false,
        animVert: false,
        allowBrowserAutocomplete: false
    };
    // Instantiate the AutoComplete widget
    var oAC = new YAHOO.widget.AutoComplete(textBoxId, elACContainer, oDS, ACconfigs);

    // provide the over-ride methods for the AutoComplete widget
    oAC.generateRequest = function(sQuery) {
        return "?userInputStr=" + sQuery + "&" + customParams;
    };
    // position the container just below the input textbox, and width to what is needed for the results
    oAC.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) {
        var pos = YAHOO.util.Dom.getXY(oTextbox);
        pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
        YAHOO.util.Dom.setXY(oContainer,pos);
        oContainer.style.width = '100%';
        return true;
    };

};



YAHOO.namespace('DMI');

/* AjaxLoad class constructor 
 * 
 * AjaxLoad extends Autocomplete widget, but effectively turns off the normal Autocomplete feature
 * by setting the minQueryLength to a large value (say 50).
 */
YAHOO.DMI.AjaxLoad = function(elInput, elContainer, oDataSource, oConfigs) {
    if (!oConfigs) {
        YAHOO.DMI.AjaxLoad.superclass.constructor.call(this, elInput, elContainer, oDataSource);
    }
    else {
        YAHOO.DMI.AjaxLoad.superclass.constructor.call(this, elInput, elContainer, oDataSource, oConfigs);
    };
};

/* AjaxLoad extends from the Autocomplete widget */
YAHOO.lang.extend(YAHOO.DMI.AjaxLoad, YAHOO.widget.AutoComplete);


var DmiAjaxLoader = {
    oALfirst: null,
    oALsecond: null
};

DmiAjaxLoadHtmlSetup = function(instanceNum, targetId, dsPageName, customParams) {
    var HtmlStartPattern = "DMI:AJAX:BEGIN";
    var HtmlEndPattern   = "DMI:AJAX:END";
    
    // Instantiate an XHRDataSource
    var oDS = new YAHOO.util.XHRDataSource(dsPageName);
    // Set the responseType
    oDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
    // Define the schema of the delimited results
    oDS.responseSchema = {
        recordDelim: HtmlEndPattern,
        fieldDelim: "###"
    };
    // Enable caching
    oDS.maxCacheEntries = 0;

    // provide the over-ride methods for the DataSource component
    oDS.doBeforeParseData = function(oRequest, oFullResponse, oCallback) {
        var finalResponse = oFullResponse;
        var idx;
        idx = finalResponse.indexOf(HtmlStartPattern);
        if (idx >= 0 && finalResponse.length > (idx + HtmlStartPattern.length)) {
            var substringLen = finalResponse.length - (idx + HtmlStartPattern.length);
            finalResponse = finalResponse.substr(idx + HtmlStartPattern.length, substringLen);
        };
        idx = finalResponse.indexOf(HtmlEndPattern);
        if (idx >= 0 && finalResponse.length > (idx + HtmlEndPattern.length)) {
            finalResponse = finalResponse.substr(0, idx + HtmlEndPattern.length);
        };
        return finalResponse;
    };

    var elDmiAjaxDiv = document.getElementById("DmiAjaxDiv");

    var elACText = document.createElement("input");
    elACText.style.width = 0;
    elACText.style.height = 0;
    elDmiAjaxDiv.appendChild(elACText);
    var elACContainer = document.createElement("div");
    elACContainer.style.width = 0;
    elACContainer.style.height = 0;
    elDmiAjaxDiv.appendChild(elACContainer);

    // Instantiate the DMI.AjaxLoad widget
    var oAL = new YAHOO.DMI.AjaxLoad(elACText, elACContainer, oDS);

    // provide the over-ride methods for the AjaxLoad widget
    oAL.generateRequest = function(sQuery) {
        if (customParams.length > 0) {
            return "?" + customParams + sQuery;
        }
        else {
            return "?" + sQuery;
        };
    };
    oAL.handleResponse = function(sQuery, oResponse) {
        var targetElem = document.getElementById(targetId);
        targetElem.innerHTML = oResponse.results[0];
    };

    // populate the global var with a handle to the new instance of the AjaxLoad widget
    if (instanceNum == 1) {
        DmiAjaxLoader.oALfirst = oAL;
    } 
    else if (instanceNum == 2) {
        DmiAjaxLoader.oALsecond = oAL;
    };
};

DmiAjaxLoadHtml = function(instanceNum, inputValue) {
    if (instanceNum == 1) {
        DmiAjaxLoader.oALfirst.sendQuery(inputValue);
    } 
    else if (instanceNum == 2) {
        DmiAjaxLoader.oALsecond.sendQuery(inputValue);
    };
};


DmiAjaxFetchHelper = function(dsPageName, stdQueryParams) {
    var HtmlStartPattern = "DMI:AJAX:BEGIN";
    var HtmlEndPattern   = "DMI:AJAX:END";
    
    // Instantiate an XHRDataSource
    var oDS = new YAHOO.util.XHRDataSource(dsPageName);
    // Set the responseType
    oDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
    // Define the schema of the delimited results
    oDS.responseSchema = {
        recordDelim: HtmlEndPattern,
        fieldDelim: "###"
    };
    // Disable caching
    oDS.maxCacheEntries = 0;

    // provide the over-ride methods for the DataSource component
    oDS.doBeforeParseData = function(oRequest, oFullResponse, oCallback) {
        var finalResponse = oFullResponse;
        var idx;
        idx = finalResponse.indexOf(HtmlStartPattern);
        if (idx >= 0 && finalResponse.length > (idx + HtmlStartPattern.length)) {
            var substringLen = finalResponse.length - (idx + HtmlStartPattern.length);
            finalResponse = finalResponse.substr(idx + HtmlStartPattern.length, substringLen);
        };
        idx = finalResponse.indexOf(HtmlEndPattern);
        if (idx >= 0 && finalResponse.length > (idx + HtmlEndPattern.length)) {
            finalResponse = finalResponse.substr(0, idx + HtmlEndPattern.length);
        };
        return finalResponse;
    };

    var elDmiAjaxDiv = document.getElementById("DmiAjaxDiv");

    var elACText = document.createElement("input");
    elACText.style.width = 0;
    elACText.style.height = 0;
    elDmiAjaxDiv.appendChild(elACText);
    var elACContainer = document.createElement("div");
    elACContainer.style.width = 0;
    elACContainer.style.height = 0;
    elDmiAjaxDiv.appendChild(elACContainer);

    // Instantiate the DMI.AjaxLoad widget
    var oAL = new YAHOO.DMI.AjaxLoad(elACText, elACContainer, oDS);

    // provide the over-ride methods for the AjaxLoad widget
    oAL.generateRequest = function(sQuery) {
        return "?" + stdQueryParams + sQuery;
    };
    
    return oAL;
};


DmiAjaxFetch = function(targetId, dsPageName, stdQueryParams, paramVal) {

    var oAL = DmiAjaxFetchHelper(dsPageName, stdQueryParams);
    
    oAL.handleResponse = function(sQuery, oResponse) {
        var targetElem = document.getElementById(targetId);
        targetElem.innerHTML = oResponse.results[0];
    };
    
    // finally, kick off the request to the handler
    oAL.sendQuery(paramVal);
};


DmiAjaxFetchWithCallBack = function(targetId, dsPageName, stdQueryParams, paramVal, cbFunction) {

    var oAL = DmiAjaxFetchHelper(dsPageName, stdQueryParams);
    
    oAL.handleResponse = function(sQuery, oResponse) {
        var targetElem = document.getElementById(targetId);
        targetElem.innerHTML = oResponse.results[0];
        if (cbFunction) {
           cbFunction();
        }
    };
    
    // finally, kick off the request to the handler
    oAL.sendQuery(paramVal);
};

