/* Método que manda a llamar a la petición que actualiza los
 * catálogos del sistema de Persona.
 * @param control el objeto del control que invoca el método
 * @param catalogo el nombre del catalogo que se esta recargando
 * @param target el nombre del control a donde se cargarán los catálogos
 */
function reloadCatalogo(control,catalogo,target){
	var id   = getValueField(control)
	var path = './reloadCatalogos.do?methodToCall='+catalogo+'&id=' + id;
	creaCombo(path,target);

/*

	var opcion = document.createElement("option");
	opcion.setAttribute("value", '0');
	opcion.appendChild(document.createTextNode('TODAS'));
//	control.appendChild(opcion);
	control.length = control.length + 1;
	control.options[control.length-1].text = opcion.text;
	control.options[control.length-1].value = opcion.value;
*/
}

/* Método que establece los valores correspondientes en el combo de estados
 * y municipios dado un cambio en la selección de país.
 */
function validatePais(control){
	if(control.options[control.selectedIndex].value!='MX'){
		var estadoCtrl = this.document.forms[0].elements['domicilio.estado'];
		estadoCtrl.selectedIndex = 1;
		estadoCtrl.disabled = true;
   	    creaCombo('./reloadCatalogos.do?methodToCall=municipios&id=0','domicilio.municipio');
		this.document.forms[0].elements['domicilio.municipio'].disabled = true;
		this.document.forms[0].elements['domicilio.municipio'].selectedIndex = 1;
	}else {
		this.document.forms[0].elements['domicilio.estado'].selectedIndex = 0;
		this.document.forms[0].elements['domicilio.municipio'].selectedIndex = 0;
		this.document.forms[0].elements['domicilio.estado'].disabled = false;
		this.document.forms[0].elements['domicilio.municipio'].disabled = false;
	}
}

function redirect(petition, methodToCall){
	alert(petition);
	alert(methodToCall);

	if(methodToCall!=''){
		petition = petition  + '?methodToCall=' + methodToCall;
	}

	this.document.forms[0].action = petition;
	this.document.forms[0].submit();

}

function resetEditUsuario(){
	this.document.forms[0].reset();
	validatePais(document.forms[0].elements['domicilio.pais']);

	var estadoCtrl = this.document.forms[0].elements['domicilio.estado'];

	creaCombo('./reloadCatalogos.do?methodToCall=municipios&id='+ 
		estadoCtrl.options[estadoCtrl.selectedIndex].value,'domicilio.municipio');
}

function resetFiltro(){
	this.document.forms[0].reset();
	reloadCatalogo(document.forms[0].elements['pkUsuario.fkUnidad.fkDependencia.idDependencia'],
		'unidades','pkUsuario.fkUnidad.idUnidad');
}

/* Método que valida que la selección del perfil 'Administrador IFAI' contenga
 * como dependencia capturada al IFAI.
 * @param control El combo de selección de los perfiles
 * @param value El valor de la clave para la dependencia IFAI
 */
function validateAdminIFAI(control, value){

	var ctrlDep = document.forms[0].elements['pkUsuario.fkUnidad.fkDependencia.idDependencia'];


	//Se trata de una captura de perfil múltiple
	if(control.type=='select-multiple'){

		var elements = control.options;
		var perfil = '';


		/*Establece por defecto al IFAI en la captura de la dependencia cuando el o 
		* los perfiles seleccionados incluyan al AdmonIFAI yo Responsable SP.
		*/
		for(var i = 0;i < control.length;i++){
			perfil = control.options[i].value;

			if(perfil=='1' || perfil =='4'){

				//Si la dependencia es de solo lectura.
				if(ctrlDep.type=='hidden'){
					if(ctrlDep.value!=value){//y no es el IFAI.
						//Elimina el perfil puesto que este no le pertenece a 
						//otro tipo de dependencia.
						callselectAll('usuPerfiles',false);
						control.options[i].selected = true;
						TransferData('usuPerfiles','catPerfiles');
						break;
					}
				}else{
					ctrlDep.value = value;
					break;
				}
			}
			reloadCatalogo(ctrlDep,'unidades','pkUsuario.fkUnidad.idUnidad');
		}

		var i = 0;

		//Si la selección incluye al Responsable SDP, habilita el combo de Unidad Administrativa
		for(;i < control.length;i++){
			perfil = control.options[i].value;

			if(perfil=='2'){
				var ctrlUni = document.forms[0].elements['pkUsuario.fkUnidad.idUnidad'];
				ctrlUni.disabled = false;
				break;
			}
		}

		//Si la selección no incluye al Responsable SDP, deshabilita el combo de Unidad Administrativa
		if(i==control.length){
			var ctrlUni = document.forms[0].elements['pkUsuario.fkUnidad.idUnidad'];
			ctrlUni.value = 0;
			ctrlUni.disabled = true;
		}
	
	}else{//Si se trata de la captura de un usuario con perfil único...
		var perfil = control.options[control.selectedIndex].value;
		var ctrlUni = document.forms[0].elements['pkUsuario.fkUnidad.idUnidad'];
		//Si tiene el perfil de AdministradorIFAI o ResponsableSDP...
		if(perfil=='1' || perfil =='4'){
			//Establece el valor de la dependencia al identificador del IFAI.
			ctrlDep.value = value;
		}else if(perfil=='2' || perfil =='6'){
			//Si se captura a un SDP o Resp SDP se habilita la UA.
			ctrlUni.disabled = false;
		}else if(perfil=='5'){
			//Si se trata de un Op Dep se deshabilita la UA.
			ctrlUni.selectedIndex = 0;
			ctrlUni.disabled = true;
		}

	}
}

