﻿function EUVillaRegionCombo(textbox, btnDownArrow, divTreeView, divFreeType, hiddenFieldRegionID) {
    var instance = this;
    this.textboxElement = textbox;
    this.btnDownArrowElement = btnDownArrow;
    this.divTreeViewElement = divTreeView;
    this.divFreeTypeElement = divFreeType;
    this.hiddenFieldRegionIDElement = hiddenFieldRegionID;

    this.textboxElement.click(function(e) {
        ClearFreeTypeListBox();
        ShowHideFreeType(false, false, false);
        ShowHideTreeView(true, false, false);
    });

    this.btnDownArrowElement.click(function(e) {
        var divTreeView = instance.divTreeViewElement.get(0);
        var divFreeType = instance.divFreeTypeElement.get(0);

        if ((divFreeType.style.display == "none" || divFreeType.style.display == "") && (divTreeView.style.display == "none" || divTreeView.style.display == "")) {
            ShowHideTreeView(true, true, false);
            instance.textboxElement.get(0).select();
        }
        else {
            ShowHideTreeView(false, false, false);
        }
        
    });

    this.textboxElement.keydown(function(e) {
        var freeTypeDiv = instance.divFreeTypeElement.get(0);

        if (e.which == 38 || e.which == 40) {
            if (freeTypeDiv.length == 0) {
              ShowHideFreeType(false, false, false);
              ShowHideTreeView(true, true, false);
            }
            else {
              ShowHideTreeView(false, false, false);
              ShowHideFreeType(true, true, false);
            }
        }
        else {
            ShowHideTreeView(false, false, false);
            ShowHideFreeType(true, false, false);
        }
    });

    this.textboxElement.keyup(function(e) {
        if (e.which == 38 || e.which == 40) {
        }
        else if (e.which == 8 && this.value.length == 0) {
            ShowHideFreeType(false, false, false);
            ShowHideTreeView(true, false, false);
        }
        else {
            PageMethods.getJSONRegions(this.value, OnGetRegionsComplete);
        }
    });

    this.textboxElement.focus(function(e) {
        instance.textboxElement.get(0).select();
    });

    function ShowHideTreeView(show, setFocus, selectItem) {
        var divTreeView = instance.divTreeViewElement.get(0);

        if (show) {
          divTreeView.style.display = "block";
          $("#quickSearch select").css("visibility", "hidden"); //Hide drop downs so it renders correctly in IE6
        }
        else {
          divTreeView.style.display = "none";
          $("#quickSearch select").css("visibility", "visible"); //Unhide drop downs so it renders correctly in IE6
        }
    }

    function ShowHideFreeType(show, setFocus, selectItem) {
        var divFreeType = instance.divFreeTypeElement.get(0);

        if (show) {
          divFreeType.style.display = "block";
          $("#quickSearch select").css("visibility", "hidden"); //Hide drop downs so it renders correctly in IE6
        }
        else {
          divFreeType.style.display = "none";
          $("#quickSearch select").css("visibility", "visible"); //Unhide drop downs so it renders correctly in IE6
        }
    }

    function ClearFreeTypeListBox() {
        var divFreeType = instance.divFreeTypeElement.get(0);

        while (divFreeType.innerHTML != "") {
            divFreeType.innerHTML = "";
        }
    }

    function OnGetRegionsComplete(result, userContext, methodName) {
        var result = eval('(' + result + ')');

        ClearFreeTypeListBox();

        for (i = 0; i < result.regions.length; i++) {
            AddItem(result.regions[i].name, result.regions[i].code);
        }


        ShowHideTreeView(false, false, false);
        ShowHideFreeType(true, false, false);
    }

    function AddItem(RegionName, RegionCode) {
        // Create an Option object
        var freeTypeDiv = instance.divFreeTypeElement.get(0);
        // Have to build the div element manually as firefox doesn't append onclick, onmouseover and onmouseout events
        var divRow = "<div id=\"" + freeTypeDiv.id + RegionCode + "\" class=\"listRow\" onclick=\"RowClick('" + freeTypeDiv.id + RegionCode + "', '" + textbox[0].id + "', '" + divFreeType[0].id + "', '" + hiddenFieldRegionID[0].id + "');\" onmouseover=\"HighlightRow('" + freeTypeDiv.id + RegionCode + "');\" onmouseout=\"DeHighlightRow('" + freeTypeDiv.id + RegionCode + "');\">" + RegionName + "</div>";
        freeTypeDiv.innerHTML += divRow;
    }

    function onElementFocused(e) {
        if (e && e.target)
            document.activeElement =
        e.target == document ? null : e.target;
    }

    if (document.addEventListener)
        document.addEventListener("focus", onElementFocused, true);

    function click(e) {
        var activeId = document.activeElement.id;
        var textBoxElement = instance.textboxElement.get(0);
        var treeViewElement = instance.divTreeViewElement.get(0);
        var freeTypeElement = instance.divFreeTypeElement.get(0);
        if (activeId != null && textBoxElement != null && treeViewElement != null && freeTypeElement != null && activeId != "quickSearch" && activeId != textBoxElement.id && activeId != treeViewElement.id && activeId != freeTypeElement.id) {
            ShowHideTreeView(false, false, false);
            ShowHideFreeType(false, false, false);
        }
    }

    document.onmousedown = click;
}




function RowClick(row, textbox, divTreeView, hiddenFieldRegionID) {
    var divRow = document.getElementById(row);
    var searchBox = document.getElementById(textbox);
    var treeView = document.getElementById(divTreeView);
    var hdnField = document.getElementById(hiddenFieldRegionID);

    var regionCode = row;
    regionCode = regionCode.replace(divTreeView, "");
    regionCode = regionCode.replace("freeType", "");
    hdnField.value = regionCode;

    // Check to see if the browser allows the innerText property
    // Firefox does not so have to user textContent
    var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;

    var regionName;
    if (hasInnerText) {
        regionName = divRow.innerText;
    }
    else {
        regionName = divRow.textContent
    }
    regionName = regionName.replace("- ", "");
    if (regionName.search(",") > 0) {
        regionName = regionName.substring(0, regionName.lastIndexOf(","));
    }

    searchBox.value = regionName;

    treeView.style.display = "none";
    $("#quickSearch select").css("visibility", "visible"); //Unhide drop downs so it renders correctly in IE6
}

function HighlightRow(row) {
    var divRow = document.getElementById(row);
    var location = window.location.href;
    if (location.indexOf("bowhills") == -1) {
        divRow.style.backgroundColor = "#f7dcec";
    }
    else {
        divRow.style.backgroundColor = "#f3f499";
    }
    divRow.style.cursor = "pointer";
}

function DeHighlightRow(row) {
    var divRow = document.getElementById(row);
    divRow.style.backgroundColor = "#FFFFFF";
}