/* 	Copyright (c) 2009-2010 Cyberce S.A., version 0.2.0
* 	Uses the outstanding OpenLayers library. See: http://openlayers.org/
* 	Author: Arvanitis Thanassis (t.arvanitis@cyberce.gr)
*/

/*
* @requires ./OpenLayers.js
* @uses ./Controls/LoadingPanel.js (optionally)
*/

String.prototype.trim = function(str){return this.replace(/^\s*|\s*$/g,"");};

//(function() {
	/**
	* Namespace: MapServer
	* The MapServer object provides a namespace for all things MapServer
	*/
	window.MapServer = {

		GOOGLE_PRJ      		: new OpenLayers.Projection("EPSG:900913"),
		WGS84           		: new OpenLayers.Projection("EPSG:4326"),

		OL_THEME:               "/content/scripts/openlayers/theme/mapserver/openlayers.css",
		OL_IMG_PATH:            "/content/scripts/openlayers/img/",
		OL_IMG_ERROR_COLOR	:	"#E7FFC2", // or "transparent"

		//TODO: These attributes need to be passed as named arguments
		MAP_MIN_BOUNDS			:	new OpenLayers.Bounds(-1, -1, 1, 1),
		MAP_MAX_BOUNDS			:	new OpenLayers.Bounds(23.694,38.048,23.811,38.141), //western attica (municipality of acharnes)
		MAP_MIN_SCALE			:	6100,
		MAP_MAX_SCALE			:	350,
		MAP_STARTUP_SCALE		:	1100,
		MAP_SCALES				: [350,550,1100,2100,3100,4100,5100,6100],
		MAP_ICON_PATH:          "/content/scripts/openlayers/markers/",

		//TODO: Needs an advanced literal here {element:null,required:false|true}
		MAP_UI_ELEMENTS 		: {
			map				: null,
			featureLegend	: null,
			featureList		: null,
			featureCount	: null,
			projection		: null,
			scale			: null,
			mousePosition	: null
		},

		WMS_ENDPOINT				:	"/cgi-bin/mapserver.cgi?", //We use FastCGI of UMN MApserver
		WMS_MAPFILE					:	"/ms4w/MAPS/ACHARNES/map/acharnes.map",
		WMS_PROXY_HOST		: "proxy.aspx?url=", //not needed for local calls

		FEATURE_LOOKUP_TABLE: null,
		FEATURE_MAX_FETCH		: 15,
		FEATURE_SIZE_NORMAL 	: 16,
		FEATURE_SIZE_SELECTED   : 18,
		FEATURE_Z_INDEX 		: 100,

		map 					: null,
		wms						: null,
		POI						: null,
		selectCtrl				: null,
		selectQCtrl				: null,
		popup					: null
	};


//})();


MapServer.WMS_QUERY_URL = MapServer.WMS_ENDPOINT
+	"MAP="+ MapServer.WMS_MAPFILE
+	"&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=POI";

