function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function dmsToDeg(dms) {
         if (!dms) {
            return Number.NaN;
        }
        dms= dms.replace(/\s/g,'');
		var parts= dms.match(/(\d{1,3})[.,?d]?(\d{0,2})[']?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?/);
        if (parts==null) {
            return Number.NaN;
        }
        // parts:
        // 0 : degree
        // 1 : degree
        // 2 : minutes
        // 3 : seconds
        // 4 : fractions of second
        var d= (parts[1]?         parts[1]  : '0.0')*1.0;
        var m= (parts[2]?         parts[2]  : '0.0')*1.0;
        var s= (parts[3]?         parts[3]  : '0.0')*1.0;
        var r= (parts[4]? ('0.' + parts[4]) : '0.0')*1.0;
		var dec= d + (m/60.0) + (s/3600.0) + (r/3600.0);
        return dec;
    }

function convertDegToDMS(dec) {
	if(dec=="" || typeof dec=="undefined") {
		return "";
	}
	var positive_degrees= Math.abs(dec);
	var degrees= Math.round(positive_degrees + 0.5) - 1;
	var decimal_part= 60*(positive_degrees - degrees);
	var minutes= Math.round(decimal_part + 0.5) - 1;
	var seconds= 60*(decimal_part - minutes);
	if (seconds==60) {
		minutes= minutes+1;
		seconds= 0;
	}
	if (minutes==60) {
		degrees= degrees+1;
		minutes= 0;
	}
	//round seconds 5 decimals
	seconds = Math.round(seconds*100000)/100000;
	var sig= '';
	sig= (dec >= 0 ? '' : '-');

	var s;
	if (degrees >0) {
		s= sig + degrees + " " +minutes+" "+seconds;
	} else if (minutes >0) {
		s= degrees + " " +sig +minutes+" "+seconds;
	} else {
		s= degrees + " " +minutes+" "+sig+seconds;
	}
	return s;
}

function convertDmsToDeg(coord){
	if (coord.length < 2) {
            alert(TXT_ERROR);
			return false;
    }
	var coordDecLon, coordDecLat;
	var neg1= coord[0].match(/-/g)!=null? -1.0 : 1.0;
	//coordDecLon= coord[0].replace(/(^\s?-)|(\s?[NSEW]\s?)$/,'');
	coordDecLon= coord[0].replace(/-/g,'');
	coordDecLon =coordDecLon.replace(/\s+/gi, ' '); //sacar espacios repetidos dejando solo uno
	coordDecLon=ltrim(coordDecLon, ' ');
	var neg2= coord[1].match(/-/g)!=null? -1.0 : 1.0;
	coordDecLat= coord[1].replace(/-/g,'');
	coordDecLat =coordDecLat.replace(/\s+/gi, ' '); //sacar espacios repetidos dejando solo uno
	//esborrar espais esquerra
	coordDecLat=ltrim(coordDecLat, ' ');
	
	coordDecLon = coordDecLon.split(' ');
	coordDecLat = coordDecLat.split(' ');
	var grauslon=coordDecLon[0], minlon=coordDecLon[1], seglon=coordDecLon[2], grauslat=coordDecLat[0], minlat=coordDecLat[1], seglat =coordDecLat[2];
    			
	if(grauslon.length==2) grauslon="0"+grauslon;
	if(grauslon.length ==1) grauslon="00"+grauslon;
	if(grauslat.length ==2) grauslat="0"+grauslat;
	if(grauslat.length ==1) grauslat="00"+grauslat;
	if(minlon && minlon.length == 1) minlon = "0"+minlon;
	if(minlat && minlat.length == 1) minlat = "0"+minlat;
	if(seglon && seglon.length == 1) seglon = "0"+seglon;
	if(seglat && seglat.length == 1) seglat = "0"+seglat;
	
	var gmslon = grauslon+" "+minlon+" "+seglon;
	var gdlon = dmsToDeg(gmslon);
	var gmslat = grauslat+" "+minlat+" "+seglat;
	var gdlat = dmsToDeg(gmslat);
	
	//alert(gdlon.toFixed(6)+","+gdlat.toFixed(5));
	gdlon=(Math.round(gdlon*1000000000)/1000000000)*neg1;
	gdlat=(Math.round(gdlat*1000000000)/1000000000)*neg2;
	var coordenades =[gdlon,gdlat];
	return coordenades;
		  	
		  
	
}
		
var req;
var nameFile = "";

function Initialize()
{
	try
	{
		req=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(oc)
		{
			req = null;
		}
	}

	if(!req&&typeof XMLHttpRequest!="undefined")
	{
		req=new XMLHttpRequest();
	}
}


/*******************************************
 *       Calculadores  1.2        *
*******************************************/
var url_UTM2GEO_ED50="http://www.icc.cat/geocalcServlet/geocalcUtmToGeoED50.icc?";
var url_GEO2UTM_ED50="http://www.icc.cat/geocalcServlet/geocalcGeoToUtmED50.icc?";
var url_UTM2GEO_ETRS89="http://www.icc.cat/geocalcServlet/geocalcUtmToGeoETRS89.icc?";
var url_GEO2UTM_ETRS89="http://www.icc.cat/geocalcServlet/geocalcGeoToUtmETRS89.icc?";
var url_UTMED50_UTMETRS89 ="http://www.icc.cat/geocalcServlet/geocalcUtmED50ToUtmETRS89.icc?";
var url_UTMETRS89_UTMED50 ="http://www.icc.cat/geocalcServlet/geocalcUtmETRS89ToUtmED50.icc?";
var url_GEOETRS89_UTMED50 ="http://www.icc.cat/geocalcServlet/geocalcGeoETRS89ToUtmED50.icc?";
var url_UTMETRS89_GEOED50 ="http://www.icc.cat/geocalcServlet/geocalcUtmETRS89ToGeoED50.icc?";
var url_GEOETRS89_GEOED50 ="http://www.icc.cat/geocalcServlet/geocalcGeoETRS89ToGeoED50.icc?";
var url_GEOED50_UTMETRS89 ="http://www.icc.cat/geocalcServlet/geocalcGeoED50ToUtmETRS89.icc?";
var url_UTMED50_GEOETRS89 ="http://www.icc.cat/geocalcServlet/geocalcUtmED50ToGeoETRS89.icc?";
var url_GEOED50_GEOETRS89 ="http://www.icc.cat/geocalcServlet/geocalcGeoED50ToGeoETRS89.icc?";
var url_GCED50_GEOED50 ="http://www.icc.cat/geocalcServlet/geocalcGcED50ToGeoED50.icc?";
var url_GCETRS89_GEOETRS89 ="http://www.icc.cat/geocalcServlet/geocalcGcETRS89ToGeoETRS89.icc?";
var url_GEOETRS89_GCETRS89 ="http://www.icc.cat/geocalcServlet/geocalcGeoETRS89ToGcETRS89.icc?";
var url_GEOED50_GCED50 ="http://www.icc.cat/geocalcServlet/geocalcGeoED50ToGcED50.icc?";
//4 funcions mes gc2utm utm2gc
var url_UTMED50_GCED50 ="http://www.icc.cat/geocalcServlet/geocalcUtmED50ToGcED50.icc?";
var url_UTMETRS89_GCETRS89 ="http://www.icc.cat/geocalcServlet/geocalcUtmETRS89ToGcETRS89.icc?";
var url_GCED50_UTMED50 ="http://www.icc.cat/geocalcServlet/geocalcGcED50ToUtmED50.icc?";
var url_GCETRS89_UTMETRS89 ="http://www.icc.cat/geocalcServlet/geocalcGcETRS89ToUtmETRS89.icc?";
//4 funcions mes amb CM
var url_UTMETRS89_UTMED50CM ="http://www.icc.cat/geocalcServlet/geocalcUtmETRS89ToUtmED50CM.icc?";
var url_UTMED50_UTMETRS89CM ="http://www.icc.cat/geocalcServlet/geocalcUtmED50ToUtmETRS89CM.icc?";
var url_GEOED50_UTMETRS89CM ="http://www.icc.cat/geocalcServlet/geocalcGeoED50ToUtmETRS89CM.icc?";
var url_GEOETRS89_UTMED50CM ="http://www.icc.cat/geocalcServlet/geocalcGeoETRS89ToUtmED50CM.icc?";

var urlServlet;

function calcTransformacio() {
	var form = document.forms['calcForm'];
	var sistRefI = form.sistRefOrig.options[form.sistRefOrig.selectedIndex].value;
	var sistRefO = form.sistRefDesti.options[form.sistRefDesti.selectedIndex].value;
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;
	var sistCoordOut = form.sistCoordDesti.options[form.sistCoordDesti.selectedIndex].value;
	
	if (sistRefI == "ED50" && sistRefO == "ED50" && sistCoordIn == "utm" && sistCoordOut == "utm") {
		urlServlet = url_UTM2GEO_ED50;
		//per mostrar nomes convergencia de meridians.transformacio es utm2geo.
	} else if (sistRefI == "ETRS89" && sistRefO == "ETRS89" && sistCoordIn == "utm" &&  sistCoordOut == "utm") {
		urlServlet = url_UTM2GEO_ETRS89;
		//per mostrar nomes convergencia de meridians.transformacio es utm2geo.
	} else if (sistRefI == "ED50" && sistRefO == "ED50" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") && sistCoordOut == "utm") { 
		urlServlet = url_GEO2UTM_ED50;
	} else if (sistRefI == "ED50" && sistRefO == "ED50" && sistCoordIn == "utm" &&  (sistCoordOut == "geoDec" || sistCoordOut == "geo")) {
		urlServlet = url_UTM2GEO_ED50;
	} else if (sistRefI == "ETRS89" && sistRefO == "ETRS89" && sistCoordIn == "utm" &&  (sistCoordOut == "geoDec" || sistCoordOut == "geo")) {
		urlServlet = url_UTM2GEO_ETRS89;
	} else if (sistRefI == "ETRS89" && sistRefO == "ETRS89" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") && sistCoordOut == "utm") { 
		urlServlet = url_GEO2UTM_ETRS89;
	} else if (sistRefI == "ED50" && sistRefO == "ETRS89" && sistCoordIn == "utm" &&  sistCoordOut == "utm") {
		if (!document.getElementById('convMeridians').checked)
			urlServlet = url_UTMED50_UTMETRS89;
		else
			urlServlet = url_UTMED50_UTMETRS89CM;
	} else if (sistRefI == "ETRS89" && sistRefO == "ED50" && sistCoordIn == "utm" &&  sistCoordOut == "utm") {
		if (!document.getElementById('convMeridians').checked)
			urlServlet = url_UTMETRS89_UTMED50;
		else
			urlServlet = url_UTMETRS89_UTMED50CM;
	} else if (sistRefI == "ETRS89" && sistRefO == "ED50" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") && sistCoordOut == "utm") { 
		if (!document.getElementById('convMeridians').checked)
			urlServlet = url_GEOETRS89_UTMED50;
		else 
			urlServlet = url_GEOETRS89_UTMED50CM;
	} else if (sistRefI == "ETRS89" && sistRefO == "ED50" && sistCoordIn == "utm" && (sistCoordOut == "geoDec" || sistCoordOut == "geo")) {
		urlServlet = url_UTMETRS89_GEOED50;
	} else if (sistRefI == "ETRS89" && sistRefO == "ED50" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") && (sistCoordOut == "geoDec" || sistCoordOut == "geo")) { 
		urlServlet = url_GEOETRS89_GEOED50;
	} else if (sistRefI == "ED50" && sistRefO == "ETRS89" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") && sistCoordOut == "utm") { 
		if (!document.getElementById('convMeridians').checked)
			urlServlet = url_GEOED50_UTMETRS89;
		else
			urlServlet = url_GEOED50_UTMETRS89CM;
		
	} else if (sistRefI == "ED50" && sistRefO == "ETRS89" && sistCoordIn == "utm" && (sistCoordOut == "geoDec" || sistCoordOut == "geo")) {
		urlServlet = url_UTMED50_GEOETRS89;
	} else if (sistRefI == "ED50" && sistRefO == "ETRS89" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") && (sistCoordOut == "geoDec" || sistCoordOut == "geo")) { 
		urlServlet = url_GEOED50_GEOETRS89;
	} else if (sistRefI == "ED50" && sistRefO == "ED50" && sistCoordIn == "gc" &&  (sistCoordOut == "geoDec" || sistCoordOut == "geo")) {
		urlServlet = url_GCED50_GEOED50;
	} else if (sistRefI == "ETRS89" && sistRefO == "ETRS89" && sistCoordIn == "gc" && (sistCoordOut == "geoDec" || sistCoordOut == "geo")) {
		urlServlet = url_GCETRS89_GEOETRS89;
	} else if (sistRefI == "ETRS89" && sistRefO == "ETRS89" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") &&  sistCoordOut == "gc") {
		urlServlet = url_GEOETRS89_GCETRS89;
	} else if (sistRefI == "ED50" && sistRefO == "ED50" && (sistCoordIn == "geoDec" || sistCoordIn == "geo") &&  sistCoordOut == "gc") {
		urlServlet = url_GEOED50_GCED50;
	} else if (sistRefI == "ED50" && sistRefO == "ED50" && sistCoordIn == "gc" &&  sistCoordOut == "utm") {
		urlServlet = url_GCED50_UTMED50;
	} else if (sistRefI == "ED50" && sistRefO == "ED50" && sistCoordIn == "utm" &&  sistCoordOut == "gc") {
		urlServlet = url_UTMED50_GCED50;
	} else if (sistRefI == "ETRS89" && sistRefO == "ETRS89" && sistCoordIn == "gc" &&  sistCoordOut == "utm") {
		urlServlet = url_GCETRS89_UTMETRS89;
	} else if (sistRefI == "ETRS89" && sistRefO == "ETRS89" && sistCoordIn == "utm" &&  sistCoordOut == "gc") {
		urlServlet = url_UTMETRS89_GCETRS89;
	}
	
}
function trim(s){
	s = s.replace(/\s+/gi, ' '); //sacar espacios repetidos dejando solo uno
	s = s.replace(/^\s+|\s+$/gi, ''); //sacar espacios blanco principio y final

	return s;
}
function validarFormulari() {
	var form = document.forms['calcForm'];
	if (trim(form.source.value) == "") {
		alert(TXT_COORDIN);
		return false;
	}
	return true;
}

function processarDades(){
	var form = document.forms['calcForm'];
	var sistRefI = form.sistRefOrig.options[form.sistRefOrig.selectedIndex].value;
	var sistRefO = form.sistRefDesti.options[form.sistRefDesti.selectedIndex].value;
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;
	var sistCoordOut = form.sistCoordDesti.options[form.sistCoordDesti.selectedIndex].value;
		
	//validar formulari: source no estigui vuit, i totes les opcions marcades.
	if (validarFormulari()) {
	
		var entrada = form.source.value;
		var lineas = entrada.split('\n');
		var x_lon, y_lat, z_h; //x/Lon, y/Lat, z/h per coordenades (x,y) (lon, lat) (x,y,z) i (lon, lat, h)
		var tmp_result; //vble transf de coord GG MM SS a decimals
		var coordenades2;
		
		for (i=0;i<lineas.length;i++) {
			coordenades = lineas[i].split(',');
			if (coordenades == "")
				break;
			if(i == 0){
				if (sistCoordIn == "geo") {
					//convertir coordenades en graus minuts i segons a coord decimals
					coordenades2 = convertDmsToDeg(coordenades);
					if (coordenades2) {
						x_lon = coordenades2[0];
						y_lat = coordenades2[1];
						tmp_result = coordenades2[0] +","+coordenades2[1];
					} else 
						return false;
				} else if (sistRefI == sistRefO && sistCoordIn == "geoDec" && sistCoordOut =="geo") {
					//convertir coordenades decimals a coord en graus minuts i segons
					tmp_result = convertDegToDMS(coordenades[0]) +","+convertDegToDMS(coordenades[1]);
				} else {
					x_lon = coordenades[0];
					y_lat = coordenades[1];
				}
				if (coordenades.length > 2)
					z_h = coordenades[2];
				else 
					z_h = 0; //geo a gc i sense altures --> h=0
				
			}else if(i > 0){
				if (sistCoordIn == "geo") {
					//convertir coordenades en graus minuts i segons a coord decimals
					coordenades2 = convertDmsToDeg(coordenades);
					if (coordenades2) {
						x_lon += ";"+coordenades2[0];
						y_lat += ";"+coordenades2[1];
						tmp_result += '\n'+coordenades2[0] +","+coordenades2[1];
					} else
						return false;
				} else if (sistRefI == sistRefO && sistCoordIn == "geoDec" && sistCoordOut =="geo") {
					//convertir coordenades decimals a coord en graus minuts i segons
					tmp_result += '\n'+convertDegToDMS(coordenades[0]) +","+convertDegToDMS(coordenades[1]);
				} else {
					x_lon += ";"+coordenades[0];
					y_lat += ";"+coordenades[1];
				}
				if (coordenades.length > 2) 
					z_h += ";" +coordenades[2];
				else
					z_h += ";0";
			}
		}
		//si coordin=geo i coordout=geo  i sistRef== --> no enviar. nomes javascript
		if (sistRefI == sistRefO && ((sistCoordIn =="geo" && sistCoordOut =="geoDec") ||  (sistCoordIn =="geoDec" && sistCoordOut =="geo")) ){
			//no cridar a les calculadores i mostrar resultats directament
			form.result.value = tmp_result;
		} else {
			enviar(x_lon, y_lat, z_h);
		}
	}
}

function enviar(x_lon, y_lat, z_h)
{
	var form = document.forms['calcForm'];
	Initialize();
	form.elements['result'].value = "";
	
	var parametres = "x_lon="+ x_lon + "&y_lat="+ y_lat + "&z_h="+ z_h;
	
	document.getElementById('loading').style.visibility = "visible";

	//calcular la transformacio
	calcTransformacio();
	
	if(req != null && typeof urlServlet != "undefined"){

		req.onreadystatechange = function() {processReqTransformation();};
		req.open("POST", urlServlet + parametres, true);
		//Necessari per enviar formulari via post
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		//req.setRequestHeader("Content-length", parametres.length);
		req.setRequestHeader("Connection", "close");
		req.send();
	
	}
}


//handle Transformation
function processReqTransformation() {
	var form = document.forms['calcForm'];
	var sistRefI = form.sistRefOrig.options[form.sistRefOrig.selectedIndex].value;
	var sistRefO = form.sistRefDesti.options[form.sistRefDesti.selectedIndex].value;
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;
	var sistCoordOut = form.sistCoordDesti.options[form.sistCoordDesti.selectedIndex].value;
	
	// only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {

		var result = JSON.parse(req.responseText);		
		
		//mirar si hi ha un error result.error
		if (result.error) {
			alert(TXT_ERROR);
		} else {
			var boolCM = false;
			if (sistCoordOut == "utm" && document.getElementById('convMeridians').checked) { 
				//conv meridians nomes s'ha de mostrar si sistCoorDesti es utm i esta seleccionat
				boolCM = true;
			}
			
			var resultat;
			for(var i=0; i < result.conversio.length; i++){
				//x,y lon.lat
				var res = result.conversio[i].xLonOut + "," + result.conversio[i].yLatOut;
				if (sistCoordOut == "gc"){ //cota elip o z (geocentriques)
					res += "," + result.conversio[i].zHOut;
				} else if (sistCoordOut == "geo") {
					//convertir coord en graus minuts i segons
					res = convertDegToDMS(result.conversio[i].xLonOut) + "," + convertDegToDMS(result.conversio[i].yLatOut);
					if (sistCoordIn == "gc") {
						res += "," + result.conversio[i].zHOut;
					}
				} else if (boolCM) {
					//si =sist ref i =sist coord=utm --> resultat es coordenades d'entrada + convergencia meridians
					if (sistRefI == sistRefO && sistCoordIn == "utm") {
						//mostrar coordenades xLonIn xLatOut
						res = result.conversio[i].xLonIn + "," + result.conversio[i].yLatIn;
					} else	if (sistCoordIn == "gc") {
						res += "," + result.conversio[i].zHOut;
					}
					//convergencia de meridians			
					res += "," +result.conversio[i].convergenciaG+" "+result.conversio[i].convergenciaM+" "+result.conversio[i].convergenciaS;
					//escala
					res += "," +result.conversio[i].escala;
					
				} else {
					//geoDec, utm sense CM
					if (sistCoordIn == "gc") {
						res += "," + result.conversio[i].zHOut;
					}
				}
				
				form.elements['result'].value += res;
								
				if (i < result.conversio.length-1){
					form.elements['result'].value += '\n';
				}
			}
		}
		        	
        } else {
        	if (req.status == 414 || req.status == 413)
        		alert(TXT_ERROR_VOLUM);
    		else 
    			alert(TXT_ERROR);
    	}
    }
    document.getElementById('loading').style.visibility = "hidden";
}

