// JavaScript Document

//En este documento se controlará los pasos a seguir al presupuestar un producto

//VARIABLES GLOBALES
//estas son las que contendran datos referentes a los precios
var dto, un25, un50, un100, un250, un500, un1000, un2500, un5000, un10000, un25000, precioUnitario, precioMarcaje;
//guardan datos sobre los productos en los que hay que consultar el precio
var consultar, precioNegativo, gastosFijos, doblado_bool, precioDoblado, dobladoActivo;

//////////////////////////////////////////
//	INICIAMOS EL PRESUPUESTO
//		Ocultamos el contenedor del navegador y mostramos el de presupuesto.
//		Cargamos los colores del producto

//Con esta función mostraremos el contenedor del presupuesto y ocultaremos el del navegador
function MuestraPresupuesto() {
	new Effect.Fade(GetObject("navegador"));
	new Effect.Appear(GetObject("espere"));
	setTimeout("Paso1();", 2000);
}

//Paso 1
function Paso1() {
	Element.hide(GetObject("espere"));
	Element.hide(GetObject("conMarcaje"));
	new Effect.Appear(GetObject("eliminar"));
	new Effect.Appear(GetObject("presupuestar"));
	cargaColores(GetObject("referencia").value);
}


//Función para cargar los datos dinámicamente dentro del select (utilizando AJAX)
function cargaColores(referencia) {
	var ajax = MyAjax();
	var familia = "color";
	ajax.open("GET", "dameColores.asp?referencia=" + referencia, true);
	ajax.onreadystatechange = function() {
		if (ajax.readyState == 4) {				
			if (ajax.status == 200) {
				//recogemos lo que nos devuelve el asp
				var resultado = ajax.responseText;
				var result_data = "";
				clearTopicList(familia);		//limpiamos el contenido del select
				GetObject(familia).style.display = "inline";	//mostramos el select
				//hacemos un split a la cadena que nos ha llegado
				var resultado_split = resultado.split("|");
				//el split contiene los datos a poner al select
				for (i=0; i < resultado_split.length; i++) {
					result_data = resultado_split[i].split(",");
					appendToSelect(GetObject(familia), result_data[0], result_data[1]);
				}
			} else {
				alert("Error Número: " + ajax.status + "\nDescripción: " + ajax.statusText);	
			}
		} else {
			Element.hide(GetObject(familia));
		}
	}	
	ajax.send(null);
}

//////////////////////////////////////////
//	CALCULAMOS EL PRESUPUESTO
//		Recogemos la cantidad elegida
//		Primero observamos si la cantidad elegida está dentro de los rangos de precios que tiene ese producto

//Pulsamos el botón calcular y hallamos el valor del producto con las opciones elegidas
function calcular() {
	var cant = GetObject("cantidad").value;
	if (GetObject("color").value == -1) {
		alert("Debe elegir un color.\nGracias.");
	} else {
		if ( (cant == "") || (isNaN(cant)) ) {
			cant = 0;
			GetObject("cantidad").value = cant;
		}
		if (compruebaForm(cant)) {
			//new Effect.Fade(GetObject('final'));
			Element.hide(GetObject('final'));
			Element.hide(GetObject('eliminar2'));
			new Effect.Appear(GetObject("eliminar"));
			new Effect.Appear(GetObject("espere"));
			//después de ocultar algunos elementos y mostrar otros, esperamos algo más de un segundo y hacemos el fin del calculo
			setTimeout("finCalculo();", 1300);		
		}
	}
}