// init lookup table - using javascript object literals
MapServer.FEATURE_LOOKUP_TABLE = {
	"ΑΓΟΡΕΣ":{
		"COM" :{description:"ΕΜΠΟΡΙΚΟ ΚΕΝΤΡΟ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"shoppingmall.png"},
		"LAI" :{description:"ΛΑΙΚΗ ΑΓΟΡΑ",					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"supermarket.png"},
		"SUP" :{description:"SUPER MARKET", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"supermarket.png"},
		"KAT" :{description:"ΚΑΤΑΣΤΗΜΑ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"phones.png"},
		isdefault: false
	},
	"ΑΘΛΗΤΙΚΑ": {
		"STA" :{description:"ΣΤΑΔΙΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"soccer.png"},
		"GHP" :{description:"ΓΗΠΕΔΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"soccer.png"},
		"ATH" :{description:"ΑΘΛΗΤΙΚΟ ΚΕΝΤΡΟ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"basketball.png"},
		"IPP" :{description:"ΙΠΠΙΚΟΣ ΟΜΙΛΟΣ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"horseriding.png"},
		"GYM" :{description:"ΓΥΜΝΑΣΤΗΡΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"gym.png"},
		isdefault: false
	},
	"ΑΞΙΟΘΕΑΤΑ": {
		"ARX" :{description:"ΑΡΧΑΙΟΛΟΓΙΚΟΣ ΧΩΡΟΣ", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ancienttempleruin.png"},
		"SPH" :{description:"ΣΠΗΛΑΙΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"arch.png"},
		"AJI" :{description:"ΑΞΙΟΘΕΑΤΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ancientmonument.png"},
		isdefault: false
	},
	"ΑΤΜ": {
		"EUB" :{description:"EUROBANK-OPEN24", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"PRB" :{description:"PROBANK", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"AGT" :{description:"ΑΓΡΟΤΙΚΗ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"GNK" :{description:"ΓΕΝΙΚΗ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"ENK" :{description:"ΕΘΝΙΚΗ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"EMK" :{description:"ΕΜΠΟΡΙΚΗ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"LAH" :{description:"ΛΑΪΚΗ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"ALB" :{description:"ALPHA BANK", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"EFE" :{description:"EFG EUROBANK", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"MLB" :{description:"MILLENIUMBANK", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"KYR" :{description:"ΚΥΠΡΟΥ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"PES" :{description:"ΠΕΙΡΑΙΩΣ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		"ATM" :{description:"CITIBANK", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"ATM.png"},
		isdefault: false
	},
	"ΔΗΜΟΣ":{
		"SQR" :{description:"ΠΛΑΤΕΙΑ", 						isdefault:true, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"worldheritagesite.png"},
		"DYP" :{description:"ΔΗΜΟΤΙΚΕΣ ΥΠΗΡΕΣΙΕΣ", 		    isdefault:true, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"administration.png"},
		"DHM" :{description:"ΔΗΜΑΡΧΕΙΟ", 					isdefault:true, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"conference.png"},
		isdefault: true
	},
	"ΔΗΜΟΣΙΕΣ ΥΠΗΡΕΣΙΕΣ":{
		"EMB" :{description:"ΠΡΕΣΒΕΙΑ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"DIK" :{description:"ΔΙΚΑΣΤΗΡΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"YPO" :{description:"ΥΠΟΘΗΚΟΦΥΛΑΚΕΙΟ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"MIL" :{description:"ΣΤΡΑΤΟΠΕΔΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"military.png"},
		"CUS" :{description:"ΤΕΛΩΝΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"FIR" :{description:"ΠΥΡΟΣΒΕΣΤΙΚΗ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"TEB" :{description:"ΤΕΒΕ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"YPS" :{description:"ΥΠΟΥΡΓΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"EYD" :{description:"ΕΥΔΑΠ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"POL" :{description:"ΑΣΤΥΝΟΜΙΑ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"POS" :{description:"ΤΑΧΥΔΡΟΜΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"OAD" :{description:"ΟΑΕΔ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"OIK" :{description:"ΕΦΟΡΙΑ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"OTE" :{description:"ΟΤΕ", 							isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"DEH" :{description:"ΔΕΗ", 							isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"IKA" :{description:"ΙΚΑ", 							isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		"KEP" :{description:"Κ.Ε.Π.", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"findajob.png"},
		isdefault: false
	},
	"ΔΙΑΣΚΕΔΑΣΗ":{
		"BVG" :{description:"BILLIARDS-VIDEO GAMES", 	    isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"billiard.png"},
		"CBR" :{description:"CAFE BAR", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"coffee.png"},
		"BAR" :{description:"BAR-CLUB", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"club.png"},
		"CAF" :{description:"ΚΑΦΕΝΕΙΟ.", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"coffee.png"},
		"INT" :{description:"INTERNET CAFE", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"videogames.png"},
		isdefault: false
	},
	"ΔΙΑΦΟΡΑ":{
		"TOP" :{description:"ΤΟΠΩΝΥΜΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"smallcity.png"},
		"FYT" :{description:"ΘΕΡΜΟΚΗΠΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"agriculture.png"},
		"PLA" :{description:"ΠΑΙΔΙΚΗ ΧΑΡΑ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"playground.png"},
		"NO" :{description:"ΔΙΑΦΟΡΑ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"worldheritagesite.png"},
		isdefault: false

	},
	"ΕΚΠΑΙΔΕΥΣΗ":{
		"LYK" :{description:"ΛΥΚΕΙΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"school.png"},
		"GMN" :{description:"ΓΥΜΝΑΣΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"school.png"},
		"DMS" :{description:"ΔΗΜΟΤΙΚΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"school.png"},
		"NHP" :{description:"ΝΗΠΙΑΓΩΓΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"daycare.png"},
		"PST" :{description:"ΠΑΙΔΙΚΟΣ ΣΤΑΘΜΟΣ", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"playground.png"},
		"EJE" :{description:"ΕΞΕΤΑΣΤΙΚΟ ΚΕΝΤΡΟ", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"school.png"},
		"SEK" :{description:"Σ.Ε.Κ.", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"school.png"},
		"SCH" :{description:"ΣΧΟΛΕΙΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"school.png"},
		isdefault: false
	},
	"ΕΣΤΙΑΤΟΡΙΑ":{
		"BST" :{description:"BAR RESTAURANT", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurant.png"},
		"EKD" :{description:"ΑΙΘΟΥΣΕΣ ΕΚΔΗΛΩΣΕΩΝ", 		    isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurant.png"},
		"FFD" :{description:"ΚΡΕΠΕΡΙ-FAST FOOD", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"fastfood.png"},
		"CHS" :{description:"ΨΗΣΤΑΡΙΑ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurantkebab.png"},
		"PIZ" :{description:"PIZZERIA", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"pizza.png"},
		"EST" :{description:"ΕΣΤΙΑΤΟΡΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurant.png"},
		"MEZ" :{description:"ΜΕΖΕΔΟΠΩΛΕΙΟ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurant.png"},
		"PAF" :{description:"ΠΑΓΩΤΑ-ΒΑΦΛΕΣ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"icecream.png"},
		"TAB" :{description:"ΤΑΒΕΡΝΑ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurant.png"},
		"CAB" :{description:"ΨΑΡΟΤΑΒΕΡΝΑ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurantthai.png"},
		"PRT" :{description:"PIANO RESTAURANT", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurant.png"},
		"CRT" :{description:"CAFE RESTAURANT", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"coffee.png"},
		isdefault: false
	},
	"ΘΡΗΣΚΕΙΑ":{
		"CEM" :{description:"ΝΕΚΡΟΤΑΦΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"cemetary.png"},
		"CHR" :{description:"ΕΚΚΛΗΣΙΑ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"chapel.png"},
		"MON" :{description:"ΜΟΝΑΣΤΗΡΙ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"church.png"},
		isdefault: false
	},
	"ΜΕΤΑΦΟΡΕΣ":{
		"OSE" :{description:"ΣΙΔΗΡ\/ΚΟΣ ΣΤΑΘΜΟΣ", 		    isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"train.png"},
		"ARP" :{description:"ΑΕΡΟΔΡΟΜΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"airport.png"},
		"ELI" :{description:"ΕΛΙΚΟΔΡΟΜΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"helicopter.png"},
		isdefault: false
	},
	"ΜΗΧΑΝΟΚΙΝΗΤΑ":{
		"DIO" :{description:"ΔΙΟΔΙΑ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"customs.png"},
		"BOY" :{description:"ΒΟΥΛΚΑΝΙΖΑΤΕΡ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"car.png"},
		"PRA" :{description:"ΠΡΑΤΗΡΙΟ ΒΕΝΖΙΝΗΣ", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"gazstation.png"},
		"PAR" :{description:"ΧΩΡΟΙ ΣΤΑΘΜΕΥΣΕΙΣ", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"parking.png"},
		"KTE" :{description:"KTEΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"kteo.png"},
		"AMX" :{description:"ΑΜΑΞΟΣΤΑΣΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"mainroad.png"},
		"PRA" :{description:"ΕΛΙΚΟΔΡΟΜΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"mainroad.png"},
		isdefault: false
	},
	"ΠΟΛΙΤΙΣΜΟΣ":{
		"KN" :{description:"ΚΕΝΤΡΟ ΝΕΟΤΗΤΑΣ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"worldheritagesite.png"},
		"LAB" :{description:"ΒΙΒΛΙΟΘΗΚΗ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"library.png"},
		"MUS" :{description:"ΜΟΥΣΕΙΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"museum.png"},
		"CUL" :{description:"ΠΟΛΙΤΙΣΤΙΚΟ ΚΕΝΤΡΟ", 		    isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"worldheritagesite.png"},
		"SYL" :{description:"ΣΥΛΛΟΓΟΣ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"worldheritagesite.png"},
		isdefault: false
	},

	"ΤΟΥΡΙΣΜΟΣ":{
		"CAM" :{description:"CAMPING", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"camping.png"},
		"ORE" :{description:"ΟΡΕΙΒΑΤΙΚΟ ΚΑΤΑΦΥΓΙΟ", 	    isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"cave.png"},
		"HOT" :{description:"ΞΕΝΟΔΟΧΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"hotel.png"},
		"CHC" :{description:"ΠΑΙΔΙΚΕΣ ΚΑΤΑΣΚΗΝΩΣΕΙΣ",       isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"campingsite.png"},
		isdefault: false
	},
	"ΤΡΑΠΕΖΕΣ":{
		"EFG" :{description:"EFG EUROBANK", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"MLL" :{description:"MILLENIUMBANK", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"KYP" :{description:"ΚΥΠΡΟΥ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"PEI" :{description:"ΠΕΙΡΑΙΩΣ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"ALP" :{description:"ALPHA BANK", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"EUR" :{description:"EUROBANK-OPEN24", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"PRO" :{description:"PROBANK", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"GEN" :{description:"ΓΕΝΙΚΗ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"EUN" :{description:"ΕΘΝΙΚΗ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"EMP" :{description:"ΕΜΠΟΡΙΚΗ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"LAK" :{description:"ΛΑΙΚΗ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"ATT" :{description:"ΑΤΤΙΚΑ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"AGR" :{description:"ΑΓΡΟΤΙΚΗ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		isdefault: false
	},
	"ΥΓΕΙΑ":{
		"KAP" :{description:"ΚΑΠΗ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"seniorsite.png"},
		"IAD" :{description:"ΙΔΙΩΤΙΚΗ ΚΛΙΝΙΚΗ", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"hospital.png"},
		"HOS" :{description:"ΝΟΣΟΚΟΜΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"hospital.png"},
		"IAC" :{description:"ΔΙΑΓΝΩΣΤΙΚΟ ΚΕΝΤΡΟ", 		    isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"schrink.png"},
		"PHA" :{description:"ΦΑΡΜΑΚΕΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"drugs.png"},
		isdefault: false
	},
	"ΧΡΗΣΙΜΑ":{
		"THL" :{description:"ΤΗΛΕΦΩΝΙΚΟΣ ΘΑΛΑΜΟΣ", 			isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"text.png"},
		"TR" :{description:"ΤΡΑΠΕΖΑ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"bankeuro.png"},
		"PYR" :{description:"ΠΥΡΟΣΒΕΣΤΙΚΟΣ ΚΡΟΥΝΟΣ", 		isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"firemen.png"},
		isdefault: false
	},
	"ΨΥΧΑΓΩΓΙΑ":{
		"KAZ" :{description:"ΚΑΖΙΝΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"casino.png"},
		"KTH" :{description:"ΚΤΗΜΑ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"farm.png"},
		"THE" :{description:"ΘΕΑΤΡΟ", 						isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"theater.png"},
		"CIN" :{description:"ΚΙΝΗΜΑΤΟΓΡΑΦΟΣ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"cinema.png"},
		"RES" :{description:"ΕΣΤΙΑΤΟΡΙΟ", 					isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"restaurant.png"},
		"NLF" :{description:"ΝΥΧΤΕΡΙΝΗ ΖΩΗ", 				isdefault:false, isvisible:true, externalGraphic: MapServer.MAP_ICON_PATH+"club.png"},
		isdefault: false
	}
};



/**
* Constant: VERSION_NUMBER
*/
MapServer.VERSION_NUMBER="MapServer 2.8 -- $Revision: 9492 $";

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
* Function: getElement
* Calls Openlayers.Util.getElement (which implements the the old $() from prototype)
*/
MapServer.getElement = function(id) {
	return document.getElementById(id);
};

MapServer.showTotalFeatures = function(num) {
	if (num)
	return (num>1)? 'Βρέθηκαν '+num + ' σημεία': 'Βρέθηκε '+num + ' σημείο';
	else
		return '';
	};

	MapServer.getFeatureFromTable = function(code) {

		var c;
		var feature= {description:"", isdefault:false, isvisible:true,  externalGraphic: MapServer.MAP_ICON_PATH+"icon55.png" }; //default
		for(var cat in MapServer.FEATURE_LOOKUP_TABLE){
			c=MapServer.FEATURE_LOOKUP_TABLE[cat];
			if  (c[code] !=null){
				return c[code];
				break;
			}
		}
		return feature;
	};

	MapServer.getLookupTable = function() {

		var lookup = {};
		var el,c;

		for(var cat in MapServer.FEATURE_LOOKUP_TABLE){

			c=MapServer.FEATURE_LOOKUP_TABLE[cat];

			for(var key in c){
				var el=MapServer.getElement('feat$' + key);

				if (el){
					fSel=el.checked;
					if (fSel){
						lookup[key]={description: c[key].description,  externalGraphic: c[key].externalGraphic};
					}
				}
			}
		}
		return lookup;

	};


	MapServer.moveTo = function(x,y) {
		MapServer.map.setCenter(new OpenLayers.LonLat(x, y));
		MapServer.map.zoomToScale(MapServer.MAP_STARTUP_SCALE);
		//MapServer.map.zoomToScale(MapServer.MAP_MAX_SCALE);
	};


	MapServer.getFeatureByValue = function(layer,name,value) {
		var features = layer.features;
		for(var i=0; i<features.length; i++) {
			var feature = features[i];
			if(feature.attributes[name] == value) {
				return feature;
			}
		}
	};


	/**
	* Function: checkParams
	* This is a modified version of the old $() from prototype
	* we use named arguments
	*/

	MapServer.checkParams = function(params) {
		for (var name in params){
			/*
			* name : parameter's name
			* params[name]: parameter's value
			*/
			MapServer.MAP_UI_ELEMENTS[name]	= MapServer.getElement(params[name]);
			if (MapServer.MAP_UI_ELEMENTS[name]==null) return false;
		}

		return true;

	};


	MapServer.getCurrentRadius = function() {
		if (MapServer.map)
		return (MapServer.MAP_MAX_SCALE < MapServer.map.getScale())? Math.round((MapServer.FEATURE_SIZE_NORMAL * MapServer.MAP_MAX_SCALE) / MapServer.map.getScale())+6 : MapServer.FEATURE_SIZE_NORMAL;
		else
			return MapServer.FEATURE_SIZE_NORMAL;
		};

		MapServer.getStyle = function(selected) {
			return new OpenLayers.Style({ pointRadius: (selected)? MapServer.FEATURE_SIZE_SELECTED : MapServer.getCurrentRadius() });
		};

		//Proportional Symbol Mapping
		MapServer.defaultStyle	= function() {

			return new OpenLayers.Style({
				cursor :"pointer",
				graphicZIndex: MapServer.FEATURE_Z_INDEX,
				pointRadius: "${radius}" // using context.getSize(feature)
				//display:"${display}"
			}, {
				context: {
					radius: function(feature) { return MapServer.getCurrentRadius(); },
					display: function(feature){

						var key=feature.attributes['Code'];
						if (key)
						return (MapServer.getElement('feat$' + key).checked)?'':'none';
						else
							return 'none';
						}
					}
				});

			};


			MapServer.styleMap  = function() {
				return new OpenLayers.StyleMap({
					"default"	: MapServer.defaultStyle(),
					"select"	: MapServer.getStyle(true),
					"unselect": MapServer.getStyle(false)
				});
			};


			/* pass some usefull parameters to OpenLayers */
			MapServer.OLConfig = function() {

				// it's good to have re-tries for tiles not delivered on first request
				OpenLayers.IMAGE_RELOAD_ATTEMPTS 			= 3;
				OpenLayers.Util.onImageLoadErrorColor	= MapServer.OL_IMG_ERROR_COLOR;
				//OpenLayers.ProxyHost									= MapServer.WMS_PROXY_HOST;
				OpenLayers.Theme   										= MapServer.OL_THEME;
				OpenLayers.ImgPath     								= MapServer.OL_IMG_PATH;

			};


			MapServer.initMap = function() {

				var mapOptions = {
					scales						: MapServer.MAP_SCALES,
					minResolution			: "auto",
					maxResolution			: "auto",
					minExtent					:	MapServer.MAP_MIN_BOUNDS,
					maxExtent					: MapServer.MAP_MAX_BOUNDS,
					restrictedExtent 	: MapServer.MAP_MAX_BOUNDS,
					projection				: MapServer.WGS84,

					controls: [
					new OpenLayers.Control.LoadingPanel(),
					new OpenLayers.Control.MousePosition({ div: MapServer.MAP_UI_ELEMENTS.mousePosition, numdigits: 5 }),
					new OpenLayers.Control.Scale(MapServer.MAP_UI_ELEMENTS.scale.id),
					new OpenLayers.Control.Navigation({ zoomWheelEnabled: true, handleRightClicks: true}),
					new OpenLayers.Control.PanZoomBar({zoomWorldIcon:true})
					],

					//fractionalZoom		: true,
					minScale					: MapServer.MAP_MIN_SCALE,
					maxScale					: MapServer.MAP_MAX_SCALE
				};

				MapServer.map = new OpenLayers.Map(MapServer.MAP_UI_ELEMENTS.map.id, mapOptions);


				// add rules from the above lookup table, with the keyes mapped to
				// the "Code" property of the features, for the "default" intent
				var activeStyleMap=MapServer.styleMap();
				activeStyleMap.addUniqueValueRules("default", "Code", MapServer.getLookupTable());

				// display the map projection
				MapServer.MAP_UI_ELEMENTS.projection.innerHTML = MapServer.map.projection;

				// WMS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				MapServer.wms = new OpenLayers.Layer.WMS("Base Layers",MapServer.WMS_ENDPOINT,
				{
					layers				:	"Roads,Blocks", //BusPOI
					map						:	MapServer.WMS_MAPFILE,
					transparent		:	true,
					format				:	"image/gif"
				},
				{
					isBaseLayer							: true,
					singleTile							: false,
					gutter									:	0,
					displayInLayerSwitcher	:	false,
					extractStyles 					: false,
					visibility							:	true
				}
				);

				MapServer.map.addLayer(MapServer.wms);
				MapServer.map.zoomToMaxExtent();


				// POI ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				MapServer.POI = new OpenLayers.Layer.Vector("POI", {
					//strategies: [new OpenLayers.Strategy.Fixed()],
					strategies: [new OpenLayers.Strategy.BBOX()],
					protocol: new OpenLayers.Protocol.HTTP({
						url: MapServer.WMS_ENDPOINT,
						headers: { "Content-Type": "text/xml; charset=iso-8857-9" },
						params: {
							map				:	MapServer.WMS_MAPFILE,
							version		: "1.0.0",
							typename	: "POI",
							service		: "WFS",
							request		: "GetFeature",
							srs				: "EPSG:4326"
						},
						format: new OpenLayers.Format.GML()
					}),

					//isFixed:false,
					//isVector:false,
					styleMap					: activeStyleMap,
					isBaseLayer				: false,
					extractStyles			: false,
					extractAttributes	: false,
					rendererOptions		: {yOrdering: true},
					visibility				:	true
				});

				//SEE:http://geosysin.iict.ch/trac/wiki/OlMap/Tutorial
				//http://www.microimages.com/ogc/wfs/earthquakes.htm

				// Enable feature selection
				MapServer.selectCtrl = new OpenLayers.Control.SelectFeature(MapServer.POI, {hover:false});
				MapServer.map.addControl(MapServer.selectCtrl);
				MapServer.selectCtrl.activate();

				MapServer.POI.onFeatureInsert= function(feature) {
					//MapServer.MAP_UI_ELEMENTS.featureCount.innerHTML=MapServer.showTotalFeatures(feature.layer.features.length);
				}

				MapServer.POI.events.on({
					'featureselected'		: MapServer.onFeatureSelect,
					'featureunselected'	: MapServer.onFeatureUnselect

				});

				//add layer
				MapServer.map.addLayer(MapServer.POI);
				MapServer.map.events.register("movestart", MapServer.map, function() {
					if (typeof (MapServer.POI.selectedFeatures[0]) !='undefined'){
						MapServer.POI.events.triggerEvent('featureunselected',  {'feature': MapServer.POI.selectedFeatures[0]});
					}
				});

				///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

				//refresh map (??)
				MapServer.map.moveTo(new OpenLayers.LonLat(23.740,38.074));
				
			};


			MapServer.onFeatureSelect = function(evt) {

				var feature = evt.feature;

				if (feature) {

					var attr	=	feature.attributes;
					var icon	=	MapServer.getFeatureFromTable(attr["Code"]).externalGraphic;

					var html =  '<div style="float:left"><img src="'+icon+'" border="0" alt="" \/><\/div>'
					+'<div style="float:left;">'+( (attr["Name"])?'<h1 style="border:0px; padding:0px;">'+attr["Name"]+'<\/h1>':'' )+'<\/div>'
					+ '<hr style="clear:both" \/>'
					+ '<div style="padding:2px">'
					+ ( (attr["Address"])?attr["Address"]:'' )
					+ '<br \/>'
					+ ( (attr["Descriptio"])?attr["Descriptio"]:'' )
					+ '<\/div>';


					MapServer.popup = new OpenLayers.Popup.AnchoredBubble("featurePopup",
					feature.geometry.getBounds().getCenterLonLat(),
					new OpenLayers.Size(180,150),
					html,
					null, false, MapServer.onPopupClose
					);

					feature.popup = MapServer.popup;
					feature.popup.setBackgroundColor("#BBCCFF");
					feature.popup.setBorder(10);
					MapServer.popup.feature = feature;

					MapServer.map.addPopup(MapServer.popup);

				}
			};

			MapServer.onFeatureUnselect = function(evt) {

				try {
					var feature = evt.feature|| evt;
					if (feature.popup) {
						MapServer.popup.feature = null;
						MapServer.map.removePopup(feature.popup);
						feature.popup.destroy();
						feature.popup = null;
					}
				}
				catch(e){ /* ignore */ }
			};



			MapServer.onFeaturesAdded = function(evt) {
				//MapServer.MAP_UI_ELEMENTS.featureCount.innerHTML =MapServer.showTotalFeatures(MapServer.POI.features.length);
			};

			MapServer.onPopupClose = function(evt) {
				try{
					// 'this' is the popup.
					MapServer.selectCtrl.unselect(this.feature);
				}
				catch(e){}
			};

			MapServer.checkValues = function(attribute,val) {
				return (attribute && (attribute.indexOf(val)!=-1))? true : false;
			};

			MapServer.queryFeaturesLocal = function(val) {

				val=val.trim().toUpperCase();

				MapServer.MAP_UI_ELEMENTS.featureList.innerHTML ='Αναζήτηση σε εκρεμότητα. Παρακαλώ περιμένετε..';
				var lookup = {};
				var attributeFound,featureFound;

				var foundList = new Array();

				var features = MapServer.POI.features;

				var ft,fn,fa,f,q;
				var fHtml			=	'';
				var fCount		=	0;
				featureFound	=	false;
				//	MapServer.getElement('debug').innerHTML='';

				for(var i=0; i<features.length; i++) {

					var feature 		= features[i];
					var attributes	=	feature.attributes;

					feature.attributes["visibility"] = "visible"; //default

					attributeFound	=	false;

					for(var key in attributes){
						switch (key.toUpperCase()){
							case "NAME":
							case "ADDRESS":
							case "DESCRIPTIO":
							if (MapServer.checkValues(attributes[key],val)) {
								attributeFound=true;
							}
						}
					}

					if (attributeFound){
						fCount++;
						featureFound=true;
						id	=	attributes['FeatId1'];

						fn	=	feature.attributes["Name"];
						fa	=	feature.attributes["Address"];
						g		=	feature.geometry;
						f		=	((fn!=null)?fn:'Άγνωστο') + ' ' +((fa!=null)?fa: '');

						ft	=	MapServer.getFeatureFromTable(attributes["Code"]);

						fHtml +='<li><img src="'+ft.externalGraphic+'" alt="" width="16" height="16" border="0" \/>&nbsp;<a href="javascript:void(0)" onclick="MapServer.moveTo('+g.x+','+g.y+')">'+ f +'<\/a></\li>';


						lookup[id]={description: ft.description, externalGraphic: ft.externalGraphic};
					}

				} //for

				if (featureFound){

					var queryStyleMap = MapServer.styleMap();
					queryStyleMap.addUniqueValueRules("default", "FeatId1", lookup);

					var vlyr = MapServer.map.layers[1];
					vlyr.styleMap = queryStyleMap;
					var objFs = vlyr.features;

					for(var i=0;i<objFs.length;i++)
					vlyr.drawFeature(objFs[i]);
				} else {
					fHtml='<span style="color:red">Δεν βρέθηκαν σημεία ενδιαφέροντος</span>';
				}

				MapServer.MAP_UI_ELEMENTS.featureList.innerHTML='<ul id="featureResults">'+fHtml+'<\/ul>';
				MapServer.MAP_UI_ELEMENTS.featureCount.innerHTML=MapServer.showTotalFeatures(fCount);

			};

			MapServer.featuresReset = function() {
				MapServer.MAP_UI_ELEMENTS.featureList.innerHTML="";
				MapServer.MAP_UI_ELEMENTS.featureCount.innerHTML="";
				MapServer.toggleSelections();
			};


			MapServer.toggleSelections = function(code,el) {

				var selectionStyleMap = MapServer.styleMap();
				selectionStyleMap.addUniqueValueRules("default", "Code", MapServer.getLookupTable());

				var vlyr = MapServer.map.layers[1];
				vlyr.styleMap = selectionStyleMap;

				var objFs = vlyr.features;

				for(var i=0;i<objFs.length;i++)
				vlyr.drawFeature(objFs[i]);

			};

			MapServer.toggleSelectionCategory = function(category,checked) {

				// (de)activate fetaures per category
				var el;
				var c=MapServer.FEATURE_LOOKUP_TABLE[category];
				for(var key in c){
					el=MapServer.getElement('feat$'+ key);
					if (el) el.checked=checked;
				}
				// refresh map
				MapServer.toggleSelections();
			};


			MapServer.initSelections = function() {
				var html='';
				var c;
				for(var cat in MapServer.FEATURE_LOOKUP_TABLE){
					c=MapServer.FEATURE_LOOKUP_TABLE[cat];
					html += '<div style="clear:both"><\/div><div class="featureLegentGroupList">'
					+	'<input type="checkbox" '+ ((c.isdefault)?'checked="checked"':'') + ' onclick="MapServer.toggleSelectionCategory(\'' + cat + '\',this.checked)">'
					+	cat+'<\/div>'
					+'<div style="clear:both"><\/div>';

					for(var key in c){
						if (key!='isdefault'){
							html += '<div class="featureLegentList"><img src="' + c[key].externalGraphic + '" border="0" width="16" height="16"  \/>'
							+ '<input id="feat$' + key + '" type="checkbox" '+ ((c[key].isdefault)?'checked="checked"':'') + ' onclick="MapServer.toggleSelections()">'
							+ '<label for="feat$' + key + '">' + c[key].description + '<\/label>'
							+ '<\/div>';
						}
					}
				}

				MapServer.MAP_UI_ELEMENTS.featureLegend.innerHTML=html;

			};


			/* application bootstrapper */
			MapServer.initApp = function(args) {

				if (!MapServer.checkParams(args)) {
					alert('Please provide all the required parameters!');
					return false;
				}

				// configure Openlayers
				MapServer.OLConfig();

				//initialise feature selections
				MapServer.initSelections();
				//initialise map
				MapServer.initMap();
			};

			// application startup
			//OpenLayers.Event.observe(window, "load", MapServer.initApp);