function desactivarAltura(strSelect, boolDisable) {
	var obj;
	if (strSelect != "") {
		obj = document.getElementById(strSelect);
		if (strSelect == "alturaDesti" && obj.length <2 && boolDisable) { //si s'ha esborrat l'opcio sense altures, tornarla a afegir
			obj.length=0;
			obj.options[0]= new Option(TXT_ALTURA_SELECT_0, "");
			obj.options[1]= new Option(TXT_ALTURA_SELECT, "elip");
		}
		obj.disabled = boolDisable;
		obj.selectedIndex=0;
	}
}


function displayCM() {
	var form = document.forms['calcForm'];
	var sistRefI = form.sistRefOrig.options[form.sistRefOrig.selectedIndex].value;
	var sistRefO = form.sistRefDesti.options[form.sistRefDesti.selectedIndex].value;
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;
	var sistCoordOut = form.sistCoordDesti.options[form.sistCoordDesti.selectedIndex].value;
	
	//mirar si sist ref orig =sit ref desti i utm = utm --> no es pot desactivar el checkbox
	if (!document.getElementById('convMeridians').checked && sistRefI == sistRefO && sistCoordIn == "utm" && sistCoordOut == "utm") {
		document.getElementById('convMeridians').checked = true;
	}
	displayTooltip('resultTooltip', 'utm');
}
function displayTooltip(divId, sistCoord) {
	var obj =document.getElementById(divId);
	var txt, txtEg;
	txtEg = "<br/>" + TXT_EXEMPLE + " ";
	var boolCM = false; //convergencia de meridians
	var boolCotaElip = false; //cota el.lipsoidal
	if (divId == "sourceTooltip" && document.getElementById('alturaOrig').options[document.getElementById('alturaOrig').selectedIndex].value == "elip") {
		boolCotaElip = true;
	} else if (divId == "resultTooltip") {
		if (document.getElementById('convMeridians').checked)
			boolCM = true;
		if (document.getElementById('alturaDesti').options[document.getElementById('alturaDesti').selectedIndex].value == "elip")
			boolCotaElip = true;
	}
	//alert(divId + " elip " + boolCotaElip + " cm " + boolCM + " y sistCoord " + sistCoord);
	switch (sistCoord) {
	case "utm":
		txt = "Easting(X),Northing(Y)";
		txtEg +="432648.873,4624697.432";
		if (boolCotaElip) {
			txt +=",h";
			txtEg +=",24.89";
		}
		if (boolCM) 
			txt += ",CM,K";
		break;
	case "geoDec":
		txt = TXT_LONLAT_TOOLTIP;
		txtEg +="2.18969857,41.77052639";
		if (boolCotaElip) {
			txt +=",h";
			txtEg +=",24.89";
		}
		break;
	case "geo":
		txt = TXT_LONLAT_TOOLTIP;
		txtEg +="2 11 22.9164,41 46 13.893";
		if (boolCotaElip) {
			txt +=",h";
			txtEg +=",24.89";
		}
		break;
	case "gc":
		txt =  "X,Y,Z";
		txtEg +="4839482.173,15265.210,4142713.260";
		break;
	case "":
		txt ="";
		txtEg ="";
		break
	}
	if (divId == "sourceTooltip") 
		obj.innerHTML = "<b>" +txt + "</b>" +txtEg;
	else 
		obj.innerHTML = "<b>" +txt+ "</b>";
	
}


