﻿// Copyright(c) 2008-2009 IT One, Ltd, Slovakia
// Do not use, change or distribute.

var permaLinkLat;
var permaLinkLng;
var permaLinkCat = -1;
var permaLinkObj = -1;

function mainLoad()
{
	//set graphics elements (IE hack)
	document.getElementById("leftPanel").style.filter = "alpha(opacity=85)";
	document.getElementById("tools").style.filter = "alpha(opacity=85)";
	document.getElementById("info").style.filter = "alpha(opacity=85)";
	document.getElementById("Aggreg").style.filter = "alpha(opacity=85)";
	//document.getElementById("objectInfo").style.filter = "alpha(opacity=85)";
	document.getElementById("searchText").style.background = "#FFFFCD";
	document.getElementById("locID17").style.background = "#FFFFCD";
	document.getElementById("searchText").style.fontSize = "10px";
	document.getElementById("searchMap").style.fontSize = "10px";
	document.getElementById("objLink").style.fontSize = "12px";
	document.getElementById("addCatSel").style.fontSize = "12px";
	
	centerElement(document.getElementById("filters"));
	centerElement(document.getElementById("Register"));
	centerElement(document.getElementById("SignIn"));
	centerElement(document.getElementById("HelpFrm"));
	centerElement(document.getElementById("strtParent"));
	centerElement(document.getElementById("ChartFrm"));
	centerElement(document.getElementById("invite"));
	centerElement(document.getElementById("Welcome"));
	
	document.onmousemove = refreshMouseCoords;
	
	//determine logo type day/night
	currDate = new Date();
	var img = document.getElementById("logo");
	if (currDate.getHours() >= 20 || currDate.getHours() < 6){
		img.setAttribute("src", "img/logo_night.jpg");
	}
	else {
		img.setAttribute("src", "img/logo.jpg");
	}
	
	window.onresize = handleOnResize;
	handleOnResize(); //handle the first one

	setInterval(confirmConnectionAlive, 5000);
	
	handlePermaLink();
	
	restoreLayers();
	
	//get unit types for money
	CleverGlobeService.GetUnitsForType("", "money", function(units){
		var combo = document.getElementById("CrcySel");
		var ui;
		for (ui = 1; ui < units.length; ui++){
			var newOption = document.createElement("option");
			newOption.text = units[ui];
			newOption.value = units[ui];
			combo.options.add(newOption);
		}
    });

    initJSONObjects();
    InitJSONPropertyMappings();
}

var mouseX = 0, mouseY = 0;

function refreshMouseCoords(e){
	if (e){
		mouseX = (e.pageX < 0) ? 0 : e.pageX;
		mouseY = (e.pageY < 0) ? 0 : e.pageY;	
	}
}

function RegisterFormReset() {
    var ifr = document.getElementById("regIfr");
    if (ifr != null) {
        ifr.setAttribute("src", "Register.aspx?lan=" + culture);
    }
  }

function handleInitLocaleDone(){
	initLayers();
	initStats();
	initPersonalization();
	//initAggregation();
	initContacts();
		
	document.getElementById("searchText").value = getLocaleString("locSearch");
	
	//load desired pages with culture identifier
	RegisterFormReset();
	
/*	ifr = document.getElementById("SignIfr");
	if (ifr != null){
		ifr.setAttribute("src", "SignIn.aspx?lan=" + culture);
	}*/
	var wlc = document.getElementById("Ifrwlc");
	if (wlc != null){
		wlc.setAttribute("src", "Welcome.aspx?lan=" + culture);
    }

    var hlp = document.getElementById("IfrHlp");
    if (hlp != null) {
        hlp.setAttribute("src", "Help.aspx?lan=" + culture);
    }
    
    //set info and update default texts
    document.getElementById("infoCont").innerHTML = getLocaleString("locNoObjSel"); 
    document.getElementById("objInfoCon").innerHTML = getLocaleString("locCannotUpdObj");
  }

function handlePermaLink(){
//handle permalink request
	var params = document.location.search.substring(1)
	var splitted = params.split("&");
	if (splitted.length == 4){
		for (i = 0; i < splitted.length; i++){
			var nameAndVal = splitted[i].split("=");
			if (nameAndVal.length == 2){
				if (nameAndVal[0].startsWith("lng")){
					permaLinkLng = nameAndVal[1];
				}
				else if (nameAndVal[0].startsWith("lat")){
					permaLinkLat = nameAndVal[1];
				}
				else if (nameAndVal[0].startsWith("cat")){
					permaLinkCat = nameAndVal[1];
				}
				else if (nameAndVal[0].startsWith("obj")){
					permaLinkObj = nameAndVal[1];
				}
			}
			else {
				return false;
			}
		}
	}
	else {
		return false;
	}
	
	return true;
}

