/**
 * Script for waySearch.jsp view
 */

/*============ Globals =============*/
var marker = new Array(2);
var elemId = ["beginLocationName", "endLocationName"];
var inputs = new Array(2);
var loaded = null;
var send_load = null;
var startMarkerHtml = '<b>Punkt startowy</b><br/>Miejce wyjazdu - możesz przesuwać punkt<br/> w dowolne miejsce na mapie';
var endMarkerHtml = '<b>Punkt końcowy</b><br/>Cel podróży - możesz przesuwać punkt<br/> w dowolne miejsce na mapie';
var warningInfoHtml = '<span style="color: #FF0000;"><b>Nie wybrano drugiego punktu!</b></span>'
var map;

/*============= Functions ============*/

/**
 * Initialize map for selecting tow points
 * @return
 */
function initialize() {
	/* Check if map is loaded */	
	if(!loaded) { /* Load api and initialize on callback */
		if(send_load) return; /* Map is loading */
		send_load = true;
		/* Load map API */
		google.load('maps', '2', {'callback': function() { loaded = true; initialize(); } });
		return;
	}
    
	var mapCanvas = document.getElementById("map_canvas");
    inputs[0] = document.getElementById(elemId[0]);
    inputs[1] =	document.getElementById(elemId[1]);
    marker[0] = null;
    marker[1] = null;
    /* Initializing map */
    if (google.maps.BrowserIsCompatible() && (mapCanvas != null)) {
        map = new google.maps.Map2(mapCanvas);
        map.setCenter(new google.maps.LatLng(52.243778, 21.013069), 12);
        /* Adding starting point */
        google.maps.Event.addListener(map,"click", function(overlay,latlng) {     
        	map.closeInfoWindow();
        	if(!overlay) {
        		if(!marker[0]) {
            		var letterdIcon = encodeIconUrl(26*5+18);
            		marker[0] = new google.maps.Marker(latlng, {
						icon: letterdIcon,
						draggable: true,
						autoPan: false
					});
            		map.addOverlay(marker[0]);
            		marker[0].bindInfoWindowHtml(startMarkerHtml);
            		
            		var s = "" + latlng;
                    s = s.slice(1, s.length - 1);
                    inputs[0].value = "@" + s;
            		
                    google.maps.Event.addListener(marker[0], 'dragstart', function(latlng) {
            			map.closeInfoWindow();
            		});
                    
            		google.maps.Event.addListener(marker[0], 'dragend', function(latlng) {
            			var s = "" + latlng;
                        s = s.slice(1, s.length - 1);
                        inputs[0].value = "@" + s;
            		});
            		
            		google.maps.Event.trigger(marker[0], 'click');
            		
            	} else {
            		marker[0].setLatLng(latlng);
            		var s = "" + latlng;
                    s = s.slice(1, s.length - 1);
                    inputs[0].value = "@" + s;
            	}
            }
        });
        /* Adding ending point */
        google.maps.Event.addListener(map, "singlerightclick", function(point, src, overlay) {
        	map.closeInfoWindow();
        	if(!overlay) {
        		var latlng = map.fromContainerPixelToLatLng(point);
        		if(!marker[1]) {
            		var letterdIcon = encodeIconUrl(26*5+4);
            		marker[1] = new google.maps.Marker(latlng, {
						icon: letterdIcon,
						draggable: true,
						autoPan: false
					});
            		map.addOverlay(marker[1]);
            		marker[1].bindInfoWindowHtml(endMarkerHtml);
            		
            		var s = "" + latlng;
                    s = s.slice(1, s.length - 1);
                    inputs[1].value = "@" + s;
            		
                    google.maps.Event.addListener(marker[1], 'dragstart', function(latlng) {
            			map.closeInfoWindow();
            		});
                    
            		google.maps.Event.addListener(marker[1], 'dragend', function(latlng) {
            			var s = "" + latlng;
                        s = s.slice(1, s.length - 1);
                        inputs[1].value = "@" + s;
            		});
            		
            		google.maps.Event.trigger(marker[1], 'click');
            		
            	} else {
            		marker[1].setLatLng(latlng);
            		var s = "" + latlng;
                    s = s.slice(1, s.length - 1);
                    inputs[1].value = "@" + s;
            	}
        	}
        });
        
        map.addControl(new google.maps.LargeMapControl());
    }
}

/**
 * Setup calendar for selecting date (requires calendar.js)
 * @return
 */
function calendarSetup() {
	Calendar.setup({
        inputField     :    "f_date_b",       // id of the input field
        ifFormat       :    "%Y.%m.%d %H:%M", // format of the input field
        showsTime      :    true,             // will display a time selector
        button         :    "f_trigger_b",    // trigger for the calendar (button ID)
        singleClick    :    false,            // double-click mode
        step           :    1                 // show all years in drop-down boxes (instead of every other year as default)
    });
}
 
/**
 * Encodes icon url based on index and constructs icon
 * @param {Number} i
 * @return {GIcon} 
 */
function encodeIconUrl(i) {
 	/* Create base icon */
 	var baseIcon = new google.maps.Icon(G_DEFAULT_ICON);
 	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
 	baseIcon.iconSize = new google.maps.Size(20, 34);
 	baseIcon.shadowSize = new google.maps.Size(37, 34);
 	baseIcon.iconAnchor = new google.maps.Point(9, 34);
 	baseIcon.infoWindowAnchor = new google.maps.Point(9, 2);
 	/* Check index and color */
 	var index = i%26;
 	var color = Math.floor(i/26);
 	var base = 'marker';
 	switch(color) { /* Pickup color */
 		case 1:
 			base = 'marker_orange';
 			break;
 		case 2:
 			base = 'marker_yellow';
 			break;
 		case 3:
 			base = 'marker_purple';
 			break;
 		case 4:
 			base = 'marker_brown';
 			break;
 		case 5:
 			base = 'marker_green';
 			break;
 		case 6:
 			base = 'marker_white';
 			break;
 		case 7:
 			base = 'marker_black';	
 			break;			
 	} 
 	var letter = String.fromCharCode("A".charCodeAt(0) + index);
 	var letteredIcon = new google.maps.Icon(baseIcon);
 	letteredIcon.image = "http://www.google.com/mapfiles/"+base + letter + ".png";
 	return letteredIcon;
} 
 
/**
 * Trims string 
 * @param {String} str
 * @return {String} trimmmed string
 */
function trim(str) {
	return str.replace(/^\s+|\s+$/g,"");
}

/**
 * 
 * @return
 */
function validateInputs() {
	if(((marker[0] == null) && marker[1]) || ((marker[1] == null) && marker[0])) {
		if(marker[0]) map.openInfoWindowHtml(marker[0].getLatLng(), warningInfoHtml);
		else map.openInfoWindowHtml(marker[1].getLatLng(), warningInfoHtml);
		return false;
	}
	return true;
}

/**
 * 
 * @return
 */
function resetInputs() {
	var errDateText = document.getElementById('errDateText');
	var errLocText1 = document.getElementById('errLocText1');
	var errLocText2 = document.getElementById('errLocText2');

	if(errDateText) errDateText.innerHTML = '';
	if(errLocText1) errLocText1.innerHTML = '';
	if(errLocText2) errLocText2.innerHTML = '';

	if(marker[0]) {
		map.removeOverlay(marker[0]);
		google.maps.Event.clearInstanceListeners(marker[0]);
		marker[0] = null;
	}
	
	if(marker[1]) {
		map.removeOverlay(marker[1]);
		google.maps.Event.clearInstanceListeners(marker[1]);
		marker[1] = null;
	}

}
 
 