
var sl = window.sl = {

	addEventHandler:function(target, eventType, handler){
		if (target.addEventListener)
		{
			target.addEventListener(eventType, handler, false);
		} 
		else if (target.attachEvent) 
		{
			target.attachEvent("on" + eventType, handler);
		} 
		else 
		{
			target["on" + eventType] = handler;
		}
	} ,


	stringBuilder:function(){
		this.arr = [];
		
		this.push = function(item){
			this.arr.push(item);
		};

		this.clear = function(){
			this.arr.length = 0;
		};
		
		this.toString = function(){
			return this.arr.join("");
		};
	}
};

sl.getElement = function(selector ,parentNode){
	var execId = function(selector){
		var selector = selector.replace(/#| /g ,"");
		var arr = selector.split(",") ,rets = [] ,temp;

		for (var i=0;i<arr.length ;i++ )
		{
			temp = document.getElementById(arr[i]);
			if (temp)
			{
				rets.push(temp);
			}
		}

		return (rets.length > 1)? rets : rets[0];
	};

	var execAttribute = function(selector ,parentNode){
		var parentNode = parentNode? parentNode : document;
		var objects = parentNode.getElementsByTagName("*");
		var arr = selector.split("=") ,rets = [] ,temp;

		for (var i=0;i<objects.length ;i++ )
		{
			if (objects[i].getAttribute(arr[0]) == arr[1])
			{
				rets.push(objects[i]);
			}
		}

		return (rets.length > 1)? rets : rets[0];
	};
	
	var execTagName = function(selector ,parentNode){
		var parentNode = parentNode? parentNode : document;
		return parentNode.getElementsByTagName(selector);
	};

	if (selector.indexOf("#") != -1)
	{
		return execId(selector ,parentNode);
	}
	else if (selector.indexOf("=") != -1)
	{
		return execAttribute(selector ,parentNode);	
	}
	else
	{
		return execTagName(selector ,parentNode);
	}
};

sl.ajax = function(url ,callback ,method ,data){
	var method = method ? method : "get";
	var data = data ? data : null;
	var url = (method == "get") ? (url +"?"+ data) : url;
	var http = window.ActiveXObject? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	
	var doGet = function(){
		http.open(method ,url ,false);
		http.setRequestHeader("If-Modified-Since" , "0" );
		http.send(null);
		callback(http.responseText);
	};
	
	var doPost = function(){
		http.open(method ,url ,false);
		http.setRequestHeader("content-length" ,data ?data.length : 0);
		http.setRequestHeader("Content-Type" ,"application/x-www-form-urlencoded");
		http.send(data);
		callback(http.responseText);
	};
	
	if (method == "post")
	{
		doPost();
	}
	else
	{
		doGet();
	}
	http = null;
};


sl.request = function(arg){
	var queryString = function(arg){
		var uri = window.location.search;
		var re = new RegExp(""+ arg +"\=([^\&\?]*)", "ig");
		return ((uri.match(re))?(uri.match(re)[0].substr(arg.length+1)):null);
	};

	var queryStrings = function(){
		var uri = window.location.search;
		var re = /\w*\=([^\&\?]*)/ig;
		var retval=[];
		while ((arr = re.exec(uri)) != null)
		retval.push(arr[0]);
		return retval;
	};

	if (arg)
	{
		return queryString(arg);
	}
	else
	{
		return queryStrings();
	}
};

sl.cookie = {
	setCookie:function(name, value, option){ 
		var str = name +"="+ escape(value); 
		if(option){ 
			if(option.expireHours){ 
				var d = new Date(); 
				d.setTime(d.getTime()+option.expireHours*3600*1000); 
				str += "; expires="+d.toGMTString(); 
			} 
			if(option.path) str += "; path="+option.path; 
			if(option.domain) str += "; domain="+option.domain; 
			if(option.secure) str += "; true"; 
		}
		document.cookie = str; 
	} ,

	getCookie:function(name){ 
		var arr = document.cookie.split("; "); 
		if(arr.length == 0) return ""; 
		for(var i=0; i <arr.length; i++)
		{ 
			tmp = arr[i].split("="); 
			if(tmp[0] == name)
			{
				return unescape(tmp[1]); 
			}
		} 
		return "";
	} ,

	delCookie:function(name){ 
		this.setCookie(name,"",{expireHours:-1});
	} ,

	getLength:function(){
		return document.cookie.split("; ").length;
	}
};


sl.getMousePos = function (e){
	var e = e?e : event;
	if (e.pageX || e.pageY)
	{
		return { x: e.pageX, y: e.pageY };
	}
	else
	{
		return { x: e.clientX + document.documentElement.scrollLeft - document.body.clientLeft,
				 y: e.clientY + document.documentElement.scrollTop  - document.body.clientTop 
		};
	}
};

sl.getElementPos = function(element){
	var offsetTop = element.offsetTop;
	var offsetLeft = element.offsetLeft;

	while(element = element.offsetParent) 
	{
		offsetTop += element.offsetTop;
		offsetLeft += element.offsetLeft;
	}
	
	return {x:offsetLeft ,y:offsetTop};
};