function TryGetLocaleFromRequest(){
	var params = document.location.search.substring(1);
	var splitted = params.split("&");
	for (i = 0; i < splitted.length; i++){
		var nameAndVal = splitted[i].split("=");
		if (nameAndVal.length == 2){
			if (nameAndVal[0] == "lan"){
				localeFromRequest = nameAndVal[1];
			}
		}
	}	
}

function mainUnload(){
	google.maps.Unload();
	CleverGlobeService.DestroySession(function(){});
}

function confirmConnectionAlive(){
	CleverGlobeService.ConfirmConnectionAlive(function(res){
		var div = document.getElementById("connTOut");
		div.style.visibility = "hidden";
	}, 
	function(){
		var div = document.getElementById("connTOut");
		div.style.visibility = "visible";
	});
}

//layers
var nestLevel = 0;
var rootCategory;
var layers = new Array();
var iniLayers = new Array();
var jsonLayers;

function findJSONCat(id) {
    for (i = 0; i < jsonLayers.length; i++) {
        if (jsonLayers[i].id == id) {
            return jsonLayers[i];
        }
    }
    return null;
}

function getLayersLinArray(){
	return layers;
}

function getLayersChilds(category, array){
	var i;
	for (i = 0; i < array.length; i+=6){
		if (array[i+1] == category.id){
			childCat = new Object();
			childCat.id = array[i];
			childCat.name = array[i+2];
			childCat.icon = array[i + 3];
			childCat.JSONQuery = array[i + 4];
			childCat.markerCallback = array[i + 5];
			childCat.checked = false;
			childCat.childs = new Array();
			childCat.markers = new Array();
			category.childs.push(childCat);
			layers.push(childCat);
		}
	}
	
	for (i = 0; i < category.childs.length; i++){
		getLayersChilds(category.childs[i], array);
	}
}

function writeLayer(table, category){
	var i;
	var row = table.insertRow(-1);
	row.style.fontSize = "8px";
	
	cell = row.insertCell(-1);	
	//icon
	for (i = 0; i < nestLevel; i++)
		cell.innerHTML += "-";
	cell.innerHTML += "<img src='" + category.icon + "' style='width:15px; height:15px'/>";
	cell.style.width = "20px";
	
	//checkbox
	cell = row.insertCell(-1);
	if (category.childs.length == 0)
		cell.innerHTML += "<input id='catCB" + category.id.toString() + "' type='checkbox' class='layerCaption' onclick='layerChanged(this," + category.id.toString() + ")'/>";
	cell.style.width = "20px";
	
	category.checkboxElem = document.getElementById("catCB" + category.id.toString());
	//name
	cell = row.insertCell(-1);
	cell.innerHTML += "<label style='font-size:10px'>" + category.name + "</label>";
	
	cell = row.insertCell(-1);
	if (category.childs.length == 0){
	//properties combo box
		cell.innerHTML += "<select onchange='handleCategoryPropChanged(this," + category.id.toString() + 
		")' style='font-size:11px; width:80px' id='catCmb" + category.id.toString() + "' size='1' />";
/*	
		CleverGlobeService.GetPropertiesForCategory(culture, category.id, "browsable", function(props){
			var i;
			var combo = document.getElementById("catCmb" + category.id.toString());

			for (i = 0; i < props.length; i+=3){
				var newOption = document.createElement("option");
				newOption.text = props[i];
				newOption.setAttribute("propID", props[i+1]);
				newOption.value = props[i+2];
				combo.options.add(newOption);
			}
			
			combo.disabled = true; //initially disabled
			
			//set layer if this is a permalink category
			if (permaLinkCat == category.id){
				var checkBox = document.getElementById("catCB" + permaLinkCat.toString());
				if (checkBox != null){
					checkBox.checked = true;
					layerChanged(checkBox, permaLinkCat);
				}
			}
			
			//set layer if it is contained in iniLayers
			var li;
			for (li = 0; li < iniLayers.length; li++){
				if (iniLayers[li] == category.id){
					var checkBox = document.getElementById("catCB" + iniLayers[li].toString());
					if (checkBox != null){
						checkBox.checked = true;
						layerChanged(checkBox, iniLayers[li]);
					}
				}
			}
		});*/

		var i, jsonCat = findJSONCat(category.id);
    	var combo = document.getElementById("catCmb" + category.id.toString());
    	if (jsonCat.properties != null) {
    	    for (i = 0; i < jsonCat.properties.length; i++) {
    	        if (jsonCat.properties[i].browsable == false)
    	            continue;
    	        var newOption = document.createElement("option");
    	        newOption.text = jsonCat.properties[i].name;
    	        newOption.setAttribute("propID", jsonCat.properties[i].id);
    	        newOption.value = jsonCat.properties[i].value;
    	        combo.options.add(newOption);
    	    }
    	}

    	combo.disabled = true; //initially disabled

    	//set layer if this is a permalink category
    	if (permaLinkCat == category.id) {
    	    var checkBox = document.getElementById("catCB" + permaLinkCat.toString());
    	    if (checkBox != null) {
    	        checkBox.checked = true;
    	        layerChanged(checkBox, permaLinkCat);
    	    }
    	}

    	//set layer if it is contained in iniLayers
    	var li;
    	for (li = 0; li < iniLayers.length; li++) {
    	    if (iniLayers[li] == category.id) {
    	        var checkBox = document.getElementById("catCB" + iniLayers[li].toString());
    	        if (checkBox != null) {
    	            checkBox.checked = true;
    	            layerChanged(checkBox, iniLayers[li]);
    	        }
    	    }
    	}

		
		//cell = row.insertCell(-1);
		//filter icon
		//cell.innerHTML += "<img src='img/cone.png' onclick='handleFilter(" + category.id.toString() + ")' style='cursor:pointer; width:15px; height:15px'/>";
	}
	
	//elem.innerHTML +=  "<br />";

	//add to Add categories (ignore JSON service categories)
	if (category.JSONQuery == "") {
	    var select = document.getElementById("addCatSel");
	    var opt = document.createElement("option");
	    opt.value = category.id;
	    for (i = 0; i < nestLevel; i++)
	        opt.text += " ";
	    opt.text += category.name;
	    if (category.childs.length != 0)
	        opt.disabled = "disabled";
	    select.options.add(opt);
	}
		
	nestLevel++;

	for (i = 0; i < category.childs.length; i++){
		writeLayer(table, category.childs[i]);
	}	
	
	nestLevel--;		 
}

