/* ------------------------------------------------------------------
Project:        Flightmap
File:		flightmap.js
Abstract:	main file; application loading; type selector and marker-list
Version:	1.0
Author:		Pascal Dreer / Joze Senegacnik

------------------------------------------------------------------ */


var gXml;
var gMap;
var gMPDisplayList; 

var gConfigShowMetar = true;
var gConfigShowPublicMarker = true;
var gConfigShowCH1903 = false;
var gConfigShowAirspace = true;


function load() 
{	
	resizeApp();
	if (GBrowserIsCompatible()) {
		gMap = new GMap2(document.getElementById("map"));
		gMap.addControl(new GLargeMapControl());
		gMap.addControl(new GMapTypeControl());
                gMap.addControl(new GScaleControl());
		gMap.addMapType(G_PHYSICAL_MAP);
		gMap.addMapType(G_SATELLITE_3D_MAP);
		gMap.addControl(new GOverviewMapControl());
		gMap.addControl(new GScaleControl());
                gMap.enableScrollWheelZoom();
                gMap.enableContinuousZoom();


                //var map_bounds = new GLatLngBounds(new GLatLng(45.313529, 13.244019), new GLatLng(46.927759, 16.638794));
                //gMap.setZoom(gMap.getBoundsZoomLevel(map_bounds));
                //var zoom_level = gMap.getBoundsZoomLevel(map_bounds);
                //alert( zoom_level );
                //gMap.setCenter(map_bounds.getCenter(), zoom_level);
                gMap.setCenter(new GLatLng( 46.15, 15.0 ), 8 );  //GEOSS 14° 48' 55, 46° 07' 11,8
		 
		gMap.setMapType(G_PHYSICAL_MAP);
//		gMap.setMapType(G_SATELLITE_3D_MAP);
		 
		initUserIcon();
		
                
		loadDefaultMappoints();

		for (var j = 1; j < 10; j++) {
			gTypeSelector[j] = false;
		}
		
		gTypeSelector[1] = true;
		document.getElementById('sel1').checked = true;
		gTypeSelector[2] = true;
		document.getElementById('sel2').checked = true;
		gTypeSelector[3] = true;
		document.getElementById('sel3').checked = true;
		
		document.getElementById('sel4').checked = false;
		document.getElementById('sel5').checked = false;
		document.getElementById('sel6').checked = false;
		document.getElementById('sel7').checked = false;
		document.getElementById('sel8').checked = false;
		document.getElementById('sel9').checked = false;
		document.getElementById('sel10').checked = false;
		
	}
	else {
		alert("Not browser compatible.");
	}
}



function loadDefaultMappoints()
{
      try {
	document.getElementById("list").innerText = "";

        var max_id = 0;
	
	GDownloadUrl("data.xml",function(data, responseCode) {
		gXml = GXml.parse(data);
		var markers = gXml.documentElement.getElementsByTagName("marker");
                max_id = markers.length
		for (var i = 0; i < markers.length; i++) {
//                  alert('icon'+i+'='+markers[i].getAttribute("icon"));
			var mp = new Mappoint(markers[i].getAttribute("id"),
                                              markers[i].getAttribute("code"),
                                              markers[i].getAttribute("lat"),
                                              markers[i].getAttribute("lng"),
                                              markers[i].getAttribute("name"),
					      markers[i].getAttribute("area"),
                                              markers[i].getAttribute("desc"),
                                              markers[i].getAttribute("type"),
                                              markers[i].getAttribute("elev"),
                                              markers[i].getAttribute("urlRef"),
					      markers[i].getAttribute("urlData"),
                                              markers[i].getAttribute("country"),
                                              markers[i].getAttribute("icon"));
			gMarkers[i] = createMarker(mp,i,false);
			gMap.addOverlay(gMarkers[i]);
									
			gMappoints.push(mp);
		}


		initAirspace();
//                alert('After initAirspace');
		loadMPList();
//                alert('After loadMPList');
//		displayMPList();
//                alert('After displayMPList');
		sortListByType();
//                alert('After sortListByType');
		resizeApp();
//                alert('After resizeApp');
		initRouting();
//                alert('After initRouting');
		initUser();
//                alert('After initUser');
		initPrefs();
//                alert('After initPrefs');
		showInfoDisplay();
//                alert('After showInfoDisplay');
		
		
		if (gConfigShowMetar) {
			startMetarInterval();
//                        alert('After startMetarInterval');
                }
                loadWXARSO();
//                alert('After loadWXARSO()');
	});

      } catch( e ) {
         alert("An exception occurred in loadDefaultMappoints. Error name: " + e.name + ". Error message: " + e.message);
      }
}

