// JavaScript Document

function change_enable( the_button, the_elem ){
elem_button = document.getElementsByName(the_button);
elem = document.getElementsByName(the_elem);

elem[0].disabled = elem_button[1].checked;
elem[1].disabled = elem_button[0].checked;
if( elem[0].disabled ){
	elem[0].className = "input_disabled";
	elem[1].className = "";
} else {
	elem[0].className = "";
	elem[1].className = "input_disabled";
}
}//change_enable()

//Deshabilita un elemento enlazado mediante un checkbox
function change_enable_checkbox( the_checkbox, the_elem ){
elem_checkbox = document.getElementsByName(the_checkbox);
elem = document.getElementsByName(the_elem);

elem[0].disabled = !elem_checkbox[0].checked;
if( elem[0].disabled ){
	elem[0].className = "input_disabled";
} else {
	elem[0].className = "";
}
}//change_enable()

//Funcion que habilita un elemento si el checkbox esta activado
//Aplica los estilos correspodientes solo al elemento the_elem
function enable_elements( the_elem, the_field ){
_checkbox = document.getElementsByName( "opc_" + the_field );
_elem = document.getElementsByName(the_elem);

_elem[0].disabled = !_checkbox[0].checked;

if( _elem[0].disabled ){
	_elem[0].className = "input_disabled";
} else {
	_elem[0].className = "";
}
}//change_enable_elements3()

//Funcion que habilita un elemento si el checkbox esta activado, aplica los estilos correspodientes a los elementos
function change_enable_elements3( the_elem, the_field ){
_checkbox = document.getElementsByName( "opc_" + the_field );
_elem = document.getElementsByName(the_elem);
td_elem = document.getElementById( "td_" + the_field );

_elem[0].disabled = !_checkbox[0].checked;

if( _elem[0].disabled ){
	td_elem.className = "input_disabled";
} else {
	td_elem.className = "";
}
}//change_enable_elements3()

//formularios con 1 campo oculto por cada campo utilizados para preservar el valor inicial de los datos
function change_enable_elements( the_elem, the_field ){
_checkbox = document.getElementsByName( "opc_" + the_field);
_elem = document.getElementsByName(the_elem);
td_elem = document.getElementById( "td_" + the_field );

_elem[0].disabled = !_checkbox[0].checked;
_elem[1].disabled = _checkbox[0].checked;

if( _elem[0].disabled ){
	td_elem.className = "input_disabled";
} else {
	td_elem.className = "";
}
}//change_enable_elements()

//variacion de la anterior donde se admiten hasta 3 campos con el mismo nombre
function change_enable_elements2( the_elem, the_field, the_radio ){
_checkbox = document.getElementsByName( "opc_" + the_field);
_elem = document.getElementsByName(the_elem);
_radio = document.getElementsByName(the_radio);
td_elem = document.getElementById( "td_" + the_field );

_elem[2].disabled = _checkbox[0].checked;
_radio[0].disabled = !_checkbox[0].checked;
_radio[1].disabled = !_checkbox[0].checked;

if( !_checkbox[0].checked ){
	_elem[0].disabled = true;
	_elem[1].disabled = true;
	td_elem.className = "input_disabled";
	
} else {
	_elem[0].disabled = !_radio[0].checked;
	_elem[1].disabled = !_radio[1].checked;
	td_elem.className = "";
		if( _elem[0].disabled ){ 
		_elem[0].className="input_disabled"; 
	} else { 
		_elem[0].className=""; 
	}
	
	if( _elem[1].disabled ){ 
		_elem[1].className="input_disabled"; 
	} else { 
		_elem[1].className=""; 
	}
}
}//change_enable_elements2()

//Manchego, variacion de la anterior donde se admiten hasta 3 campos con el mismo nombre
function change_enable_elements2a( the_elem, the_field, the_radio ){
_checkbox = document.getElementsByName(the_field);
_elem = document.getElementsByName(the_elem);
_radio = document.getElementsByName(the_radio);
td_elem = document.getElementById( "td_" + the_elem );


_elem[0].disabled = !_checkbox[0].checked;
_elem[1].disabled = true;
_radio[0].disabled = !_checkbox[0].checked;
_radio[1].disabled = !_checkbox[0].checked;

if( !_checkbox[0].checked ){
	td_elem.className = "input_disabled";
	_elem[0].className = "input_disabled";
	_elem[1].className = "input_disabled";	
	_radio[0].className = "input_disabled";	
	_radio[1].className = "input_disabled";
	
} else {
	td_elem.className = "";
	_elem[0].className = "";
	_radio[0].className = "";	
	_radio[1].className = "";
}
}//change_enable_elements2()