function initLayers(){
	var layersDIV = document.getElementById("layers");
	var layersTab = document.getElementById("layersTab");
	layersTab.style.background = "#FFFFCD";

	var table = document.createElement("table");
	layersDIV.appendChild(table);

    //get props
	CleverGlobeService.GetCategoriesWithPropsJSON(culture, function(res) {
	    jsonLayers = JSON.parse(res);

	    CleverGlobeService.GetCategories(culture, function(categories) {
	        rootCategory = new Object();
	        rootCategory.id = -1;
	        rootCategory.childs = new Array();
	        rootCategory.name = "root";

	        getLayersChilds(rootCategory, categories);

	        var i;
	        for (i = 0; i < rootCategory.childs.length; i++)
	            writeLayer(table, rootCategory.childs[i]);

	        initFilters();
	        updateAggrLayers();
	        initCharts();

	    });
	});
	
	
}

function layerChanged(layerElem, layerID){
	var id = layerID;
	var state = layerElem.checked;
	
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var mapZoom = map.getZoom();		 
		
	var layer = getLayer(layerID);
	layer.checked = state;
	
	var combo = document.getElementById("catCmb" + layerID.toString());
	var property = combo.options[combo.selectedIndex].getAttribute("propID");
	
	addAggrMarkerOffset(layerID);
	
	var legendVisible = false;
	var minColor = Colors.ColorFromHex("#D9FF2C");
	var maxColor = Colors.ColorFromHex("#DC8276");

	if (state == true){
		//enable combo
		combo.disabled = false;

		textCenterMap.style.visibility = "visible";
		
		var filterString = getFilterStrings(layerID);

		if (mapZoom >= 10) { //single objects
		    if (layer.JSONQuery != "") {
		        GetObjectsFromJSONQuery(layer, bounds, property);
		    } else {
		        CleverGlobeService.GetObjects(0, culture, layerID, southWest.lng(), southWest.lat(), northEast.lng(), northEast.lat(), map.getZoom(), property,
				filterString,
				function(objects) {
				    if (objects != null) {
				        if (objects.length == 1) {
				            //zoom closer
				            showMessage(getLocaleString("_zoomCloser"), 4000);
				        }
				        else {
				            var i;

				            var cheapest = GetMinFromObjects(objects);
				            var worst = GetMaxFromObjects(objects);

				            for (i = 2; i < objects.length; i += 5) {
				                var gradSet = false;
				                var days = Number(objects[i + 4]);
				                var isOld = ageDaysCount == 0 ? false : (days > ageDaysCount || days == 0);

				                if (cheapest != null && worst != null && cheapest != worst) {
				                    if (isNaN(objects[i + 3]) == false) {
				                        var num = Number(objects[i + 3]);

				                        if (num == 0 || isOld) { //number is zero or property is old
				                            objects[i + 3] = getLocaleString("locUpdMarker");
				                            marker = createMarker(layerID, objects[i], Number(objects[i + 1]), Number(objects[i + 2]), layer.icon, objects[i + 3], "#aaFFCF");
				                        }
				                        else {
				                            var color = interpolateColor(minColor, maxColor, (num - cheapest) / (worst - cheapest));
				                            marker = createMarker(layerID, objects[i], Number(objects[i + 1]), Number(objects[i + 2]), layer.icon, objects[i + 3], color.HexString());
				                            legendVisible = true;
				                        }
				                        gradSet = true;
				                    }
				                }

				                if (gradSet == false) {
				                    if (objects[i + 3] == "0" || objects[i + 3] == "" || isOld)
				                        objects[i + 3] = getLocaleString("locUpdMarker");

				                    createMarker(layerID, objects[i], Number(objects[i + 1]), Number(objects[i + 2]), layer.icon, objects[i + 3], "#aaFFCF");
				                }

				                //handle permalink object ID if there is ID we want
				                if (permaLinkObj != -1 && objects[i] == permaLinkObj) {
				                    handleMarkerClick(objects[i], layerID);
				                    permaLinkObj = -1;
				                }
				            }
				        }
				    }

				    //show legend if needed
				    if (legendVisible)
				        showLegend(minColor, maxColor, getLocaleString("locBest"), getLocaleString("locWorst"));
				    else
				        hideLegend();

				    textCenterMap.style.visibility = "hidden";
				},

				function() {
				    //timeout
				    showMessage("locTimeout", 3000, "WRONG");
				    textCenterMap.style.visibility = "hidden";
				});
		    }
		}
		else if (mapZoom >= 4) { //countries
			CleverGlobeService.GetCountries(layerID, southWest.lng(), southWest.lat(), northEast.lng(), northEast.lat(), 
				property, "count",
			function(countries){
				if (countries != null){
					var i;
					for (i = 1; i < countries.length; i+=5){
						createAggregateMarker(layerID, countries[i], Number(countries[i+2]), Number(countries[i+3]), 
							layer.icon, /*countries[i+1] + "<br />" +*/ countries[i+4]);
					}
				}
				textCenterMap.style.visibility = "hidden";
			},

			function() {
			    //timeout
				showMessage("locTimeout", 3000, "WRONG");
			    textCenterMap.style.visibility = "hidden";
		    });
		}
		else { //country groups
			CleverGlobeService.GetCountryGroups(layerID, 0, southWest.lng(), southWest.lat(), northEast.lng(), northEast.lat(), 
				property, "count",
			function(groups){
				if (groups != null){
					var i;
					for (i = 1; i < groups.length; i+=5){
						createAggregateMarker(layerID, groups[i], Number(groups[i+2]), Number(groups[i+3]), 
							layer.icon, /*groups[i+1] + "<br />" + */groups[i+4]);
					}
				}
				textCenterMap.style.visibility = "hidden";
			},

			function() {
			    //timeout
			    showMessage("locTimeout", 3000, "WRONG");
			    textCenterMap.style.visibility = "hidden";
			});
		}
		
		cookieAddLayer(layerID);
	}
	else {
		//disable combo
		combo.disabled = true;
		
		if (layer != null){
			var i;
			for (i = 0; i <  layer.markers.length; i++){
				map.removeOverlay(layer.markers[i]);
			}
				
			layer.markers = [];
			layer.markers = new Array();
		}
		
		cookieRemoveLayer(layerID);
	}
}

