var infochooser;

function load() {
    processFragmentVars();
    setVisible('federationsubmit', false);
    document.getElementById('universe_federation_form').reset();
    storeImgData();
    showExplanations(false);
    resizeUniverseIframe();
}

function replaceFragment(anch) {
    var uri = anch.href;
    var indHash = uri.indexOf('#');
    if (indHash != -1) {
        uri = uri.slice(0, indHash);
    }
    uri = uri + top.location.hash;
    
}

function addFragmentToSrc(element) {
    if (top.location.hash.length > 1){
        var fragment = top.location.hash;
        fragment.replace(/"&amp;"/g, "&");
        element.src = element.src + fragment;
    }
}

/* dropdown */
function goUniverse(selec) {

    var x = selec.options[selec.options.selectedIndex].value;

    var y = selec.options[selec.options.selectedIndex].value;
    if (x != null && x!= "") {
        if (top.location.hash.length > 1) {
            selec.options[selec.options.selectedIndex].value =
            selec.options[selec.options.selectedIndex].value + top.location.hash;
        }
        selec.form.submit();
    }
    
}
/*
function openDropDown() {
    var selec = document.getElementById("redirSelect");
    var tid;
    var dropdownFlag = true;
    
    if (dropdownFlag) {
        while ((selec.size < 10) && (selec.size < selec.length)
            && dropdownFlag==true) {
            incrementList(selec);
        }
    }
    dropDownFlag = false;
    clearTimeout(tid);
}

function closeDropDown() {
    selec = document.getElementById("redirSelect");
    selec.size=1;
}
*/

function incrementList(selec) {
    var p = selec.size + 1;
    selec.size = p;
}

function dontAccept() {
    top.location.href = "http://www.cyber-identity.com/";
    try {
        if (window.back)
            window.back();
        else if (top == window && history.back)
            history.back();
        else if (top != window && history.back)
            top.history.back();
        else
            top.location.href = "http://www.cyber-identity.com/";
    }
    catch(e) {
        top.location.href = "http://www.cyber-identity.com/";
    }
}

/* show, hide */
function setVisible(id, bool) {
    if(id) {
        element = document.getElementById(id);
        if(element) {
            if(bool == true){
                element.style.visibility = 'visible';
            }
            else {
                element.style.visibility = 'hidden';
            }
        }
    }
}

function toggle(value, type, bool) {
    if(type != null)
        type = type.toLowerCase();
    else
        type = "";
    
    if(type=="id") {
        element = document.getElementById(value);
    }
    else {
        element = value;
    }
    if(element) {
        if(bool == true){
            element.style.display = 'block';
        }
        else {
            element.style.display = 'none';
        }
    }
}

//* finds the 1. (most left in the tree) occurrence of an img-tag and returns it.
//* Returns null if nothing is found.
function findImgNode(element) {
    var root = element;
    var ele = root;
    var bool = true;
    while(bool) {
        if (ele.nodeType == 1 && ele.tagName.toUpperCase() == "IMG") {
            break;
        }
        else if (ele.nodeType == 1 && ele.hasChildNodes()) {
            ele = ele.firstChild;
        }
        else if (ele.nextSibling != null) {
            ele = ele.nextSibling;
        }
        else if (ele.parentNode != root) {
            var aunt = ele.parentNode.nextSibling;
            while (aunt == null && ele.parentNode != root) {
                ele = ele.parentNode;
                aunt = ele.parentNode.nextSibling;
            }
            ele = aunt;
        }
        else {
            ele = null;
            break;
        }
    }
    return ele;
}

function storeImgData() {
    CHOOSER_IMGS_WIDTH = new Array(URNS.length);
    CHOOSER_IMGS_HEIGHT = new Array(URNS.length);
    for (var i=0; i<URNS.length; i++) {
        var divi = document.getElementById(URNS[i]);
        var img = findImgNode(divi);
        if (img != null) {
            if (img.offsetHeight != null && img.offsetWidth != null &&
                img.offsetHeight != 0 && img.offsetWidth != 0) {
                CHOOSER_IMGS_WIDTH[i] = img.offsetWidth;
                CHOOSER_IMGS_HEIGHT[i] = img.offsetHeight;
            }
            else {
                CHOOSER_IMGS_WIDTH[i] = img.width;
                CHOOSER_IMGS_HEIGHT[i] = img.height;
            }
        }
    }
}

