var INCREMENTO_DIAS_NORMAL = 1;

function objetoAjax(){
 var xmlhttp=false;
	try {
 		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 	}
	catch (e) {
 		try {
 			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 		}
		catch (E) {
 			xmlhttp = false;
 		}
 	}
 	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
   	}
   	return xmlhttp;
}

function isset(variable){
	try {
		if (typeof(eval(variable)) != 'undefined')
        	if (eval(variable) != null)
    			return true;
	} catch(e) { }
	return false;
}

function eliminarTraduccion(id){
	total_combinaciones[id] = 0;
	numero_palabras[id] = 0;
	precio_base[id] = 0;
	
	var t = document.getElementById('traducciones');
	var t_ = document.getElementById('traduccion_' + id);
	t.removeChild(t_);
	
	recalcularPrecio(id);

	var d = document.getElementById('detalles');
	var d_ = document.getElementById('detalle_' + id);
	d.removeChild(d_);	
}

function actualizarEspecialidad(objeto){
	var recargo_esp = document.getElementById('recargo_esp');
	var especialidad = document.getElementById('especialidad');

	recargo_esp.innerHTML = "Por especialidad: " + recargos_especialidad[objeto.value] + " %<br />";
	total_rec_esp = recargos_especialidad[objeto.value];
	
	especialidad.value = ids_especialidad[objeto.value];
	
	recalcular();
}

function actualizarFormatoEntrada(objeto){
	var recargo_for_entrada = document.getElementById('recargo_for_entrada');
	var formato_entrada = document.getElementById('formato_entrada');

	recargo_for_entrada.innerHTML = "Por formato de entrada: " + recargos_formato[0][objeto.value] + " %<br />";
	total_rec_for_en = recargos_formato[0][objeto.value];
	
	formato_entrada.value = recargos_formato[2][objeto.value];
	recalcular();
}

function actualizarFormatoSalida(objeto)
{
	var recargo_for_salida = document.getElementById('recargo_for_salida');
	var formato_salida = document.getElementById('formato_salida');

	recargo_for_salida.innerHTML = "Por formato de salida: " + recargos_formato[1][objeto.value] + " %<br />";
	total_rec_for_sa = recargos_formato[1][objeto.value];
	
	formato_salida.value = recargos_formato[2][objeto.value];

	recalcular();
}

function actualizarRevision(){
	var objeto = document.getElementById('chc_revision');
	var lbl_recargo_revision = document.getElementById('recargo_revision');

	total_rec_revision = 0;

	if(objeto.checked){
		for(i = 0; i < recargo_revision.length; i++){
			total_rec_revision += parseFloat(total_combinaciones[i] * (recargo_revision[i] / 100));
		}
		lbl_recargo_revision.innerHTML = "Por revisión: " + total_rec_revision + " &euro;<br />";
	}
	else{
		lbl_recargo_revision.innerHTML = "";
	}
}

function actualizarUrgente(){
	var objeto = document.getElementById('chc_urgente');
	var lbl_recargo_urgente = document.getElementById('recargo_urgente');
	
	total_rec_urgente = 0;
	
	if(objeto.checked){
		for(i = 0; i < recargo_urgente.length; i++)
			total_rec_urgente += total_combinaciones[i] * (recargo_urgente[i] / 100);
		lbl_recargo_urgente.innerHTML = "Por urgencia: " + total_rec_urgente + " &euro;<br />";
	}
	else{
		lbl_recargo_urgente.innerHTML = "";
	}
}

function actualizarCombinacion(tipo, id){
	// Cargar datos de la traducción seleccionada
	// Si la opción ya estaba siendo utilizada, actualizar los valores. Problema: recargos por urgente: recalcular
	var idioma_origen = document.getElementById('sel_0_' + id).value;
	var idioma_destino = document.getElementById('sel_1_' + id).value;
	var advertencia = false;
	if((idioma_origen != -1) && (idioma_destino != -1)){
		// Obtener datos de la combinación
		ajax = objetoAjax();

		ajax.open("GET", "procesador.php?tipo=normal&origen=" + idioma_origen + "&destino=" + idioma_destino);
		ajax.onreadystatechange = function() {
			if (ajax.readyState == 4) {
				// Esperar por los datos
				var datos = ajax.responseXML;
				if(datos == null){
					alert("Error al recibir los datos desde el servidor. Por favor, inténtelo de nuevo más tarde");
				}
				precio_base[id] 	 = datos.getElementsByTagName("precio_base").item(0).firstChild.data;
				recargo_revision[id] = datos.getElementsByTagName("revision_recargo").item(0).firstChild.data;
				recargo_urgente[id]  = datos.getElementsByTagName("urgente_recargo").item(0).firstChild.data;
				minimo_palabras[id]  = datos.getElementsByTagName("min_palabras").item(0).firstChild.data;

				var tmp1 = datos.getElementsByTagName("tipo").item(0).firstChild.data;
				if(tmp1 == "0")	// Estimación
					estimacion[id] = true;
				else
					estimacion[id] = false;
				palabras_dia['normal'][id]   = datos.getElementsByTagName("palabras_dia").item(0).firstChild.data;
				palabras_dia['revision'][id] = datos.getElementsByTagName("revision_palabras_dia").item(0).firstChild.data;
				palabras_dia['urgente'][id]  = datos.getElementsByTagName("urgente_palabras_dia").item(0).firstChild.data;

				recalcularPrecio(id);
			}
		}
		ajax.send(null);
	}
}

