﻿/* utils.js */

var blinkDuration = 500;
var blinkColor_1;
var blinkColor_2;

/// 
function enableBlink() {
    var aryBlinkingElements = document.getElementsByTagName("BLINK")
    for (i = 0; i < aryBlinkingElements.length; i++) {
        
alert(aryBlinkingElements.length);
        
        objElement = aryBlinkingElements[i];
        if (objElement.style.display == "none") {
            objElement.style.display = "block";
        }
        else {
            objElement.style.display = "none";
        }
    }
    setTimeout('enableBlink()', blinkDuration);
}


/********************************************/
/// *** BLINK v1.1 05/2007 © A.P. 2007 *** ///
/********************************************/

var blinkTimes = 10; // number of blink
var blinkCounter = 0;
var blinkObject;
//var blinkColor_1;
//var blinkColor_2;
//var blinkDuration = 500;

function blink(objectId ,startColor ,endColor ,times)
{
    blinkObject = document.getElementById(objectId);
    if (blinkObject == null) return;
    blinkTimes = times;
    blinkCounter = 0;
    blinkColor_1 = startColor;
    blinkColor_2 = endColor;
    setTimeout("blink_start()", blinkDuration);
}

function blink_start()
{
    blinkObject.style.color = blinkColor_1;
    setTimeout("blink_stop()", blinkDuration);
}

function blink_stop()
{
    blinkCounter ++;
    blinkObject.style.color = blinkColor_2;
    if (blinkCounter < blinkTimes) setTimeout("blink_start()", blinkDuration);
}


/// *** BLINK *** ///


/// *** TreeView check all childs *** ///


function OnCheckBoxCheckChanged(evt) {

    var src = window.event != window.undefined ? window.event.srcElement : evt.target; 
    var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox"); 
    if (isChkBoxClick) { 
        var parentTable = GetParentByTagName("table", src); 
        var nxtSibling = parentTable.nextSibling; 
        if (nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node 
        { 
            if (nxtSibling.tagName.toLowerCase() == "div") //if node has children 
            { 
                //check or uncheck children at all levels 
                CheckUncheckChildren(parentTable.nextSibling, src.checked); 
            } 
        } 
        //check or uncheck parents at all levels 
        CheckUncheckParents(src, src.checked); 
    } 
} 

function CheckUncheckChildren(childContainer, check) { 
    var childChkBoxes = childContainer.getElementsByTagName("input"); 
    var childChkBoxCount = childChkBoxes.length; 
    for (var i = 0; i < childChkBoxCount; i++) { 
        childChkBoxes[i].checked = check; 
    } 
} 

function CheckUncheckParents(srcChild, check) { 
    var parentDiv = GetParentByTagName("div", srcChild); 
    var parentNodeTable = parentDiv.previousSibling; 

    if (parentNodeTable) { 
        var checkUncheckSwitch; 

        if (check) //checkbox checked 
        { 
            var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild); 
            if (isAllSiblingsChecked) 
                checkUncheckSwitch = true; 
            else 
                return; //do not need to check parent if any(one or more) child not checked 
        } 
        else //checkbox unchecked 
        { 
            checkUncheckSwitch = false; 
        } 

        var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input"); 
        if (inpElemsInParentTable.length > 0) { 
            var parentNodeChkBox = inpElemsInParentTable[0]; 
            parentNodeChkBox.checked = checkUncheckSwitch; 
            //do the same recursively 
            CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch); 
        } 
    } 
} 

function AreAllSiblingsChecked(chkBox) { 
    var parentDiv = GetParentByTagName("div", chkBox); 
    var childCount = parentDiv.childNodes.length; 
    for (var i = 0; i < childCount; i++) { 
        if (parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node 
        { 
            if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") { 
                var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0]; 
                //if any of sibling nodes are not checked, return false 
                if (!prevChkBox.checked) { 
                    return false; 
                } 
            } 
        } 
    } 
    return true; 
} 

//utility function to get the container of an element by tagname 
function GetParentByTagName(parentTagName, childElementObj) { 
    var parent = childElementObj.parentNode; 
    while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) { 
        parent = parent.parentNode; 
    } 
    return parent;
}



/* Alex: Questo codice sostituisce le funzioni qui sopra */
/* moved in custom control */
/// <summary>Set the childs checkbox of tree node in the target state</summary>
//function setCheckOnChilds(image, checkState) {
//    /// check me
//    $(image).parents("td:first").find(":checkbox:first").attr("checked", checkState);
//    
//    /// check childs
//    $(image).parents("table:first").next().find(":checkbox").each(
//        function() { $(this).attr("checked", checkState); }
//    );
//}


/// *** TreeView check all childs *** ///

