	
	function launchDefaultApps () {
		launchApp("location_news",{canvas:"Mi localidad",column:0});
		launchApp("userLottoApp",{canvas:"Mi localidad",column:2},{idApp:'location_userLotto'});
		launchApp("location_popularAlbums",{canvas:"Mi localidad",column:2});
		launchApp("location_usersResume",{canvas:"Mi localidad",column:1});
		launchApp("location_weatherInfo",{canvas:"Mi localidad",column:1});
		launchApp("location_cinemaBoard",{canvas:"Mi localidad",column:1});
		launchApp("location_companiesResume",{canvas:"Mi localidad",column:2});
		launchApp("location_phones",{canvas:"Mi localidad",column:2});
	}
	
	function getLocation(){
		if (typeof(VAR_locationData)!='undefined'){
			if(!isEmpty(VAR_locationData['VAR_locationData'])){return VAR_locationData['VAR_locationData'];}
		}
		var m = utf8.decode(unescape(window.location)).toString().match(/location=([a-zA-Z0-9\.]*)$/);
		if(!m){var m = utf8.decode(unescape(window.location)).toString().match(/todosenred\.es\/([^\.]*\.[a-z]*)[\/]{0,1}/);}
		return m = m ? m[1] : null;
	}

	function applyTheme(t){
		var h = $fix($T("HEAD")[0]);
		$A(h.$T("LINK")).each(function(elem){
			if(!elem.href.match(/\/resources\/css\/themeRestarter\.css$/) && !elem.href.match(/\/resources\/themes\/[a-zA-Z0-9_]*\/[a-zA-Z0-9_]*\.css/)){return;}
			elem.parentNode.removeChild(elem);
		});
		//wodernLoadCSS("resources/css/themeRestarter.css");
		wodernLoadCSS("resources/themes/"+t+"/index.css");
	}

	/* FOUND in http://www.webtoolkit.info/javascript-utf8.html */
	var utf8 = {
		encode : function(string){
			string = string.replace(/\r\n/g,"\n");var utftext = "";
			for(var n = 0; n < string.length; n++){
				var c = string.charCodeAt(n);
				if(c < 128){utftext += String.fromCharCode(c);continue;}
				if((c > 127) && (c < 2048)){utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);continue;}
				utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);
			}
			return utftext;
		},
		decode : function (utftext) {
			var string = "";var i = 0;var c = c1 = c2 = 0;
			while( i < utftext.length ){
				c = utftext.charCodeAt(i);
				if(c < 128){string += String.fromCharCode(c);i++;continue;}
				if((c > 191) && (c < 224)){c2 = utftext.charCodeAt(i+1);string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));i += 2;continue;}
				c2 = utftext.charCodeAt(i+1);c3 = utftext.charCodeAt(i+2);string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));i += 3;
			}
			return string;
		}
	}

