/*//////////////////////////////////////////////////////////*/
/*//////////////////////////AJAX////////////////////////////*/
/*//////////////////////////////////////////////////////////*/


// =========================================
// = Developed By Josema Gonzalez (EnZo)   =
// = Version 1                             =
// = http://isiajax.sourceforge.net        =
// = License: GPL (General Public License) =
// =========================================

function isiAJAX(idmain, idloader) {

	this.objAjax = null;		//Objeto XMLHttp
	this.idmain = idmain;		//Id de la capa que va a cargar el contenido nada mas abrir la web
	this.idloader = idloader;	//Id de la capa que va a hacer la funcion de cargador
	this.debug = true;		//Si es true devolvera un alert cuando haya un error al recibir los datos
	this.aborta = true;		//Si es false cancelara cualquier proceso
	this.working = false;		//Si es true significa que esta descargando, sirve para identificar si this.aborta la pondre en false
	this.noajax = 'Su navegador no es compatible para trabajar con esta web.';

	//Hace todo el proceso de transferencia
	this.Request =
		function (data) {
			var parent = this;
			data = this.Default(data);
			this.objAjax.open(data.method, data.url, data.async);
			if (data.headers)
				for (var i=0; i<data.headers.length; i+=2)
					this.objAjax.setRequestHeader(data.headers[i], data.headers[i+1])
			if (data.async) {
				this.working = true;
				this.Cargador(true);
				this.objAjax.onreadystatechange =
					function () {
						if (parent.objAjax.readyState == 4) {
							if (parent.aborta) {
								if (data.onComplete)
									data.onComplete(parent.objAjax, data);
								if ((parent.objAjax.status == 200 || parent.objAjax.status == 304) && data.onOK)
									{
										//alert("Operacion exitosa" + parent.objAjax.responseText);
										var cad=parent.objAjax.responseText;
										if(cad.search('Esta intentando insertar texto prohibido.')==-1)
										{
										 
										 if(cad.search(':ERROR@@')==-1)
										  {
											if(typeof data.mensaje != "undefined" && data.mensaje != '' )
												feedBack( data.mensaje, true );
												
										    data.onOK(parent.objAjax, data);
										 	}
										  else
										  {
												feedBack(cad,true);
												try
													{
														data.onError(null, data);
													}
													catch(e){}
										  }											
										}
										else
										{
											alert("Esta intentando insertar texto prohibido.");
											
											if(cad.search('public')==-1)
											{
												
												try{
//													closeLightWindow();													
													top.parent.parent.location.href="edit_login.php5";
												}
												catch(e){}
												window.location.href="edit_login.php5";
												
												
											}
											else{
												window.location.href="error.php5";
											}
										}
										
										if(typeof pintarGreybox != "undefined")
										{
										  if(pintarGreybox)	decoGreyboxLinks();
										}
										
										if(typeof pintarDragd != "undefined")
										  cargarGrupoContenedor();
										  
									}
								else if (data.onError)
									data.onError(parent.objAjax, data);
								else if (parent.debug)
									alert('Error1: '+parent.objAjax.status+' '+parent.objAjax.statusText);
							}
							else 
								parent.aborta = true;
							parent.Cargador(false);
							parent.working = false;
						}
						//else {alert('Pere, no sea tan impaciente')}
						
					};
			}
			this.objAjax.send(data.param);
		};


	this.actualizarWindow = 
 		function (objAjax, data){ 
		alert(data.id );
         window.top.window.document.getElementById(data.id).innerHTML = objAjax.responseText;parent.parent.GB_hide();
  		};

	//Hace el proceso correspondiente una vez recibido el objeto ajax
	this.Actualiza =
		function (objAjax, data) {
			
			switch (data.type) {
				case 1: {
					if (data.iner == 0)
						$(data.id).innerHTML = objAjax.responseText + $(data.id).innerHTML;
					else if (data.iner == 1)
						$(data.id).innerHTML = $(data.id).innerHTML + objAjax.responseText;
					else
					{						
						$(data.id).innerHTML = objAjax.responseText;
					}
					if(typeof loader != "undefined")
					{
						try{
							$(loader).style.display='none';
						}catch(e){}
					}

					break;
				}
				case 2: {
					var objxml = new isiXML(objAjax.responseXML);
					data.id(objxml.Query(data.query), objAjax);
					break;
				}
				case 3: {
					if (data.iner == 0)
						$(data.id).value = objAjax.responseText + $(data.id).value;
					else if (data.iner == 1)
						$(data.id).value = $(data.id).value + objAjax.responseText;
					else
						$(data.id).value = objAjax.responseText;
					break;
				}
				case 4: {
					var obj = $(data.id);
					var objxml = new isiXML(objAjax.responseXML);
					var resultado = objxml.Query('SELECT node.value, atrib.value');
					var total = obj.options.length;
					if (total > 0)
						for (var i=0; i<=total; ++i)
							obj.remove(obj.options[i])
					for (var i=0; i<resultado.length; ++i) {
						var newone = new Option(resultado[i][0], resultado[i][1]);
						try {//Otros
							obj.add(newone, obj.options.length);
						}
						catch(ex) {//IE
							obj.add(newone, obj.options[obj.options.length]);
						}
					}
					break;
				}
				case 5: {
					eval(objAjax.responseText);
					break;
				}
				case 6: {
				window.top.window.document.getElementById(data.id).innerHTML = objAjax.responseText;parent.parent.GB_hide();
				break;
				}
			}
		};


		

	//Link normal (tipo=1)
	this.Link =
		function (url, id, codigo_respuesta, iner) {
			this.Request({
				url: this.Url(url),
				id: id,
				async: (id) ? true : false,
				mensaje: codigo_respuesta,
				iner: iner,				
				type: 1,
				onOK: this.Actualiza
			});
		};

	//Formulario (tipo=1)
	this.Form =
		function (idform, id, codigo_respuesta, iner) {
			
			var form = $(idform);
			
			this.Request({
				url: this.Url(form.action),
				method: form.method,
				id: id,
				param: this.DataForm(form),
				async: (id) ? true : false,				
				mensaje: codigo_respuesta,
				iner: iner,
				type: 1,
				onOK: this.Actualiza
			});
		};

	 //Formulario (tipo=3)
      this.FormValue =
		function (idform, id, codigo_respuesta, iner) {
			var form = $(idform);
			this.Request({
				url: this.Url(form.action),
				method: form.method,
				id: id,
				param: this.DataForm(form),
				async: (id) ? true : false,
				mensaje: codigo_respuesta,
				iner: iner,				
				type: 3,
				onOK: this.Actualiza
			});
		};


	this.validacionRespuestaPopup =
		function (idform, id ,functionOnOk,iner) {
			var form = $(idform);
			this.Request({
				url: this.Url(form.action),
				method: form.method,
				id: id,
				param: this.DataForm(form),
				async: (id) ? true : false,
				iner: iner,
				type: 3,
				onOK: functionOnOk
			});
		};



	//Devuelve un array con los valores consultados a un xml
	this.XML =
		function (url, funcion, query) {
			this.Request({
				url: this.Url(url),
				id: funcion,
				query: query,
				type: 2,
				onOK: this.Actualiza
			});
		};

	//Para editar el valor de los inputs
	this.Value =
		function (url, id, codigo_respuesta, iner) {
			this.Request({
				url: this.Url(url),
				id: id,
				mensaje: codigo_respuesta,
				iner: iner,
				type: 3,
				onOK: this.Actualiza
			});
		};

	//Para editar las listas desplegables select
	this.Select =
		function (url, id) {
			this.Request({
				url: this.Url(url),
				id: id,
				type: 4,
				onOK: this.Actualiza
			});
		};

	//Hace un eval de lo que devuelve (tipo=4)
	this.Run =
		function (url) {
			this.Request({
				url: this.Url(url),
				type: 5,
				onOK: this.Actualiza
			});
		};

	//Para cambiar fotos
	this.Img = 
		function (url, id, w, h) {
			var temp = new Image();
			var parent = this;
			this.working = true;
			this.Cargador(true);
			temp.onload = function () {
				if (parent.aborta) {
					$(id).src = temp.src;
					if (w) $(id).width = w;
					if (h) $(id).height = h;
				}
				parent.Cargador(false);
				parent.aborta = true;
				parent.working = false;
			};
			temp.onerror = function () {
				parent.Cargador(false);
				parent.aborta = true;
				parent.working = false;
				if (parent.debug)
					alert('Error: 404 Not Found');
			};
			temp.src = url;
		};

	//Aborta cualquier peticion			//alert('aborta: '+this.aborta+'\nworking: '+this.working)
	this.Cancel = 
		function () {
			if (this.working) {
				this.Cargador(false);
				this.aborta = false;
				this.working = false;
				this.objAjax.abort();
			}
			else
				this.aborta = true;
		};

	//Recoge y da formato a los datos de un formulario para enviarlos
	this.DataForm =
		function (obj) {
			var resultado='';
			this.Add =
				function (nombre, valor) {
					resultado += nombre+'='+valor;
					if ((i+1) < obj.length) 
						resultado+='&';
				};
			for (i=0; i<obj.length; i++) {
				var tipo = obj[i].type;
				var nombre = obj[i].name;
				if (tipo == 'select-multiple') {
					var n=0;
					for (j=0; j<obj[i].options.length; j++)
						if (obj[i].options[j].selected)
							this.Add(nombre+'['+(n++)+']',obj[i].options[j].value);
				}
				else if (tipo == 'radio' || tipo == 'checkbox') {
					if (obj[i].checked) 
					this.Add(nombre,obj[i].value);
				}
				else
					this.Add(nombre,obj[i].value);
			}
			return (resultado);
		};

	//Recoge atributos de un elemento CSS - (Script oficial: http://www.squidfingers.com/code/snippets/?id=getcssprop)
	this.CSS =
		function (obj, atributo) {
			if (obj.style[atributo])
				return (obj.style[atributo]);
			else if (obj.currentStyle)
				return (obj.currentStyle[atributo]);
			else if (document.defaultView && document.defaultView.getComputedStyle)
				return document.defaultView.getComputedStyle(obj,"").getPropertyValue(atributo);
			else
				return (null);
		};

	//Retorna los valores por defecto de los parametos y agrega las cabeceras post si las necesitara
	this.Default =
		function (obj) {
			var argumentos = {			
				url: this.homepage,
				method: 'GET',
				async: true
			};
			for (var i in argumentos)
				if (obj[i] == null)
					obj[i] = argumentos[i];
			if (obj.method.toUpperCase() == 'GET' && obj.param) {
				obj.url += (obj.url.indexOf('?') == -1) ? '?'+obj.param : '&'+obj.param;
				obj.param = null;
			}
			else if (obj.method.toUpperCase() == 'POST' && obj.headers == null)
				obj.headers = ['Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-1'];
			return (obj);
		};

	//Devuelve la url a partir de la almohadilla 
	this.Url =
		function (str) {
			var resultado='', obj = str.split('#');
			if (obj.length > 1) {
				for (var i=1; i<obj.length; ++i) {
					resultado += obj[i];
					if ((i+1) < obj.length) 
						resultado+='#';
				}
			}
			else
				resultado = obj[0];
			return (resultado);
		};

	//Gestiona la capa cargador para ponerla visible o no
	this.Cargador =
		function (onoff, id) {
			if (id == null)
				id = this.idloader;
			//if (id && (this.working || !onoff))
			if (id)
				$(id).style.visibility = (onoff) ? 'visible' : 'hidden';
		};
	this.Cargador(false);

	//Crea el objeto XMLHTTP
	if (typeof XMLHttpRequest != 'undefined')	//Mozilla & OPERA
		this.objAjax = new XMLHttpRequest();
	else if (typeof ActiveXObject != 'undefined') //IE
		this.objAjax = (Number(navigator.appVersion.substr(0,3)) >= 5) ? new ActiveXObject('Msxml2.XMLHTTP') : new ActiveXObject('Microsoft.XMLHTTP');
	if (this.objAjax == null) 
		alert(this.noajax);
	else if (this.idmain && window.location.hash != '' && window.location.hash != '#')
		this.Link(window.location.href, this.idmain);
}
function $(id) {
	return (document.getElementById(id));
}






