function RegisterNamespaces(){for(var i=0;i<arguments.length;i++){var p=arguments[i].split("."),w=window;for(var j=0;j<p.length;j++){if(!w[p[j]])w[p[j]]=new Object();w=w[p[j]];}}}

RegisterNamespaces("Inpl.Debug");
Inpl.Debug=new function(){this.Type={};this.log=function(){}}

RegisterNamespaces("Inpl.Browser");
Inpl.Browser = new function()
{
	var objBrowser=this;
	var n=navigator;
	var ua=n.userAgent.toLowerCase();

	this.isDom=(document.getElementById?true:false);

	this.isOpera=0;
	this.isIe=0;
	this.isGecko=0;
	this.isSafari=0;
	this.isNetscape=0;
	this.isKonqueror=0;

	this.isWin=0;
	this.isMac=0;
	this.isUnix=0;
	this.isLinux=0;
	try{
		if(window.opera){if((new RegExp("opera ([0-9]{1,}[\.0-9]{0,})")).exec(ua)!=null){rv=parseFloat(RegExp.$1);if(rv)objBrowser.isOpera=rv;}}
		else if(!objBrowser.isOpera&&n.appName=='Microsoft Internet Explorer'){if((new RegExp("msie ([0-9]{1,}[\.0-9]{0,})")).exec(ua)!=null){rv=parseFloat(RegExp.$1);if(rv)objBrowser.isIe=rv;}}
		else if(ua.indexOf("safari")!=-1){if((new RegExp("safari/([0-9]{1,}[\.0-9]{0,})")).exec(ua)!=null){rv=parseFloat(RegExp.$1);if(rv)objBrowser.isSafari=rv;}}
		else if(ua.indexOf("konqueror")!=-1){if((new RegExp("konqueror/([0-9]{1,}[\.0-9]{0,})")).exec(ua)!=null){rv=parseFloat(RegExp.$1);if(rv)objBrowser.isKonqueror=rv;}}
		else if(ua.indexOf("gecko")!=-1){if((new RegExp("rv:([0-9]+[\.0-9]*)[\.ab0-9]*\\) gecko")).exec(ua)!=null){rv=parseFloat(RegExp.$1);if(rv)objBrowser.isGecko=rv;}}
		else if(ua.indexOf("konqueror")!=-1){this.isKonqueror=1}

		objBrowser.isWin=(ua.indexOf('win')!=-1);
		objBrowser.isMac=(ua.indexOf('mac')!=-1);
		objBrowser.isUnix=(ua.indexOf('unix')!= -1||ua.indexOf('sunos')!=-1||ua.indexOf('bsd')!=-1||ua.indexOf('x11')!=-1);
		objBrowser.isLinux=(ua.indexOf('linux')!=-1);
	}catch(e){}
}

Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};

function isAlien(a){return isObject(a)&&typeof a.constructor!='function'}
function isArray(a){return isObject(a)&&a.constructor==Array}
function isBoolean(a){return typeof a=='boolean'}
function isEmpty(o){var i,v;if(isObject(o))for(i in o){v=o[i];if(isUndefined(v)&&isFunction(v)){return false}}return true}
function isFunction(a){return typeof a=='function'}
function isNull(a){return typeof a=='object'&&!a}
function isNumber(a){return typeof a=='number'&&isFinite(a)}
function isObject(a){return (a&&typeof a=='object')||isFunction(a)}
function isString(a){return typeof a=='string'}
function isUndefined(a){return typeof a=='undefined'} 

if (!isFunction(Function.apply)) {
    Function.method('apply', function (o, a) {
        var r, x = '____apply';
        if (!isObject(o)) {
            o = {};
        }
        o[x] = this;
        switch ((a && a.length) || 0) {
        case 0:
            r = o[x]();
            break;
        case 1:
            r = o[x](a[0]);
            break;
        case 2:
            r = o[x](a[0], a[1]);
            break;
        case 3:
            r = o[x](a[0], a[1], a[2]);
            break;
        case 4:
            r = o[x](a[0], a[1], a[2], a[3]);
            break;
        case 5:
            r = o[x](a[0], a[1], a[2], a[3], a[4]);
            break;
        case 6:
            r = o[x](a[0], a[1], a[2], a[3], a[4], a[5]);
            break;
        default:
            alert('Too many arguments to apply.');
        }
        delete o[x];
        return r;
    });
} 

if(!isFunction(Array.prototype.pop)){Array.method('pop',function(){return this.splice(this.length-1,1)[0]})}
if(!isFunction(Array.prototype.push)){Array.method('push',function(){this.splice.apply(this,[this.length,0].concat(Array.prototype.slice.apply(arguments)));return this.length})}
if(!isFunction(Array.prototype.shift)){Array.method('shift',function(){return this.splice(0,1)[0]})}
if(!isFunction(Array.prototype.splice)){Array.method('splice',function(s,d){var max=Math.max,min=Math.min,a=[],e,i=max(arguments.length-2,0),k=0,l=this.length,n,v,x;s=s||0;if(s<0){s += l}s=max(min(s,l),0);d=max(min(isNumber(d)?d:l,l-s),0);v=i-d;n=l+v;while(k<d){e=this[s+k];if(!isUndefined(e)){a[k]=e}k+=1}x=l-s-d;if(v<0){k=s+i;while(x){this[k]=this[k-v];k+=1;x-=1}this.length=n;}else if(v>0){k=1;while(x){this[n-k]=this[l-k];k+=1;x-=1;}}for(k=0;k<i;++k){this[s+k]=arguments[k+2];}return a})}
if(!isFunction(Array.prototype.unshift)){Array.method('unshift',function(){this.splice.apply(this,[0,0].concat(Array.prototype.slice.apply(arguments)));return this.length})} 