/*=INI-Funciones de Usuario=*/
	function userShowLogin(){
		$downloadTemplate("resources/templates/login.html",function(templ){
			templ = templ.replace(/%location%/g,getLocation()+"");
			var w = $_("userLoginHolder"); 
			var loginForm=$_("loginFormContainer"); 
			//if (loginForm) {return;}
			if (!$_("loginFormContainer")) $C("DIV",{id:"loginFormContainer",className:"loginContainer",innerHTML:templ},w);
			else $_("loginFormContainer").style.display="block";
			w.onclick = "";
			
			// Focus en el primer input...
			var userInput = $fix(w).$T('INPUT')[0];
			userInput.focus();
		});
	}
	
	function userDropLogin () {
		var w = $_("loginFormContainer").style.display="none";
	}
	
	function markFinishTask(type){
		
		flag=false;
		$A(VAR_loggedUserData.userTasks).each(function(elem){
			if (elem.name!=type) return;
			if (!elem.finish) flag=true;
		});
		
		if (!flag) return;
		
		ajaxPetition('resources/PHP/API_user.php', 'command=markFinishTak&type='+type, function(ajax){
			var r = eval("("+ajax.responseText+")");
			if (r.errorCode>0){alert(r.errorDescription); return;}			
			
			for (var i in VAR_loggedUserData.userTasks){
				if (VAR_loggedUserData.userTasks[i].name==type){
					VAR_loggedUserData.userTasks[i].finish=true;	
				}	
			}
			showTasks(true);
		});
	}
	function appearTaskHolder(){
		if (parseInt($_('holderTasks').style.top)=='-20'){ $_('imgBtnTask').src='resources/images/fondo_tasks_btn.png';clearInterval(intervalTask);return;}
		if (parseInt($_('holderTasks').style.top)>'-20'){$_('holderTasks').style.top=(parseInt($_('holderTasks').style.top)-1)+'px';return;}
		$_('holderTasks').style.top=(parseInt($_('holderTasks').style.top)+contEffect)+'px';
		if (contEffect<30)contEffect++;
	}
	function desappearTaskHolder(){
		if (parseInt($_('holderTasks').style.top)=='-146'){ $_('imgBtnTask').src='resources/images/fondo_tasks_btn2.png';clearInterval(intervalTask);return;}
		if (parseInt($_('holderTasks').style.top)<'-146'){  $_('holderTasks').style.top=(parseInt($_('holderTasks').style.top)+1)+'px'; return;}
		$_('holderTasks').style.top=(parseInt($_('holderTasks').style.top)-contEffect)+'px';
		if (contEffect<30)contEffect++;
	}

	function showInfoPriority(elem, h){
		contEffect=20;
		$_('holderTasks').style.top='-146px';
		/*APARECE EL RECUADRO CON LA INFORMACIÓN*/		
		var timeInterval=35;
		if(typeof(intervalTask)!='undefined') clearInterval(intervalTask);
		intervalTask=setInterval( 'appearTaskHolder()',timeInterval);
		
		$downloadTemplate("resources/templates/help/"+elem.template,function(templ){
			$C('DIV',{className:'appContent',innerHTML:templ}, h);
		
			var btn = $C('DIV', {className:'themeButton cursor floatRight', '.marginRight':'35px', innerHTML:'Ok!'}, h);
			btn.onclick=function(){
				markFinishTask(elem.name);
			}
		});
	}
	function showTasks(force){
		if (!force) force=false;
		
		var h=$_('holderTasksContent').empty();
		if ($_('holderTasks').style.top=='-20px' && !force){ 
			contEffect=20;
			/*DESAPARECE EL RECUADRO DE LAS TAREAS*/		
			if(typeof(intervalTask)!='undefined') clearInterval(intervalTask);
			$_('holderTasks').style.top='-20px';
			var timeInterval=1;
			intervalTask=setInterval( 'desappearTaskHolder()',timeInterval);
			return;
		}	
		
		flagPriority=false;
		$A(VAR_loggedUserData.userTasks).each(function(elem){
			if (flagPriority) return;
			if (elem.name.match(/^info/) && !elem.finish){ showInfoPriority(elem, h); flagPriority=true;}
		});
		if (flagPriority) return;

		/*APARECE EL RECUADRO DE LAS TAREAS*/		
		contEffect=20;
		//$_('holderTasks').style.display='block';
		$_('holderTasks').style.top='-146px';
		var timeInterval=35;
		if(typeof(intervalTask)!='undefined') clearInterval(intervalTask);
		intervalTask=setInterval( 'appearTaskHolder()',timeInterval);

		var leftTaskColumn = $C('DIV', {className:'floatLeft', '.width':'220px', '.marginLeft':'5px'}, h);
		$C('IMG',{'.margin':'20px 0px 0px 20px', src:'resources/images/frase_tareas.gif'},leftTaskColumn);
		
		var rightTaskColumn = $C('DIV', {className:'floatRight', '.width':'180px', '.margin':'10px 5px 0px 0px'}, h);
		
		var i=0;

		$A(VAR_loggedUserData.userTasks).each(function(elem){
			if (!elem || elem.name.match(/^info/)) return;
			var holderTask = $C('DIV',{},rightTaskColumn);
			if (elem.finish) $C('DIV',{className:'iconTick floatLeft'},holderTask);
			else{ $C('DIV',{className:'iconWarning floatLeft'},holderTask);	i++;}
			var caption = $C('A',{innerHTML:elem.caption},$C('B',{},$C('DIV',{className:'floatLeft','.marginTop':'4px', '.textDecoration':((elem.finish)?'line-through':'')},holderTask)));
			caption.onclick=function(){
				$downloadTemplate("resources/templates/help/"+elem.template,function(templ){
					var content= $C('DIV',{className:'appContent',innerHTML:'<div style="height:500px; overflow-y:scroll;overflow-x:hidden;">'+templ+'</div>'});
					openFloatWindow(content, {width:'550px'});	
				});
			}
			$C('DIV', {className:'floatFix'}, holderTask);
		});
		
		$C('DIV', {className:'floatFix'}, h);
		
		if (i==0){ $_('holderTasks').style.display='none';}
	}
	
	VAR_loggedUser = false;
	VAR_loggedUserData = {};
	function userLogin(checkCookies, callback){
		
		var user="";var pass="";
		
		if(!checkCookies){user = $_('userLoginInputName').value;pass = $_('userLoginInputPass').value;if(user.length==0 || pass.length==0){alert("Debes indicar el usuario y la contraseña para acceder."); return;}}
		
		var params = "command=userLogin&user="+user+"&pass="+pass;
		ajaxPetition("resources/PHP/general.php",params,function(ajax){
		
			//alert(ajax.responseText);
			var r = eval("("+ajax.responseText+")");
			if(parseInt(r.errorCode)>0 && !checkCookies){$_('userLoginInputPass').value='';alert("Usuario y/o contraseña incorrectos.");return;}
			if(parseInt(r.errorCode)>0 && checkCookies){if (callback) {callback();} return;}
			
			VAR_loggedUser = r.userMail;
			VAR_loggedUserData = r;
			VAR_loggedUserData.privateChatRooms={};
		
			$_("welcomeUser",{innerHTML:r.errorDescription});
			
			// Creamos menu.
			$_('userLoginHolder').innerHTML='';
			
			$_("welcomeUser").style.display='block';
			$_("privateMenu").style.display='block';
			var avHolder = $_("loggedUserAv").empty();
			avHolder.style.display='block';
			
			var h = $_("privateOptions").empty();
			var logoutBtnHolder=$C('DIV',{className:'cursor floatRight','.width':'36px','.height':'20px', '.marginLeft':'5px'},h);
			var logoutBtn = $C('DIV',{className:'tabTopMenu', innerHTML:'<b>Salir</b>'},logoutBtnHolder);
			$C('DIV', {className:'tabLeft'}, logoutBtnHolder);
			$C('DIV', {className:'tabRight'}, logoutBtnHolder);
			$C('DIV', {className:'floatFix'}, logoutBtnHolder);
			logoutBtnHolder.onclick = function () { userLogout(); }

			var searBtnHolder=$C('DIV',{className:'cursor floatRight','.width':'78px','.height':'20px', '.marginLeft':'5px'},h);
			var searchBtn = $C('DIV',{className:'tabTopMenu',innerHTML:'<b>Buscar gente</b>'},searBtnHolder);
			$C('DIV', {className:'tabLeft'}, searBtnHolder);
			$C('DIV', {className:'tabRight'}, searBtnHolder);
			$C('DIV', {className:'floatFix'}, searBtnHolder);
			searBtnHolder.onclick = function() { launchApp("openSearchs",false,{findInLocation:true,findNearLocation:true}); }.bind(this);
			
			var myProfileBtnHolder=$C('DIV',{className:'cursor floatRight','.width':'56px','.height':'20px', '.marginLeft':'5px'},h);
			var myProfileBtn = $C('DIV',{className:'tabTopMenu',innerHTML:'<b>Mi perfil</b>'},myProfileBtnHolder);
			$C('DIV', {className:'tabLeft'}, myProfileBtnHolder);
			$C('DIV', {className:'tabRight'}, myProfileBtnHolder);
			$C('DIV', {className:'floatFix'}, myProfileBtnHolder);
			myProfileBtnHolder.onclick = function () { launchApp('optionProfile',false); }
			
			$C('DIV', {className:'floatFix'}, h);
			
			$_('holderTasks').style.display='block';
			showTasks(true);
			
			// Avatar usuario.
			var imgHolder = $C('DIV',{className:'imageHolder32 floatRight','.cursor':'pointer'},avHolder);
			$C('IMG',{src:'users/'+VAR_loggedUserData.userAlias+'/avatars/av32.jpg'},imgHolder);
			imgHolder.onclick = function () { launchApp("openProfile",false,{id:VAR_loggedUserData.userAlias,user:VAR_loggedUserData.userName.replace(/,/,' ')}); }

			var alertsBtn = $_('alertsAnimHolder').$T('DIV')[0];
			alertsBtn.onclick = function() { launchApp('optionProfile',false); }
			
			/*
			$A($fix(w.parentNode).$T("SPAN")).each(function(elem,num) {
				if (elem.className=='opt_'+VAR_loggedUserData.userType) {elem.style.display = "block";}
			});
			*/
			
			// Aplicar tema del usuario.
			if (r.userTheme && r.userTheme!='') {applyTheme(r.userTheme);}
			else {applyTheme("basico_Gohe");}

			/* Lista de aplicaciones que deben ser cargadas despuÃ©s del login */
			$_('iHeaderOptions').empty();
			//launchApp("global_userGeolocation",{canvas:"Mi localidad",column:2});
			
			// Buscamos en VAR_apps todas las aplicaciones instanciadas...
			var appsToRefresh=["location_popularAlbums"];
			var patterns=[/^profile_publicUserProfile/,/^profile_publicUserPortrait/];
			for (var a in VAR_apps) {
				for (var p in patterns) {
					if (patterns[p].test(a)) { appsToRefresh.push(a); }
				}
			}
			if (callback) {callback();}
			else {refreshApps(appsToRefresh);}
			
			// Cargar aplicacion que muestra el estado de los amigos.
			if (VAR_loggedUserData.userType =='user'){
				launchApp("friendsStatus",false,{});
				var privateChatsHolder = $_('privateChatsHolder'); privateChatsHolder.style.display = 'block';
				var privateChatsToolbar = $_('privateChatsToolbar'); privateChatsToolbar.style.display = 'block';
			}
			// Polling.
			polling();
			//startPolling();
			
		});
	}
	
	
	function userLogout(){
		var params = "command=userLogout";
		ajaxPetition("resources/PHP/general.php",params,function(ajax){
			var r = eval("("+ajax.responseText+")");
			if(parseInt(r.errorCode)>0){alert(print_r(r));return;}
			
			setCookie('user','',-1);
			setCookie('pass','',-1);
			setCookie('userAlias','',-1);
			
			// Call cleanAfterLogout functions
			// for (var elem in VAR_apps) {if (VAR_apps[elem].cleanAfterLogout) {VAR_apps[elem].cleanAfterLogout();}}

			// Ocultar aplicacion que muestra el estado de los amigos.
			if (VAR_loggedUserData.userType =='user'){
				var privateChatsHolder = $_('privateChatsHolder'); privateChatsHolder.style.display = 'none';
				var privateChatsToolbar = $_('privateChatsToolbar'); privateChatsToolbar.style.display = 'none';
			}

			userCleanInterface();
			var wUser = $_("userLoginHolder",{innerHTML:""});

			var tabHolder=$C('DIV',{className:'cursor floatRight','.width':'76px','.height':'20px', '.marginLeft':'5px'},wUser);
			var tab = $C('DIV',{className:'tabTopMenu'},tabHolder);
			$C('A',{href:"registro/", target:'_blank', onclick:"window.open(this.href); return false;", innerHTML:'Regístrate'},tab);
			$C('DIV', {className:'tabLeft'}, tabHolder);
			$C('DIV', {className:'tabRight'}, tabHolder);
			$C('DIV', {className:'floatFix'}, tabHolder);
			
			var tabHolder=$C('DIV',{className:'cursor floatRight','.width':'76px','.height':'20px', '.marginLeft':'5px'},wUser);
			var tab = $C('DIV',{onclick:function(){userShowLogin();}, className:'tabTopMenu', innerHTML:'Identifícate'},tabHolder);
			$C('DIV', {className:'tabLeft'}, tabHolder);
			$C('DIV', {className:'tabRight'}, tabHolder);
			$C('DIV', {className:'floatFix'}, tabHolder);

			var tabHolder=$C('DIV',{className:'cursor floatRight','.width':'76px','.height':'20px', '.marginLeft':'5px'},wUser);
			var tab = $C('DIV',{className:'tabTopMenu', innerHTML:'Ayuda', id:"helpButtonContainer"},tabHolder);
			$C('DIV', {className:'tabLeft'}, tabHolder);
			$C('DIV', {className:'tabRight'}, tabHolder);
			$C('DIV', {className:'floatFix'}, tabHolder);
			tabHolder.onclick=function(){toggleSendConfirmationMailInfoBox(tab);};

			var h = $_('iHeaderOptions').empty();
		
			$_("holderTasks").style.display='none';
			$_("welcomeUser").style.display='none';
			$_("privateMenu").style.display='none';
			$_("loggedUserAv").style.display='none';
			
			// Quitamos los mensajes y amigos nuevos...
			//var im=$_('incommingMessages').empty();
			//im.style.display='none';
			//var hif=$_('incommingFriends').empty();
			//hif.style.display='none';
			
			// Buscamos en VAR_apps todas las aplicaciones instanciadas...
			var appsToRefresh=["location_popularAlbums","location_people","location_peopleNear","location_news"];
			var patterns=[];
			for (var a in VAR_apps) {
				for (var p in patterns) {
					if (patterns[p].test(a)) { appsToRefresh.push(a); }
				}
			}
			refreshApps(appsToRefresh);
			
			friendsStatusLoaded=false;
			
			stopPolling();
			$_('alertsAnimHolder').style.display = 'none';
			
			applyTheme("basico_Gohe");		
		});
	}
	function userCleanInterface(){
		/* Esta funcion eliminarÃ¡ todo los restos de usuario logueado
		 * que hayan quedado a lo largo del sistema. deberia:
		 * [X] - Deshacerse del menu de la parte superior.
		 * [X] - inicializar las variables de usuario.
		 * [X] - eliminar las pestaÃ±as que hayan quedado abiertas.
		 */
		VAR_loggedUser = false;
		VAR_loggedUserData = {};
		
		var appsNotToClean = ['location_news','location_people','location_peopleNear','location_popularAlbums','location_userLotto'];
		//VAR_apps = {};
		for (var elem in VAR_apps) {
			if (!inArray(appsNotToClean,elem) && elem.indexOf('contactForm_')==-1) {
				// Acciones particulares al terminar apps.
				switch (elem) {
					case "myProfile_userLotto": 
						if (VAR_apps[elem]._stop) { VAR_apps[elem]._stop(); }
						break;
				}
				VAR_apps[elem]={};
			}
		}
				
		$_("welcomeUser").empty();
		$A($fix($_("userLoginHolder").parentNode).$T("SPAN")).each(function(elem,num){if(num == 0){return;}elem.style.display = "none";});
		$A($_("tabsHolder").$T("DIV")).each(function(elem){if(elem.id == "iTab_"+escape("Mi localidad")){return;}tabs_closeTab(elem);});
	}
	function userParseName(userName){if(!userName){return "";}return userName.replace(/,/g," ").replace(/[ ]*$/,"");}
	function userIncommingMail(num){
		var h=$_('incommingMessages').empty();
		if (num==0) {h.style.display='none';return;}
		h.style.display='block';
		h.innerHTML='('+num+')';
		return;
	}
	function userIncommingMailDecrease(){
		if(!$_("incommingMessages")){return;}
		var i = $_("incommingMessages");
		var v = (parseInt(i.innerHTML.replace(/[\(|\)]/g,""))-1);
		if(v<1){i.style.display='none';}
		i.innerHTML = v;
	}
	function userIncommingFriend(num){
		var h=$_('incommingFriends').empty();
		if (num==0) {h.style.display='none';return;}
		h.style.display='block';
		h.innerHTML='('+num+')';
		return;
	}
	function userIncommingFriendDecrease(){
		if(!$_("incommingFriends")){return;}
		var i = $_("incommingFriends");
		var v = (parseInt(i.innerHTML.replace(/[\(|\)]/g,""))-1);
		if(v<1){i.style.display='none';}
		i.innerHTML = v;
	}