/*
url: '',			//url web
method: 'GET',		//metodo de transferencia
async: true,		//si es true recibira datos si es false no
param: null,		//parametos en plan: var1=valor1&var2=valor2
id: null,			//id donde va a ser cargado
headers: null,		//cabeceras
iner: null,
type: null,
onOK: null,
onError: null,
onComplete: null
*/

///////////////////////////////////////////////////////////////////////////////
// Función responsable de instanciar el objeto ajax, es utilizada porque en algunos
// casos se necesita que el retorno de la función arroje un dato especifico que
// no tenga que ser atendido en un div, input, textarea etc.., si no que sea un
// dato para una comparación etc..
//
// parameter: 
// return: El objeto ajax
//
// Autor: Jhoneider Herrera
// Fecha de Creación: 18/01/2008
//
// Modificaciones:
///////////////////////////////////////////////////////////////////////////////


function nuevoAjax(){
	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;
}
















/*//////////////////////////////////////////////////////////*/
/*////////////////////////GENERAL///////////////////////////*/
/*//////////////////////////////////////////////////////////*/

//Redimencion del ifreme q contiene un modulo
/*function redimencionarIframeModulo(idModulo)
{
	var hFrame; // Variable para Height del iFrame

	if(document.frames){
	 	// ES IE	
		hFrame = document.frames(idModulo).document.body.scrollHeight-4;	 	
	}
	else
	{
	 	// ES OTRO browser
	 	hFrame = frames[idModulo].document.body.scrollHeight;
	}
	
	document.getElementById(idModulo).height = hFrame;
	//document.getElementById(idModulo).style.height = hFrame;
}*/



//Llamado Ajax para listar los video de Popular TV (Home y seccion)
function listarVideos(opcion)
{
    
	if(opcion=="losMasVistos")
	{
		var miLi_=document.getElementById("losUltimos");
		var miLi=document.getElementById(opcion);
		miLi.className="masvistos sel";
		miLi_.className="ultimos";
	}
	else if(opcion=="losUltimos")
		{
			var miLi=document.getElementById(opcion);
			var miLi_=document.getElementById("losMasVistos");
			miLi.className="ultimos sel";
			miLi_.className="masvistos";
		}	
		
	miajax.Link('cargarPopularTv.php5?opcion='+opcion,'thumbsImagenes'); 
}


// Función encargada de desplegar un popup
function abrirPopup(direccion){ 
     var opciones = "fullscreen=" + 0 + 
                 ",toolbar=" + 0 + 
                 ",location=" + 0 + 
                 ",status=" + 0 + 
                 ",menubar=" + 0 + 
                 ",scrollbars=" + 0 + 
                 ",resizable=" + 0 + 
                 ",width=" + 505 + 
                 ",height=" + 360 + 
                 ",left=" + 300 + 
                 ",top=" + 400; 
     var ventana = window.open(direccion,"Reenviar",opciones); 
}



/*Funciones utilizadas para quitar/desplegar el logo de google que aparece 
como fondo en el campo de texto del buscador que hay en la cabecera del site*/
function limpiaBuscador(obj)
{
  obj.className='buscador_sin_fondo';
}

function restauraBuscador(obj)
{
  if ((obj.value=='') || (obj.value==' '))
  {
	obj.className='buscador_con_fondo';
  } 
  else
  {
	obj.className='buscador_sin_fondo';
  }
}

/*----------------------------------------------------------------------*/



/*FUNCIONES PARA GESTIONARL EL MDULO DE "LO MAS"*/

/*Se encarga de hacer el cambio del menu
y refrescar el listado de "Lo Mas" segun la opción seleccionada*/
function cambiarMenuLoMas(opc,cantidad,conCargador,contenedor,idInput,dias,pagina)
{
	/** opc, es el número de la opcion en el menu.
	/** cantidad, es el numero de registros a mostrar
	/** conCargador, es el div donde se carga la imagen de 'loading'
	/** contenedor, div donde se cargara el contenido dinamico
	/** idInput, input type hidden que contiene el dato de la opción inicial
	**/
	if(typeof dias == "undefined")
		dias=1;
	
	var loMejorDe = "";
	var opcAnterior = document.getElementById(idInput).value;
	try
	{
	var diasAnterior = document.getElementById('menuDias').value;
	}
	catch(e)
	{
		var diasAnterior = 1;
	}
	
	if(opcAnterior != opc || dias != diasAnterior)
	{
		document.getElementById(idInput+'_'+opcAnterior).className='none';
		document.getElementById(idInput+'_'+opc).className='active';
		document.getElementById(idInput).value=opc;
		try
		{
		document.getElementById('menuDias').value=dias;
		}
		catch(e)
		{}
		
		switch(opc)
		{
			case 1:	
				loMejorDe =	 "loUltimo";
				analitycs= '/portada/pestanas/loultimo';
			break;
			
			case 2:	
				loMejorDe =	 "loMasVisto";
				analitycs= '/portada/pestanas/lomasvisto';
			break;
			
			case 3:	
				loMejorDe =	 "loMasEscuchado";
				analitycs= '/portada/pestanas/lomasescuchado';
			break;
			
			case 4:	
				loMejorDe =	 "loMasComentado";
				analitycs= '/portada/pestanas/lomascomentado';
			break;
			
			case 5:	
				loMejorDe =	 "loMasEnviado";
				analitycs= '/portada/pestanas/lomasenviado';
			break;
		}
		try{
		pageTracker._trackPageview(analitycs);
		}catch(error){
		
		}
		miajax.Cargador(true, conCargador);
		
		miajax.Request({
			url: 'lomejor.php5',
			method: 'GET',	
			contenedor:contenedor,
			contImg:conCargador,
			param: 'loMejorDe='+loMejorDe+'&numResult='+cantidad+'&opc='+opc+'&dias='+dias+"&pagina="+pagina,
			onOK:cargadorLoMas
		});
	}
}
function paginadorLoUltimo(cantidad,pagina){
	   
	   /* miajax.Cargador(true,'cargadorLoMas');
		contenedor='loMas';
		miajax.Request({
			url: RAIZ_SITIO+'lomejor.php5',
			method: 'GET',	
			contenedor:contenedor,
			contImg:'cargadorLoMas',
			param: 'loMejorDe=loUltimo&numResult='+cantidad+'&opc=1&pagina='+pagina,
			onOK:cargadorLoMas
		});*/
	
	miajax.Link(RAIZ_SITIO+'lomejor.php5?loMejorDe=loUltimo&numResult='+cantidad+'&opc=1&pagina='+pagina,'loMas');
	
	}

/*Loader de Lo MAS*/
var cargadorLoMas = function(ajax,data)
{   
	document.getElementById(data.contenedor).innerHTML = ajax.responseText;
	//miajax.Cargador(false, data.contImg);
	
}



/*FUNCIONES PARA MANIPULACION PAR EL MENU DE SECCIONES*/
function mostrarCapa(parametro){
	document.getElementById(parametro).style.display = 'block';
}

function ocultarCapa(parametro){
	document.getElementById(parametro).style.display = 'none';
}

function classactive(param){
	document.getElementById(param).className = 'activo';
}

function classnone(param){
	document.getElementById(param).className = '';
}

function subMenuDesplegado(obj){
		document.getElementById(obj).className='subMenuSel';
}

function subMenuPlegado(obj){
	document.getElementById(obj).className='subMenu';
}


/////////////////////////////////////////////
// audio.js
// Archivo javascript que Contiene las funciones empleadas
// para administrar los audios de la parte publica de COPE
//
//
//////////////////////////////////////////////

var mostrar = true; //Auxiliar para mostrar mis audios

function almacenarAudioSesion(codigo, titulo)
{	
	var aleatorio = Math.random();
	var tituloCodificado = titulo;
	miajax.Request({
		method: 'POST',
		url: 'almacenar_audio_session.php5?aleatorio='+aleatorio,
		param: 'codigo='+codigo+'&titulo='+tituloCodificado,
		onOK: ocultarMisAudios
	});
	
}

/*El id corresponde al div que contiene mis audios*/
function mostrarMisAudios()
{	
	if(mostrar)
	{
		mostrar = false;
		var aleatorio = Math.random();
				
		miajax.Request({
			method:"GET",
			url: "desplegar_audio_session.php5",
			param: 'var='+aleatorio,
			onOK: desplegarMisAudios
		});
	
		
	}
				
}


var desplegarMisAudios = function (ajax)
{		
	if(ajax){
		document.getElementById("despmisaudiosR").innerHTML = ajax.responseText;
	}	
	document.getElementById("despmisaudiosR").style.display = 'block';

}


function ocultarMisAudios()
{
	document.getElementById("despmisaudiosR").style.display = 'none';
	mostrar = true;
}