//onchange sist coord origen
function selectSistCoord() {
	var form = document.forms['calcForm'];
	var sistRefI = form.sistRefOrig.options[form.sistRefOrig.selectedIndex].value;
	var sistRefO = form.sistRefDesti.options[form.sistRefDesti.selectedIndex].value;
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;

	displayTooltip('sourceTooltip', sistCoordIn); //display del tooltip amb sist coord
	
	//geocentriques --> restringir valors sist. ref. desti i sist coord. desti
	if (sistCoordIn == "gc") {
		//mateix sist. ref.
		document.getElementById('sistRefDesti').length = 0; //esborrar totes les opcions sist ref desti
		form.sistRefDesti.options[0]=new Option(sistRefI, sistRefI); //afegir el sist ref origen
		
		//sistcoord geo i utm
		document.getElementById('sistCoordDesti').length =0;//esborrar totes les opcions sist coord desti
		form.sistCoordDesti.options[0]= new Option(TXT_UTM_SELECT, "utm");
		form.sistCoordDesti.options[1]= new Option(TXT_GEODEC_SELECT, "geoDec");
		form.sistCoordDesti.options[2]= new Option(TXT_GEO_SELECT, "geo");
		//altures orig desactivat
		desactivarAltura('alturaOrig', true);

		//altures desti --> nomes ellipsoidal
		document.getElementById('alturaDesti').length=0; //esborrar totes les opcions de les altures desti
		form.alturaDesti.options[0]=new Option(TXT_ALTURA_SELECT, "elip");
		desactivarAltura('alturaDesti', false);

		
	} else  {
		if (sistRefI != sistRefO){
		//  (sistCoordIn == "geoDec" || sistCoordIn == "geo" || sistCoordIn == "utm")
			//esborrar i crear sist coord desti
			document.getElementById('sistCoordDesti').length = 0; //esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]=new Option(TXT_UTM_SELECT,"utm");
			form.sistCoordDesti.options[1]=new Option(TXT_GEODEC_SELECT,"geoDec");
			form.sistCoordDesti.options[2]=new Option(TXT_GEO_SELECT, "geo");
		} else if (sistCoordIn == "geoDec") {
			// sistRefI == sistRefO
			//esborrar i crear sist coord desti
			document.getElementById('sistCoordDesti').length = 0; //esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]=new Option(TXT_UTM_SELECT,"utm");
			form.sistCoordDesti.options[1]=new Option(TXT_GEO_SELECT, "geo");
			form.sistCoordDesti.options[2]=new Option(TXT_GC_SELECT,"gc");
		} else if (sistCoordIn == "utm") {
			// sistRefI == sistRefO
			//esborrar i crear sist coord desti
			document.getElementById('sistCoordDesti').length = 0; //esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]=new Option(TXT_UTM_SELECT,"utm");
			form.sistCoordDesti.options[1]=new Option(TXT_GEODEC_SELECT,"geoDec");
			form.sistCoordDesti.options[2]=new Option(TXT_GEO_SELECT, "geo");
			form.sistCoordDesti.options[3]=new Option(TXT_GC_SELECT,"gc");
		} else if (sistCoordIn == "geo") {
			// sistRefI == sistRefO
			//esborrar i crear sist coord desti
			document.getElementById('sistCoordDesti').length = 0; //esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]=new Option(TXT_UTM_SELECT,"utm");
			form.sistCoordDesti.options[1]=new Option(TXT_GEODEC_SELECT, "geoDec");
			form.sistCoordDesti.options[2]=new Option(TXT_GC_SELECT,"gc");
		}	
		
		if (document.getElementById('sistRefDesti').length == 1) {
			//esborrar i crear sist ref desti
			document.getElementById('sistRefDesti').length = 0; //esborrar totes les opcions sist ref desti
			form.sistRefDesti.options[0]=new Option("ED50", "ED50");
			form.sistRefDesti.options[1]=new Option("ETRS89", "ETRS89"); 
		}
		
		//desactivar altures origen i desti
		desactivarAltura('alturaOrig', true);
		desactivarAltura('alturaDesti', true);
	}
	//display del tooltip amb sist coord utm
	displayTooltip('resultTooltip', 'utm');
	//activar conv meridians. primera opcion de coordenades desti es utm
	document.getElementById('convMeridiansDiv').style.visibility='visible';
}