function getMax(numbArr) {
    var max = 0;
    var ar = numbArr;
    for (var i=0; i<ar.length; i++) {
        if(!isNaN(ar[i])) {
            max = Math.max(max, ar[i]);
        }
    }
    return max;
}

var fragmentVarKeys = new Array();
var fragmentVarValues = new Array();
var fragmentVars = new Array(fragmentVarKeys, fragmentVarValues);

function parseFragmentVars () {
    var fragment = top.location.hash;

    if (fragment.charAt(0) == '#'){
        fragment = fragment.substring(1);
    }

    fragment.replace(/&amp;/i, '&');
    var keyEqVals = fragment.split('&');
    for (var i=0; i < keyEqVals.length; i++){
        var j = keyEqVals[i].indexOf('=');

        fragmentVarKeys[i] = keyEqVals[i].substring(0,j);
        if(fragmentVarKeys[i].indexOf("amp;") == 0) {
            fragmentVarKeys[i] = fragmentVarKeys[i].slice("amp;".length, fragmentVarKeys[i].length);
        }
        fragmentVarValues[i] = keyEqVals[i].substring(j+1,keyEqVals[i].length);
    }
}

function processFragmentVars() {
    var idInfo = URNS[0];
    //var showExpl = false;
    parseFragmentVars();
    for (var i = 0; i < fragmentVarKeys.length; i++) {
        if (fragmentVarKeys[i] == "idInfo"){
            idInfo = decodeURIComponent(fragmentVarValues[i]);
        } /*
        else if (fragmentVarKeys[i] == "showExpl"){
            showExpl = fragmentVarValues[i];
        }
        */
        else {}
    }
    showSpecificIdInfo(idInfo);
//showExplanations(showExpl);
}

function addFragmentVar(key, value) {
    if (top.location.hash.indexOf(key) == -1) {
        if (top.location.hash.length > 1) {
            top.location.hash = top.location.hash + '&';
        }
        top.location.hash = top.location.hash + key + '=' + value;
    } else {
        var ki = top.location.hash.indexOf(key);
        var start = top.location.hash.substring(0, ki);
        var end = top.location.hash.substring(start.length, top.location.hash.length);
        
        var ai = end.indexOf('&');
        if (ai == -1){
            end = "";
        } else {
            end = end.substring(ai, end.length);
        }

        top.location.hash = start + key + '=' + value + end;
        location.hash = top.location.hash;
    }
}

