var PanelDialogue = {
	
	markerNames : null,
	searchLocations : [],
	
	selectionImages : true,
	
	resultsCount : null,
	
	initialize : function()
	{
		PanelDialogue.formatCategories();
	},
	
	formatCategories : function()
	{
		Loader.load('/marker/getmarkernames',false,'PanelDialogue.formatCategoriesCallback');
	},
	
	formatCategoriesCallback : function(jsonData)
	{
		if (jsonData.data.status == 1) 
	    {
	    	PanelDialogue.markerNames = jsonData.data;
	    	Graphics.formatPanel();
	    	
	    	//we have categories now so lets initialize some dialogues
	    	//NewTargetDialogue.initialize();
			//NewServiceDialogue.initialize();
			//NewAuthorityDialogue.initialize();
	    }
	    Loader.decreaseCallCount();
	},
	
	changeTabClass : function(c)
	{
		
		currentClass = $('#tabNavi').attr('class');
		if (c == currentClass) var newClass = 'off';
		else var newClass = c;
		
		if (newClass == 'off') 
		{
			Graphics.hideSlider();
			//MMap.enableControls();
		}
		
		if (currentClass == 'off') 
		{
			Graphics.showSlider();
			//MMap.disableControls();
		}
		
		$('#tabNavi').attr('class',newClass);
		
		switch (newClass)
		{
			case 'on1':
                $('#sc_images').hide();
				$('#sc_services').hide();
				$('#sc_authorities').hide();
				$('#sc_targets').show();
				break;
			
			case 'on2':
                $('#sc_images').hide();
				$('#sc_authorities').hide();
				$('#sc_targets').hide();
				$('#sc_services').show();
				break;
			
			case 'on3':
                $('#sc_images').hide();			
				$('#sc_services').hide();
				$('#sc_targets').hide();
				$('#sc_authorities').show();
				break;
				
            case 'on4':
                $('#sc_services').hide();
                $('#sc_targets').hide();
                $('#sc_authorities').hide();
                $('#sc_images').show();                
                break;
		}
		
	},
	
	getSelections : function()
	{
		var params = [];
		
		//target selections
		$('.targetSelection:checked').each(function (){
			params.push(this.id); 
		});
		
		//service selections
		$('.serviceSelection:checked').each(function (){
			params.push(this.id); 
		});
		
		//authority selections
		$('.authoritySelection:checked').each(function (){
			params.push(this.id); 
		});
		
		//images
		//if (PanelDialogue.selectionImages) params.push('images');
        $('.imageSelection:checked').each(function (){
            params.push(this.id); 
        });		
		
		return params;
	},
	
	changeAllSelections : function(selected)
	{
		currentClass = $('#tabNavi').attr('class');
		
		switch (currentClass)
		{
			case 'on1':
				$('#sc_targets input').each(function() {
					$(this).attr('checked',selected);
				});
				break;
			
			case 'on2':
				$('#sc_services_properties input').each(function() {
					$(this).attr('checked',selected);
				});
				break;
			
			case 'on3':
				$('#sc_authorities_types input').each(function() {
					$(this).attr('checked',selected);
				});
				break;
            case 'on4':
                $('#sc_images_properties input').each(function() {
                    $(this).attr('checked',selected);
                });
                break;
		}
		
		MMap.updateMarkers();	
	},
	
	showSelections : function()
	{
		MMap.updateMarkers();
	},
	
	toggleImages : function()
	{
		if (!MMap.controlsDisabled)
		{
			PanelDialogue.selectionImages = (PanelDialogue.selectionImages)?false:true;
			if (PanelDialogue.selectionImages) $('#navi_valokuvat').addClass('valokuvaSelected');
			else $('#navi_valokuvat').removeClass('valokuvaSelected');
			MMap.updateMarkers();
		}
	},
	
	searchLocation : function()
	{
		if (!MMap.controlsDisabled)
		{
			placeName = $('#searchField').val();
			
			//new geocoding object
	    	geocoder = new GClientGeocoder();
	    	
	    	geocoder.getLocations(placeName, PanelDialogue.locationSearchResults);
		}
	},
	
	locationSearchResults : function(response)
	{
		//console.log(response);
		if (!response.Placemark)
		{
			alert('Paikkaa ei löytynyt');
			return;
		}
		else if (response.Placemark.length == 1)
		{
			var coords = {
				lat : response.Placemark[0].Point.coordinates[0],
				lng : response.Placemark[0].Point.coordinates[1]
			};
			
			MMap.goToLocation(coords);
		}
		
		else
		{
			PanelDialogue.searchLocations = response.Placemark;
			Graphics.showSearchLocations();
		}
	},
	
	selectLocation : function(i)
	{
		var coords = {
			lat : PanelDialogue.searchLocations[i].Point.coordinates[0],
			lng : PanelDialogue.searchLocations[i].Point.coordinates[1]
		};
		
		Graphics.hideSearchLocations();
		
		MMap.goToLocation(coords);
	},
	
	showResultCount : function(json)
	{
		if (json.data.markers)
		{
			var resultsCount = json.data.markers.length;
			PanelDialogue.resultsCount = resultsCount;
			Graphics.showResultsCount();
		}
	}
}

/** ** ** ** ** ** ** ** ** ** ** ** **
 * Sidebar dialogue 
 */
 