function getLayer(layerID){
	var i;
	for (i = 0; i < layers.length; i++)
		if (layers[i].id == layerID)
			return layers[i];
			
	return null;
}

function handleCategoryPropChanged(combo, layerID){
	//clear category and reload with new properties
	var id = layerID;
	
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var mapZoom = map.getZoom();
	
	var layer = getLayer(layerID);
	if (layer.checked == false)
		return;
	else
		addAggrMarkerOffset(layerID);
	
	if (layer != null){
		var i;
		for (i = 0; i <  layer.markers.length; i++){
			map.removeOverlay(layer.markers[i]);
		}
			
		layer.markers = [];
		layer.markers = new Array();
	}

	textCenterMap.style.visibility = "visible";
	
	var filterString = getFilterStrings(layerID);
	
	var legendVisible = false;
	var minColor = Colors.ColorFromHex("#D9FF2C");
	var maxColor = Colors.ColorFromHex("#DC8276");

	if (mapZoom >= 10) { //single objcects
	    if (layer.JSONQuery != "") {
	        GetObjectsFromJSONQuery(layer, bounds, combo.options[combo.selectedIndex].getAttribute("propID"));
	    } else {
	        CleverGlobeService.GetObjects(0, culture, layerID, southWest.lng(), southWest.lat(), northEast.lng(), northEast.lat(), map.getZoom(),
			combo.options[combo.selectedIndex].getAttribute("propID"), filterString, function(objects) {
			    if (objects != null) {
			        if (objects.length == 1) {
			            showMessage(getLocaleString("_zoomCloser"), 4000);
			        }
			        else {
			            var i;
			            var cheapest = GetMinFromObjects(objects);
			            var worst = GetMaxFromObjects(objects);

			            for (i = 2; i < objects.length; i += 5) {
			                var days = Number(objects[i + 4]);
			                var isOld = ageDaysCount == 0 ? false : (days > ageDaysCount || days == 0);

			                if (cheapest != null && worst != null && cheapest != worst) {
			                    if (isNaN(objects[i + 3]) == false) {
			                        var num = Number(objects[i + 3]);

			                        if (num == 0 || isOld) {
			                            objects[i + 3] = getLocaleString("locUpdMarker");
			                            marker = createMarker(layerID, objects[i], Number(objects[i + 1]), Number(objects[i + 2]), layer.icon, objects[i + 3], "#aaFFCF");
			                        }
			                        else {
			                            var color = interpolateColor(minColor, maxColor, (num - cheapest) / (worst - cheapest));
			                            marker = createMarker(layerID, objects[i], Number(objects[i + 1]), Number(objects[i + 2]), layer.icon, objects[i + 3], color.HexString());
			                            legendVisible = true;
			                        }
			                        continue;
			                    }
			                }

			                if (objects[i + 3] == "0" || objects[i + 3] == "" || isOld)
			                    objects[i + 3] = getLocaleString("locUpdMarker");

			                createMarker(layerID, objects[i], Number(objects[i + 1]), Number(objects[i + 2]), layer.icon, objects[i + 3], "#aaFFCD");
			            }
			        }
			    }

			    //show legend if needed
			    if (legendVisible)
			        showLegend(minColor, maxColor, getLocaleString("locBest"), getLocaleString("locWorst"));
			    else
			        hideLegend();

			    textCenterMap.style.visibility = "hidden";
			},

		function() {
		    //timeout
		    showMessage("locTimeout", 3000, "WRONG");
		    textCenterMap.style.visibility = "hidden";
		});
	    }
	}
	else if (mapZoom >= 4){ //countries
		CleverGlobeService.GetCountries(layerID, southWest.lng(), southWest.lat(), northEast.lng(), northEast.lat(), 
			combo.options[combo.selectedIndex].getAttribute("propID"), "count", function(countries){
				if (countries != null){
					var i;
					for (i = 1; i < countries.length; i+=5){
						createAggregateMarker(layerID, countries[i], Number(countries[i+2]), Number(countries[i+3]), 
							layer.icon, /*countries[i+1] + "<br />" + */countries[i+4]);
					}
				}
			textCenterMap.style.visibility = "hidden";
		});
	}
	else { //country groups
		CleverGlobeService.GetCountryGroups(layerID, 0, southWest.lng(), southWest.lat(), northEast.lng(), northEast.lat(), 
			combo.options[combo.selectedIndex].getAttribute("propID"), "count", function(groups){
				if (groups != null){
					var i;
					for (i = 1; i < groups.length; i+=5){
						createAggregateMarker(layerID, groups[i], Number(groups[i+2]), Number(groups[i+3]), 
							layer.icon, /*groups[i+1] + "<br />" + */groups[i+4]);
					}
				}
			textCenterMap.style.visibility = "hidden";
        },

		function() {
		    //timeout
		    showMessage("locTimeout", 3000, "WRONG");
		    textCenterMap.style.visibility = "hidden";
		});
	}
}

