debug = false;

//Declaración de variables y objetos.
var req;
var precioProductoSinIVA; //almacenamos el precio unitario con todos los decimales posibles.
var precioSASinIVA; //almacenamos el precio del servicio adicional con todos los decimales posibles.
var precioProductoExento; //almacenamos el precio unitario con todos los decimales posibles.
var precioSAExento; //almacenamos el precio del servicio adicional con todos los decimales posibles.
var idiomaGlobal;
var descuentoEbay = 0.25;
var FranqueoIva = 0;
var FranqueoSinIva = 0;
var IVAFranqueo = 0;
var ue_con_iva = new Array('ALE','AUS','BEL','BUL','CHE','CIP','DIN','EEB','ESK','ESL','FIN','FRA','GBA','GRE','HUN','IRL','ITA','LUX','LVT','LTN','MON','MTA','POL','POR','RUM','SUE','PBS');
var europa_sin_iva = new Array('ABN','AIY','AND','BIE','BYH','FRO','GIB','GIG','GRO','GUY','ISL','JER','KZN','LIE','LTN','MCD','MDV','NOR','RHS','SOM','SUI','SYM','TAY','TUK','TUR','UCR','URS','VAT','YUG');

//PRECIOS DEL FRANQUEO EN DESTINO PARA CORREO DIGITAL
var ArrTramosCartaNacion = new Array(0,0.34,0.45,0.69,1.12);
var ArrTramosCartaNacionCertif = new Array(0,2.49,2.60,2.84,3.27);
var ArrTramosCartaNacionIVA = new Array("N","N","N","S","S");
var ArrTramosCartaInternZona1 = new Array(0,0.64,1.29,1.72,3.45);
var ArrTramosCartaInternZona2 = new Array(0,0.78,1.66,2.75,5.50);
var ArrTramosCartaInternZona1Certif = new Array(0,2.88,3.53,3.96,5.69);
var ArrTramosCartaInternZona2Certif = new Array(0,3.02,3.90,4.99,7.74);
var ArrPostalesNacion = new Array(0,0.34,0.39,0.45);
var ArrPostalesInternZona1 = new Array(0,0.64,1.07,1.29);
var ArrPostalesInternZona2 = new Array(0,0.78,1.38,1.66);

//PRECIOS PARA VALORES AÑADIDOS QUE NO LLEVAN IGIC PERO SIN IVA
var impAdmTelefTelegr = 1.61;
var impExpedTelexRadiotelegInteriores = 0.92;

//PRECIO PARA EL SNTS
var ArrPrecioNotifTelemSeg = new Array(0,2.10,1.90,1.50,1.25,1);

//PRECIO PARA SELLOS PERSONALIZADOS
//var ArrPrecioFranqueoSellos = new Array(0,8.00);
var ArrPrecioFranqueoSellos = new Array(0,25.00); //Se agrega al precio de Franqueo (8.50€) el de Producción (16.50€)


//Variables para el resumen
var ArrResultados = new Array("Carta Certificada Nacional",2,3);

//precios para publicorreo nacional y publicorreo internacional en el caso de que el peso sea menor o igual a 10 gramos
var PublicorreoNacional10gramosZonaA = "0.20";
var PublicorreoNacional10gramosZonaB = "0.25";
var PublicorreoInternacional10gramosZonaA = "0.50";
var PublicorreoInternacional10gramosZonaB = "0.45";

////porcentaje sobre la cantidad girada de Giro Urgente Internacional Marruecos para <= 500€ de envío
//var GiroUrgenteMarruecos500 = 0.0011;
////porcentaje sobre la cantidad girada de Giro Urgente Internacional Marruecos para <= 1000€ de envío
//var GiroUrgenteMarruecos1000 = 0.0055;
////porcentaje sobre la cantidad girada de Giro Urgente Internacional Marruecos para > 1000€ de envío
//var GiroUrgenteMarruecos9999 = 0.0077;


///////////////FUNCIONES

// Realiza el submit del formulario al escoger el producto
function enviar(valor) {
	document.tarificador.IDP.value = valor;
	document.tarificador.submit();
}
// Realiza el submit del formulario al escoger la categoría
function enviarCategoria(valor) {
	document.tarificador.submit();
}