/* ---------------------------------------------------------------------- *\

  Function    : change_time

  Description : Cambia el valor de un elemento SELECT marcado como una hora de fin de un EVENTO y que esta relacionado con una hora de inicio. 
  				Dicho cambio deja la hora de fin con el mismo valor que la hora de inicio, siempre y cuando no este habilitado el parametro "opc", que indica que el elemento no se debe alterar ya que se encuentra en un campo opcionable de modificar(Paginas de Modificaciones) que requiere que un checkbox este habilitado.
  				
  Usage       : Paginas de Eventos

  Arguments   : elem - nombre del campo a validar
				
\* ---------------------------------------------------------------------- */

function change_time( valor, elem_name, opc ){
	
	//if( typeof(opc_lim_inicio)=="undefined" ){ 
	
		elem = document.getElementsByName(elem_name);
		
		elem[0].selectedIndex=valor;		
		
	//}

}

function check_selected(elem_name){
elem = document.getElementsByName(elem_name);
id_elem = document.getElementById( "td_" + elem_name);
error_elem = document.getElementById("div_" + elem_name);			

	if( elem[0].value=="" ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
		id_elem.className = "normal_elem";
		error_elem.style.display = "none";
	return 0;
	}
}//check_selected()



/* ---------------------------------------------------------------------- *\

  Function    : change_type_events

  Description : In/Habilita los elementos de formularios que correspondan a su tipo de evento.
  				
  Usage       : Paginas de Eventos

  Arguments   : form_name - nombre del formulario.

				is_checked - true o false, es el valor que indica si el checkbox TIPO_GENERAL esta activado.

				no_display_msg - opcional, utilicelo si NO desea mostrar las alertas de cambios de tipo de evento.
				
\* ---------------------------------------------------------------------- */

function change_type_events( form_name, is_checked, no_display_msg ){
the_form = document.getElementsByName(form_name);

 if( !is_checked ){
	 
	if( typeof(no_display_msg)=="undefined" ){ 	 
	
 		if( !confirm( "El cambio de tipo de evento de interes general implica eliminar los campos \"contenido\", \"fotografo\" e \"imagen\" de la base de datos.\nAdemas el evento dejara de aparecer en el calendario de eventos y solo se mostrara en la agenda de eventos\nDesea Continuar?"  ) ){ the_form[0].tipo_gral.checked=true; return 0; }
	 
	}
	
	the_form[0].opc_contenido.checked = false;
	 the_form[0].opc_contenido.disabled = true;
	 the_form[0].contenido[0].disabled = true;
	 the_form[0].contenido[1].disabled = true;
  	 the_form[0].contenido[0].value = "";
	 the_form[0].contenido[1].value = "";
	the_form[0].opc_fotografo.checked = false;		
	 the_form[0].opc_fotografo.disabled = true;	
	 the_form[0].fotografo[0].disabled = true;
	 the_form[0].fotografo[1].disabled = true;	
	 the_form[0].fotografo[0].value = "";
	 the_form[0].fotografo[1].value = "";		 
 	the_form[0].opc_img_file.checked = false;		 
	 the_form[0].opc_img_file.disabled = true;		 
	 the_form[0].img_file.disabled = true;
	 the_form[0].img_default.disabled = true;
	 the_form[0].img_default.checked = false;	 
 } else {
	
	if( typeof(no_display_msg)=="undefined" ){ 	 
	
		if( !confirm( "Esta a punto de cambiar el tipo de evento a evento de interes general, debera llenar los campos \"contenido\", \"fotografo\" e \"imagen\". \nDesea Continuar?"  ) ){ the_form[0].tipo_gral.checked=false; return 0; }
	 
	}
	
	the_form[0].opc_contenido.disabled = false; 
	 //the_form[0].contenido[0].disabled = false;
	  //the_form[0].contenido[1].disabled = false;	
	the_form[0].opc_fotografo.disabled = false;	
	 //the_form[0].fotografo[0].disabled = false;
	  //the_form[0].fotografo[1].disabled = false;	
 	the_form[0].opc_img_file.disabled = false;	
	 //the_form[0].img_file.disabled = false;
	  //the_form[0].img_default.disabled = false;

}
}//change_type_events