var ageDaysCount = 0

function refreshCurrentAge() {
    var combo = document.getElementById("locAgeOp");
    if (combo != null)
        ageDaysCount = combo.options[combo.selectedIndex].value;
}

//stats
function initStats(){
	CleverGlobeService.GetTotalObjects(function(objCount){
			var statsElem = document.getElementById("stats");
			statsElem.innerHTML = objCount + " " + getLocaleString("ObjectsIn") + " ";
			 
			CleverGlobeService.GetTotalCategories(function(catCount){
				statsElem.innerHTML += catCount + " " + getLocaleString("Categories");
				
/*				CleverGlobeService.GetTotalUsers(function(sessionCount){
					statsElem.innerHTML += ", " + sessionCount + " " + getLocaleString("Users");
				});*/
			});
		});
}

//ADD panel
var addLayerID = -1;

function addCatChanged(select){
	addLayerID = select.options[select.selectedIndex].value;
	//load properties for this category
	var propPanel = document.getElementById("add2Panel");
	propPanel.innerHTML = "";

	var tbl = document.createElement("table");
	propPanel.appendChild(tbl);
	var row = tbl.insertRow(-1);
	row.style.height = "15px"

	var cell = row.insertCell(-1);
	cell.style.fontSize = "10px";
	cell.innerHTML += "<label>" + getLocaleString("locName") + ":</label>";
	
	var cell = row.insertCell(-1);
	cell.style.fontSize = "10px";
	cell.innerHTML += "<input type='text' style='font-size:10px; left:70px' />";
	
	CleverGlobeService.GetPropertiesForCategory(culture, addLayerID, null, function(props){
		for (i = 0; i < props.length; i+=3){
			var type = props[i+2];

			var row = tbl.insertRow(-1);
			row.style.height = "15px"
			
			//property name label			
			var cell = row.insertCell(-1);
			cell.style.fontSize = "10px";
			cell.style.width = "60px";
			cell.innerHTML += "<label>" + props[i] +  ":</label>";
			
			//property input
			cell = row.insertCell(-1);
			cell.style.fontSize = "10px";

			if (type.startsWith("enum")){
				var selID = "addCatSel" + i.toString();
				cell.innerHTML += "<select id='" + selID + "' style='font-size:10px;left:70px' />";
				
				CleverGlobeService.GetEnumValues(culture, selID, "0", type, function(enumVals){
					var selElem = document.getElementById(enumVals[0]);
					var ei = 2;
					for (ei = 2; ei < enumVals.length; ei++){
						var newOption = document.createElement("option");
						newOption.text = enumVals[ei];
						newOption.value = enumVals[ei];
						selElem.options.add(newOption);
					}
				});
			}
			else if (type == "image"){
				cell.innerHTML += "<input type='text' style='font-size:10px; left:70px' />";
				cell.innerHTML += "<input type='button' style='font-size:10px; left:180px' value='...' />";
			}
			else if (type == "string" || type == "int" || type == "email" || type == "url"){
				cell.innerHTML += "<input type='text' style='font-size:10px; left:20% zindex:7' />";
			}
			else if (type == "money" || type == "dimension" || type == "area"){
				cell.innerHTML += "<input type='text' style='font-size:10px;left:70px' />";
				cell.innerHTML += "<select id='UnitProp" + i.toString() + "' style='font-size:10px; left:180px' />";
				
				//get unit types
				CleverGlobeService.GetUnitsForType("UnitProp" + i.toString(), type, function(units){
					var combo = document.getElementById(units[0]);
					var ui;
					for (ui = 1; ui < units.length; ui++){
						var newOption = document.createElement("option");
						newOption.text = units[ui];
						newOption.value = units[ui];
						combo.options.add(newOption);
					}
				});
			}
		}
	});
}

