function isUndefined(o) { return(typeof(o)=='undefined'); }
function isObject(o) { return(typeof(o)=='object'); }
function isArray(o) { return(isObject(o)&&o.constructor==Array); }
function isFunction(o) { return(typeof(o)=='function'); }
function isInt(s) { return((''+parseInt(s))==s); }
function isFloat(s) { return((''+parseFloat(s))==s); }
function isNumber(s) { return((''+Number(s))==s); }

function LZ(x) { return (x<0||x>=10?'':'0') + x; }

function safeAddEventListener(o, e, f, u) { if(o.addEventListener) { o.addEventListener(e, f, u); return true; } else if(o.attachEvent) { return o.attachEvent('on'+e, f); } }
function AEL(o, e, f, u) { if(o.addEventListener) { o.addEventListener(e, f, u); return true; } else if(o.attachEvent) { return o.attachEvent('on'+e, f); } }
function safeRemoveEventListener(o, e, f, u) { if(o.removeEventListener) { o.removeEventListener(e, f, u); return true; } else if(o.detachEvent) { return o.detachEvent('on'+e, f); } }
function safeStopPropagation(e) { if(isUndefined(e)) { e = window.event; } e.cancelBubble = true; if(e.stopPropagation) { e.stopPropagation(); } }
function safeEventTarget(e) { if(isUndefined(e)) { e = window.event; } if(e.target) { return(e.target); } else if(e.srcElement) { return(e.srcElement); } return false; }

function getArg(args, i, ar) { return ((args.length>i)?args[i]:(ar?ar:null)); }
function getElement(el) { if(document.getElementById) { this.obj = document.getElementById(el); this.style = document.getElementById(el).style; } else if(document.all) { this.obj = document.all[el]; this.style = document.all[el].style; } else if(document.layers) { this.obj = this.style = document.layers[el]; } else { this.obj = this.style = null; } }
function getElementOffsetLeft(el) { var ol=el.offsetLeft; while((el=el.offsetParent)!=null){ ol += el.offsetLeft; } return ol; }
function getElementOffsetTop(el) { var ot=el.offsetTop; while((el=el.offsetParent)!=null){ ot += el.offsetTop; } return ot; }
function getInnerWidth() { return ((window.innerWidth)?window.innerWidth:((document.documentElement&&document.documentElement.clientWidth)?document.documentElement.clientWidth:((document.body)?document.body.clientWidth:0))); }
function getInnerHeight() { return ((window.innerHeight)?window.innerHeight:((document.documentElement&&document.documentElement.clientHeight)?document.documentElement.clientHeight:((document.body)?document.body.clientHeight:0))); }
function getPageXOffset() { if(self.pageXOffset) { return self.pageXOffset; }else if(document.documentElement && document.documentElement.scrollLeft) { return document.documentElement.scrollLeft; }else if(document.body) { return document.body.scrollLeft; } return 0; }
function getPageYOffset() { if(self.pageYOffset) { return self.pageYOffset; }else if(document.documentElement && document.documentElement.scrollTop) { return document.documentElement.scrollTop; } else if(document.body) { return document.body.scrollTop; } return 0; }

function setElementCss(el, cl, st) { if(cl){ el.className = cl; } if(st){ (!isUndefined(el.style.cssText))?el.style.cssText = st:el.setAttribute('style', st); } }

function popWindow() { var a = arguments; var w = window.open(getArg(a, 0, 'about:blank'), getArg(a, 1), getArg(a, 2, 'menubar=no'), getArg(a, 3, false)); w.focus(); w.opener = window; return false; }
if(document.getElementsByTagName) { safeAddEventListener(window, 'load', function() { var as = document.getElementsByTagName('a'); for(var i=0;i<as.length;i++) { if(as[i].getAttribute('popup')) { as[i].onclick = function(){ return popWindow(this.href, '', this.getAttribute('popup')); } } } }, false); }

if(![].push) { Array.prototype.push = function() { for(var i=0;i<arguments.length;i++) { this[this.length]=arguments[i]; } return this.length; } }
if(!Date.getFullYear) { Date.prototype.getFullYear = function() { var yr = this.getYear(); if(yr < 1000){ yr += 1900; } return yr; } }