﻿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;
}

try { document.execCommand("BackgroundImageCache",false,true); } catch (ex) {}