/* Método que establece los valores de la dependencia y unidad administrativa
 * dependiendo del o los valores que se asignen en el perfil.
 * @param control El combo de selección de los perfiles
 * @param value El valor de la clave para la dependencia IFAI
 */
function setDepUni(control, value){
	var perfil = control.options[control.selectedIndex].value
	if(perfil=='1' || perfil =='4'){
		var ctrlDep = document.forms[0].elements['pkUsuario.fkUnidad.fkDependencia.idDependencia'];
		ctrlDep.value = value;
	}
}

/* Método que abre una pantalla auxiliar para desplegar la impresión del listado
 */
function abre(pager){
	window.open("./printReportUsuarios.do?pager.offset="+pager, "Persona_Print","resizable=no,scrollbars=yes,status=no");
}

/* Método que manda a guardar el registro del usuario
 */
function guardaUsuario(){
	try{
		var mTC = document.forms[0].methodToCall.value;
		var mssg = '';

		//Valida la unidad administrativa.
		var ctrlUni = document.forms[0].elements['pkUsuario.fkUnidad.idUnidad'];
		var uniValue = 0;
		if(!ctrlUni.disabled){
			uniValue = ctrlUni.options[ctrlUni.selectedIndex].value
		}
		var perfiles = document.forms[0].usuPerfiles;
		var perfil;

		if(perfiles.type=='select-multiple'){
			for(var i = 0;i < perfiles.length;i++){
				perfil = perfiles.options[i].value;

				//Si el perfil es SDP o Op SDP y no se ha seleccionado una UA....
				if((perfil=='2' || perfil =='6') && uniValue=='-1'){
					alert('Debe ingresar el dato de Unidad Administrativa, es requerido.');
					return false;
				}
			}
		}else if(perfiles.type=='select-one'){
			perfil = perfiles.options[perfiles.selectedIndex].value;
			//Si el perfil es SDP o Op SDP y no se ha seleccionado una UA....
			if((perfil=='2' || perfil =='6') && uniValue=='-1'){
				alert('Debe ingresar el dato de Unidad Administrativa, es requerido.');
				return false;
			}
		}
		
		if(mTC=='insert'){
			mssg = '\u00BFDesea continuar con la captura del usuario?';
		}else{
			mssg = '\u00BFDesea continuar con la modificaci\u00F3n del usuario?';	
		}

		if(validateFormUsuario(this.document.forms[0])&&confirm(mssg)){
			if(perfiles.type=='select-multiple'){
				callselectAll('usuPerfiles',true);
			}
			this.document.forms[0].submit();
			return true;
		}

		return false;
	}catch (e){
		alert("Hay un problema con el nombre del certificado. Verifique que sus datos esten correctos.");
	}

}

/* Método que pide la confirmación para eliminar a un usuario.
 */
function eliminaUsuario(){
	if(confirm('\u00BFDesea eliminar al usuario?')){
		this.document.location = './updateUsuario.do?methodToCall=delete'
		return true;
	}

	return false;
}


/*
 * Método que guarda la contraseña del usuario.
 */
function guardaPassword(){

	if(!validateFormPasswordUsuario(this.document.forms[0])){
		return false;
	}

	var str = document.forms[0].newPasssword.value;

	var patternAlphanumeric = /^([a-zA-Z0-9]{6,8})$/g;
	var patternNumbers = /^[0-9]{6,8}$/g;
	var patternLetters = /^[a-zA-Z]{6,8}$/g;
	
	var exist = str.match(patternAlphanumeric); 
	if(exist==null){
		alert('La nueva contrase\u00F1a debe contener caracteres alfanum\u00E9ricos.');
		return false;
	} 

	exist = str.match(patternNumbers); 
	if(exist!=null){
		alert('La nueva contrase\u00F1a debe contener al menos una letra.');
		return false;
	} 

	exist = str.match(patternLetters); 
	if(exist!=null){
		alert('La nueva contrase\u00F1a debe contener al menos un n\u00FAmero.');
		return false;
	} 


	document.forms[0].submit();
	return true;
}