var SidebarDialogue = {
    
    isOpen : false,
    
    sidebarData : false,
    
    initialize : function()
    {
    	SidebarDialogue.populateSidebar();
    },
    
    refresh : function()
    {
        if (User.loggedIn===true)
        {        
            var data;
            
            data = new Array();

            Loader.load('/user/getusersmarkersandcomments',data,'SidebarDialogue.refreshCallback');
            
        }     	
    },

    refreshCallback : function(jsonData)
    {
        if (jsonData.data.status == 1)
        {
            SidebarDialogue.sidebarData = jsonData.data;
        }
        
        else 
        {
            errorMsg = jsonData.data.message;
            errorCode = jsonData.data.errorCode; 
        }
        Graphics.refreshSidebar();        
        
        Loader.decreaseCallCount();
                
    },
        
    populateSidebar : function()
    {
        if (User.loggedIn===true)
        {        
        	var data;
        	
        	data = new Array();

            Loader.load('/user/getusersmarkersandcomments',data,'SidebarDialogue.populateSidebarCallback');
            
        } 
    },
    
    populateSidebarCallback : function(jsonData)
    {
        if (jsonData.data.status == 1)
        {
        	SidebarDialogue.sidebarData = jsonData.data;
        }
        
        else 
        {
            errorMsg = jsonData.data.message;
            errorCode = jsonData.data.errorCode; 
        }
        Graphics.formatSidebar();        
        
        Loader.decreaseCallCount();
        
        Graphics.animateSidebarHandle();
        
    }    
    
    
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Right click menu dialogue 
 */
 
var ContextMenuDialogue = {
	
	clickedPixel : null,
	
	initialize : function()
	{
		Graphics.formatContextMenu();
	},
		
	show : function()
	{
		if (!MMap.controlsDisabled)
		{
			Graphics.showContextMenu();
		}		
	},
	
	hide : function()
	{
		Graphics.hideContextMenu();	
	},
	
	getCloseView : function() 
	{
		MMap.getCloseView(ContextMenuDialogue.clickedPixel);
	    
	    // hide the context menu
	    this.hide();
    },
    
    zoomInHere : function () 
    {
        MMap.zoomInHere(ContextMenuDialogue.clickedPixel);
        
        // hide the context menu
        this.hide();
    },
          
    zoomOutHere : function () 
    {
        MMap.zoomOutHere(ContextMenuDialogue.clickedPixel);
        
        // hide the context menu
        this.hide();
    },
    
    centerHere : function () 
    {
    	MMap.centerHere(ContextMenuDialogue.clickedPixel);
    	
    	//hide the context menu
	    this.hide();
    },
    
    newTargetHere : function() 
    {
    	// hide the context menu
    	this.hide();
    	
    	if (!User.loggedIn === true) 
    	{
    		alert("Uuden kohteen lisääminen vaatii sisäänkirjautumisen");
    		return;
    	}
    	
		MMap.newTargetHere(ContextMenuDialogue.clickedPixel);
	},
	
	newServiceHere : function()
	{
		// hide the context menu
    	this.hide();
    	
    	MMap.newServiceHere(ContextMenuDialogue.clickedPixel);
	},

	newAuthorityHere : function()
	{
		// hide the context menu
    	this.hide();
    	
    	MMap.newAuthorityHere(ContextMenuDialogue.clickedPixel);
	},
	
	newImageHere : function()
	{
		// hide the context menu
    	this.hide();
    	
    	if (!User.loggedIn === true) 
    	{
    		alert("Uuden kuvan lisääminen vaatii sisäänkirjautumisen");
    		return;
    	}
    	
    	MMap.newImageHere(ContextMenuDialogue.clickedPixel);
	},
	
	setBaseLocation : function()
	{
		var point = MMap.map.fromContainerPixelToLatLng(ContextMenuDialogue.clickedPixel);
		
		var baseLocationData = {
			lat    : point.lat(),
			lng    : point.lng()
		}
		
		Loader.load('/user/setbaselocation',baseLocationData,'ContextMenuDialogue.setBaseLocationCallback');
				
		// hide the context menu
    	this.hide();
	},

    sendFeedback : function()
    {
        // hide the context menu
        this.hide();
        Graphics.showFeedbackForm();
    },
	
	setBaseLocationCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	alert('Kotisatama asetettu.');
	    	User.loadUserInfo();
	    }
	    else
	    {
	    	alert('Kotisatamaa ei voitu määrittää.');
	    }

        MMap.updateMarkers();   

	    Loader.decreaseCallCount();
	} 
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * My user info dialogue 
 */
var MyUserInfoDialogue = {
	show : function()
	{
		if (!MMap.controlsDisabled)
		{
			MyUserInfoDialogue.update();
			Graphics.formatMyUserInfo();
			Graphics.showMyUserInfo();
			//MMap.disableControls();
		}		
	},
	
	hide : function()
	{
		Graphics.hideMyUserInfo();
		//MMap.enableControls();
	},
	
	toggle : function(id)
	{
		if ($('#myUserInfo_field_' + id).css('display') == "block")
		{
			$('#myUserInfo_field_' + id).css({'display':'none'});
			$('#myUserInfo_edit_' + id).css({'display':'block'});
			$('#toggle_' + id).html('Sulje');
		}
		
		else
		{
			$('#myUserInfo_edit_' + id).css({'display':'none'});
			$('#myUserInfo_field_' + id).css({'display':'block'});
			$('#toggle_' + id).html('Muokkaa');
		}
	},
	
	update : function()
	{
		Graphics.formatMyUserInfo();
	},
	
	changePassword : function()
	{
		//client check
		var errorMsg = '';
		
		var newPassword = $('#muiNewPassword').val();
		var newPasswordAgain = $('#muiNewPasswordAgain').val();
		var currentPassword = $('#muiNewPasswordConfirm').val();  
		
		//do match(?)
		if (newPassword != newPasswordAgain)
		{
			errorMsg += 'Salasanan vahvistus ei täsmää\n';
		}
		
		//current password provided
		if (currentPassword == '') errorMsg += 'Nykyinen salasana puuttuu\n';
		
		if (errorMsg != '')
		{
			alert(errorMsg);
			return;
		}
		
		var inputData = {
			password 		: newPassword,
			oldPassword 	: currentPassword
		};
		
		Loader.load('/user/changepassword',inputData,'MyUserInfoDialogue.changePasswordCallback');
	},
	
	changePasswordCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	alert("Salasanan vaihto onnistui.");  
	    	MyUserInfoDialogue.update();
			Graphics.formatMyUserInfo();
	    }
	    
	    else 
	    {
	    	errorMsg = jsonData.data.messages;
	    	errorCode = jsonData.data.errorCode; 
	    	
	    	if (errorCode == 3) User.logout(true);
	    	
	    	alert(errorMsg);  
	    }
	    Loader.decreaseCallCount();
	},
	
	changeEmail : function()
	{
		//client check
		var errorMsg = '';
		
		var newEmail = $('#muiNewEmail').val();
		var newEmailAgain = $('#muiNewEmailAgain').val();
		var currentPassword = $('#muiNewEmailConfirm').val();  
		
		//do match(?)
		if (newEmail != newEmailAgain)
		{
			errorMsg += 'Sähköpostin vahvistus ei täsmää\n';
		}
		
		//current password provided
		if (currentPassword == '') errorMsg += 'Nykyinen salasana puuttuu\n';
		
		if (errorMsg != '')
		{
			alert(errorMsg);
			return;
		}
		
		var inputData = {
			email	 		: newEmail,
			password	 	: currentPassword
		};
		
		Loader.load('/user/changeemail',inputData,'MyUserInfoDialogue.changeEmailCallback');
	},
	
	changeEmailCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	alert("Sähköpostiosoitteen vaihto onnistui.");
	    	User.email = jsonData.data.newEmail;
	    	MyUserInfoDialogue.update();
			Graphics.formatMyUserInfo();
	    }
	    
	    else 
	    {
	    	errorMsg = jsonData.data.messages;
	    	errorCode = jsonData.data.errorCode; 
	    	
	    	if (errorCode == 3) User.logout(true);
	    	
	    	alert(errorMsg);  
	    }
	    Loader.decreaseCallCount();
	}
}

