/* $Id: contentActivityRootPlayer.js 55846 2009-11-06 09:55:39Z johnarne $ */
var loaderArray = [];

loadContentByUrl = function(url, targetElementId){

    var targetElement = $(targetElementId);
    url = url+'&trackingContextId='+trackingContextId;
    if(typeof skipContributors !== 'undefined'){
        for(var i =0; i < skipContributors.length; i++){
            url += '&skipContributorDisplay='+skipContributors[i];
        }
    }
//    alert('targetElementId '+targetElementId);
//    alert('loadContentByUrl '+url);
    new Ajax.Updater(targetElementId,url,{evalScripts:true,asynchronous:true});
}


checkLoaderArray = function(targetElementId){
//    alert('checkLoaderArray targetElementId '+targetElementId);
    if(loaderArray && loaderArray[targetElementId]){
        var arrayEntry = loaderArray[targetElementId];

        while (arrayEntry.length > 0){
            var _pair = arrayEntry.pop();
            loadContentByUrl(_pair.url, _pair.targetElementId);
        }

        delete loaderArray[targetElementId];
    }
}

addToLoaderArray = function(invokerId, targetElementId, url){
    if(!loaderArray[invokerId]){
        loaderArray[invokerId] = [];
    }
    var _entry = loaderArray[invokerId];

    var _pair = new Object();
    _pair.targetElementId = targetElementId;
    _pair.url = url;
    _entry.push(_pair);
}


activateElement = function(targetElementId, deactivateSiblingsOfClass){
    var targetElement = $(targetElementId);
    if(!targetElement) return;

    checkLoaderArray(targetElementId);

    try{
        var _siblings;
        if(Prototype.Browser.IE){
            _siblings = targetElement.up().children;
        }else{
            _siblings = getDescendantsByClassName(deactivateSiblingsOfClass, targetElement.up());
        }
        if(_siblings){
            for(var i =0; i<_siblings.length;i++){
                try{
                    var _sibling = $(_siblings[i].id);
                    if(_sibling.id && _sibling.id != targetElementId){
                        setLayerDisplay(_sibling.id, false);
                        if(_sibling.hasClassName('selected') ){
                            _sibling.removeClassName('selected');
                        }
                    }
                }catch(err2){
//                    alert('err2 '+err2);
                }
            }
        }
    }catch(err){
        alert('activateElement '+err);
    }
    setLayerDisplay(targetElementId, true);
    $(targetElementId).addClassName('selected');
}

setSelected = function(selectedId, siblingClass, markerClass){

    try{
        var targetElement = $(selectedId);
        var _siblings = getDescendantsByClassName(siblingClass, targetElement.up());
        if(_siblings){
            for(var i =0; i<_siblings.length;i++){
                var _sibling = _siblings[i];
                _sibling.removeClassName(markerClass);
            }
        }
        targetElement.addClassName(markerClass);
    }catch(err){
        alert('setSelected '+err);
    }
}

/**
 * document.getElementsByClassName is deprecated in Prototype 1.6, and seems buggy in ff3
 * This method should do the same job.
 * @param _desiredClass
 * @param ancestorElement
 * @returns Array of descendants with desired class
 */
getDescendantsByClassName = function(_desiredClass, ancestorElement ){
    var _descendants = [];

    if(ancestorElement)
    try {
        var desc_ = $(ancestorElement.id).descendants();
        for (var i = 0; i < desc_.length; i++) {
            var descy = desc_[i];
            if (descy.hasClassName(_desiredClass)) {
                //alert('getDescendantsByClassName '+descy.className+'_'+descy.id);
                _descendants[_descendants.length] = descy;
            }
        }
    } catch(ex) {
        //alert('exception getting descendants for '+ancestorElement);
    }
    return _descendants;
}


/**
*   Activate a part by a node's resource. Obviously assumes the resource only appears once.
 * Specific to classnames in nettoppbiz process and so on.
 * @param resourceId
 */
activateElementByResourceId = function(resourceId ){
//    alert('activateElementByResourceId resourceId='+resourceId);
    var targetDiv = getDescendantsByClassName('resource_'+resourceId, $('content'))[0];
//    alert(targetDiv ==null);
    if(targetDiv == null) targetDiv = $('contentLevel2_'+resourceId);
    if(targetDiv == null) targetDiv = $('content_'+resourceId);
//    alert(targetDiv ==null);
    if(targetDiv == null)return;
//    targetDiv = targetDiv[0];
    var structureElementId = '';
    if(targetDiv.hasClassName('contentLevel1')){
//        alert('contentLevel1');
        activateElement(targetDiv.id, 'contentLevel1');
        structureElementId = targetDiv.id.substr('content_'.length);
    }else{
        activateElement(targetDiv.id, 'contentLevel2');
        activateElement(targetDiv.up().id, 'contentLevel1');
        structureElementId = targetDiv.up().id.substr('content_'.length);
    }
//    alert('structureElementId '+structureElementId);
    setSelected('topTab_'+structureElementId, 'topTab', 'current');
}