//Comprobamos si la cantidad es suficiente o demasiada según el rango de precios de este producto
function compruebaForm(cantidad) {
	var tintas, marcaje_bool;
	cantidad = parseFloat(cantidad);
	//Recogemos el valor de las tintas
	tintas = parseFloat(GetObject("numColores").value);
	if ( (tintas == "") || (isNaN(tintas)) )
		tintas = 0;
	//Recogemos los gastosFijos
	gastosFijos = parseFloat(GetObject("gastosFijos").value);
	//alert("gastos fijos: "+gastosFijos)
	//Recogemos que valor tiene el marcaje, true o false
	for (i=0;i<=1;i++) {
		if(document.frmPresupuestar.marcaje[i].checked) 
			marcaje_bool = document.frmPresupuestar.marcaje[i].value;
	}
	//Recogemos que valor tiene el doblado y embolsado, true o false
	if (dobladoActivo == true) {
		if(document.frmPresupuestar.doblado.checked) {
			doblado_bool = document.frmPresupuestar.doblado.value;
			//alert(GetObject("embolsadoActivo"))
			GetObject("embolsadoActivo").innerHTML = "<div style='width:195px; float:left;'>Precio de doblado y embolsado unitario</div> <input name='prDoblado' type='text' dir='rtl' class='form_registro_campos_peq' id='prDoblado' size='9' disabled='disabled' value='" + precioDoblado.toFixed(2) + "'> &euro;";
		} else {
			doblado_bool = false;
		}
	} else {
		doblado_bool = false;
	}
	if (daPrecio(cantidad)) {
		if (marcaje_bool == "false") { //Si no se quiere poner marcaje
			tintas = 0;
			gastosFijos = 0;
			GetObject("fgastosFijos").value = gastosFijos.toFixed(2);
			if (precioUnitario==consultar) { //Si el precio unitario es a consultar
				GetObject("total").value = consultar;
				GetObject("totalUnitario").value = consultar;
			} else { //si el precio unitario tiene valor
				precioTotal = (precioUnitario * cantidad) + gastosFijos;
				if (doblado_bool=="true") {
					precioTotal = precioTotal + (precioDoblado * cantidad);
				}
				GetObject("total").value = precioTotal.toFixed(2);
				GetObject("totalUnitario").value = precioUnitario.toFixed(2);
			}
			return true;
		} else {
			if (gastosFijos == precioNegativo) {
				GetObject("fgastosFijos").value = consultar;
				precioUnitario = consultar;
			} else {
				gastosFijos = (gastosFijos * tintas);
				GetObject("fgastosFijos").value = gastosFijos.toFixed(2);
			}
			if (precioUnitario==consultar) {
				GetObject("total").value = consultar;
				GetObject("totalUnitario").value = consultar;
				return true;
			} else {
				//sumamos al precio unitario los gastos fijos, más adelante le sumaremos el precio del marcaje
			//	precioUnitario = precioUnitario + gastosFijos;
			//	alert("cant:" + cantidad + "\nMarcaje: " + GetObject("marcajeOculto").value);
				//cargamos el valor del marcaje y hallamos el precioUnitario total
				cargaMarcaje(cantidad, GetObject("marcajeOculto").value, tintas);
				return true;
			}
		}
		
	}
	return false;
}