function loadWXARSO()
{
       /* new code */
//alert('Load wx');

       // first delete all
//        alert( 'gMappoints#=' + gMappoints.length + '  gMarkers#='+gMarkers.length);

       var del=0;

 	for (var i = 0; i < gMPDisplayList.length; i++) {
		if ( gMPDisplayList[i] && gMPDisplayList[i].type == "5" ) {
                        delete gMPDisplayList[i];
			gMPDisplayList[i] = null;
			//removeFromMPList(gMPDisplayList[i].mpid);
			del++;
		}
	}

        del = 0;

       // delete from gMappoints

	for (var i = 0; i < gMappoints.length; i++) {
		if (gMappoints[i] && gMappoints[i].type == 5 ) {
			gMap.removeOverlay(gMarkers[i]);
//                   	gMappoints[i] = null;
//                   	gMarkers[i] = null;
                   	delete gMappoints[i];
                   	delete gMarkers[i];
			del++;
                }
        }
//        alert( 'Deleted '+ del );


/*
	if (gRt) {
		gRt.remove(gRt.find(num));
		gRt.redraw();
		displayRouteInfo(gRt.getDistance(),gRt.getDuration(),0);
		updateRouteWindow();
	}
	
	
	if (gUID > 0) {
		waypointDelete(gMappoints[num].id,gUID);
	}
	
*/
	gMap.closeInfoWindow();
	displayMPList();




        var max_id = gMappoints.length;

//	document.getElementById("list").innerText = "";
	
	GDownloadUrl("/flightmap/xmlLocal."+redirector+"?feedURL=http%3A//meteo.arso.gov.si/uploads/probase/www/observ/surface/text/sl/observation_si_latest.xml", function(data1, responseCode) {
//	GDownloadUrl("/flightmap/xmlLocal.asp?feedURL=http%3A//meteo.arso.gov.si/uploads/probase/www/observ/surface/text/sl/observation_si_latest.xml", function(data1, responseCode) {
	gXml = GXml.parse(data1);
	var markers = gXml.documentElement.getElementsByTagName("metData");
        if ( markers.length == 0 ) {
//            alert ('No weather loaded!');
        }
        var mrk = markers[0];
//        alert( markers.length );

		for (var i = 0 ; i < markers.length; i++) {
                   mrk = markers[i];
//                   alert(i + ' '+ markers.length + '   ' + mrk.getElementsByTagName("domain_meteosiId")[0].firstChild.nodeValue + ' ' + mrk.getElementsByTagName("domain_lat")[0].firstChild.nodeValue + ' ' + mrk.getElementsByTagName("domain_lon")[0].firstChild.nodeValue);

                        // get the weather attributes - not all are always present

                        var name = mrk.getElementsByTagName("domain_longTitle")[0].firstChild.nodeValue;
                        var lat  = mrk.getElementsByTagName("domain_lat")[0].firstChild.nodeValue;
                        var lon  = mrk.getElementsByTagName("domain_lon")[0].firstChild.nodeValue;



                        // weather icon
                        try {
			   var m_ic =  mrk.getElementsByTagName("nn_icon-wwsyn_icon")[0].firstChild.nodeValue;
                           var m_icon_weather = "http://meteo.arso.gov.si/uploads/meteo/style/img/weather/" + m_ic + ".png"
                        } catch(e) {
			   var m_icon_weather = "images/marker-cat5.png";
                           var m_ic = "";
                        }

                        // wind icon
                        try {
			   var m_icon_wind =  mrk.getElementsByTagName("dd_icon")[0].firstChild.nodeValue;
                        } catch(e) {
			   var m_icon_wind = "";
                        }

                        //N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW
                       
                        m_wind = 0;

			switch (m_icon_wind) {
				case "N":    var m_wind = 360;
					     break;
				case "NNE":  var m_wind = 020;
					     break;
				case "NE":   var m_wind = 045;
					     break;
				case "ENE":  var m_wind = 070;
					     break;
				case "E":    var m_wind = 090;
					     break;
				case "ESE":  var m_wind = 110;
					     break;
				case "SE":   var m_wind = 135;
					     break;
				case "SSE":  var m_wind = 160;
					     break;
				case "S":    var m_wind = 180;
					     break;
				case "SSW":  var m_wind = 200;
					     break;
				case "SW":   var m_wind = 225;
					     break;
				case "WSW":  var m_wind = 250;
					     break;
				case "W":    var m_wind = 270;
					     break;
				case "WNW":  var m_wind = 290;
					     break;
				case "NW":   var m_wind = 315;
					     break;
				case "NNW":  var m_wind = 340;
					     break;
                                default:     m_wind = 0;
                         }



                        // timestamp "29.08.2008 6:29 UTC"
                        try {
			   var m_tsUpdated_UTC =  mrk.getElementsByTagName("tsUpdated_UTC")[0].firstChild.nodeValue;
                        } catch(e) {
			   var m_tsUpdated_UTC = "";
                        }

                        // wind speed
                        try {
			   var m_ff_val =  Math.round(parseFloat(mrk.getElementsByTagName("ff_val")[0].firstChild.nodeValue)/0.5148);
                        } catch(e) {
			   var m_ff_val = -100;
                        }

			//wind gusts speed 
                        try {
			   var m_ffmax_val =  Math.round(parseFloat(mrk.getElementsByTagName("ffmax_val")[0].firstChild.nodeValue)/0.5148);
                        } catch(e) {
			   var m_ffmax_val = 0;
                        }

			//temperature
                        try {
			   var m_t_degreesC =  parseInt(mrk.getElementsByTagName("t_degreesC")[0].firstChild.nodeValue);
                           //alert( m_t_degreesC);
                        } catch(e) {
			   var m_t_degreesC = 0;
                        }

			//dew point
                        try {
			   var m_td_degreesC =  parseInt(mrk.getElementsByTagName("td_degreesC")[0].firstChild.nodeValue);
                        } catch(e) {
			   var m_td_degreesC = -1000;
                        }

			//QNH
                        try {
			   var m_msl =  parseInt(mrk.getElementsByTagName("msl_mb")[0].firstChild.nodeValue);
//                           alert(m_msl);
                        } catch(e) {
//                           alert('QNH');
			   var m_msl = 0;
                        }

			//visibility
                        try {
			   var m_vis_value =  mrk.getElementsByTagName("vis_value")[0].firstChild.nodeValue;
                        } catch(e) {
			   var m_vis_value = "";
                        }

			//visibility_unit
                        try {
			   var m_vis_unit =  mrk.getElementsByTagName("vis_unit")[0].firstChild.nodeValue;
                        } catch(e) {
			   var m_vis_unit = "";
                        }

			//domain_altitude
                        try {
			   var m_domain_altitude = Math.round(mrk.getElementsByTagName("domain_altitude")[0].firstChild.nodeValue * 3.2808399);
                        } catch(e) {
			   var m_domain_altitude = "";
                        }

                        var wx = m_tsUpdated_UTC+ '<br>'+ m_ic + "<br>" + m_wind.numberFormat("000");


                        if (m_ff_val > 0) {
                            if (m_ffmax_val > 0) {
                               var tt = m_ff_val.numberFormat("00") + "G" + m_ffmax_val.numberFormat("00") + "KT" ;
                               wx += tt;
                            } else {
                               tt = m_ff_val.numberFormat("00") + "KT" ;
                               wx += tt;
                            }                             
                        } else {
                           wx += "00KT" ;
                        }

                        
                        if ( m_vis_value.length > 0 ) {
                           wx += " " + m_vis_value + m_vis_unit.toUpperCase();
                        }

                        if ( m_t_degreesC >= 0 ) {
                           wx += " " + m_t_degreesC.numberFormat("00");
                        } else {
                           wx += " M" + m_t_degreesC.numberFormat("00");
                        }

                        if ( m_td_degreesC >= 0 ) {
                           wx += "/" + m_td_degreesC.numberFormat("00");
                        } else {
                          if (m_td_degreesC > -1000) {
                             wx += "/M" + m_td_degreesC.numberFormat("00");
                          } else {
                             wx += "/--";
                          }
                        }

                        if ( m_msl > 0 ) {
                           wx += " Q" + m_msl.numberFormat("0000");
//                           wx += " Q" + m_msl;
                        } else {
                           wx += " Q----";  
                        }

//                        alert( name + ' ' + wx );

                        var j = i + max_id ;

//                        alert ( j + ' ' + mrk.getElementsByTagName("domain_longTitle")[0].firstChild.nodeValue + ' ' + wx );

			var mp = new Mappoint( j,"",lat,lon, name, 
                                                 "",wx,
                                                 5,
                                                 m_domain_altitude,m_domain_altitude,"","SI", m_icon_weather );
 
  
//                        alert ( i + ' ' + j + ' ' + name );




			gMarkers[j] = createMarker(mp,j,false);
			gMap.addOverlay(gMarkers[j]);	
			gMappoints.push(mp);
			addToMPList(j,5,name,"SI");


		}

//		loadMPList();
		displayMPList();
//                alert('End of WX load loaded='+i);
	});


/* end of new code */

}



