//javascript para la aplicación web

/**
 * Devuelve el texto para el tooltip de la lista de extensiones de archivo
 * validas
 * 
 * @param extPermTxt
 * @param urlServer
 * @return
 */
function getInfoFileExtensions(extPermTxt, urlServer) {
	var infoFileExtensions = dijit.byId("infoFileExtensions");
	infoFileExtensions.label = extPermTxt + getFileExtensionPelMain(urlServer);
}
/**
 * Devuelve todas las extensiones de archivo admitidas por PEL en el proyecto
 * dato
 * 
 * @param urlServer
 * @return
 */
function getFileExtensionPelMain(urlServer) {
	var proyectoId = dijit.byId("proyectoId").value;
	var extPermitidas = "";

	dojo.xhrGet( {
		url : urlServer + "ajaxGetFileExtensionPelMain",
		preventCache : true,
		sync : true,
		content : {
			proyectoId : proyectoId
		},
		handleAs : "json",
		load : function(data, args) {
			if (data != null) {
				var items = data.items;
				for (j = 0; j < items.length; j++) {
					if (j > 0) {
						extPermitidas += ", ";
					}
					extPermitidas += items[j].id;
				}
			} else {
				ajaxDataError();
			}
		},
		error : function(error, args) {
			ajaxComError(error);
		}
	});

	return extPermitidas;

}

/**
 * Confirma si un número de pedido cliente es obligatorio
 * 
 * @param numPedidoCliente
 * @param urlServer
 * @return
 */

function esNumPedidoClienteObligatorioPelMain(numPedidoCliente, urlServer) {
	var proyectoId = dijit.byId("proyectoId").value;
	var esObligatorio = "";

	dojo.xhrGet( {
		url : urlServer + "ajaxEsNumPedidoClienteObligatorioPelMain",
		preventCache : true,
		sync : true,
		content : {
			proyectoId : proyectoId
		},
		handleAs : "json",
		load : function(data, args) {
			if (data != null) {
				esObligatorio = data.result;
			} else {
				ajaxDataError();
			}
		},
		error : function(error, args) {
			ajaxComError(error);
		}
	});

	return esObligatorio == "Y";
}
/**
 * Recuperación de la lengua de partida según proyectoId
 * 
 * @param {String}
 *            urlServer Url del servidor
 */
function getLenguaPartidaPelMain(urlServer, opt) {
	var proyectoId = dijit.byId("proyectoId").value;
	var lenguaPartida = dijit.byId("lenguaPartida");
	var url = urlServer + "ajaxGetLenguaPartida?proyectoId=" + proyectoId
			+ "&opt=" + opt;
	var store = new dojo.data.ItemFileReadStore( {
		url : url
	});
	lenguaPartida.set("store", store);
	store.fetch( {
		onComplete : function(items, request) {
			if (items.length != 0) {
				for (j = 0; j < items.length; j++) {
					if (items[j].id == "es_es") {
						lenguaPartida.set("value", "es_es");
						getLenguaLlegadaMulti(urlServer, "false")
						break;
					}
				}
			}
		},
		onError : ajaxComError,
		queryOptions : {
			deep : true
		}
	});
}

/**
 * Recuperación del contrato según proyectoId
 * 
 * @param {String}
 *            urlServer Url del servidor
 */
function getContrato(urlServer) {
	var proyectoId = dijit.byId("proyectoId").value;
	var contrato = dojo.byId("contrato");
	var btnSubmit = dojo.byId("submit");
	dojo.xhrGet( {
		url : urlServer,
		preventCache : true,
		content : {
			proyectoId : proyectoId
		},
		handleAs : "xml",
		load : function(data, args) {
			dojo.fadeOut( {
				node : contrato,
				onEnd : function() {
					if (data != null) {
						// contrato
				cargaCombo(contrato, data, "", "y");
				dojo.fadeIn( {
					node : contrato
				}).play();
			} else {
				ajaxDataError();
				btnSubmit.disabled = true;
			}
		}
			}).play();
		},
		// if any error occurs, it goes here:
		error : function(error, args) {
			ajaxComError(error);
		}
	});
}

/**
 * Recuperación de los datos de presupuesto
 * 
 * @param {String}
 *            urlServer Url del servidor.
 * @param (String)
 *            contrato Código de contrato.
 * @param (String)
 *            presupuestoId Código de presupuesto.
 */
