document.write=function(value){
	//bit of a crazy function to be optimized latter

	var loc=null;
	var tag=null;

	var f=0;
	var l=0;
	var url="";

	var type=value.substr(0,4);

	switch(type){
		case "<scr":
			loc=DOM.getElementByTagName("head");

			f=value.indexOf('src="')+5;
			l=value.indexOf('">');
			url=value.substring(f,l);

			var mime_type="application/javascript";
			if(STD.browser_type()==STD.NON_STANDARD_BROWSER){
				mime_type="text/javascript";
			}

			tag=DOM.createElement("script");
			tag.setAttribute("type", mime_type);
			tag.setAttribute("src", url);

			break;
		case "<img":
			loc=DOM.getElementByTagName("body");

			f=value.indexOf('src="')+5;
			l=value.indexOf('" />');
			url=value.substring(f,l);

			tag=DOM.createElement("img");
			tag.setAttribute("src", url);
			break;
	}

	loc.appendChild(tag);
}

//DOM Class
DOM=function(){}

DOM.get_href_anchor=function(element){
	var href=element.getAttribute("href");

	if(href!=null){
		var start_index=href.indexOf("#");

		if(start_index>=0){
			var hash=href.substring(start_index+1);

			return hash;
		}
	}

	return null;
}
DOM.xpath=function(expression,doc,node){
	if(doc==null){
		doc=document;
	}

	if(node==null){
		node=doc.documentElement;
	}

	var nodes=new Array();
	var result;

	if(window.ActiveXObject){
		doc.setProperty("SelectionLanguage","XPath");
		result=node.selectNodes(expression);

		for(var i=0;i<result.length;i++){
			nodes.push(result[i]);
		}
	}else{
		result=doc.evaluate(expression, node, null, XPathResult.ANY_TYPE, null);

		var n=result.iterateNext();
		while(n){
			nodes.push(n);
			n=result.iterateNext();
		}
	}

	return nodes;
}
DOM.getElementById=function(id){
	return document.getElementById(id);
}
DOM.getElementByTagName=function(tag_name,element){
	var list=DOM.getElementsByTagName(tag_name,element);

	if(list!=null){
		return list[0];
	}else{
		return null;
	}
}
DOM.getElementsByTagName=function(tag_name,element){
	if(element==null){
		element=document;
	}

	var list=element.getElementsByTagName(tag_name);
	return list;
}
DOM.getElementByName=function(name){
	var list=DOM.getElementsByName(name);

	if(list!=null){
		return list[0];
	}else{
		return null;
	}
}
DOM.getElementsByName=function(name){
	return document.getElementsByName(name);
}
DOM.getElementByClassName=function(class_name,element){
	var list=DOM.getElementsByClassName(class_name,element);

	if(list!=null){
		return list[0];
	}else{
		return null;
	}
}
DOM.getElementsByClassName=function(class_name,element){
	if(element==null){
		element=document;
	}

	var list=null;

	if(element.getElementsByClassName){
		list=element.getElementsByClassName(class_name);
	}else{
		//walk tree
		list=new Array();

		var stack=new Array();
		var i=0;
		var node=null;

		stack.push(element);
		while(node!=null || stack.length>0){
			if(node!=null && node.childNodes.length>0){
				for(i=0;i<node.childNodes.length;i++){
					if(node.childNodes[i].nodeType==STD.element){
						stack.push(node.childNodes[i]);

						if(DOM.hasClass(node.childNodes[i],class_name)==true){
							list.push(node.childNodes[i]);
						}
					}
				}
			}

			node=stack.shift();
		}
	}

	return list;
}
DOM.hasClass=function(element,class_name){
	var rs="(^| )"+class_name+"( |$)";
	var re=new RegExp(rs);

	return re.test(element.className);
}
DOM.setClass=function(element,classes){
	element.className=classes;
}
DOM.addClass=function(element,class_name){
	if(DOM.hasClass(element,class_name)==false){
		if(element.className!=null && element.className!=""){
			class_name=" "+class_name;
		}

		element.className+=class_name;
	}
}
DOM.removeClass=function(element,class_name){
	if(DOM.hasClass(element,class_name)==true){
		var rs="(^| )"+class_name+"( |$)";
		var re=new RegExp(rs);

		DOM.setClass(element,element.className.replace(re,""));
	}
}
DOM.createElement=function(type,value){
	var element=document.createElement(type);

	if(value!=null){
		var text=document.createTextNode(value);
		element.appendChild(text);
	}

	return element;
}
DOM.createTextNode=function(value){
	return document.createTextNode(value);
}
DOM.removeChildren=function(node){
	while(node.hasChildNodes()){
		node.removeChild(node.firstChild);
	}
}
DOM.actualTop=function(node){
	var top=node.offsetTop;

	while(node=node.offsetParent){
		top+=node.offsetTop;
	}

	return top;
}
DOM.actualLeft=function(node){
	var left=node.offsetLeft;

	while(node=node.offsetParent){
		left+=node.offsetLeft;
	}

	return left;
}