/*=FIN-Funciones de Usuario=*/
/*=INI-Funciones de control del entorno=*/
	function tabs_optionCreateNew(){
		var d = $C("DIV",{innerHTML:"Nueva PestaÃ±a"},$_("iHeaderTabs"));
		d.onclick = function(){
			$downloadTemplate("resources/templates/createTab.html",function(templ){
				w = $_("veloContainer",{innerHTML:templ});
				eFadein($_("velo",{".display":"block"}),false,1);
			});
		}
	}
	function tabs_optionCreateNewChangeLayout(el){
		$fix(el).$T("INPUT")[0].checked = true;
	}
	var VAR_tabs_values = [
		{0:"100%"},
		{0:"50%",1:"50%"},{0:"25%",1:"75%"},
		{0:"33%",1:"33%",2:"33%"},{0:"20%",1:"60%",2:"20%"},
	]
	function tabs_optionCreateNewAccept(){
		var selected = false;
		$A($_("createTabDialogColumnsContainer").$T("INPUT")).each(function(elem){if(elem.checked){selected = elem};});
		if(!selected){return;}

		tabs_createNew("pestaÃ±a creada dinÃ¡micamente",VAR_tabs_values[selected.value],true);
		quitarVelo();
	}

	var VAR_tabs_dist = Object();
	function tabs_createNew(id,columnsObj,selectThisTab){
		
		if($_("iCanvas_"+escape(id.toString()))){return $_("iCanvas_"+escape(id.toString()));}

		VAR_tabs_dist[id] = columnsObj;
		
		var h = $_("iTable");
		
		var tbody_numbers = h.$T("TBODY").length;

		var t = $C("TBODY",{"id":"iCanvas_"+escape(id.toString()),className:"iCanvasTbody"},h);
		if(tbody_numbers > 0){t.setAttribute("style","display:none;");t.style.display="none";}
		
		var tr = $C("TR",{},t);
		for(var a in columnsObj){var td = $C("TD",{className:"iCanvasTD",".width":columnsObj[a].toString()},tr);}

		var d = $C("DIV",{"id":"iTab_"+escape(id.toString()),innerHTML:id.toString()});
		var i = $C("IMG",{className:"closeTab",src:"resources/images/t.gif"},d);
		i.onclick = function(ev){tabs_closeTab(d,ev);}

		//$_("iHeaderTabs").insertBefore(d,$_("iHeaderTabs").lastChild);
		$_("tabsHolder").appendChild(d);
		if(tbody_numbers < 1){d.setAttribute("class","selected");d.className="selected";}
		d.onclick = function(){tabs_selectOne(d);}

		if(selectThisTab){tabs_selectOne(d);}
		checkTabsStatus();
		return t;
	}
	
	VAR_tabsSliderInterval=null;
	
	function tabs_displaceLeft() {
		var h=$_('tabsHolder');
		var left=parseInt(h.style.left.replace(/px/,""));
		left+=2; if (left>0) {left=0;}
		h.style.left=(left)+'px';
	}
	function tabs_displaceRight() {
		var h=$_('tabsHolder');
		var totalWidth=0;
		$A(h.$T('DIV')).each(function(t) { totalWidth+=t.offsetWidth; });
		var left=parseInt(h.style.left.replace(/px/,""));
		left-=2;
		if (totalWidth<=856) {left=0;}
		/*else if (totalWidth<=822+Math.abs(left)) {return;}*/
		h.style.left=(left)+'px';
	}
	
	function checkTabsStatus() {
		clearInterval(VAR_tabsSliderInterval);
		var h=$_('tabsHolder');
		var totalWidth=0;
		$A(h.$T('DIV')).each(function(t) { totalWidth+=t.offsetWidth; });
		if (totalWidth<856) {left=0; $_('iTabsSlider').style.display='none';}
		else {$_('iTabsSlider').style.display='block';}
		h.style.left=left+'px';
	}
	
	function tabs_selectOne(tab){
		$A($_("iTable").$T("TBODY")).each(function(elem){
			if(elem.className != "iCanvasTbody"){return;}
			if(elem.id == tab.id.replace("iTab_","iCanvas_")){
				elem.setAttribute("style","display:table-row-group;");
				if(document.all){elem.style.display = "block";}
				return;
			}
			elem.setAttribute("style","display:none;");
			if(document.all){elem.style.display = "none";}
		});
		$A($_("iHeaderTabs").$T("DIV")).each(function(elem){elem.setAttribute("class","");elem.className = "";});
		tab.setAttribute("class","selected");
		tab.className = "selected";
		return tab;
	}
	function tabs_closeTab(tab,ev){
		var tabsList=$_("iHeaderTabs").$T("DIV");
		var i=0;
		var tabToOpen=0;
		$A(tabsList).each(function(elem) {
			if (elem==tab) {tabToOpen=i;}
			i++;
		});
		tabToOpen--;
		if (tabToOpen<0) {tabToOpen=0;}
		
		if(tab.id == "iTab_"+escape("Mi localidad")){ /* alert("Esta pestaña no se puede cerrar."); */ return;}
		if(tab.id == "iTab_"+escape("CMS")){ /* alert("Esta pestaña no se puede cerrar."); */ return;}
		
		var iCanvas = $_(tab.id.replace("iTab_","iCanvas_"));
		iCanvas.parentNode.removeChild(iCanvas);
		tab.parentNode.removeChild(tab);
		//alert($_("iHeaderTabs").$T("DIV")[0]);
		tabs_selectOne($_("iHeaderTabs").$T("DIV")[tabToOpen]);
		
		checkTabsStatus();
		
		if(ev){ev.stopPropagation();}
		
		//FIXME: dispose de las aplicaciones cargadas en la pestaÃ±a
		/*
		var divs = $fix(iCanvas).$T('DIV');
		$A(divs).each(function(elem) {
			if (elem.id!='') { alert(elem.id); }
		});
		*/
	}
	function tabs_saveConfig(){
		var j = json_encode({tabs:VAR_tabs_dist,apps:VAR_apps_dist});
		var params = "command=userSaveApps&config="+escape(j);
		ajaxPetition("resources/PHP/general.php",params,function(ajax){
			alert(ajax.responseText);
		});
	}
	function app_installAppDialog(){
		tabs_saveConfig();
		return;
		$downloadTemplate("resources/templates/installApps.html",function(templ){
			w = $_("veloContainer",{innerHTML:templ});
			efadein($_("velo"));
		});
	}
