/* Formato de imagen. */	
var JPG = "jpg";
var PNG = "png";
var GIF = "gif";
var formatoImagenActual = GIF;
/* Fin de Formato de imagen . */	

/* Idiomas . */	
var ESPANOL = 1;
var INGLES  = 2;
var idiomaActual = ESPANOL;
/* Fin de Idiomas. */	

/* Columnas . */	
/* Se inicializan los anchos de ésta forma por problemas con Mozilla Firefox. */	
var ANCHO_COLUMNAS = new Array(75, 75, 75, 85, 75, 85, 75);
var MINIMO_FILAS = 6;
/* Fin de Columnas . */	

/* Factores de multiplicación para tipos de transporte. */	
var FACTOR_AEREO = 1/6000;
var FACTOR_TERRESTRE = 400;
var FACTOR_MARITIMO = 1;
/* Fin de Factores de multiplicación para tipos de transporte. */	

/* Tipos de transporte. */
var AEREO = 1;
var TERRESTRE = 2;
var MARITIMO = 3;
var tipoTransporteActual = AEREO;
/* Fin de Tipos de transporte. */

	function calcularVolumen(ancho, alto, largo) {
		return ancho * alto * largo;
	}

	function calcularPesoVolumen(peso, volumen, factor) {
		return peso * volumen * factor;
	}
	
	function calcularDiferenciaPVRealPV(pv, pvreal) {
		return pv - pvreal;
	}	
	
	function calcularDiferenciaPVRealPV(pv, pvreal) {
		return pv - pvreal;
	}	
	
	function iniciarTabla (tableName, tHeadName, tBodyName, tFootName, idioma, _numCols) {
		idiomaActual = idioma;
		init(tableName, tHeadName, tBodyName, tFootName, _numCols);

		crearBotones();
		cambiarTipoTransporte();
		limpiarTodo();
	}

	/* Cambia los nombres de las columnas dependiendo del tipo de transporte y del tipo de transporte actual.  */
	function cambiarTipoTransporte() {
		if(idiomaActual == ESPANOL) {
			if(tipoTransporteActual == AEREO){
				document.getElementById("anchoColumn").innerHTML = "Ancho(cm)";
				document.getElementById("largoColumn").innerHTML = "Largo(cm)";  	
				document.getElementById("altoColumn").innerHTML = "Alto(cm)";
				document.getElementById("volumenColumn").innerHTML = "Total(cm3)";
			} else if(tipoTransporteActual == TERRESTRE || tipoTransporteActual == MARITIMO) {
				document.getElementById("anchoColumn").innerHTML = "Ancho(mts)";
				document.getElementById("largoColumn").innerHTML = "Largo(mts)";  	
				document.getElementById("altoColumn").innerHTML = "Alto(mts)";
				document.getElementById("volumenColumn").innerHTML = "Total(mts3)";
			}
			document.getElementById("bultosColumn").innerHTML = "No. Bultos";	
			document.getElementById("totalPVColumn").innerHTML = "Total<br/>Peso-Volumen";
			if(tipoTransporteActual == MARITIMO){
				document.getElementById("pesoRealColumn").innerHTML = "Peso Real<br/>(Toneladas)";
			} else if(tipoTransporteActual == AEREO || tipoTransporteActual == MARITIMO)  {
				document.getElementById("pesoRealColumn").innerHTML = "Peso Real (Kg)";
			}
		} else if(idiomaActual == INGLES){
			if(tipoTransporteActual == AEREO){
				document.getElementById("anchoColumn").innerHTML = "Width(cm)";
				document.getElementById("largoColumn").innerHTML = "Length(cm)";  	
				document.getElementById("altoColumn").innerHTML = "Height(cm)";
				document.getElementById("volumenColumn").innerHTML = "Total(cm3)";
			} else {
				document.getElementById("anchoColumn").innerHTML = "Width(mts)";
				document.getElementById("largoColumn").innerHTML = "Length(mts)";  	
				document.getElementById("altoColumn").innerHTML = "Height(mts)";
				document.getElementById("volumenColumn").innerHTML = "Total(m3)";
			}
			document.getElementById("bultosColumn").innerHTML = "Nr. of<br/>pieces";	
			document.getElementById("totalPVColumn").innerHTML = "Weight-Volume<br/>Ratio";
			if(tipoTransporteActual == MARITIMO){
				document.getElementById("pesoRealColumn").innerHTML = "Actual Weight<br/>(Ton)";
			} else {
				document.getElementById("pesoRealColumn").innerHTML = "Actual Weight<br/>(Kg)";
			}
		}
		refrescarBotones();
		cambiarEstadoBotonSeleccionTipoTransporte(tipoTransporteActual, true);
	}
	
	//Adiciona una fila para calcular las formulas.
	function adicionarFila(){
		var objTR = document.createElement ("TR");
		var objTD = document.createElement ("TD");
		
		for (var i = 0; i < numCols; i++) {
			objTD = document.createElement ("TD");
			objTD.width = ANCHO_COLUMNAS[i];

			if(i == 3 || i == 5) {
				objTD.className = "celdaTotalParcial";
				objTD.innerHTML = " ";
			} else {
				var objInput = createInput();
				objInput.style.width = objTD.width;
				objInput.attachEvent('onblur',  celdaOnBlur);
				objInput.attachEvent('onfocus', celdaOnFocus);
				objTD.appendChild (objInput);
				if(i<=2){
					objTD.childNodes[0].style.textAlign = "center";
				} else {
					objTD.childNodes[0].style.textAlign = "right";
				}
			}
			
			objTR.insertAdjacentElement ("beforeEnd", objTD);
		}
		tBody.insertAdjacentElement ("beforeEnd", objTR);
		return objTR;
	}
	
	//Elimina una fila de la tabla
	function eliminarFila(){
		if(tBody.childNodes.length <= MINIMO_FILAS){
			return false;
		}
		deleteLastRow();
	}

	function limpiarTodo(){
		deleteAll();
		for(var i=0; i < MINIMO_FILAS; i++) {
			adicionarFila();
		}
	}
	
	/* Realiza los cálculos  de una fila. */
	function calcularFila(fila, tipoTransporte) {
		var factor;
		
		//Valores de fila
		var ancho   = clearNumberFormat(fila.childNodes[0].childNodes[0].value);
		var largo   = clearNumberFormat(fila.childNodes[1].childNodes[0].value);
		var alto    = clearNumberFormat(fila.childNodes[2].childNodes[0].value);
		var bultos  = clearNumberFormat(fila.childNodes[4].childNodes[0].value);
		
		//Resultados de calculo.
		var volumen;
		var pesoVolumen;
		
		//Limpiar las celdas de volumen, y relacion peso-volumen
		cleanCell(fila.childNodes[3]);
		cleanCell(fila.childNodes[5]);
		
		volumen = calcularVolumen(ancho, largo, alto);
		fila.childNodes[3].appendChild( document.createTextNode(formatNumber(volumen, 2)) );
		
		switch (tipoTransporte) {
			case AEREO:			factor = FACTOR_AEREO; 		break;
			case TERRESTRE:		factor = FACTOR_TERRESTRE;	break;
			case MARITIMO:		factor = FACTOR_MARITIMO;	break;
		}
		
		pesoVolumen = calcularPesoVolumen(bultos, volumen, factor);
		fila.childNodes[5].appendChild( document.createTextNode(formatNumber(pesoVolumen, 2)) );
	}
	
	/* Realiza el cálculo de la tabla. */
	function calcular() {
		var sumatoriaBultos = 0;
		var sumatoriaPesoVolumen = 0;
		var	sumatoriaPesoReal = 0 ;
		
		for(var i=0; i < tBody.childNodes.length; i++) {
			//Calcular los valores de la fila.
			calcularFila(tBody.childNodes[i], tipoTransporteActual);
			
			var bultos = clearNumberFormat(tBody.childNodes[i].childNodes[4].childNodes[0].value);
			var pesoVolumen = clearNumberFormat(tBody.childNodes[i].childNodes[5].innerHTML);
			var pesoReal = clearNumberFormat(tBody.childNodes[i].childNodes[6].childNodes[0].value);
			
			//Realizar las sumatorias
			sumatoriaBultos      += parseFloat(bultos);
			sumatoriaPesoVolumen += parseFloat(pesoVolumen);
			sumatoriaPesoReal    += parseFloat(pesoReal);
		}
		//Limpiar las celdas de totales
		cleanCell(document.getElementById("totalBultos"));
		cleanCell(document.getElementById("totalPV"));
		cleanCell(document.getElementById("totalPRV"));

		//Asignarles el valor de la sumatoria a las celdas de totales.
		document.getElementById("totalBultos").innerHTML = formatNumber(sumatoriaBultos, 2) + "";
		document.getElementById("totalPV").innerHTML = formatNumber(sumatoriaPesoVolumen, 2) + "";
		document.getElementById("totalPRV").innerHTML = formatNumber(sumatoriaPesoReal, 2) + "";
	}
	
	function crearBotones(){
		//Inicializa el fondo de los botones de selección de tipo de transporte.
		document.getElementById("tblHeader").style.backgroundImage = "url(botones/bkg."+formatoImagenActual+")";
		document.getElementById("tblHeader").style.width   = "543";
		document.getElementById("tblHeader").style.height  = "28";
		document.getElementById("tblHeader").style.backgroundRepeat  = "no-repeat";
		
		
		//Botones de tipo de selección de tipo de transporte.
		crearBotonSeleccionTipoTransporte("buttonAereo", "143", "31");
		crearBotonSeleccionTipoTransporte("buttonMaritimo", "176", "31");
		crearBotonSeleccionTipoTransporte("buttonTerrestre", "176", "31");
		refrescarBotones();
		
		//Botones de tipo de selección de tipo de transporte.
		crearBotonOpcion("botonLimpiar", "95", "30");
		crearBotonOpcion("botonCalcular", "95", "30");
		crearBotonOpcion("botonBorrarFila", "95", "30");
		refrescarBotonesOpcion();
	}
	
	/* Crea un prototipo para los botones de selección de tipo de transporte.*/
	function crearBotonSeleccionTipoTransporte(idBoton, width, height) {
		var button = document.getElementById(idBoton);
		button.style.width = width; 
		button.style.height = height; 
		button.attachEvent("onmouseup", seleccionarTipoTransporteOnMouseUp);
		return button;
	}

	/* Crea un prototipo para los botones de selección de tipo de transporte.*/
	function crearBotonOpcion(idBoton, width, height) {
		var button = document.getElementById(idBoton);
		button.style.width = width; 
		button.style.height = height; 
		button.attachEvent("onmouseup",   refrescarBotonesOpcion);
		button.attachEvent("onmousedown", seleccionarOpcionOnMouseUp);
		return button;
	}
	
	function seleccionarTipoTransporteOnMouseUp() {
		var botonElegido = event.srcElement;
		if( botonElegido ==  document.getElementById("buttonAereo") )
			tipoTransporteActual = AEREO;		
		if( botonElegido ==  document.getElementById("buttonTerrestre") )
			tipoTransporteActual = TERRESTRE;		
		if( botonElegido ==  document.getElementById("buttonMaritimo") )
			tipoTransporteActual = MARITIMO;
			
		cambiarTipoTransporte();
	}
	
	function seleccionarOpcionOnMouseUp() {
		var botonElegido = event.srcElement;
		if( botonElegido == document.getElementById("botonLimpiar") ){
			cambiarEstadoBotonOpcion("botonLimpiar", false);
		}
		if( botonElegido == document.getElementById("botonCalcular") ){
			cambiarEstadoBotonOpcion("botonCalcular", false);
		}
	}

	/*Cambia el estado de un boton de seleccion de tipo de transporte dependiendo del estado de activación en el que se encuentre*/
	function cambiarEstadoBotonSeleccionTipoTransporte(tipoTransporte, activo) {
		var idioma = "";
		if(idiomaActual == ESPANOL){
			idioma = "espanol";
		} else if(idiomaActual == INGLES){
			idioma = "english";
		} 
		
		if( tipoTransporte == AEREO ){
			if(activo)
				document.getElementById("buttonAereo").style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/01."+formatoImagenActual+")";
			else
				document.getElementById("buttonAereo").style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/02."+formatoImagenActual+")";
		} else if ( tipoTransporte == MARITIMO ){
			if(activo)
				document.getElementById("buttonMaritimo").style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/03."+formatoImagenActual+")";
			else
				document.getElementById("buttonMaritimo").style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/04."+formatoImagenActual+")";
		} else if ( tipoTransporte == TERRESTRE ){
			if(activo)
				document.getElementById("buttonTerrestre").style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/05."+formatoImagenActual+")";
			else
				document.getElementById("buttonTerrestre").style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/06."+formatoImagenActual+")";
		}
	}

	/*Cambia el estado de un boton de opción dependiendo del estado de activación en el que se encuentre*/
	function cambiarEstadoBotonOpcion(idBoton, activo) {
		var idioma = "";
		if(idiomaActual == ESPANOL) {
			idioma = "espanol";
		} else if(idiomaActual == INGLES) {
			idioma = "english";
		}
		
		if( idBoton == "botonCalcular" ) {
			if(activo)
				document.getElementById(idBoton).style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/07."+formatoImagenActual+")";
			else
				document.getElementById(idBoton).style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/08."+formatoImagenActual+")";
		} else if( idBoton == "botonLimpiar" ) {
			if(activo)
				document.getElementById(idBoton).style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/09."+formatoImagenActual+")";
			else
				document.getElementById(idBoton).style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/10."+formatoImagenActual+")";
		} else if( idBoton == "botonBorrarFila" ) {
			if(activo)
				document.getElementById(idBoton).style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/11."+formatoImagenActual+")";
			else
				document.getElementById(idBoton).style.backgroundImage = "url(/pls/portal/docs/PAGE/ALADDIN2008/CONTENIDO/NOADMIN/IMAGES/BOTONES/"+idioma+"/12."+formatoImagenActual+")";
		}
	}
	
	function celdaOnFocus() {
		var eventCell   = getEventCell();
		eventCell.childNodes[0].value = clearNumberFormat(eventCell.childNodes[0].value);
		eventCell.childNodes[0].select();
	}

	function celdaOnBlur() {
		var eventRow  = getEventRow();
		var eventCell = getEventCell();

		eventCell.childNodes[0].value = formatNumber(eventCell.childNodes[0].value, 2);

		if( eventRow.childNodes[eventRow.childNodes.length-1] == eventCell && !esCeldaVacia(eventRow) && tBody.childNodes[tBody.childNodes.length-1] == eventRow ) {
			var objTR = adicionarFila();
			objTR.childNodes[0].childNodes[0].focus();
		}
		if( parseFloat(eventCell.childNodes[0].value) == 0 ){
			eventCell.childNodes[0].value = "";
		}
		
	}
	
	//Refresca los botones de selección de tipo de transporte.
	function refrescarBotones() {
		cambiarEstadoBotonSeleccionTipoTransporte(AEREO, false);
		cambiarEstadoBotonSeleccionTipoTransporte(TERRESTRE, false);
		cambiarEstadoBotonSeleccionTipoTransporte(MARITIMO, false);
	}	

	//Refresca los botones de opción.
	function refrescarBotonesOpcion() {
		cambiarEstadoBotonOpcion("botonLimpiar", true);
		cambiarEstadoBotonOpcion("botonCalcular", true);
		cambiarEstadoBotonOpcion("botonBorrarFila", true);
	}	
	
	//Valida  si la celda es vacía o no.
	function esCeldaVacia(objTR){
		for (var i = 0; i < objTR.childNodes.length; i++) {
			objTD = objTR.childNodes[i];

			if(i == 3 || i == 5) {
				if(parseFloat(objTD.innerHTML) != 0 || objInput.innerHTML.replace(/(\s)+/, '') != '') 
					return false;
			} else {
				objInput = objTD.childNodes[0];
				if(parseFloat(objInput.value) != 0 || objInput.value.replace(/(\s)+/, '') != '') 
					return false;
			}
		}
		return true;
	}