//Cargar los videos
function cargarVideo(url,idDiv,opcion,idDivTexto,tituloVideo,idImagen,mini,tipoAD,posicionAD,OAS_sitepage,codigoVideo)
{
	codigo = ((codigoVideo) ? codigoVideo : 0);
	//alert(codigo);
	var contenedor=document.getElementById(idDiv);
	//llamar al player
	
	if(imagenActiva!=""){
		
		if(document.getElementById(imagenActiva)!=null)
			classnone(imagenActiva);
			else
			  imagenActiva="";
	}
	imagenActiva=idImagen;
	if(idImagen!=""){  
		  classactive(idImagen);  		
	}
	
	switch(opcion){
	
	case 0:
			var player=flashControlVideoDiv(url,mini,0,tipoAD,posicionAD,OAS_sitepage,codigo);
			break;
	case 1:
			var player=flashControlVideoDiv(url,mini,1,tipoAD,posicionAD,OAS_sitepage,codigo);
			break;
	case 2:
			var player=flashControlVideoDiv(url,mini,2,tipoAD,posicionAD,OAS_sitepage,codigo);
			if(idDivTexto!=""){	
			   var contenedorTexto=document.getElementById(idDivTexto);
			   contenedorTexto.innerHTML=tituloVideo;
			}
			break;
	
	}
	contenedor.innerHTML=player;
	
}

// cargar contenedor de videos noticia ampliada
function cargarVideoNoticiaAmpliada(url,idDiv,opcion,idDivTexto,tituloVideo,idImagen,mini,codNoticia,codVideo,tipoAD,posicionAD,OAS_sitepage)
{
	cargarVideo(url,idDiv,opcion,idDivTexto,tituloVideo,idImagen,mini,tipoAD,posicionAD,OAS_sitepage);
	newajax = new isiAJAX();
	newajax.Link('noticia_ampliada_videos.php5?codNoticia='+codNoticia+'&codVideo='+codVideo,'videos_noticia');
}

















/*//////////////////////////////////////////////////////////*/
/*////////////////////////FEDDBACK//////////////////////////*/
/*//////////////////////////////////////////////////////////*/


///////////////////////////////////////////////////////////////////////////////
// feedBack. Gestiona los mensajes de retroalimentación; mensajes de error, 
// éxito y de precaución. Dichos tipos de mensaje están códificados de la 
// siguiente manera: de 101 a 199 mensajes de precaución o confirmación, de 201 
// a 299 mensajes de éxito, de 301 a 399 mensajes de error.
//
// parameter: 
//	@ cad -> Cadena empleada para desplegar el mensje que se desea
//			Ej:
//				@@302:ERROR@@		-> Formato del mensaje para cuando se emplea Ajax,
//										Este formato se imprime cuando se captura un erroren PHP
//				@@203@@				-> Si se desea imprimir un mensaje de Éxito o de confirmación
//										se debe mantener el formato del codigo: @@código@@
//				@@203:EXITO@@		-> Tendría el mismo efecto del ítem anterior
//
//	@ impAlert -> (booleano)
//			true = mostrar el mensaje en un alert
//			false = la función retorna el mensaje correspondiente
//
//	@ nomCAmpo -> (string) Nombre de un campo en particular
//
//	Nota: Si no se requiere desplegar el feedBack simplemente no imprimir nada en
//		los php relacinados a Ajax.
//
//	Nota 2: Emplear códigos unicode para los acentos y caracteres especiales
//			http://lefunes.wordpress.com/2007/11/14/caracteres-especiales-en-javascript/
//
// return: el mensaje a mostrar
// access public
//
// Autor: Adrian Certuche
// Fecha de Creación: 18/01/2008
//
// Modificaciones:
// 25/01/2008 – Se añadio el parametro nomCAmpo  para nombres de campo particulares.  
//	– Autor: Adrian Certuche
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////
//Listado de algunos caracteres especiales del español y su código correspondiente:
//Carácter 	HTML 					Unicode
//Á 			&Aacute; 				\u00C1
//á 			&aacute; 				\u00E1
//É 			&Eacute; 				\u00C9
//é 			&eacute; 				\u00E9
//Í 			&Iacute; 				\u00CD
//í 			&iacute; 				\u00ED
//Ó 			&Oacute; 				\u00D3
//ó 			&oacute; 				\u00F3
//Ú 			&Uacute; 				\u00DA
//ú 			&uacute; 				\u00FA
//Ü 			&Uuml; 					\u00DC
//ü 			&uuml; 					\u00FC
//Ñ 			&Ntilde; 				\u00D1
//ñ 			&ntilde; 				\u00F1

//Otros caracteres especiales muy usados son los siguientes:
//Carácter 	HTML 				Unicode
//& 			&amp; 			\u0022
//< 			&lt; 			\u003C
//> 			&gt; 			\u003E
//í 		&itilde; 			\u00ED
//  		&nbsp; 				\u00A0
//“ 		&quot; 				\u0022
//‘ 		&apos; 				\u0027
//© 		&copy; 				\u00A9
//® 		&reg; 				\u00AE
//€ 		&euro; 				\u20AC
//¼ 		&frac14; 			\u00BC
//½ 		&frac12; 			\u00BD
//¾ 		&frac34; 			\u00BE
/////////////////////////////////////////////////////////////////