//FML: Funcion nueva de redondeo. Cambiada 16:42 26/12/2007
// Función para redondear a dos decimales
function redondear(valor) {
	resultado = Math.round(valor * 100) / 100.;
	resultado = resultado.toFixed(2);
	//alert ('valor: ' + valor + '. resultado: ' + resultado);
	return resultado;
}

function CalculaIVA() {
	try {
		// ahora debemos tener encuenta que parte lleva impuesto y que parte no lo lleva.	

		var valorP = precioProductoSinIVA.replace(',','.');
		var valorSA = precioSASinIVA.replace(',','.');
if (debug) alert ("Valor sin Iva: " + valorP);
//alert ("Valor Servicio Adic: " + valorSA);
		if ((document.tarificador2.cantidad.value!='') && (document.tarificador2.cantidad.value > 0)) {
			//Correo Digital: Agregar el franqueo
			var tmpIDP = document.tarificador.IDP.value;
			var NumHojas=0;
			var tipoPostal=0;
			var destino=0;
			var i = 0;

			//Aplicamos el descuento en caso de ser postal Ebay
			if (tmpIDP == "307") {
				valorSA = valorSA * (1-descuentoEbay);
				valorP = valorP * (1-descuentoEbay);
			}
			
			if (tmpIDP=="600"){
				NumHojas=parseInt(document.tarificador.S11.value);
				i=(NumHojas>0 && NumHojas<4)?1:i;
				i=(NumHojas>3 && NumHojas<7)?2:i;
				i=(NumHojas>6 && NumHojas<15)?3:i;
				//i=(NumHojas>14 && NumHojas<21)?4:i;
				i=(NumHojas>14)?4:i;
			}
			if (tmpIDP=="606"){
				NumHojas=parseInt(document.tarificador.S11.value);
				destino=document.tarificador.S200.value;
				i=(NumHojas>0 && NumHojas<4)?1:i;
				i=(NumHojas>3 && NumHojas<7)?2:i;
				i=(NumHojas>6 && NumHojas<15)?3:i;
				//i=(NumHojas>14 && NumHojas<21)?4:i;
				i=(NumHojas>14)?4:i;
			}

			if (tmpIDP=="600") {
				if ((ArrTramosCartaNacionIVA[i]=="S") && ((document.tarificador.S200.options[document.tarificador.S200.selectedIndex].value=="170") || (document.tarificador.S200.options[document.tarificador.S200.selectedIndex].value=="174"))) {
					if (document.tarificador.SA752.checked) {
						FranqueoIva = ArrTramosCartaNacionCertif[i];
						valorSA=0;
					} else {
						FranqueoIva = ArrTramosCartaNacion[i];
					}
					IVAFranqueo=1;
					FranqueoSinIva = 0;
				} else {
					FranqueoIva = 0;
					if (document.tarificador.SA752.checked){
						FranqueoSinIva = ArrTramosCartaNacionCertif[i];
						valorSA=0;
					} else {
						FranqueoSinIva = ArrTramosCartaNacion[i];
					}
					IVAFranqueo=0;
				}
			}

			if (tmpIDP=="601") {
				FranqueoIva = 0;
				FranqueoSinIva = ArrPostalesNacion[i];
				IVAFranqueo=0;
			}

			if (tmpIDP=="606") {
				document.tarificador2.IVA.value = 0.16;
				// si es europeo.	
				var bolEsEU = false;
				for (k=0; k < ue_con_iva.length; k++) {
					if (ue_con_iva[k]==destino){
						bolEsEU=true;			
						break;
					}
				} 
				//alert("Es UE: " + bolEsEU);
				if (bolEsEU) {
					if (ArrTramosCartaNacionIVA[i]=="S") {
						IVAFranqueo=1;
						if (document.tarificador.SA752.checked) {
							FranqueoIva = ArrTramosCartaInternZona1Certif[i];
						} else {
							FranqueoIva = ArrTramosCartaInternZona1[i];
						}
						FranqueoSinIva = 0;
					} else {
						FranqueoIva = 0;
						IVAFranqueo=0;
						if (document.tarificador.SA752.checked){
							FranqueoSinIva = ArrTramosCartaInternZona1Certif[i];
						} else {
							FranqueoSinIva = ArrTramosCartaInternZona1[i];
						}
						//alert(ArrTramosCartaInternZona1[i]);
					}
				} else {
					FranqueoIva = 0;
					IVAFranqueo=0;
					var bolEsEuropa=false;
					for (l=0; l < europa_sin_iva.length; l++) {						
						if (europa_sin_iva[l]==destino){
							bolEsEuropa=true;			
							break;
						}
					}
					//alert("bolEsEuropa: " + bolEsEuropa);
					if (bolEsEuropa){
						if (document.tarificador.S200.value=="AND"){
							if (document.tarificador.SA752.checked){
								FranqueoSinIva = ArrTramosCartaNacionCertif[i];
							} else {
								FranqueoSinIva = ArrTramosCartaNacion[i];
							}
						} else {
							if (document.tarificador.SA752.checked) {
								FranqueoSinIva = ArrTramosCartaInternZona1Certif[i];
							} else {
								FranqueoSinIva = ArrTramosCartaInternZona1[i];
							}
						}
					} else {
						if (document.tarificador.SA752.checked){
							FranqueoSinIva = ArrTramosCartaInternZona2Certif[i];
						} else {
							FranqueoSinIva = ArrTramosCartaInternZona2[i];
						}
					}
				}
				//alert("FranqueoSinIva: " + FranqueoSinIva);
			}

			//SNTS
			if (tmpIDP=="603") {
				j=1;
				var tmpNumNotifTotales=new Number(document.tarificador.S8.value);
				var tmpNumNotifTarificar=tmpNumNotifTotales-1000;
				if (tmpNumNotifTarificar<0) {
					tmpNumNotifTarificar=0;
				}

				if (tmpNumNotifTotales>300000){
					j=5;
				} else if (tmpNumNotifTotales>150000){
					j=4;
				} else if (tmpNumNotifTotales>50000){
					j=3;
				} else if (tmpNumNotifTotales>10000){
					j=2;
				}

				FranqueoIva=-1*ArrPrecioNotifTelemSeg[j]+tmpNumNotifTarificar*ArrPrecioNotifTelemSeg[j];
				//alert("FranqueoIva: " + FranqueoIva);
			}

			// SELLOS PERSONALIZADOS
			if (tmpIDP=="925") {
				var tmpNumPliegos=new Number(document.tarificador.S90.value);
				//FranqueoSinIva = tmpNumPliegos*ArrPrecioFranqueoSellos[1];
				FranqueoSinIva = ArrPrecioFranqueoSellos[1];
				document.tarificador2.cantidad.value=document.tarificador.S90.value;
			} 

			// GIRO ONLINE
			if (tmpIDP=="921") {
				FranqueoSinIva=parseFloat(redondear(document.tarificador.S2.value.replace(',','.'))*0.02);
				//alert(FranqueoSinIva);
			}

			var valorPExento = precioProductoExento.replace(',','.');
			var valorSAExento = precioSAExento.replace(',','.');

			// el precio base del servicio sin impuestos, menos la parte exenta, ahora no tiene sentido pero puede tener aplicación posterior.
			var resultado = parseFloat(valorP) + FranqueoIva - parseFloat(valorPExento);
			//alert("resultado:" + resultado);
			// redondeamos antes de impuestos.
			resultado = redondear(resultado);
			//alert("resultado2:" + resultado);

			if (parseFloat(document.tarificador2.IVA.value.replace(',','.'))!=-1) {
				//alert(document.tarificador2.IVA.value);
				resultado = parseFloat(resultado) + parseFloat((resultado * parseFloat(document.tarificador2.IVA.value.replace(',','.')))) + parseFloat(valorPExento); 						
				resultado = redondear(resultado);
				//alert(resultado);
				// ya tenemos el precio base con su IVA.				
			}

			// los valores opcionales que apliquen impuestos.				
			var resultadoSA = parseFloat(valorSA);

			// los valores opcionales exentos de impuestos.		
			var resultadoSAExento = parseFloat(valorSAExento);

			//alert("resultadoSA: " + resultadoSA);
			//alert("resultadoSAExento: " + resultadoSAExento);
			//alert("IVA_SA: " + document.tarificador2.IVA_SA.value);
			//AJUSTE DE LA TARIFA PARA CANARIAS DE LOS SERVICIOS ADICIONALES:
			// - Admisión telefónica de telegramas
			// - Expedición por Télex de radiotelegramas interiores
			if (tmpIDP=="500" || tmpIDP=="505") {
				if (document.tarificador2.IVA_SA.options[document.tarificador2.IVA_SA.selectedIndex].text=="CANARIAS") {
					if (document.tarificador.SA718.checked) {
						resultadoSA = resultadoSA - impAdmTelefTelegr;
						resultadoSAExento = resultadoSAExento + impAdmTelefTelegr;
					}
					if (document.tarificador.SA733.checked){
						resultadoSA = resultadoSA - impExpedTelexRadiotelegInteriores;
						resultadoSAExento = resultadoSAExento + impExpedTelexRadiotelegInteriores;
					}
				}
			}
			//alert("resultadoSA: " + resultadoSA);
			//alert("resultadoSAExento: " + resultadoSAExento);

			// redondeamos antes de impuestos.
			resultadoSA = redondear(resultadoSA);
			//alert ("Resultado: " + resultado );
			resultado = parseFloat(resultado) + FranqueoSinIva + parseFloat(resultadoSA) + parseFloat((resultadoSA * parseFloat(document.tarificador2.IVA_SA.value.replace(',','.'))));		
			//alert(resultado);
			resultado = redondear(resultado);

			resultado = parseFloat(resultado) + parseFloat(redondear(resultadoSAExento));			


			// ya está calculado, redondeamos y pintamos.
			resultado = redondear(resultado);			
			document.tarificador2.punitario.value = resultado.replace('.',',');

			// por el número de unidades.				
			resultado = resultado * parseFloat(document.tarificador2.cantidad.value);										
			resultado = redondear(resultado);				
			document.tarificador2.pfIVA.value = resultado.replace('.',',');		
		} else
			document.tarificador2.pfIVA.value = '';
	} catch(e) {
		//ignoramos el error si no se aplica IVA
		//alert("Error:" + e);
	}
} 