//onchange sist ref desti
function selectSistRef() {
	var form = document.forms['calcForm'];
	var sistRefI = form.sistRefOrig.options[form.sistRefOrig.selectedIndex].value;
	var sistRefO = form.sistRefDesti.options[form.sistRefDesti.selectedIndex].value;
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;
	
	if (sistRefI == sistRefO) { //comparar si transformar mateix sist. ref.
		//si mateix sist. ref i coord geo --> utm i gc
		if (sistCoordIn == "geoDec") {
			document.getElementById('sistCoordDesti').length =0;//esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]= new Option(TXT_UTM_SELECT, "utm");
			form.sistCoordDesti.options[1]=new Option(TXT_GEO_SELECT, "geo");
			form.sistCoordDesti.options[2]= new Option(TXT_GC_SELECT, "gc");
		} else if (sistCoordIn == "geo") {
			document.getElementById('sistCoordDesti').length =0;//esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]= new Option(TXT_UTM_SELECT, "utm");
			form.sistCoordDesti.options[1]= new Option(TXT_GEODEC_SELECT,"geoDec");
			form.sistCoordDesti.options[2]= new Option(TXT_GC_SELECT, "gc");
		} else if (sistCoordIn == "gc") {
			document.getElementById('sistCoordDesti').length =0;//esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]= new Option(TXT_UTM_SELECT, "utm");
			form.sistCoordDesti.options[1]= new Option(TXT_GEODEC_SELECT,"geoDec");
			form.sistCoordDesti.options[2]=new Option(TXT_GEO_SELECT, "geo");
		} else if (sistCoordIn == "utm") {
			document.getElementById('sistCoordDesti').length =0;//esborrar totes les opcions sist coord desti
			form.sistCoordDesti.options[0]= new Option(TXT_UTM_SELECT, "utm");
			form.sistCoordDesti.options[1]= new Option(TXT_GEODEC_SELECT,"geoDec");
			form.sistCoordDesti.options[2]=new Option(TXT_GEO_SELECT, "geo");
			form.sistCoordDesti.options[3]= new Option(TXT_GC_SELECT, "gc");
		}
	} else {
		//sist ref diferent
		//(sistCoordIn == "utm" || sistCoordIn == "geoDec" || sistCoordIn == "geo")  
		document.getElementById('sistCoordDesti').length =0;//esborrar totes les opcions sist coord desti
		form.sistCoordDesti.options[0]= new Option(TXT_UTM_SELECT, "utm");
		form.sistCoordDesti.options[1]= new Option(TXT_GEODEC_SELECT,"geoDec");
		form.sistCoordDesti.options[2]=new Option(TXT_GEO_SELECT, "geo");
	}
	
	//activar conv meridians. primera opcion de coordenades desti es utm
	document.getElementById('convMeridiansDiv').style.visibility='visible';
	displayTooltip('resultTooltip', 'utm');
}


