	function $_(id,obj){
		var el = document.getElementById(id);
		if(!el){return null;}
		$fix(el);
		if(obj){for(var o in obj){if(o.indexOf(".")==0){el.style[o.replace(/^./,"")] = obj[o];continue;}el[o] = obj[o];}}
		return el;
	}
	function $C(tag,obj,holder){
		var el = document.createElement(tag);
		if(obj){for(var o in obj){ if(o.indexOf(".")==0){el.style[o.replace(/^./,"")] = obj[o];continue;}el[o] = obj[o];}}
		if(holder){holder.appendChild(el);}
		return el;
	}
	document._getElementsByTagName = document.getElementsByTagName;
	document.getElementsByTagName = function(tag){
		var it = new Array();
		var elems = this._getElementsByTagName(tag);
		for(var e=0; e<elems.length; e++){it.push($fix(elems[e]));}
		return it;
	}
	function extend(destination, source){
		for (var property in source){destination[property] = source[property];}
		return destination;
	}
	function $T(tag){ return document.getElementsByTagName(tag); }
	function $_T(elem,tag){ return elem.getElementsByTagName(tag); }
	function $fix(elem){
		elem = extend(elem,{
			$T: function(tag){ return this.getElementsByTagName(tag); },
			applyAttrib: function(obj){for(var o in obj){if(o.indexOf(".")==0){this.style[o.replace(/^./,"")] = obj[o];continue;}this[o] = obj[o];}return this;},
			empty: function(){while(this.firstChild){this.removeChild(this.firstChild);}return this;}
		});
		return elem;
	}
	function $A(iterable) {
		if (!iterable) return [];
		if (iterable.toArray) return iterable.toArray();
		var length = iterable.length || 0, results = new Array(length);
		while (length--) results[length] = iterable[length];
		results = extend(results,{
			append:function(arr){for(var a=0; a<arr.length; a++){this.push(arr[a]);}return this;},
			each: function(fun){for(var i=0; i<this.length; i++){fun.call(this,this[i],i);}},
			find: function(elem){for(var i=0; i<this.length; i++){if(this[i]==elem){return i;}};return -1;},
			cleanEmptyValues: function(){for(var i=0; i<this.length; i++){if(this[i]==""){this.splice(i,1);}};return this;}
		});
		return results;
	}
	function $nodeValue(elem){if(elem.firstChild){return unescape(elem.firstChild.nodeValue).replace(/^ */,"");}else{return "";}}
	function $htmlEntitiesDecode(html){return html.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">");};
	function $htmlEntitiesEncode(html){return html.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\\/g,"");};
	function $toUrl(elem){var str = "";for(var a in elem){str += a+"="+elem[a].toString()+"&";}return str.replace(/&$/,"");}
	function isEmpty(elem){if(!elem || elem == ""){return true;}return false;}
	function print_r(obj,i){
		var s="";if(!i){i = "    ";}else{i += "    ";}
		if(obj.constructor == Array || obj.constructor == Object){
			for(var p in obj){
				if(!obj[p]){s += i+"["+p+"] => NULL\n";continue;};
				if(obj[p].constructor == Array || obj[p].constructor == Object){
					var t = (obj[p].constructor == Array) ? "Array" : "Object";
					s += i+"["+p+"] => "+t+"\n"+i+"(\n"+print_r(obj[p],i)+i+")\n";
				}else{s += i+"["+p+"] => "+obj[p]+"\n";}
			}
		}
		return s;
	}
	function json_encode(obj){
		if(JSON.stringify){return JSON.stringify(obj);}
	}
	function $round(num){
		if(num.toString().indexOf(".")>0){
			num = (parseFloat(num)*1000).toString().split(".")[0];
			if(parseInt(num[num.length-1])>4){if(num[0]!="-"){num = (parseInt(num)+10).toString();}else{num = (parseInt(num)-10).toString();}}
			num = (parseInt(num)/10).toString();
			num = num.split(".")[0];
			num = (parseInt(num)/100).toString();
			return num;
		}
		return num.toString();
	}
	function include_once(file){
		var ext = file.match(/(css|js)$/);if(!ext){return;}else{ext = ext[1];}
		var fileType = ext.replace(/js/i,"script").replace(/css/i,"link");
		var baseName = file.match(/[^\/]*$/);
		var included = false;
		$A($fix($T("HEAD")[0]).$T(fileType.toUpperCase())).each(function(elem){
			if((elem.src && elem.src.match(baseName)) || (elem.href && elem.href.match(baseName))){included=true;}
		});
		if(!included){eval("wodernLoad"+ext.toUpperCase()+"('"+file+"');");}
	}
	function wodernLoadCSS(file){var link = $C('link',{href:file+'?ts='+ts(),rel:'stylesheet',type:'text/css'},$T('head')[0]);}
	function wodernLoadJS(file){var script = $C('script',{src:file+'?ts='+ts(),type:'text/javascript'},$T('head')[0]);}
	function $execWhenExists(funcName,func){
		if(typeof window[funcName] != 'function'){
			var l = "launcher_"+funcName+Math.floor(Math.random()*10000);
			$T("BODY")[0][l] = window.setInterval(function(){if(typeof window[funcName] == 'function'){func();window.clearInterval($T("BODY")[0][l]);}},100);
		}else{func();}
	}
	function $execWhenTrue(e,func){
		if($T("BODY")[0][l]){return;}
		var a = eval(e);
		if(!a){
		var l = "launcher_"+e+Math.floor(Math.random()*10000);
		$T("BODY")[0][l] = window.setInterval(function(){var a = eval(e);if(a){func();window.clearInterval($T("BODY")[0][l]);}},100);
		}else{func();}
	}

	function cookieTake(cookieName){
		var value = document.cookie.match('(?:^|;)\\s*' + cookieName.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1') + '=([^;]*)');
		return cookieName =  value ? value[1] : value;
	}

	var TEMPLATES = new Object();
	function $downloadTemplate(templatePath,callBack){
		if(TEMPLATES[templatePath]){callBack(TEMPLATES[templatePath]);
		}else{
			ajaxPetition(templatePath,"",function(ajax){
				TEMPLATES[templatePath]=ajax.responseText;
				callBack(ajax.responseText);
			});
		}
	}
	var Class = function(properties){
		function type(el, type){ return (el instanceof type);}
		var klass = function(){return (arguments[0] !== null && this.init && type(this.init, Function)) ? this.init.apply(this, arguments) : this;};
		klass.prototype = properties;
		klass.constructor = Class;
		return klass;
	};
	extend(Function.prototype, {
		argumentNames: function(){
			var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].replace(/\s+/g, '').split(',');
			return names.length == 1 && !names[0] ? [] : names;
		},
		bind: function() {
			if(arguments.length < 2 && typeof(arguments[0]) == "undefined"){return this};
			var __method = this, args = $A(arguments), object = args.shift();
			return function(){return __method.apply(object, args.concat($A(arguments)));}
		}
	});
	function getOffsetLeft(el){var ol = 0;while(el.parentNode){ol += el.offsetLeft;el = el.parentNode;}return ol;}
	function getOffsetTop(el){var ot = 0;while(el.parentNode){ot += parseInt(el.offsetTop);/*alert(el.tagName+" "+el.id+" "+el.offsetTop);*/el = el.parentNode;}return ot;}
	

	function objetoAjax(){
		var xmlhttp=false;
		try{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
			   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(E){
				xmlhttp = false;
	  		}
		}

		if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
			xmlhttp = new XMLHttpRequest();
		}
		return xmlhttp;
	}
	function ajaxPetition(url,params,callback){
		if(!url){return;}if(!params){params="";}
		var method = "GET";if(url.search(/\.php$/)>=0){method = "POST"}

		var rnd = Math.floor(Math.random()*10000);
		var ajax = new objetoAjax();
		ajax.open(method,url+"?rnd="+rnd,true);
		ajax.onreadystatechange=function(){if(ajax.readyState==4){callback(ajax);return;}}
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send(params);
	}
	var VAR_apps = Object();
	var VAR_apps_dist = Object();
	function launchApp1(appName,holder,params){
		if($T("BODY")[0]["launcher_"+appName]){return;}
		VAR_apps_dist[appName] = holder;
		if(holder){
			var holders = [];
			$A($_("iCanvas_"+escape(holder.canvas)).$T("TD")).each(function(elem){if(elem.className == "iCanvasTD"){holders.push(elem);}});
			var holder = holders[holder.column];
		}
		else{holder = $_("iBackgroundApps");}
		if(eval('typeof ' + appName + '_init') != 'function'){
			wodernLoadCSS("resources/apps/"+appName+"/index.css");
			wodernLoadJS("resources/apps/"+appName+"/index.js");
			$T("BODY")[0]["launcher_"+appName] = window.setInterval(function(){
				if(typeof window[appName+'_init'] == 'function'){
					window[appName+'_init'](holder,params ? params : null);
					window.clearInterval($T("BODY")[0]["launcher_"+appName]);
				}
			},100);
		}else{
			window[appName+'_init'](holder,params ? params : null);
		}
	}

	function launchApp(appName,holder,params){
		VAR_apps_dist[appName] = holder;
		if(holder){
			var holders = [];
			$A($_("iCanvas_"+escape(holder.canvas)).$T("TD")).each(function(elem){if(elem.className == "iCanvasTD"){holders.push(elem);}});
			var holder = $C("DIV",{},holders[holder.column]);
		}
		else{holder = $_("iBackgroundApps");}
		if(!window[appName+'_init']){
			wodernLoadCSS("resources/apps/"+appName+"/index.css");
			wodernLoadJS("resources/apps/"+appName+"/index.js");
			$execWhenTrue("!isEmpty(window['"+appName+"_init'])",function(){window[appName+'_init'](holder,params ? params : null);});
		}else{
			window[appName+'_init'](holder,params ? params : null);
		}
	}


	var VAR_schedules = Object();
	var VAR_schedulerRun = false;
	function schedulerAdd(funcName,func){VAR_schedules[funcName] = func;}
	function schedulerExec(){if(!VAR_schedulerRun){return;}for(var a in VAR_schedules){VAR_schedules[a]();}}
	function schedulerRun(st){VAR_schedulerRun = st ? true : false;}
	window.scheduler = setInterval(schedulerExec,10000);

	function createThemeWindow(id){
		if($_("wod_"+id)){return $_("wod_"+id);}
		var w = $C("DIV",{className:"wodTheme",id:"wod_"+id});
		var d = $C("DIV",{className:"wodThemeHeaderLeft"},w);
		var d = $C("DIV",{className:"wodThemeHeaderRight"},d);
			$C("DIV",{className:"wodThemeHeaderCenter"},d);
		var d = $C("DIV",{className:"wodThemeContainerLeft"},w);
		var d = $C("DIV",{className:"wodThemeContainerRight"},d);
			$C("DIV",{className:"wodThemeContainerCenter",id:"wod_"+id+"_container",".position":"relative"},d);
		var d = $C("DIV",{className:"wodThemeFooterLeft"},w);
		var d = $C("DIV",{className:"wodThemeFooterRight"},d);
			$C("DIV",{className:"wodThemeFooterCenter"},d);
		return w;
	}
	var VAR_info_zIndex = 99;
	function createThemeInfo(id,style){
		if($_("info_"+id)){return $_("info_"+id);}
		if(!style){var style = Object();}
		style.id = "info_"+id;
		style.className = "wodInfo";
		style[".zIndex"] = VAR_info_zIndex;VAR_info_zIndex++;
		var w = $C("DIV",style,$_("iInfo"));
		var d = $C("DIV",{className:"wodInfoIndicator"},w);
		var d = $C("DIV",{className:"wodInfoHeaderLeft"},w);
		var d = $C("DIV",{className:"wodInfoHeaderRight"},d);
			$C("DIV",{className:"wodInfoHeaderCenter"},d);
		var d = $C("DIV",{className:"wodInfoContainerLeft"},w);
		var d = $C("DIV",{className:"wodInfoContainerRight"},d);
			$C("DIV",{className:"wodInfoContainerCenter",id:"info_"+id+"_container",".position":"relative"},d);
		var d = $C("DIV",{className:"wodInfoFooterLeft"},w);
		var d = $C("DIV",{className:"wodInfoFooterRight"},d);
			$C("DIV",{className:"wodInfoFooterCenter"},d);
		return w;
	}
	function removeThemeInfo(el,ev){
		while(el.parentNode && el.className!="wodInfo"){el = el.parentNode;}
		if(!el.parentNode){return;}
		var afterRemove = function(){};if(el.afterRemove){afterRemove=el.afterRemove;}
		el.parentNode.removeChild(el);
		if(ev){ev.stopPropagation();}
		afterRemove();
	}

	function infoPositioning(el,h){
		var top = getOffsetTop(el);
		var left = getOffsetLeft(el);

		if(window.innerWidth){
			var width = parseInt(window.innerWidth);
			var height = parseInt(window.innerHeight);
		}else{
			//puto internet explorer
			var width = document.documentElement.clientWidth;
			var height = document.documentElement.clientHeight;
		}

		var fixed = false;
		if((height-top)<h){top = height-h;fixed = true;}
		return {top:top,left:left,fixed:fixed};
	}

	/*==INI-EFFECTS==*/
	function eTweenStart(elem,interval){
		if(!interval){interval=50;}
		if(elem.eTween){window.clearInterval(elem.eTween);}
		elem.eTweenMode = "decr";
		elem.fvalue = 0.0;
		elem.eTween = window.setInterval(function(){
			if(elem.eTweenMode == "incr"){fvalue = (parseFloat(elem.fvalue)+0.11)+"".substring(0,3);}
			else{fvalue = (parseFloat(elem.fvalue)-0.11)+"".substring(0,3);}
			if(fvalue>(0.9)){fvalue=1;elem.eTweenMode = "decr";}
			if(fvalue<(0.1)){fvalue=0;elem.eTweenMode = "incr";}
			elem.style.opacity = elem.fvalue = fvalue;
		},interval);
	}
	function eTweenStop(elem){
		if(elem.eTween){window.clearInterval(elem.eTween);}
		fvalue = parseFloat(elem.fvalue);
		elem.eTween = window.setInterval(function(){
			fvalue = (parseFloat(elem.fvalue)+0.11)+"".substring(0,3);
			if(fvalue>(0.9)){
				fvalue=1;
				elem.style.opacity = elem.fvalue = fvalue;
				window.clearInterval(elem.eTween);
				elem.eTween = false;
			}
			elem.style.opacity = elem.fvalue = fvalue;
		},50);
	}
	function eFadein(elem,callback,interval){
		if(!interval){interval=50;}
		if(elem.eFade){window.clearInterval(elem.eFade);}
		var fvalue = elem.style.opacity ? elem.style.opacity : 0.0;
		elem.style.visibility = "visible";
		elem.style.opacity = elem.fvalue = fvalue;
		elem.eFade = window.setInterval(function(){
			fvalue = (parseFloat(elem.fvalue)+0.11)+"".substring(0,3);
			elem.style.opacity = elem.fvalue = fvalue;
			if(fvalue>(0.9)){
				elem.style.opacity = elem.fvalue = 1;
				window.clearInterval(elem.eFade);
				if(callback){callback(elem);}
			}
		},interval);
	}
	function eFadeout(elem,callback,interval){
		if(!interval){interval=50;}
		if(elem.eFade){window.clearInterval(elem.eFade);}
		var fvalue = elem.style.opacity ? elem.style.opacity : 1;
		elem.style.opacity = elem.fvalue = fvalue;
		elem.eFade = window.setInterval(function(){
			fvalue = (parseFloat(elem.fvalue)-0.11)+"".substring(0,3);
			elem.style.opacity = elem.fvalue = fvalue;
			if(fvalue<(0.1)){
				elem.style.visibility = "hidden";
				elem.style.opacity = elem.fvalue = 0;
				window.clearInterval(elem.eFade);
				if(callback){callback(elem);}
			}
		},interval);
	}
	/*==FIN-EFFECTS==*/
	
	function inArray(arr,elem) {
		var finded=false;
		$A(arr).each(function(e) {
			if (e==elem) {finded=true;return;}
		});
		return finded;
	};
	
	function monthName(m) {var months=["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"]; return months[m-1];}
	
	function sequentialArray(start,length) {
		var arr=new Array();
		for (var i=start; i<length; i++) {arr.push(i);}
		return arr;	
	}
	
	
	function strings_easyString(str){
		var Text = str.toLowerCase().replace('/[^0-9a-zA-Z_]*/', '');
		var cadena = "";
		var codigo = "";
		for (var j = 0; j < Text.length; j++)
		{
			var Char=Text.charCodeAt(j);
			switch(Char)
			{
				case 225:
				cadena+="a";
				break;
				case 233:
				cadena+="e";
				break;
				case 237:
				cadena+="i";
				break;
				case 243:
				cadena+="o";
				break;
				case 250:
				cadena+="u";
				break;
				case 193:
				cadena+="A";
				break;
				case 201:
				cadena+="E";
				break;
				case 205:
				cadena+="I";
				break;
				case 211:
				cadena+="O";
				break;
				case 218:
				cadena+="U";
				break;
				case 241:
				cadena+="n";
				break;
				case 209:
				cadena+="n";
				break;
				default:
				cadena+=Text.charAt(j);
				break;
				}
			codigo+="_"+Text.charCodeAt(j);
		}
	
		return cadena;
	}

	function ts() { return (new Date()).getTime(); }