function loadUserMappoints(data)
{
		gXml = GXml.parse(data);
		var markers = gXml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) {
		var mp = new Mappoint(markers[i].getAttribute("id"),
                                      markers[i].getAttribute("code"),
                                      markers[i].getAttribute("lat"),
                                      markers[i].getAttribute("lng"),
                                      markers[i].getAttribute("name"),
				      markers[i].getAttribute("area"),
                                      markers[i].getAttribute("desc"),
                                      markers[i].getAttribute("type"),
                                      markers[i].getAttribute("elev"),
                                      markers[i].getAttribute("urlRef"),
				      markers[i].getAttribute("urlData"),
                                      markers[i].getAttribute("country"));


			
			gMappoints.push(mp);
			gUserMarkerID++;
			var num = gMappoints.length-1;
			
			gMarkers.push(createMarker(mp,num,true));
			gMap.addOverlay(gMarkers[num]);
			addToMPList(num,10,markers[i].getAttribute("name"),markers[i].getAttribute("area"));
			
										
		}
		
		gTypeSelector[10] = true;
		document.getElementById('sel10').checked = true;	
		showUserControls();	
//		displayMPList();
		sortListByType();
}



	
	

function loadMPList()
{
	gMPDisplayList = new Array();
	for (var i = 0; i < gMappoints.length; i++) {
		var obj = new Object();
		obj.mpid = i;
		obj.id = gMappoints[i].id;
		obj.type = gMappoints[i].type;
		obj.name = gMappoints[i].name;
		obj.area = gMappoints[i].area;
		obj.toString = tos;	
		gMPDisplayList.push(obj);
		
	}
}