function check_IEbrowser(){
	var win_ie_ver = parseFloat(navigator.appVersion.split("MSIE")[1]);
	if (navigator.userAgent.indexOf('Mac')        >= 0) { win_ie_ver = 0; }
	if (navigator.userAgent.indexOf('Windows CE') >= 0) { win_ie_ver = 0; }
	if (navigator.userAgent.indexOf('Opera')      >= 0) { win_ie_ver = 0; }
	if (win_ie_ver >= 5.5) {
		return true;
	} else { 
		return false; 
	}
}

/* ---------------------------------------------------------------------- *\

  Function    : editor_value

  Description : llamada cuando carga una pagina en la etiqueta Body para declarar la variable que contiene el Textarea dinamico

  Usage       : exclusivo etiqueta BODY

  Arguments   : field_name - nombre del campo Textarea dinamico


\* ---------------------------------------------------------------------- */


function editor_value(field_name){

	if( check_IEbrowser()==true ){
		
		editor_value = document.all["_" + field_name + "_editor"];
	
	}

}



/* ---------------------------------------------------------------------- *\

  Function    : count_chars

  Description : Cuenta los caracteres de un Campo y asigna el resultado a los campos de texto correspondientes

  Usage       : <input type=Textarea>(No dinamico) 
  				editor_event()->src=editor.js
				valida_textEditor()->src=valida.js 

  Arguments   : field_name - nombre del campo Textarea dinamico

                limit: cantidad maxima de caracteres permitidas para el campo field_name
				
				needle: Opcional, indica si se debe aumentar un caracter al evento por error en buffer, aplicable a eventos onKey
				
  Errores: Mien
  
\* ---------------------------------------------------------------------- */