/*=FIN-Funciones de control del entorno=*/

/****************************** Mail Confirmation Request ************************************/

function toggleSendConfirmationMailInfoBox(obj) {
	var w=$_('info_sendConfirmationMail');
	if (!w) {
		var h = $_('helpButtonContainer');
		var click = h.onclick;h.onclick = function(e){e.preventDefault();};
		var w = createThemeInfo("sendConfirmationMail");
		w.style.width='180px';
		h.appendChild(w);
		
		// Reenvio del correo de confirmaci�n ...
		var ib = $_("info_sendConfirmationMail_container",{innerHTML:'Si te has registrado pero no te ha llegado el correo de confirmaci&oacute;n puedes solicitar uno nuevo introduciendo tu correo electr&oacute;nico en el siguiente campo de texto.'});
		var inp = $C('INPUT',{type:'text'},$C('DIV',{'textAlign':'center'},ib));
		var btn = $C('B',{innerHTML:'Reenviar confirmaci&oacute;n','.marginLeft':'auto','.marginRight':'auto'},$C('DIV',{'.marginTop':'5px','textAlign':'center'},ib));
		btn.onclick = function() {requestConfirmationMail();}
		
		// Recordar contrase�a....
		$C('DIV',{'.paddingTop':'10px',innerHTML:'Si has olvidado tu contraseña escribe tu dirección de correo en el siguiente campo de texto y te mandaremos las instrucciones para cambiar tu contraseña.'},ib);
		var inp = $C('INPUT',{type:'text'},$C('DIV',{'textAlign':'center'},ib));
		var btn = $C('B',{innerHTML:'Olvidé mi contraseña','.marginLeft':'auto','.marginRight':'auto'},$C('DIV',{'.marginTop':'5px','textAlign':'center'},ib));
		btn.onclick = function() {requestGeneratePassword();}
	} else {w.parentNode.removeChild(w);}
}

