222 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Core javascript helper functions
 | 
						|
 | 
						|
// basic browser identification & version
 | 
						|
var isOpera = (navigator.userAgent.indexOf("Opera")>=0) && parseFloat(navigator.appVersion);
 | 
						|
var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]);
 | 
						|
 | 
						|
// Cross-browser event handlers.
 | 
						|
function addEvent(obj, evType, fn) {
 | 
						|
    if (obj.addEventListener) {
 | 
						|
        obj.addEventListener(evType, fn, false);
 | 
						|
        return true;
 | 
						|
    } else if (obj.attachEvent) {
 | 
						|
        var r = obj.attachEvent("on" + evType, fn);
 | 
						|
        return r;
 | 
						|
    } else {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function removeEvent(obj, evType, fn) {
 | 
						|
    if (obj.removeEventListener) {
 | 
						|
        obj.removeEventListener(evType, fn, false);
 | 
						|
        return true;
 | 
						|
    } else if (obj.detachEvent) {
 | 
						|
        obj.detachEvent("on" + evType, fn);
 | 
						|
        return true;
 | 
						|
    } else {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function cancelEventPropagation(e) {
 | 
						|
    if (!e) e = window.event;
 | 
						|
    e.cancelBubble = true;
 | 
						|
    if (e.stopPropagation) e.stopPropagation();
 | 
						|
}
 | 
						|
 | 
						|
// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]);
 | 
						|
function quickElement() {
 | 
						|
    var obj = document.createElement(arguments[0]);
 | 
						|
    if (arguments[2]) {
 | 
						|
        var textNode = document.createTextNode(arguments[2]);
 | 
						|
        obj.appendChild(textNode);
 | 
						|
    }
 | 
						|
    var len = arguments.length;
 | 
						|
    for (var i = 3; i < len; i += 2) {
 | 
						|
        obj.setAttribute(arguments[i], arguments[i+1]);
 | 
						|
    }
 | 
						|
    arguments[1].appendChild(obj);
 | 
						|
    return obj;
 | 
						|
}
 | 
						|
 | 
						|
// "a" is reference to an object
 | 
						|
function removeChildren(a) {
 | 
						|
    while (a.hasChildNodes()) a.removeChild(a.lastChild);
 | 
						|
}
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// Cross-browser xmlhttp object
 | 
						|
// from http://jibbering.com/2002/4/httprequest.html
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
var xmlhttp;
 | 
						|
/*@cc_on @*/
 | 
						|
/*@if (@_jscript_version >= 5)
 | 
						|
    try {
 | 
						|
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 | 
						|
    } catch (e) {
 | 
						|
        try {
 | 
						|
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 | 
						|
        } catch (E) {
 | 
						|
            xmlhttp = false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
@else
 | 
						|
    xmlhttp = false;
 | 
						|
@end @*/
 | 
						|
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
 | 
						|
  xmlhttp = new XMLHttpRequest();
 | 
						|
}
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// Find-position functions by PPK
 | 
						|
// See http://www.quirksmode.org/js/findpos.html
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
function findPosX(obj) {
 | 
						|
    var curleft = 0;
 | 
						|
    if (obj.offsetParent) {
 | 
						|
        while (obj.offsetParent) {
 | 
						|
            curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft);
 | 
						|
            obj = obj.offsetParent;
 | 
						|
        }
 | 
						|
        // IE offsetParent does not include the top-level
 | 
						|
        if (isIE && obj.parentElement){
 | 
						|
            curleft += obj.offsetLeft - obj.scrollLeft;
 | 
						|
        }
 | 
						|
    } else if (obj.x) {
 | 
						|
        curleft += obj.x;
 | 
						|
    }
 | 
						|
    return curleft;
 | 
						|
}
 | 
						|
 | 
						|
function findPosY(obj) {
 | 
						|
    var curtop = 0;
 | 
						|
    if (obj.offsetParent) {
 | 
						|
        while (obj.offsetParent) {
 | 
						|
            curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop);
 | 
						|
            obj = obj.offsetParent;
 | 
						|
        }
 | 
						|
        // IE offsetParent does not include the top-level
 | 
						|
        if (isIE && obj.parentElement){
 | 
						|
            curtop += obj.offsetTop - obj.scrollTop;
 | 
						|
        }
 | 
						|
    } else if (obj.y) {
 | 
						|
        curtop += obj.y;
 | 
						|
    }
 | 
						|
    return curtop;
 | 
						|
}
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// Date object extensions
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
Date.prototype.getTwelveHours = function() {
 | 
						|
    hours = this.getHours();
 | 
						|
    if (hours == 0) {
 | 
						|
        return 12;
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        return hours <= 12 ? hours : hours-12
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getTwoDigitMonth = function() {
 | 
						|
    return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1);
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getTwoDigitDate = function() {
 | 
						|
    return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getTwoDigitTwelveHour = function() {
 | 
						|
    return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours();
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getTwoDigitHour = function() {
 | 
						|
    return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getTwoDigitMinute = function() {
 | 
						|
    return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getTwoDigitSecond = function() {
 | 
						|
    return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getHourMinute = function() {
 | 
						|
    return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.getHourMinuteSecond = function() {
 | 
						|
    return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
 | 
						|
}
 | 
						|
 | 
						|
Date.prototype.strftime = function(format) {
 | 
						|
    var fields = {
 | 
						|
        c: this.toString(),
 | 
						|
        d: this.getTwoDigitDate(),
 | 
						|
        H: this.getTwoDigitHour(),
 | 
						|
        I: this.getTwoDigitTwelveHour(),
 | 
						|
        m: this.getTwoDigitMonth(),
 | 
						|
        M: this.getTwoDigitMinute(),
 | 
						|
        p: (this.getHours() >= 12) ? 'PM' : 'AM',
 | 
						|
        S: this.getTwoDigitSecond(),
 | 
						|
        w: '0' + this.getDay(),
 | 
						|
        x: this.toLocaleDateString(),
 | 
						|
        X: this.toLocaleTimeString(),
 | 
						|
        y: ('' + this.getFullYear()).substr(2, 4),
 | 
						|
        Y: '' + this.getFullYear(),
 | 
						|
        '%' : '%'
 | 
						|
    };
 | 
						|
    var result = '', i = 0;
 | 
						|
    while (i < format.length) {
 | 
						|
        if (format.charAt(i) === '%') {
 | 
						|
            result = result + fields[format.charAt(i + 1)];
 | 
						|
            ++i;
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            result = result + format.charAt(i);
 | 
						|
        }
 | 
						|
        ++i;
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
}
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// String object extensions
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
String.prototype.pad_left = function(pad_length, pad_string) {
 | 
						|
    var new_string = this;
 | 
						|
    for (var i = 0; new_string.length < pad_length; i++) {
 | 
						|
        new_string = pad_string + new_string;
 | 
						|
    }
 | 
						|
    return new_string;
 | 
						|
}
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// Get the computed style for and element
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
function getStyle(oElm, strCssRule){
 | 
						|
    var strValue = "";
 | 
						|
    if(document.defaultView && document.defaultView.getComputedStyle){
 | 
						|
        strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
 | 
						|
    }
 | 
						|
    else if(oElm.currentStyle){
 | 
						|
        strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
 | 
						|
            return p1.toUpperCase();
 | 
						|
        });
 | 
						|
        strValue = oElm.currentStyle[strCssRule];
 | 
						|
    }
 | 
						|
    return strValue;
 | 
						|
}
 |