/* *******************************************
 * Utilidades varias:
 * Requiere jQuery 1.4.2+
 * 
 * - Funciones de checkall / uncheckall para los listados
 * - Funcion de validacion de formularios
 * 
 ******************************************* */

jQuery(document).ready(function(){
//CON ESTA FUNCIÓN VOY A CARGAR DE NUEVO LA PAGINA CON EL VALOR DE LANG DE ACUERDO AL IDIOMA SELECCIONADO
	$('#idioma').change(function(){		
		
		//var url = document.URL;
		var url = location.href;
		var idioma = $('#idioma').val(); 
		var i = url.indexOf('lang=');
		//jQuery.url.setUrl(url);
		//var segmento1 = jQuery.url.segment(1);
		
		if(i>0){
			direccion = url.substring(0,(i-1))+'?lang='+idioma+url.substring(((i-1)+8));
		}else{
			
				var j = url.indexOf('?');
				if(j>0){
					direccion = url.substring(0,(j))+'?lang='+idioma+'&'+url.substring(j+1);
				}else{
					direccion = url+'?lang='+idioma;
				}	
		}
	
			window.location.replace(direccion);
		
	});
	
	
	//-----[VALIDACION DE FORMULARIOS]-----
	$('form').each(function(){
		$(this).submit(function(){
			return checkForms($(this));
		});
	});
	//-----[NOTIFICACION DE ACCIONES]------
	if($.getUrlVar('e')=='o'){
		$(function(){
			$.notifyBar({
				html: 'Los datos fueron guardados correctamente.',
				delay: 2000,
				cls: 'success',
				animationSpeed: 'normal',
				close: true
			});
		});
	}else if($.getUrlVar('e')=='1'){
		$(function(){
			$.notifyBar({
				html: 'Ocurrio un error, verifique los datos cargados.',
				delay: 2000,
				cls: 'error',
				animationSpeed: 'normal',
				close: true
			});
		});
	}else if($.getUrlVar('e')!=undefined){
		$(function(){
			$.notifyBar({
				html: unescape($.getUrlVar('e')),
				delay: 2000,
				cls: 'error',
				animationSpeed: 'normal',
				close: true
			});
		});
	}
});
/* *******[EXTENSION jQuery]********* */
$.extend({
	getUrlVars: function(){
		var vars = [], hash;
		var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
		for(var i = 0; i < hashes.length; i++){
			hash = hashes[i].split('=');
			vars.push(hash[0]);
			vars[hash[0]] = hash[1];
		}
		return vars;
	},
	getUrlVar: function(name){
		return $.getUrlVars()[name];
	}
});
//-----[FUNCION DE VALIDACION DE FORMUALRIOS]----
function checkForms(frm){
	var msg_es = '';
	var msg_en = '';
	var camposF = new Array();
	$(frm).find(':input').each(function(){
		if($(this).attr('accept')!='' && $(this).attr('accept')!=undefined){
			var accept = $(this).attr('accept').split('|');
			var cadena = $(this).val();
			var p = camposF.length;
			//------
			$(this).removeClass('required');
			switch(accept[0]){
				case 'string':
					if(!isString(cadena)){
						msg_es += accept[1]+': debe contener caracteres alfanumericos.\n';
						msg_en += accept[1]+': it must contain alphanumeric characters.\n';
						camposF[p] = $(this);
					}
					break;
				
				case 'number':
					if(!isNumber(cadena)){
						msg_es += accept[1]+': debe contener un numero entero.\n';
						msg_en += accept[1]+': it must contain an whole integer.\n';
						camposF[p] = $(this);
					}
					break;
				case 'decimal':
					if(!isDecimal(cadena)){
						msg_es += accept[1]+': debe contener un numero entero o decimal.\n';
						msg_en += accept[1]+': it must contain a whole number or decimal.\n';
						camposF[p] = $(this);
					}
					break;
				case 'telefono':
					if(!isTelefono(cadena)){
						msg_es += accept[1]+': debe contener solo numeros.\n';
						msg_en += accept[1]+': it must contain only numbers.\n';
						camposF[p] = $(this);
					}
					break;
				case 'email':
					if(!isEmail(cadena)){
						msg_es += accept[1]+': debe contener una direccion de email valida.\n';
						msg_en += accept[1]+': it must contain a valid email address.\n';
						camposF[p] = $(this);
					}
					break;
				case 'date':
					if(!isDate(cadena)){
						msg_es += accept[1]+': debe contener una fecha valida (ej. dd/mm/AAAA)\n';
						msg_en += accept[1]+': it must contain a valid date (eg dd/mm/yyyy)\n';
						camposF[p] = $(this);
					}
					break;
				
				case 'select':
					if(!isString(cadena)){
						msg_es += accept[1]+': debe seleccionar alguna opcion.\n';
						msg_en += accept[1]+': You must select one option.\n';
						camposF[p] = $(this);
					}
					break;
				case 'chk':
					if($('#CheckBox').attr('checked') == false){
						msg_es += accept[1]+': debe tildar el checkbox.\n';
						msg_en += accept[1]+': You must tick the checkbox.\n';
						camposF[p] = $(this);
					}
					break;
			}
		}
	});
	
	if(msg_es!=''){
		$.each(camposF,function(){
			$(this).addClass('required');
		});
		//---------
		msg_es = 'Se encontraron los siguientes errores:\n------------------------------------------------\n'+msg_es+'-----------------------\nVerifique los campos marcados en rojo.';
		msg_en = 'The following errors were found:\n------------------------------------------------\n'+msg_en+'-----------------------\nCheck the fields marked in red.';
		
		var idioma = $("#lang").val();
		if(idioma=='es'){
			msg = msg_es;
		}else{
			msg = msg_en;
		}
		
		
		alert(msg);
		if(camposF[0].attr('type')!='select-one'){
			camposF[0].select();
		}else{
			camposF[0].focus();
		}
		return false;
	}
	return true;
}
function isString(str){
	if(str.match(/\w+/)) return true;
	else return false;
}
function isNumber(str){
	if(str.match(/^[\-+]?[0-9]+\b$/)) return true;
	else return false;
}
function isTelefono(str){//funcion para que solo se ingresen digitos en el telefono
	if(str.match(/^[0-9]+\b$/)) return true;
	else return false;
}
function isEmail(str){
	if(str.match(/^\b[a-z0-9._%+-]+@(?:[a-z0-9-]+\.)+[a-z]{2,4}\b$/)) return true;
	else return false;
}
/*function isDecimal(str){
	if(str.match(/^[\-+]?[0-9]*\.?[0-9]+\b$/)) return true;
	else return false;
}*/
function isDecimal(str){
	if(str.match(/^[\-+]?[0-9]{1,}(\.|\,)?[0-9]{0,2}$/)) return true;
	else return false;
}
function isDate(str){
	if(str.match(/^\b(0?[1-9]|[12][0-9]|3[01])[\- \/.](0?[1-9]|1[012])[\- \/.](19|20)?[0-9]{2}\b$/)) return true;
	else return false;
}
function isTime(str){
	if(str.match(/^\b[0-9]{2}(\:\.)[0-9]{2}\b$/)) return true;
	else return false;
}
function isPeriodo(str){
	//if(str.match(/^\d{2}\/\d{4}$/)) return true;
	if(str.match(/^\b(0?[1-9]|1[012])[\/.](19|20)?[0-9]{2}\b$/)) return true;
	else return false;
}