// Funci?ajenador de eventos del objeto MSXML2.XMLHTTP 
// es llamada una vez procesada la solicitud de calculo de precio.
function actualizarPrecio(){               
	if (req.readyState == 4) { //completado
		if (req.status == 200){ // estado OK
			var a = req.responseText.split(";");	
			if (debug) alert(req.responseText);
			
			precioProductoSinIVA = a[0];
			precioProductoExento = a[1];
			precioSASinIVA = a[2];
			precioSAExento = a[3];
			
			//corrección para Publicorreo Nacional, idp=200
			//si el peso es menor o igual a 10 gramos
			if (document.tarificador.IDP.value=='200' && document.tarificador.S1.value <= 10) {
				if (document.tarificador.S3.value == 61) {
					precioProductoSinIVA = PublicorreoNacional10gramosZonaA;
				} else if (document.tarificador.S3.value == 62) {
					precioProductoSinIVA = PublicorreoNacional10gramosZonaB;
				}
			}
			
			//corrección para Publicorreo Internacional, idp=201
			//si el peso es menor o igual a 10 gramos
			if (document.tarificador.IDP.value=='201' && document.tarificador.S1.value <= 10) {
				destino=document.tarificador.S200.value;
				var bolEsEU = false;
				for (k=0; k < ue_con_iva.length; k++) { //comprobar si pertenece a la ue con iva
					if (ue_con_iva[k]==destino){
						bolEsEU=true;			
						break;
					}
				}
				if (bolEsEU == false) {
					for (k=0; k < europa_sin_iva.length; k++) { //comprobar si pertenece a la ue sin iva
						if (europa_sin_iva[k]==destino){
							bolEsEU=true;			
							break;
						}
					}
				}

				if (bolEsEU) {
					//si pertenece a la ue (da igual si tiene iva o no, ya se le aplicará luego)
					precioProductoSinIVA = PublicorreoInternacional10gramosZonaA;
				} else {
					precioProductoSinIVA = PublicorreoInternacional10gramosZonaB;
				}
			}
			
//			//corrección para Giro Urgente Internacional - Marruecos
//			if (document.tarificador.IDP.value=='408' && document.tarificador.S200.value == 'MRC') {
//				precioProductoSinIVA = precioProductoSinIVA.replace(',','.');
//				//se suma al precio base la cantidad girada * porcentaje a aplicar dependiendo del tramo
//				if (document.tarificador.S2.value <= 500) {
//					precioProductoSinIVA = "" + (parseFloat(precioProductoSinIVA) + parseInt(document.tarificador.S2.value) * GiroUrgenteMarruecos500);
//				} else if (document.tarificador.S2.value <= 1000) {
//					precioProductoSinIVA = "" + (parseFloat(precioProductoSinIVA) + parseInt(document.tarificador.S2.value) * GiroUrgenteMarruecos1000);
//				} else {
//					precioProductoSinIVA = "" + (parseFloat(precioProductoSinIVA) + parseInt(document.tarificador.S2.value) * GiroUrgenteMarruecos9999);
//				}
//			}
			
			// para Prepagado Postal Exprés, existe la posibilidad de que se elija una
			// combinación de origen y destino sin servicio (no hay zona peninsular)
			// solo lo sabremos a la vuelta, pues el algoritmo de cáclulo de zonas está en el
			// servicio Web. Si un producto no está bien, por ser erróneo el SW devuelve 0
			// así que para este producto:				
			if ((document.tarificador.IDP.value=='304') && (precioProductoSinIVA==0)) {
				switch (idiomaGlobal){
					case (idiomaGlobal='ESP'):
						alert("Prepagado Postal Exprés no es válido para envíos peninsulares. Puede emplear Postal Exprés.");
						break;
					case (idiomaGlobal='CAT'):
						alert("Prepagado Postal Exprés no es válido para envíos peninsulares. Puede emplear Postal Exprés.");
						break;
					case (idiomaGlobal='VAL'):
						alert("Prepagado Postal Exprés no es válido para envíos peninsulares. Puede emplear Postal Exprés.");
						break;
					case (idiomaGlobal='GAL'):
						alert("Prepagado Postal Exprés no es válido para envíos peninsulares. Puede emplear Postal Exprés.");
						break;
					case (idiomaGlobal='EUK'):
						alert("Prepagado Postal Exprés no es válido para envíos peninsulares. Puede emplear Postal Exprés.");
						break;
					case (idiomaGlobal='ENG'):
						alert("Prepagado Postal Exprés no es válido para envíos peninsulares. Puede emplear Postal Exprés.");
						break;
					}
			// Para Paquete Postal, hay dos servicios adicionales que son excluyentes y su selección va en función del peso del paquete
			} else if ((document.tarificador.IDP.value=='410')){
				if (((document.tarificador.SA740.checked) && (document.tarificador.SA735.checked)) || ((document.tarificador.SA740.checked) && (document.tarificador.S1.value>'10000')) || ((document.tarificador.SA735.checked) && (document.tarificador.S1.value<'10000'))) {
					switch (idiomaGlobal){
						case (idiomaGlobal='ESP'):
							alert("La selección de servicios adicionales no es correcta.");
							break;
						case (idiomaGlobal='CAT'):
							alert("La selección de servicios adicionales no es correcta.");
							break;
						case (idiomaGlobal='VAL'):
							alert("La selección de servicios adicionales no es correcta.");
							break;
						case (idiomaGlobal='GAL'):
							alert("La selección de servicios adicionales no es correcta.");
							break;
						case (idiomaGlobal='EUK'):
							alert("La selección de servicios adicionales no es correcta.");
							break;
						case (idiomaGlobal='ENG'):
							alert("La selección de servicios adicionales no es correcta.");
							break;
						}	
					} else {
						CalculaIVA();
					}
			} else
				CalculaIVA();
		}
	}
}