function showSpecificIdInfo(id) {

    //parseFragmentVars();
    //addFragmentVar("idInfo", id);

    var scrollY;
    var scrollX;
    if (typeof window.pageYOffset != 'undefined') {
        scrollY = window.pageYOffset;
        scrollX = window.pageXOffset;
    }
    else if (typeof document.compatMode != 'undefined'
        && document.compatMode != 'BackCompat') {
        scrollY = document.documentElement.scrollTop;
        scrollX = document.documentElement.scrollLeft;
    }
    else if (typeof document.body != 'undefined') {
        scrollY = document.body.scrollTop;
        scrollX = document.body.scrollLeft;
    }
    
    var wrap = document.getElementById("infochooser_wrap");
    var kidsArr = infochooser.childNodes;
    for (var i=0; i<kidsArr.length; i++) {
        var element = kidsArr[i];
        var ele = findImgNode(element);
        var maxImgHeight = 0;
        
        
        var mini = 0;
        
        var bool;
        if (ele != null && ele.tagName.toUpperCase() == "IMG") {
            if (CHOOSER_IMGS_HEIGHT[i] > 0) {
                bool = true;
                ele.width = CHOOSER_IMGS_WIDTH[i];
                ele.height = CHOOSER_IMGS_HEIGHT[i];
                var m = CHOOSER_IMGS_HEIGHT[i]+10;
                if (m > maxImgHeight) {
                    maxImgHeight = m;
                    mini = maxImgHeight;
                }
                wrap.minHeight = mini;
                wrap.style.minHeight = mini+"px";
            }
            
            var imgName = "img:" + id;
            if (imgName != ele.name) {
                if (bool) {
                    ele.width = ele.width/2;
                    ele.height = ele.height/2;
                }
                ele.className = "chooser";
            } 
            else {
                ele.className = "chosen";
            }
            
            if (i == 0) {
                ele.marginLeft = "0px";
            }
        }
        toggle(URNS[i],"id", false);
    }
    toggle(id, "id", true);
    
    var icHeight;
    if (infochooser.offsetHeight != null) {
        icHeight = infochooser.offsetHeight;
    } 
    else if (infochooser.scrollHeight != null) {
        icHeight = infochooser.scrollHeight;
    } else {
        icHeight = 0;
    }

    var mi = infochooser.offsetHeight+30;
    if (icHeight > wrap.offsetHeight-30) {
    
        wrap.style.minHeight = mi;
        wrap.minHeight = mi;
        wrap.style.height = mi;
        wrap.height = mi;
    }
    //firefox
    if (icHeight > wrap.offsetHeight-30) {
        mi = mi+"px";
        wrap.style.minHeight = mi;
        wrap.minHeight = mi;
        wrap.style.height = mi;
        wrap.height = mi;
    }

    if(wrap.offsetHeight != null && mini > wrap.offsetHeight) {
        wrap.height = wrap.style.minHeight;
    }

    if (document.getElementById("specificIdSelect") != null) {
        var opts = document.getElementById("specificIdSelect").options;
        for(var j=0; j<opts.length; j++) {
            if(opts[j].value == id) {
                opts[j].selected = true;
                break;
            }
        }
    }
    scrollTo(scrollX, scrollY);

    resizeUniverseIframe();

    return false;
}

function showExplanations(bool) {

    var nameHide;
    var nameShow;
    
    toggle("universe_explanation_0", "id", bool);
    toggle("universe_explanation_1", "id", bool);
    
    var list = document.getElementsByTagName("table");
    for (var i = 0; i<list.length; i++) {
        var element = list.item(i);
        
        if (element.className == "universe_info") {
            if (bool) {
                element.style.display = 'block';
            }
            else {
                element.style.display = 'none';
            }
        }
    }

    if (bool == true) {
        nameHide = "expandElement";
        nameShow = "collapseElement";
    }
    else {
        nameHide = "collapseElement";
        nameShow = "expandElement";
    }

    var hideElementId = nameHide+0;
    var showElementId = nameShow+0;
    for( var j = 0; document.getElementById(showElementId)!=null ; j++) {
        hideElementId = nameHide+j;
        showElementId = nameShow+j;
        
        if (document.getElementById(showElementId)!=null) {
            document.getElementById(hideElementId).style.display = 'none';
            document.getElementById(showElementId).style.display = 'inline';
        }   
    }
}

function showHideSubmit(selec) {
    var val = selec.options[selec.options.selectedIndex].value;
    if (val != "") {
        setVisible("federationsubmit", true);
    } 
    else {
        setVisible("federationsubmit", false);
    }
}

var universeDefaultBorderColor;

function changeBorderColor(element, colo) {
    universeDefaultBorderColor = element.style.borderColor;
    element.style.borderColor = colo;
}

function resetBorderColor(element) {
    if (universeDefaultBorderColor != null) {
        element.style.borderColor = universeDefaultBorderColor;
    }
}

var appName = navigator.appName;
var IE = "Microsoft Internet Explorer";
var isIE = appName==IE;
//var KHTML = "KHTML";
//var isKHTML = navigator.userAgent.toString().indexOf(KHTML) > -1;

/*
 * sets an iframe to the right height
 * input: id of the iframe
 */
