﻿    function UnRegisterEvents()
    {
        document.onclick = '';
    }
    
    function RegisterEvents(elm)
    {
        document.onclick = function (){document.getElementById(elm).style.visibility = 'hidden';};
    }
    
    function SingleLineMultiSelector(labelId, listId, divId, rowId ,initialValue, displayMode, itemCountDisplayModeText, selectedValue_Sum, selectedValue_Seperated, allItemsText, oneItemText, itemValues)
    {
        var instance = this;
        
        instance.initialValue = initialValue;
        instance.checkboxListID = listId;
        instance.valueLabelID = labelId;
        instance.checkboxListDivID = divId
        instance.selectorRowID = rowId;
        instance.displayMode = displayMode;
        instance.itemCountDisplayModeText = itemCountDisplayModeText;
        
        instance.selectedValue_Sum = selectedValue_Sum;
        instance.selectedValue_Seperated = selectedValue_Seperated;

        instance.allItemsText = allItemsText;
        instance.oneItemText = oneItemText;
        
        instance.itemValues = itemValues;
        
        instance.ItemValues = function()
        {
            return instance.itemValues;
        }
        
        instance.ToogleDropDown = function(sender)
        {
            var currentState = document.getElementById(instance.selectorRowID).style.visibility;
            
            if (currentState == 'visible')
                document.getElementById(instance.selectorRowID).style.visibility = 'hidden';
            else
                document.getElementById(instance.selectorRowID).style.visibility = 'visible';
        }

        
        instance.CheckAll = function()
        {
            instance.SetAllCheckBoxes(true)
        }

        instance.UnCheckAll = function()
        {
            instance.SetAllCheckBoxes(false)
        }
                
        instance.SetAllCheckBoxes = function(check)
        {      
            
            var checkboxes = instance.GetCheckboxItems();
            
            if(checkboxes == null)
                return;
            
            var countCheckBoxes = checkboxes.length;
            
            for(var i = 0; i < countCheckBoxes; i++)
            {
		        checkboxes[i].checked = check;
		    }
    		    
            instance.UpdateValue();
        }
        
        instance.GetCheckboxItems = function()
        {
            var checkboxList = document.getElementById(instance.checkboxListID); 
              
            if(checkboxList == null)
                return null;
            
            return checkboxList.getElementsByTagName('input');
        }
        
        instance.UpdateValue = function()
        {
            var value = '';
            var checkboxes = instance.GetCheckboxItems();
            
            if(checkboxes == null)
                return;
            
            var countCheckBoxes = checkboxes.length;
            var lastSelectedItem = 0;
            
            switch(instance.displayMode)
            {
                case 'ItemCount':
                    var itemCount = 0;
                    
                    for(var i = 0; i < countCheckBoxes; i++)
                    {    
                        if(checkboxes[i].checked)
                        {
                            itemCount++;
                            lastSelectedItem = i;
                        }
                    }
                    
                    if(itemCount > 0)
                    {
                        if(itemCount == countCheckBoxes)
                        {
                            value = instance.allItemsText;
                        }
                        else if (itemCount == 1)
                        {
                            value = checkboxes[lastSelectedItem].nextSibling.innerHTML;
                        }
                        else
                        {
                            value = instance.itemCountDisplayModeText.replace('{0}', itemCount);
                        }
                    }
                    break;
                case 'ItemText':
                    for(var i = 0; i < countCheckBoxes; i++)
                    {    
                        if(checkboxes[i].checked)
                        {                        
                            value += checkboxes[i].nextSibling.innerHTML + '; ';
                        }
                    }
                    break;
                case 'ItemValue':
                    for(var i = 0; i < countCheckBoxes; i++)
                    {    
                        if(checkboxes[i].checked)
                        {           
                                     
                            value += instance.GetItemValue(checkboxes[i]) + '; ';
                        }
                    }
                    break;
            }
            
            
            var selectedValue_SumField = document.getElementById(instance.selectedValue_Sum);
            var selectedValue_SeperatedField = document.getElementById(instance.selectedValue_Seperated);
            
            var sum = parseInt(0);
            var seperated = '';

            selectedValue_SeperatedField.value = '';            
            
            for (var i = 0; i < countCheckBoxes; i++)
            {    
                var item = checkboxes[i];
                
                if (item.checked)
                {
                    var itemValue = instance.GetItemValue(item);
                
                    sum = parseInt(sum + itemValue);

                    seperated += itemValue + ',';
                }
            }
            
            selectedValue_SumField.value = sum;
    
            if (seperated.length > 0)
            {
                selectedValue_SeperatedField.value = seperated.substring(0, seperated.length-1);
            }
            
            if(value == '')
                document.getElementById(instance.valueLabelID).innerHTML = instance.initialValue;
            else
                document.getElementById(instance.valueLabelID).innerHTML = value;
        }
        
        instance.UpdateSelectedValue = function(value, isChecked)
        {
        }
        
        instance.GetItemValue = function(checkboxItem)
        {
//            var itemValue = checkboxItem.outerHTML;
//            
//            itemValue = itemValue.substring(itemValue.lastIndexOf('UpdateSelectedValue(')+20);
//            itemValue = itemValue.substring(0,itemValue.indexOf(','));
//            alert('checkboxItem.outerHTML ' + checkboxItem.outerHTML);
//            alert('checkboxItem.value ' + checkboxItem.value);
            
            return parseInt(checkboxItem.value);
        }
        
        instance.SetWidth = function(width)
        {
            document.getElementById(instance.valueLabelID).style.width = width + 'px';
            document.getElementById(instance.checkboxListDivID).style.width = (width + 20) + 'px';
            document.getElementById(instance.selectorRowID).style.width = width + 'px';
        }
    }
    
    function GetCheckBoxItemValue(checkboxItem)
    {
//        var itemValue = checkboxItem.outerHTML;
//        
//        itemValue = itemValue.substring(itemValue.lastIndexOf('UpdateSelectedValue(')+20);
//        itemValue = itemValue.substring(0,itemValue.indexOf(','));
//        
//        return parseInt(itemValue);
        
        return parseInt(checkboxItem.value);
    }
    
    function ResetCheckBoxList(checkBoxList, enumValue)
    {
        if (checkBoxList.length == 0)
            return false;
            
        enumValue = parseInt(enumValue);
            
        var biggestItemValue = GetBiggestItemValue(checkBoxList, 0);
        var item = GetCheckBoxByValue(checkBoxList, biggestItemValue)
        
        while (biggestItemValue > 0 && item != null)
        {
            var check = (enumValue >= biggestItemValue);

            if (check)
            {
                enumValue -= biggestItemValue;

                item.checked = false; // false + item.click() = true!
            }
            else
                item.checked = true; // true + item.click() = false!
            
            jQuery(item).click();
            
            biggestItemValue = GetBiggestItemValue(checkBoxList, biggestItemValue);
            item = GetCheckBoxByValue(checkBoxList, biggestItemValue)
        }
    }
    
    function GetBiggestItemValue(checkBoxList, belowValue)
    {
        if (checkBoxList.lenght == 0)
            return 0;
        
        belowValue = parseInt(belowValue);
            
        var biggestItemValue = 0;
        
        for (var i = 0; i < checkBoxList.length; i++)
        {
            var currentItemValue = GetCheckBoxItemValue(checkBoxList[i]);

            if (currentItemValue > biggestItemValue &&
                (belowValue == 0 ||
                currentItemValue < belowValue))
            {
                biggestItemValue = currentItemValue;
            }
        }
        
        return parseInt(biggestItemValue);
    }
    
    function GetCheckBoxByValue(checkBoxList, value)
    {
        for (var i = 0; i < checkBoxList.length; i++)
        {
            if (GetCheckBoxItemValue(checkBoxList[i]) == value)
                return checkBoxList[i];
        }
        
        return null;
    }
    
    
    
 
