var x;
var myRequest = new Array();

function initPage(){
    tagIdentify();
    return true;
}

function cambiaCodice(sL){
    if(sL==1){ startLoading(); }
    setTimeout("cambiaCodice2('" + sL + "')", 0);
}

function cambiaCodice2(sL){
    var r = Math.random();
    document.getElementById('captchaDiv').innerHTML = '<img src="kgoModules/scripts/php/captcha/immagine.php?r=' + escape(r) + '" alt="kgoCaptcha" title="kgoCaptcha"><br />se il codice ' + decodeURIComponent('&egrave;') + ' illeggibile, <span onclick="cambiaCodice(1);">[clicca qui]</span>';
    if(sL==1){ setTimeout("stopLoading()", 500); }
}

function overlayAlert(xHTML){
    applyFog();
    document.getElementById('overlayText').innerHTML = xHTML + '<div class="footer"><div class="text"><ul><li class="chiudi" onclick="closeOverlayAlert();">Chiudi</li></ul></div></div>';
    centerMe('overlayText');
}

function closeOverlayAlert(){
    stopLoading();
    Nascondi('overlayText');
    document.getElementById('overlayText').innerHTML = '';
}

function tagIdentify(){
    if(!document.getElementsByTagName){ return; }
    var anchors = document.getElementsByTagName('a');
    for (var i=0; i<  anchors.length; i++){
        var anchor = anchors[i];
        var relAttribute = anchor.getAttribute('rel');
        if(relAttribute != null&&  relAttribute.match('jsF')){
            if(relAttribute.indexOf(".")){
                anchor.onclick = resolveRel;
            }
        }
    }
    return true;
}

function showMenu(anchor, target, anchorDimensions){
    var anchorDiv = document.getElementById(anchor);
    var targetDiv = document.getElementById(target);
    var anchorDimensionsDiv = document.getElementById(anchorDimensions);
    targetDiv.style.visibility = 'hidden';
    targetDiv.style.display = 'none';
    targetDiv.style.position = 'absolute';
    var anchorPosition = getPos(anchor);
    var anchorLeft = anchorPosition[0];
    var anchorTop = anchorPosition[1];
    var anchorHeight = anchorDiv.offsetHeight;
    targetDiv.style.top = Math.round(anchorTop + anchorHeight - 13) + 'px';
    targetDiv.style.left = Math.round(anchorLeft - 6) + 'px';
    targetDiv.style.visibility = 'visible';
    targetDiv.style.display = 'block';
    var anchorWidth = anchorDimensionsDiv.offsetWidth - 2;
    targetDiv.style.width = anchorWidth + 'px';
}

function resolveRel(){
    var rayRel = this.getAttribute("rel").split(".");
    if(rayRel.length > 2){
        var rayRelString = rayRel[2].toString();
    }else{
        var rayRelString = 'NaN';
    }
    rayRel.shift(); // scartiamo il primo valore dell'array
    /* il successivo e` la callback, recuperiamo il riferimento alla funzione */
    var callback = window[rayRel.shift()];
    // verifichiamo che sia una funzione
    if ( typeof(callback) == "function" ){
        /* se lo e`, la chiamiamo passando cio` che e` rimasto in rayRel: se c'e` qualcosa, sono parametri */
        //controllo se rayrel contiene delle virgole
        if(rayRelString.indexOf(",")){
            var rayArg = rayRelString.split(",");
            if(rayArg.length == 1){callback.call(window, rayArg[0]);
            }else if(rayArg.length == 2){ callback.call(window, rayArg[0], rayArg[1]);
            }else if(rayArg.length == 3){ callback.call(window, rayArg[0], rayArg[1], rayArg[2]);
            }else if(rayArg.length == 4){ callback.call(window, rayArg[0], rayArg[1], rayArg[2], rayArg[3]);
            }else if(rayArg.length == 5){ callback.call(window, rayArg[0], rayArg[1], rayArg[2], rayArg[3]);
            }else if(rayArg.length == 6){ callback.call(window, rayArg[0], rayArg[1], rayArg[2], rayArg[3], rayArg[4]);
            }else if(rayArg.length == 7){ callback.call(window, rayArg[0], rayArg[1], rayArg[2], rayArg[3], rayArg[4], rayArg[5]); }
        }else{
            callback.call(window, rayRel);
        }
    }
}