function requestConfirmationMail() {
	
	var inp = $_("info_sendConfirmationMail_container").$T('INPUT')[0];
	if (inp.value=='') {alert("Debes indicar el correo electrónico que usaste al registrarte.");return;}
	ajaxPetition("resources/PHP/general.php","command=requestConfirmationMail&mail="+inp.value,function(ajax){
		var r = eval("("+ajax.responseText+")");
		inp.value=''; if (parseInt(r.errorCode)!=0) {alert(r.errorDescription);return;}
		var w=$_('info_sendConfirmationMail');w.parentNode.removeChild(w);
		alert("El correo de confirmación ha sido reenviado a tu cuenta.");
	});
}
function requestGeneratePassword() {
	var inp = $_("info_sendConfirmationMail_container").$T('INPUT')[1];
	if (inp.value=='') {alert("Debes indicar el correo electrónico que usaste al registrarte.");return;}
	ajaxPetition("resources/PHP/general.php","command=userRequestGeneratePassword&mail="+inp.value,function(ajax){
		var r = eval("("+ajax.responseText+")");
		inp.value=''; if (parseInt(r.errorCode)!=0) {alert(r.errorDescription);return;}
		var w=$_('info_sendConfirmationMail');w.parentNode.removeChild(w);
		alert("Hemos enviado un correo a tu dirección con las instrucciones para regenerar tu contraseña.");
	});
}

function submitUserAlbumVote(userAlias, album, value) {
	if (!value) {value=1;}
	// comprobar si usuario logeado...
	
	// Petición para votar el álbum...
	ajaxPetition("resources/PHP/API_userAlbums.php","command=voteUserAlbum&userAlias="+userAlias+"&album="+album+"&value="+value,function(ajax) {
		var r = eval("("+ajax.responseText+")");
		if (parseInt(r.errorCode)!=0) { alert(r.errorDescription); return; }
		refreshApps(["location_popularAlbums", "profile_showPublicAlbums_"+userAlias]);
		//alert("Tu voto ha sido registrado con éxito.");
	});
}

/************************ ACTUALIZACION APLICACIONES *********************************/
function refreshAllApps() {
	// Refrescar todas las aplicaciones...	
}