function actualizarNumeroPalabras(id){
	numero_palabras[id] = document.getElementById('numero_palabras_' + id).value;
	recalcularPrecio(id);
}

function recalcularPrecio(id){
	var lbl_detalle = document.getElementById('detalle');
	var de = document.getElementById('detalle_'+id);
	var i = 0;
	total_precio = 0;
	
	if(isset(numero_palabras[id]) && isset(precio_base[id])){
		if(parseInt(numero_palabras[id]) < parseInt(minimo_palabras[id]))
			numero_palabras[id] = minimo_palabras[id];
	
		// Tener en cuenta el numero de palabras para aplicar el rango
		i = 0;
		while((numero_palabras[id] >= descuentos_palabras[0][i]) && (i < descuentos_palabras[0].length)){
			i++;
		}
		descuento = descuentos_palabras[1][i-1];
		total_combinaciones[id] = (numero_palabras[id] * precio_base[id]) - (numero_palabras[id] * precio_base[id]) * descuento / 100;
		
		var linea = precio_base[id] + " &euro; por palabra, " + numero_palabras[id] + " palabras" + " (" + descuento + " % de descuento): "+ redondea(total_combinaciones[id]) + " &euro;";
		if(numero_palabras[id] >= datos)
			linea = linea + " <small><a href='javascript:mostrarAvisoConsulta();'>consultar</a></small>";			
		if(estimacion[id] == true)
			linea = linea + " <small><a href='javascript:mostrarAvisoEstimacion()'>pendiente de confirmación</a></small>";
		linea = linea + "<br />";

		de.innerHTML = linea;

	}
	else{
		total_combinaciones[id] = 0;
		de.innerHTML = "";
	}
	
	for(i = 0; i < total_combinaciones.length; i++){
		total_precio += total_combinaciones[i];
	}
	
	recalcular();
}

function recalcularRecargo(){
	var lbl_total_recargos = document.getElementById('total_recargos');
	total_recargos = total_rec_for_en + total_rec_esp + total_rec_for_sa;
	lbl_total_recargos.innerHTML = "Total recargos: " + total_recargos ;
}

function actualizarTotal(){
	var lbl_total_precio = document.getElementById('total_precio');
	var total = total_precio + (total_precio * total_recargos / 100) + total_rec_revision + total_rec_urgente;
	lbl_total_precio.innerHTML = "Importe total: " + redondea(total) + " &euro;";
}

function actualizarPlazo(){
	var lbl_plazo = document.getElementById('lbl_plazo');
	var chc_revision = document.getElementById('chc_revision');
	var chc_urgente = document.getElementById('chc_urgente');
	var	plazo_rev = 0, plazo_tra = 0;

	var maximo = 0;
	var tmp = 0;
	var i = 0;

	// En el cálculo del plazo, prima la traducción o la revisión con plazo más largo, porque se hacen en paralelo
	// Ver qué botones de opción están seleccionados. Urgente sustituye al plazo, revisión se añade	
	if(chc_revision.checked){
		for(i = 0; i < palabras_dia['revision'].length; i++)
			tmp = parseFloat(numero_palabras[i] / (palabras_dia['revision'][i]));
			if((tmp > maximo) || (i == 0)){
				plazo_rev = tmp;
				maximo = tmp;

			}
	}
	
	var maximo = 0;
	var tmp = 0;
	var i = 0;
	
	if(chc_urgente.checked){ // Si está activado el urgente...
		for(i = 0; i < palabras_dia['urgente'].length; i++){
			tmp = parseFloat(numero_palabras[i] / (palabras_dia['urgente'][i]));
			if((tmp > maximo) || (i == 0)){
				plazo_tra = tmp;
				maximo = tmp;
			}
		}
	}
	else{					// Si está en modo normal...
		for(i = 0; i < palabras_dia['normal'].length; i++){
			tmp = parseFloat(numero_palabras[i] / (palabras_dia['normal'][i]));
			if((tmp > maximo) || (i == 0)){
				plazo_tra = tmp;
				maximo = tmp;
			}
		}
	}
	plazo = plazo_rev + plazo_tra;
	
	lbl_plazo.innerHTML = (parseInt(plazo) + 1 + INCREMENTO_DIAS_NORMAL) + " días";
}

function redondea(numero)
{
	var original=parseFloat(numero);
	var result=Math.round(original*100)/100 ;
	return result;
} 

function mostrarAvisoEstimacion(){
	alert("El coste de las traducciones que muestran el aviso 'pendiente de confirmación' corresponden a una estimación media y deben confirmarse.");
}

function mostrarAvisoConsulta(){
	alert("Consulte condiciones especiales para grandes traducciones.");
}

function depura(cadena){
	var debug = document.getElementById('debug');
	debug.innerHTML = cadena;
}

function recalcular(){
	actualizarPlazo();
	actualizarRevision();
	actualizarUrgente();
	
	recalcularRecargo();
	actualizarTotal();
}
