﻿function addNamespace(ns) {
	var nsParts = ns.split(".");
	var root = window;
	for(var i=0; i<nsParts.length; i++) {
		if(typeof root[nsParts[i]] == "undefined")
			root[nsParts[i]] = {};
		root = root[nsParts[i]];
	}
}
Object.addNamespace=function (ns) {
	if (!ns) return null;
	var levels=ns.split(".");
	var root=window;
	for (var i=0;i<levels.length;i++) {
		if (root[levels[i]]==undefined) root[levels[i]]={};
		root=root[levels[i]];
	}
	return root;
}
Object.extend(Event, {
  relatedElement:function (e,out) {
    return $(e.relatedTarget || (out ? e.toElement : e.fromElement));
  },
  findElementByCreteria:function(event,creteria) {
    var element=Event.element(event);
	while (element.parentNode && !creteria(element)) element=element.parentNode;
	return element;
  }
});

Object.extend(Element.Methods,{
	findByCreteria:function (el,creteria,tagName) {
		var matches=[];
		$A(el.getElementsByTagName(tagName || "*")).each(function (node) {
			if (creteria(node)) matches.push(el);
		});
		return matches;
	}
});

Element.addMethods();

function $E(data) {
    var el;
    if ('string'==typeof data) {
        el=document.createTextNode(data);
    } else {
        //create the element
        el=document.createElement(data.tag);
        delete(data.tag);

        //append the children
        if ('undefined'!=typeof data.children) {
            if ('string'==typeof data.children ||
                'undefined'==typeof data.children.length
            ) {
                //strings and single elements
                el.appendChild($E(data.children));
            } else {
                //arrays of elements
                for (var i=0, child=null; 'undefined'!=typeof (child=data.children[i]); i++) {
                    el.appendChild($E(child));
                }
            }
            delete(data.children);
        }

        //any other data is attributes
        for (attr in data) {
            el[attr]=data[attr];
        }
    }

    return el;
}
$dl=function (f){//(C)webreflection.blogspot.com
var a=$dl,b=navigator.userAgent,d=document,w=window,c="$dl",e="addEventListener",o="opera",r="readyState",
s="<scr".concat("ipt defer src='//:' on",r,"change='if(this.",r,"==\"complete\"){this.parentNode.removeChild(this);",c,".",c,"()}'></scr","ipt>");
a[c]=(function(o){return function(){a[c]=function(){};for(a=arguments.callee;!a.done;a.done=1)f(o?o():o)}})(a[c]);
if(d[e])d[e]("DOMContentLoaded",a[c],false);
if(/WebKit|Khtml/i.test(b)||(w[o]&&parseInt(w[o].version())<9))(function(){/loaded|complete/.test(d[r])?a[c]():setTimeout(arguments.callee,1)})();
else if(/MSIE/i.test(b))d.write(s);
};
try { document.execCommand("BackgroundImageCache",false,true); } catch (ex) {}