if(!DAYLIFE){
	var DAYLIFE = {}
}

DAYLIFE.Pajax = function(){
	//pseudo ajax
	var version = '1.0';
	var head = document.getElementsByTagName("head")[0];
	var response = null;
	var request_count = 0;
	
	return{
		accept: function(obj){
			response = obj;
		},
	
		load: function(src,callback){
			var script = document.createElement("script");
			script.type = "text/javascript";
			script.charset = "utf-8";
			var separator = (src.indexOf("?") == -1) ? "?" : "&";
			if(callback){
				src += separator + "__callback=DAYLIFE.Pajax.accept";
			}
			script.setAttribute("src",src);
			var request_id = request_count;
			var cleanUp = function(){
				script.onload=null;
				head.removeChild(script);
				delete script;
				if(response){
					if(callback instanceof Function){
						callback(response,request_id);
					}
					response = null;
				}
			}
			var checkReadyState = function(){
				var check_on=(script?script:window.event).target?(script?script:window.event).target:(script?script:window.event).srcElement;
				if(script.readyState=="loaded"||script.readyState=="complete"){
					script.onreadystatechange=null;
					cleanUp();
				}
			}
			// ------- SET UP TO ADD SCRIPT ------------ //
			// this whole system won't work in Safari until I can find
			// a reliable way to check script loaded...
			// i should probably just do a timer
			if(navigator.product=="Gecko"){
				script.onload=cleanUp;
			}else{
				script.onreadystatechange=checkReadyState;
			}
			// ------- ADD SCRIPT ------------ //
			head.appendChild(script);
			request_count++;
			return request_id;
		}
	}	
}();

DAYLIFE.Daypi = function(){
	var version = '1.0';
	var proxy_base = "http://cache.daylife.com/proxy/jsonrest/publicapi/4.0/";
	var DL = DAYLIFE;
	var pajax = DL.Pajax;
	
	return {
		request: function(method,params,callback){
			var val, prxsrc, searchstr = '', search = [];
			for (val in params) {
				if (params.hasOwnProperty(val)) {
					search.push(val + '=' + encodeURIComponent(params[val]));
				}
			}
			prxsrc = proxy_base + method + "?" + search.join('&');
			return pajax.load(prxsrc,callback);
		}
	}
}();

DAYLIFE.Events = function(){
	var version = '1.0';
	
	return {
		getTarget: function(e){
			var targ;
			if(!e){
				var e = window.event;
			}
			if(e.target) {
				targ = e.target;
			} else if (e.srcElement) {
				targ = e.srcElement;
			}
			if(targ.nodeType == 3){ // defeat Safari bug
				targ = targ.parentNode;
			}
			return targ;
		}
	}
}();

DAYLIFE.Dom = function(){
	var version = '1.0';
	
	return {
		emptyElement: function(elem){
			while(elem.childNodes.length>0){
				elem.removeChild(elem.childNodes[0]);
			}
		},

		makeElement: function(){
			var elem,text,children,type,name,props;
			var args = arguments;
			var tagname = args[0];
			if(args[1]){
				if (typeof args[1]=='string'){
					text = args[1];
				}else if(typeof args[1]=='object' && args[1].push){
				  children = args[1];
				}else{
					props = args[1]
				}
			}	
			if(args[2]){
				if(typeof args[2]=='string'){
					text = args[2];
				}else if(typeof args[1]=='object' && args[2].push){
				  children = args[2];
				}
			}
			// annoying... 
			if(document.all && tagname.toLowerCase() == 'input'){
				type = (props && props["type"]) ? props["type"] : 'text';
				name = (props && props["name"]) ? props["name"] : '';
				elem = document.createElement('<input type="'+type+'" name="'+name+'"/>');
			}else{
				elem = document.createElement(tagname);
			}
			if(props){
				for(var propname in props){
				  if (props.hasOwnProperty(propname)) {
						elem[propname] = props[propname];
					}
				}
			}
			if(children){
				for(var i=0;i<children.length;i++){
					if(children[i]){
						elem.appendChild(children[i]);
					}
				}
			}
			if(text){
				elem.appendChild(document.createTextNode(text));
			}
			return elem;
		}
	}
}();