function refreshApps(list) {
	// Refrescar todas las aplicaciones...	
	//alert(print_r(list));
	for (var app in list) {
		if (VAR_apps[list[app]] && VAR_apps[list[app]].refreshApp ) { VAR_apps[list[app]].refreshApp();	}	
	}
}
function closeApps(list) {
	// Cerrar todas las aplicaciones...	
	for (var app in VAR_apps) {
		if (VAR_apps[app] && VAR_apps[app].closeApp ) { alert("Cerrando "+app); VAR_apps[app].closeApp();	}	
	}
}
/************************************** POLLING ******************************************/
	VAR_pollingInterval = null;
	function startPolling () {
		//if (VAR_loggedUser!='amgko@hotmail.com' && VAR_loggedUser!='usuario1@delcasar.es') {return;}
		//VAR_pollingInterval=setInterval("polling()",60000);
	}
	function stopPolling () {
		//clearInterval(VAR_pollingInterval);
	}

	var lastPolling=(new Date()).getTime();
	function polling() {
		
		// return;
		
		ajaxPetition("resources/PHP/API_polling.php","command=polling&lastTime="+lastPolling,function(ajax) {
			
			// if (VAR_loggedUserData.userMail == 'usuario8@todosenred.es') { alert(ajax.responseText); return; }
		
			if (ajax.responseText=='') { /* alert("NaN!"); */ return; }
			var r=eval("("+ajax.responseText+")");
			if (parseInt(r.errorCode,10)!=0) { 
				if (parseInt(r.errorCode,10)!=1) { alert(r.errorDescription); } return;
			}
			
			// Alertas del usuario.
			//alert(r.alertsToRead);
			if (r.alertsFriends>0) refreshApps(['myProfile_privateProfile']);
			if (r.alertsToRead>0) { 
				//var num=0;
				//$A(r.alertsToRead).each(function(elem){num+=parseInt(elem.num);});
				document.title = r.alertsToRead+' novedad'+((r.alertsToRead>1)?'es':'')+' - '+getLocation();
				// Buscamos en VAR_apps todas las aplicaciones instanciadas...
				$_('alertsAnimHolder').style.display='block';
				if (r.newAlerts>0) refreshApps(['myProfile_userAlerts']);
			} else { 
				document.title = getLocation() + ' - todosenred.es';
				$_('alertsAnimHolder').style.display='none'; 
			}

			// Solicitudes de chat.
			if (r.chatRequests.length>0) {
				$A(r.chatRequests).each(function(elem){
					if (typeof(VAR_loggedUserData.privateChatRooms[elem.owner]) != 'undefined') {
						// Ya hay una ventana iniciada para el contacto de la solicitud.
						if (VAR_apps['privateChat_'+elem.owner].connectionStatus == 1 || VAR_apps['privateChat_'+elem.owner].connectionStatus == 0) {
							// La ventana est�bierta pero no se ha establecido la conversaci򬬊							VAR_apps['privateChat_'+elem.owner].requestTime = elem.time;
							VAR_apps['privateChat_'+elem.owner].userConnect(true);	
						}
					} else {
						// No hay una ventana iniciada. Iniciar ventana para este contacto.
						// alert("No hay una ventana iniciada. Iniciar ventana para este contacto.");
						launchApp('openChat',false,{targetUser:elem.owner,targetUserName:userParseName(elem.ownerName),requestTime:elem.time,forceOpen:true});
					}
				});	
			}
			
			if (r.friendsStatus && friendsStatusLoaded) {
				// Actualizar estado de los amigos.
				if (VAR_apps['friendsStatus']) {
					VAR_apps['friendsStatus'].renderUsersList(r.friendsStatus);
				}
			}
		
			// Preparar para el próximo polling.			
			lastPolling = r.lastTime;
			
			polling();
			
		});
	}

/************************************ GENERADORES ****************************************/
/*Paginador: Recuerda que la primera página es la 0*/
function generatePager (page, totalPages, holder, callback, callBackArgs, lan) {
	if (totalPages<1) return;
	var pageButtons = $C("DIV", {className:"theme_buttonHolder"}, holder);
	if (page<totalPages){
		var nextButton = $C("DIV", {className:"theme_button pagerButton", innerHTML:(lan!='en')?"Última ("+(totalPages+1)+")":"Last Page ("+(totalPages+1)+")"}, pageButtons);
		nextButton.onclick=function(){callback(totalPages, callBackArgs);}.bind(this);				
	}
	if (page<totalPages-1){
		var moreNextButton = $C("DIV", {className:"theme_button pagerButton", innerHTML:"..."}, pageButtons);
		moreNextButton.onclick=function(){callback(page+2, callBackArgs);}.bind(this);				
	}
	var j=0;
	$A([page+1, page, page-1]).each(function(i){
		if (i>=0 && i<=totalPages){
			var numberButton = 	$C("DIV", {className:"theme_button pagerButton", innerHTML:(i==(page))?"<b>"+parseInt(i+1)+"<b>":parseInt(i+1)}, pageButtons);
			numberButton.onclick=function(){callback(i, callBackArgs);}.bind(this); j=i;
		}
	}.bind(this));
	if (j>0){
		var moreBeforeButton = $C("DIV", {className:"theme_button pagerButton", innerHTML:"..."}, pageButtons);
		moreBeforeButton.onclick=function(){callback(page-2, callBackArgs);}.bind(this);				
	}
	if (page>0){
		var beforeButton = $C("DIV", {className:"theme_button pagerButton", innerHTML:(lan!='en')?"Primera":"First Page"}, pageButtons);
		beforeButton.onclick=function(){callback(0, callBackArgs);}.bind(this);
	}
	return;
	for (var p=0; p<totalPages; p++) {callback(p+1, callBackArgs);}
}
/*Paginador: Recuerda que la primera página es la 0*/
function generateThemePager (page, totalPages, holder, callback, callBackArgs) {
	if (totalPages<1) return;
	var pageButtons = $C("DIV", {}, holder);
	if (page<totalPages){
		var nextButton = $C("DIV", {className:"themeButton floatRight", innerHTML:"Última ("+(totalPages+1)+")"}, pageButtons);
		nextButton.onclick=function(){callback(totalPages, callBackArgs);}.bind(this);				
	}
	if (page<totalPages-1){
		var moreNextButton = $C("DIV", {className:"themeButton floatRight", innerHTML:"..."}, pageButtons);
		moreNextButton.onclick=function(){callback(page+2, callBackArgs);}.bind(this);				
	}
	var j=0;
	$A([page+1, page, page-1]).each(function(i){
		if (i>=0 && i<=totalPages){
			var numberButton = 	$C("DIV", {className:"themeButton floatRight", innerHTML:(i==(page))?"<b>"+parseInt(i+1)+"</b>":parseInt(i+1)}, pageButtons);
			numberButton.onclick=function(){callback(i, callBackArgs);}.bind(this); j=i;
		}
	}.bind(this));
	if (j>0){
		var moreBeforeButton = $C("DIV", {className:"themeButton floatRight", innerHTML:"..."}, pageButtons);
		moreBeforeButton.onclick=function(){callback(page-2, callBackArgs);}.bind(this);				
	}
	if (page>0){
		var beforeButton = $C("DIV", {className:"themeButton floatRight", innerHTML:"Primera"}, pageButtons);
		beforeButton.onclick=function(){callback(0, callBackArgs);}.bind(this);
	}
	return;
	for (var p=0; p<totalPages; p++) {callback(p+1, callBackArgs);}
}

/********************************* VERSION 2.0 *****************************/

function createnExtendedThemeWindow(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;
}

function updateFriendsList(callback,args) {
	if (!VAR_loggedUserData && VAR_loggedUserData.userAlias=='' && VAR_loggedUser=='') { if (callback()) { callback(args); } return; }
	ajaxPetition ("resources/PHP/API_friends.php","command=getFriendsOfUserSimple",function(ajax){
		var r = eval("("+ajax.responseText+")");
		if (parseInt(r.errorCode)!=0) { alert(r.errorDescription); return; }
		VAR_loggedUserData.friends = [];
		$A(r.data).each(function(elem) { VAR_loggedUserData.friends.push(elem.friendId); });
		if (callback()) { callback(args); }
	}.bind(this));
}	