function feedBack(cad,impAlert,nomCampo)
{
	

	var codMsj = "0"; //Codigo del mensaje de error a mostrar	
	var msj = new Array();
	
	
	//Mensajes de precaución/confirmación
	//////////////////////////////////////////////////////
	msj["101"] = "Precauci\u00F3n: ¿Esta a punto de eliminar un registro?";
	//mensaje de confirmacion para la eliminacion de noticias en la columna derecha
	msj["102"] = "Ha seleccionado en el desplegable un n\u00FAmero menor al de noticias activas en este momento,\nest\u00E1 seguro de que desea eliminar las "+nomCampo+" \u00DAltimas noticias de este m\u00F3dulo?";
	
	//Mensajes de éxito
	//////////////////////////////////////////////////////
	msj["201"] = "La operaci\u00F3n se ha realizado con \u00E9xito";
	msj["202"] = "La inserci\u00F3n se ha realizado con \u00E9xito";
	msj["203"] = "La actualizaci\u00F3n se ha realizado con \u00E9xito";
	msj["204"] = "La eliminaci\u00F3n se ha realizado con \u00E9xito";
	msj["205"] = "Tu solicitud se ha enviado correctamente.";
	//Mensajes particulares - Editor de Secciones
	//Mensaje de aviso para  subseccion creada.
	msj["210"] = "La subsecci\u00F3n se cre\u00F3 con \u00E9xito";
	msj["211"] = "La subsecci\u00F3n se elimin\u00F3 con \u00E9xito";
	msj["212"] = "La estructura de subsecciones se actualiz\u00F3 con \u00E9xito";
	
	//mesajes para añadir a mis audios
	msj["213"] = "El audio se a\u00F1adi\u00F3 a Mis Audios satisfactoriamente";
	msj["214"] = "Este audio ya est\u00E1 en tu lista de Mis Audios";
	
	//Mensajes particulares de éxito sección programas
	msj["230"] = "El estado de la agenda ha sido modificado";
	
	
	//Mensajes de Error
	//Mensaje de error en la conexion de Oracle
	msj["300"] = "Ha ocurrido un error, la operaci\u00F3n de conexi\u00F3n a la Base de Datos \n no se pudo finalizar correctamente";
	
	//////////////////////////////////////////////////////
	msj["301"] = "Ha ocurrido un error inesperado, la operaci\u00F3n \n no se pudo finalizar correctamente";
	
	//Mensaje de error de ejecución del query con los datos incluidos
	msj["302"] = "Ha ocurrido un error, la operaci\u00F3n de inserci\u00F3n \n no se pudo finalizar correctamente";
	msj["303"] = "Ha ocurrido un error, la operaci\u00F3n de eliminaci\u00F3n \n no se pudo finalizar correctamente";
	msj["304"] = "Ha ocurrido un error, la operaci\u00F3n de actualizaci\u00F3n \n no se pudo finalizar correctamente";
	msj["305"] = "Ha ocurrido un error, la operaci\u00F3n de query \n no se pudo finalizar correctamente";
	
	//Mensaje de error de parce del sql sin datos
	msj["306"] = "Ha ocurrido un error, la operaci\u00F3n de inserci\u00F3n (estructura sql) \n no se pudo finalizar correctamente";
	msj["307"] = "Ha ocurrido un error, la operaci\u00F3n de eliminaci\u00F3n (estructura sql) \n no se pudo finalizar correctamente";
	msj["308"] = "Ha ocurrido un error, la operaci\u00F3n de actualizaci\u00F3n (estructura sql) \n no se pudo finalizar correctamente";
	msj["309"] = "Ha ocurrido un error, la operaci\u00F3n de query (estructura sql) \n no se pudo finalizar correctamente";
	
	//Mensajes de error generales con un campo particular
	msj["310"] = "El campo \""+nomCampo+"\" es obligatorio";
	msj["311"] = "El campo \""+nomCampo+"\" solo permite valores n\u00FAmericos";
	msj["312"] = "El campo \""+nomCampo+"\" solo permite letras";
	msj["313"] = "El campo \""+nomCampo+"\" solo permite valores alfan\u00FAmericos";	
	msj["314"] = "El campo \""+nomCampo+"\" solo permite una URL valida";
	msj["315"] = "El campo de archivo \""+nomCampo+"\" no tiene el formato requerido";	
	msj["316"] = "El campo \""+nomCampo+"\" excede el número de caracteres permitidos";
	
	//Mensajes de error relacionados con archivos
	msj["317"] = "El campo \""+nomCampo+"\" solo admite archivos con extensiones: .jpg, .gif, .png";
	msj["318"] = "El campo \""+nomCampo+"\" solo admite archivos con extensiones: .mp3";
	msj["319"] = "El campo \""+nomCampo+"\" solo admite archivos con extensiones:\n .swf, .zip, .jpg, .gif y .png";
	msj["320"] = "Debe completar la url de la imagen del modulo "+nomCampo;
	msj["321"] = "Debe escribir una url v\u00E1lida para la im\u00E1gen del m\u00F3dulo "+nomCampo;
	msj["322"] = "El archivo seleccionado para "+nomCampo+" no es una imagen,\n por lo tanto no puede asignarle una url";
	msj["323"] = " El archivo actual del m\u00F3dulo "+nomCampo+" no es una imagen, por lo tanto no puede asignarle una url";
	//Mensaje para los select de un formulario
	msj["324"] = "Debe seleccionar \""+nomCampo+"\"\n";
	
	//Mensaje para campos con tags no válidos
	msj["325"] = "El campo tags no contiene valores v\u00E1lidos, cada tag debe estar separado por una coma";
	
	//Mensaje para unir el Dial
	msj["326"] = "Debe eliminar una de las dos noticias para unir el dial";
	
	//Mensajes para guardar el Dial
	msj["327"] = "Debe publicar al menos una noticia en el bloque Izquierdo\n";
	msj["328"] = "Debe publicar almenos una noticia en el bloque Derecho\n";
	
	//Error al eliminar una imagen cuando una noticia la tiene asociada
	msj["329"] = "No se puede eliminar la imagen porque est\u00E1 asociada a una noticia.\n";
	
	//Error al tratar de eliminar una noticia del Dial que este publicada
	msj["330"] = "Debe primero eliminar la noticia de las asociadas al Dial.\n";
	
	//Error en formato del campo hora para seccion ultimo boletin.
	msj["331"] = "El campo \""+nomCampo+ "\" debe tener el siguiente formato: hh:mm.";
	
	//Error al eliminar un audio cuando una noticia la tiene asociada
	msj["332"] = "No se puede eliminar el audio porque est\u00E1 asociado a una noticia.\n";
	
	// Al error al presionar una tecla presionada
	msj["333"] = "Ha intentado insertar una tecla prohibida.\n";
	
	//Error al eliminar un video cuando una noticia lo tiene asociada
	msj["334"] = "No se puede eliminar el video porque est\u00E1 asociado a una noticia.\n";
	
	//Error al tratar de eliminar un audio que se est\u00E1 editando actualmente.
	msj["335"] = "No se puede eliminar el audio porque est\u00E1 siendo editado actualmente.\n";
	
	//Error al tratar de eliminar un video que se est\u00E1 editando actualmente.
	msj["336"] = "No se puede eliminar el video porque est\u00E1 siendo editado actualmente.\n";
	
	//Error al tratar de eliminar un pdf que se est\u00E1 editando actualmente.
	msj["337"] = "No se puede eliminar el pdf porque est\u00E1 siendo editado actualmente.\n";
	
	//Error al eliminar un pdf cuando una noticia lo tiene asociado
	msj["338"] = "No se puede eliminar el pdf porque est\u00E1 asociado a una noticia.\n";
	
	//Mensaje para cuando se esta tratando de insertar una dirección de correo erronea.
	msj["339"] = "Insertar una direcci\u00F3n de correo v\u00E1lida";
	
	//Mensaje para infromar al usuario los tipos de video disponibles.
	msj["340"] = "El campo \""+nomCampo+"\" solo admite archivos con extensiones:\n .mov, .avi, .mpg, .swf, .ram y .wmv";
	
	//Mensaje para informar que no se puede eliminar un audio cuando est\u00E1 en proceso de transcodificación.
	msj["341"] = "No es posible eliminar el audio porque esta en proceso de transcodificaci\u00F3n";
	
	//Mensaje para informar que no se puede eliminar un video cuando est\u00E1 en proceso de transcodificación.
	msj["342"] = "No es posible eliminar el video porque esta en proceso de transcodificaci\u00F3n";
	
	msj["343"] = "El m\u00F3dulo no tiene contenidos actualmente";
	
	//Mensaje para informar al usuario el impedimento que se presenta al cambiar la imagen principal de noticia cuando esta se
	//encuentra en el dial.
	msj["344"] = "No es posible eliminar la imagen principal de la noticia \n porque la Noticia se encuentra en dial";
	
	//Mensaje para informar al usuario en el eeditor de noticias.
	msj["345"] = "Debe tener al menos una imagen";
	msj["346"] = "No se puede publicar una noticia en una secci\u00F3n tipo Html ";
	msj["347"] = "Debe rellenar el campo Tags para buscar las noticias relacionadas";
	msj["348"] = "Debe rellenar el campo \""+nomCampo+"\"\n";
	msj["349"] = "Va a duplicar una noticia, recuerde elegir una secci\u00F3n antes de guardar esta noticia";

	//Mensaje para informar al usuario el impedimento que se presenta al cambiar el audio principal de noticia cuando esta se
	//encuentra en el dial.
	msj["350"] = "No es posible cambiar el audio principal de la noticia \n porque la Noticia se encuentra en dial";
	
	//Mensaje para informar al usuario el impedimento que se presenta al cambiar el video principal de noticia cuando esta se
	//encuentra en el dial.
	msj["351"] = "No es posible cambiar el video principal de la noticia \n porque la Noticia se encuentra en dial";
	
	//Mensaje para informar al usuario el impedimento que se presenta al cambiar el video principal de noticia cuando esta se
	//encuentra en el dial.
	msj["352"] = "No es posible eliminar el audio principal de la noticia \n porque la Noticia se encuentra en dial";
	
	//Mensaje para informar al usuario el impedimento que se presenta al cambiar el video principal de noticia cuando esta se
	//encuentra en el dial.
	msj["353"] = "No es posible eliminar el video principal de la noticia \n porque la Noticia se encuentra en dial";
	
	//Dirección de correo electrónico no valida en el login del player
	msj["354"] = "La direcci\u00F3n de correo electr\u00F3nico escrita no es v\u00E1lida.";
	
	msj["355"] = "El email y/o la contrase\u00F1a no existen.";
	
	msj["356"] = "Debe completar su nombre de usuario y contrase\u00F1a.";
	
	msj["357"] = "El valor de los campos contrase\u00F1a y repetir contrase\u00F1a deben ser iguales.";
	
	//Mensaje de imagen obligatoria para publicar en seccion deportes y debate abierto en la posicion #1
	msj["358"] = "Para publicar en la primera posicion de \""+nomCampo+"\" debe subir al menos una imagen";
	
	msj["359"] = "El campo contrase\u00F1a contiene caracteres no validos.";
	
	msj["360"] = "El campo Repetir contrase\u00F1a contiene caracteres no validos.";
	
	msj["361"] = "Debe aceptar los t\u00E9rminos y condiciones para crear la cuenta";
	
	//Player
	msj["362"] = "Ya existe otro usuario con el mismo e-mail";
	
	msj["363"] = "Ha ocurrido un error al guardar los datos del usuario";

	
	//Mensajes de validacion para edicion de elemntos de noticias que pertenecen al dial.
	msj["364"] = "No es posible editar la imagen porque pertenece a una Noticia del dial";
	
	msj["365"] = "No es posible editar el audio porque pertenece a una Noticia del dial";
	
	msj["366"] = "No es posible editar el video porque pertenece a una Noticia del dial";
	
	msj["367"] = "No fue posible identificar el usuario";
	
	msj["368"] = "No se pudo guardar el audio porque no fue posible obtener los datos de los audios";
	
	msj["369"] = "El campo \""+nomCampo+"\" solo admite archivos con extensiones: .pdf";
	
	
	
	//Mensajes para Ecnuestas
	msj["370"] = "Se permite votar una sola vez.";
	
	//En el player al recordar la contrasena, si el email no existe
	msj["371"] = "El email insertado no existe.";
	
	//En el player al dar clic en recordar contrasena y escribir mal el valor en la img de seguridad.
	msj["372"] = "El c\u00F3digo escrito no corresponde al de la imagen de seguridad.";
	
	//En el player al dar clic en recordar contrasena y escribir mal el valor.
	msj["373"] = "La noticia se encuentra en destino dial o publicada con imagen, \nal eliminar la \u00FAltima imagen la noticia ya no tendr\u00E1 como destino \nel dial y no se publicar\u00E1 con imagen.";
	
	msj["374"] = "El campo \""+nomCampo+"\" contiene caracteres no validos.";
	
	//Noticias relacionada a lso tags de la noticia
	msj["375"] = "No se encontraron noticias relacionadas.";
	
	//
	msj["376"] = "Lamentablemente su solicitud no se ha podido enviar correctamente.\n Por favor intentelo m\u00E1s tarde";
	
	msj["377"] = "Actualmente no existe un archivo para establecer como edici\u00F3n manual de la secci\u00F3n Home\n por favor de clic en el bot\u00F3n 'editar' para crear uno.";
	msj["378"] = "No hay nada que eliminar";
	
	msj["379"] = "No existe una maquetaci\u00F3n manual definida, ni ha seleccionado una actualmente, por favor de clic en el bot\u00F3n 'editar' para editar la secci\u00F3n manualmente.";
	
	msj["380"] = "El personaje ha sido eliminado exitosamente";
	
	msj["381"] = "Su registro se ha realizado satisfactoriamente";
	
	msj["382"] = "Hemos enviado a su direccion de correo electr\u00F3nico su nueva contrase\u00F1a";
	
	msj["383"] = "El video se ha subido exitosamente";
	
	msj["384"] = "Para realizar esta operaci\u00F3n debe loguearse previamente";
	
	msj["385"] = "Rellena al menos uno de los dos primeros campos";
	
	msj["386"] = "El C\u00F3digo Postal no es v\u00E1lido";
	
	msj["387"] = "La b\u00FAsqueda de rutas urbanas en coche s\u00F3lo esta disponible para Madrid y Barcelona";

	msj["388"] = "Tu cuenta se ha actulizado para acceder a los servicios de Newsletter pero a\u00EDn no se encuentra activa. Debes confirmar tu cuenta en cope.es";
	
	
	//Gestor de usuarios
	msj["389"] = "El usuario debe tener relacionada como m\u00EDnimo una secci\u00F3n";
	
	msj["390"] = "El usuario debe tener relacionado como m\u00EDnimo un programa";
	
	msj["391"] = "El audio puede tardar unos instantes en verse reflejado en la aplicaci\u00F3n";
	
	msj["392"] = "El video puede tardar unos instantes en verse reflejado en la aplicaci\u00F3n";
	
	//Dial de seccion
	msj["393"] = "Tienes que agregar al menos un Dial";
	
	//eliminar los usuarios del admin
	msj["394"] = "Este usuario ha quedado inactivo";
	
	//Login
	msj["395"] = "Esta secci\u00F3n no se puede mover a un nivel inferior";
	
	//En popup de archivos de programa
	msj["396"] = "Debe seleccionar"+nomCampo;
	msj["397"] = "El d\u00EDa no es un valor valido para el mes seleccionado";
	
	//
	msj["398"] = "Debe seleccionar una secci\u00F3n";
	msj["399"] = "Debe seleccionar una sub-secci\u00F3n";
	
	//Mensajes particulares
	//Mensaje de aviso para  horarios no validos en la sección parrilla.
	msj["400"] = "Se deben seleccionar  el d\u00EDa y las horas en horario \"No"+nomCampo+"\"";	
	msj["401"] = "La hora inicial es mayor o igual que la hora final \n Horario:\"No"+nomCampo+"\"";
	msj["402"] = "Cruce entre horarios seleccionados";
	
	//Mensajes particulares
	//Mensaje de aviso para  horarios no validos en la sección parrilla.
	msj["405"] = "Para eliminar este autor  primero  debe eliminar su Audio(s)  relacionado(s).";
	
	//------- Secciones - Modulos ------------------------//
	msj["500"] = "Error al copiar los archivos del directorio base..";
	msj["501"] = "Error al crear la carpeta.";
	msj["502"] = "Debe elegir una provincia";
	msj["503"] = "No ha realizado ningún cambio";
	msj["504"] = "No se puede insertar una sección en el mismo nivel con el mismo nombre.";
	msj["505"] = "Ha decidido actualizar el registro";
	msj["506"] = "Se ha presentado un error al tratar de renombrar la carpeta";
	msj["507"] = "El Zip del archivo \""+nomCampo+"\" no contiene los archivos correctos";

//------- Parte Publica Noticia Ampliada------------------//
	msj["508"] = "Debe aceptar la claúsula de privacidad";
	msj["509"] = "Tu email no es correcto";
	msj["510"] = "Su mensaje ha sido enviado correctamente";
	msj["511"] = "Debe insertar el codigo de seguridad";
	msj["512"] = "Uno de los correos insertados no es correcto";
	msj["513"] = "Su comentario ha sido enviado y est\u00E1 a la espera de ser moderado. Gracias";
	
//------- Suscripcion  a  Newsletter --------------------//
	msj["514"] = "Para confirmar la suscripci\u00F3n revise su cuenta de e-mail. Gracias";
	msj["515"] = "Ya existe una cuenta para este e-mail, \npara confirmar la suscripci\u00F3n revise su cuenta de e-mail.\nGracias";
	
	msj["6666"] = "Metio mal el dedo";

	
	
	//Mensaje en la parte de secciones 
	
	if( cad.search('@@') != -1 )
	{
		cad = cad.replace(/[\s]*/,"");
		codMsj = cad.split('@@');		
		
		codMsj = codMsj[1].substr(0,3);

		//¿Se desea imprimir un alert?
		if( impAlert )
		{		
		    alert(msj[codMsj]);	
		}
		else //o, ¿se desea capturar el mensaje?
		{
			return msj[codMsj];
		}
		
	}
	
		
}






















