var onStates = new Array() ;

function setup() {
    if (!document.getElementById) return false ;
	
    // Attach event handlers to every area in the image map
    var myMap = document.getElementById('m_map') ;

    if (myMap) {
        var myAreas = myMap.getElementsByTagName('area') ;
        for (var iArea=0; iArea < myAreas.length; iArea++) {
            addEvent(myAreas[iArea], 'mouseover', stateHover, false) ;
            addEvent(myAreas[iArea], 'mouseout', stateLeave, false) ;
            addEvent(myAreas[iArea], 'click', selectState, false) ;
        }
    }
	
    // Do similar for list
    var myStatesList = document.getElementById('statelist') ;
    if (myStatesList) {
        var myStatesListItems = myStatesList.getElementsByTagName('li') ;
        for (var iStatesListItem=0; iStatesListItem < myStatesListItems.length; iStatesListItem++) {
            if (myStatesListItems[iStatesListItem].id) {
                addEvent(myStatesListItems[iStatesListItem], 'mouseover', stateHover, false) ;
                addEvent(myStatesListItems[iStatesListItem], 'mouseout', stateLeave, false) ;
                addEvent(myStatesListItems[iStatesListItem], 'click', selectState, false) ;
            }
        }
    }
	
	
    // Are any states/regions set to "on" in the hidden field?
    if (!document.getElementById("multipleStatesList") || !document.getElementById("multipleStatesList").value) return ;
    var preList = document.getElementById("multipleStatesList").value ;
    if (!preList.length) return ;
    // Yes
    var preArray = preList.split(",") ;
    for (var i=0; i<preArray.length; i++) {
        selectState(null, preArray[i], "on") ;
    }
}

function stateHover(e) {
    stateSwitch(e, true) ;
}

function stateLeave(e) {
    stateSwitch(e, false) ;
}

function stateSwitch(e, setOn, passedId) {
    var useId ;
    if (passedId) {
        useId = passedId ;
    }
    else {
        var myTarget = getTarget(e) ;
        if (!myTarget) return false ;
        if (myTarget.id) useId = myTarget.id ;
        else useId = climbDom(myTarget, "li").id.substring(11) ;
    }
    // Show/hide the state name label
    if (document.getElementById('state-label-' + useId)) {
        document.getElementById('state-label-' + useId).style.display = (setOn) ? "block" : "none" ;
    }
    if (!setOn && isStateOn(useId)) {
        return ;
    }
    // Show/hide the appropriate on-state image
    if (document.getElementById('state-on-' + useId)) {
        document.getElementById('state-on-' + useId).className = (setOn) ? "state" : "state hidden" ;
    }
}

function selectStateMultiple(stateNames, forceTo) {
    var statesArray = stateNames.split(",") ;
    for (var i=0; i<statesArray.length; i++) {
        if (statesArray[i] && statesArray[i].length > 1) {
            selectState(false, statesArray[i], forceTo) ;
        }
    }
}

function selectAllStates() {
    var allStates = document.getElementById('statelist').getElementsByTagName('li') ;
    for (var i=0; i<allStates.length; i++) {
        if (allStates[i].id.substring(11).indexOf("incometax") == 0) continue ;
        selectState(false, allStates[i].id.substring(11), "on") ;
    }
}

function selectState(e, stateAbbr, forceTo) {
    // did have stateName, forceTo
    if (!stateAbbr) {
        var target = getTarget(e) ;
        if (!target) return false ;
        if (!target.id) target = climbDom(target, "li") ;
        if (target.id.indexOf("state-list") == 0) {
            var stateAbbr = target.id.substring(11) ;
        }
        else {
            var stateAbbr = target.id ;
        }
    }
	
    if (forceTo == "off" || (isStateOn(stateAbbr) && forceTo != "on") ) {
	
        // WAS if(forceTo == "off" || (isStateOn(stateName) && forceTo != "on") ) {
		
        // Hide state "on"
        if (!document.getElementById('state-on-' + stateAbbr)) alert (stateAbbr) ;
        document.getElementById('state-on-' + stateAbbr).className = "state hidden" ;
        // Switch list abbreviation off
        document.getElementById('state-list-' + stateAbbr).className = "" ;
        // Remove from array
        for (var i=0; i<onStates.length; i++) {
            if (onStates[i] == stateAbbr) {
                // Remove from array
                onStates.splice(i,1) ;
                writeOnStates() ;
                break ;
            }
        }
    }
    else {
        // Set to "on"
        // Add to array
        onStates[onStates.length] = stateAbbr ;
        writeOnStates() ;
        stateSwitch(false, true, stateAbbr) ;
        // Switch on the abbreviation in the list
        if (document.getElementById('state-list-' + stateAbbr)) {
            document.getElementById('state-list-' + stateAbbr).className = "on" ;
        }
    }
    // Hide the state name label in all cases
    if (document.getElementById('state-label-' + stateAbbr)) {
        document.getElementById('state-label-' + stateAbbr).style.display = "none" ;
    }
}

function getStateAbbreviation(stateName) {
    // Gets passed in state/region name, all lowercase
    var myStates = document.getElementById('statelist').getElementsByTagName('li') ;
    for (i=0; i<myStates.length; i++) {
        if (myStates[i].id.indexOf(stateName) != -1) {
            if (myStates[i].getElementsByTagName("abbr").length) {
                var myAbbr = myStates[i].getElementsByTagName("abbr")[0].innerHTML ;
            }
            else {
                var myAbbr = myStates[i].getElementsByTagName("a")[0].innerHTML ;
            }
            return myAbbr ;
        }
    }
}

function selectAllITF() {
    // Alaska, Washington, Nevada, South Dakota, Wyoming, Texas, Florida & Vermont
    selectState(null, "AK", "on") ;
    selectState(null, "NV", "on") ;
    selectState(null, "SD", "on") ;
    selectState(null, "WY", "on") ;
    selectState(null, "TX", "on") ;
    selectState(null, "FL", "on") ;
    selectState(null, "VT", "on") ;
}

function clearAll() {
    var allStates = document.getElementById('statelist').getElementsByTagName('li') ;
    for (var i=0; i<allStates.length; i++) {
        selectState(null, allStates[i].id.substring(11), "off") ;
    }
}

function getStateNameFromAbbreviation(stateAbbr) {
    // e.g. <li id="state-list-tennessee"><a href="#"><abbr title="Tennessee">TN</abbr></a></li>
    var allAbbrs = document.getElementsByTagName('abbr') ;
    for (var i=0; i<allAbbrs.length; i++) {
        if (allAbbrs[i].innerHTML.toLowerCase() == stateAbbr.toLowerCase()) {
            return allAbbrs[i].title.toLowerCase() ;
        }
    }
    return false ;
}

function isStateOn(stateAbbr) {
    // stateAbbr = getStateAbbreviation(stateName) ;
    var isOn = false ;
    for (var i=0; i<onStates.length; i++) {
        if (onStates[i] == stateAbbr) {
            isOn = true ;
            break ;
        }
    }
    return isOn ;
}

function writeOnStates() {
    var debugText = "" ;
    for (var i=0; i<onStates.length; i++) {
        if (i>0) debugText += "," ;
        debugText += onStates[i] ;
    }
    document.getElementById('multipleStatesList').value = debugText ;
}



addEvent(window, 'load', setup, false) ;