var addingPlacemark = false;
var addingMarker = null;
var addingLatLng = null;

function handleAddToolTabActivated(){
	if (sessionID == "")
		return;
		
	if (addingMarker == null){
		var latLng = map.getCenter();
		addingMarker = createDraggableMarker(latLng.lat(), latLng.lng(), "addObj.gif");
		
		google.maps.Event.addListener(addingMarker, "dragend", function(position) {
			addingLatLng = position;
		});
	}
}

function handleAddToolTabDeactivated(){
	if (addingMarker != null){
		map.removeOverlay(addingMarker);
		addingMarker = null;
	}
}

function handleResetPlacemark(){
	if (addingMarker != null){
		var latLng = map.getCenter();
		addingMarker.setLatLng(latLng);	
	}
}

function handleAddObject(){
	if (addingLatLng == null)
		return;
		
	var propVals = new Array();
	
	var rows = document.getElementById("add2Panel").children[0].children[0];
	
	var i;
	var objName = rows.children[0].children[1].children[0].value;
	for (i = 1; i < rows.children.length; i++){
		var propElem = rows.children[i].children[1].children[0];
		var propVal;
		if (propElem.nodeName == "SELECT")
			propVal = propElem.selectedIndex.toString();
		else
			propVal = propElem.value;
		propVals.push(propVal);
	}	
	
	//start adding
	var addBtn1 = document.getElementById("addPlcBtn");
	var addBtn2 = document.getElementById("addObjBtn");
	addBtn1.disabled = true;
	addBtn2.disabled = true;
	
	//determine country where is the placemark
	geocoder.getLocations(addingLatLng, function(address){
		if(address.Status.code != 200) {
			//alert("reverse geocoder failed to find an address for " + latlng.toUrlValue());
		} else { 
			var result = address.Placemark[0];
			var countryCode = result.AddressDetails.Country.CountryNameCode;
			CleverGlobeService.AddObject(sessionID, addLayerID, objName, addingLatLng.lat(), addingLatLng.lng(), propVals, countryCode, function(res){
				if (res == true){
					//clear inputs
					for (i = 1; i < rows.children.length; i++){
						var propElem = rows.children[i].children[1].children[0];
						if (propElem.nodeName == "SELECT")
							propElem.selectedIndex = 0;
						else
							propElem.value = "";
					}
					
					showMessage(getLocaleString("locObjAdded"), 3000);	
			
					//refresh my objects
					getMyObjects();

				}
				else {
					showMessage(getLocaleString("locObjNotAdded"), 3000);	
				}
				addBtn1.disabled = false;
				addBtn2.disabled = false;

			}, function (){
				//timeout
				addBtn1.disabled = false;
				addBtn2.disabled = false;
				
				showMessage(getLocaleString("locTimeout"), 3000);	
			});
		}	
	});
}