/*//////////////////////////////////////////////////////////*/
/*///////////////////VENTANAA EMERGENTE/////////////////////*/
/*//////////////////////////////////////////////////////////*/



//////////////////////////////////////////////////////////////////////////
//Funcion para cerrar las ventanas emergentes que se abren utilizando la libreria lightwindow
//
//Juliana Rivera
//
//Fecha de Creacion: 19/01/2008
//////////////////////////////////////////////////////////////////////////
function closeLightWindow()
{ 
  if(typeof parent != "undefined" && typeof parent.parent != "undefined") 
  { 
    parent.parent.myLightWindow.deactivate(); 
  } 
} 

//////////////////////////////////////////////////////////////////////////
//Funcion para abrir las ventanas emergentes utilizando la libreria lightwindow
//
//parameter: char url ruta del script a cargar en la ventana
//parameter: number width ancho para la ventana que se va a abrir
//parameter: number height alto para la ventana que se va a abrir
//
//Juliana Rivera
//
//Fecha de Creacion: 19/01/2008
//////////////////////////////////////////////////////////////////////////
function openLightWindow(url,width,height)
{
	
  myLightWindow.activateWindow({
							   
				href :url,
				className:'lightwindow',
				lightwindow_type:'external',
				params:'lightwindow_width='+width+',lightwindow_height='+height
  });
  
}














/*//////////////////////////////////////////////////////////*/
/*//////////////////////////PLAYER//////////////////////////*/
/*//////////////////////////////////////////////////////////*/
// JavaScript Document

///////////////////////////////////////////////////////////////////////////////
// incluirTipoAudio. Realiza el llamado a un ajax para incluir los audios
// en el tpl dependiendo del número enviado por parámetro.
//
// parameter: tipo: 1- Incluye Audio directo, 2- Icluye Último boletín
// 3- Incluye Informativos locales.
//
// return: 
//
// Autor: Martha Lucia Vargas Mateus
// Fecha de Creación: 09/02/2008
///////////////////////////////////////////////////////////////////////////////

ajax = new isiAJAX();

function incluirTipoAudio(tipo,sec)
{
	var url = 'player.php5?incluir='+tipo;
	
	switch(tipo)
	{
		case 1:
			document.getElementById('control1').className="active";
			document.getElementById('control2').className="none";
			document.getElementById('control3').className="none";
			break;
			
		case 2:
			document.getElementById('control2').className="active";
			document.getElementById('control1').className="none";
			document.getElementById('control3').className="none";
			break;
			
		case 3:
			document.getElementById('control3').className="active";
			document.getElementById('control1').className="none";
			document.getElementById('control2').className="none";
			break;
		case 4:
			document.getElementById('control3').className="active";
			document.getElementById('control1').className="none";
			document.getElementById('control2').className="none";
			url+="&sec="+sec;
			break;
	}
	ajax.Link(url,'contenido');
}

///////////////////////////////////////////////////////////////////////////////
// validarLoginPlayer. Realiza el llamado a un ajax para incluir los audios
// en el tpl dependiendo del número enviado por parámetro.
//
// parameter: formulario que contiene los campos a validar
//
// return: 
//
// Autor: Martha Lucia Vargas Mateus
// Fecha de Creación: 11/02/2008
///////////////////////////////////////////////////////////////////////////////

function validarLoginPlayer( form )
{
	var errores = '';
	
	if( !esVacio(form.email) )
	{
		if( !isEmail(form.email.value) )
		{
			errores += "- "+feedBack('@@354@@',false)+"\n";
		}
	}
	else
	{
		errores += "- "+feedBack('@@310@@',false,'Email')+"\n";
	}
	
	if( esVacio(form.pass) )
	{
		errores += "- "+feedBack('@@310@@',false,'Contrase\u00F1a')+"\n";
	}
	
	if( errores )
	{
		showErrores( errores );
	}
	else
	{	
		ajax.Request({
			method: 'POST',
			url: 'player_login.php5?log',
			param: 'email='+form.email.value+'&pass='+form.pass.value,
			onOK: incluirRespuesta
		});
	}
}

function incluirRespuesta(ajax, data)
{
	respuesta=ajax.responseText;
	document.getElementById('right').innerHTML=respuesta;	
}

function desplegarCrearCuenta()
{
	ajax.Link('player_login.php5?nueva_cta','right');
}

function validarCrearCuenta( form )
{
	var errores = '';
	
	if( !esVacio(form.email) )
	{
		if( !isEmail(form.email.value) || contieneEspacio(form.email.value) )
		{
			errores += "- "+feedBack('@@354@@',false)+"\n";
		}
	}
	else
	{
		errores += "- "+feedBack('@@310@@',false,'Email')+"\n";
	}
	
	if( !esVacio(form.pass) )
	{
		if(!contieneEspacio(form.pass.value) && isCommentary(form.pass.value ) )		
		{
			if( !esVacio(form.repass) )
			{	
				if(!contieneEspacio(form.repass.value)  && isCommentary(form.repass.value ) )		
				{
					if( !comprobarClave(document.getElementById('pass').value, document.getElementById('repass').value) )
					{
						errores += "- "+feedBack('@@357@@',false)+"\n";
					}
				}
				else
				{
					errores += "- "+feedBack('@@360@@',false)+"\n";
				}
			}
			else
			{
				errores += "- "+feedBack('@@310@@',false,'Repetir contrase\u00F1a')+"\n";
			}
		}
		else
		{
			errores += "- "+feedBack('@@359@@',false)+"\n";
		}
	}
	else
	{
		errores += "- "+feedBack('@@310@@',false,'Contrase\u00F1a')+"\n";
	}
	
	if( form.condiciones.checked == false )
	{
		errores += "- "+feedBack('@@361@@',false)+"\n";	
	}
	
	if( errores )
	{
		showErrores( errores );
	}
	else
	{	
		ajax.Request({
			method: 'POST',
			url: 'player_login.php5?crear_cta',
			param: 'email='+form.email.value+'&pass='+form.pass.value+'&movil='+form.movil.value,
			onOK: incluirRespuestaCrearCta
		});
	}
}

function incluirRespuestaCrearCta(ajax, data)
	{
		respuesta=ajax.responseText;
		document.getElementById('right').innerHTML=respuesta;	
	}

function desplegarFormLogin()
{
	ajax.Link('player_login.php5?loguear','right');
}
 
function desplegarMisAudiosSesion()
{
	ajax.Link('player_login.php5?abrir_mis_audios_sesion','right');
}

function guardarMisAudios()
{
	ajax.Link('player_login.php5?guardar_mis_audios','right','@@201@@');
}

function borrarMisAudios()
{
	if( confirm ("¿Est\u00E1 seguro que desea borrar sus audios?") )
		ajax.Link('player_login.php5?borrar_mis_audios','right','@@201@@');
}

function borrarAudioSesion( codigoBorrar )
{
	ajax.Link('player_login.php5?borrar_audio_sesion='+codigoBorrar,'right','@@201@@');	
}

function borrarAudioGuardado( codigoBorrar )
{
	ajax.Link('player_login.php5?borrar_audio_guardado='+codigoBorrar,'right','@@201@@');	
}

function borrarTodosLosAudioGuardados( )
{
	ajax.Link('player_login.php5?borrar_todos_audios_guardados','right','@@201@@');	
}

function desplegarRecordarContrasena( )
{
	ajax.Link('player_login.php5?despl_recordar_pass','right');
}

function validarRecordarContrasena( form )
{
	var errores = '';
	
	if( !esVacio(form.email) )
	{
		if( !isEmail(form.email.value) )
		{
			errores += "- "+feedBack('@@354@@',false)+"\n";
		}
	}
	else
	{
		errores += "- "+feedBack('@@310@@',false,'Email')+"\n";
	}
	
	if( !esVacio(form.img_seguridad) )
	{
		if( !isNumber(form.img_seguridad.value) )
		{
			errores += "- "+feedBack('@@372@@',false)+"\n";
		}
	}
	else
	{
		errores += "- "+feedBack('@@310@@',false,'Imagen de seguridad')+"\n";
	}
	
	
	if( errores )
	{
		showErrores( errores );
	}
	else
	{	
		ajax.Request({
			method: 'POST',
			url: 'player_login.php5?recordar_contrasena',
			param: 'email='+form.email.value+'&img_seguridad='+form.img_seguridad.value,
			onOK: incluirRespuesta
		});
	}
}