function isMyFriend(userAlias) {
	if (!VAR_loggedUserData || VAR_loggedUserData.userAlias=='' || VAR_loggedUser=='') { return false; }
	if (!inArray(VAR_loggedUserData.friends,userAlias)) { return false; }
	return true;
}

/************** CARGA DIN�MICA DE LIBRERIAS *************************/

function loadScript(url, callback){
	var script = document.createElement("script")
	script.type = "text/javascript";
	
	// Comprobar si est� cargada la libreria...
	var loaded=false;
	var loadedScripts = $T("head")[0].$T('SCRIPT');
	$A(loadedScripts).each(function(s) { if (s.src.indexOf(url)!=-1) { 	loaded=true; } });
	if (loaded) { /* alert("El modulo ya esta cargado!"); */ callback(); return; }
		
	if (script.readyState){  //IE
		script.onreadystatechange = function(){
			if (script.readyState == "loaded" ||
				script.readyState == "complete"){
				script.onreadystatechange = null;
				callback();
			}
		};
	} else {  //Others
		script.onload = function(){
			callback();
		};
	}
	script.src = url+'?ts='+ts();
	$T("head")[0].appendChild(script);
}
function loadStyleSheet(url, callback){
	var script = document.createElement("link")
	script.type = "text/css";
	script.rel = "stylesheet";
	if (script.readyState){  //IE
		script.onreadystatechange = function(){
			if (script.readyState == "loaded" ||
				script.readyState == "complete"){
				script.onreadystatechange = null;
				callback();
			}
		};
	} else {  //Others
		script.onload = function(){	callback();	};
	}
	script.href = url+'?ts='+ts();;
	$T('head')[0].appendChild(script);
}

// Estodos: Solicitado(1), Solicitado y Cargado(2).
VAR_modulesRequested = {};
VAR_modulesLoaders = {};

function loadModule (module,callback,customParams) {
	
	if (!callback) { var callback = function (){} }
	if (!customParams) { var customParams = {}; }
	
	// Configuracion.
	var tries=50;
	var triesTime=100;
	
	//alert("CUSTOM PARAMS en ("+module+")\n"+print_r(customParams));
	
	// Comprobar si el modulo esta solicitado...
	if (!VAR_modulesRequested[module]) {
		// El modulo no se ha solicitado aún. Solicitar y marcar.
		//alert("caso 1 ("+module+")");
		loadScript("resources/modules/"+module+"/index.js",function(){ VAR_modulesRequested[module]=2; eval(module+"_init(callback,customParams);"); });
		VAR_modulesRequested[module]=1;
	} else if (VAR_modulesRequested[module]==1) {
		// El modulo se ha solicitado pero no se ha cargado aun. Comprobacion periodica.	
		VAR_modulesLoaders[module] = setInterval(function () {
			if (VAR_modulesRequested[module]==2) {
				eval(module+"_init(callback,customParams);");
				clearInterval(VAR_modulesLoaders[module]);
			}
			tries--;
			if (tries<=0) { 
				// Agotado el numero de intentos -> Paramos y avisamos.
				clearInterval(VAR_modulesLoaders[module]);
				VAR_modulesRequested[module]=false;
				alert("Superado el numero de intentos en la carga del modulo.");
			 }
		}.bind(this),triesTime);
		//alert("caso 2 ("+module+")");
	} else if (VAR_modulesRequested[module]==2) {
		// El modulo ya se solicito y esta cargado. Ejecutar callback.	
		eval(module+"_init(callback,customParams);");	
		//alert("caso 3 ("+module+")");
		
	}
}

function createRecord (holder) {
	var recHolder = $C('DIV',{className:'recordHolder'},holder);
	var recHeader = $C('DIV',{className:'recordHeader'},recHolder);
	var hdrContent = $C('DIV',{className:'content'},recHeader);
	var recContent = $C('DIV',{className:'recordContent'},recHolder);
	var content = $C('DIV',{className:'content'},recContent);
	$C('DIV',{className:'floatFix'},recHolder);
	return [hdrContent,content];
}

function createHorizontalListItem(holder,_options) {
	// Revisi�n de opciones por par�metros y opciones por defecto...
	var options = {
		footer: false
	}

	for (var o in _options) { options[o]=_options[o]; }
	var itemHolder = $C('DIV',{className:'horizontalListItemHolder floatLeft'},holder);
	var itemContent = $C('DIV',{className:'itemContent'},itemHolder);
	var content = $C('DIV',{className:'content'},itemContent);
	
	// El pie es opcional...
	var footerContent = false;
	if (options.footer) {
		var itemFooter = $C('DIV',{className:'itemFooter'},itemHolder);
		footerContent = $C('DIV',{className:'content'},itemFooter);
	} 
	
	return [content,footerContent];
}

function openFloatWindow (content,_params, closeCallback) {
	var params = {
		width:'500px',
		height:'400px'
	}
	if (_params) { for (var p in _params) { params[p]=_params[p]; } }

	var fW = $_('floatWindow');

	fW.style.width=params.width;
	fW.style.minHeight=params.height;
	
	var h = $_('floatWindowHolder');
	h.style.display='block';
	var body = $_('floatWindowContent');
	body.innerHTML='';
	body.appendChild(content);
	
	// Firefox...
	window.onkeydown = function (e) { 
		if (e.keyCode==27) { closeFloatWindow(); } 
	}
	
	var closeBtn = $_('floatWindowCloseBtn');
	closeBtn.onclick = function() {
		closeFloatWindow();
		if (closeCallback) { closeCallback(); }
	}
	
}
function closeFloatWindow() {
	var h = $_('floatWindowHolder');
	h.style.display='none';
	document.onkeyup = function () {}

}

/********************************** EXCEPCIONES *******************************/
function exception (ex) {
	var debugMode = true;
	
	if (!debugMode) { return; }
	var message = "[INFORME DE ERROR]\n\n";
	switch (typeof(ex)) {
		case 'object':
			var vDebug = "";
		    for (var prop in ex) { vDebug += "["+prop+"]: "+ex[prop]+ "\n\n"; }
		    vDebug += "toString(): "+ex.toString(); 
			alert(message+vDebug);
			break;
		case 'string':
			alert(message+ex);
			break;
		default: alert(message+"No se ha podido identificar el error.");
	}
}