function handleUpdateProperty(elem){
	var objID = selectedObj;
	var propID = elem.getAttribute("propID");
	var propVal = document.getElementById("propUpd" + propID).value;
	var orgPropValue = document.getElementById("orgPropValue" + propID).value;
	var propRealID = elem.getAttribute("propRealID");
	var unitElem = document.getElementById("UnitProp" + propID);
	var unitVal = null;
	if (unitElem != null){
		unitVal = unitElem.options[unitElem.selectedIndex].value;
    }
    var earnsPoints = Number(elem.getAttribute("earnsPoints")) != 0;
	
	if (propVal == "" && orgPropValue != ""){
		if (confirm(getLocaleString("locEmptyValue"), 2, 2) == false)
		{
		    document.getElementById("propUpd" + propID).value = orgPropValue;
			return;
		}
	}
	
	if (propVal.length > 1028)
		propVal.length = 1028;

    if (propVal != orgPropValue) {
        //check whether the maximum number of actions wasn't exceeded
        CleverGlobeService.CanUserDoTransaction(sessionID, 1, function(res) {
            if (res == true) {
                CleverGlobeService.UpdateProperty(sessionID, culture, objID, propRealID, propVal, unitVal, earnsPoints, function(res) {
                    //change icon to 'being updated'
                    elem.src = "img/loading.gif";
                    if (res == true) { //success
                        //change icon back
                        elem.src = "img/refresh.png";

                        showMessage(getLocaleString("_propUpdated"), 3000);
                        document.getElementById("orgPropValue" + propID).value = propVal; // 20-03-2009 Jano
                        // 20-03-2009 Jano / 1.4.09 robo opravene z null -> ""
                        if (sessionID != "") {
                            CleverGlobeService.GetUserPoints(sessionID, function(Points) {
                                document.getElementById("Points").innerHTML = Points;
                            });
                        }
                    }
                    else {
                        //change icon back
                        elem.src = "img/refresh.png";

                        showMessage(getLocaleString("_propNotUpdated"), 6000, "WRONG");
                    }
                });
            }
            else {
                showMessage(getLocaleString("_maxActionsReached"), 6000, "OK");
            }
        });
    }
}

var imagePath = null;

function handleUpdateImage(elem){
	var objID = selectedObj;
	var propID = elem.getAttribute("propID");
	var propRealID = elem.getAttribute("propRealID");;
	
	CleverGlobeService.UpdateImage(sessionID, culture, objID, imagePath, propRealID, function(res) {
		//change icon to 'being updated'
		elem.src = "img/loading.gif";
		if (res == true){ //success
			//change icon back
			elem.src = "img/refresh.png";
		}
	});
}

function handleSaveImage(){
	var inputFile = document.getElementById("InputFile");
	inputFile.click();
}

function handleSaveImagePath(){
//	var btn = document.getElementById("submit");
//	btn.click();
//	frm.submit();
	document.fileUpFrm.submit();
}

// filters

var filtersVisible = false;
var filterCatID = -1;
var filters = new Array();

function initFilters(){
	var i;
	for (i = 0; i < layers.length; i++){
		var filter = new Object();
		filter.catID = layers[i].id;
		filter.props = new Array();
		filters.push(filter);
	}
}

function handleFilter(catID){
	if (registerVisible || helpVisible || signInVisible || filtersVisible || streetViewVisible)
		return;
		
	filtersVisible = true;

	filterCatID = catID;

	var filtersElem = document.getElementById("filters");
	filtersElem.style.visibility = "visible";

	//clear all properties
	for (si = 1; si <= 3; si++){
		var sel = document.getElementById("FltProp" + si.toString());
		sel.options.length = 0;
	}

	var layer = getLayer(catID);
	var img = document.getElementById("fltImage");
	img.setAttribute("src", layer.icon);
    
    CleverGlobeService.GetPropertiesForCategory(culture, catID, "filterable", function (props){
		var i, si;
		for (i = 0; i < props.length; i+=3){
			for (si = 1; si <= 3; si++){
				var sel = document.getElementById("FltProp" + si.toString());
				var newOption = document.createElement("option");
				newOption.text = props[i];
				newOption.setAttribute("propID", props[i+1]);
				newOption.value = props[i+2];
				sel.options.add(newOption);
			}
		}
		
		for (si = 1; si <= 3; si++){
			//select default property if any
			for (i = 0; i < filters.length; i++){
				if (filters[i].catID == filterCatID){
					for (pi = 0; pi < filters[i].props.length; pi++){
						if (filters[i].props[pi].selID == si){
							//property
							var propID = filters[i].props[pi].propID;
							var fltProp = document.getElementById("FltProp" + filters[i].props[pi].selID.toString());
							for (oi = 0; oi < fltProp.options.length; oi++)
								if (fltProp.options[oi].getAttribute("PropID") == propID){
									fltProp.selectedIndex = oi;
									break;
								}
						}
					}
				}
			}

			//get default filter operations for first item
			getFilterOperations(si);
		}
    });
}