function resizeIframe(id) {
    var iframepage = window.document.getElementById(id);

    if ( iframepage == null && top != self ) {
        iframepage = parent.document.getElementById(id);
    }
    if (iframepage == null) {
        return;
    }

    var readyState = null;
    
    if (iframepage.contentWindow.document.readyState != null) {
        readyState = iframepage.contentWindow.document.readyState;
    }
    
    if (isIE && readyState != null && typeof readyState =="string"
        && readyState != "complete" ) {
        setTimeout("resizeUniverseIframe()", 700);
    }
    var scrollHeight = iframepage.contentWindow.document.body.scrollHeight;

    var bodyHeight = scrollHeight + 40;
    iframepage.setAttribute("height", bodyHeight);
    iframepage.setAttribute("scrolling", "no");
}

function resizeUniverseIframe() {
    var universepage = window.document.getElementById("universepage");

    if ( universepage == null && top != self ) {
        universepage = parent.document.getElementById("universepage");
    }
    if (universepage == null) {
        return;
    }

    var readyState = null;

    if (universepage.contentWindow.document.readyState != null) {
        readyState = universepage.contentWindow.document.readyState;
    }

    if (isIE && readyState != null && typeof readyState =="string"
        && readyState != "complete" ) {
        setTimeout("resizeUniverseIframe()", 700);
    }
    var scrollHeight = universepage.contentWindow.document.body.scrollHeight;

    var bodyHeight = scrollHeight + 280;
    universepage.setAttribute("height", bodyHeight);
    universepage.setAttribute("scrolling", "no");
}

function completeUniversePage(id, domainOrg) {
    infochooser = document.getElementById("universe_infochooser");  
    
    var anch = document.createElement("a");
    anch.href="#";
    anch.onclick = function () {
        javascript:showSpecificIdInfo(id);
        javascript:addFragmentVar("idInfo", id);
    return false;
    };
    anch.name = "a:" + id;
    
    infochooser.appendChild(anch);
    
    var smallImg = document.createElement("img");
    var logo = document.images["ioLogo_"+domainOrg];
    
    smallImg.name = "img:"+id;
    smallImg.src = logo.src;
    smallImg.alt = logo.alt;
    smallImg.title = logo.title;
    anch.className = "chooser";
    anch.appendChild(smallImg);
    
    var didi = document.getElementById(id);
    var nameOrg = didi.title;
    // don't show the title-dialog of the div on mouseover as it interfers
    didi.title ="";

    if (document.getElementById("specificIdSelect") != null) {
        var opts = document.getElementById("specificIdSelect").options;
        var len = opts.length;
        for(var i=0; i<len; i++) {
            if(opts[i].value == id) {
                opts[i].text = nameOrg;
                break;
            }
        }
    }
}

function expandDirectoryFramer () {
    var winHeight;
    var upFrameHeight = document.getElementById("dirUpperFrame").scrollHeight;
    
    if (window.innerHeight != null && window.innerHeight >0)
        winHeight = window.innerHeight;
    else if (document.documentElement.clientHeight != null && 
        document.documentElement.clientHeight >0)
        winHeight = window.innerHeight;
    else if (document.body.clientHeight != null && 
        document.body.clientHeight>0)
        winHeight = window.innerHeight;
    else
        winHeight = 1300;
    

    document.getElementById("dirFrame").height = winHeight-upFrameHeight-winHeight/40;
/*
    alert( "winHeight: " + winHeight + ", upFrameHeight: "+ upFrameHeight + 
        "dirFrame: " + document.getElementById("dirFrame").scrollHeight);
    */
}

function closeFrame(target) {
    var ifrs = document.getElementsByTagName("iframe");
    var ifr;
    /*
    if (ifrs.length == 1) {
        ifr = ifrs[0];
    } else {
        //TODO: below
    }
    */
    var ref = target.href;
    var isrc;
    for (var i = 0; i < ifrs.length; i++) {
        isrc = ifrs [i].src;
        if (isrc == ref) {
            ifr = ifrs[i];
            target.href = "";
            break;
        }
    }
    alert (ifr.body);
    self.location = ifr.location;
    return false;
}

var origWidth;
var origHeight;
function magnify (element) {
    origWidth = element.getAttribute("width");
    
    element.setAttribute("width", "99%");
    return false;
}

function demagnify (element) {
    return false;
}

function preloadFile(url) {
    var pr = new Image();
    pr.src = url;
}