function desplegarUlitmoBoletinEnHome()
{	
	var opciones="left=100,top=100,width=655,height=345";
   	window.open(RAIZ_PLAYER+"player.php5?incluir=5","",opciones); 
}

function abrirPlayerHome()
{ 

SetCookie ('cookiePlayer', 'true'); 
	
	 var opciones="left=100,top=100,width=655,height=345";
   	 window.open(RAIZ_PLAYER+"player.php5","",opciones); 
}

function abrirPlayerHomeSeccion(codigo)
{ 

SetCookie ('cookiePlayer', 'true'); 
	
	 var opciones="left=100,top=100,width=655,height=345";
   	 window.open(RAIZ_PLAYER+"player.php5?emisora="+codigo,"",opciones); 
}

/*----------------------------------------------------------------
DESCRIPCIÓN:Funcion que se encarga de subir una variable a una cookie por medio de javascript.
PARAMETROS: name:  Nombre de la variable.
						value: Valor que tiene la variable.
Jhon Herrera: 02-12-2008
----------------------------------------------------------------*/

function SetCookie (name, value) 

{

var argv = SetCookie.arguments;

var argc = SetCookie.arguments.length;

var expires = (2 < argc) ? argv[2] : null;

var path = (3 < argc) ? argv[3] : null;

var domain = (4 < argc) ? argv[4] : null;

var secure = (5 < argc) ? argv[5] : false;

document.cookie = name + "=" + escape (value) +

((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +

((path == null) ? "" : ("; path=" + path)) +

((domain == null) ? "" : ("; domain=" + domain)) +

((secure == true) ? "; secure" : "");

}

/*----------------------------------------------------------------
DESCRIPCIÓN:muestra en una ventana emergente el contenido de la
			variable que llega como parámetro.
PARAMETROS: elemento que se evaluará.
----------------------------------------------------------------*/
function showErrores( errores ){
   	alert ("Ocurrieron los siguientes errores: \n\n"+errores);
}

/*----------------------------------------------------------------
DESCRIPCIÓN:Evalua si el elemento que llega como parametro no 
			contiene datos.
PARAMETROS: elemento que se evaluará.
RETORNO:	verdadero si el elemento está vacío, falso de lo
			contrario.
----------------------------------------------------------------*/
function esVacio( contenido ){
	if( contenido.value.length <=0 ){
		return (true);
	}else{
		return (false);
	}
}

/*----------------------------------------------------------------
DESCRIPCIÓN:Evalua si el elemento que llega como parametro no 
			contiene datos.
PARAMETROS: elemento que se evaluará.
RETORNO:	verdadero si el elemento está vacío, falso de lo
			contrario.
----------------------------------------------------------------*/
function contieneEspacio( contenido ){

	for (i = 0; i < contenido.length; i++)
    { 	
		if( contenido.charAt(i) == " " ){
			return (true);
		}
	}
	return false;
}


function cargarAudio( codigo )
{
	ajax.Request({
			method: 'POST',
			url: 'player_login.php5?getFile',
			param: 'codigo='+codigo,
			onOK: obtenerNombreArchivo
		});
}

function obtenerNombreArchivo(ajax, data)
{
	respuesta=trim(ajax.responseText);
	
	var arrCad = respuesta.split("===");
	
	arrCad[0] = arrCad[0].replace("\n","");
	arrCad[0] = arrCad[0].replace("\t","");
	
	OAS_sitepage="www.cope.com/"; //esta variable vendrá definida ya.
	tipoAD = "playerstream"; //variable a definida en página.
	posicionAD = "@x90!x90"; //variable a definida en página.
	
	flashControlPlayerPopup(arrCad[0]+".m3u",arrCad[1],'flashPlayer',0,tipoAD,posicionAD,OAS_sitepage);

}

function oirTodos()
{
	ajax.Request({
			method: 'POST',
			url: 'player_login.php5?oirTodos',
			onOK: enviarListaPlayer
		});
}

function enviarListaPlayer( ajax, data )
{
	respuesta=trim(ajax.responseText);
	OAS_sitepage="www.cope.com/"; //esta variable vendrá definida ya.
	tipoAD = "playerstream"; //variable a definida en página.
	posicionAD = "@x90!x90"; //variable a definida en página.
	flashControlPlayerPopup(respuesta,'Mis audios','flashPlayer',1,tipoAD,posicionAD,OAS_sitepage);
}














/*//////////////////////////////////////////////////////////*/
/*//////////////////////////VALIDADOR///////////////////////*/
/*//////////////////////////////////////////////////////////*/

// Esta variable indica si está bien dejar las casillas
// en blanco como regla general
var defaultEmptyOK = false

// Esta variable indica si se debe verificar la presencia de comillas
// u otros símbolos extraños en un campo, por omisión no, porque
// siempre crea problemas con las bases de datos o programas CGI
var checkNiceness = true;

// listas de caracteres
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var whitespace = " \t\n\r-#";

// caracteres admitidos para comentarios
var commentaryWs = " \t\n\r#.;,:-_$€()@*/?¿¡!\"\'Ç+ç%&[]{}àÀèÈìÌòÒùÙ";
var commentaryWst = " \r#.;,:()@_/$€?¿¡!\"\'$*&Ççº+%[]{}-";

var tagsWs = " ,;"


// caracteres admitidos para URL
var urlWs = "/^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\’\/\\\+&amp;%\$#_]*)?$/";

// caracteres admitidos en nos de telefono
var phoneChars = "()-+ ";

// caracteres especiales pare el oracle text
var cadenaOracleText = "'~()[]{}?¿,&\-;|$!>*%_=";
var cadenaOracleTextTags = "'~()[]{}?¿&\-;|$!>*%_=";

// ---------------------------------------------------------------------- //
//                     TEXTOS PARA LOS MENSAJES                           //
// ---------------------------------------------------------------------- //

// m abrevia "missing" (faltante)
var mMessage = "Error: no puede dejar este espacio vacio"

// p abrevia "prompt"
var pPrompt = "Error: ";
var pAlphanumeric = "ingrese un texto que contenga solo letras y/o numeros";
var pAlphabetic   = "ingrese un texto que contenga solo letras";
var pInteger = "ingrese un numero entero";
var pNumber = "ingrese un numero";
var pPhoneNumber = "ingrese un número de teléfono";
var pEmail = "ingrese una dirección de correo electrónico válida";
var pName = "ingrese un texto que contenga solo letras, numeros o espacios";
var pNice = "no puede utilizar comillas aqui";
var pCommentary = "solo se pueden emplear letras o nuemeros y algunos caracteres especiales \n\ \"-#.;,:_()@*-/?\"";

// ---------------------------------------------------------------------- //
//                FUNCIONES PARA MANEJO DE ARREGLOS                       //
// ---------------------------------------------------------------------- //

// JavaScript 1.0 (Netscape 2.0) no tenia un constructor para arreglos,
// asi que ellos tenian que ser hechos a mano. Desde JavaScript 1.1 
// (Netscape 3.0) en adelante, las funciones de manejo de arreglos no
// son necesarias.

function makeArray(n) {
//*** BUG: If I put this line in, I get two error messages:
//(1) Window.length can't be set by assignment
//(2) daysInMonth has no property indexed by 4
//If I leave it out, the code works fine.
//   this.length = n;
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

// ---------------------------------------------------------------------- //
//                  CODIGO PARA FUNCIONES BASICAS                         //
// ---------------------------------------------------------------------- //


// s es vacio
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

// s es vacio o solo caracteres de espacio
function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        // si el caracter en que estoy no aparece en whitespace,
        // entonces retornar falso
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

// Quita todos los caracteres que que estan en "bag" del string "s" s.
function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    // Buscar por el string, si el caracter no esta en "bag", 
    // agregarlo a returnString
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}

// Quita todos los caracteres que que estan en "bag" del string "s" s y los cambia por espacios.
function stripCharsInBagSpace (s, bag)
{   var i;
    var returnString = "";

    // Buscar por el string, si el caracter no esta en "bag", 
    // agregarlo a returnString
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
				else returnString += ' ';
    }

    return returnString;
}

// Lo contrario, quitar todos los caracteres que no estan en "bag" de "s"
function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}

// Quitar todos los espacios en blanco de un string
function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

// La rutina siguiente es para cubrir un bug en Netscape
// 2.0.2 - seria mejor usar indexOf, pero si se hace
// asi stripInitialWhitespace() no funcionaria

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

// Quita todos los espacios que antecedan al string
function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}

// c es una letra del alfabeto espanol
function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

// c es un digito
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

// c es letra o digito
function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

// c es un espacio
function isSpace (c)
{   return ((c == " "))
}

// ---------------------------------------------------------------------- //
//                          NUMEROS                                       //
// ---------------------------------------------------------------------- //

// s es un numero entero (con o sin signo)
function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if (!isDigit(c)) return false;
        } else { 
            if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

// s es un numero (entero o flotante, con o sin signo)
function isNumber (s)
{   var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c)) return false;
        } else { 
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

/*----------------------------------------------------------------
DESCRIPCIÓN: Asegura la inserción de solo numeros en los campos de texto
PARAMETROS: (Evento)
----------------------------------------------------------------*/
function soloNumeros(e)
{
   var key;
   if(window.event)
      key = window.event.keyCode;   //IE
   else
      key = e.which;                //firefox
   if (!( (key >= 48 && key <= 57) || key ==8 || key ==9 || key ==0 || key ==46 ))
      return false;
   else
      return true;
}



// ---------------------------------------------------------------------- //
//                        STRINGS SIMPLES                                 //
// ---------------------------------------------------------------------- //

// s tiene solo letras
function isAlphabetic (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isLetter(c))
        return false;
    }
    return true;
}


// s tiene solo letras y numeros
function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) || isSpace(c)) )
        return false;
    }

    return true;
}


// s tiene solo letras, numeros, comas o espacios
function validarTags(s)
{
    /*if (isEmpty(s)) 
       if (validarTags.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);*/
    if(s != ''){
		
		if( (isAlphanumeric( stripCharsInBag( s, tagsWs ) ) ) == false ){			
			//alert('En los tags solo se permiten palabras separadas por comas y espacios');
			return false;
		}
		else return true;
		
	}
	else return true;
	
}

// s tiene solo letras y numeros
function isCommentary (s)
{
    if (isEmpty(s)) 
       if (isCommentary.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, commentaryWs ) ) );
}

