if (!window.FSN) {
    FSN = {};
}

jQuery.fn.initImageMapCheckBoxList = function( selectorForCheckBoxList ) {
	var imageMapContainer = this;
	var imageMapAreas = imageMapContainer.find("area");
	var checkBoxListContainer = jQuery(selectorForCheckBoxList);
	var checkBoxes = checkBoxListContainer.find("input");
	var selectedAreas = imageMapContainer.find(".selectedAreas img");
	var hoveredAreas = imageMapContainer.find(".hoveredAreas img");
	var fillCheckBox = checkBoxListContainer.find("span:last");
	
	var selectedArr = new Array();
	setAllSelectedArr(false)
	
	imageMapAreas.bind("click",handleAreaClick);
	imageMapAreas.hover(handleAreaMouseOver,handleAreaMouseOut);
	checkBoxes.bind("click",checkBoxUpdate);

    FSN.clearSelectedAreas = clearSelectedAreas;
	
	selectedAreas.hide();
	hoveredAreas.hide();
	fillCheckBox.hide();
	jQuery(':input', fillCheckBox).attr('disabled', true);
	checkBoxUpdate();
	
	function handleAreaClick(event) {
		var checkBox;
		
		var theValues = getAreaValue(event.target);
		
		addSelectedValue(theValues);
		
		if(noOfSelected() > 1 && noOfSelected() < 4){
		    jQuery(':input', fillCheckBox).removeAttr('disabled');
		    populateFillCheckBox();
		    fillCheckBox.show();
		}else{
		    jQuery(':input', fillCheckBox).removeAttr('disabled').attr('disabled', true);
		    fillCheckBox.hide();
		}
		
		makeImagesVisible(hoveredAreas, '');
		
		checkBox = checkBoxes.filter("[value='" + getSelected() + "']");		
		if( checkBox.size() != 1 ) { return }
	    checkBox.get(0).click();
		
		return false;
	}
	
	function handleAreaMouseOver(event) {
	    var value = getAreaValue(event.target);
	    makeImagesVisible(hoveredAreas, value);
	}
	function handleAreaMouseOut(event) {
	    var value = getAreaValue(event.target);
	    makeImagesVisible(hoveredAreas, '');
	}

    function getSelected(){
        var toReturn = '';
        for(var i = 3; i <= 6; i = i + 1){
            if(selectedArr[i]){
                toReturn += i + ',';
            }
        }
        return toReturn.replace(/,$/g, '');    
    }

    function setAllSelectedArr(theBool){
        selectedArr[3] = theBool;
	    selectedArr[4] = theBool;
	    selectedArr[5] = theBool;
	    selectedArr[6] = theBool;
    }
    
    function setSelectedValues(valueString){
        var valueArray = valueString.split(',');
        setAllSelectedArr(false);
        for(var i = 0; i < valueArray.length; i = i + 1){
            selectedArr[valueArray[i]] = true;
        }
    }
    
    function addSelectedValue(valueString){
        var valueArray = valueString.split(',');
        if(valueArray.length == 4){
            setAllSelectedArr(true);
        }else{
            if(noOfSelected() <= 1){
                selectedArr[valueArray[0]] = true;
            }else{
                selectedArr[valueArray[0]] = selectedArr[valueArray[0]] ? false : true;
            }
        }
    }
    
    function clearSelectedAreas(){
        setAllSelectedArr(false);
        fillCheckBox.hide();
    }
    
    function noOfSelected(){
        var count = 0;
        for(var i = 3; i <= 6; i = i + 1){
            if(selectedArr[i])
                count = count + 1;
        }
        return count;
    }
	
	function populateFillCheckBox(){
	    var theText = "";
        var theValue ="";
        
        for(var i = 3; i <= 6; i = i + 1){
            if(selectedArr[i]){
                var theCheckbox = checkBoxes.filter("[value='" + i + "']").parent();
                theText += theCheckbox.find("label").html() + ", ";
                theValue += theCheckbox.find("input").val() + ",";
            }
        }

        theText = theText.substring(0, theText.length - 2);
        theValue = theValue.substring(0, theValue.length - 1);
        fillCheckBox.find("input").val(theValue);
        fillCheckBox.find("label").html(theText);
	}
	
	
	function checkBoxUpdate(){
	    var theChecked = checkBoxes.filter(":checked");
	    if(theChecked.size() == 1){
	        setSelectedValues(theChecked.attr("value"));
	        makeImagesVisible(selectedAreas, theChecked.attr("value"));
	    }
	}
	
	function makeImagesVisible(areas, showString){
	    areas.hide();
	    if(showString.replace(/\s+/g) != ''){
	        var toShow = showString.split(",");
	        for(var i = 0; i < toShow.length; i = i + 1){
	            areas.filter(".area-" + toShow[i]).show();
	        }
	    }
	}
	
	function getAreaValue(area) { 
	    var areaClass = jQuery(area).attr("class");
	    return areaClass.replace(/^forIndex|\s+$/g,'');
	}
}

