﻿function StateSelector(clientID) { 
    this.SelectorClientID = clientID;
}

StateSelector.prototype.SelectorClientID = "";

StateSelector.prototype.LoadStateSelections = function() { 
    var stateSelections = Get(this.SelectorClientID + "_HiddenFieldStateSelections").value.split(',');
    
    if (stateSelections.length > 0) { 
        var primaryStateDdl = Get(this.SelectorClientID + "_DropDownListPrimaryState");
        
        for (var p=0, primaryState; primaryState = primaryStateDdl.options[p]; p++)
            if (primaryState.value == stateSelections[0])
                primaryStateDdl.selectedIndex = p;
        
        for (var s=1, state; state = stateSelections[s]; s++)
            this.AddState(state);
    }
}

StateSelector.prototype.AddState = function(state) { 
    var closureThis = this;
    
    var container = Get(this.SelectorClientID + "_DivStateSelector");
    var baseSelect = Get(this.SelectorClientID + "_DropDownListPrimaryState");
    var newElem = document.createElement("div");
    var removeLink = document.createElement("a");
    var removeImg = document.createElement("img");
    var stateSelect = document.createElement("select");
    newElem.style.padding = "2px 0 0 0";
    stateSelect.style.verticalAlign = "middle";
    for (var s=0, baseState; baseState = baseSelect.options[s]; s++)
        stateSelect.appendChild(baseState.cloneNode(true));
    stateSelect.onchange = function() { closureThis.UpdateSelectionList(); }
    removeLink.style.textDecoration = "none";
    removeLink.style.fontWeight = "bold";
    removeLink.style.fontSize = "11px";
    removeLink.style.color = "#B81818";
    removeLink.href = "#";
    removeLink.onclick = function() { closureThis.RemoveState(newElem); return false; };
    removeImg.src = "/images/delete_icon.gif";
    removeImg.width = 16;
    removeImg.height = 16;
    removeImg.align = "absmiddle";
    removeImg.style.verticalAlign = "text-bottom";
    removeImg.alt = "X";
    removeLink.appendChild(removeImg);
    removeLink.appendChild(document.createTextNode("Remove"));
    
    newElem.appendChild(stateSelect);
    newElem.appendChild(document.createTextNode("    "));
    newElem.appendChild(removeLink);
    container.appendChild(newElem);
    container = null;
    
    if (state != null && state != undefined && state.length == 2)
        for (var s=0, stateOption; stateOption = stateSelect.options[s]; s++)
            if (stateOption.value == state)
                stateSelect.selectedIndex = s;
    
    this.UpdateSelectionList();
}

StateSelector.prototype.RemoveState = function(containerElem) { 
    var container = Get(this.SelectorClientID + "_DivStateSelector");
    container.removeChild(containerElem);
    container = null;
    
    this.UpdateSelectionList();
}

StateSelector.prototype.UpdateSelectionList = function() { 
    var selects = this.GetAllSelects();
    var selectString = "";
    
    for (var s=0, selectBox; selectBox = selects[s]; s++) { 
        if (selectBox.value != null && selectBox.value != undefined && selectBox.value.length == 2 && selectBox.value != "-1") { 
            if (selectString.length > 0)
                selectString += ",";
            selectString += selectBox.value;
        }
    }
    
    Get(this.SelectorClientID + "_HiddenFieldStateSelections").value = selectString;
}

StateSelector.prototype.GetAllSelects = function() { 
    var selects = new Array();
    var container = Get(this.SelectorClientID + "_DivStateSelector");
    selects[0] = Get(this.SelectorClientID + "_DropDownListPrimaryState");
    this.GetAdditionalSelectsRecursive(container, selects);
    container = null;
    
    return selects;
}

StateSelector.prototype.GetAdditionalSelectsRecursive = function(containerElem, selects) { 
    var childNodes = containerElem.childNodes;
    
    for (var n=0, childNode; childNode = childNodes[n]; n++) { 
        if (childNode.nodeName.toUpperCase() == "SELECT")
            selects[selects.length] = childNode;
        else if (childNode.childNodes.length > 0)
            this.GetAdditionalSelectsRecursive(childNode, selects);
    }

    return selects;
}