/* RLT Javascript
   Copyright 2009 RR - AMM

   Version:
   1.0 - 1 May 2009
   
   Dependencies: 
   none   
*/

// Globals
var stageWinWidth = 0;
var stageWinHeight = 0;
var stageLeft = 0;
var stageTop = 0;
var stageLeftCurrent = 0;
var stageTopCurrent = 0;
var stageImages = new Array();
var stageContent = new Array();
var stageImagesExt = "jpg";
var stageImgPath = "";
var stageExpire = 0;
var stageButton = 0;
var stageView = 0;
var stageChangePos = 0;
var stageDynamics = 0;

// Working
var stageObjectDynamics = new Array();

// Stage objects array
// Sub-array object items 
// 0 - Object
// 1 - Window reference
// 2 - Size structure
// 3 - Control Word
//     1 - Resize Horizontal
//     2 - Resize Vertical
//     4 - Scroll Horizontal
//     8 - Scroll Vertical
var stageObjectArray = new Array();

// Stage object events
window.onload = loadStage;
window.onresize = setStageObjectResizeAuto; 
window.onscroll = setStageObjectResizeAuto;

// Stage onload
function loadStage() {

    // Init objects
    stageObjectArray[0] = new Array();
    stageObjectArray[0][0] = document.getElementById('stage');
    stageObjectArray[0][1] = ''; 
    stageObjectArray[0][2] = stageSize;
    stageObjectArray[0][3] = stageMotion;
    //stageObjectArray[1] = new Array();
    //stageObjectArray[1][0] = document.getElementById('dept');
    //stageObjectArray[1][1] = ''; 
    //stageObjectArray[1][2] = deptSize;
    //stageObjectArray[1][3] = deptMotion;
    
    // Set static stage
    runStageFunc('','hideload','');
    runStageFunc('','showstage','');
    
    if (stageView == 0) {

        // Run page load if required
        if (typeof(pageLoad) == 'function') pageLoad();
    }

    // Run secondary page load if required
    if (typeof(pageLoad2) == 'function') pageLoad2();

    // one more page load if required
    if (typeof(pageLoad3) == 'function') pageLoad3();
    
}

// Preload images
function preloadStageImage(obj, img, mode) {
    
    // Init
    var index = obj.length;
    obj[index] = new Array();
    
    // Off
    obj[index][0] = new Image();
    obj[index][0].src = stageImgPath + img + '_off.' + stageImagesExt;
    
    // On
    obj[index][1] = new Image();
    if (mode == 0) {
        obj[index][1].src = stageImgPath + img + '_on.' + stageImagesExt;
    }
    
    // Over
    obj[index][2] = new Image();
    obj[index][2].src = stageImgPath + img + '_over.' + stageImagesExt;
}

// Change stage images
function changeStageImage(element, but, index) {
    
    var img = document.getElementById(element);    
    if (stageButton == but && index == 0) index = 1;
    img.src = stageImages[but][index].src;
}

// Change content images
function changeContentImage(element, but, index) {
    
    var img = document.getElementById(element);    
    img.src = stageContent[but][index].src;
}

// Run required object function
function runStageFunc(sid, func, data) {

    // Process required function
    switch (func) {
    
        case 'showstage':
            setStageObjectVisibility(0, true);
            setStageObjectVisibility(1, true);
            break;                         

        case 'hidestage':
            setStageObjectVisibility(0, false);
            setStageObjectVisibility(1, false);
            break;                         

        case 'hideload':
            //document.getElementById('load').style.visibility = 'hidden';  
            break;                         
    }
    
    return true;
}

// Get browser window inner dimensions
function getStageWindowInnerSize() {

    if (typeof( window.innerWidth ) == 'number') {
        //Non-IE
        stageWinWidth = window.innerWidth;
        stageWinHeight = window.innerHeight;
    } 
    else if (document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight )) {
        //IE 6+ in 'standards compliant mode'
        stageWinWidth = document.documentElement.clientWidth;
        stageWinHeight = document.documentElement.clientHeight;
    } 
    else if (document.body && ( document.body.clientWidth || document.body.clientHeight )) {
        //IE 4 compatible
        stageWinWidth = document.body.clientWidth;
        stageWinHeight = document.body.clientHeight;
    }
}

// Automate object resize
function setStageObjectResizeAuto() {

    for (var i = 0; i != stageObjectArray.length; i++) {
    
        if (stageObjectArray[i]) {
            if (stageObjectArray[i][0]) {
                var stobj = stageObjectArray[i][0].style.visibility; 
                if (stobj.toLowerCase() == 'visible') {
                    setStageObjectResize(i);
                }
            }
        }    
    }

    return false;        
}

