window.onload = winLoadHandler;
//window.onerror = winErrorHandler;

//document.onkeypress = docKeyPressHandler;
document.onmousedown = docMouseDownHandler;
document.oncontextmenu = docContextMenuHandler;//new Function("return false");

var system_copyright = 'Defined in tiles-defs.xml file.';
var system_version = 'Defined in tiles-defs.xml file.';
var system_build = 'Defined in tiles-defs.xml file.';
var delete_message = 'Defined in ApplicationResources.properties file.';
var cancel_message = 'Defined in ApplicationResources.properties file.';

var validate = true;

function getEventObject(e) {
    // if e is null, means the Internet Explorer event model,
    // so get window.event.
    return e ? e : window.event;
}

function getTargetObject(e) {
    var myEvent = getEventObject(e);
    
    return myEvent.target ? myEvent.target : myEvent.srcElement;
}

function getKeyCode(e) {
    var myEvent = getEventObject(e);
    
    return myEvent.which ? myEvent.which : myEvent.keyCode;
}

function getObject(_id) {
    if (document.getElementById) {
        x = document.getElementById(_id);
        //window.alert('document.getElementById');
    } else if (document.all) {
        x = document.all[_id];
        //window.alert('document.all');
    } else if (document.layers) {
        x = document.layers[_id];
        //window.alert('document.layers');
    }
    
    return x;
}

function getObjects(_prefix, _suffix) {
    var x = new Array();
    for (var i = 0; true; i++) {
        if (getObject(_prefix+i+_suffix)) {
            x[i] = getObject(_prefix+i+_suffix);
        } else {
            break;
        }
    }
    
    return x;
}

function clone(_myObj) {
    if (typeof(_myObj) != 'object') return _myObj;
    if (_myObj == null) return _myObj;

    var myNewObj = new Object();

    for (var i in _myObj)
        myNewObj[i] = clone(_myObj[i]);

    return myNewObj;
}

/**
 * addEvent function included here for portability.
 * Remove if you are already using an addEvent/DOMReady function.
 * Found at http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
 *
 * Event order - Capturing / Bubbling
 */
function addEvent(obj, type, fn) {
    if (obj.addEventListener)
        obj.addEventListener(type, fn, false); // methods execute in sequence of adding (first add first execute)
    else if (obj.attachEvent) {
        obj["e"+type+fn] = fn;
        obj[type+fn] = function() {obj["e"+type+fn](window.event);}
        obj.attachEvent("on"+type, obj[type+fn]); // methods execute in reverse sequence of adding (first add last execute)
    }
}

function winLoadHandler(e) {
    var arrElements = document.getElementsByTagName('input');
    for (var i = 0; i < arrElements.length; i++) {
        var elementType = arrElements[i].type.toLowerCase();
        if (elementType == 'text' || elementType == 'password' || elementType == 'file') {
            //alert('init: id='+arrElements[i].id+', name='+arrElements[i].name+', nodeName='+arrElements[i].nodeName+', type='+arrElements[i].type);
            addEvent(arrElements[i], 'focus', inputFocusHandler);
        }
    }
}

function winErrorHandler(msg,url,l,e) {
    var txt = '';
    txt = 'There was an error on this page.\n\n';
    txt += 'ERROR: ' + msg + '\n';
    txt += 'URL: ' + url + '\n';
    txt += 'LINE#: ' + l + '\n\n';
    txt += 'Click OK to continue.\n\n';
    alert(txt);

    return true;
}

function docKeyPressHandler(e) {
    keyPressRestrict(e);
}

function docMouseDownHandler(e) {
    rightClickRestrict(e);
}

function docContextMenuHandler(e) {
    return false;
}

function inputFocusHandler(e) {
    autoHighlight(e);
}

function rightClickRestrict(e) {
    var myEvent = getEventObject(e);
    
    if (myEvent.button == 2 || myEvent.button == 3) {
        alert('System Version: '+system_version+' Build '+system_build+'\n'+system_copyright);
    }
}

function keyPressRestrict(e) {
    var myEvent = getEventObject(e);
    var myKeyCode = 0;
    var myShiftKey = false;

    // Internet Explorer 4+
    if (document.all) {
        myKeyCode = myEvent.keyCode;
        myShiftKey = myEvent.shiftKey;

    // Netscape 4
    } else if (document.layers) {
        myKeyCode = myEvent.which;
        myShiftKey = (myKeyCode == 16) ? true : false;

    // Netscape 6
    } else if (document.getElementById) {
        myKeyCode = myEvent.which;
        myShiftKey = (myKeyCode == 16) ? true : false;

    }

    // Restrict to ignore '|' character
    if (myKeyCode == 124) { // character '|'
        myEvent.keyCode = 8; // character 'backspace'
    }

    // Restrict to uppercase all inputs
    myElement = getTargetObject(myEvent);

    if ((myElement.type.toLowerCase() != 'password' && myElement.type.toLowerCase() != 'file')
        && (myKeyCode >= 97 && myKeyCode <= 122)) { // character 'a' to 'z'
        // character 'A' to 'Z'
        if (document.all) {
            myEvent.keyCode = myEvent.keyCode - 32; 
        } else {
            alert('keyPressRestrict cannot work!!!');
        }
    }
}

function autoHighlight(e) {
    var myTarget = getTargetObject(e);
    
    myTarget.select();
}
  
function popupConfirm(_msg) {
    return window.confirm(_msg);
}

function popupConfirmDelete() {
    return popupConfirm(delete_message);
}

function popupConfirmCancel() {
    return popupConfirm(cancel_message);
}

function getWindowSize() {
    var myWidth = 0, 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 getWindowScrollXY() {
    var scrOfX = 0, scrOfY = 0;

    if (typeof(window.pageYOffset) == 'number') {
        //Netscape compliant
        scrOfX = window.pageXOffset;
        scrOfY = window.pageYOffset;
    } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
        //DOM compliant
        scrOfX = document.body.scrollLeft;
        scrOfY = document.body.scrollTop;
    } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
        //IE6 standards compliant mode
        scrOfX = document.documentElement.scrollLeft;
        scrOfY = document.documentElement.scrollTop;
    }
    return [scrOfX, scrOfY];
}

// Each Chinese count as 3 bytes.
function getChiStrLen(chrValue){
    var i, j, strTemp;
    var strLen = chrValue.length;

    strTemp = "`0123456789-=\\~!@#$%^&*()_+|qwertyuiop[]QWERTYUIOP{}asdfghjkl;'ASDFGHJKL:\"zxcvbnm,./ZXCVBNM<> ?\r\n";
    for (i = 0; i < chrValue.length; i++){
        j = strTemp.indexOf(chrValue.charAt(i));
        if (j == -1)
            strLen = strLen+2;
    }
    return strLen;
}