/** ** ** ** ** ** ** ** ** ** ** ** **
 * New target dialogue 
 */
var NewTargetDialogue = {
	
	lat : null,
	lng : null,
	point : null,
	
	initialize : function()
	{
	   	Graphics.formatNewTarget();
	},
	
	empty : function()
	{
		$('#newTargetName').val('');
		$('#newTargetDescription').val('');
		$('#newTargetLat').val('');
		$('#newTargetLng').val('');
	},
	
	addNewTarget : function(formElement)
	{
		var data = {
			type 		: $('#newTargetType').val(),
			lat 		: $('#newTargetLat').val(),
			lng			: $('#newTargetLng').val(),
			name		: $('#newTargetName').val(),
			description : $('#newTargetDescription').val(),
			www 		: $('#newTargetWWW').val()
		}
		
		var errorMsg = this.checkValues(data);
		if (errorMsg != '') {
			alert(errorMsg);
			return false;
		} else {
			AIM.submit(formElement, {'onStart' : NewTargetDialogue.startCallback, 'onComplete' : NewTargetDialogue.completeCallback});
		}
	},
	
	checkValues : function(data)
	{
		var errorMsg = '';
		if (data.name == '') errorMsg += 'Kohteen nimi puuttuu\n';
		if (data.description == '') errorMsg += 'Kohteen kuvaus puuttuu\n';
		if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
		if (data.www != '' && !Validators.isValidURL(data.www)) errorMsg += 'WWW - osoite virheellinen\n';
		return errorMsg;
	},
	
	startCallback : function()
	{
		Loader.increaseCallCount();
	},
	
	completeCallback : function(response)
	{
		Graphics.hideNewMarker('Target');
 		MMap.enableControls();
 		MMap.updateMarkers();
 		Loader.decreaseCallCount();
        SidebarDialogue.refresh();
	}
}

/** ** ** ** ** ** ** ** ** ** ** ** **
 * Update target dialogue 
 */