// Move object
function setStageObjectResize(id) {
    
    // Only resize if visible
    var stageObject = stageObjectArray[id];
    if (stageObject[0].style.visibility == 'visible') {
        
        // Init parameters
        getStageWindowInnerSize();
        var aobjsize = stageObject[2].split(',');
        hoff = 0;
        voff = 0;
        
        // Stage resize calculate
        if (stageWinWidth < aobjsize[0]) hoff = ((aobjsize[0] - stageWinWidth) / 2);
        if (stageWinHeight < aobjsize[1]) voff = ((aobjsize[1] - stageWinHeight) / 2);
        if (stageObject[3] & 1) {
            stageLeft = ((stageWinWidth - parseInt(aobjsize[0])) / 2) + parseInt(aobjsize[2]) + parseInt(hoff);
        }
        else {
            stageLeft = parseInt(aobjsize[2]);
        }
        if (stageObject[3] & 2) {
            stageTop = ((stageWinHeight - parseInt(aobjsize[1])) / 2) + parseInt(aobjsize[3]) + parseInt(voff);
        }
        else {
            stageTop = parseInt(aobjsize[3]);
        }
        
        // Stage scroll calculate
        //if ((clientBrowser.indexOf('Internet Explorer') == 0) && (clientVersion == 6)) {
        if (clientBrowser.indexOf('Internet Explorer') == 0) {
            scrollLeft = document.documentElement.scrollLeft;
            scrollTop = document.documentElement.scrollTop;
        }
        else {
            scrollLeft = window.pageXOffset;
            scrollTop = window.pageYOffset;
        }   

        if (stageObject[3] & 4) stageLeft += parseInt(scrollLeft);
        if (stageObject[3] & 8) stageTop += parseInt(scrollTop);
        
        // Current position store
        if (stageObject[0].style.left != '') stageLeftCurrent = parseFloat(stageObject[0].style.left.replace('px',''));
        if (stageObject[0].style.top != '') stageTopCurrent = parseFloat(stageObject[0].style.top.replace('px',''));

        // Set dynamics array
        stageObjectDynamics[id] = new Array();
        stageObjectDynamics[id][0] = stageLeft;     
        stageObjectDynamics[id][1] = stageTop;
        stageObjectDynamics[id][2] = stageLeftCurrent;     
        stageObjectDynamics[id][3] = stageTopCurrent;
        
        if (stageChangePos == 1) return;
    
        // Set stage dynamics writing
        if (stageDynamics == 0) {
            setStageObjectImmediate(id);
        }
        else {
            setTimeout('setStageObjectPosition(' + id + ')',50);
        }

        // Write cookie
        if (typeof(cookieWrite) == 'function') {
            cookieWrite('rlt[stageleft]', stageLeft, stageExpire, '/');
            cookieWrite('rlt[stagetop]', stageTop, stageExpire, '/');
        }
    }
}

// Set immediate position of the stage
function setStageObjectImmediate(id) {

    var stageObject = stageObjectArray[id];
    var stageDynamics = stageObjectDynamics[id];
    var aobjsize = stageObject[2].split(',');
    
    // Set styles
    stageObject[0].style.left = stageDynamics[0].toString() + 'px';
    stageObject[0].style.top = stageDynamics[1].toString() + 'px';            
    stageObject[0].style.width = aobjsize[0] + 'px';
    stageObject[0].style.height = aobjsize[1] + 'px';

    stageChangePos = 0;
}

// Set the dynamic position of the stage
function setStageObjectPosition(id) {

    var stageObject = stageObjectArray[id];
    var stageDynamics = stageObjectDynamics[id];
    var aobjsize = stageObject[2].split(',');
    
    var steps = 15;
    
    var dx = Math.abs(stageDynamics[0]-stageDynamics[2]);
    var dy = Math.abs(stageDynamics[1]-stageDynamics[3]);

    if (dx < steps/2)
        cx = (dx>=1) ? 1 : 0;
    else
        cx = Math.round(dx/steps);

    if (dy < steps/2)
        cy = (dy>=1) ? 1 : 0;
    else
        cy = Math.round(dy/steps);

    if (stageDynamics[0] > stageDynamics[2])
        stageDynamics[2] += cx;
    else if (stageDynamics[0] < stageDynamics[2])
        stageDynamics[2] -= cx;

    if (stageDynamics[1] > stageDynamics[3])
        stageDynamics[3] += cy;
    else if (stageDynamics[1] < stageDynamics[3])
        stageDynamics[3] -= cy;

    // Set styles
    stageObject[0].style.left = stageDynamics[2].toString() + 'px';
    stageObject[0].style.top = stageDynamics[3].toString() + 'px';            
    stageObject[0].style.width = aobjsize[0] + 'px';
    stageObject[0].style.height = aobjsize[1] + 'px';

    if (cx != 0 || cy != 0) {
        setTimeout('setStageObjectPosition(' + id + ')',50);
        stageChangePos = 1;
    }
    else {
        stageChangePos = 0;
    }
}

// Change visibility of object
function setStageObjectVisibility(id, vis) {

    if (stageObjectArray[id]) {
        if (stageObjectArray[id][0]) {
            if (vis) {
                stageObjectArray[id][0].style.visibility = 'visible';
                setStageObjectResize(id);
            }
            else {
                stageObjectArray[id][0].style.visibility = 'hidden';
            }
        }
    }
}
