

/**
 * Javascript público
 *
 * @category javascript
 * @copyright Copyright © 2009, ISERTIA - Grupo BITTIA
 * @filesource
 * @package javascript
 * @version 1.0 2008/10/01
 */


/**
 * Ruta web de instalación e idioma
 */
var INSTALATION_DIR = $('link[rel="index"]').attr('href');
var LNG = $('html').attr('xml:lang');


/**
 * Mostrar símbolo de carga 
 * @param e object Elemento al que superponer el cargador
 */
function loading(e, opac)
{
	var opac = opac || '0.5';
	var lwidth = '100%';
	var lheight = $(window).height();
	var container = 'body';
	var ltop = 0;
	var lleft = 0;
	var lposition = 'fixed';
	//Ventana contenedora
	if(e == 'parent')
	{
		lwidth = '100%';
		lheight = '100%';
		container = window.parent.document.getElementById('content');		
	}
	else if(e)
	{
		lwidth = $(e).outerWidth(true);
		lheight = $(e).outerHeight(true);
		container = e;
		ltop = (parseInt($(e).css('top')) > $(e).offset().top)? parseInt($(e).css('top')) : $(e).offset().top;
		lleft = (parseInt($(e).css('left')) > $(e).offset().left)? parseInt($(e).css('left')) : $(e).offset().left;
		lposition = 'absolute';
	}
	else
	{
		lwidth = '100%';
		lheight = $(window).height();
		container = window.document.getElementById('content');
	}

	//Crea loading si no existe
	if($('#loading').length < 1)
	{
		$('body').append('<div id="loading"></div>');
		$('#loading').css({opacity: opac, left: lleft, top: ltop, width: lwidth, height: lheight, position: lposition});
	}
	return true;
}
function loadingEnd()
{
	while($('#loading').length > 0)
	{
		$('#loading').remove();
	}
	return true;
}


/**
 * Cargar lightbox con parámetros 
 */
function loadLb()
{
	$('a[rel*=lightbox]').lightBox(
	{
		imageLoading: INSTALATION_DIR+'img/lightbox-ico-loading.gif',
		imageBtnClose: INSTALATION_DIR+'/lng/'+LNG+'/lightbox-btn-close.gif',
		imageBtnPrev: INSTALATION_DIR+'/lng/'+LNG+'/lightbox-btn-prev.gif',
		imageBtnNext: INSTALATION_DIR+'/lng/'+LNG+'/lightbox-btn-next.gif',
		imageBlank: INSTALATION_DIR+'img/lightbox-blank.gif',
		containerResizeSpeed: 250,
		txtImage: lng.image,
		txtOf: lng.of,
		keyToPrev: lng.lightbox_prev,
		keyToNext: lng.lightbox_next
	});
}

/**
  * Validación de NIF --> NO SE USA
  */
function ValidaNif(dni) {
  dni = dni.toUpperCase();
  numero = dni.substr(0,dni.length-1);
  let = dni.substr(dni.length-1,1);
  numero = numero % 23;
  letra='TRWAGMYFPDXBNJZSQVHLCKET';
  letra=letra.substring(numero,numero+1);

  if (letra!=let) {
    return false;
  }else{
	return true;
  }
}

/*
 * Validacion de CIF --> NO SE USA
 */
function validateCIF(cif) 
{
	//Quitamos el primer caracter y el ultimo digito
	var valueCif=cif.substr(1,cif.length-2);

	var suma=0;

	//Sumamos las cifras pares de la cadena
	for(i=1;i<valueCif.length;i=i+2)
	{
		suma=suma+parseInt(valueCif.substr(i,1));
	}

	var suma2=0;

	//Sumamos las cifras impares de la cadena
	for(i=0;i<valueCif.length;i=i+2)
	{
		result=parseInt(valueCif.substr(i,1))*2;
		if(String(result).length==1)
		{
			// Un solo caracter
			suma2=suma2+parseInt(result);
		}else{
			// Dos caracteres. Los sumamos...
			suma2=suma2+parseInt(String(result).substr(0,1))+parseInt(String(result).substr(1,1));
		}
	}

	// Sumamos las dos sumas que hemos realizado
	suma=suma+suma2;

	var unidad=String(suma).substr(1,1)
	unidad=10-parseInt(unidad);

	var primerCaracter=cif.substr(0,1).toUpperCase();

	if(primerCaracter.match(/^[FJKNPQRSUVW]$/))
	{
		//Empieza por .... Comparamos la ultima letra
		if(String.fromCharCode(64+unidad).toUpperCase()==cif.substr(cif.length-1,1).toUpperCase())
			return true;
	}else if(primerCaracter.match(/^[XYZ]$/)){
		//Se valida como un dni
		var newcif;
		if(primerCaracter=="X")
			newcif=cif.substr(1);
		else if(primerCaracter=="Y")
			newcif="1"+cif.substr(1);
		else if(primerCaracter=="Z")
			newcif="2"+cif.substr(1);
		return validateDNI(newcif);
	}else if(primerCaracter.match(/^[ABCDEFGHLM]$/)){
		//Se revisa que el ultimo valor coincida con el calculo
		if(cif.substr(cif.length-1,1)==String(unidad))
			return true;
	}else{
		//Se valida como un dni
		return validateDNI(cif);
	}
	return false;
}

//Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error
function valida_nif_cif_nie(a) 
{
	var temp=a.toUpperCase();
	var cadenadni="TRWAGMYFPDXBNJZSQVHLCKE";
 
	if (temp!==''){
		//si no tiene un formato valido devuelve error
		if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			return 0;
		}
 
		//comprobacion de NIFs estandar
		if (/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			posicion = a.substring(8,0) % 23;
			letra = cadenadni.charAt(posicion);
			var letradni=temp.charAt(8);
			if (letra == letradni)
			{
			   	return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//algoritmo para comprobacion de codigos tipo CIF
		suma = parseInt(a.charAt(2))+parseInt(a.charAt(4))+parseInt(a.charAt(6));
		for (i = 1; i < 8; i += 2)
		{
			temp1 = 2 * parseInt(a.charAt(i));
			temp1 += '';
			temp1 = temp1.substring(0,1);
			temp2 = 2 * parseInt(a.charAt(i));
			temp2 += '';
			temp2 = temp2.substring(1,2);
			if (temp2 == '')
			{
				temp2 = '0';
			}
 
			suma += (parseInt(temp1) + parseInt(temp2));
		}
		suma += '';
		n = 10 - parseInt(suma.substring(suma.length-1, suma.length));
 
		//comprobacion de NIFs especiales (se calculan como CIFs)
		if (/^[KLM]{1}/.test(temp))
		{
			if (a.charAt(8) == String.fromCharCode(64 + n))
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//comprobacion de CIFs
		if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp))
		{
			temp = n + '';
			if (a.charAt(8) == String.fromCharCode(64 + n) || a.charAt(8) == parseInt(temp.substring(temp.length-1, temp.length)))
			{
				return 2;
			}
			else
			{
				return -2;
			}
		}
 
		//comprobacion de NIEs
		//T
		if (/^[T]{1}[A-Z0-9]{8}$/.test(temp))
		{
			if (a.charAt(8) == /^[T]{1}[A-Z0-9]{8}$/.test(temp))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
 
		//XYZ
		if (/^[XYZ]{1}/.test(temp))
		{
			pos = str_replace(['X', 'Y', 'Z'], 0, ['0','1','2'], temp).substring(0, 8) % 23;
			if (a.charAt(8) == cadenadni.substring(pos, pos + 1))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
	}
 
	return 0;
}

function str_replace(search, position, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'
 
    var f = search, r = replace, s = subject, p = position;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 
    while (j = 0, i--) {
        if (s[i]) {
            while (s[p] = s[p].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    };
 
    return sa ? s : s[0];
}

/*
 * Tiene que recibir el dni sin espacios ni guiones --> NO SE USA
 */
function validateDNI(dni)
{
	var lockup = 'TRWAGMYFPDXBNJZSQVHLCKE';
	var valueDni=dni.substr(0,dni.length-1);
	var letra=dni.substr(dni.length-1,1).toUpperCase();

	if(lockup.charAt(valueDni % 23)==letra)
		return true;
	return false;
}

/**
  * Validación de Email
  */
function ValidaEmail(valor) {
	var filter = /^[^@]+@[^@]+.[a-z]{2,}$/i;
	if (valor.match(filter)){
		return true;
	} else {
		return false;
	}
}

/**
  * Validación de Prefijo de Telefono
  */
function ValidaPrefijo(valor) {
	var filter = /^\+\d{2,3}$/i;
	if (valor.match(filter)){
		return true;
	} else {
		return false;
	}
}

/**
  * Validación de Telefono
  */
function ValidaTfno(s)
{   
	if (s.length!=9){
		return false;
	}
	
	var i;
    for (i = 1; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

/**
  * Validación de Movil
  */
function ValidaMovil(s)
{   
	if (s.length!=9){
		return false;
	}

	var i;
    for (i = 1; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

/**
  * Validación de Código Postal
  */
function ValidaCP(s)
{   
	if (s.length!=5){
		return false;
	}

	var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

/**
 * JS propio de la página
 */
function loadPage()
{
	//Borrar contenido input
	$('#searcher input:not(:checkbox)').live('click', function(event)
	{
		$(this).val('');
	});

	//Enlaces externos
	$('a[rel="nofollow"], a[rel="external"]').live('click', function(event)
	{
		event.preventDefault();
		window.open($(event.target).closest("a").attr("href"));
	});

	//Fecha
	var d = new Date().getFullYear()+2;
	$('input.date_picker').datepicker({
		yearRange: "1900:"+d,
		firstDay: 1,
		dateFormat: 'd-m-yy',
		clearText: lng.clear,
		clearStatus: '',
		closeText: lng.close,
		closeStatus: '',
		prevText: lng.prev,
		prevStatus: '',
		nextText: lng.next,
		nextStatus: '',
		currentText: lng.today,
		currentStatus: '',
		monthNames: lng.months,
		monthNamesShort: lng.months_short,
		weekHeader: 'Sm',
		dayNames: lng.days,
		dayNamesShort: lng.days_short,
		dayNamesMin: lng.days_min,
		dayStatus: 'DD',
		changeMonth: true,
		changeYear: true,
		showButtonPanel: true
	});
	
	//Formulario send_condolences
	$('.send_condolences #send_condolences').bind('submit', function(event)
	{
		//Correo necesario
		//if(($('#fc_copy').attr('checked') || $('#fc_receipt').attr('checked') || $('#fc_agradecimiento').attr('checked') || $('#fc_remember').attr('checked') || $('#fc_mailing').attr('checked')) && $('#fc_email').val().length <= 5)
/*		if($('#fc_email').val().length <= 5)		
		{
			alert('Por favor, rellene los campos marcados con *.');
			event.preventDefault();
		}*/

		//Pedir email otra vez para comprobar
		/*
		if($('.info_order').length > 0)
		{
			if($('#fc_email').val().length >= 5)
			{
				var value = $('#fc_email_two').val();
				while($('#fc_email').val() != value || value.length == 0)
				{
					value = prompt('Por favor, repita el email:');
				}			
				$('#fc_email_two').val(value);
			}
			else
			{
				alert('Por favor, rellene correctamente el Correo electrónico.');
				event.preventDefault();
			}
		}
		*/
	});
	
	//Acuse de recibo a si
/*	$('#send_condolences #fc_email').bind('blur', function(event)
	{
		if($(event.target).val())
		{
			$('#fc_copy').attr('checked', 'checked');			
			$('#fc_receipt').attr('checked', 'checked');
			$('#fc_agradecimiento').attr('checked', 'checked');
			$('#fc_remember').attr('checked', 'checked');				
			$('#fc_mailing').attr('checked', 'checked');				
		}
	});
	
	//Acuse de recibo a si
	$('#send_condolences #fc_cellular').bind('blur', function(event)
	{
		if($(event.target).val())
		{
			$('#fc_agradecimiento').attr('checked', 'checked');
		}
	});	*/
	
	
	//Seleccionar municipio en portada
	$('#welcome #q_region').bind('change', function(event)
	{
		$(this).parents('form').trigger('submit');
	});
	
	//Compra de flores - dedicatoria	
	$('.form_dedicatoria').bind('submit', function(event)
	{
		if($('#include').attr('checked')==true){
			if($('#dedication').val().length <= 0)
			{
				event.preventDefault();
				alert('Debe indicar la dedicatoria del encargo o desmarcar esa opción.');				
			}
		}
	});
	
	//Compra de flores - datos de pedido
	if($('#deceased #fc_ticket').length > 0)
	{
		$('#deceased input[name="fc_ticket"]').live('click', function(event)
		{
			if($(event.target).val() == 'yes')
			{
				$('#fc_ticket_fields').css('display', 'block');
			}
			else
			{
				$('#fc_ticket_fields').css('display', 'none');
			}
		});
		
		//Enviar formulario aceptando politica privacidad y dando datos si hay factura
		$('.info_order').bind('submit', function(event)
		{
			//Comprobacion nombre
			if($('#name').val().length < 2){
				event.preventDefault();
				alert('Debe introducir su Nombre.');
			}
			else{
				//Comprobacion de telefonos
				if($('#fc_phone').val().length < 2 && $('#fc_cellular').val().length < 2){
					event.preventDefault();
					alert('Debe introducir al menos un teléfono de contacto.');
				}	
				else{
					if( $('#fc_phone').val().length > 0 && ((!ValidaTfno($('#fc_phone').val())) || (!ValidaPrefijo($('#fc_prephone').val()))))
					{
						event.preventDefault();
						alert('Por favor, comprueba que el número de teléfono es correcto');				
					}
					else{
						if( $('#fc_cellular').val().length > 0 && ((!ValidaMovil($('#fc_cellular').val())) || (!ValidaPrefijo($('#fc_precellular').val()))))
						{
							event.preventDefault();
							alert('Por favor, comprueba que el número de teléfono móvil es correcto');				
						}
						else{
							//Comprobacion de mail
							if($('#fc_email').val().length < 2){
								event.preventDefault();
								alert('Debe introducir su dirección de Email');
							}	
							else{
								if(!ValidaEmail($('#fc_email').val()))
								{
									event.preventDefault();
									alert('Por favor, comprueba que la dirección de email es correcta');				
								}	
								else{
									if($('#fc_email_two').val().length < 2){
										event.preventDefault();
										alert('Debe confirmar su dirección de Email');
									}	
									else{
										if($('#fc_email').val() != $('#fc_email_two').val())
										{
											event.preventDefault();
											alert('Por favor, comprueba que la dirección de email y su confirmación son la misma');				
										}	
										else{
											//Comprobación mailing
											if (($('#fc_bulletin').attr('checked')==false) && ($('#fc_bulletin_no').attr('checked')==false) )
											{
												event.preventDefault();
												alert('Por favor, indique si desea recibir futuros boletines informativos del portal');													
											}
											else{
												//Comprobacion datos factura
												if (($('#fc_ticket').attr('checked')==true) && ($('#namefiscal').val().length < 2 || $('#nif').val().length < 9  || $('#address').val().length < 2 || $('#poblation').val().length < 2 || $('#province').val().length < 2 || $('#postalcode').val().length < 5))
												{
													event.preventDefault();
													alert('Por favor, rellene todos los datos de la factura correctamente');
												}			
												else{
													if(($('#fc_ticket').attr('checked')==true) && ($('#fc_prephone').val()=='+34') && ($('#fc_precellular').val()=='+34') && (!valida_nif_cif_nie($('#nif').val()))){
														event.preventDefault();
														alert('Por favor, introduzca un nif/cif válido');				
													}
													else{
														if(($('#fc_ticket').attr('checked')==true) && (!ValidaCP($('#postalcode').val()))){
															event.preventDefault();
															alert('Por favor, introduzca un código postal válido');				
														}
														else{
															if($('#lpd_ok').attr('checked') != true)
															{
																event.preventDefault();
																alert('Por favor, acepte la Política de protección de datos para continuar con el pedido.');
															}														
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		});
	}
	
	//Carrito de la compra, dedicatoria
	if($('#include_no').length > 0)
	{
		if($('#include_no').attr('checked') == true)
		{
			$('#dedication').css("background-color", "#EEEEEE");						
			$('#dedication').css("border", "1px solid #7f9db9");						
			$('#dedication').css("height", "18px");									
			$('#dedication').attr("disabled", "disabled");			
			$('#dedication').attr('value','');	
		}		

		if($('#include').attr('checked') == true)
		{
			$('#dedication').css("background-color", "#FFFFFF");									
			$('#dedication').css("border", "1px solid #7f9db9");	
			$('#dedication').css("height", "18px");												
			$('#dedication').attr('disabled', false);	
		}
			
		$('#include_no').bind('click', function(event)
		{
			$('#dedication').css("background-color", "#EEEEEE");						
			$('#dedication').css("border", "1px solid #7f9db9");						
			$('#dedication').css("height", "18px");									
			$('#dedication').attr("disabled", "disabled");			
			$('#dedication').attr('value','');	
		});
		$('#include').bind('click', function(event)
		{
			$('#dedication').css("background-color", "#FFFFFF");									
			$('#dedication').css("border", "1px solid #7f9db9");	
			$('#dedication').css("height", "18px");												
			$('#dedication').attr('disabled', false);			
		});
	}
	
}


/**
 * Defuscador de email
 * Uso: $(enlace elemento).defuscate();
 * Texto: email(Poner una @ aquí)dominio.com
 */ 
jQuery.fn.defuscate = function()
{
	return this.each(function(){
	var email = String($(this).html()).replace(/\s*\(.+\)\s*/, "@");
	$(this).before('<a href="mailto:' + email + '">' + email + "</a>").remove();
	});
}; 



/**
 * Cargar funcionalidades js tras cargar DOM
 */
$(document).ready(function()
{
	$(".email a").defuscate();
	
	//LiveQuery. Bind eventos tras ajax automáticamente
	loadPage();
	//Carga de lightbox
	loadLb();
	
	$('#banner').each(function(){
		var id_funeral = $('#banner').attr('class');
		$('#banner').load('/public/ajax/banner.php?id_funeral='+id_funeral);
	});	
});