var UpdateTargetDialogue = {
    empty : function()
    {
        $('#newTargetName').val('');
        $('#newTargetDescription').val('');
        $('#newTargetLat').val('');
        $('#newTargetLng').val('');
    },
    
    updateTarget : function(formElement)
    {
        var data = {
            type        : $('#newTargetType').val(),
            lat         : $('#newTargetLat').val(),
            lng         : $('#newTargetLng').val(),
            name        : $('#newTargetName').val(),
            description : $('#newTargetDescription').val(),
            www         : $('#newTargetWWW').val()
        }
        
        var errorMsg = this.checkValues(data);
        if (errorMsg != '') {
            alert(errorMsg);
            return false;
        } else {
            AIM.submit(formElement, {'onStart' : UpdateTargetDialogue.startCallback, 'onComplete' : UpdateTargetDialogue.completeCallback});
        }
    },
    
    checkValues : function(data)
    {
        var errorMsg = '';
        if (data.name == '') errorMsg += 'Kohteen nimi puuttuu\n';
        if (data.description == '') errorMsg += 'Kohteen kuvaus puuttuu\n';
        if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
        if (data.www != '' && !Validators.isValidURL(data.www)) errorMsg += 'WWW - osoite virheellinen\n';
        return errorMsg;
    },
    
    startCallback : function()
    {
        Loader.increaseCallCount();
    },
    
    completeCallback : function(response)
    {
        Graphics.hideUpdateMarker('Target');
        MMap.enableControls();
        MMap.updateMarkers();
        Loader.decreaseCallCount();
        TargetInfoDialogue.initialize(Dialogues.openMarkerId);
        SidebarDialogue.refresh();

    }
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * New service dialogue 
 */
var NewServiceDialogue = {
	
	lat : null,
	lng : null,
	
	initialize : function()
	{
		Graphics.formatNewService();
	},
	
	empty : function()
	{
		$('#newServiceName').val('');
		$('#newServiceDescription').val('');
		$('#newServiceLat').val('');
		$('#newServiceLng').val('');
		$('#newServiceSeamap').val('');
	},
	
	addNewService : function(formElement)
	{
		var data = {
			type 		: $('#newServiceType').val(),
			lat 		: $('#newServiceLat').val(),
			lng			: $('#newServiceLng').val(),
			seamap		: $('#newServiceSeamap').val(),
			name		: $('#newServiceName').val(),
			description : $('#newServiceDescription').val(),
			www 		: $('#newServiceWWW').val()
		}
		
		var errorMsg = this.checkValues(data);
		if (errorMsg != '') {
			alert(errorMsg);
			return false;
		} else {
			AIM.submit(formElement, {'onStart' : NewServiceDialogue.startCallback, 'onComplete' : NewServiceDialogue.completeCallback});
		}
	},
	
	checkValues : function(data)
	{
		var errorMsg = '';
		if (data.name == '') errorMsg += 'Kohteen nimi puuttuu\n';
		if (data.description == '') errorMsg += 'Kohteen kuvaus puuttuu\n';
		if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
		if (data.www != '' && !Validators.isValidURL(data.www)) errorMsg += 'WWW - osoite virheellinen\n';
		return errorMsg;
	},
	
	startCallback : function()
	{
		Loader.increaseCallCount();
	},
	
	completeCallback : function(response)
	{
		//console.log(response);
		Graphics.hideNewMarker('Service');
 		MMap.enableControls();
 		MMap.updateMarkers();
 		Loader.decreaseCallCount();
        SidebarDialogue.refresh();        
 		
	}
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Update service dialogue 
 */
var UpdateServiceDialogue = {
    
    lat : null,
    lng : null,
    
    initialize : function()
    {
        Graphics.formatNewService();
    },
    
    empty : function()
    {
        $('#newServiceName').val('');
        $('#newServiceDescription').val('');
        $('#newServiceLat').val('');
        $('#newServiceLng').val('');
        $('#newServiceSeamap').val('');
    },
    
    updateService : function(formElement)
    {
        var data = {
            type        : $('#newServiceType').val(),
            lat         : $('#newServiceLat').val(),
            lng         : $('#newServiceLng').val(),
            seamap      : $('#newServiceSeamap').val(),
            name        : $('#newServiceName').val(),
            description : $('#newServiceDescription').val(),
            www         : $('#newServiceWWW').val()
        }
        
        var errorMsg = this.checkValues(data);
        if (errorMsg != '') {
            alert(errorMsg);
            return false;
        } else {
            AIM.submit(formElement, {'onStart' : UpdateServiceDialogue.startCallback, 'onComplete' : UpdateServiceDialogue.completeCallback});
        }
    },
    
    checkValues : function(data)
    {
        var errorMsg = '';
        if (data.name == '') errorMsg += 'Kohteen nimi puuttuu\n';
        if (data.description == '') errorMsg += 'Kohteen kuvaus puuttuu\n';
        if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
        if (data.www != '' && !Validators.isValidURL(data.www)) errorMsg += 'WWW - osoite virheellinen\n';
        return errorMsg;
    },
    
    startCallback : function()
    {
        Loader.increaseCallCount();
    },
    
    completeCallback : function(response)
    {
        Graphics.hideUpdateMarker('Service');
        alert('Tiedot päivitetty.');
        Graphics.hidePlaceInfo();        
        MMap.enableControls();
        MMap.updateMarkers();
        Loader.decreaseCallCount();
        ServiceInfoDialogue.initialize(Dialogues.openMarkerId);
        SidebarDialogue.refresh();
        
    }
}

/** ** ** ** ** ** ** ** ** ** ** ** **
 * New authority dialogue 
 */
var NewAuthorityDialogue = {
	
	lat : null,
	lng : null,
	
	initialize : function()
	{
		Graphics.formatNewAuthority();
	},
	
	empty : function()
	{
		$('#newAuthorityName').val('');
		$('#newAuthorityDescription').val('');
		$('#newAuthorityLat').val('');
		$('#newAuthorityLng').val('');
		$('#newAuthoritySeamap').val('');
	},
	
	addNewAuthority : function(formElement)
	{
		var data = {
            icon        : $('#newAuthorityIcon').val(),			
			type 		: $('#newAuthorityType').val(),
			lat 		: $('#newAuthorityLat').val(),
			lng			: $('#newAuthorityLng').val(),
            icon        : $('#newAuthorityIcon').val(),
			seamap		: $('#newAuthoritySeamap').val(),
			name		: $('#newAuthorityName').val(),
			description : $('#newAuthorityDescription').val(),
			www 		: $('#newAuthorityWWW').val()
		}
		
		var errorMsg = this.checkValues(data);
		if (errorMsg != '') {
			alert(errorMsg);
			return false;
		} else {	
			AIM.submit(formElement, {'onStart' : NewAuthorityDialogue.startCallback, 'onComplete' : NewAuthorityDialogue.completeCallback});
		}
	},
	
	checkValues : function(data)
	{
		var errorMsg = '';
		if (data.name == '') errorMsg += 'Kohteen nimi puuttuu\n';
		if (data.description == '') errorMsg += 'Kohteen kuvaus puuttuu\n';
		if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
		if (data.www != '' && !Validators.isValidURL(data.www)) errorMsg += 'WWW - osoite virheellinen\n';
		return errorMsg;
	},
	
	startCallback : function()
	{
		Loader.increaseCallCount();
	},
	
	completeCallback : function(response)
	{
		Graphics.hideNewMarker('Authority');
        alert('Tiedot talletettu.');
        Graphics.hidePlaceInfo();
 		MMap.enableControls();
 		MMap.updateMarkers();
 		Loader.decreaseCallCount();
        SidebarDialogue.refresh(); 		
	}
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Update authority dialogue 
 */
var UpdateAuthorityDialogue = {
    
    lat : null,
    lng : null,
    
    initialize : function()
    {
        Graphics.formatNewAuthority();
    },
    
    empty : function()
    {
        $('#newAuthorityName').val('');
        $('#newAuthorityDescription').val('');
        $('#newAuthorityLat').val('');
        $('#newAuthorityLng').val('');
        $('#newAuthoritySeamap').val('');
    },
    
   updateAuthority : function(formElement)
    {
        var data = {
            icon        : $('#newAuthorityIcon').val(),     
            type        : $('#newAuthorityType').val(),
            lat         : $('#newAuthorityLat').val(),
            lng         : $('#newAuthorityLng').val(),
            seamap      : $('#newAuthoritySeamap').val(),
            name        : $('#newAuthorityName').val(),
            description : $('#newAuthorityDescription').val(),
            www         : $('#newAuthorityWWW').val()
        }
        
        var errorMsg = this.checkValues(data);
        if (errorMsg != '') {
            alert(errorMsg);
            return false;
        } else {    
            AIM.submit(formElement, {'onStart' : UpdateAuthorityDialogue.startCallback, 'onComplete' : UpdateAuthorityDialogue.completeCallback});
        }
    },
    
    checkValues : function(data)
    {
        var errorMsg = '';
        if (data.name == '') errorMsg += 'Kohteen nimi puuttuu\n';
        if (data.description == '') errorMsg += 'Kohteen kuvaus puuttuu\n';
        if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
        if (data.www != '' && !Validators.isValidURL(data.www)) errorMsg += 'WWW - osoite virheellinen\n';
        return errorMsg;
    },
    
    startCallback : function()
    {
        Loader.increaseCallCount();
    },
    
    completeCallback : function(response)
    {
        Graphics.hideNewMarker('Authority');
        alert('Tiedot päivitetty.');
        Graphics.hidePlaceInfo();        
        MMap.enableControls();
        MMap.updateMarkers();
        Loader.decreaseCallCount();
        
        AuthorityInfoDialogue.initialize(Dialogues.openMarkerId);
        SidebarDialogue.refresh();
    }
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * New image dialogue 
 */
var NewImageDialogue = {
	
	imageClasses : {},
	lat : null,
	lng : null,
	
	initialize : function()
	{
		Graphics.formatNewImage();
	},
	
	empty : function()
	{
		$('#newImageName').val('');
		$('#newImageDescription').val('');
		$('#newImageLat').val('');
		$('#newImageLng').val('');
	},
	
	addNewImage : function(formElement)
	{
		var data = {
			type 		: $('#newImageType').val(),
			lat 		: $('#newImageLat').val(),
			lng			: $('#newImageLng').val(),
			name		: $('#newImageName').val(),
			file		: $('#newImageFile').val(),
			description : $('#newImageDescription').val(),
			properties  : $('.propertySelection:checked').length
		}
		
		var errorMsg = this.checkValues(data);
		if (errorMsg != '') {
			alert(errorMsg);
			return false;
		} else {
			AIM.submit(formElement, {'onStart' : NewImageDialogue.startCallback, 'onComplete' : NewImageDialogue.completeCallback});
		}
	},
	
	checkValues : function(data)
	{
		var errorMsg = '';
		if (data.description.length > 256) errorMsg += "Kuvaustekstin tulee olla max 256 merkkiä pitkä\n";
		if (data.file == '') errorMsg += 'Valokuva puuttuu\n';
		if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
        if (data.file == '') errorMsg += 'Valokuva puuttuu\n';
        if (data.properties == 0) errorMsg += 'Valitse vähintään yksi luokittelu.\n';
		return errorMsg;
	},
	
	startCallback : function()
	{
		Loader.increaseCallCount();
	},
	
	completeCallback : function(response)
	{
		//console.log(response);
		Graphics.hideNewMarker('Image');
 		MMap.enableControls();
 		MMap.updateMarkers();
 		Loader.decreaseCallCount();
        SidebarDialogue.refresh();
	}
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Update image dialogue 
 */
var UpdateImageDialogue = {
    
    imageClasses : {},
    lat : null,
    lng : null,
    
    initialize : function()
    {
        Graphics.formatNewImage();
    },
    
    empty : function()
    {
        $('#newImageName').val('');
        $('#newImageDescription').val('');
        $('#newImageLat').val('');
        $('#newImageLng').val('');
    },
    
    updateImage : function(formElement)
    {
        var data = {
            type        : $('#newImageType').val(),
            lat         : $('#newImageLat').val(),
            lng         : $('#newImageLng').val(),
            name        : $('#newImageName').val(),
            file        : $('#newImageFile').val(),
            description : $('#newImageDescription').val(),
            properties  : $('.propertySelection:checked').length            
        }
        
        var errorMsg = this.checkValues(data);
        if (errorMsg != '') {
            alert(errorMsg);
            return false;
        } else {
            AIM.submit(formElement, {'onStart' : UpdateImageDialogue.startCallback, 'onComplete' : UpdateImageDialogue.completeCallback});
        }
    },
    
    checkValues : function(data)
    {
        var errorMsg = '';
        if (data.description.length > 256) errorMsg += "Kuvaustekstin tulee olla max 256 merkkiä pitkä\n";
        if (!(data.lat >= -90 && data.lat <= 90 && data.lng >= -180 && data.lng <= 180)) errorMsg += 'Koordinaatit virheelliset\n';
        if (data.properties == 0) errorMsg += 'Valitse vähintään yksi luokittelu.\n';
        return errorMsg;
    },
    
    startCallback : function()
    {
        Loader.increaseCallCount();
    },
    
    completeCallback : function(response)
    {
        //console.log(response);
        Graphics.hideNewMarker('Image');
        alert('Tiedot päivitetty.');
        Graphics.hidePlaceInfo();        
        MMap.enableControls();
        MMap.updateMarkers();
        Loader.decreaseCallCount();
        ImageInfoDialogue.initialize(Dialogues.openMarkerId);
        SidebarDialogue.refresh();
        
    }
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Target info dialogue 
 */
var TargetInfoDialogue = {
	
	id				: null,
	id_adder		: null,
	id_class        : null,
	id_category     : null,
	id_type         : null,
	lat             : null,
	lng             : null,
	title 			: null,
	description 	: null,
	category		: null,
	type			: null,
	www				: null,
	imageUrl 		: null,
	rating 			: null,
	ratingCount		: null,
	commentsCount 	: null,
	comments		: [],
	properties		: [],
	
	initialize : function(id)
	{
		TargetInfoDialogue.id = id;
		
		//ajax query
		var data = {id : id};
		
		Loader.load('/marker/getmarkerinfo',data,'TargetInfoDialogue.initializeCallback');
	},
	
	initializeCallback : function(jsonData)
	{
		//assign values
	 	TargetInfoDialogue.title 			= jsonData.data.markerInfo.title;
	 	TargetInfoDialogue.description 		= jsonData.data.markerInfo.description;
        TargetInfoDialogue.category         = jsonData.data.markerInfo.category;
        TargetInfoDialogue.id_class         = jsonData.data.markerInfo.id_class;
        TargetInfoDialogue.id_category      = jsonData.data.markerInfo.id_category;                
	 	TargetInfoDialogue.id_type   		= jsonData.data.markerInfo.id_type;
        TargetInfoDialogue.lat              = jsonData.data.markerInfo.lat;
        TargetInfoDialogue.lng              = jsonData.data.markerInfo.lng;
	 	TargetInfoDialogue.type 			= jsonData.data.markerInfo.type;
	 	TargetInfoDialogue.www	 			= jsonData.data.markerInfo.www;
	 	TargetInfoDialogue.imageUrl 		= jsonData.data.markerInfo.imageUrl;
	 	TargetInfoDialogue.rating	 		= jsonData.data.markerInfo.rating;
	 	TargetInfoDialogue.id_adder	 		= jsonData.data.markerInfo.id_adder;
	 	TargetInfoDialogue.ratingCount 		= jsonData.data.markerInfo.ratingCount;
	 	TargetInfoDialogue.commentsCount	= jsonData.data.markerInfo.commentsCount;
	 	TargetInfoDialogue.properties		= jsonData.data.markerInfo.properties;
	 	
	 	Dialogues.openMarkerId = TargetInfoDialogue.id;
	 	
	 	Graphics.showTargetInfo();
	 	Dialogues.currentDialogue = 'TargetInfoDialogue';
	 	Loader.decreaseCallCount();
	}
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Service info dialogue 
 */
var ServiceInfoDialogue = {
	
	id				: null,
	id_adder        : null,
	title 			: null,
	description 	: null,
	category		: null,
	type			: null,
	seaMap			: null,
	www				: null,
	imageUrl 		: null,
	rating 			: null,
	ratingCount		: null,
	commentsCount 	: null,
	comments		: [],
	properties		: [],
	
	initialize : function(id)
	{
		ServiceInfoDialogue.id = id;
		
		//ajax query
		
		//ajax query
		var data = {id : id};
		
		Loader.load('/marker/getmarkerinfo',data,'ServiceInfoDialogue.initializeCallback');	
	},
	
	initializeCallback : function(jsonData)
	{
		//assign values
	 	ServiceInfoDialogue.title 			= jsonData.data.markerInfo.title;
        ServiceInfoDialogue.id_adder        = jsonData.data.markerInfo.id_adder;
        ServiceInfoDialogue.lat             = jsonData.data.markerInfo.lat;
        ServiceInfoDialogue.lng             = jsonData.data.markerInfo.lng;        	 	
	 	ServiceInfoDialogue.description 	= jsonData.data.markerInfo.description;
	 	ServiceInfoDialogue.category	 	= jsonData.data.markerInfo.category;
	 	ServiceInfoDialogue.type		 	= jsonData.data.markerInfo.type;
	 	ServiceInfoDialogue.seaMap		 	= jsonData.data.markerInfo.seaMap;
	 	ServiceInfoDialogue.www			 	= jsonData.data.markerInfo.www;
	 	ServiceInfoDialogue.imageUrl 		= jsonData.data.markerInfo.imageUrl;
	 	ServiceInfoDialogue.rating	 		= jsonData.data.markerInfo.rating;
	 	ServiceInfoDialogue.ratingCount 	= jsonData.data.markerInfo.ratingCount;
	 	ServiceInfoDialogue.commentsCount	= jsonData.data.markerInfo.commentsCount;
	 	ServiceInfoDialogue.properties		= jsonData.data.markerInfo.properties;
	 	
        Dialogues.openMarkerId = ServiceInfoDialogue.id;	 	
	 	
        Dialogues.currentDialogue = 'ServiceInfoDialogue';
	 	Graphics.showServiceInfo();
	 	Loader.decreaseCallCount();
	}
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Authority info dialogue 
 */
var AuthorityInfoDialogue = {
	
	id				: null,
	title 			: null,
	description 	: null,
	category		: null,
	type			: null,
	icon            : null,
    id_category     : null,
    id_type         : null,
	seaMap			: null,
	www				: null,
	imageUrl 		: null,
	rating 			: null,
	ratingCount		: null,
	commentsCount 	: null,
    lat             : null,
    lng             : null,
	comments		: [],
	properties		: [],
	
	initialize : function(id)
	{
		AuthorityInfoDialogue.id = id;
		
		//ajax query
		var data = {id : id};
		
		Loader.load('/marker/getmarkerinfo',data,'AuthorityInfoDialogue.initializeCallback');	
	},
	
	initializeCallback : function(jsonData)
	{
		//assign values
	 	AuthorityInfoDialogue.title 		= jsonData.data.markerInfo.title;
	 	AuthorityInfoDialogue.description 	= jsonData.data.markerInfo.description;
        AuthorityInfoDialogue.lat           = jsonData.data.markerInfo.lat;
        AuthorityInfoDialogue.lng           = jsonData.data.markerInfo.lng;
        AuthorityInfoDialogue.icon          = jsonData.data.markerInfo.icon;
	 	AuthorityInfoDialogue.category 		= jsonData.data.markerInfo.category;
	 	AuthorityInfoDialogue.type		 	= jsonData.data.markerInfo.type;
        AuthorityInfoDialogue.id_category   = jsonData.data.markerInfo.id_category;
        AuthorityInfoDialogue.id_type       = jsonData.data.markerInfo.id_type;
	 	AuthorityInfoDialogue.seaMap	 	= jsonData.data.markerInfo.seaMap;
	 	AuthorityInfoDialogue.www		 	= jsonData.data.markerInfo.www;
	 	AuthorityInfoDialogue.imageUrl 		= jsonData.data.markerInfo.imageUrl;
	 	AuthorityInfoDialogue.rating	 	= jsonData.data.markerInfo.rating;
	 	AuthorityInfoDialogue.ratingCount 	= jsonData.data.markerInfo.ratingCount;
	 	AuthorityInfoDialogue.commentsCount	= jsonData.data.markerInfo.commentsCount;
	 	
        Dialogues.currentDialogue = 'AuthorityInfoDialogue';
	 	
        Dialogues.openMarkerId = AuthorityInfoDialogue.id;	 	
	 	
	 	Graphics.showAuthorityInfo();
	 	Loader.decreaseCallCount();
	}
}


/** ** ** ** ** ** ** ** ** ** ** ** **
 * Image info dialogue 
 */
var ImageInfoDialogue = {
	
	id				: null,
	id_adder        : null,
	title 			: null,
	description 	: null,
	category		: null,
	type			: null,
	id_type         : null,
	id_category     : null,
	imageUrl 		: null,
    lng             : null,
    lat             : null,
	rating 			: null,
	ratingCount		: null,
	commentsCount 	: null,
	comments		: [],
	properties		: [],
	
	initialize : function(id)
	{
		ImageInfoDialogue.id = id;
		
		//ajax query
		var data = {id : id};
		
		Loader.load('/marker/getmarkerinfo',data,'ImageInfoDialogue.initializeCallback');
		
	},
	
	initializeCallback : function(jsonData)
	{
		//assign values
	 	ImageInfoDialogue.title 		= jsonData.data.markerInfo.title;
        ImageInfoDialogue.id_adder      = jsonData.data.markerInfo.id_adder;
        ImageInfoDialogue.lng           = jsonData.data.markerInfo.lng;
        ImageInfoDialogue.lat           = jsonData.data.markerInfo.lat;
	 	ImageInfoDialogue.description 	= jsonData.data.markerInfo.description;
	 	ImageInfoDialogue.category	 	= jsonData.data.markerInfo.category;
	 	ImageInfoDialogue.type		 	= jsonData.data.markerInfo.type;
	 	ImageInfoDialogue.imageUrl 		= jsonData.data.markerInfo.imageUrl;
	 	ImageInfoDialogue.rating	 	= jsonData.data.markerInfo.rating;
	 	ImageInfoDialogue.ratingCount 	= jsonData.data.markerInfo.ratingCount;
        ImageInfoDialogue.lat           = jsonData.data.markerInfo.lat;
        ImageInfoDialogue.lng           = jsonData.data.markerInfo.lng;
	 	ImageInfoDialogue.commentsCount	= jsonData.data.markerInfo.commentsCount;
        ImageInfoDialogue.properties  = jsonData.data.markerInfo.properties;
        Dialogues.currentDialogue = 'ImageInfoDialogue';
	 	Graphics.showImageInfo();
	 	Loader.decreaseCallCount();

        Dialogues.openMarkerId = ImageInfoDialogue.id;	 	
	 	
	}
}

/** ** ** ** ** ** ** ** ** ** ** ** **
 * New account dialogue 
 */
var newAccountDialogue = {
	
}


/**
 * Dialogues, initialize all dialogues, general common functionality
 */
var Dialogues = {
	
	currentDialogue : false,
	currentWin : false,
	currentMarkerId : false,
	openMarkerId : false,
	
	initialize : function()
	{
		PanelDialogue.initialize();
		ContextMenuDialogue.initialize();
		NewImageDialogue.initialize();
		ModalDialogue.initialize();	
	},
	
	addRating : function(val,dialogue)
	{
		this.currentDialogue = dialogue;
		var markerId = dialogue.id;
		//ajax add rating
		
		if( Cookie.accept() ) {
			
			var cookieData = Cookie.get('ratings');
			
			if( cookieData ) {
				if( cookieData.indexOf('|'+markerId) > -1 ) {
					alert('Voit arvostella kohdetta vain kerran.');
					return;
				} else {
					Cookie.set('ratings', cookieData+'|'+markerId, 1);
				}
			} else {
				Cookie.set('ratings', '|'+markerId, 1);
			} 
		} 
		
		else {
			alert('Äänestys vaatii evästeiden (cookie) käyttöä.');
			return;
		}
		 
		var data = {id : markerId, rating : val};
		Loader.load('/marker/addrating',data,'Dialogues.addRatingCallback');
		
	},
	
	addRatingCallback : function(jsonData)
	{
		var dialogue = this.currentDialogue;
		dialogue.rating = jsonData.data.rating.rating;
	    dialogue.ratingCount = jsonData.data.rating.rating_count;
	    Graphics.updateRating('placeInfo',dialogue);
	    Loader.decreaseCallCount();
	},
	
	readComments : function(id,dialogue)
	{
		var data = {id : id};
		this.currentDialogue = dialogue;
		Loader.load('/comment/getcomments',data,'Dialogues.readCommentsCallback');
	},
	
	readCommentsCallback : function(jsonData)
	{
		var dialogue = this.currentDialogue;
		
		if (jsonData.data.status == 1)
	 	{
	 		TargetInfoDialogue.comments			 		
	 		switch(dialogue)
	 		{
	 			case "TargetInfoDialogue":
	 				var targetDialogue = "placeInfo";
	 				TargetInfoDialogue.comments = jsonData.data.comments;
	 				break;
	 			case "ServiceInfoDialogue":
	 				var targetDialogue = "placeInfo";
	 				ServiceInfoDialogue.comments = jsonData.data.comments;
	 				break;
	 			case "ImageInfoDialogue":
	 				var targetDialogue = "placeInfo";
	 				ImageInfoDialogue.comments = jsonData.data.comments;
	 				break;
	 			case "AuthorityInfoDialogue":
	 				var targetDialogue = "placeInfo";
	 				AuthorityInfoDialogue.comments = jsonData.data.comments;
	 				break;
	 		}
	 		Graphics.showModal();
	 		Graphics.showComments(dialogue,targetDialogue);
	 	}
	 	Loader.decreaseCallCount();
	},
	
	addComment : function(diag,win,markerId)
	{
		this.currentDialogue = diag;
		this.currentMarkerId = markerId;
		
		//check that user has logged in
		if (!User.loggedIn === true)
		{
			alert('Kommentin kirjoittaminen vaatii sisäänkirjautumisen.');
			return;
		}
		
		//check that the fields are present
		var errorMsg = '';
		
		var cTitle = $('#'+win+'AddCommentTitle').val();
		var cBody = $('#'+win+'AddCommentBody').val();
		
		if (cTitle == '')
		{
			errorMsg += 'Otsikko puuttuu\n';
		}
		
		if (cBody == '')
		{
			errorMsg += 'Kommentti puuttuu\n';
		}
		
		if (cBody.length > 1000) errorMsg += 'Kommentti ylittää maximipituuden (1000 merkkiä)\n';
		
		if (errorMsg!='') {
			alert(errorMsg);
			return;
		}
		
		//add comment (ajax)
		var data = {markerId : markerId, commentTitle : cTitle, commentBody : cBody};
		Loader.load('/comment/addcomment',data,'Dialogues.addCommentCallback');
	},
	
    addCommentCallback : function(jsonData)
    {
        var dialogue = this.currentDialogue;
        var markerId = this.currentMarkerId;
        Dialogues.readComments(markerId,dialogue);
        Loader.decreaseCallCount();
        SidebarDialogue.refresh();
    },
	
    removeComment : function(commentId)
    {
        //add comment (ajax)
        var data = {'comment_id' : commentId};
        Loader.load('/comment/removecomment',data,'Dialogues.removeCommentCallback');
    },
    
    removeCommentCallback : function(jsonData)
    {
        var dialogue = this.currentDialogue;
        var markerId = this.openMarkerId;
        Dialogues.readComments(markerId,dialogue);
        Loader.decreaseCallCount();
        SidebarDialogue.refresh();
    },
	
	notifyError : function(diag,win)
	{
		this.currentWin = win;
		var notifyId = eval(diag).id;
		
		var notifyName = $('#' + win + 'NotifyErrorName').val();
		var notifyEmail = $('#' + win + 'NotifyErrorEmail').val();
		var notifyMessage = $('#' + win + 'NotifyErrorMessage').val();
		
		//simple validation
		var errorMsg = '';
		
		if (notifyName == '') errorMsg += 'Nimi puuttuu\n';
		if (!Validators.isValidEmail(notifyEmail)) errorMsg += 'Sähköposti ei ole validi.\n';
		if (notifyMessage == '') errorMsg += 'Viestiosa puuttuu\n';
		
		if (errorMsg != '')
		{
			alert(errorMsg);
			return;
		}
		
		//notify error (ajax)
		
		var data = {id : notifyId, email : notifyEmail, name : notifyName, message : notifyMessage};
		Loader.load('/marker/notifyerror',data,'Dialogues.notifyErrorCallback');
		
	},
	
	notifyErrorCallback : function(jsonData)
	{
		var win = this.currentWin;
		
		if (jsonData.data.status == 1)
	    {
	    	alert('Kiitos tiedoista.');
	    	Graphics.showGeneralView(win);
	    }
	    else
	    {
	    	alert('Tapahtui virhe ilmoituksen lähetyksessä.');
	    }
	    Loader.decreaseCallCount();
	},
	
    sendFeedback : function(diag,win)
    {
        
        var notifyName = $('#placeInfoNotifyErrorName').val();
        var notifyEmail = $('#placeInfoNotifyErrorEmail').val();
        var notifyMessage = $('#placeInfoNotifyErrorMessage').val();
        var notifyLat = $('#placeInfoNotifyErrorLat').val();
        var notifyLng = $('#placeInfoNotifyErrorLng').val();                
        //simple validation
        var errorMsg = '';
        
        if (notifyName == '') errorMsg += 'Nimi puuttuu\n';
        if (!Validators.isValidEmail(notifyEmail)) errorMsg += 'Sähköposti ei ole validi.\n';
        if (notifyMessage == '') errorMsg += 'Viestiosa puuttuu\n';
        
        if (errorMsg != '')
        {
            alert(errorMsg);
            return;
        }
        
        //notify error (ajax)
        
        var data = {lat : notifyLat, lng : notifyLng, email : notifyEmail, name : notifyName, message : notifyMessage};
        Loader.load('/marker/sendFeedback',data,'Dialogues.sendFeedbackCallback');
        
    },
    
    sendFeedbackCallback : function(jsonData)
    {
        
        if (jsonData.data.status == 1)
        {
            Graphics.hideModal();
            alert('Kiitos tiedoista.');

        }
        else
        {
            alert('Tapahtui virhe ilmoituksen lähetyksessä.');
        }
        Loader.decreaseCallCount();
    },	
	
	notifyComment : function(commentId)
	{
		var verify = confirm("Ilmoitus epäasiallisesta kommentista lähetetään ylläpidolle. Haluatko jatkaa?");
		if (!verify) return;
		
		//notify comment (ajax)
		var data = {id : commentId};
		Loader.load('/comment/notifycomment',data,'Dialogues.notifyCommentCallback');
	},
	
	notifyCommentCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	alert('Kiitos ilmoituksesta.');
	    }
	    else
	    {
	    	alert('Tapahtui virhe ilmoituksen lähetyksessä.');
	    }
	    Loader.decreaseCallCount();
	},

    sendLinkToFriend : function(diag,win)
    {
        this.currentWin = win;
        var notifyId = eval(diag).id;
        
        var notifyName = $('#' + win + 'SendLinkName').val();
        var notifyEmail = $('#' + win + 'SendLinkEmail').val();
        var notifyReceiver = $('#' + win + 'SendLinkReceiver').val();
        var notifyMessage = $('#' + win + 'SendLinkMessage').val();
        
        //simple validation
        var errorMsg = '';
        
        if (notifyName == '') errorMsg += 'Nimi puuttuu\n';
        if (!Validators.isValidEmail(notifyEmail)) errorMsg += 'Sähköposti ei ole validi.\n';
        if (!Validators.isValidEmail(notifyReceiver)) errorMsg += 'Vastaanottajan sähköposti ei ole validi.\n';
        if (notifyMessage == '') errorMsg += 'Viestiosa puuttuu\n';
        
        if (errorMsg != '')
        {
            alert(errorMsg);
            return;
        }
        
        //notify error (ajax)
        
        var data = {id : notifyId, email : notifyEmail, receiver : notifyReceiver, name : notifyName, message : notifyMessage};
        Loader.load('/marker/sendlinktofriend',data,'Dialogues.sendLinkToFriendCallback');
        
    },
    
    sendLinkToFriendCallback : function(jsonData)
    {
        var win = this.currentWin;
        
        if (jsonData.data.status == 1)
        {
            alert('Viestisi on lähetetty.');
            Graphics.showGeneralView(win);
        }
        else
        {
            alert('Tapahtui virhe viestin lähetyksessä.');
        }
        Loader.decreaseCallCount();
    },

	
	removeMarker : function()
	{
        var id = null;
		var verify = confirm("Haluatko varmasti poistaa kohteen?");
		if (!verify) return;
		
        switch(this.currentDialogue)
        {
            case "TargetInfoDialogue":
                id = TargetInfoDialogue.id;
                break;
            case "ServiceInfoDialogue":
                id = ServiceInfoDialogue.id;;
                break;
            case "ImageInfoDialogue":
                id = ImageInfoDialogue.id;
                break;
            case "AuthorityInfoDialogue":
                id = AuthorityInfoDialogue.id;
                break;
        }		
		
		//remove marker (ajax)
		var data = {id : id};
		Loader.load('/marker/removemarker',data,'Dialogues.removeMarkerCallback');
	},
	
	removeMarkerCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	//close buble and remove marker from map
			Graphics.hidePlaceInfo();
			MMap.updateMarkers();
			SidebarDialogue.refresh();
	    	alert('Kohde poistettu.');
	    	
	    }
	    else
	    {
	    	alert('Tapahtui virhe poistamisessa.');
	    }
	    Loader.decreaseCallCount();
	}
}


/******************************************************************************************************
 * VALIDATORS
 * 
 *******************************************************************************************************/
var Validators = {
	isValidURL : function(url) {
    	var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
    	if(RegExp.test(url))
    	{
        	return true;
    	}
    	else
    	{
        	return false;
    	}
    },
    
    isValidEmail : function(email) {
		
		//var RegExp = /^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+)*)@((((([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.)[\w]{2,4}|(((([0-9]){1,3}\.){3}([0-9]){1,3}))|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$/
        var RegExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    
    	if(RegExp.test(email)){
        	return true;
    	}
    	else 
    	{
        	return false;
    	} 
	}	
}

/********************************************************************************************************
 * SELECTIONS
 * 
 *******************************************************************************************************/
 
var Selection = {
 	kohde 			: true,
 	palvelu 		: true,
 	viranomaistieto : true,
 	valokuva 		: true	
}

/** ** ** ** ** ** ** ** ** ** ** ** **
 * Modal-window dialogue 
 */
 
var ModalDialogue = {
   /**
    * initialize generic modal
    */
    initialize : function() {
        $('#mlModal').jqm({

        });
    }
}	