//s es una URL
function isUrl(s)
{
  var expresion = /^((ht|f)tp(s)?:\/\/)?[\w\.]+((\:)[\d]+)?((\/[\w\-\_]*)*)?(\/[\w\-\_\.]+)?(\?[\w\_]+\=[\w\W]*(\&[\w\_]+\=[\w\W]*)*)?$/
  if(isEmpty(s)) 
    if(isUrl.arguments.length == 1) 
	{
     // 	alert(2);
      return defaultEmptyOK;
	}
    else 
	{
	//  alert(3);
	  return (isAlphanumeric.arguments[1] == true);
	}
    
  if(!s.match(expresion))
  {
//	alert(1);
	return false;
  }
		
  //return(isAlphanumeric(stripCharsInBag(s, urlWs)));
	
  return true;
}

// s tiene solo letras y numeros
/*function isUrl (s)
{
	/*var expresion = /^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)?((\?\w+=\w+)?(&\w+=\w+)*)?([a-zA-Z0-9\w+=\-\.\?\,\’\/\\\+&amp;%\$#_]*)?$/;*/
			/*var expresion = /^(ftp|https|http):\/\/[a-z0-9-_%]+((\.|\/)[a-z0-9-_%]+)*(\.[a-z]{2,6})(\?[a-z0-9-_%]+=[a-z0-9-_%]+(&[a-z0-9-_%]+=[a-z0-9-_%]+)*)?$/i	*/
			/*var expresion =/^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*( : (0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\’\/\\\+&amp;%\$#_]*[\=]*)?$/;*/
			/*var expresion = ^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?*/
/*
var expresion =  /^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*( : (0-9)*)*(\/?)([a-zA-Z0-9/\=\-\.\?\,\’\/\\\+&amp;%\$#_=]*)?$/;
    if (isEmpty(s)) 
       if (isUrl.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
	if(!s.match(expresion)) {
		return false;
	}
		
    return( isAlphanumeric( stripCharsInBag( s, urlWs ) ) );
	
	return true;
}*/

function esUrl(valor){
  if (/^w+([.-]?w+)*.w+([.-]?w+)*(.w{2,3})+$/.test(valor)){
   return (true)
  } else {
    return (false);
  }
}

// s tiene solo letras, numeros o espacios en blanco
function isName (s)
{
    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, whitespace ) ) );
}

// ---------------------------------------------------------------------- //
//                           FONO o EMAIL                                 //
// ---------------------------------------------------------------------- //

// s es numero de telefono valido
function isPhoneNumber (s)
{   var modString;
    if (isEmpty(s)) 
       if (isPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isPhoneNumber.arguments[1] == true);
    modString = stripCharsInBag( s, phoneChars );
    return (isInteger(modString))
}

// s es una direccion de correo valida
function isEmail (s)
{
    if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}


/*----------------------------------------------------------------
DESCRIPCIÓN: VALIDA EL EMAIL CON EXPRESIONES REGGULARES
PARAMETROS: (email)
----------------------------------------------------------------*/
 function validarEmail(valor) {
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)){
   return (true)
  } else {
   return (false);
  }
 }



function isNice(s)//tambvien validan tags
{
        var i = 1;
        var sLength = s.length;
        var b = 1;
        while(i<sLength) {
                if( (s.charAt(i) == "\<" ) ) b = 0;
                i++;
        }
        return b;
}

// ---------------------------------------------------------------------- //
//                  FUNCIONES PARA RECLAMARLE AL USUARIO                  //
// ---------------------------------------------------------------------- //

// pone el string s en la barra de estado
function statBar (s)
{   window.status = s
}

// notificar que el campo theField esta vacio
function warnEmpty (theField)
{   theField.focus()
    alert(mMessage)
    statBar(mMessage)
    return false
}

// notificar que el campo theField es invalido
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    statBar(pPrompt + s)
    return false
}

// el corazon de todo: checkField
function checkField (theField, theFunction, emptyOK, s)
{   
    var msg;
    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkField.arguments.length == 4) {
        msg = s;
    } else {
        if( theFunction == isAlphabetic ) msg = pAlphabetic;
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
        if( theFunction == isName ) msg = pName;
        if( theFunction == isCommentary ) msg = pCommentary;
    }
    
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;

    if ((emptyOK == false) && (isEmpty(theField.value))) 
        return warnEmpty(theField);

    if ( checkNiceness && !isNice(theField.value))
        return warnInvalid(theField, pNice);

    if (theFunction(theField.value) == true) 
        return true;
    else
        return warnInvalid(theField,msg);

}

/****************************************************************/


function checkFieldReturn (theField, theFunction, emptyOK, s)
{   
    var msg;
    if (checkFieldReturn.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkFieldReturn.arguments.length == 4) {
        msg = s;
    } else {
        if( theFunction == isAlphabetic ) msg = pAlphabetic;
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
        if( theFunction == isName ) msg = pName;
        if( theFunction == isCommentary ) msg = pCommentary;
    }
    
    if ((emptyOK == true) && (isEmpty(theField.value))) return "";

    if ((emptyOK == false) && (isEmpty(theField.value))) 
        //return warnEmpty(theField);
		return "\nPor favor introduce tu " + msg;  

    if ( checkNiceness && !isNice(theField.value))
//        return warnInvalid(theField, pNice);
		return "\n"+msg + "error 1";

    if (theFunction(theField.value) == true) 
        return "";
    else
//        return warnInvalid(theField,msg);
		return "\n"+msg + "no es valido";

}



/******************************************************************/
  var a, mes, dia, anyo, febrero;
    
  function anyoBisiesto(anyo)
    {
        /**
        * si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
        */
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;

        /*
        * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
        * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
        */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                /**
                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
            */
            else
            {
                return true;
            }
        }
    }
  
  
  function validarDay(day)
  {
	if ( day>=1 && day<=31)
	 {
	  return true;
	 }
	  else
	  {
	   return false;
	  }
 }
 
 
 function validarMonth(mes)
 {
	if ( mes>=1 && mes<=12)
	 {
	  return true;
	 }
	  else
	  {
	   return false;
	  }
 }
 
 function validarYear(year)
 {
	if ( year>=1900 && year<=2010)
	 {
	  return true;
	 }
	  else
	  {
	   return false;
	  } 
 }
 
 function validar_fecha(fecha)
 {
  //el parametro fecha entra en formato (aaaa-mm-dd)
  dia=fecha.split("-")[2];
  if (validarDay(dia)==false)
   {
	alert ("Fecha incompleta o día incorrecto.");
	return;
   }
   else
   {//1 else
    mes=fecha.split("-")[1];
    if (validarMonth(mes)==false)
	{
	 alert ("Fecha incompleta o mes incorrecto.");	 
	 return;
	}
	else
	{//2 else
	 anyo=fecha.split("-")[0];	 
	 if (validarYear(anyo)==false)
	 {
	  alert ("Fecha incompleta o año incorrecto.");	  
	  return;
	 }
	  else
	  {//3 else
	   if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
       */
       if ((mes<1) || (mes>12))
       {
           alert("El mes no es válido. Por favor inserte un mes correcto.");
           return;
       }
       /**
       * si el mes introducido es febrero y el dia es mayor que el correspondiente 
       * al año introducido > alertamos y detenemos ejecucion
       */
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           alert("El día no es válido. Por favor inserte un día correcto.");
           return;
       }
       /**
       * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
       */
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {
           alert("El día no es válido. Por favor inserte un día correcto.");
           return;
       }
       /**
       * si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
       */
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
           alert("El día no es válido. Por favor inserte un día correcto.");
           return;
       }
       /**
       * si el mes año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
       */
       if ((anyo<1900) || (anyo>2016))
       {
           alert("El año no es válido. Por favor inserte un año entre 1900 y 2016.");           
       } 
       /**
       * en caso de que todo sea correcto > enviamos los datos del formulario
       * para ello debeis descomentar la ultima sentencia
       */
       else
	      return true;
	  }//3 else
	}//2 else
   }// 1 else
 }//fin function




//funcion que valida que una fecha final sea mayor o igual a la 
//fecha inicial formato de entrada para las fechas es "dd-mm-yyyy"
function rangoFechas(fecIni,fecFin) 
{
  diaFecIni=fecIni.split("-")[0];
  mesFecIni=fecIni.split("-")[1];
  yearFecIni=fecIni.split("-")[5];
 
  diaFecFin=fecFin.split("-")[0];
  mesFecFin=fecFin.split("-")[1];
  yearFecFin=fecFin.split("-")[2];
 

  //constructor de fechas fecha= new Date(año,mes,dia)
  fecIniCompleta= new Date(yearFecIni,mesFecIni,diaFecIni); 
  fecFinCompleta= new Date(yearFecFin,mesFecFin,diaFecFin); 
 
  delta = ((fecFinCompleta.getTime()-fecIniCompleta.getTime()) / 1000 / 60 / 60 / 24);
  if(Math.round(delta)>=0)
  {
    return true;
  }
  else
  {
    return false;    
  }
}


//Valida que una fecha dada este entre un rango determinado
function valFechaP(fecIni,fecFin,horaIni,horaFin) 
{
  diaFecIni=parseInt(fecIni.split("-")[2]);
  mesFecIni=parseInt(fecIni.split("-")[1]);
  yearFecIni=parseInt(fecIni.split("-")[0]);
 
  diaFecFin=parseInt(fecFin.split("-")[2]);
  mesFecFin=parseInt(fecFin.split("-")[1]);
  yearFecFin=parseInt(fecFin.split("-")[0]);
 
  //constructor de fechas fecha= new Date(año,mes,dia)
  fecIniCompleta= new Date(yearFecIni,mesFecIni,diaFecIni); 
  fecFinCompleta= new Date(yearFecFin,mesFecFin,diaFecFin); 
  
  delta = ((fecFinCompleta.getTime()-fecIniCompleta.getTime()) / 1000 / 60 / 60 / 24);
  
  if(Math.round(delta)>=0)
  {
      if(Math.round(delta)==0)
	  {
	    horasIni = parseInt(horaIni.split(":")[0]);
	    minutosIni = parseInt(horaIni.split(":")[1]);
	    horasFin = parseInt(horaFin.split(":")[0]);
	    minutosFin = parseInt(horaFin.split(":")[1]);
	  
	    if(horasIni > horasFin)
	    {
		  alert("Por favor seleccione una hora superior a la actual.");
		  return false;
	    }
	    else
	    {
		  if(horasIni == horasFin)
		  {
		    if(minutosIni > minutosFin)
		    {
			  alert("Por favor seleccione una hora superior a la actual.");
		      return false;
		    }
		  }
	    }
	  }
	  
	  return true;
  }
  else
  {
	alert("Por favor seleccione una fecha igual o superior a la actual.");
    return false;    
  }
}