function count_chars( field_name, limit, needle ){

the_field = document.getElementsByName(field_name);	

count_field = document.getElementsByName( 'count_' + field_name );	

rest_field = document.getElementsByName( 'rest_' + field_name );	

length_field=0;

	if( check_IEbrowser()==true && enable_editor==true ){

		string_content = editor_getHTML(field_name);
	
		if ( string_content.toLowerCase() == '<p>&nbsp;</p>' ) { string_content = ""; }
		
		if ( string_content.toLowerCase() == '&nbsp;' ) { string_content = ""; }
		
		
		matchTag = /<\/?(\w+)((?:[^'">]*|'[^']*'|"[^"]*")*)>/g;   // this will match tags, but still doesn't handle container tags (textarea, comments, etc)
		
		string_content = string_content.replace(matchTag, '');
		
		string_content = string_content.replace(/\r\n/g, ' ');
	    
		string_content = string_content.replace(/\n/g, ' ');
		
		string_content = string_content.replace(/\r/g, ' ');

		string_content = string_content.replace(/&nbsp;/g, ' ');

		//alert(editor_value.type + string_content+ string_content.length);
		
		length_field = string_content.length;
		
		if ( needle ){ length_field += needle; }
	
	} else {

		if(the_field[0].value.length>=limit && limit>0 ) {
	
			the_field[0].value = the_field[0].value.slice( 0, limit );

		}
		
		length_field = the_field[0].value.length;
		
		//if ( needle ){ length_field += needle; } --> despreciado
	
	}

	count_field[0].value = length_field;

	if( limit==0 ){
		
		rest_field[0].value = "*";	
	
	} else {
		
		rest_field[0].value = limit - length_field;		
	
	}

}//count_chars()
	
function enable_submit( the_form, submit_name ){
the_form = document.getElementsByName(the_form);	
the_submit = document.getElementsByName(submit_name);
hecho = 0;

	for( i=0; i<the_form[0].length; i++ ){
		if( the_form[0].elements[i].type=="checkbox" && the_form[0].elements[i].checked==true && the_form[0].elements[i].name!="tipo_gral" ){
			hecho = 1;
		}
	}

	if( hecho>0 ){
		the_submit[0].className = "";
		the_submit[0].disabled = false;
	} else {
		the_submit[0].className = "input_disabled";
		the_submit[0].disabled = true;
	}
}//enable_submit()



/* ---------------------------------------------------------------------- *\

  Function    : filter_textEditor

  Description : Filtra Caracteres especiales y HTML del campo textarea cuando esta en campo editor, para su conteo.
  				Devuelve el valor del elemento ya filtrados los caracteres.
  				
  Usage       : 

  Arguments   : elem - nombre del campo a validar
				
\* ---------------------------------------------------------------------- */


function filter_textEditor( elem ){

	string_content = editor_getHTML(elem);
	
		if ( string_content.toLowerCase() == '<p>&nbsp;</p>' ) { string_content = ""; }
		
		if ( string_content.toLowerCase() == '&nbsp;' ) { string_content = ""; }
		
		
		matchTag = /<\/?(\w+)((?:[^'">]*|'[^']*'|"[^"]*")*)>/g;   // this will match tags, but still doesn't handle container tags (textarea, comments, etc)
		
		string_content = string_content.replace(matchTag, '');
		
		string_content = string_content.replace(/\r\n/g, ' ');
	    
		string_content = string_content.replace(/\n/g, ' ');
		
		string_content = string_content.replace(/\r/g, ' ');

		string_content = string_content.replace(/&nbsp;/g, ' ');

return(string_content);

}


function valida_lugar_opc( elem_name, minimo ){
elem = document.getElementsByName(elem_name);
id_elem = document.getElementById( "td_" + elem_name);
error_elem = document.getElementById("div_" + elem_name);			

if( elem[0].disabled==true ){
	if( elem[1].value=="" ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
		if ( elem[1].value.length<minimo ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;
		}
	}
} else {
	if( elem[0].value=="" ){
		
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
		id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;
		/*if ( elem[0].value.length<minimo ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;
		}*/
	}
}
}//valida_lugar_opc()

function valida_input_video(input_file_name ){

  var h_name_video=getObjeto('h_'+input_file_name);
  var input_file = document.getElementsByName(input_file_name);
  var id_elem = document.getElementById( "xtd_" + input_file_name);
  var error_elem = document.getElementById("xdiv_" + input_file_name);
  
  //alert("manda: "+h_name_video.name);
  if( (h_name_video.value=="sivideo") ){
	if ( input_file[0].value.length<1 ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
		if ( input_file[0].value.match( /\.mov$|\.mpeg$|\.mpg$|\.avi$/i ) ){
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;
		} else {
			alert( "Formato de archivo no valido\nExtensiones permitidas:\n mov,avi\n\n Error en el video "+h_name_video.name.substring(h_name_video.name.length-1,h_name_video.name.length));
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
		}
	}
	

  } else {
	id_elem.className = "normal_elem";
	error_elem.style.display = "none";
  return 0;
  }
}//valida_input_file()


function valida_input_file( checkbox_name, input_file_name ){
default_checkbox = document.getElementsByName(checkbox_name);
input_file = document.getElementsByName(input_file_name);
id_elem = document.getElementById( "td_" + input_file_name);
error_elem = document.getElementById("div_" + input_file_name);			

  if( default_checkbox[0].checked==false ){
	if ( input_file[0].value.length<1 ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
		if ( input_file[0].value.match( /\.jpg$|\.jpeg$|\.gif$|\.png$/i ) ){
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;
		} else {
			alert( "Formato de archivo no valido\nExtensiones permitidas:\n jpeg, jpg, gif, png" );
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
		}
	}
	

  } else {
	id_elem.className = "normal_elem";
	error_elem.style.display = "none";
  return 0;
  }
}//valida_input_file()

function valida_text( tamanio, tamanio_max, tipo, valor, elem, opcional ){
id_elem = document.getElementById( "td_" + elem);
error_elem = document.getElementById("div_" + elem);			

if( tamanio_max>0 ){
  if ( valor.length>tamanio_max ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
  } 
} else {
	  id_elem.className = "normal_elem";
	  error_elem.style.display = "none";
}
 
  if ( valor.length<tamanio ){
	if( isNaN(opcional) ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
	  if ( valor.length>0 ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	  return 1;
	  } else {
		id_elem.className = "normal_elem";
		error_elem.style.display = "none";
   	  return 0;
	  }
	}
  } else {

	switch( tipo ){
		case "digit":		
		digit_exp = /^[0-9]+$/;

		if ( !digit_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
		case "alpha":
		alpha_exp = /^[a-z]+(\s+[a-z]+)*$/i;

		if ( !alpha_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
		case "alpha-punct":
		alpha_exp = /^[a-zρΡαινσϊΑΙΝΣΪ.]+(\s+[a-zρΡαινσϊΑΙΝΣΪ.]+)*$/i;

		if ( !alpha_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
		case "alphanum":
		alpha_exp = /^[a-z0-9]+$/i;

		if ( !alpha_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
	}
  id_elem.className = "normal_elem";
  error_elem.style.display = "none";
  return 0;	
  }
  return 0;
}//valida_text()

/*Funcion de prueba para compatibilidad con navegadores gecko y netscape
  Necesita que el archivo etc.js sea incluido en la misma pag donde este
  (valida.js)se incluya.
*/

function valida_text2( tamanio, tamanio_max, tipo, valor, elem, opcional ){

id_elem = getObjeto( "td_" + elem);
error_elem = getObjeto("div_" + elem);			

if( tamanio_max>0 ){
  if ( valor.length>tamanio_max ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
  } 
} else {
	  id_elem.className = "normal_elem";
	  error_elem.style.display = "none";
}
 
  if ( valor.length<tamanio ){
	if( isNaN(opcional) ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
	  if ( valor.length>0 ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	  return 1;
	  } else {
		id_elem.className = "normal_elem";
		error_elem.style.display = "none";
   	  return 0;
	  }
	}
  } else {

	switch( tipo ){
		case "digit":		
		digit_exp = /^[0-9]+$/;

		if ( !digit_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
		case "alpha":
		alpha_exp = /^[a-z]+(\s+[a-z]+)*$/i;

		if ( !alpha_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
		case "alpha-punct":
		alpha_exp = /^[a-zρΡαινσϊΑΙΝΣΪ.]+(\s+[a-zρΡαινσϊΑΙΝΣΪ.]+)*$/i;

		if ( !alpha_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
		case "alphanum":
		alpha_exp = /^[a-z0-9]+$/i;

		if ( !alpha_exp.test(valor) ){
			id_elem.className = "error_elem";
			error_elem.style.display = "block";
		return 1;
			
		} else {
			id_elem.className = "normal_elem";
			error_elem.style.display = "none";
		return 0;	
		}
	break;
	}
  id_elem.className = "normal_elem";
  error_elem.style.display = "none";
  return 0;	
  }
  return 0;
}//valida_text2()



/* ---------------------------------------------------------------------- *\

  Function    : valida_textEditor

  Description : Mismo proposito que valida_text(), la diferencia es que esta funcion solo valida los caracteres del textarea en 
  				modo Editor, regresa 0 si la validacion a sido exitosa y 1 en caso que no cumpla con los criterios de validacion. 
				Como solo se valida este campo y este campo puede llevar cualquier caracter entonces solo valida la cantidad de caracteres.

  Usage       : Funciones de validacion de formularios y vista previa.

  Arguments   : tamanio - minimo de caracteres 
  				
				tamanio_max - max de caracteres, un 0(cero) indica que no hay limite
				
				elem - nombre del campo a validar
				
				needle: Opcional, indica si se debe aumentar un caracter al evento por error en buffer, aplicable a eventos onKey
				
\* ---------------------------------------------------------------------- */

function valida_textEditor( tamanio, tamanio_max, elem, opcional ){
	
	id_elem = document.getElementById( "td_" + elem);
	
	error_elem = document.getElementById("div_" + elem);			
	
	valor_filtrado = filter_textEditor( elem );

	if( tamanio_max>0 ){
	
		if ( valor_filtrado.length>tamanio_max ){
	
			id_elem.className = "error_elem";
			
			error_elem.style.display = "block";
			
			return 1;
		 
		} 
	
	} else {
		
		id_elem.className = "normal_elem";
		
		error_elem.style.display = "none";
	
	}
 
	if ( valor_filtrado.length<tamanio ){
		
		if( isNaN(opcional) ){
			
			id_elem.className = "error_elem";
			
			error_elem.style.display = "block";
		
			return 1;
		
		} else {
			
		 	if ( valor_filtrado.length>0 ){
			
				id_elem.className = "error_elem";
			
				error_elem.style.display = "block";
		  
		  		return 1;
		  
		  	} else {
			
				id_elem.className = "normal_elem";
			
				error_elem.style.display = "none";
		  	
				return 0;
		  	
			}
	
		}
	
	}

	return 0;

}//valida_textEditor()



/* ---------------------------------------------------------------------- *\

  Function    : valida_hora

  Description : Valida los campos Select que hacen referencia a los campos hora inicio y hora fin de un EVENTO.
  				
  Usage       : Funciones de validacion de formularios y vista previa.

  Arguments   : elem - nombre del campo a validar

				hora - hora a validar en formato "campoHora.campoMinuto"
				
				lim_inicio - hora menor del intervalo permitido
				
				lim_fin - hora mayor del intervalo permitido
				
				opc_lim_inicio : Opcional, pero solo requerido para campos hora fin, indica si se debe comprobar que el limite de inicio tambien sea mayor a al campo hora de inicio, el cual esta en formato "campoHora.campoMinuto"
				
\* ---------------------------------------------------------------------- */

function valida_hora( elem_name, hora, lim_inicio, lim_fin, opc_lim_inicio ){

id_elem = document.getElementById( "td_" + elem_name);

error_elem = document.getElementById("div_" + elem_name);			

if( typeof(opc_lim_inicio)!="undefined" ){ 

	lim_inicio = opc_lim_inicio; 

	if( hora<=lim_inicio || hora>lim_fin  ){	//Unica linea que cambia con respecto al else de if (typeof..., 
	
		id_elem.className = "error_elem";
				
		error_elem.style.display = "block";
			
		return 1;
		
	} else {

		id_elem.className = "normal_elem";
				
		error_elem.style.display = "none";
			
		return 0;	
	}
	
} else {

	if( hora<lim_inicio || hora>lim_fin  ){
	
		id_elem.className = "error_elem";
				
		error_elem.style.display = "block";
			
		return 1;
		
	} else {

		id_elem.className = "normal_elem";
				
		error_elem.style.display = "none";
			
		return 0;	
	}

}

}//valida_hora()

function valida_mail( valor, elem_name ){
id_elem = document.getElementById( "td_" + elem_name);
error_elem = document.getElementById("div_" + elem_name);			

	mail_exp = /^[a-z]+([_-]+[a-z]+)*@[a-z]+(\.[a-z]{2,}){1,3}$/i;


	if ( !mail_exp.test(valor) ){
		id_elem.className = "error_elem";
		error_elem.style.display = "block";
	return 1;
	} else {
		id_elem.className = "normal_elem";
		error_elem.style.display = "none";
	return 0;	
	}
}//valida_mail()


/* ---------------------------------------------------------------------- *\

  Function    : reset_checkbox

  Description : Restaura todos los elementos checkbox a un estado de no checado.
  				Utilizado en paginas de Modificar en las que los elementos se validan por medio de checkbox.
				Es util en navegadores como netscape que no restauran los elementos iniciales de un formulario al actualizar la pagina.
  				
  Usage       : Formularios de Modificar datos, etiqueta BODY evento onLoad.

  Arguments   : elem - nombre del campo TEXTBOX a restaurar
				
\* ---------------------------------------------------------------------- */

function reset_checkbox( the_form ){
	
	the_form = document.getElementsByName(the_form);

	for( i=0; i<the_form[0].length; i++ ){
		
		if( the_form[0].elements[i].type=="checkbox" ){
			
			if( the_form[0].elements[i].name!="tipo_gral" ){ 
				
				the_form[0].elements[i].checked=false;
			}
			
		}
	
	}

}


/* ---------------------------------------------------------------------- *\

  Function    : restauraTextbox

  Description : Restaura o cambia el valor de un elemento en un campo TEXTBOX a su original, para esto necesita que exista un campo oculto con el mismo nombre que el elemento que contenga su valor de inicio y permanezca inalterado.
  				
  Usage       : Formularios de Modificar datos.

  Arguments   : elem - nombre del campo TEXTBOX a restaurar
				
\* ---------------------------------------------------------------------- */

function restauraTextbox( elem ){

	checkbox_elem = document.getElementsByName( "opc_" + elem );

	if( !checkbox_elem[0].checked ){

		elem = document.getElementsByName(elem);

		elem[0].value = elem[1].value;
	
	}

}



/* ---------------------------------------------------------------------- *\

  Function    : restauraTextbox

  Description : Restaura o cambia el valor de un elemento en un campo TEXTBOX a su original, para esto necesita que exista un campo oculto con el mismo nombre que el elemento que contenga su valor de inicio y permanezca inalterado.
  				
  Usage       : Formularios de Modificar datos.

  Arguments   : elem - nombre del campo TEXTBOX a restaurar
  
  				alt_chkbox - nombre delel checkbox al que esta asociado el elemento si este tiene distinto nombre al elemento
				
\* ---------------------------------------------------------------------- */

function restauraSelect( elem, alt_chkbox ){
	
	if( typeof(alt_chkbox)=="undefined" ){ 

		checkbox_elem = document.getElementsByName( "opc_" + elem );
	
	} else {
		
		checkbox_elem = document.getElementsByName( alt_chkbox );
	
	}
	
	if( !checkbox_elem[0].checked ){

		elem = document.getElementsByName(elem);
		
		elem[0].selectedIndex = elem[1].value;		
	
	}
	
}
