





		//Contiene el string del nombre del formulario a valdiar
		var formulario;

		/*	Contiene los controles HTML como objetos para ser validados
			required: Si es requerido o no (true o false)
			type: Tipo de campo a vlaidar (combo)
			nulo: Valor q sera considerado como nulo o vacio
			msj: Mensaje en dado cado de ser invalido el campo

			Ejm. campos = {  pais:{ required:true, type:'combo', nulo:'-1' },
							area_resp:{ required:true, type:'combo', nulo:'-1'  } 
							};
		*/
		var campos = new Object;

		//Objeto con las propiedades clase y metodo, para saber q clase y metodo invocar.
		var claseAccion = new Object;

		/*Se encarga de pintar el msj dentro del toaster*/
		function showMessage(msj,duration){
		
			dojo.publish("testMessageTopic", 
				[{
					message: msj, 
					type: "warning", 
					duration: duration
				}]
			);
		}
		
		//Funciones de eventos del ajax, success: caso de exito, before: antes del ajax.
		var funcion_success = new Function();
		var funcion_before = new Function();





		/*Esta funcion realiza el ajax para cargar el contenido de las paginas dentro del contenedor principal*/
		//pagina = Pagina a la que voy a enviar la peticion
		//nodo_destino = Nodo que voy a cargar con la respuesta
		//regla = Alguna bandera que necesite para realizar algo en especifico
		//asincrono = Si es true la peticion por ajax es asincrono, false es sincrono.
		//ajax = Si es true es para realizar el ajax, si es false es xq solo se usaran las validaciones

		function enviar(asincrono, pagina, data, dataType, ajax){
			
			//Valido si es un formulario dojo
			(dijit.byId(formulario)) ? myObj=dijit.byId(formulario).getValues() : myObj = new Object;
			//Si voy a realizar el ajax verifico la clase y el metodo a invocar
			if(ajax==true) {
				myObj.clase=claseAccion.clase;
				myObj.metodo=claseAccion.metodo;
			}
			msj_error='';
			
			
			
			//Valido los campos q dojo no puede (que no son widgets)
			for( propiedad in campos){
				
				/*  Nota: el case text, combo y textarea todos deben llamarse como text */
				(campos[propiedad]['type']=='combo') ? (campos[propiedad]['type']='text') : '';
				(campos[propiedad]['type']=='textarea') ? (campos[propiedad]['type']='text') : '';
				
				//Valido si son del tipo requerido
				switch(campos[propiedad]['type']){
					case "text":
						if((campos[propiedad]['required']==true)&&(dojo.trim(dojo.byId(propiedad).value)==campos[propiedad]['nulo']))
						{
							msj_error = msj_error+campos[propiedad]['msj']+'<hr />';
						}
						break;
				
					case "combo":
						break;
						
					case "checkbox":
						//Por si acaso es requerido pero no esta chequeado
						if((campos[propiedad]['required']==true)&&(dojo.byId(propiedad).checked==false))
						{
							msj_error = msj_error+campos[propiedad]['msj']+'<hr />';
						}
						break;
						
					case "textarea":
						break;
						
					case "radio":
						//Si es requerido chequeo si alguno esta chequeado
						if(campos[propiedad]['required']==true){
							var chequeado = false;
							var radios = document.getElementsByName(propiedad);
							for(var i=0; i<radios.length; i++){
								if(radios[i].checked==true){
									chequeado = true;
									break;
								}
							}
							
							//Si ninguno esta chequeado envio el msj de error
							if(chequeado==false){
								msj_error = msj_error+campos[propiedad]['msj']+'<hr />';
							}
						}
						break;
						
						
						
					default:
						break;
				}
				
					
			}
			
			//Si hubo error envio el msj del promp al usuario
			if (msj_error!=''){
				showMessage(msj_error,9000);
				return false;
			}
			
			//Para agregar a Data las variables que valida dojo por si solo
			//var data = myObj;
			if(data==null || data=='')
				var data = new Object;
			for( propiedad in myObj){
				data[propiedad] = myObj[propiedad];
			}
		
			if(dijit.byId(formulario))
			{
				if(dijit.byId(formulario).validate()==false){
					showMessage("El formulario posee campos invalidos <br />Por Favor verifique los campos resaltados",5000);
					return false;
				}
			}
			
			//Si no voy a realizar el Ajax y no hubo error detengop la ejecucion y devuelvo true
			if(ajax==false)
				return true;
			
			
			
			//Si no hubo error agrego los campos q dojo no pudo validar
			for(propiedad in campos){
				//Si existe el control con ese id
				if(dojo.byId(propiedad))
					data[propiedad] = dojo.byId(propiedad).value;
			}
		
			var pagina = pagina;
			var nodo_destino = '#'+nodo_destino;

			//Llamo la funcion a realizarse justo antes del ajax
			funcion_before();
			
			//Para evitar el error 411
			(data==null) ? data='' : '';
			
			//alert(dojo.toJson(data));
			$.ajax({
    			async: asincrono,
    			url: pagina,
   		 		type: 'POST',
    			data: data,
    			dataType: dataType,
    			timeout: 600000,
    			error: function(){
       				 alert('Error cargando el contenido');
   				 },
   			 	success: function(data){
					funcion_success(data);

				}
			});

		}
		
		
		
		
		
		
		
		
		//  Da al usuario los msj necesarios en dado caso q la confirmacion de los campos de error
		//  campo1 : Es el campo que define el valor
		//  campo2 : Es el campo cuyo valor debe ser replica del primero
		function confirmarCampos(campo1, campo2){
			dijit.byId(campo2).regExp=dojo.byId(campo1).value;
			dijit.byId(campo2).validate();
		}
		
		
		
		
		
		
		//Funcion para pintar las mascaras de los campos como fecha o tlf
		function mascara(tipo,campo){
			var valor = $('#'+campo).val();
			switch(tipo){
				case "telefono":
					if((valor.length=='2')||(valor.length=='6'))
						$('#'+campo).val(valor+'-');
					break;
					
				default:
					break;
			}
		
		}
		
		
		
		
		
		
		
		//Funcion generica de Ajax basicamente para pintar contenido HTML cargado remotamente
		function cargaContenido(asincrono,pagina,data,contenedor,registrar){
		
			//Para evitar q el navegador utilize el cache
			//var tiempo = new Date();
			//var bandera_cache = tiempo.getTime();
		
			//Para evitar el error 411
			(data==null) ? data='' : '';
					
			
			$.ajax({
    			async: asincrono,
    			url: pagina,
   		 		type: 'POST',
    			data: data,
    			dataType: 'html',
    			timeout: 600000,
    			error: function(){
       				 alert('Error cargando el contenido');
   				 },
   			 	success: function(data){
					$('#'+contenedor).html(data);
					
					//Para inicializar los dojo widgets
					if(registrar==true)
						dojo.parser.parse();
					
				}
			});
		}
		
		
		//Funcion generica de Ajax basicamente
		function cargaContenido2(asincrono,pagina,data,contenedor, dataType){
			
			funcion_before();
			$.ajax({
    			async: asincrono,
    			url: pagina,
   		 		type: 'POST',
    			data: data,
    			dataType: dataType,
    			timeout: 600000,
    			error: function(){
       				 alert('Error cargando el contenido');
   				 },
   			 	success: function(data){
					funcion_success(data);
				}
			});
		}
		
		
		
		//  Esta funcion es para simular un pequeño delay en caso de ser necesario para mostrar adecuadamente los
		//  mensajes de cargando, loading, etc.
		//  Variables globales necesarias
		var t;
		var t_before;
		var t_after;
		//  contenedor: Contenedor sobre el cual se aplicara el efecto 
		//  efecto:     Efecto a ser disparado
		//  mostrar:    Puede ser true o false para saber si mostrar u ocultar
		//  funcion:    string conteniendo la llamada a la funcion a ejecutar al culminar el delay
		
		
		
		function delayMessage(contenedor,efecto,mostrar,funcion){
				
				var tiempo_espera = 1000;
				
				if(mostrar==true){
					t_before = new Date();
					t_before = t_before.getTime();
					switch(efecto){
						case 'fadeIn':
							$('#'+contenedor).fadeIn('slow');
							break;
							
						case 'DialogShow':
							dijit.byId(contenedor).show();
							
						case 'show':
							$('#'+contenedor).show('slow');
						
						default:
							break;
					}
				}else{
					t_after = new Date();
					t_after = t_after.getTime();
					var diferencia = t_after-t_before;
					if((tiempo_espera-diferencia)>0){
						t = setTimeout("delayMessage('"+contenedor+"','"+efecto+"',"+mostrar+","+funcion+")", tiempo_espera);
					}else{
						switch(efecto){
							case 'hide':
								$('#'+contenedor).hide('slow');
								eval(funcion);
								
								break;
						
							default:
								break;
						}
						
						return false;
					}
				
				
				
				}
				
				
				
		}
		
		
	
	//para simulanr un fixed para explorer 6
	function escrol(contenedor,tope){
		var midX;
		var midY;
		if($.browser.msie){
			midY = (document.body.clientHeight/2)-tope;
		}else{
			midY = (window.innerHeight/2)-tope;
		}
	
		document.getElementById(contenedor).style.top = document.body.scrollTop+midY;
	}
	
	
	
	
	
	/**************************************************************************************
	********	A continuacion un bloque de funciones que se encargan de procesar	*******
	********	todo lo relacionado con la pestaña superior que baja y es comun en 	*******
	********	todas las paginas (login y suscribir al boletin)					*******
	**************************************************************************************/
	
	//Funcion generica para realizar el logoin en todo el site
	function logIn(){
	
		funcion_before = function(){}
	
		//login
		var txtusuario = document.getElementById('txtusuario').value;
		
		//password
		var txtpwd = document.getElementById('txtpwd').value;
		
		var data = {clase: 'tUsuario', metodo: 'validaUsuario', txtusuario:txtusuario, txtpwd:txtpwd};
		
		//Defino la funciona a dispararse al ejecutar el ajax
		funcion_success = function(data){
		
			data = jQuery.trim(data);
			if(data!=false){
				
				//Escribo el nombre en el td correspondiente
				$('#usuario_logeado').html(data);
				
				//Deslizo el contenedor de logeado
				$('#contenedor_logeo_positivo').animate({top:'5'},'slow');
				
				//Cierro el div superior del login
				setTimeout("cerrarDiv()", 4000);
				
			}else{
				$('#msj_login').html('Usuario y/o Contrase&ntilde;a invalida.').animate({top:'0px'},'slow');
				//Cierro el div
				setTimeout("$('#msj_login').animate({top:'-120px'},'slow')", 2000);	
			}
			
		}
		cargaContenido2(true,'../../accion.php',data,'', 'html');
	
	}
	
	
	
	//Funcion generica para realizar el logout en todo el site
	function logout(){
		
		funcion_before = function(){}
		
		var data = {clase: 'tUsuario', metodo: 'logout'};
		
		//Defino la funciona a dispararse al ejecutar el ajax
		funcion_success = function(data){
		
			data = jQuery.trim(data);
			if(data=='exito'){
				
				//limpio el control de la clave
				document.getElementById('txtpwd').value='';
				
				//Desaparezco el contenedor de logeado
				$('#contenedor_logeo_positivo').animate({top:'-120'},'slow');
				
				//Cierro el div superior del login
				setTimeout("cerrarDiv()", 4000);
				
			}else{
				
				
			}
			
		}
		cargaContenido2(true,'../../accion.php',data,'', 'html');	
	}
		

	function suscribirse(){
	
		funcion_before = function(){}
	
		//extraigo el valor del email
		var parametros_extra = '\''+document.getElementById('email_suscribir').value+'\'';
		var data = {clase: 'tUsuarioBoletin', metodo: 'suscribir', parametros_extra:parametros_extra};
		
		//Defino la funciona a dispararse al ejecutar el ajax
		funcion_success = function(data){
		
			data = jQuery.trim(data);
			$('#msj_suscripcion').html(data).animate({top:'0px'},'slow');
			//Cierro el div
			setTimeout("$('#msj_suscripcion').animate({top:'-120px'},'slow')", 2000);
			
			
		}
		cargaContenido2(true,'../../accion.php',data,'', 'html');	
	
	}

	//valida y cierra el div superior en caso de estar abierto
	function cerrarDiv(){
		if($('#login').css('top')=='0px')
			$("#bot_login").click();
	
	}


	/************************************************************************************
	************					Fin del bloque					 ********************
	************************************************************************************/




	/****   Funcion que procesa el login a traves de la ventana flotante de continuar   ***
	*****   desarrollada para los archivos de ventanalogin que se encuentran en comun   **/
	function ventanaUsuarioRegistrado(){
	
	
		var parametros_extra ='\''+document.getElementById('ventana_txtusuario').value+'\',\''+document.getElementById('ventana_txtpwd').value+'\'';
	
		data = {parametros_extra:parametros_extra};
		
		//funcion_before = function(){};
		//funcion_success = function(){};
		
		enviar(true,'../../accion.php', data, 'html', true);
	
	}
	
	
	//Se encarga de procesar el recordar la contrasena cuando se olvido
	function enviarOlvidoContrasena(){
		$('#msj_error_olvido_contrasena').hide();
		funcion_before = function(){};
		funcion_success = function(data){
			//Actualizo el msj de error
			$('#msj_error_olvido_contrasena').html(data).fadeIn('slow');
			//document.getElementById('msj_error_olvido_contrasena').innerHTML = data;
			
			
		};
		
		var email = $('#direccion_recordar').val();
		
		var data = {clase: 'tUsuario', metodo: 'recordarContrasena', parametros_extra:"'"+email+"'"};
		cargaContenido2(true,'../accion.php',data,'', 'html');	
	}
	
	
	function displaySTC2008(){
		//window.open('../../../STCForo2008/home.php',"STC Foro 2008","status=yes,scrollbars=yes,toolbar=yes");
		window.open('../../../STCForo2008/home.php');
		//window.open('',"STCFOro");
	}















