/* ::: CODIGO DE CONTROL ::: */
/* -- Codigos creados por el Grupo Creativo ID.A libre S.A. de C.V. -- */


//*** seccion de tablas con los nombres de meses y dias con nombre y numero para usar en select y array *****************  *****************  *****************  *****************
var ida_meses = {
	esp:{
		num:[1,2,3,4,5,6,7,8,9,10,11,12],
		nom:['', 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
		option:''
	}
};

var ida_dias = {
	esp:{
		num:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
		nom:['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
		option:''
	}
};

var ida_horas = {
	num_12:[12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11],
	num_24:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],
	option_12:'',
	option_24:'',
	option_min:''
};

ida_meses.option =	'<option value="01">Enero</option>'+
		 			'<option value="02">Febrero</option>'+
					'<option value="03">Marzo</option>'+
					'<option value="04">Abril</option>'+
					'<option value="05">Mayo</option>'+
 					'<option value="06">Junio</option>'+
					'<option value="07">Julio</option>'+
					'<option value="08">Agosto</option>'+
					'<option value="09">Septiembre</option>'+
 					'<option value="10">Octubre</option>'+
					'<option value="11">Noviembre</option>'+
					'<option value="12">Diciembre</option>';
				
for(var i=1; i<=31; i++){
	ida_dias.option += '<option value='+i+'>'+i+'</option>';
};

for(var i=0; i<=23; i++){
	ida_horas.option_24 += '<option value='+i+'>'+i+'</option>';
};

for(var i=0; i<=23; i++){
	ida_horas.option_12 += '<option value='+ida_horas[i]+'>'+ida_horas[i]+'</option>';
};

for(var i=0; i<=60; i++){
	ida_horas.option_min += '<option value='+i+'>'+i+'</option>';
};


//Clase para crear options de los años para select
var ida_class_option_year = new Class({
	Implements: [Options, Events],
	Binds: ['option'],
	options:{
		menos:-1,
		mas:4
	},
	option:'',
	initialize: function(options){
        this.fecha_base = new Date();

		this.year_base  = this.fecha_base.getYear();

		if (this.year_base < 1000) {
			this.year_base += 1900;
			this.option_ini = this.year_base-Number(this.options.menos);
			this.option_fin = this.year_base+Number(this.options.mas);
		};

		this.option_years = '<option value=0000>0000</option>';

		for(var i=option_ini; i<option_fin; i++){
			option_years += '<option value='+i+'>'+i+'</option>';
		};
		
		this.option = option_years
	}
});



//*** Funciones para generar un relog digital, y cambiar la hora cada segundo
var ida_class_hora_digital = new Class({
	Implements: [Options, Events],
	Binds: ['fecha'],
	options:{
		colocar:'',
		idioma:'esp',
		corto:'no',
		hora:12
	},
	initialize: function(options){
        this.setOptions(options);
        this.options.colocar = ida_tipo(this.options.colocar);
        this.fecha.periodical(1000);
	},
	fecha:function(){
		if(this.options.colocar != ""){
			var miDate = new Date();
			
			if(this.options.hora == 12){
				var lahora = ida_horas.num_12[miDate.get('hr')];
				if(miDate.get('hr') < 12){
					var meridiano = "a.m.";
				} else{
					var meridiano = "p.m.";
				};
			} else{
				var lahora = miDate.get('hr');
				var meridiano = "";
			};
			
			var mensaje = ida_dias.esp.nom[miDate.get('day')]+' '+miDate.get('date')+' de '+ida_meses.esp.nom[miDate.get('mo')]+' '+miDate.get('year')+' - '+lahora+':'+miDate.get('min')+':'+miDate.get('sec')+' '+meridiano;
			this.options.colocar.empty().set('html', mensaje);
		};
	}
});



//*** Funcion para separar una fecha en variables
function separarFecha(fecha, tipo){
	this.extracDia = "", this.extracMes = "", this.extracYear = "";
	
	(!tipo) ? tipo = "amd" : "";

	switch(tipo){
		case "amd":
			this.extracDia = fecha.substring(8,10);
			this.extracMes = fecha.substring(5,7);
			this.extracYear = fecha.substring(0,4);
		break;
	};

	return {d: this.extracDia, m: this.extracMes, a: this.extracYear};
};



//*** Funcion para el formato de moneda *****************  *****************  *****************  *****************
function ida_numero(){
	var ji = {
		valor:'',
		miles:'si',
		decimal:'si',
		moneda:'no',
		nulo:'si',
		sep_decimal:'.',
		sep_miles:','
	};
	ji = $merge.run([ji].extend(arguments));
	
	var num = String(ji.valor);
	switch(ji.sep_decimal){
		case ".":
			var separador = /[.]/;
		break;
		
		case ",":
			var separador = /[\x2C]/;
		break;
	};
	
	var nn = "";
	
	if(num != "" && num != 'undefined' && num != 0){		
		if(separador.test(num)==true){
			var nu_to = num.length;
			var nu = num.length-1;
			var pd = num.lastIndexOf(ji.sep_decimal);
			var en = pd-1;
			var de = nu-pd;
			var de_in = pd+1;
		} else{
			var nu_to = num.length;
			var nu = num.length-1;
			var pd = nu+1;
			var en = nu;
			var de = 0;
			var de_in = pd+1;
		};
		
		if(ji.miles == "si"){
			var bl = 1;
			for(var i = en; i>= 0; i--){
				if(bl <= 3){
					nn = num.charAt(i)+nn;
					bl++;
				} else{
					bl = 2;
					nn = num.charAt(i)+ji.sep_miles+nn;
				};
			};
		} else{
			nn = num.substring(0,en);
		};
		
		if(ji.decimal != 'no'){
			nn += ji.sep_decimal;
			
			if(ji.decimal == 'si'){
				for(var i = de_in; i <= nu; i++){
					nn += num.charAt(i);
				};
			} else if(Number(ji.decimal) > 0){
				for(var i = 1; i <= ji.decimal; i++){
					if(pd+i <= nu){
						nn += num.charAt(pd+i);
					} else{
						nn += '0';
					};
				};
			};
		};
		
	} else{
		if(ji.nulo != "si"){
			switch(ji.nulo){
				case "cero":
				case "no":
					nn = '0';
				break;
				
				case "decimal":
					nn = "0.00";
				break;
					
				default:
					nn = ji.nulo;
			};
		} else{
			nn = "";
		};
	};
	
	if(ji.moneda != "no"){
		switch(ji.moneda){
			case "pesos":
				nn = "$ "+nn;
			break;
			
			case "dolar":
				nn = "$ "+nn;
			break;
			
			case "euro":
				nn = "&#8364; "+nn;
			break;

			default:
				nn = "$ "+nn;
		};
	};

	return nn;
};

//funcion para limpiar cualquier caracter que no sea numero
function ida_clear_numero(valor){
	var limpio = valor.replace(/[^\d.]/gi, "");
	return limpio;
};

//funcion que permite conforme se escribe en un campo de texto, se limpie, valide y formate con modena y decimales.
function ida_key_numero(){
	var ji = {
		objeto:'',
		miles:'si',
		decimal:'si',
		moneda:'no',
		nulo:'si'
	};
	ji = $merge.run([ji].extend(arguments));
	
	var CL = ida_clear_numero(objeto.value);
	objeto.value = ida_numero({valor:CL, miles:ji.miles, decimal:ji.decimal, moneda:ji.moneda, nulo:ji.nulo});
};




//*** Funcion para investigar si el valor es un objeto o un texto *****************  *****************  *****************  *****************
var ida_tipo = function(elId){
	var element;
	if(typeof elId == 'object'){
		element = elId;
	} else if(typeof elId == 'string'){
		element = $(elId);
	} else{
		alert('no es un objeto valido el que envia en la funcion');
		return false;//element = '';
	};
	
	return element;
};




//*** Funciones Construir una ventana nueva y gargar una direccion o archivo. *****************  *****************  *****************  *****************
function ida_new_ventana(URL,i){
	var w = 831;
	var h = 500;
	x = (screen.width - w) / 2;
	y = (screen.height - h) / 2;
	
	if ((w>screen.width) || (h>screen.height)){
		imagen=window.open(URL,'ventana'+i,'width='+w+', height='+h+', left='+x+', top='+y+', resizable=no, scrollbars=yes, menubar=no, toolbar=no, location=no, status=no');
		imagen.opener=window;
		imagen.focus();
	} else{
		imagen=window.open(URL,'ventana'+i,'width='+w+', height='+h+', left='+x+', top='+y+', resizable=no, scrollbars=yes, menubar=no, toolbar=no, location=no, status=no');
		imagen.opener=window;
		imagen.focus();
	};
};



//*** Funcino para la alerta de mensajes del sistema *****************  *****************  *****************  *****************
function ida_msn(){
	var ji = {
		virtud:'',
		mensaje:'',
		msn_color:'no',
		msn_color_v:'',
		msn_alert:'no',
		msn_barra:'no',
		msn_barra_div:'ida_br_msn',
		objeto:'',
		clase:''
	};
	ji = $merge.run([ji].extend(arguments));
	
	if(ji.msn_color == "si"){
		if(ji.msn_color_v == ''){
			switch(ji.virtud){
				case 'bueno':
					ji.objeto.tween('background-color' , ida_gs_msn.valid.color.bueno);
				break;
				
				case 'medio':
					ji.objeto.tween('background-color' , ida_gs_msn.valid.color.medio);
				break;
				
				case 'malo':
					ji.objeto.tween('background-color' , ida_gs_msn.valid.color.malo);
				break;
				
				case 'neutro':
					ji.objeto.tween('background-color' , ida_gs_msn.valid.color.neutro);
				break;
			};
		} else{
			ji.objeto.tween('background-color' , ji.msn_color_v);
		};
	};
	
	if(ji.msn_alert == "si"){
		alert(ji.mensaje);
	};
	
	if(ji.msn_barra == "si"){
		if(ji.msn_barra_div != ""){
			switch(virtud){
			case 'bueno':
				ji.objeto.addClass('validado');
				(ji.msn_barra_div == "ida_br_msn") ? ida_status_br_msn({msn:ji.mensaje, status:ji.virtud}) : $(ji.valid_msn_div).empty().set('html', ji.mensaje).addClass('ida_br_msn_bueno');
			break;
			
			case 'malo':
				ji.objeto.removeClass('validado');
				(ji.msn_barra_div == "ida_br_msn") ? ida_status_br_msn({msn:ji.mensaje, status:ji.virtud}) : $(ji.valid_msn_div).empty().set('html', ji.mensaje).addClass('ida_br_msn_malo');
			break;
			};
		};
	};
};





//*** Funciones para validacion de campos de texto *****************  *****************  *****************  *****************
function ida_validarCampos(){
	var ji = {
		objeto:'',
		genero:'texto',
		limite:'no',
		limite_v:new Array(),
		obligatorio:'si',
		valid_color:'si',
		valid_color_bueno: ida_gs_msn.valid.color.bueno,
		valid_color_malo: ida_gs_msn.valid.color.malo,
		valid_color_neutro: ida_gs_msn.valid.color.neutro,
		valid_alert:'no',
		valid_msn:'no',
		valir_msn_div:'ida_br_msn'
	};
	ji = $merge.run([ji].extend(arguments));
	

	//Funcion para mostar el resultado de la validacion
	function msn_campos(virtud){
		switch(virtud){
			case 'bueno':
				ji.objeto.addClass('validado');
				var color_msn = ji.valid_color_bueno;
			break;
			
			case 'malo':
				ji.objeto.removeClass('validado');
				var color_msn = ji.valid_color_malo;
			break;
		};
		
		ida_msn({objeto:ji.objeto, virtud:virtud, msn_color:'si', msn_color_v:color_msn});
	};
	
	//Funcion para verificar el limite del campo
	function validarLimite(){
		var objeto = ji.objeto, limite = ji.limite_v;
		switch (limite[0]){
			case "menor":
			case "minimo":
				if(objeto.value.length < limite[1]){
					msn_campos('malo');
					alert('Introdusca un minimo de '+limite[1]+' numeros o caracteres');
				};
			break;
			
			case "mayor":
			case "maximo":
				if(objeto.value.length > limite[1]){
					msn_campos('malo');
					alert('Introdusca un maximo de '+limite[1]+' numeros o caracteres');
				};
			break;
	
			case "minimo y maximo":
				if(objeto.value.length < limite[1] || objeto.value.length > limite[2]){
					msn_campos('malo');
					alert('Introdusca un minimo de '+limite[1]+' y un maximo de '+limite[2]+' numeros o caracteres');
				};
			break;
			
			default:
				msn_campos('bueno');
		};
	};

	//Seccion que comprueba el campo
	if(ji.objeto.value == '' && ji.obligatorio != 'no'){
		msn_campos('malo');
	} else if(ji.obligatorio == "no" && ji.objeto.value == ""){
		ji.objeto.addClass('validado');
		ji.objeto.set({'styles':{'background-color':ji.valid_color_neutro}});
	} else{
		switch (ji.genero){
			case "texto":
				if(ida_gs_msn.valid.exp_regular.texto.test(ji.objeto.value) == false){
					msn_campos('bueno');
				} else{
					msn_campos('malo');
				};
			break;

			case "texto_simple":
				if(ida_gs_msn.valid.exp_regular.texto_null.test(ji.objeto.value) == false){
					msn_campos('bueno');
				} else{
					msn_campos('malo');
				};
			break;

			case "mail":
				if(ida_gs_msn.valid.exp_regular.mail.test(ji.objeto.value)==true){
					msn_campos('bueno');
				} else{
					msn_campos('malo');
				};
			break;
			
			case "numero":
				if(ida_gs_msn.valid.exp_regular.numero.test(ji.objeto.value) == false){
					if(ji.limite != "" && ji.limite != "no"){
						validarLimite();
					} else{
						msn_campos('bueno');
					};
				} else{
					msn_campos('malo');
				};
			break;
			
			case "pesos":
				if(ida_gs_msn.valid.exp_regular.pesos.test(ji.objeto.value)==false){
					if(ji.limite != "" && ji.limite != "no"){
						validarLimite();
					} else{
						msn_campos('bueno');
					};
				} else{
					msn_campos('malo');
				};
			break;
			
			case "tel":
				if(ida_gs_msn.valid.exp_regular.tel.test(ji.objeto.value) == false){
					if(ji.limite != "" && ji.limite != "no"){
						validarLimite();
					} else{
						msn_campos('bueno');
					};
				} else{
					msn_campos('malo');
				};
			break;
			
			case "pass":
				if(ida_gs_msn.valid.exp_regular.pass.test(ji.objeto.value)==false){
					if(ji.limite != "" && ji.limite != "no"){
						validarLimite();
					} else{
						msn_campos('bueno');
					};
				} else{
					msn_campos('malo');
				};
			break;
		};
	};
};

function validarEnviar(elId){
	if(ida_tipo(elId)){
		var element = ida_tipo(elId);
	
		var paraValidar = element.getElements('.validar');
		var camposValidos = paraValidar.every(function(item, index){
			return item.hasClass('validado');
		});
		
		if(camposValidos){
			var respuesta = true;
		} else {
			var respuesta = false;
		};
		
		return respuesta;
	};
};

// funcion para limpiar los campos de un formulario
function ida_limpiar_campos(){
	var ji = {
		div:'',
		color_neutro:'#fff'
	};
	ji = $merge.run([ji].extend(arguments));
	
	ji.div = ida_tipo(ji.div);
	
	var in_valid_text = $$('#'+ji.div+' input[type=text]');
	
	in_valid_text.each(function(i){
		i.removeClass('validado');
		i.set({'styles':{'background-color':color_neutro}});
		i.value = "";
	});
};


// funcion para colocar la valicacion a un formulario
function ida_form_activar(){
	var ji = {
		form:'',
		btn_clear:'',
		color_neutro:'#fff',
		funcion:''
	};
	ji = $merge.run([ji].extend(arguments));
	
	ji.form = ida_tipo(ji.form);
	
	if(ji.btn_clear != ""){
		ji.btn_clear = ida_tipo(ji.btn_clear);
		
		ji.btn_reset.addEvent('click', function(e){
			var e = new Event(e).stop();
			ida_limpiar_campos({div:ji.form ,color_neutro:color_neutro});
		});
	};
	
	
	ji.form.addEvent('submit', function(e){
		var e = new Event(e).stop();
		
		if(validarEnviar(ji.form)){
			new Request.JSON({
				/* url:"mail/distribuidores.php", */
				onComplete:function(e){
					if(e.estado == "valido"){
						ida_limpiar_campos({div:ji.form ,color_neutro:color_neutro});
						if(ji.funcion != ""){ji.funcion();};
					} else{
						alert("NOO, lo sentimos hubo un problema al enviar su mail, por favor intente mas tarde");
					};
				}
			}).send(ji.form);
		} else{
			alert("Hay campos vacíos o no validos, favor de verificar su información.")
		};
	});
	
	
	//validacion para los inputs
	var in_valid_text = $$('#'+ji.form.id+' .valid_texto');
	
	in_valid_text.each(function(i){
		i.addEvent('change', function(){
			if(this.hasClass('validar')){var obligatorio = 'si'} else{var obligatorio = 'no'};
			
			ida_validarCampos({objeto:this, genero:'texto', obligatorio:obligatorio, valid_color_neutro:color_neutro});
		});
	});
	
	
	var in_valid_text = $$('#'+ji.form.id+' .valid_numero');
	
	in_valid_text.each(function(i){
		i.addEvent('change', function(){
			if(this.hasClass('validar')){var obligatorio = 'si'} else{var obligatorio = 'no'};
			
			ida_validarCampos({objeto:this, genero:'numero', obligatorio:obligatorio, valid_color_neutro:color_neutro});
		});
	});
	
	
	var in_valid_text = $$('#'+ji.form.id+' .valid_mail');
	
	in_valid_text.each(function(i){
		i.addEvent('change', function(){
			if(this.hasClass('validar')){var obligatorio = 'si'} else{var obligatorio = 'no'};
			
			ida_validarCampos({objeto:this, genero:'mail', obligatorio:obligatorio, valid_color_neutro:color_neutro});
		});
	});
	
	
	var in_valid_text = $$('#'+ji.form.id+' .valid_tel');
	
	in_valid_text.each(function(i){
		i.addEvent('change', function(){
			if(this.hasClass('validar')){var obligatorio = 'si'} else{var obligatorio = 'no'};
			
			ida_validarCampos({objeto:this, genero:'tel', obligatorio:obligatorio, valid_color_neutro:color_neutro});
		});
	});
	
	var in_valid_text = $$('#'+ji.form.id+' .valid_pesos');
	
	in_valid_text.each(function(i){
		i.addEvent('change', function(){
			if(this.hasClass('validar')){var obligatorio = 'si'} else{var obligatorio = 'no'};
			
			ida_validarCampos({objeto:this, genero:'pesos', obligatorio:obligatorio, valid_color_neutro:color_neutro});
		});
	});
};



//*** Funcion para controlar la cantidad de click a un boton, y comprobar que sus campos esten validos antes de enviar. *****************  *****************  *****************  *****************
function ida_btn_validar(){
	var ji = {
		div:'',
		funcion:''
	};
	ji = $merge.run([ji].extend(arguments));
	
	var e = new Event(arguments[0]).stop();
	
	if(ida_tipo(ji.div)){
		ji.div = ida_tipo(ji.div);
		
		if(!this.hasClass('busy')){
		this.addClass('busy');
		
		if(validarEnviar(ji.div)){
			var miFN = ji.funcion;
			miFN(this);
			//this.removeClass('busy');

		} else{
			this.removeClass('busy');
			alert(ida_gs_msn.valid.enviar.campos);
		};
	};
	};
};


//*** Funcion para validar las respuestas de las consultas JSON
var ida_validrequest_json = function(){
	var ji = {
		j:{},
		btn:'',
		vacio:'no',
		msn:'no',
		msn_color:'no',
		msn_alert:'no',
		msn_barra:'no',
		msn_barra_div:'ida_br_msn'
	};
	ji = $merge.run([ji].extend(arguments));
	var j = ji.j;
	(ji.btn && ji.btn != '') ? ji.btn = ida_tipo(ji.btn) : "";
		
	if(!j || j == 'null' || j == ""){
		(ji.msn == 'si') ? ida_msn({virtud:'malo', mensaje:ida_ge_msn.json.nulo, msn_color:ji.msn_color, msn_alert:ji.msn_alert, msn_barra:ji.msn_barra, msn_barra_div:ji.msn.barra_div}) : "";
		(ji.btn && ji.btn != '') ? ji.btn.removeClass('busy') : "";
		return false;
	} else if(j.estado == 'valido'){
		if(ji.vacio == "no"){
			if(j.can && Number(j.can) > 0){
				(ji.btn && ji.btn != '') ? ji.btn.removeClass('busy') : "";
				return true;
			} else{
				ida_msn({virtud:'medio', mensaje:ida_ge_msn.json.vacio, msn_color:ji.msn_color, msn_alert:ji.msn_alert, msn_barra:ji.msn_barra, msn_barra_div:ji.msn.barra_div});
				(ji.btn && ji.btn != '') ? ji.btn.removeClass('busy') : "";
				return false;
			};
		} else{
			(ji.btn && ji.btn != '') ? ji.btn.removeClass('busy') : "";
			return true;
		};
	} else{
		(ji.msn == 'si') ? ida_msn({virtud:'malo', mensaje:ida_ge_msn.json.no_valido, msn_color:ji.msn_color, msn_alert:ji.msn_alert, msn_barra:ji.msn_barra, msn_barra_div:ji.msn.barra_div}) : "";
		(ji.btn && ji.btn != '') ? ji.btn.removeClass('busy') : "";
		return false;
	};
};





// funciones para los inputs y objetos de formulario ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** 
function func_limpiarCampos(miDiv, validar){
	var inputs = $$('#'+miDiv+' input[type=text]');
	
	inputs.each(function(i){
		//i.removeProperty('style').value = "";
		i.set({'styles':{'background-color':'transparent'}}).value = "";
		if(validar){
			if(i.hasClass('validar')){
				i.removeClass('validado');
			};
		};
	});
	
	return true;
};

function func_blockInputText(miDiv, validar){
	var inputs = $$('#'+miDiv+' input[type=text]');
	
	inputs.each(function(i){
		i.addClass('in_dis_text').disabled = "true";
		if(validar){
			if(i.hasClass('validar')){
				i.addClass('validado');
			};
		};
	});
	
	return true;
};

function func_UnblockInputText(miDiv){
	var inputs = $$('#'+miDiv+' input[type=text]');
	
	inputs.each(function(i){
		i.removeClass('in_dis_text').disabled = false;
	});
	
	return true;
};


/************* redondear decimales *****************/

function redondear(cantidad, decimales){
	var cantidad = parseFloat(cantidad);
	var decimales = parseFloat(decimales);
	decimales = (!decimales ? 2 : decimales);
	return Math.round(cantidad * Math.pow(10, decimales)) / Math.pow(10, decimales);
}; 

/*********** truncar decimales **************/

function trunc(num, ndec) {
  var fact = Math.pow(10, ndec); // 10 elevado a ndec

  /* Se desplaza el punto decimal ndec posiciones,
    se trunca el número y se vuelve a colocar
    el punto decimal en su sitio. */
  return parseInt(num * fact) / fact;
}

function clear_Txt_Enter(valor){

	var limpio = valor.replace(/[\r]/gi, "");
	var limpioN = limpio.replace(/[\n]/gi, "|");

	return limpioN;

};

function poner_Txt_Enter(valor){

	var limpio = valor.replace(/[\x7c]/gi, "\n");

	return limpio;

};