//onChange sist coord desti
function selectAlturesGc() {
	var form = document.forms['calcForm'];
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;
	var sistCoordOut = form.sistCoordDesti.options[form.sistCoordDesti.selectedIndex].value;
		
	if (sistCoordOut == "gc") {
		desactivarAltura('alturaDesti', true);
		//altures orig activat
		desactivarAltura('alturaOrig', false);
		
		document.getElementById('convMeridiansDiv').style.visibility='hidden';
			
	} else if (sistCoordOut =="geoDec" || sistCoordOut =="geo" || sistCoordOut =="utm") {
		//altures orig desactivat
		desactivarAltura('alturaOrig', true);
		
		if (sistCoordIn != "gc")
			desactivarAltura('alturaDesti', true);
		else
			desactivarAltura('alturaDesti', false);
		
		if (sistCoordOut == "utm") 
			document.getElementById('convMeridiansDiv').style.visibility='visible';
		else 
			document.getElementById('convMeridiansDiv').style.visibility='hidden';
	}
	displayTooltip('resultTooltip', sistCoordOut); //display del tooltip amb sist coord 
}

//si canvia sist ref origen, init formulari
function initForm() {
	var form = document.forms['calcForm'];
	var sistRefI = form.sistRefOrig.options[form.sistRefOrig.selectedIndex].value;
	var sistRefO = form.sistRefDesti.options[form.sistRefDesti.selectedIndex].value;
	var sistCoordIn = form.sistCoordOrig.options[form.sistCoordOrig.selectedIndex].value;

	//esborrar i crear sist coord origen
	document.getElementById('sistCoordOrig').length = 0; //esborrar totes les opcions sist coord origen
	form.sistCoordOrig.options[0]=new Option(TXT_UTM_SELECT,"utm");
	form.sistCoordOrig.options[1]=new Option(TXT_GEODEC_SELECT,"geoDec");
	form.sistCoordOrig.options[2]=new Option(TXT_GEO_SELECT, "geo");
	form.sistCoordOrig.options[3]=new Option(TXT_GC_SELECT,"gc");

	displayTooltip('sourceTooltip', "utm"); //display del tooltip amb sist coord
	
	//esborrar i crear sist coord desti
	document.getElementById('sistCoordDesti').length = 0; //esborrar totes les opcions sist coord desti
	form.sistCoordDesti.options[0]=new Option(TXT_UTM_SELECT,"utm");
	form.sistCoordDesti.options[1]=new Option(TXT_GEODEC_SELECT,"geoDec");
	form.sistCoordDesti.options[2]=new Option(TXT_GEO_SELECT, "geo");
	
	if (sistRefI == "ED50") {
		form.sistCoordDesti.options[3]=new Option(TXT_GC_SELECT,"gc");
	} 
	
	if (document.getElementById('sistRefDesti').length == 1) {
		//esborrar i crear sist ref desti
		document.getElementById('sistRefDesti').length = 0; //esborrar totes les opcions sist ref desti
		form.sistRefDesti.options[0]=new Option("ED50", "ED50");
		form.sistRefDesti.options[1]=new Option("ETRS89", "ETRS89"); 
	}
	
	//desactivar altures origen i desti
	desactivarAltura('alturaOrig', true);
	desactivarAltura('alturaDesti', true);
		
	//visible convergencia meridians
	document.getElementById('convMeridiansDiv').style.visibility='visible';

	displayTooltip('resultTooltip', 'utm');; //display del tooltip amb sist coord utm
	
}
function resetForm() {
	var form = document.forms['calcForm'];
	form.result.value = "";
	form.source.value = "";
	initForm();
}

function initTooltips() {
	displayTooltip('sourceTooltip', "utm"); //display del tooltip amb sist coord
	displayTooltip('resultTooltip', "geoDec"); //display del tooltip amb sist coord
}