function addToMPList(num,type,name,area)
{
	var obj = new Object();
	obj.mpid = num;
	obj.id = 0;
	obj.type = type;
	obj.name = name;
	obj.area = area;
	obj.toString = tos;	
	gMPDisplayList.push(obj);
//	alert(gMPDisplayList.length);
}



function removeFromMPList(num)
{
	for (var i = 0; i < gMPDisplayList.length; i++) {
		if (gMPDisplayList[i].mpid == num) {
			delete gMPDisplayList[i];
//			gMPDisplayList.slice(i);
			gMPDisplayList[i] = null;
			break;
		}
	}
//	alert(gMPDisplayList.length);
}


function editInMPList(num,type,name,area)
{
	for (var i = 0; i < gMPDisplayList.length; i++) {
		if (gMPDisplayList[i].mpid == num) {
			gMPDisplayList[i].type = type;
			gMPDisplayList[i].name = name;
			gMPDisplayList[i].area = area;
			break;
		}
	}
}





function displayMPList()
{
//        alert( 'gMappoints#=' + gMappoints.length + '  gMarkers#='+gMarkers.length);

	var infoWindow = gMap.getInfoWindow();
	if (!infoWindow.isHidden())
		infoWindow.hide();

	document.getElementById("list").innerHTML = "";
	var txt = "<table border='0' width='212' cellpadding='0' cellspacing='1'>";

	for (var i = 0; i < gMPDisplayList.length; i++) {
		if (gMPDisplayList[i]) {
			if ((gTypeSelector[1] && gMPDisplayList[i].type == "1") || (gTypeSelector[2] && gMPDisplayList[i].type == "2") || 
				(gTypeSelector[3] && gMPDisplayList[i].type == "3") || (gTypeSelector[4] && gMPDisplayList[i].type == "4") ||
				(gTypeSelector[5] && gMPDisplayList[i].type == "5") || (gTypeSelector[6] && gMPDisplayList[i].type == "6") ||
				(gTypeSelector[7] && gMPDisplayList[i].type == "7") || (gTypeSelector[8] && gMPDisplayList[i].type == "8") || 
                                (gTypeSelector[9] && gMPDisplayList[i].type == "9") || (gTypeSelector[10] && gMPDisplayList[i].type == "10")) {

				gMarkers[gMPDisplayList[i].mpid].show();
				
				if (gConfigShowMetar && (gMPDisplayList[i].type == 1 || gMPDisplayList[i].type == 2 || gMPDisplayList[i].type == 10)) {
					if (gMappoints[gMPDisplayList[i].mpid].flightrule.length > 0)
						var flightruleImg = "<img src ='images/mm_" + gMappoints[gMPDisplayList[i].mpid].flightrule.toLowerCase() + ".png'> ";
					else
						var flightruleImg = "";
				}
				else 
					var flightruleImg = "";
				
				txt += "<tr><td align='left' width='22' valign='top'><img src='images/icon" + gMPDisplayList[i].type + ".png'></td><td width='140'><a href='javascript:myclick(" + 
						gMPDisplayList[i].mpid + ")'>" + gMPDisplayList[i].name + "</a> " + flightruleImg + "</td><td valign='top' width='30'>" + gMPDisplayList[i].area + "</td></tr>";
			}
			else {
				gMarkers[gMPDisplayList[i].mpid].hide();
			}
		}
	}
	txt += "</table>";
	document.getElementById("list").innerHTML = txt;

	
}