function getPresupuesto(urlServer, proyectoId, contrato, presupuestoId) {

	var timer = new dojox.timing.Timer(5000);
	timer.onTick = function() {
		var refPresupuesto = proyectoId + contrato + presupuestoId
		var procesandoPresupuesto = dojo.byId(refPresupuesto
				+ "procesandoPresupuesto");
		dojo
				.xhrGet( {
					url : urlServer,
					preventCache : true,
					content : {
						proyectoId : proyectoId,
						contrato : contrato,
						presupuestoId : presupuestoId
					},
					handleAs : "xml",
					load : function(data, args) {
						// fade out the node we're modifying
					dojo
							.fadeOut(
									{
										node : procesandoPresupuesto,
										onEnd : function() {
											if (data != null) {
												// datos comunes del presupuesto
												var estadoPresupuesto_key = getElementValue(dojo
														.query(
																'estadoPresupuesto_key',
																data)[0]);
												var estadoPresupuesto = getElementValue(dojo
														.query(
																'estadoPresupuesto',
																data)[0]);
												// en el caso de que el
												// presupuesto ya esté en
												// estado finalizado (es
												// decir que ya todos los
												// idiomas
												// están presupuestados), se
												// desactivará el timer
												// periódico
												if (estadoPresupuesto_key == 'PEDIDO_FINALIZADO') {
													dojo
															.byId(refPresupuesto
																	+ "procesandoPresupuesto").className = "topcontainerhidden";
													dojo
															.byId(refPresupuesto
																	+ "presupuestoFinalizado").className = "topcontainer tableheadtext";
													timer.stop();
												} else {
													dojo
															.byId(refPresupuesto
																	+ "procesandoPresupuesto").className = "topcontainer tableheadtext";
												}

												// INIECCIÓN DATOS EN DIVS
												// datos comunes
												dojo.byId(refPresupuesto
														+ "estadoPresupuesto").innerHTML = getElementValue(dojo
														.query(
																'estadoPresupuesto',
																data)[0]);
												dojo
														.byId(refPresupuesto
																+ "fechaPresupuestoDisponible").innerHTML = getElementValue(
														dojo
																.query(
																		'fechaPresupuestoDisponible',
																		data)[0],
														"-");
												dojo
														.byId(refPresupuesto
																+ "fechaLimitePresupuestoDisponible").innerHTML = getElementValue(
														dojo
																.query(
																		'fechaLimitePresupuestoDisponible',
																		data)[0],
														"-");
												dojo.byId(refPresupuesto
														+ "fechaVBPresup").innerHTML = getElementValue(
														dojo
																.query(
																		'fechaVBPresup',
																		data)[0],
														"-");
												dojo
														.byId(refPresupuesto
																+ "tiempoRemanenteDisponibilidad").innerHTML = getElementValue(dojo
														.query(
																'tiempoRemanenteDisponibilidad',
																data)[0]);
												// gran totales
												dojo.byId(refPresupuesto
														+ "granTotNumPalCvcx").innerHTML = getElementValue(dojo
														.query(
																'granTotNumPalCvcx',
																data)[0]);
												dojo.byId(refPresupuesto
														+ "granTotImpTPalCvcx").innerHTML = getElementValue(dojo
														.query(
																'granTotImpTPalCvcx',
																data)[0]);
												dojo
														.byId(refPresupuesto
																+ "granTotNumPalPreTrad").innerHTML = getElementValue(dojo
														.query(
																'granTotNumPalPreTrad',
																data)[0]);
												dojo.byId(refPresupuesto
														+ "granTotImpTPreTrad").innerHTML = getElementValue(dojo
														.query(
																'granTotImpTPreTrad',
																data)[0]);
												dojo
														.byId(refPresupuesto
																+ "granTotNumPalNuevas").innerHTML = getElementValue(dojo
														.query(
																'granTotNumPalNuevas',
																data)[0]);
												dojo.byId(refPresupuesto
														+ "granTotImpTNuevas").innerHTML = getElementValue(dojo
														.query(
																'granTotImpTNuevas',
																data)[0]);
												dojo.byId(refPresupuesto
														+ "granTotNumPalabras").innerHTML = getElementValue(dojo
														.query(
																'granTotNumPalabras',
																data)[0]);
												dojo
														.byId(refPresupuesto
																+ "granTotRecargoPorUrgencia").innerHTML = getElementValue(dojo
														.query(
																'granTotRecargoPorUrgencia',
																data)[0]);
												dojo.byId(refPresupuesto
														+ "granTotImporte").innerHTML = getElementValue(dojo
														.query(
																'granTotImporte',
																data)[0]);
												// nodos de lengua
												var lstTraduccion = dojo.query(
														'traduccion', data);
												// boolean visto bueno
												// traducción
												var vbClienteParaTraducir = true;
												// se recorren los nodos de
												// lengua y se cargan los
												// datos en los relativos
												// divs

												for ( var idxTrad = 0; idxTrad < lstTraduccion.length; idxTrad++) {
													var lengua = lstTraduccion[idxTrad]
															.getAttribute('idiomaLLegada');
													dojo.byId(refPresupuesto
															+ 'numPalCvcx'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('numPalCvcx');
													dojo.byId(refPresupuesto
															+ 'impTPalCvcx'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('impTPalCvcx');
													dojo.byId(refPresupuesto
															+ 'numPalNuevas'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('numPalNuevas');
													dojo.byId(refPresupuesto
															+ 'impTPalNuevas'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('impTPalNuevas');
													dojo.byId(refPresupuesto
															+ 'numPalPreTrad'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('numPalPreTrad');
													dojo.byId(refPresupuesto
															+ 'impTPalPreTrad'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('impTPalPreTrad');
													dojo.byId(refPresupuesto
															+ 'totNumPalabras'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('totNumPalabras');
													dojo
															.byId(refPresupuesto
																	+ 'impRecargoPorUrgencia'
																	+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('impRecPorUrg');
													dojo.byId(refPresupuesto
															+ 'totImporte'
															+ lengua).innerHTML = lstTraduccion[idxTrad]
															.getAttribute('totImporte');
													var estadoPresupuestoIdioma_key = lstTraduccion[idxTrad]
															.getAttribute('estadoPresupuestoIdioma_key');
													var estadoPresupuestoIdioma = lstTraduccion[idxTrad]
															.getAttribute('estadoPresupuestoIdioma');
													dojo
															.byId(refPresupuesto
																	+ 'estadoPresupuestoIdioma'
																	+ lengua).innerHTML = estadoPresupuestoIdioma;

													// dependiendo del
													// estado del archivo,
													// activamos ciertos
													// divs
													if (estadoPresupuestoIdioma_key != 'LISTO_PARA_VB_CLIENTE') {
														vbClienteParaTraducir = false;
													}
													// lógica de activación
													// enlace de descarga
													if (estadoPresupuestoIdioma_key == 'LISTO_PARA_DESCARGAR'
															|| estadoPresupuestoIdioma_key == 'DESCARGADO') {
														dojo
																.byId(refPresupuesto
																		+ 'descargarArchivoTraducido'
																		+ lengua).className = 'topcontainer';
													} else {
														dojo
																.byId(refPresupuesto
																		+ 'descargarArchivoTraducido'
																		+ lengua).className = 'topcontainerhidden';
													}
												}// for

												// si todos los idiomas
												// están listos para el VºBº
												// activamos el div de
												// pregunta
												if (vbClienteParaTraducir) {
													dojo
															.byId(refPresupuesto + 'optTraducirNoTraducir').className = 'topcontainer';
												} else {
													dojo
															.byId(refPresupuesto + 'optTraducirNoTraducir').className = 'topcontainerhidden';
												}

												dojo
														.fadeIn(
																{
																	node : procesandoPresupuesto
																}).play();
											} else {
												ajaxDataError();
												dojo
														.fadeIn(
																{
																	node : procesandoPresupuesto
																}).play();
												timer.stop();
											}
										}
									}).play();
				},
				// if any error occurs, it goes here:
					error : function(error, args) {
						ajaxComError(error);
						dojo.fadeIn( {
							node : procesandoPresupuesto
						}).play();
					}
				});
	};
	timer.start(); // start the timer
}

function pelVBPresupuesto(proyectoId, contrato, presupuestoId, partyIdVBPresup,
		urlServer) {
	var refPresupuesto = proyectoId + contrato + presupuestoId;
	var estado = dojo.byId(refPresupuesto + 'selectTraducirNoTraducir').value;
	dojo.xhrPost( {
		url : urlServer,
		content : {
			proyectoId : proyectoId,
			contrato : contrato,
			presupuestoId : presupuestoId,
			estado : estado,
			partyIdVBPresup : partyIdVBPresup
		},
		handleAs : "xml"
	});
}
/**
 * Devuelve el texto de un nodo
 * 
 * @param {Element}
 *            el elemento DOM desde el cual recuperar el texto
 */
function getElementValue(elm, porDefecto) {
	if (elm == undefined) {
		return "";
	}
	var txt = '';
	var lstChilds = elm.childNodes;
	for ( var j = 0; j < lstChilds.length; j++) {
		if (txt != '') {
			text = txt + '\n'
		}
		txt = txt + lstChilds[j].nodeValue;
	}
	if (txt == '' && porDefecto != undefined) {
		txt = porDefecto;
	}
	return txt;
}

/**
 * Carga un combo desde el xml data-key/value
 */
function cargaCombo(combo, data, selectedKey, noOneAutoSelect) {
	var datos = dojo.query('data', data);
	var item = 0;
	var items = datos.length;
	var autoSeleccionado = false;
	if (items == 0) {
		// si no hay items: select deshabilitado
		combo.length = 1;
		combo.options[0].value = "";
		combo.options[0].text = "---";
		combo.disabled = true;
	} else if (items == 1 && noOneAutoSelect == "y") {
		item++;
		items++;
		combo.length = items;
		combo.options[0].value = "";
		combo.options[0].text = "---";
		combo.disabled = false;
	} else if (items == 1) {
		// si hay un solo item: autoseleccionado
		combo.length = items;
		combo.disabled = false;
	} else {
		// si hay más de uno: un primer item vacío
		// siempre si no es un select múltiple
		if (combo.multiple == false) {
			item++;
			items++;
			combo.options[0].value = "";
			combo.options[0].text = "---";
		}
		combo.length = items;
		combo.disabled = false;
	}
	for ( var idx = 0; idx < datos.length; idx++) {
		var key = datos[idx].getAttribute("key");
		combo.options[item].value = key;
		combo.options[item].text = datos[idx].getAttribute("value");
		// si se pasa el código de auto selección
		if (key == selectedKey) {
			combo.options[item].selected = true;
			autoSeleccionado = true;
		}
		// siguiente item
		item++;
	}
	// si el select es de tipo multiple: se visualizan todos los items
	if (combo.multiple == true) {
		combo.size = combo.length;
	}

	return autoSeleccionado;
}

/**
 * Recuperación de las lenguas del TA según proyectoId
 * 
 * @param {String}
 *            urlServer Url del servidor
 */
function getOVTALenguas(urlServer) {
	var proyectoId = dijit.byId("proyectoId");
	var lenguasOVTA = dijit.byId("lenguasOVTA");

	lenguasOVTAStore.url = urlServer + "&proyectoId="
			+ proyectoId.get("value");
	lenguasOVTAStore.close();
	lenguasOVTAStore.fetch( {
		query : {
			id : "*"
		},
		onComplete : function(items, request) {
			if (items.length != 0) {
				if (!lenguasOVTAStore.isItem(lenguasOVTA.item)) {
					lenguasOVTA.set("value", items[0].id);
				}
			} else {
				lenguasOVTA.reset();
			}
		},
		onError : ajaxComError,
		queryOptions : {
			deep : true
		}
	});
}

/**
 * Recuperación de la lengua de llegada del TA según proyectoId y lengua de
 * partida
 * 
 * @param {String}
 *            urlServer Url del servidor
 */
function getOVTAGlosario(urlServer) {
	var proyectoId = dijit.byId("proyectoId").value;
	var glosarioOVTA = dijit.byId("glosarioOVTA");
	glosarioOVTAStore.url = urlServer + "&proyectoId=" + proyectoId;
	glosarioOVTAStore.close();
	glosarioOVTAStore.fetch( {
		query : {
			id : "*"
		},
		onComplete : function(items, request) {
			if (items.length != 0) {
				if (!glosarioOVTAStore.isItem(glosarioOVTA.item)) {
					glosarioOVTA.set("value", items[0].id);
				}
			} else {
				glosarioOVTA.reset();
			}
		},
		onError : ajaxComError,
		queryOptions : {
			deep : true
		}
	});
}

/**
 * Pide los datos del TA
 * 
 * @param urlServer
 * @return
 */
function getOVTAData(urlServer) {
	var proyectoId = dijit.byId("proyectoId").value;
	var traductorAutomaticoServidor = dojo.byId("traductorAutomaticoServidor");
	var traductorAutomaticoGlosario = dojo.byId("traductorAutomaticoGlosario");
	var traductorAutomaticoMemoria = dojo.byId("traductorAutomaticoMemoria");

	dojo
			.xhrGet( {
				url : urlServer + "ajaxGetOVTAData",
				preventCache : true,
				sync : false,
				content : {
					proyectoId : proyectoId
				},
				handleAs : "json",
				load : function(data, args) {
					if (data != null) {
						dojo
								.fadeOut(
										{
											node : traductorAutomaticoServidor,
											onEnd : function() {
												if (data.nombreServidor != undefined) {
													traductorAutomaticoServidor.innerHTML = data.nombreServidor;
												} else {
													traductorAutomaticoServidor.innerHTML = "-";
												}
												if (data.nombreMemoria != undefined) {
													traductorAutomaticoMemoria.innerHTML = data.nombreMemoria;
												} else {
													traductorAutomaticoMemoria.innerHTML = "-";
												}
												dojo
														.fadeIn(
																{
																	node : traductorAutomaticoServidor
																}).play();
											}
										}).play();
					} else {
						ajaxDataError();
					}
				},
				error : function(error, args) {
					ajaxComError(error);
				}
			});
}

/**
 * Pide la traducción al TA
 * 
 * @param urlServer
 * @return
 */
function getOVTATextoTraducido(formularioAviso, formularioDatosNoValidos, urlServer) {
	var proyectoId = dijit.byId("proyectoId");
	var lenguasOVTA = dijit.byId("lenguasOVTA");
	var glosarioOVTA = dijit.byId("glosarioOVTA");
	var textoATraducir = dijit.byId("textoATraducir");
	var textoTraducido = dojo.byId("textoTraducido");
	var numPalabras = dojo.byId("numPalabras");
	var workTime = dojo.byId("workTime");
	var error = dojo.byId("error");

	// control de no sobrepasar los 4096 carácteres
	if (!isWordCounterOk()) {
    	showOneButMessageDialog(formularioAviso, formularioDatosNoValidos, "Ok");

		return;
	}

	dojo.byId("cargandoDatos").style.visibility = "visible";
	error.innerHTML = "";
	numPalabras.innerHTML = "-";
	workTime.innerHTML = "-";

	dojo.xhrPost( {
		url : urlServer + "ajaxGetOVTATextoTraducido",
		preventCache : true,
		sync : false,
		content : {
			proyectoId : proyectoId.value,
			lenguasOVTA : lenguasOVTA.get("value"),
			glosarioOVTA : glosarioOVTA.get("value"),
			textoATraducir : textoATraducir.get("value")
		},
		handleAs : "json",
		load : function(data, args) {
			if (data != null) {
				dojo.fadeOut( {
					node : textoTraducido,
					onEnd : function() {
						if (data.textoTraducido != undefined) {
							textoTraducido.innerHTML = data.textoTraducido;
							numPalabras.innerHTML = data.numPalabras;
							workTime.innerHTML = data.workTime;
						}
						error.innerHTML = data.error;
						dojo.fadeIn( {
							node : textoTraducido
						}).play();
						dojo.byId("cargandoDatos").style.visibility = "hidden";
					}
				}).play();
			} else {
				ajaxDataError();
			}
		},
		error : function(error, args) {
			ajaxComError(error);
		}
	});
}

/**
 * 
 */
function wordCounter() {
	var textoATraducir = dijit.byId("textoATraducir");
	var word_counter = dojo.byId("word_counter");

	var rest = 4096 - textoATraducir.get("value").length;

	if (rest > 0) {
		word_counter.innerHTML = "(" + rest + ")";
	} else {
		word_counter.innerHTML = "(<span style=\"color: #ff0000\">" + rest
				+ "</span>)";
	}
}

/**
 * 
 */
function isWordCounterOk() {
	var textoATraducir = dijit.byId("textoATraducir");

	var rest = 4096 - textoATraducir.get("value").length;

	if (rest > 0) {
		return true;
	} else {
		return false;
	}
}