function startAjax(param){
	req = false;
	
	if (window.XMLHttpRequest) {
		try	{
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}
	} else if (window.ActiveXObject) {
		try	{
			req = new ActiveXObject("MSXML2.XMLHTTP");
		} catch(e){
			try	{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				req = false;
			}
		}
	}
			
	if (req) {
		req.onreadystatechange = actualizarPrecio;
		if (debug) alert(param);
		req.open("GET", direccion + param, true);
		req.send(null);
	}
}

// funci?ue genera el XML de petici?e precio y llama al servicio web para obtener el precio mediante AJAX.
function calcularPrecio(version,idioma) {
	// validaremos todos los datos obligatorios del formulario	
	if (checkrequired(document.tarificador,idioma)) {
		// Si todo OK generamos el XMl
	  	var xml = generaXML(version);
	  	// asignamos el idioma para los mensajes javascript.
	  	idiomaGlobal = idioma;
	    // y ahora lo pedimos.
	    startAjax('?xmlPrecio=' + xml);
	}
}

function generaXML(version){
	var tmpIDP = ""
	var tmpIDC = ""
	var tmpCVal = 0;
	var xml= '<T v="' + version + '">'; // Quitamos la cabecera xml, no es necesaria
	// para todos los miembros del formulario.
    for (i=0; i < document.tarificador.elements.length; i++) { 		
		// en caso de ser el c?o de prodcuto.
		if (document.tarificador.elements[i].name=="IDP"){
			xml = xml + '<IDP>' + document.tarificador.elements[i].value + '</IDP>';
		    tmpIDP = document.tarificador.elements[i].value;
		} else { // para los dem?campos.
			// siempre que no sean botones
			if (document.tarificador.elements[i].type != "button") { 												
				// si son servicios adicionales
				if (document.tarificador.elements[i].name.substring(0,2)=='SA'){								
					// si est?seleccionados
					if (document.tarificador.elements[i].checked){ 
						var vsa = document.tarificador.elements[i].value;// si tienen valor
						if (vsa==-1) vsa=''; // si es menos uno no tienen campo para recoger datos.
						xml = xml + '<SA id="' + document.tarificador.elements[i].name.substring(2,document.tarificador.elements[i].name.length) + '">' + vsa + '</SA>';
						}					
				} else { // son caracteristicas
					if (document.tarificador.elements[i].id !=''){ // si no son campos fijos, no tiene id.
						if (document.tarificador.elements[i].type == "checkbox") {
							var valor='N';
							if (document.tarificador.elements[i].checked) 
								valor='S';
							xml = xml + '<C id="' + document.tarificador.elements[i].name.substring(1,document.tarificador.elements[i].name.length) + '">' + valor + '</C>'
						} else {
							if (document.tarificador.elements[i].name!=""){
                                tmpIDC=document.tarificador.elements[i].name.substring(1,document.tarificador.elements[i].name.length);
                                tmpCVal=document.tarificador.elements[i].value;
								if (tmpIDP=="200" && (tmpIDC=="1") & (tmpCVal<5)){
                                  //xml = xml + '<C id="' + tmpIDC + '">' + "5" + '</C>' 'por si habia que ajustar por gramos el publicorreo
								  xml = xml + '<C id="' + document.tarificador.elements[i].name.substring(1,document.tarificador.elements[i].name.length) + '">' + document.tarificador.elements[i].value + '</C>'
								} else {
								  xml = xml + '<C id="' + document.tarificador.elements[i].name.substring(1,document.tarificador.elements[i].name.length) + '">' + document.tarificador.elements[i].value + '</C>'
								}
							}
						}
					}
				}	
			}
		}
	
	} 	
//alert ("xml: " +xml );
	return xml + '</T>';
}
	
function cambiaCategoria(categoria) {		
	var x = document.getElementsByTagName('div');
	var b = false;					
	for (var i=0;i<x.length;i++) {			
	b = false;								
	try { b = (x[i].name.substring(0,3)=='IDC')} catch(e) {b = (x[i].id.substring(0,3)=='IDC');}// firefox o netescape.
	if (b) {
		if (x[i].name=='IDC' + categoria) 
			x[i].style.display = 'block';
		else if (x[i].id=='IDC' + categoria) // firefox o netescape.
			x[i].style.display = 'block';
		else 
				x[i].style.display = 'none';			
		}							
	}

}

