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;
							 | 
						||
| 
								 | 
							
								}
							 |