//buscamos el rango en el que esta la cantidad y observamos si la cantidad elegida es correcta
function daPrecio(cantidad) {	
	if (isNaN(cantidad) || cantidad <= 24) {
		precioUnitario = consultar;
		return true;
	} else if (cantidad >= 25 && cantidad <= 49) 
		return compruebaVacio(un25);
	else if (cantidad >= 50 && cantidad <= 99)
		return compruebaVacio(un50);
	else if (cantidad >= 100 && cantidad <= 249)
		return compruebaVacio(un100);
	else if (cantidad >= 250 && cantidad <= 499)
		return compruebaVacio(un250);
	else if (cantidad >= 500 && cantidad <= 999)
		return compruebaVacio(un500);
	else if (cantidad >= 1000 && cantidad <= 2499)
		return compruebaVacio(un1000);
	else if (cantidad >= 2500 && cantidad <= 4999)
		return compruebaVacio(un2500);
	else if (cantidad >= 5000 && cantidad <= 9999)
		return compruebaVacio(un5000);
	else if (cantidad >= 10000 && cantidad <= 24999)
		return compruebaVacio(un10000);
	else if (cantidad >= 25000 && cantidad <= 49999)
		return compruebaVacio(un25000);
	else if (cantidad >= 50000)
		return compruebaVacio("");
	return true;
}
//En esta función comprobamos si la variable que nos pasan está vacía, si está vacía quiere decir
//que la cantidad elegida o no es sufieciente o es demasiada para ese producto
//notificamos esto al usuario mediante un alert
function compruebaVacio(numero) {
	var aviso = "Para poder pedir este producto debe elegir otra cantidad.";
	if ( numero == "" ) {
		//alert(aviso);
		//return false;
		numero = consultar;
	}
	precioUnitario = numero;
	return true;
}
//Cargamos el precio del marcaje según la cantidad elegida
//hallamos el precio unitario teniendo en cuenta los valores de marcaje y las tintas. precio unitario = precio unitario + (precio marcaje * tintas)
//hallamos el precio total = precio unitario * cantidad
function cargaMarcaje(cant, marcaje, tintas) {
	var ajax = MyAjax();
	//llamamos al asp que nos dará el precio del marcaje para la cantidad y el marcaje que pasamos
	ajax.open("GET", "dameMarcaje.asp?cantidad=" + cant + "&marcaje=" + marcaje + "&tintas=" + tintas, true);
	ajax.onreadystatechange = function() {
		if (ajax.readyState == 4) {		
			if (ajax.status == 200) {
				//recogemos el valor escrito en el asp
				var precioMarcaje = ajax.responseText;
				if (precioMarcaje == consultar) {
					//escribimos el precio unitario en la caja correspondiente
					GetObject("totalUnitario").value = consultar;
					//escribimos el precio total en la caja correspondiente
					GetObject("total").value = consultar;
				} else {
					//hallamos el precio unitario
				//	alert("precioUnitario = " + precioUnitario + " + ("+precioMarcaje+" * "+tintas+") ");
					//precioUnitario = parseFloat(precioUnitario) + (precioMarcaje * parseFloat(tintas));
					// Ahora solo se pasa el precio Marcaje, por que el numero de tintas se calcula en damemarcaje.asp
					precioUnitario = parseFloat(precioUnitario) + parseFloat(precioMarcaje);
					//escribimos el precio unitario en la caja correspondiente
					GetObject("totalUnitario").value = precioUnitario.toFixed(2);
					//hallamos el precio total
				// alert("gastos fijos: "+gastosFijos)
					tot	= (parseFloat(precioUnitario) * parseFloat(cant)) + gastosFijos;
					if (doblado_bool=="true") {
						tot = tot + (precioDoblado * cant);
					}
					//escribimos el precio total en la caja correspondiente
					GetObject("total").value = tot.toFixed(2);
				}
				return true;
			} else {
				alert("Error Número: " + ajax.status + "\nDescripción: " + ajax.statusText);				
				return false;
			}
		} else {
		}
	}	
	ajax.send(null);
}

//cuando se han terminado de realizar todas las operaciones se ocultan y muestran algunos controles más y ya tenemos el presupuesto terminado
function finCalculo() {
	Element.hide(GetObject('espere'));
	new Effect.Appear(GetObject('final'));
	new Effect.SwitchOff(GetObject('eliminar'));
	new Effect.Pulsate(GetObject('alCarrito'));
	setTimeout("new Effect.Grow(GetObject('eliminar2'));", 500);
}

//esta función es llamada desde dos puntos:
//		- el botón eliminar
//		- el botón de enviar al carrito
function terminar(tipo) {
	switch (tipo) {
		//Se pulsa el botón de eliminar
		//ocultamos el contenedor de presupuesto y mostramos el contenedor navegador
		case "eliminar":
			new Effect.Shrink(GetObject("presupuestar"));
			setTimeout("new Effect.Appear(GetObject('espere'));", 1000)			
			setTimeout("new Effect.Fade(GetObject('espere')); new Effect.Appear(GetObject('navegador'));", 2000)
			new Effect.Shrink(GetObject("final"));
			Element.hide(GetObject('eliminar2'));
			break;
		//Mandamos la información para guardarla
		case "agregar":
			//Aqui ya hemos comprobado los datos, así que mandamos la información por post a la página que guarda la info
			GetObject("frmPresupuestar").submit();
			break;
	}
}
