/**
 * @author Administrator
 */
var MaxSelectedStates = 5;

//
// A simple object for counting with an event which fires everytime the value changes
//
var CountingObject = new Class({

    Implements: Events,
    initialize: function(initialValue){
        this.counter = initialValue;
    },
    
    increment: function(){
        this.counter++;
        this.fireEvent("valueChanged", this);
    },
    decrement: function(){
        this.counter--;
        this.fireEvent("valueChanged", this);
    },
    
    getValue: function(){
        return this.counter;
    },
    
    valueChanged: function(countingObject){
        this.fireEvent("valueChanged", this);        
    }
    
});


var CustomComparison = new Class({

    Implements: Events,
    initialize: function(numChecked){
    
        this.NumStates = new CountingObject(numChecked);
        
        // Get the list of Checkboxes
        this.stateCheckboxes = document.getElements("input[type=checkbox]");
        this.stateCheckboxes = this.stateCheckboxes.filter(function(item){
            return item.get("id").match(/.+_chkStatesList_.+/);
        });
        
        document.store("stateCheckboxes", this.stateCheckboxes);
        
        document.store("NumStates", this.NumStates);
        
        this.stateCheckboxes.each(function(item){
            item.addEvent("click", function(e){
                if (e.target.checked) {
                    document.retrieve("NumStates").increment();
                }
                else 
                    if (!e.target.checked) {
                        document.retrieve("NumStates").decrement();
                    }
            });
            
            // if there are already the maximum number of states checked, 
            //  then begin to disable those boxes which are not checked
            if( document.retrieve("NumStates").getValue() >= MaxSelectedStates && !item.checked ) { 
                item.disabled = true;
            } else if ( document.retrieve("NumStates").getValue() >= MaxSelectedStates && item.checked ) {
                item.disabled = false;
            }
            
        });
        
        this.NumStates.addEvent("valueChanged", function(source){
            if (source.getValue() == MaxSelectedStates) {
                    document.getElement("div.Error").style.visibility = 'visible';
                document.retrieve("stateCheckboxes").each(function(item){
                    if (!item.checked) {
                        item.disabled = true;                        
                    }
                });
            }
            else {
                document.getElement("div.Error").style.visibility='hidden';
                document.retrieve("stateCheckboxes").each(function(item){
                    item.disabled = false;
                });
            }
        });
        
    }
    
});












//
// On DOM Ready, Create a new instance of the CustomComparison Object
//
window.addEvent("domready", function(){
    var checkboxes = document.getElements("input[type=checkbox]");
    var checkedCheckboxes = checkboxes.filter(function(item){
        return item.checked;
    });
    
    new CustomComparison(checkedCheckboxes.length);
});
