function $(el) { return document.getElementById(el); }

function preloadImages(){
	var arg = preloadImages.arguments;
	for(var i=0; i < arg.length; i++)
		(new Image).src = arg[i]
}

function getAbsoluteXY(el){
   var r = { x: el.offsetLeft, y: el.offsetTop };
   if (el.offsetParent)
   {
       var tmp = getAbsoluteXY(el.offsetParent);
       r.x += tmp.x;
       r.y += tmp.y;
   }
   return r;
}
function getRelativeXY(el){
   var r = { x: el.offsetLeft, y: el.offsetTop };
   if (el.offsetParent && el.offsetParent.style.position != "absolute" && el.offsetParent.style.position != "fixed")
   {
       var tmp = getRelativeXY(el.offsetParent);
       r.x += tmp.x;
       r.y += tmp.y;
   }
   return r;
}

function insertAfter(existingNode, newElement) {
	existingNode.parentNode.insertBefore(newElement, existingNode.nextSibling);
}
function insertBefore(existingNode, newElement) {
  existingNode.parentNode.insertBefore(newElement, existingNode);
}

var Run = function(path){
	var html_doc = document.getElementsByTagName('head')[0];
	var element;
			
	if(path.match(/(\.css$)/)){
		element = document.createElement('link');
		element.setAttribute('rel', 'stylesheet');
		element.setAttribute('type', 'text/css');
		element.setAttribute('href', path);
	}else if(path.match(/(\.js$)/)) {
		element = document.createElement('script');
		element.setAttribute('type', 'text/javascript');
		element.setAttribute('src', path);
	}else{
		alert("Run function path ERROR");
		return false;
	}
	html_doc.appendChild(element);
	return true;
}

function $X(xpath, resultType, contextNode, namespace){
	resultType  = resultType  || XPathResult.ANY_TYPE;
	namespace   = namespace   || null;	
	contextNode = contextNode || document;
	return document.evaluate(xpath, contextNode, namespace, resultType, null);
	
	/*
	$x("//p[@id='xsw']", XPathResult.ORDERED_NODE_SNAPSHOT_TYPE).snapshotItem(0).innerHTML
		XPathResult.ANY_TYPE = 0;
		XPathResult.NUMBER_TYPE = 1;
		XPathResult.STRING_TYPE = 2;
		XPathResult.BOOLEAN_TYPE = 3;
		XPathResult.UNORDERED_NODE_ITERATOR_TYPE = 4;
		XPathResult.ORDERED_NODE_ITERATOR_TYPE = 5;
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE = 6;
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE = 7;
		XPathResult.ANY_UNORDERED_NODE_TYPE = 8;
		XPathResult.FIRST_ORDERED_NODE_TYPE = 9;
	*/
}
function $x(xpath){
	var tmp  = [];
	var rez  = $X(xpath);
	var next = rez.iterateNext();
	
	while(next){
		tmp.push(next);
		next = rez.iterateNext();
	}
	if(tmp.length) return tmp; else return null;
}

// For IE only
/*@cc_on @*/
/*@if (@_win32)
	function $X(){ alert("Нужно включить библиотеку XPath"); throw "ie_xpath.js necessary" }
/*@end @*/



/* 
Array.prototype.toString = Object.prototype.toString = function() {
	var cont = [];
	var addslashes = function(s) {
		return s.split('\\').join('\\\\').split('"').join('\\"');
	}

	for (var k in this) {
		var v = this[k];
		var vs = '';	
	
		if (cont.length) cont[cont.length-1] += ",";

		if (v.constructor == String)  vs = '"' + addslashes(v) + '"';
								else  vs = v.toString();
			
		cont[cont.length] = k + ": " + vs; 
	}

	var s = cont = "    " + cont.join("\n").split("\n").join("\n    ");

	if (this.constructor == Object) s = "{\n"+cont+"\n}";
	if (this.constructor == Array)  s = "[\n"+cont+"\n]";

	return s;
}
*/

/*
function preloadImages() {
	var d=document; 
	if(d.images){ 
		if(!d.p) d.p=new Array();
		
		var i, j=d.p.length, a=preloadImages.arguments; 
		for(i=0; i<a.length; i++)
			if (a[i].indexOf("#")!=0)
				{ d.p[j]=new Image; d.p[j++].src=a[i];}
	}
}

var Run = {
  CSS : function(path) {
		    var html_doc = document.getElementsByTagName('head')[0];
			var css;
		    css = document.createElement('link');
		    css.setAttribute('rel', 'stylesheet');
		    css.setAttribute('type', 'text/css');
		    css.setAttribute('href', path);
		    html_doc.appendChild(css);

		    return false;
		},
   JS : function(path) {
		    var html_doc = document.getElementsByTagName('head')[0];
			var js;
		    js = document.createElement('script');
		    js.setAttribute('type', 'text/javascript');
		    js.setAttribute('src', path);
		    html_doc.appendChild(js);

		    return false;
		}
}
*/

function Hash()
{
	this.length = 0;
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}

	this.removeItem = function(in_key)
	{
		var tmp_value;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			var tmp_value = this.items[in_key];
			delete this.items[in_key];
		}

		return tmp_value;
	}

	this.getItem = function(in_key) {
		return this.items[in_key];
	}

	this.setItem = function(in_key, in_value)
	{
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
			}

			this.items[in_key] = in_value;
		}

		return in_value;
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
}

