//Constants
var vEnquestaVoteText= 'Votar';
var vEnquestaResultsText= 'Resultats';
var vTitolLinks ='Enllaços';
var vTitolNoticies ='Actualitat';
var vTitolEsports ='Actualitat';
var vTextLinks ='Amplia la informaci&oacute; per Internet';
var vTitolLastPlayed = 'Clica per veure qu&egrave; ha sonat';
var vTitolHiddenComments='Comentaris desactivats';
var vDefaultTitolMissatges='Envia el teu missatge en directe';
var THEME_GREY = "tGrey_";
var THEME_BLUE = "tBlue_";
var THEME_GREEN = "tGreen_";
var THEME_ORANGE = "tOrange_";
var THEME_OLIVE = "tOlive_";
var THEME_MARINE = "tMarine_";
var THEME_BLACK = "tBlack_";
var THEME_COFFEE = "tCoffee_";
var currentTheme = THEME_ORANGE;

var modType="PDMOD";

var vIntervalReintentEnquesta= 8000;
var vReintentsEnquesta= 10;

var vDefaultProgramTitol="En Directe Catalunya Ràdio";
var vDefaultProgramImageCap="/endirecte/img/cap_generic.jpg";
var vDefaultProgramPhone="Els comentaris no estan activats";
var vDefaultProgramMail="Els comentaris no estan activats";
var vDefaultTheme= THEME_ORANGE;
var vDefaultNomModerador= 'moderadora';

var vNomModerador = vDefaultNomModerador;

var labelFotoPetita = 'petita';
var labelFotoGran = '328x310';

/**
 * DivTitol 
 * @description: Titol BC En Directe
 */
var DivTitol = Class.create(Component, {
	
	initialize: function($super, uid) {
		$super(uid);
		this.presentation = new DivTitolPresentation(this.id);
	},
	
	update: function($super, data) {
		this.data["titol"]="";
		this.data["thumb"]="";
		try{this.data["titol"] = data.item.titol; if(this.data["titol"]==undefined) throw("no hi ha titol");}
		catch(error){this.data["titol"] = ""; trace("no hi ha titol");}

		try{this.data["thumb"] = (filterByAttribute(data.item.ucs.uc,'type','icr_foto')[0]).imatge; if(this.data["thumb"]==undefined) throw("no data");}
		catch(error){this.data["thumb"] = ""; trace("no hi ha thumb");}

		this.presentation.pinta(this.data);
	}
	
});

/**
 * DivLastPlayed 
 * @description: LastPlayed
 * this.data["llistaBCs"][0] = BC_Actual
 * this.data["llistaBCs"][i] = lastPlayed[i]
 */
var DivLastPlayed = Class.create(Component, {
	
	initialize: function($super, uid) {
		$super(uid);
		this.presentation = new DivLastPlayedPresentation(this.id);
		this.data["llistaBCs"]= new Array();
		this.data["llistaTitolsBCs"]= new Array();
	},
	
	update: function($super, data) {
		
		var vNumBCs= this.data["llistaBCs"].length;
		for (var i=0; i< vNumBCs; i++){
			this.data["llistaBCs"].pop();
			this.data["llistaTitolsBCs"].pop();
		}

		this.data["llistaBCs"][0]= BC_Actual;
		this.data["llistaTitolsBCs"][0]="Torna al directe"; //Encara no tenim el titol
		
		var numLimit = 4;
		try { 
			if (isArray(data.items.item)){
				if ((data.items.item.length) < numLimit) numLimit= data.items.item.length;
			}
			else if (data.items.item!= undefined){
				numLimit=1;
			}
			else{
				numLimit=0;
			}
		}
		catch(error){numLimit=0;}
		
		if (numLimit==1){
			try{this.data["llistaBCs"][1]=((data.items.item.url).split("idint=")[1]).split("&ucs")[0];if(this.data["llistaBCs"][1]==undefined) throw("no data");}
			catch(error){this.data["llistaBCs"][1] = ""; trace("LastPlayed[1]: "+error);}

			try{this.data["llistaTitolsBCs"][1]=data.items.item.titol;if(this.data["llistaTitolsBCs"][1]==undefined) throw("no data");}
			catch(error){this.data["llistaTitolsBCs"][1] = ""; trace("LastPlayed[1]: "+error);}
		}else{
			for (var i=1; i<(numLimit+1); i++){
				try{this.data["llistaBCs"][i]=((data.items.item[i-1].url).split("idint=")[1]).split("&ucs")[0];if(this.data["llistaBCs"][i]==undefined) throw("no data");}
				catch(error){this.data["llistaBCs"][i] = ""; trace("LastPlayed["+i+": "+error);}
	
				try{this.data["llistaTitolsBCs"][i]=data.items.item[i-1].titol;if(this.data["llistaTitolsBCs"][i]==undefined) throw("no data");}
				catch(error){this.data["llistaTitolsBCs"][i] = ""; trace("LastPlayed["+i+": "+error);}
			}			
		}
		

		numBCs= this.data["llistaBCs"].length;
		//If Main Content is not refreshing, the selected BC will be pushed down
		if (!vRefreshMainContent && indexLastSelected<(numBCs-1)){indexLastSelected++;}

		this.presentation.pinta(this.data);

	}
	
});

/**
 * DivMenuUC 
 * @description: Llistat UCs
 * 
 */