var reachTimer;
var ri = new Array();
ri['adjX'] = 0;
ri['adjY'] = 0;
//coe = coefficent speed. higher coe, higher speed.
ri['coeX'] = 0.15;
ri['coeY'] = 0.15;
//coem = alternative coefficent, will be used when the distance is lower than the nearest value.
ri['coemX'] = 0.27;
ri['coemY'] = 0.27;
//toll = tollerance betweeen the nearest position to the element before quit the cicle.
ri['tollX'] = 5;
ri['tollY'] = 5;
//higher distance before use the coem
ri['nearX'] = 120;
ri['nearY'] = 120;
//distances
ri['distX'];
ri['distY'];
ri['distposX'];
ri['distposY'];
ri['moveToX'];
ri['moveToY'];
//debug logs
function reachIt(targetElement, ignoreX, ignoreY, oldX, oldY){
    //get the target's properties
    var target = document.getElementById(targetElement);
    var targetPosition = getPos(targetElement);
    var targetLeft = targetPosition[0] - ri['adjX'];
    var targetTop = targetPosition[1] - ri['adjY'];
    //and the actual scroll of the page
    var rayScroll = getScrollXY();
    var scrollY = rayScroll[1];
    var scrollX = rayScroll[0];
    if(ignoreX == 1){ targetLeft = scrollX; }
    if(ignoreY == 1){ targetTop = scrollY; }
    //check the ignores options
    //then calculate the ri['dist']s
    ri['distY'] = targetTop - scrollY;
    ri['distX'] = targetLeft - scrollX;
    if(ri['distY'] < 0){ ri['distposY'] = ri['distY'] * -1;
    }else{ ri['distposY'] = ri['distY']; }
    if(ri['distX'] < 0){ ri['distposX'] = ri['distX'] * -1;
    }else{ ri['distposX'] = ri['distX']; }
    //if the ri['dist'] is minor or equal to the ri['near'] var, i use the mX/mY ri['coe']
    if(ri['distposX'] <= ri['nearX']){ ri['moveToX'] = Math.round((ri['distX'] * ri['coemX']) + scrollX);
    }else{ ri['moveToX'] = Math.round((ri['distX'] * ri['coeX']) + scrollX); }
    if(ri['distposY'] <= ri['nearY']){ ri['moveToY'] = Math.round((ri['distY'] * ri['coemY']) + scrollY);
    }else{ ri['moveToY'] = Math.round((ri['distY'] * ri['coeY']) + scrollY); }
    window.scroll(ri['moveToX'], ri['moveToY']);
    //if the distance is minor or equal to the ri['toll'], i assume the ri['dist'] to 0
    if(ri['distposX'] <= ri['tollX']){ ri['distX'] = 0; }
    if(ri['distposY'] <= ri['tollY']){ ri['distY'] = 0; }
    //if not arrived, repeat the loop
    if(oldX == ri['distX'] && oldY == ri['distY']){//if take the same dist[X] twice, the screen size wont permit to reach the element. stop it.
        window.scroll(targetLeft, targetTop);
        if(reachTimer){ clearTimeout(reachTimer); }
        return false;
    }else if(ri['distX'] != 0 || ri['distY'] != 0){
        if(reachTimer){ clearTimeout(reachTimer); }
        reachTimer = setTimeout("reachIt('" + targetElement + "', '" + ignoreX + "', '" + ignoreY + "', '" + ri['distX'] + "', '" + ri['distY'] + "')", 0);
    }else{//or end it.
        window.scroll(targetLeft, targetTop);
        if(reachTimer){ clearTimeout(reachTimer); }
        return false;
    }
}