function renderFormDate(day,month,year,daySelector,monthSelector,yearSelector){
	/* Cada vez que modificamos uno de los selecctores volvemos a llamar a esta función para que
	 * recalcule el numero de dias de cada mes y si febrero es bisiesto añada 1 más. No permite
	 * fechas inferiores a 14 años desde la fecha actual.
	 */
	var restrictDate=false;
	
	var maxYear=(new Date()).getFullYear()-14;
	var h = $fix(yearSelector).empty();
	for(var a=maxYear;a>1949;a--){
		var se = (a == parseInt(year)) ? "selected" : "";
		$C("OPTION",{innerHTML:a+"",value:a+"",selected:se+""},h);
	}
	h.onchange = function() {renderFormDate(daySelector.value,monthSelector.value,yearSelector.value,daySelector,monthSelector,yearSelector); }
	if (yearSelector.value==maxYear) restrictDate=true;
	
	var maxMonth = 11;
	if (restrictDate)maxMonth=(new Date()).getMonth();
	var h = $fix(monthSelector).empty();
	$A(dateLib.getMonthsNames()).each(function(elem,num){
		var se = ((num+1) == parseInt(month)) ? "selected" : "";
		if ((restrictDate && num<=maxMonth) || !restrictDate) $C("OPTION",{innerHTML:elem+"",value:(num+1)+"",selected:se+""},h);
	});
	h.onchange = function() { renderFormDate(daySelector.value,monthSelector.value,yearSelector.value,daySelector,monthSelector,yearSelector); }

	var nDays = _dateLibrary.getMonthDays(month,year);
	if (restrictDate && monthSelector.value==maxMonth+1) nDays=(new Date()).getDate();
	
	var h = $fix(daySelector).empty();
	for(var a=1;a<=nDays;a++){
		var se = (a == parseInt(day)) ? "selected" : "";
		$C("OPTION",{innerHTML:a+"",value:a+"",selected:se+""},h);
	}
	h.onchange = function() { renderFormDate(daySelector.value,monthSelector.value,yearSelector.value,daySelector,monthSelector,yearSelector); }
}

function renderLastChange(date, time){
	var minute = 60;
	var hour=minute*60;
	var day=hour*24;
	var week=day*7;
	var string="";
	
	var dif=time-date;
	if (dif<week){
		if (dif<day){
			if (dif<hour){
				if (dif<minute){
					if (parseInt(dif)=='0') string+='Ahora mismo';
					else string+="Hace "+parseInt(dif)+" segundo"+((parseInt(dif)!=1)?"s":"")+"";
				}
				else{
					var minutes=dif/minute;
					string+="Hace "+parseInt(minutes)+" minuto"+((parseInt(minutes)!=1)?"s":"")+"";		
				}
			}
			else{
				var hours=dif/hour;
				string+="Hace "+parseInt(hours)+" hora"+((parseInt(hours)!=1)?"s":"")+"";		
			}
		}
		else{
			var days = dif/day;
			string+="Hace "+parseInt(days)+" día"+((parseInt(days)!=1)?"s":"")+"";
		}	
	}
	else{
		string+="Hace más de una semana";
	}
	
	return string;	
}
function getMonthName(_m) {
	var months= ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];
	return months[_m-1];	
}
function userLogged() {
	return (VAR_loggedUserData && VAR_loggedUser && VAR_loggedUserData.userAlias!='' && VAR_loggedUser!='');	
}

/************* COOKIE ****************/
function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function getNavigator () {
	if (navigator.userAgent.indexOf('Firefox')!=-1) {
		return 'FF';
	} else if (navigator.userAgent.indexOf('MSIE 7')!=-1) {
		return 'IE7';
	} else if (navigator.userAgent.indexOf('MSIE 8')!=-1) {
		return 'IE8';
	}
}

/************************* EMOTES *****************************/

function renderTextEmotes(txt) {
	txt = txt.replace(/xD/ig,'<img src="resources/images/t.gif" class="emote1" />');
	txt = txt.replace(/:D|=D/ig,'<img src="resources/images/t.gif" class="emote2" />');
	txt = txt.replace(/:\)|=\)/ig,'<img src="resources/images/t.gif" class="emote3" />');
	txt = txt.replace(/:O|=O/ig,'<img src="resources/images/t.gif" class="emote4" />');
	txt = txt.replace(/:P|=P/ig,'<img src="resources/images/t.gif" class="emote5" />');
	txt = txt.replace(/:\(|=\(/ig,'<img src="resources/images/t.gif" class="emote6" />');
	txt = txt.replace(/\^\^/ig,'<img src="resources/images/t.gif" class="emote7" />');
	txt = txt.replace(/;\)|;D/ig,'<img src="resources/images/t.gif" class="emote8" />');
	return txt;
}

function censuredText (txt) {
	var notAllowedExps = [/cabron/gi];
	$A(notAllowedExps).each(function(exp) { txt = txt.replace(exp,"****"); });
	return txt;
}

function itemUnset (obj,k) {
	var auxObj={};
	for (var p in obj) {
		if (p!=k) { auxObj[p] = obj[p]; }
	}
	return auxObj;
}

/**************************** DEBUG ***********************************/
function appsList() {
	var list = '';
	for (var app in VAR_apps) {
		list+=app+"\n";
	}
	return list;
}
function arrayItems(arr) {
	var list = '';
	for (var a in arr) {
		list+=a+"\n";
	}
	return list;
}

function strPadLeft (n, len) {
	if (!len) { var len=2; }
	var str = n+'';
	var iterations = len - str.length;
	while (iterations>0) {
		str = '0' + str;
		iterations--;
	}
	return str;
}

/* IE FIX: Permite adaptar el ancho de la barra seg� contenido de la misma en capas
*	El contenedor deber쟠tener un ancho equivalente a todos los minis y el bot򬟤e chat (con margins y paddings)
*/
function updateChatBarWidth() {
	var nav = getNavigator ();
	if ( nav != 'IE7' ) { return; }
	var privateChatsMinisHolder = $_('privateChatsMinisHolder');
	var numberOfMinis = 0;
	
	// Contar los minis que hay en la barra.
	var divs = $fix(privateChatsMinisHolder).$T('DIV');
	$A(divs).each(function(elem) {
		if (elem.style.display == 'block') { numberOfMinis++; }
	}.bind(this));

	// Ancho del boton de friendsStatus.
	var newWidth = 88;
	// Ancho de cada mini.
	newWidth += numberOfMinis * 44;
	// Ancho del extremo izquierdo de la barra.
	newWidth += 12;
	
	// Asignar nuevo ancho al contenedor de los minis.
	var privateChatsToolbar = $_('privateChatsToolbar');
	privateChatsToolbar.style.width = newWidth+'px';
	
}


var publicProfilesResumes = {};
var maxChatRoomsOpened = 5;
var chatRoomsOpened = 0;
var hiddenChatRooms = [];
// Indicador para saber si se ha finalizado la carga por primera vez de friendsStatus
var friendsStatusLoaded = false;
	