var DivLlistaUC = Class.create(Component, {
	
	initialize: function($super, uid) {
		$super(uid);
		this.vNumUcs= 0;
		this.presentation = new DivLlistaUCPresentation(this.id);
	},
	
	update: function($super, data) {
		//Comprovem el numero de ucs
		this.vNumUcs=0;
		try{this.vNumUcs= data.item.ucs.uc.length;}
		catch(error){this.vNumUcs=0;}
		
		try{this.data["id_bloc"]= data.item.id_bloc; if(this.data["id_bloc"]==undefined) throw("no data");}
		catch(error){this.data["id_bloc"]= ""; trace("llistaUC: no hi id_bloc");}

		try{this.data["titol"] = data.item.titol; if(this.data["titol"]==undefined) throw("no hi ha titol");}
		catch(error){this.data["titol"] = ""; trace("no hi ha titol");}

		//Omplim els ucs; El 1r es el main!!
		this.data["ucMenuTitle"]= new Array();
		this.data["ucContent"]= new Array();
		trace("vNumUcs:"+this.vNumUcs);
		if (this.vNumUcs > 0){
			for (var i= 0; i< this.vNumUcs; i++){
				try{
					this.data["ucContent"][i]= new Hash();
					this.data["ucContent"][i]["ucType"]= data.item.ucs.uc[i]["@type"];
					try{this.data["ucContent"][i]["ucSubType"]= data.item.ucs.uc[i]["@subType"];; if(this.data["ucContent"][i]["ucSubType"]==undefined) throw("no hi ha subType");}
					catch(error){this.data["ucContent"][i]["ucSubType"]= ""; trace("no hi ha subType");}															
					trace(this.data["ucContent"][i]["ucType"]);
					trace(this.data["ucContent"][i]["ucSubType"]);										
					switch (this.data["ucContent"][i]["ucType"]){
						case "icr_apunt":
							this.loadDataApuntUC(data.item.ucs.uc[i], i);
							break;

						case "dty_enquest":
							this.loadDataEnquestaUC(data.item.ucs.uc[i], i);
							break;

						case "wcr_galeria":
							//El ucMenuTitle es una imatge
							this.loadDataGaleriaUC(data.item.ucs.uc[i], i);
							break;

						case "icr_foto": 
							//El ucMenuTitle es una imatge
							this.loadDataFotoUC(data.item.ucs.uc[i], i);
							break;

						case "icr_link":
							this.loadDataLinksUC(data.item.ucs.uc[i], i);
							break;																												
					}
				}
				catch(error){
				}
			}
		}
		//trace('Num UCS: '+this.vNumUcs);
		this.presentation.pinta(this.data);
	},
	
	/**
	 * loadDataApuntUC
	 * Carrega la info d'un UC de tipus Apunt
	 * @param data: XMLObjectTree - xml item icr_bloc, situat al uc[i]
	 * @param i: numero de uc
	 */
	loadDataApuntUC: function (data,i){
		
		if (this.data["ucContent"][i]["ucSubType"] == 'video') {		
		this.data["ucMenuTitle"][i]= '<div class="videothumb"><img alt="vídeo" src="img/ico_video.gif"/></div>';			
		} else if (this.data["ucContent"][i]["ucSubType"] == 'tresac') {		
		this.data["ucMenuTitle"][i]= '<div class="videothumb"><img alt="vídeo" src="img/ico_video.gif"/></div>';			
		} else {
		try{this.data["ucMenuTitle"][i]= data.avantitol; if(this.data["ucMenuTitle"][i]==undefined) throw("no data");}
		catch(error){this.data["ucMenuTitle"][i]= ""; trace("icr_apunt: no hi ha avantitol");}
		}
			
		try{this.data["ucContent"][i]["title"]= data.titol; if(this.data["ucContent"][i]["title"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["title"] = ""; trace("icr_apunt: no hi ha titol");}
	
		try{this.data["ucContent"][i]["text"]= data.descripcio; if(this.data["ucContent"][i]["text"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["text"] = ""; trace("icr_apunt: no hi ha text");}
	
		try{this.data["ucContent"][i]["image"]= data.image["#text"]; if(this.data["ucContent"][i]["image"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["image"] = ""; trace("icr_apunt: no hi ha image");}
	
		try{this.data["ucContent"][i]["footer"]= data.image["@footer"]; if(this.data["ucContent"][i]["footer"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["footer"] = ""; trace("icr_apunt: no hi ha footer");}

		try{this.data["ucContent"][i]["id"]= data.id; if(this.data["ucContent"][i]["id"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["id"] = ""; trace("icr_apunt: no hi ha id");}
		
	},
	
	/**
	 * loadDataEnquestaUC
	 * Carrega la info d'un UC de tipus Enquesta
	 * @param data: XMLObjectTree - xml item icr_bloc, situat al uc[i]
	 * @param i: numero de uc
	 */
	 loadDataEnquestaUC: function (data, i){
		try{
			var vIdEnquesta= data.id;
			var v_xmlObjTree = new XML.ObjTree();
			var v_url = '/pcatradio/endirecte/icrItem.jsp?item=enquesta&idint='+vIdEnquesta;
			var v_params = {
				method:       "get"
			};
			var v_xmlEnquesta= v_xmlObjTree.parseHTTP( v_url, v_params); //Sync, by the moment...
			
			try{this.data["ucMenuTitle"][i]= v_xmlEnquesta.item.titol; if(this.data["ucMenuTitle"][i]==undefined) throw("no data");}
			catch(error){this.data["ucMenuTitle"][i]= ""; trace("dty_enquesta: no hi ha titol");}

			this.data["ucContent"][i]["title"]= this.data["ucMenuTitle"][i]; //Enquesta

			try{this.data["ucContent"][i]["text"]= v_xmlEnquesta.item.descripcio; if(this.data["ucContent"][i]["text"]==undefined) throw("no data");}
			catch(error){this.data["ucContent"][i]["text"] = ""; trace("dty_enquesta: no hi ha text");}
			
			try{this.data["ucContent"][i]["idServei"]= v_xmlEnquesta.item.id_servei; if(this.data["ucContent"][i]["idServei"]==undefined) throw("no data");}
			catch(error){this.data["ucContent"][i]["idServei"] = ""; trace("dty_enquesta: no hi ha idServei");}

			try{this.data["ucContent"][i]["id"]= v_xmlEnquesta.item.idint; if(this.data["ucContent"][i]["id"]==undefined) throw("no data");}
			catch(error){this.data["ucContent"][i]["id"] = ""; trace("dty_enquesta: no hi ha id");}

			this.data["ucContent"][i]["options"]= new Array();
			this.data["ucContent"][i]["values"]= new Array();
			try{
				var vNumOptions= v_xmlEnquesta.item.options.option.length;
				//PRE: tenim mes d'una opcio
				for (var j=0; j<vNumOptions; j++){
					this.data["ucContent"][i]["options"][j]= v_xmlEnquesta.item.options.option[j]["#text"];
					this.data["ucContent"][i]["values"][j]= v_xmlEnquesta.item.options.option[j]["@order"];
				}
			}catch(error){}
			
			this.data["ucContent"][i]["voteText"]= vEnquestaVoteText;
			this.data["ucContent"][i]["resultsText"]= vEnquestaResultsText;
		}
		catch(error){
			this.data["ucMenuTitle"][i]="";
			this.data["ucContent"][i]["title"]="";
		}		
	},
	
	/**
	 * loadDataGaleriaUC
	 * Carrega la info d'un UC de tipus Galeria
	 * @param data: XMLObjectTree - xml item icr_bloc, situat al uc[i]
	 * @param i: numero de uc
	 * this.data["ucContent"][i]["gallery"][j] contains:
	 * - src: the image source URL (full image)
	 * - thumb: the image's thumb source URL
	 * - title: the image's name
	 * - desc: the image's description
	 */
	 loadDataGaleriaUC: function (data, i){
		try{this.data["ucContent"][i]["title"]= data.titol; if(this.data["ucContent"][i]["title"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["title"] = ""; trace("icr_galeria: no hi ha titol");}

		try{this.data["ucContent"][i]["id"]= data.id; if(this.data["ucContent"][i]["id"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["id"] = ""; trace("icr_galeria: no hi ha id");}

		this.data["ucContent"][i]["gallery"]= new Array();
		
		try{
			var vNumImages;
			if (data.igallery.images!= undefined && isArray(data.igallery.images)){
				vNumImages= data.igallery.images.length;
			}
			else{
				vNumImages= 0;
			}
			//trace("Num imatges de la galeria: "+vNumImages);
			
			if (vNumImages>0){
				this.data["ucMenuTitle"][i]= '<div class="gallerythumb"><img alt="' + data.thumbnail["@description"] + '" src="' + data.thumbnail["#text"] + '"/></div>';
				for (var j=0; j<vNumImages; j++){
					this.data["ucContent"][i]["gallery"][j]= new Hash();

					try{this.data["ucContent"][i]["gallery"][j]["thumb"]= filterByAttribute(data.igallery.images[j].image,'label',labelFotoPetita)[0]["#text"]; if(this.data["ucContent"][i]["gallery"][j]["thumb"]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["gallery"][j]["thumb"] = ""; trace("icr_galeria: no hi ha thumb");}
					
					try{this.data["ucContent"][i]["gallery"][j]["src"]= filterByAttribute(data.igallery.images[j].image,'label',labelFotoGran)[0]["#text"]; if(this.data["ucContent"][i]["gallery"][j]["src"]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["gallery"][j]["src"] = ""; trace("icr_galeria: no hi ha foto gran");}
					
					try{this.data["ucContent"][i]["gallery"][j]["title"]= data.igallery.images[j]["@footer"]; if(this.data["ucContent"][i]["gallery"][j]["title"]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["gallery"][j]["title"] = ""; trace("icr_galeria: no hi ha footer");}

					this.data["ucContent"][i]["gallery"][j]["desc"]= "";
				}
			}
		}catch(error){this.data["ucMenuTitle"][i]="";trace("wcr_galeria: no hi ha imatges");}		
	},
	/**
	 * loadDataFotoUC
	 * Carrega la info d'un UC de tipus Foto
	 * @param data: XMLObjectTree - xml item icr_bloc, situat al uc[i]
	 * @param i: numero de uc
	 */	
	loadDataFotoUC: function (data, i){
		try{
			var vImgTmp= data.imatge; 
			if(vImgTmp==undefined){ throw("no data");}
			else {this.data["ucMenuTitle"][i]='<img alt="" src="'+vImgTmp+'"/>'}
		}
		catch(error){this.data["ucMenuTitle"][i]= ""; trace("icr_foto: no hi ha avantitol");}
	
		try{this.data["ucContent"][i]["title"]= data.promo; if(this.data["ucContent"][i]["title"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["title"] = ""; trace("icr_foto: no hi ha titol");}

		try{this.data["ucContent"][i]["image"]= data.imatgeTarget["#text"]; if(this.data["ucContent"][i]["image"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["image"] = ""; trace("icr_foto: no hi ha image");}

		try{this.data["ucContent"][i]["footer"]= data.imatgeTarget["@footer"]; if(this.data["ucContent"][i]["footer"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["footer"] = ""; trace("icr_foto: no hi ha footer");}
		
		try{this.data["ucContent"][i]["id"]= data.id; if(this.data["ucContent"][i]["id"]==undefined) throw("no data");}
		catch(error){this.data["ucContent"][i]["id"] = ""; trace("icr_foto: no hi ha id");}
		
	},
	/**
	 * loadDataLinksUC
	 * Carrega la info d'un UC de tipus Links
	 * @param data: XMLObjectTree - xml item icr_bloc, situat al uc[i]
	 * @param i: numero de uc
	 */	
	loadDataLinksUC: function (data, i){	
		this.data["ucContent"][i]["text"]= vTextLinks;
	
		this.data["ucContent"][i]["itemsText"]= new Array();
		this.data["ucContent"][i]["itemsUrl"]= new Array();
		this.data["ucContent"][i]["itemsComment"]= new Array();
		this.data["ucContent"][i]["itemsImage"]= new Array();
		this.data["ucContent"][i]["itemsFooter"]= new Array();
		
		try{
			var vNumLinks;
			
			if (data.item!= undefined && isArray(data.item)){
				vNumLinks= data.item.length;
			}
			else{
				vNumLinks= (data.item != undefined) ? 1: 0;
			}
			//trace("vNumLinks: "+vNumLinks);			

			this.data["ucContent"][i]["enableTN"]= (data.id == "noticia")? true : false;
			trace("Component:enableTN:"+this.data["ucContent"][i]["enableTN"]);

			this.data["ucContent"][i]["enableESP"]= (data.id == "esport")? true : false;
			trace("Component:enableESP:"+this.data["ucContent"][i]["enableESP"]);

			if (this.data["ucContent"][i]["enableTN"]){
				this.data["ucMenuTitle"][i]= vTitolNoticies;
				this.data["ucContent"][i]["title"]= vTitolNoticies;
				this.data["ucContent"][i]["text"]= ""; //No volem que presenti el text del enllaç

			} else if (this.data["ucContent"][i]["enableESP"]){
				this.data["ucMenuTitle"][i]= vTitolEsports;
				this.data["ucContent"][i]["title"]= vTitolEsports;
				this.data["ucContent"][i]["text"]= ""; //No volem que presenti el text del enllaç

			} else{
				this.data["ucMenuTitle"][i]= vTitolLinks;
				this.data["ucContent"][i]["title"]= vTitolLinks;				
			}

			try{this.data["ucContent"][i]["id"]= data.id; if(this.data["ucContent"][i]["id"]==undefined) throw("no data");}
			catch(error){this.data["ucContent"][i]["id"] = ""; trace("icr_link: no hi ha id");}
			
			if (vNumLinks==1){
				try{this.data["ucContent"][i]["itemsText"][0]= data.item.titol; if(this.data["ucContent"][i]["itemsText"][0]==undefined) throw("no data");}
				catch(error){this.data["ucContent"][i]["itemsText"][0] = ""; trace("icr_link: no hi ha text");}

				try{this.data["ucContent"][i]["itemsUrl"][0]= data.item.url; if(this.data["ucContent"][i]["itemsUrl"][0]==undefined) throw("no data");}
				catch(error){this.data["ucContent"][i]["itemsUrl"][0] = ""; trace("icr_link: no hi ha url");}

				try{this.data["ucContent"][i]["itemsComment"][0]= data.item.descripcio; if(this.data["ucContent"][i]["itemsComment"][0]==undefined) throw("no data");}
				catch(error){this.data["ucContent"][i]["itemsComment"][0] = ""; trace("icr_link: no hi ha descripcio");}
				
				try{this.data["ucContent"][i]["itemsImage"][0]= data.item.image["#text"]; if(this.data["ucContent"][i]["itemsImage"][0]==undefined) throw("no data");}
				catch(error){this.data["ucContent"][i]["itemsImage"][0] = ""; trace("icr_link: no hi ha image");}

				try{this.data["ucContent"][i]["itemsFooter"][0]= data.item.image["@footer"]; if(this.data["ucContent"][i]["itemsFooter"][0]==undefined) throw("no data");}
				catch(error){this.data["ucContent"][i]["itemsFooter"][0] = ""; trace("icr_link: no hi ha footer");}
				
			}
			else{
				for (var j=0; j<vNumLinks; j++){
					try{this.data["ucContent"][i]["itemsText"][j]= data.item[j].titol; if(this.data["ucContent"][i]["itemsText"][j]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["itemsText"][j] = ""; trace("icr_link: no hi ha text");}
	
					try{this.data["ucContent"][i]["itemsUrl"][j]= data.item[j].url; if(this.data["ucContent"][i]["itemsUrl"][j]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["itemsUrl"][j] = ""; trace("icr_link: no hi ha url");}
	
					try{this.data["ucContent"][i]["itemsComment"][j]= data.item[j].descripcio; if(this.data["ucContent"][i]["itemsComment"][j]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["itemsComment"][j] = ""; trace("icr_link: no hi ha descripcio");}
					
					try{this.data["ucContent"][i]["itemsImage"][j]= data.item[j].image["#text"]; if(this.data["ucContent"][i]["itemsImage"][j]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["itemsImage"][j] = ""; trace("icr_link: no hi ha image");}
	
					try{this.data["ucContent"][i]["itemsFooter"][j]= data.item[j].image["@footer"]; if(this.data["ucContent"][i]["itemsFooter"][j]==undefined) throw("no data");}
					catch(error){this.data["ucContent"][i]["itemsFooter"][j] = ""; trace("icr_link: no hi ha footer");}
					
				}
			}
		}catch(error){}	
	}
	
});

/**
 * DivLoginForm
 * @description: Login form or Logout Link
 */
var DivLoginForm = Class.create(Component, {
	initialize: function($super, uid) {
		$super(uid);
		this.presentation = new DivLoginFormPresentation(this.id);
	},
	update: function($super, data) {
		
		try{this.data["nom"]= data.doc.items.item.valor; if(this.data["nom"]==undefined) throw("User info: no data");}
		catch(error){this.data["nom"] = ""; /*trace("LoginForm: "+error);*/}
		
		this.presentation.pinta(this.data);
	}
});

/**
 * Postit
 * @description: draggable postit
 * If type is informed, 
 */
var Postit = Class.create(Component, {
	initialize: function($super, uid, data, type) {
		$super(uid);
		this.presentation = new PostitPresentation(uid);
		
		//Load postit info
		try{
			this.data["type"]="";
			if (type != undefined && type!= "undefined"){
				this.data["type"]= type;
			}else{
				this.data["type"]= data.type;
			}
			//trace("Tipus de postit: "+this.data["type"]);
			
			switch (this.data["type"]){
				case "webcam":	//webcam, smallPictureAndText
					this.data["titol"]="Webcam";

					try{this.data["text"]= data.data.MISSATGE["#text"]; if(this.data["text"]==undefined) throw("no data");}
					catch(error){this.data["text"]= ""; trace("Postit["+uid+"]: no text");}

					try{this.data["camera"]= data.data.ESTAT["@camera"]; if(this.data["camera"]==undefined) throw("no data");}
					catch(error){this.data["camera"]= "estudi1"; trace("Postit["+uid+"]: no camera");}
					
					try{this.data["so"]= data.data.SO["#text"]; if(this.data["so"]==undefined) throw("no data");}
					catch(error){this.data["so"]= "NO"; trace("Postit["+uid+"]: no sound");}
					
					this.data["url"]= "/pcatradio/endirecte/icrWebcam.jsp?idint="+idPrograma+"&tipus="+this.data["camera"];

					break;

				case "text": //text & bigPictureAndText
					try{this.data["titol"]= data.titol; if(this.data["titol"]==undefined) throw("no data");}
					catch(error){this.data["titol"]= ""; trace("Postit["+uid+"]: no titol");}

					try{this.data["text"]= data.entradeta; if(this.data["text"]==undefined) throw("no data");}
					catch(error){this.data["text"]= ""; trace("Postit["+uid+"]: no text");}

					try{this.data["image"]= data.url_foto; if(this.data["image"]==undefined) throw("no data");}
					catch(error){this.data["image"]= ""; trace("Postit["+uid+"]: no image");}

					break;
					
				case "enquesta":	//enquesta & pollOfer
					this.data["intents"]= vReintentsEnquesta;
					var vId= data;
					this.loadDataEnquesta(vId);
					break;

				case "links":
					this.loadDataLinks(data);
					break;																												
			}
			//Pinta!!
			this.presentation.pinta(this.data);
		}
		catch(error){
		}
	},
	

	/**
	 * loadDataEnquesta
	 * Carrega la info d'un postit de tipus Enquesta
	 * @param vIdEnquesta: id de l'enquesta
	 */
	 loadDataEnquesta: function (vIdEnquesta){
		try{
			var v_xmlObjTree = new XML.ObjTree();
			var v_url = '/pcatradio/endirecte/icrItem.jsp?item=enquesta&idint='+vIdEnquesta;
			var v_params = {
				method:       "get"
			};
			v_xmlObjTree.force_array = ["option"];
			this.data["intents"] --;
			var v_xmlEnquesta= v_xmlObjTree.parseHTTP( v_url, v_params); //Sync, by the moment...

			try{this.data["id"]= v_xmlEnquesta.item.idint; if(this.data["id"]==undefined) throw("no data");}
			catch(error){this.data["id"] = ""; trace("postit enquesta: no hi ha id: Enquesta no generada!!"); throw("Enquesta no generada");}

			this.data["titol"]= "Enquesta";

			try{this.data["text"]= v_xmlEnquesta.item.descripcio; if(this.data["text"]==undefined) throw("no data");}
			catch(error){this.data["text"] = ""; trace("dty_enquesta: no hi ha text");}
			
			try{this.data["idServei"]= v_xmlEnquesta.item.id_servei; if(this.data["idServei"]==undefined) throw("no data");}
			catch(error){this.data["idServei"] = ""; trace("postit enquesta: no hi ha idServei");}


			this.data["options"]= new Array();
			this.data["values"]= new Array();
			try{
				var vNumOptions= v_xmlEnquesta.item.options.option.length;
				for (var j=0; j<vNumOptions; j++){
					try{this.data["options"][j]= v_xmlEnquesta.item.options.option[j]["#text"]; if(this.data["options"][j]==undefined) throw("no data");}
					catch(error){this.data["options"][j] = ""; trace("postit enquesta: no hi ha option:"+j);}
		
					try{this.data["values"][j]= v_xmlEnquesta.item.options.option[j]["@order"]; if(this.data["values"][j]==undefined) throw("no data");}
					catch(error){this.data["values"][j] = ""; trace("postit enquesta: no hi ha value:"+j);}
				}
			}catch(error){}
			
			try{this.data["pollId"]= v_xmlEnquesta.item.id_servei; if(this.data["pollId"]==undefined) throw("no data");}
			catch(error){this.data["pollId"] = ""; trace("postit enquesta: no hi ha idServei");}

		}
		catch(error){
			this.data["titol"]= "";
			if (this.data["intents"] > 0) {setTimeout("vpostitLayer.getPostit('"+this.id+"').update("+vIdEnquesta+");",vIntervalReintentEnquesta)};
			throw error;
		}		
	},

	/**
	 * loadDataLinks
	 * Carrega la info d'un postit de tipus Links
	 * @param data: XMLObjectTree - xml postits, situat al item links
	 */	
	loadDataLinks: function (data){	
		try{this.data["titol"]= data.titol; if(this.data["titol"]==undefined) throw("no data");}
		catch(error){this.data["titol"]= vTitolLinks; trace("postit links: no hi ha titol");}

		try{this.data["text"]= data.entradeta; if(this.data["text"]==undefined) throw("no data");}
		catch(error){this.data["text"] = ""; trace("postit links: no hi ha entradeta");}

		this.data["itemsText"]= new Array();
		this.data["itemsUrl"]= new Array();
		this.data["itemsComment"]= new Array();
		
		try{
			var vNumLinks;
			if (data.links!= undefined){
				vNumLinks= data.links["@link-count"];
			}
			else{
				vNumLinks= 0;
			}
			//trace("vNumLinks: "+vNumLinks);			
			
			if (vNumLinks==1){
				try{this.data["itemsText"][0]= data.links.link.name; if(this.data["itemsText"][0]==undefined) throw("no data");}
				catch(error){this.data["itemsText"][0] = ""; trace("postit links: no hi ha titol");}
		
				try{this.data["itemsUrl"][0]= data.links.link.url; if(this.data["itemsUrl"][0]==undefined) throw("no data");}
				catch(error){this.data["itemsUrl"][0] = ""; trace("postit links: no hi ha url");}
		
				try{this.data["itemsComment"][0]= data.links.link.description; if(this.data["itemsComment"][0]==undefined) throw("no data");}
				catch(error){this.data["itemsComment"][0] = ""; trace("postit links: no hi ha description");}
			}
			else{
				for (var j=0; j<vNumLinks; j++){
					try{this.data["itemsText"][j]= data.links.link[j].name; if(this.data["itemsText"][j]==undefined) throw("no data");}
					catch(error){this.data["itemsText"][j] = ""; trace("postit links: no hi ha titol:"+j);}
			
					try{this.data["itemsUrl"][j]= data.links.link[j].url; if(this.data["itemsUrl"][j]==undefined) throw("no data");}
					catch(error){this.data["itemsUrl"][j] = ""; trace("postit links: no hi ha url:"+j);}
			
					try{this.data["itemsComment"][j]= data.links.link[j].description; if(this.data["itemsComment"][j]==undefined) throw("no data");}
					catch(error){this.data["itemsComment"][j] = ""; trace("postit links: no hi ha description:"+j);}
				}
			}
		}catch(error){}	
	},

	//Load postit info (actually, only for webcam)	
	update: function(data) {
		try{
			switch (this.data["type"]){
				case "webcam":	//webcam, smallPictureAndText
					this.data["titol"]="Webcam";

					try{this.data["text"]= data.data.MISSATGE["#text"]; if(this.data["text"]==undefined) throw("no data");}
					catch(error){this.data["text"]= ""; trace("Postit["+uid+"]: no text");}
					
					this.data["url"]= "/pcatradio/endirecte/icrWebcam.jsp?idint="+idPrograma;
					break;
					
				case "enquesta":	//enquesta & pollOfer
					var vId= data;
					this.loadDataEnquesta(vId);
					break;					
			}
			if (this.data["type"]=="enquesta"){
				//Pinta!!
				this.presentation.pinta(this.data);
			}else{
				//Repinta!!
				this.presentation.repinta(this.data);
			}
		}
		catch(error){}
	}
});


/**
 * DivOpina
 * @description: Opina BC En Directe
 */
var DivOpina = Class.create(Component, {

	initialize: function($super, uid) {
		$super(uid);
		this.presentation = new DivOpinaPresentation(this.id);
	},
	
	update: function($super, data) {
		
		trace("DivOpina.update");

		var vNumOpiniones;
		if ((data.comments != undefined) && (data.comments.comment != undefined)){
			vNumOpiniones= data.comments.comment.length;
		}
		else{
			vNumOpiniones= 0;
		}
		//trace("vNumOpiniones: "+vNumOpiniones);

		var arType = new Array();
		var arHora = new Array();
		var arUser = new Array();
		var arLocalitat = new Array();
		var arText = new Array();			
		var arMultimedia = new Array();			
	
		var valorType;
		var valorHora;
		var valorUser;
		var valorLocalitat;
		var valorText;
		var valorMultimedia;
							
		if (vNumOpiniones>0){
			
			for (var j=0; j<vNumOpiniones; j++){
				
				try{valorType= data.comments.comment[j].type; if(valorType==undefined) throw("no data");}
				catch(error){valorType = ""; trace("opina["+j+"]: no type");}

				try{valorHora= data.comments.comment[j].date; if(valorHora==undefined) throw("no data");}
				catch(error){valorHora = ""; trace("opina["+j+"]: no date");}

				try{valorUser= data.comments.comment[j].user; if(valorUser==undefined) throw("no data");}
				catch(error){valorUser = ""; trace("opina["+j+"]: no user");}

				try{valorLocalitat= data.comments.comment[j].localitat; if(valorLocalitat==undefined) throw("no data");}
				catch(error){valorLocalitat = ""; trace("opina["+j+"]: no localitat");}

				try{valorText= data.comments.comment[j].text; if(valorText==undefined) throw("no data");}
				catch(error){valorText = ""; trace("opina["+j+"]: no text");}

				if (valorType=='MICRO'){
					try{valorMultimedia= (data.comments.comment[j].multimedia).replace('/deliverty/ccrtvi/resources/','/multimedia/'); if(valorMultimedia==undefined) throw("no data");}
					catch(error){valorMultimedia = ""; trace("opina["+j+"]: no multimedia");}
				}
				else {valorMultimedia="";}

				//trace('info opinion: '+valorType.toLowerCase()+'   '+valorHora+'   '+valorUser+'   '+valorLocalitat+'   '+valorText+' <<<<');
				
				arType[j] = valorType.toLowerCase();
				arHora[j] = valorHora;
				arUser[j] = valorUser;
				arLocalitat[j] = valorLocalitat;
				arText[j] = valorText;
				arMultimedia[j] = valorMultimedia;
				
			} //for

		}	

		try{
			var numOpinionsIniciDebat = getNumOpinionsTotals();
			var numOpinionsSerialized = getNumOpinionsSerialized();
			numOpinionsIniciDebat = parseInt(numOpinionsIniciDebat);
			numOpinionsSerialized = parseInt(numOpinionsSerialized);
			try {
				var numTotalOpinions = parseInt(data.comments["@total"]);
				this.data["totalComments"]=numTotalOpinions-numOpinionsIniciDebat+numOpinionsSerialized;
			}
			catch(error) {this.data["totalComments"]=arType.length;}
			
			this.data["type"] = arType;
			this.data["hora"] = arHora;
			this.data["user"] = arUser;
			this.data["localitat"] = arLocalitat;
			this.data["text"] = arText;
			this.data["multimedia"] = arMultimedia;
			
			if(this.data["type"]==undefined) throw("no hi ha opina");
		}			
		catch(error){this.data["type"] = ""; trace("no hi ha opina");}

		this.presentation.pinta(this.data);
	}
	
});

/**
 * Mosca
 * @description: Mosca
 */
var Mosca = Class.create(Component, {
	initialize: function($super, uid) {
		$super(uid);
		this.presentation = new MoscaPresentation(this.id);
	},
	update: function($super, data) {
		//titol
		try{this.data["text"] = data.data.TEXT["#text"]; if(this.data["text"]==undefined) throw("no hi ha text");}
		catch(error){this.data["text"] = ""; trace("Mosca: no hi ha text");}

		this.presentation.pinta(this.data);
	}
});

/**
 * 
 */
var Programa = Class.create(Component, {
	
	initialize: function($super, uid) {
		$super(uid);
		this.presentation = new ProgramaPresentation(this.id);
	},
	
	/**
	 * Updates the idDebat and calls-back to load Program Data
	 * If there is not any active program, hides the comment area
	 * 	and removes observer modulComments from RefresherOpina
	 * If it comes a new active program, shows the comment area
	 *  and adds modulComments observing RefresherOpina
	 * 
	 * If debat's name is "Genèric", we put the default debat title
	 * If debat's name is "DESACTIVAT", we disable the participation zone
	 */
	update: function($super, data) {
		
		trace("--------Programa.update");

		try{this.data["idPrograma"] = data.data.IDPRG["#text"]; if(this.data["idPrograma"]==undefined) throw("no data");}
		catch(error){this.data["idPrograma"] = ""; trace("no hi ha idPrograma");}
		
		if (idPrograma=="" && this.data["idPrograma"]!=""){
			InterfaceAgent.restoreLiveInterface(restartApp);
		}
		idPrograma= this.data["idPrograma"];

		try{this.data["idDebat"] = data.data.IDDEB["#text"]; if(this.data["idDebat"]==undefined) throw("no data");}
		catch(error){this.data["idDebat"] = ""; trace("no hi ha idDebat");}
		idDebat= this.data["idDebat"];

		if (idDebat!=""){
			try{this.data["debat"] = data.data.DESCDEB["#text"]; if(this.data["debat"]==undefined) throw("no data");}
			catch(error){this.data["debat"] = vDefaultTitolMissatges; trace("no hi ha descripcio debat");}
			
			if ( (this.data["debat"]).indexOf("[") > -1 ){
				this.data["debat"]= (this.data["debat"]).split(" [")[0];
			}
			if (this.data["debat"]=="Genèric"){
				this.data["debat"]=vDefaultTitolMissatges;
			} else if (this.data["debat"]=="DESACTIVAT"){
				idDebat="";
				this.data["idDebat"] ="";
			}
		}

		
		var vDebatExists= InterfaceAgent.isParticipationContent();
		trace("vDebatExists:"+vDebatExists);
		if (vDebatExists && idDebat=="" ){
			trace ("Desactivem els comentaris");
			var vTmp= HTML('HideCommentRows');
			vRefresherOpina.observers.removeObserver(vmodulComments);
			InterfaceAgent.hideCommentRows(vTitolHiddenComments,vTmp);
		}
		else if (!vDebatExists && idDebat!="" ){
			trace ("Activem els comentaris");
			InterfaceAgent.showCommentRows();
			vRefresherOpina.observers.addObserver(vmodulComments);
		}

		if (idPrograma!=""){
			var v_xmlObjTree = new XML.ObjTree();
			var v_url= v_urlItemPrograma + this.data["idPrograma"];
			var v_params = {
				method:       "get"
				,parameters: 'dummy='+v_dataTimestamp+''+v_timestamp
			};
			
			var v_xmlObj= v_xmlObjTree.parseHTTP( v_url, v_params, loadProgramDataHelper); //async
		}
		else {this.setNoProgramData();}

	},
	
	loadProgramData: function(data){

		try{this.data["titol"] = data.item.titol; if(this.data["titol"]==undefined) throw("no data");}
		catch(error){this.data["titol"] = vDefaultProgramTitol; trace("no hi ha titol");}
		
		try{this.data["phone"] = data.item.txt_tlf; if(this.data["phone"]==undefined) throw("no data");}
		catch(error){this.data["phone"] = vDefaultProgramPhone; trace("no hi ha phone");}

		try{this.data["mail"] = data.item.txt_mail; if(this.data["mail"]==undefined) throw("no data");}
		catch(error){this.data["mail"] = vDefaultProgramMail; trace("no hi ha mail");}

		try{this.data["color"] = data.item.color; if(this.data["color"]==undefined) throw("no data");}
		catch(error){this.data["color"] = ""; trace("no hi ha color");}

		try{this.data["image_cap"] = data.item.image_cap; if(this.data["image_cap"]==undefined) throw("no data");}
		catch(error){this.data["image_cap"] = vDefaultProgramImageCap; trace("no hi ha image_cap");}

		try{this.data["codi_publi"] = data.item.codi_publi; if(this.data["codi_publi"]==undefined) throw("no data");}
		catch(error){this.data["codi_publi"] = ""; trace("no hi ha codi_publi");}
		
		
		//Get the moderation type
		try{if(data.item.tipus_mod==undefined) modType="PDMOD";else{modType = data.item.tipus_mod;} }
		catch(error){modType="PDMOD";}
		
		
		//Update global var vIdPubli only if informed
		if ((this.data["codi_publi"] !="")&&(this.data["codi_publi"] !=" ")&& (this.data["codi_publi"] !="\n")){vIdPubli= this.data["codi_publi"];}
		else {vIdPubli= vIdDefaultPubli;}
		
		this.data["colorRef"]= currentTheme;
		switch(this.data["color"]){
			case 'GRIS': this.data["colorRef"]= THEME_GREY;
				break;
			case 'BLAU': this.data["colorRef"]= THEME_BLUE;
				break;
			case 'VERD': this.data["colorRef"]= THEME_GREEN;
				break;
			case 'TARONJA': this.data["colorRef"]= THEME_ORANGE;
				break;
			case 'MARI': this.data["colorRef"]= THEME_MARINE;
				break;
			case 'CAFE': this.data["colorRef"]= THEME_COFFEE;
				break;
			case 'NEGRE': this.data["colorRef"]= THEME_BLACK;
				break;
			case 'OLIVA': this.data["colorRef"]= THEME_OLIVE;
				break;
			default: this.data["colorRef"]= vDefaultTheme;
		}
		
		this.presentation.pinta(this.data);		
	},
	
	setNoProgramData: function(){
		this.data["titol"]= vDefaultProgramTitol;
		this.data["image_cap"]= vDefaultProgramImageCap;
		this.data["phone"]= vDefaultProgramPhone;
		this.data["mail"]= vDefaultProgramMail;
		this.data["codi_publi"]= vIdDefaultPubli;
		vIdPubli= vIdDefaultPubli;
		this.data["colorRef"]= vDefaultTheme;
		
		this.presentation.pinta(this.data);
		vpostitLayer.clearAllPostits();
		disableLiveInterface();
	}	
	
});




/**
 * loadProgramDataHelper is called by parseHTTP.
 * if parseHTTP calls this.loadProgramData, the "this" reference
 * is not vcPrograma as we spect!! We need a helper function
 */
function loadProgramDataHelper(data){
	vcPrograma.loadProgramData(data);
}

/**
 * MicroObert
 * @description: util to force checkLogin on update
 */
var MicroObert = Class.create(Component, {
	
	initialize: function($super, uid) {
		$super(uid);
	},
	
	update: function($super, data) {
		var elm = $(this.id);
		if(elm) {
			elm.checkLogin();
		}
	}
});