function applyFog(){
    var fogDiv = document.getElementById('myFog');
    fogDiv.style.visibility = 'hidden';
    fogDiv.style.display = 'block';
    fogDiv.style.position = 'fixed';
    var myDimensions = getScreenSize();
    var screenLen = myDimensions[0];
    var screenHei = myDimensions[1];
    fogDiv.style.width = screenLen + 'px';
    fogDiv.style.height = screenHei + 'px';
    fogDiv.style.top = '0px';
    fogDiv.style.left = '0px';
    fogDiv.style.visibility = 'visible';
    fogDiv.style.display = 'block';
}

function centerMe(targetElement){
    var target = document.getElementById(targetElement);
    target.style.visibility = 'hidden';
    target.style.display = 'block';
    target.style.position = 'fixed';
    var targetWidth = target.offsetWidth;
    var targetHeight = target.offsetHeight;
    var myDimensions = getScreenSize();
    var screenLen = myDimensions[0];
    var screenHei = myDimensions[1];
    var myTop = Math.round((screenHei / 2) - (targetHeight / 2));
    var myLeft = Math.round((screenLen / 2) - (targetWidth / 2));
    target.style.top = myTop + 'px';
    target.style.left = myLeft + 'px';
    target.style.visibility = 'visible';
}

function coverIt(layer, targetElement){
    var target = document.getElementById(targetElement);
    var coverDiv = document.getElementById(layer);
    coverDiv.style.visibility = 'hidden';
    coverDiv.style.display = 'block';
    coverDiv.style.position = 'absolute';
    var targetPosition = getPos(targetElement);
    var targetLeft = targetPosition[0];
    var targetTop = targetPosition[1];
    var targetWidth = target.offsetWidth;
    var targetHeight = target.offsetHeight;
    coverDiv.style.top = targetTop + 'px';
    coverDiv.style.left = targetLeft + 'px';
    coverDiv.style.width = targetWidth + 'px';
    coverDiv.style.height = targetHeight + 'px';
    coverDiv.style.visibility = 'visible';
}

function getScreenSize() {
    var myWidth = 0;
    var myHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    }else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ){
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    }else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ){
        //IE 4 compatible
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight;
    }
    return [myWidth, myHeight];
}

function getPos(targetElement){
    var curtop = 0;
    var curleft = 0;
    var target = document.getElementById(targetElement);
    while (target.offsetParent) {
        curleft += target.offsetLeft - target.scrollLeft;
        curtop += target.offsetTop - target.scrollTop;
        target = target.offsetParent;
    }
    return [curleft, curtop];
}

function getScrollXY() {
    var scrOfX = 0, scrOfY = 0, method = false;
    if( typeof( window.pageYOffset ) == 'number' ){
        //Netscape compliant
        scrOfY = window.pageYOffset;
        scrOfX = window.pageXOffset;
        method = 'A';
    }else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ){
        //DOM compliant
        scrOfY = document.body.scrollTop;
        scrOfX = document.body.scrollLeft;
        method = 'B';
    }else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ){
        //IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
        scrOfX = document.documentElement.scrollLeft;
        method = 'C';
    }
    return [ scrOfX, scrOfY, method ];
}
function Nascondi(quale){
    var r = document.getElementById(quale);
    r.style.visibility = 'hidden';
    r.style.display = 'none';
}
function Mostra(quale){
    var r = document.getElementById(quale);
    r.style.visibility = 'visible';
    r.style.display = 'block';
}
function startLoading(){
    applyFog();
    centerMe('loader');
}
function stopLoading(){
    Nascondi('myFog');
    Nascondi('loader');
}
function CreateXmlHttpReq(handler) {
    var xmlhttp = null;
    try {
        xmlhttp = new XMLHttpRequest();
    }catch(e){
        try{
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    xmlhttp.onreadystatechange = handler;
    return xmlhttp;
}

//handlers ajax
function stampaOverlay(x) {
    if (myRequest[x].readyState == 4 && myRequest[x].status == 200) {
        overlayAlert(myRequest[x].responseText);
    }
}