(function(){
    var countryConn;
    var submitConn;
    var sNetClientIDPrefix = '';
    if (self.NET_CLIENTID) {
        var sNetClientIDPrefix = NET_CLIENTID + '_';
    }
    var sMasterUrlRoot = '';
    if (self.MASTER_URL_ROOT) {
        sMasterUrlRoot = MASTER_URL_ROOT;
    } else {
		//sMasterUrlRoot = 'http://caliban/CobhamDefense.Web/';
		sMasterUrlRoot = 'http://localhost/CobhamDefense.Web/';
	}
    var oCountries = document.getElementById(sNetClientIDPrefix + "repLocator_ddlCountry");
    var oRegions = document.getElementById("selectRegion");
    var oInterests = document.getElementById(sNetClientIDPrefix + "repLocator_ddlInterests");
    
    var countryCallback = {
        success: handleCountrySuccess,
        failure: handleCountryFailure
    };
    
    var submitCallback = {
        success: handleSubmitSuccess,
        failure: handleSubmitFailure
    };
    
    function handleCountrySuccess(o){
        var regions = o.responseXML.getElementsByTagName("region");
        
        //populate region dropdown
        var oOptions = oRegions.getElementsByTagName("option");
        for (var i = 1, j = oOptions.length; j > i; j--) {
            oRegions.removeChild(oOptions[i]);
        }
        if (regions.length == 0) {
            oRegions.disabled = true;
            oInterests.disabled = false;
            document.getElementById("LocatorSearch").disabled = false;
            return;
        }
        oRegions.disabled = false;
        for (var i = 0, j = regions.length; i < j; i++) {
            oRegions.options[i + 1] = new Option(regions[i].firstChild.nodeValue, regions[i].getAttribute("id"));
        }
    }
    
    function handleCountryFailure(o){
    
    }
    
    function handleClick(e, obj){
        YAHOO.util.Event.preventDefault(e);
        obj.show();
    }
    
    function handleCountry(e){
        if (YAHOO.util.Connect.isCallInProgress(countryConn)) {
            YAHOO.util.Connect.abort(countryConn);
        }
        
        oInterests.disabled = true;
        oRegions.disabled = true;
        document.getElementById("LocatorSearch").disabled = true;
        
        var countryId = this.options[this.selectedIndex].value;
        if (countryId.length > 0) {
            countryConn = YAHOO.util.Connect.asyncRequest('POST', sMasterUrlRoot + "rep-locator/RepLocator.asmx/GetRegionsByCountry", countryCallback, "countryId=" + countryId)
        }
    }
    
    function handleRegion(e){
        var oSearch = document.getElementById("LocatorSearch");
        if (this.options[this.selectedIndex].value.length > 0) {
            oInterests.disabled = false;
            oSearch.disabled = false;
        }
        else {
            oInterests.disabled = true;
            oSearch.disabled = true;
        }
    }
    
    function getNodeElementValue(oNode, sName){
        var oElement = oNode.getElementsByTagName(sName);
        if (oElement.length > 0 && oElement[0].firstChild) {
            return oNode.getElementsByTagName(sName)[0].firstChild.nodeValue;
        }
        return "";
    }
    
    function handleSubmitSuccess(o){
        var reps = o.responseXML.getElementsByTagName("rep");
		var interestId = o.responseXML.documentElement.getAttribute("interest");
        var oResults = document.getElementById("searchContent");
        oResults.innerHTML = "";
        
        var total = reps.length;
        var suffix = (total == 1) ? "" : "s";
        if(total > 0)
        {
             oResults.innerHTML += '<p id="resultsTotal">' + total + " result" + suffix + " found</p>";
        }
        else
        {
             oResults.innerHTML += '<p id="resultsTotal">' + total + " result" + suffix + ' found<a class="more" href="' + sMasterUrlRoot +'contact/index.aspx">Please contact us to request information</a></p>';
        }
       
        
        var oClear = document.createElement("div");
        oClear.className = "clear";
        oClear.innerHTML = "&nbsp;";
        
        for (var i = 0; i < total; i++) {
            var oRep = document.createElement("div");
            oRep.className = "resultEntry";
            oRep.innerHTML += "<h3>" + getNodeElementValue(reps[i], "company") + "</h3>";
            oRep.innerHTML += getNodeElementValue(reps[i], "address1");
            var address2 = getNodeElementValue(reps[i], "address2");
            if (address2.length > 0) {
                oRep.innerHTML += "<br/>" + address2;
            }
            oRep.innerHTML += "<br/>" + getNodeElementValue(reps[i], "city");
            var state = getNodeElementValue(reps[i], "state");
            if (state.length > 0) {
                oRep.innerHTML += ", " + state;
            }
            oRep.innerHTML += " " + getNodeElementValue(reps[i], "zip");
            var phone1 = getNodeElementValue(reps[i], "phone1");
            if (phone1.length > 0) {
                oRep.innerHTML += "<br/>Ph: " + phone1;
            }
            var phone2 = getNodeElementValue(reps[i], "phone2");
            if (phone2.length > 0) {
                oRep.innerHTML += "<br/>Ph: " + phone2;
            }
            var fax = getNodeElementValue(reps[i], "fax");
            if (phone1.length > 0) {
                oRep.innerHTML += "<br/>Fax: " + fax;
            }
            var email = getNodeElementValue(reps[i], "email");
            if (email.length > 0) {
                oRep.innerHTML += "<a href=\"mailto:" + email + "\">e-mail</a>";
            }
            var website = getNodeElementValue(reps[i], "website");
            if (website.length > 0) {
                oRep.innerHTML += "<a href=\"http://" + website + "\">website</a>";
            }
			oRep.innerHTML += '<a href="' + sMasterUrlRoot + 'quote/index.aspx?id=' + interestId + '">request a quote</a>';
            oResults.appendChild(oRep);
            if ((i + 1) % 2 == 0) {
                oResults.appendChild(oClear);
            }
        }
    }
    
    function handleSubmitFailure(o){
    
    }
    
    function handleSubmit(e){
        YAHOO.util.Event.preventDefault(e);
        if (YAHOO.util.Connect.isCallInProgress(submitConn)) {
            YAHOO.util.Connect.abort(submitConn);
        }
        
        var countryId = parseInt(oCountries.options[oCountries.selectedIndex].value, 10);
        var regionId = (oRegions.disabled) ? 0 : parseInt(oRegions.options[oRegions.selectedIndex].value, 10);
        var interestId = parseInt(oInterests.options[oInterests.selectedIndex].value, 10);
        
        if (isNaN(interestId)) {
            alert("Please select an interest");
            return;
        }
        
        submitConn = YAHOO.util.Connect.asyncRequest('POST', sMasterUrlRoot + "rep-locator/RepLocator.asmx/GetReps", submitCallback, "countryId=" + countryId + "&regionId=" + regionId + "&interestId=" + interestId)
        var oResults = document.getElementById("searchContent");
        YAHOO.util.Dom.addClass(oResults, "scrollable");
        oResults.innerHTML = '<p id="resultsTotal">Searching...</p>';
    }
    
    function init(){
        var panel = new YAHOO.widget.Panel("pnl", {
            width: "833px",
            height: "536px",
            visible: false,
            modal: true,
            draggable: false,
            fixedcenter: true,
            constraintoviewport: true
        });
        panel.render();
        
        oCountries.selectedIndex = 0;
        oInterests.selectedIndex = 0;
        
        YAHOO.util.Event.on(oCountries, "change", handleCountry, panel);
        YAHOO.util.Event.on(oRegions, "change", handleRegion, panel);
        YAHOO.util.Event.on("launchPanel", "click", handleClick, panel);
        YAHOO.util.Event.on("Find-a-Rep-link", "click", handleClick, panel);
        YAHOO.util.Event.on("Find-a-Rep-Content-link", "click", handleClick, panel);
        YAHOO.util.Event.on("LocatorSearch", "click", handleSubmit);
    }
    YAHOO.util.Event.onContentReady("pnl", init);
})();
