var Utils;


Utils = {};
Utils.NAME = "Utils";
Utils.VERSION = 2.5;
Utils.LAST_UPDATE = "2010-05-13";
Utils.globalNamespace = this;

Utils.cookies = {};
Utils.cookies.HOUR = 60*60*1000;
Utils.cookies.DAY = 24*60*60*1000;

Utils.cookies.set = function(name, value, expires){
	var date = new Date();
	if(!expires) expires = "";
	var increment = 0;
	
	if(typeof(expires)=="number"){
		date.setTime(expires);
		expires = date.toGMTString();
	}else{	
		var fact = 1;
		if(expires.indexOf(":") != -1){
			fact = parseInt(expires.substring(expires.indexOf(":")+1));
			expires = expires.substring(0, expires.indexOf("s"));
		}
							
		switch(expires){
			case "day":
				increment = fact * Utils.cookies.DAY;
				break;
			case "hour":
				increment = fact * Utils.cookies.HOUR;
				break;
			case "week": 
				increment = fact * 7 * Utils.cookies.DAY;
				break;
			case "month": 
				increment = fact * 30 * Utils.cookies.DAY;
				break;
			case "year":
				increment = fact * 365 * Utils.cookies.DAY;
				break;
			case "temp":
				expires = "";
				break;
			case "":
			case "never":
				increment = 10000 * Utils.cookies.DAY;
				break;
		}
	}
	
	date.setTime(date.getTime() + increment);
	expires = date.toGMTString();

	if(expires!="") expires = "expires=" + expires + ";";
	document.cookie = name + "=" + value + ";" + expires;	
	return true;
}

Utils.cookies.get = function(name){
	var cookies = document.cookie;
	if(cookies.indexOf(name) == -1) return false;
	
	var sub1 = cookies.substring(cookies.indexOf(name));
	var start = sub1.indexOf("=") + 1;
	var end;
	sub1.indexOf(";") != -1 ? end = sub1.indexOf(";") : end = sub1.length;
	var val = sub1.substring(start,end);
				
	if(val.length) return val;
	return false;
}

Utils.cookies.cancel = function(name){
	var date = new Date();
	date.setTime(date.getTime() - Utils.cookies.HOUR);
	
	if(document.cookie.indexOf(name) == -1) return false;
	
	return Utils.cookie.set(name, "deleted", date.getTime());
}

Utils.cookies.getAll = function(){
	var s_cookies = document.cookie.split(/; /g);
	var cookies = new Array();
	
	for(var i=0; i<s_cookies.length; i++)
		cookies.push({
			"name" : cookies[i].substring(0, cookies[i].indexOf("=")),
			"value" : cookies[i].substring(cookies[i].indexOf("=") + 1)
		});

	return cookies;	
}

Utils.cookies.isSupported = function(){
	var supported = false
	Utils.cookie.set("CookieTest","success");
	
	if(document.cookie.indexOf("CookieTest=success") != -1){
		supported = true;
		Utils.cookie.cancel("CookieTest");
	}
	
	return supported;	
}

Utils.ajax = {};
Utils.ajax._requestHandler = function(method, file, params){
	var xr = getXMLHttpRequest();
	var query = "";
	var settings = new Array();			
	
	var sep = "";
	for(x in params){
		if(x.indexOf("_") == 0) settings[x] = params[x];
		else{
			query += sep + x + "=" + encodeURIComponent(params[x]);
			if(sep == "") sep = "&";
		}
	}
				
	var q1, q2;
	
	if(method=="POST"){
		q1 = file;
		q2 = query;
	}else{
		q1 = file + "?" + query;
		q2 = null;
	}

	if(xr){
		try{
			xr.open(method, q1,	settings["_async"]);		
			if(method=="POST") xr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");						
			if(settings["_async"]) xr.onreadystatechange = stateChange;
			xr.send(q2);
			if(!settings["_async"]){	
				var ret = checkedReturn(); 
				
				if(settings["_callback"]) settings["_callback"](ret);
				
				return checkedReturn();							
			}
		}catch(e){}
	}else return "error";

	
	function getXMLHttpRequest(){	
		var xmlHttp;
		
		try{
			xmlHttp = new XMLHttpRequest();
		}catch(e){
			var XMLHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
											'MSXML2.XMLHTTP.5.0',
											'MSXML2.XMLHTTP.4.0',
											'MSXML2.XMLHTTP.3.0',
											'MSXML2.XMLHTTP',
											'Microsoft.XMLHTTP');
			for(var i=0; i<XMLHttpVersions.length && !xmlHttp; i++){
				try{
					xmlHttp = new ActiveXObject(XMLHttpVersions[i]);
				}catch(e){}	
			}
		}
		
		if(!xmlHttp) throw new Error('Error creating xmlHttp object');
		else return xmlHttp;
	};				
		
	function stateChange(){
		if(xr.readyState == 4){
			if(xr.status == 200){
				try{
					var ret = checkedReturn();
					if(settings["_callback"]) settings["_callback"](ret);
				}catch(e){}	
			}
		}
	}
	
	function checkedReturn(){
		if(settings["_type"]) return (settings["_type"].toLowerCase() == "xml" ? xr.responseXML : xr.responseText);
		
		var type = xr.getResponseHeader("Content-Type");
		
		if(type=="text/xml") return xr.responseXML;
							
		if(settings["_split"]){
			var sr = xr.responseText; 
			return sr.split(settings["_split"]);	
		}
		
		return xr.responseText;					
	}
}

Utils.ajax.post = function(page, params){ return Utils.ajax._requestHandler("POST", page, params); };
Utils.ajax.get = function(page, params){ return Utils.ajax._requestHandler("GET", page, params); };	

Utils.createElement = function(type, attributes, parent){
	if(!arguments.length) throw new Error("No type defined");

	var newElement = document.createElement(type);

	for(x in attributes){
		var attribute = attributes[x];
		
		if(x.toString() == "style" && typeof attribute == "object"){
			for(y in attribute)
				newElement.style[y] = attribute[y];
		}else 
			newElement.setAttribute(x, attribute);
	}
					
	if(parent != undefined)
		parent.appendChild(newElement);
		
	return newElement;
}

function $(id){
	return document.getElementById(id);
}
/*
Utils.callAsync = function(funct){
	setTimeout(funct(), 1);
}*/