function resizeApp() 
{
		var offsetTop = 0;
		var offsetLeft = 0;
		var mapElem = document.getElementById("map");
		for (var elem = mapElem; elem; elem = elem.offsetParent) {
			offsetTop += elem.offsetTop;
			offsetLeft += elem.offsetLeft;
		}
		var height = getWindowHeight() - offsetTop - 10;
		var width = getWindowWidth() - offsetLeft - 10;
		if (height >= 0) {
			mapElem.style.height = height + "px";
			mapElem.style.width = width + "px";
			document.getElementById("list").style.height = (height - 220) + "px";

//			e("wpanel").style.height =e("panel").style.height = (height + 4) + "px";
	//		e("paneltoggle").style.paddingTop = (height/2) + "px";
		//	e("paneltoggle").style.paddingBottom = (height/2) + "px";
//			var sp = e("spsizer");
	//		sp.style.height = Math.max(0, height - sp.offsetTop) + "px";
		}
		
}

function getWindowHeight() 
{
	if (window.self && self.innerHeight) {
		return self.innerHeight;
	}
	if (document.documentElement && document.documentElement.clientHeight) {
		return document.documentElement.clientHeight;
	}
	return 0;
}


function getWindowWidth() 
{
	if (window.self && self.innerWidth) {
		return self.innerWidth;
	}
	if (document.documentElement && document.documentElement.clientWidth) {
		return document.documentElement.clientWidth;
	}
	return 0;
}