function validadorExtensiones( archivo, extension )
{
	//Array que contiene las extensiones válidas
	extArray = new Array(extension);
	//alert(extArray[0]);
	var file = archivo;
	var allowSubmit = false;
	
	while (file.indexOf("\\") != -1){
		file = file.slice(file.indexOf("\\") + 1);
	}
	//obtengo la extensi\u00F3n del archivo
	ext = file.slice(file.indexOf(".")).toLowerCase();
	
	//recorro el array de extensiones válidas para comprobar
	//que la extesi\u00F3n ingresada corresponda a alguna de ellas
	for (var i = 0; i < extArray.length; i++) {
		if (extArray[i] == ext) { 
			allowSubmit = true; 
			break; 
		}
	}
	if (allowSubmit)
	{//si la extensi\u00F3n es válida
		return true;
	}
	else
	{
		return false;
	}

}


//funcion que valida que la extension de un archivo sea tipo pdf, doc, jpg, gif o swf
function validarArchivo(campo)
{
   nom = campo.value.toLowerCase();
   if(campo.value!='')
   {
	 if((nom.indexOf(".pdf") == -1))	
	 {
	   if((nom.indexOf(".doc") == -1))
	   {
		 if((nom.indexOf(".gif") == -1))	
		 {
		   if((nom.indexOf(".swf") == -1))
		   {
			 if((nom.indexOf(".jpg") == -1))
			 {
		       alert('Sólo se admiten archivos pdf, doc, jpg, gif o swf');
		       campo.focus();
		       campo.select();
		       return false;
			 }
			 else
			  return true;
		   }
		   else
		     return true;
		 }
		 else
		  return true;
	   }
	   else
	    return true;
	 }
	 else
	  return true;
   }
}


//Valida que la entrada de videos corresponda a estos
//formatos 
function validarVideo(campo)
{
   nom = campo.value.toLowerCase();
   if(campo.value!='')
   {
	 if((nom.indexOf(".mov") == -1))	
	 {
	   if((nom.indexOf(".avi") == -1))
	   {
		 if((nom.indexOf(".mpg") == -1))	
		 {
		   if((nom.indexOf(".swf") == -1))
		   {
			 if((nom.indexOf(".ram") == -1))
			 {
			  if((nom.indexOf(".wmv") == -1))
			  {	 
			  	if((nom.indexOf(".flv") == -1))
			  	{	 
		       		return false;
				}
				else 
				return true;
			  }
			   else
			   return true;
			 }
			 else
			  return true;
		   }
		   else
		     return true;
		 }
		 else
		  return true;
	   }
	   else
	    return true;
	 }
	 else
	  return true;
   }
   else return 'empty';
}




//Valida que el archivo sea una imagen
//con los siguientes formatos
function validarImagen(campo)
{
   nom = campo.value.toLowerCase();
   if(campo.value!='')
   {
	 if((nom.indexOf(".jpg") == -1))	
	 {
	   if((nom.indexOf(".jpeg") == -1))
	   {
		 if((nom.indexOf(".gif") == -1))	
		 {
		   if((nom.indexOf(".png") == -1))	
		 	{
		  	 //alert('Sólo se admiten archivos jpg ó gif.');
//		  	 campo.focus();
//		  	 campo.select();
		  	 return false;
			}
		  else
		     return true;
		 }
		 else
		  return true;
	   }
	   else
	    return true;
	 }
	 else
	  return true;
   }
   else return 'empty';
}


//Valida que el archivo se un audio mp3
function validarAudio(campo)
{
   nom = campo.value.toLowerCase();
   if(campo.value!='')
   {	 
		 if((nom.indexOf(".mp3") == -1))	
		 {
		   //alert('Sólo se admiten archivos mp3.');
		   //campo.focus();
		   //campo.select();
		   return false;		
		 }
		 else
		  return true; 
   }
   else return 'empty';
  
}

/*
   Estos metodos son utiles en campos en los cuales sólo se pueden  ingresar números o letras y se 
   y se invocan a través del evento onkeypress y se emplea el siguiente formato onkeypress="return letras(event)"
   ó onkeypress="return numeros(event)" el resultado es que sólo se pueden insetar numeros o letras según sea el caso
*/
var nav4 = window.Event ? true : false;

function numeros(evento)
{
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var tecla = nav4 ? evento.which : evento.keyCode;
  return (tecla <= 13 || (tecla >= 48 && tecla <= 57));
};

function letras(evento)
{
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var tecla = nav4 ? evento.which : evento.keyCode;
  return ( tecla < 13 || ( tecla >= 97 && tecla <= 122 ) || (tecla >= 65 && tecla <= 90) || tecla == 32 || tecla == 'á'.charCodeAt(0) || tecla == 'Á'.charCodeAt(0) || tecla == 'é'.charCodeAt(0) || tecla == 'É'.charCodeAt(0) || tecla == 'í'.charCodeAt(0) || tecla == 'Í'.charCodeAt(0) || tecla == 'ó'.charCodeAt(0) || tecla == 'Ó'.charCodeAt(0) || tecla == 'ú'.charCodeAt(0) || tecla == 'Ú'.charCodeAt(0) || tecla == 'ñ'.charCodeAt(0) || tecla == 'Ñ'.charCodeAt(0) );
};

/*
Función que valida que un evento de teclado solo sea numeros ó letras
*/

function numeros_letras(evento)
{
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var tecla = nav4 ? evento.which : evento.keyCode;
  return ( tecla < 13 || (tecla >= 48 && tecla <= 57) || ( tecla >= 97 && tecla <= 122 ) || (tecla >= 65 && tecla <= 90) || tecla == 32 || tecla == 'á'.charCodeAt(0) || tecla == 'Á'.charCodeAt(0) || tecla == 'é'.charCodeAt(0) || tecla == 'É'.charCodeAt(0) || tecla == 'í'.charCodeAt(0) || tecla == 'Í'.charCodeAt(0) || tecla == 'ó'.charCodeAt(0) || tecla == 'Ó'.charCodeAt(0) || tecla == 'ú'.charCodeAt(0) || tecla == 'Ú'.charCodeAt(0) || tecla == 'ñ'.charCodeAt(0) || tecla == 'Ñ'.charCodeAt(0) );
};


function noEnter(evento)
{
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var tecla = nav4 ? evento.which : evento.keyCode;
   return( tecla != 13 );
    
};

// Desabilita la tecla > especificada 

function teclaPulsada(e) { 
    tecla=(document.all) ? e.keyCode : e.which; 
	
    if (tecla==62) {
		feedBack("@@333@@",true);
		return false; 
	}
}




/*
Función encargada de validar si un password y su confirmación coinciden
*/
function comprobarClave(clave1,clave2){

    if (clave1 == clave2)
			return true
    else
      return false
} 
/*
Función encargada de validar los correos validos, esta función permite que un correo tenga "." dentro del email
*/
function validarCorreo(email)
{
 	
 	filter=/^[A-Za-z][A-Za-z0-9_.-]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
	
	if (filter.test(email))
		return true;
	else
		return false;

}

/*
Esta función se encarga de simular la función trim de PHP ya que de encarga de 
quitar los espacios al inicio y al final de la cadena que se le pase como 
paramentro

*/
function trim(cadena)
{
	
	for(i=0; i<cadena.length; )
	{	
		//alert(cadena.charCodeAt(i));
		if(cadena.charAt(i)==" " || cadena.charCodeAt(i)==32 || cadena.charCodeAt(i)==13)
				cadena=cadena.substring(i+1, cadena.length);
		else
			break;
	}

	for(i=cadena.length-1; i>=0; i=cadena.length-1)
	{
	   //alert(cadena.charCodeAt(i));
		if(cadena.charAt(i)==" " || cadena.charCodeAt(i)==10)
			cadena=cadena.substring(0,i);
		else
			break;
	}
	
	
	return cadena;
	
}

/* Por si se necesita*/
function ReplaceEnters(texto, conbr) {
 if (conbr) {
  texto = texto.replace(String.fromCharCode(13),"");
 } else {
  texto = texto.replace(/<br>/g, String.fromCharCode(13));
 }
 return texto;
}
/*
Función que se encarga de validar por medio de un evento del teclado que los datos que se inserten en ese input sean alfanumericos y acepten
algunos caracteres especiales para un email.
*/

function numeros_letras_email(evento)
{
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var tecla = nav4 ? evento.which : evento.keyCode;
  return ( tecla < 13 || (tecla >= 48 && tecla <= 57) || ( tecla >= 97 && tecla <= 122 ) || (tecla >= 65 && tecla <= 90) || tecla == 64 || tecla == 32 || tecla == 'á'.charCodeAt(0) || tecla == 'Á'.charCodeAt(0) || tecla == 'é'.charCodeAt(0) || tecla == 'É'.charCodeAt(0) || tecla == 'í'.charCodeAt(0) || tecla == 'Í'.charCodeAt(0) || tecla == 'ó'.charCodeAt(0) || tecla == 'Ó'.charCodeAt(0) || tecla == 'ú'.charCodeAt(0) || tecla == 'Ú'.charCodeAt(0) || tecla == 'ñ'.charCodeAt(0) || tecla == 'Ñ'.charCodeAt(0) || tecla == 64  || tecla == 95  || tecla == 46);
};

// Caracteres especiales de una direccion email
function isCaracterEmail (c)
{   return ((c == "@") || (c == "_") || (c == "."))
}

// s tiene solo letras y numeros, ademas de algunos caracteres especiales para validar un campo de email.
function isAlphanumericEmail (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) || isCaracterEmail(c)) )
        return false;
    }

    return true;
}

//Permite algunos caracateres ademas de letras y numeros que puedan necesitarse en un titulo.
function esTitulo (s)
{
    if (isEmpty(s)) 
       if (isCommentary.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, commentaryWst ) ) );
} 

//Retorna el valor de la longitud del text area.
function calcLong(elemento, maximo)
{	
	var largo;
	largo = document.getElementById(elemento).value.length;
	
	if (largo > maximo)
	document.getElementById(elemento).value = document.getElementById(elemento).value.substring(0,maximo);
}

//Reemplaza un texto por otro
function replaceAll(text, str1, str2)
{
  var command = "text.replace(/"+str1+"/g,\""+str2+"\")";
  return eval(command);
}
