﻿function MyResolution(width, height) {
    this.width = width;
    this.height = height;
}

MyResolution.prototype.changeKeepRatio = function(width, height, zoom) {
    if (zoom || (this.width > width || this.height > height)) {
        var f = Math.max(this.height / height, this.width / width);
        var nHeight = Math.floor(this.height / f);
        nHeight = (nHeight > 0) ? nHeight : 1;
        var nWidth = Math.floor(this.width / f);
        nWidth = (nWidth > 0) ? nWidth : 1;

        return new MyResolution(nWidth, nHeight);
    }

    return this;
}

/* string extension */
String.prototype.trimChar = function(ch) {
    var rx1 = new RegExp("^" + ch + "*", "gi");
    var rx2 = new RegExp( ch + "*$", "gi");

    return this.replace(rx1, "").replace(rx2, "");
}
/* string extension */

function UpdateValidator(validatorID, extenderID, Message) {
    var Validator = document.getElementById(validatorID);

    if (Validator != null) {
        Validator.errormessage = Message;

        var Extender = $find(extenderID);
        if (Extender != null &&
                        typeof (Extender._errorMessageCell) !== 'undefined' &&
                        Extender._errorMessageCell != null) {
            Extender._errorMessageCell.innerHTML = Message;
        }

        ValidatorValidate(Validator);
    }
}

function ShowOrHide(id) {
    var item = document.getElementById(id);
    if (item.style.display == "block")
        item.style.display = "none";
    else
        item.style.display = "block";
}

function Hide(id) {
    var elem = document.getElementById(id);
    if(elem != null)
        elem.style.display = "none";
}
function Show(id) {
    var elem = document.getElementById(id);
    if (elem != null)
        elem.style.display = "block";
}

function preg_quote( str ) {    
// http://kevin.vanzonneveld.net    
// +   original by: booeyOH    
// +   improved by: Ates Goral (http://magnetiq.com)    
// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    
// +   bugfixed by: Onno Marsman    
// *     example 1: preg_quote("$40");    
// *     returns 1: '\$40'    
// *     example 2: preg_quote("*RRRING* Hello?");    
// *     returns 2: '\*RRRING\* Hello\?'    
// *     example 3: preg_quote("\\.+*?[^]$(){}=!<>|:");
// *     returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:'
    return (str + '').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
}

function Highlight(element, text) {
    if (element != null && text.length != 0) {
        var elms = element.getElementsByTagName("a");
        var words = text.split(' ');

        for (var nWord = 0; nWord < words.length; nWord++) {
            var rg = new RegExp(preg_quote(words[nWord]), "gi");
            for (var i = 0; i < elms.length; i++) {
                var elm = elms[i];
                if (elm.innerHTML.indexOf('<') == -1 && elm.className.toLowerCase().indexOf("highlight") != -1) {
                    elm.innerHTML = elm.innerHTML.replace(rg, "<strong>$&</strong>");
                }
            }
        }
    }
}

function getScrollXY() {
    var scrOfX = 0, scrOfY = 0;
    if (typeof (window.pageYOffset) == 'number') {
        //Netscape compliant
        scrOfY = window.pageYOffset;
        scrOfX = window.pageXOffset;
    } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
        //DOM compliant
        scrOfY = document.body.scrollTop;
        scrOfX = document.body.scrollLeft;
    } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
        //IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
        scrOfX = document.documentElement.scrollLeft;
    }
    
    return [scrOfX, scrOfY];
}

var mouse = {x:0, y:0};
function getMouseXY(e) {
    var tempX = 0, tempY = 0;
    var IE = document.all ? true : false
    if (IE) { // grab the x-y pos.s if browser is IE
        tempX = event.clientX + document.body.scrollLeft
        tempY = event.clientY + document.body.scrollTop
    } else {  // grab the x-y pos.s if browser is NS
        tempX = e.pageX
        tempY = e.pageY
    }
    // catch possible negative values in NS4
    if (tempX < 0) { tempX = 0 }
    if (tempY < 0) { tempY = 0 }

    mouse = { x: tempX, y: tempY };
    return true;
}
document.onmousemove = getMouseXY;

function getFileName(path) {
    return path.replace(/^.*\\/, '');
}

function getDirectoryName(path) {
    var i = Math.max(path.lastIndexOf('\\'),path.lastIndexOf('/'));
    return path.substring(0,i);

}

function getInnerText(elm) {
    if (typeof (elm.innerText) != "undefined")
        return elm.innerText;
    else if (typeof (elm.textContent) != "undefined")
        return elm.textContent;
}

function setInnerText(elm, text) {
    if(typeof(elm.innerText) != "undefined")
        elm.innerText = text;
    else if(typeof(elm.textContent) != "undefined")
        elm.textContent = text;
}

function isAlpha(evt) {
    var keyCode = evt.which ? evt.which : evt.keyCode;
    alpha = (keyCode >= 'a'.charCodeAt() &&
      keyCode <= 'z'.charCodeAt()) ||
      (keyCode >= 'A'.charCodeAt() &&
      keyCode <= 'Z'.charCodeAt());
      
    return (alpha);
}

function isAlphaNumeric(evt) {
    var keyCode = evt.which ? evt.which : evt.keyCode;
    alpha = (keyCode >= 'a'.charCodeAt() &&
      keyCode <= 'z'.charCodeAt()) ||
      (keyCode >= 'A'.charCodeAt() &&
      keyCode <= 'Z'.charCodeAt()) ||
      (keyCode >= '0'.charCodeAt() &&
      keyCode <= '9'.charCodeAt());
    return (alpha);
}

function htmlEncode(input) {
    var t = document.createTextNode(input),
      e = document.createElement('div');
    e.appendChild(t);
    return e.innerHTML;
}


function htmlDecode(input) {
    var e = document.createElement('div');
    e.innerHTML = input;
    return e.childNodes[0].nodeValue;
}