function cb_selector(type)
{
	gTypeSelector[type] = document.getElementById('sel' + type).checked;

	displayMPList();
	
	if (type == 10)
		if (gTypeSelector[10])
			showUserControls();	
		else
			hideUserControls();
}





function cb_selectorLabel(type)
{
	var element = document.getElementById('sel' + type);
	element.checked = !element.checked;
	cb_selector(type);
}



function changed_input(num)
{
	switch (parseInt(num,10)) {
		case 1: gTAS = document.getElementById("form_gs").value;	break;
		case 2: gFuelConsumption = document.getElementById("form_fuel").value;	break;
		case 3: gWind = document.getElementById("form_wind_dir").value;	break;
		case 4: gWindSpeed = document.getElementById("form_wind_speed").value;	break;
		
		default: ;				 
	}
}




function openWinDisclaimer()
{
	var width = 400;
	var height = 450;
	
	var winLeft = (getWindowWidth() / 2) - (width / 2);
	
	simpleWindow = window.open("disclaimer.html","","width=" + width + ",height=" + height + ",left=" + winLeft + ",top=70,scrollbars=yes");
	simpleWindow.focus();
}


function openWinHelp()
{
	var width = 500;
	var height = 500;
	
	var winLeft = (getWindowWidth() / 2) - (width / 2);
	
	simpleWindow = window.open("help.html","","width=" + width + ",height=" + height + ",left=" + winLeft + ",top=70,scrollbars=yes");
	simpleWindow.focus();
}

 
 
 
function openSimpleWin(filename,width,height)
{	
	var winLeft = (getWindowWidth() / 2) - (width / 2);
	
	simpleWindow = window.open(filename,"","width=" + width + ",height=" + height + ",left=" + winLeft + ",top=70,scrollbars=yes");
	simpleWindow.focus();
}



function showInfoDisplay()
{
	var today = new Date();
	var todayStr = today.getFullYear() + (((today.getMonth()+1) < 10) ? "0" + (today.getMonth()+1) : (today.getMonth()+1)) + ((today.getDate() < 10) ? "0" + today.getDate() : today.getDate());
	today.setTime(today.getTime() + (24 * 60 * 60 * 1000));
	var tomorrowStr = today.getFullYear() + (((today.getMonth()+1) < 10) ? "0" + (today.getMonth()+1) : (today.getMonth()+1)) + ((today.getDate() < 10) ? "0" + today.getDate() : today.getDate());

//	var kosifToday = "http://www.skyguide.ch/de/AIMServices/AicKosifVfrBulletin/_Kosif_Karten/KOSIF_Karte_" + todayStr + ".pdf";
//	var kosifTomorrow = "http://www.skyguide.ch/de/AIMServices/AicKosifVfrBulletin/_Kosif_Karten/KOSIF_Karte_" + tomorrowStr + ".pdf";
	var kosifToday = "http://www.arso.gov.si/vreme/napovedi%20in%20podatki/gafor_slika.png";
	var kosifTomorrow = "http://www.arso.gov.si/vreme/napovedi%20in%20podatki/swc_slika.png";
        var publicationAIC = "http://www.sloveniacontrol.si/acrobat/aip/eaip/Operations/2008-06-09/html/eAIC/LJ-eAIC-2008-01-en-GB.html"
	document.getElementById("infoDisplayDiv").innerHTML = "<a href='" + kosifToday + "' target='_blank'>GAFOR Slovenia</a><br><a href='" + kosifTomorrow + "' target='_blank'>SWC Slovenia</a><br><a href='" + publicationAIC + "' target='_blank'>VFR AIC Slovenia</a>";
}