function getFilterOperations(selID){
	var type = document.getElementById("FltProp" + selID.toString()).value;
	var sel = document.getElementById("FltOper" + selID.toString());
	document.getElementById("FltVal" + selID.toString()).value = "";
	sel.options.length = 0;
	var newOption = document.createElement("option");
	newOption.text = "*";
	newOption.value = "All";
	sel.options.add(newOption);
	
    CleverGlobeService.GetFilterOperations(selID.toString(), type, function (opers){
		var i;
		for (i = 1; i < opers.length; i++){
			newOption = document.createElement("option");
			switch (opers[i]){
			 case "EqualsTo":
				newOption.text = "=";
				break;
			 case "NotEqualsTo":
				newOption.text = "<>";
				break;
			 case "LessThan":
				newOption.text = "<";
				break;
			 case "GreaterThan":
				newOption.text = ">";
				break;
			}
			newOption.value = opers[i];
			sel.options.add(newOption);
		}
		
		//update current status (according to saved filters)
		var pi, oi;
		for (i = 0; i < filters.length; i++){
			if (filters[i].catID == filterCatID){
				for (pi = 0; pi < filters[i].props.length; pi++){
					if (filters[i].props[pi].selID == Number(opers[0])){
						var value = filters[i].props[pi].propVal;
						document.getElementById("FltVal" + filters[i].props[pi].selID.toString()).value = value;
						//operation
						var oper = filters[i].props[pi].propOper;
						var fltOper = document.getElementById("FltOper" + filters[i].props[pi].selID.toString());
						for (oi = 0; oi < fltOper.options.length; oi++)
							if (fltOper.options[oi].value == oper){
								fltOper.selectedIndex = oi;
								break;
							}
					
						break;
					}
				}
				break;	
			}
		}
    });
}

function handleFilterOK(){
	//reset all filters for given category
	var i;
	for (i = 0; i < filters.length; i++){
		if (filters[i].catID == filterCatID){
			filters[i].props.length = 0;
			break;	
		}
	}
	
	//fill with new values
	for (si = 1; si <= 3; si++){
		var combo = document.getElementById("FltProp" + si.toString());
		var prop = combo.options[combo.selectedIndex].innerHTML;
		var propID = combo.options[combo.selectedIndex].getAttribute("propID");
		var oper = document.getElementById("FltOper" + si.toString()).value;
		var value = document.getElementById("FltVal" + si.toString()).value;
		
		if (oper != "All" && value != ""){ //ignore 'all' operation
			var propElem = new Object();
			propElem.propID = propID;
			propElem.propVal = value;
			propElem.propOper = oper;
			propElem.selID = si;
			filters[i].props.push(propElem);
		}
	}
	
	//refresh layer according to new filter
	var checkBox = document.getElementById("catCB" + filterCatID.toString());
	if (checkBox != null){
		checkBox.checked = false;
		layerChanged(checkBox, filterCatID);
		checkBox.checked = true;
		layerChanged(checkBox, filterCatID);
	}
}

function getFilterStrings(catID){
	var str = new Array();
	var hasData = false;
	for (i = 0; i < filters.length; i++){
		if (filters[i].catID == catID){
			for (j = 0; j < filters[i].props.length; j++){
				str.push(filters[i].props[j].propID);
				str.push(filters[i].props[j].propOper);
				str.push(filters[i].props[j].propVal);
				hasData = true;
			}
			break;
		}
	}
	return hasData ? str : null;
}

function resetFilter(selID){
	var combo = document.getElementById("FltProp" + selID.toString());
	combo.selectedIndex = 0;
	var oper = document.getElementById("FltOper" + selID.toString());
	oper.selectedIndex = 0;
	document.getElementById("FltVal" + selID.toString()).value = "";
	
	var i,j;
	
	for (i = 0; i < filters.length; i++){
		if (filters[i].catID == filterCatID){
			for (j = 0; j < filters[i].props.length; j++){
				if (filters[i].props[j].selID == selID){
					filters[i].props.splice(j, 1);
					break;
				}
			}
			break;
		}
	}
	
	//update according to new property
	getFilterOperations(selID);
}

//messages
function showMessage(text, timeout, CSS){
    var div = document.getElementById("message");
    if (CSS != null) {
        div.setAttribute("className", CSS);
        div.setAttribute("class", CSS);
    }
    else {
        div.setAttribute("className", "message");
        div.setAttribute("class", "message");
    }
        
//  if (CSS == "OK") {
//        div.style.backgroundImage = "url(http://www.cleverglobe.com/img/ico-ok.gif)";
//        div.style.backgroundColor = "rgb(210, 245, 221)";
//  }
	div.innerHTML = text;
	div.style.visibility = "visible";

	setTimeout(hideMessage, timeout);	
}

function hideMessage(){
	var div = document.getElementById("message");
	div.innerHTML = "";
	div.style.visibility = "hidden";
}