// -----------------------------------------------------------
// Handle Sorting
// -----------------------------------------------------------


function sortListByType()
{
	order = "type";
	gMPDisplayList.sort(cmpnum);
	displayMPList();
}

function sortListByName()
{
	order = "name";
	gMPDisplayList.sort();
	displayMPList();
}

function sortListByArea()
{
	order = "area";
	gMPDisplayList.sort(cmpnum);
	displayMPList();
}


var order = "";
function tos() 
{
	switch (order) {
		case "name":
			return this.name;
		case "area":
			return this.area;
		case "type":
			return this.type;
	
		default:
			return this.type;
	}
}


function cmpnum(val1,val2) 
{
        //alert('cpnum '+ val1 + ' ' + val2);
	switch (order) {
		case "type":  try {

			if (val1.type == val2.type) {
                                if (val1.name == "")
				   return -1;
			        if (val2.name == "")
				   return 1;
				var ch0 = val1.name.charCodeAt(0) - val2.name.charCodeAt(0);
				if (ch0 != 0) {
				     return ch0;
                                } else {
                                       if (val1.name.length > 1 ) {
					   return val1.name.charCodeAt(1) - val2.name.charCodeAt(0);
                                       } else {
                                         return ch0;
                                       }
                                }
				
			}
			return val1.type - val2.type;
                        } catch (e) {
                          
                          return 0;
                        }
                        break;
		
		case "area": try { 
			if (val1.area == "")
				return -1;
			if (val2.area == "")
				return 1;
			
			
			if (val1.area == val2.area) {
				var ch0 = val1.name.charCodeAt(0) - val2.name.charCodeAt(0);
				if (ch0 != 0)
					return ch0;
				else
					return val1.name.charCodeAt(1) - val2.name.charCodeAt(1);
				
			}
			var ch0 = val1.area.charCodeAt(0) - val2.area.charCodeAt(0);
			if (ch0 != 0)
				return ch0;
			else
				return val1.area.charCodeAt(1) - val2.area.charCodeAt(1);
                        } catch (e) {
                          alert( 'cpnum area');
                          return 0;
                        }
			
			break;
		default:
			return 0;
	}
}


// *****************************************************************************************************
// MISC
// *****************************************************************************************************






function randomizeURL(url) 
{ 
        return url + ((url.indexOf('?') != -1) ? '&rnd=' : '?rnd=') + Math.floor(Math.random() * 99999); 
} 




function convertFtToM(ft)
{
	return Math.round(parseInt(ft,10) * 0.3048);
}


function roundNumber(num,dig)
{
	var n = Math.pow(10,dig);
	var m = Math.round(num * n) / n;
	return m;
}



function wgsLatToSwiss(lng,lat)
{
	
	var ea = (lat - 7.43863) / 57.2957795;
	var na = (lng - 46.95108) / 57.2957795;
	
	return roundNumber(600 + 1841.627 * ea + 2520.1147 * Math.sin(ea) - 4654.4 * ea * na,3);
}


function wgsLngToSwiss(lng,lat)
{
	var ea = (lat - 7.43863) / 57.2957795;
	var na = (lng - 46.95108) / 57.2957795;

	
	
	return roundNumber(200 + 6369.76 * Math.sin(na) + 1591.87 * ea * ea * (1-na / 0.91) + 23.9 * na * na,3);
	
}


function swissToWgsLat(x,y)
{
	var xb = x - 600.000;
	var yb = y - 200.000;
	
	
	return 46.95108 + yb / 111.18143955 - xb * xb / 1332636;
}


function swissToWgsLng(x,y)
{
	var xb = x - 600.000;
	var yb = y - 200.000;

	return 7.43863 + 57.29577951 * Math.atan(xb / 4360.68 + xb * yb / 26378264);
}


function convertBooleanToInt(val)
{
	if (val == "")
		return "";
		
	if (val)
		return 1;
	else 
		return 0;
}


function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}
