

function fnGetMap(init) {

	// Remove point to add them later
	$jq("#jqContextMenu").hide();
	$jq("#jqContextMenu + div").hide();
	
	fnRemoveAllPlacemarks();
	fnRemovAllPOI();
	$jq("#tmpnavfrom").hide();
	$jq("#tmpnavto").hide();
	
	var command = fnGetMapcommandCont();

	if (init) command = 'RESET';

	//alert(command);
	//Reset address, x, y
	
	var addrId = '', navFrom = '', navTo = '', navFPointX='', navFPointY='', navTPointX='', navTPointY='';

    if( (bZoomAddress && command != 'NONE') || command == 'ZOOMADDRESS' ) {
        addrId = fnGetAddressId();
    }

    if( (bZoomNavigation && command != 'NONE') || command == 'ZOOMNAVIGATION' ) {
        navFrom = fnGetNavFrom();
        navTo = fnGetNavTo();
        navFPointX = fnGetNavPointFromX();
        navFPointY = fnGetNavPointFromY();
        navTPointX = fnGetNavPointToX();
        navTPointY = fnGetNavPointToY();
    }
    
	var poiid = fnGetSession('poiid');
    if(init && poiid!='') {
		fnSetMapPOI(poiid);
		command = "ZOOMPOINT";
		$jq(mapcommandCont).val("ZOOMPOINT");
    }
	
	reqCount++;
	var	dt =	"action=getMap" +
				"&mapDomain=" + mapUIPath +
				"&type=MAP" +
				"&mapcode=" + mapCode +
				"&command=" + command +
				"&AddressID=" + addrId +
				"&zoomscale=1" +
				"&width=" + fnGetContWidth() +
				"&Heigth=" + fnGetContHeight() +
				"&map_x=" + fnGetMapx() +
				"&map_y=" + fnGetMapy() +
				"&top=" + fnGetMaptop() +
				"&bottom=" + fnGetMapbottom() +
				"&Left=" + fnGetMapleft() +
				"&right=" + fnGetMapright() +
				"&map_x2=" + fnGetMapx2() +
				"&map_y2=" + fnGetMapy2() +
				"&NavAddressFrom=" + navFrom +
				"&NavAddressto=" + navTo +
				"&NavPointZoom=" + fnGetNavPoint() +
				"&NavFromX=" + navFPointX +
				"&NavFromY=" + navFPointY +
				"&NavToX=" + navTPointX +
				"&NavToY=" + navTPointY +
//				"&DisplayCategory=" + fnGetPOICategories() +
                "&pointofinterest=" + fnGetMapPOI() +
                "&navpofrom=" + fnGetMapPOIFrom() +
                "&navpoto=" + fnGetMapPOITo();
//	alert(dt);

	fnGetMapImage(dt, init);

    if( initTool == "#mt_pan" && init ) {
		fnSetTool("PAN");
        enableImgAreaSelect(false);
		fnEnableDraggable(true);
	}

}

function fnGetMapImage(dt, init) {
//alert('call');
//alert($jq(mapCont).html());
//	var t = "";

	// Request history /*Now WORKING*/
	requestStack.push(dt);

	if( $jq("#geomaticmap") )
		var t = "<img id='tmpgeomaticmap' src='" + $jq("#geomaticmap").attr("src") + "' />";
	$jq("#tmpMapbox").html(t);
	$jq("#tmpMapbox").css("display", "block");
	$jq("#tmpMapbox").animate({opacity: 1}, 1);

	$jq("#tmpgeomaticmap").css("position", "absolute");
	$jq("#tmpgeomaticmap").css("top", $jq("#geomaticmap").css("top"));
	$jq("#tmpgeomaticmap").css("left", $jq("#geomaticmap").css("left"));
	//$jq(mapCont).animate({opacity: 0}, 1);
	//$jq(mapCont).css("display", "none");
	$jq("#mapModalBox").css("display", "block");

	var mapContW = fnGetContWidth();
	var mapContH = fnGetContHeight();
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;
	var action = fnGetMapcommandCont();
	
	if( $jq("#geomaticmap") && !init) {
        if(action == 'ZOOMIN') {
    		$jq("#tmpgeomaticmap").animate({
    			marginLeft: -(fnGetMapx()/2),
    			marginTop: -(fnGetMapy()/2),
    			width: "150%",
    			height: "150%",
    			opacity: 100
    		}, 2000 );
        }
        else if(action == 'ZOOMOUT') {
        	//$jq("#geomaticmap").fadeOut("slow");
    		$jq("#tmpgeomaticmap").animate({
    			marginLeft: (fnGetMapx()/2),
    			marginTop: (fnGetMapy()/2),
    			width: "50%",
    			height: "50%",
    			opacity: 100
    		}, 2000 );
        } 
	}

	//$jq(mapCont).fadeOut("fast");

	$jq("#txarequest").html(dt);
	
	$jq.ajax({
		type: "GET",
		url: "upfiles/File/source/connectors/mapgeneral.conn.php",
		data: dt,
		cache: true,
		//queue: "getmapimage",
		//cancelExisting: true,
		success: function(response){
			var xmlDoc;
			//$jq("#mapbox").html(response);
			try //Internet Explorer
			{
				xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async="false";
				xmlDoc.loadXML(response);
			}
			catch(e)
			{
				try //Firefox, Mozilla, Opera, etc.
				{
					parser=new DOMParser();
					xmlDoc=parser.parseFromString(response,"text/xml");
				}
				catch(e)
				{
					alert(e.message);
					return;
				}
			}
//alert(response);
			$jq(mapResponse).val(response);
			var maprestmp = response.split("|");
			if( maprestmp[0] == -1 ) { // Session expired
                window.location = "index.php?link=login.php";
                return;
            }

//			alert(response);
			var mapImage = '';
			if(xmlDoc && xmlDoc.getElementsByTagName("mapimage")[0]) {
				mapImage = xmlDoc.getElementsByTagName("mapimage")[0].childNodes[0].nodeValue;
			}
			else {
				if(retryCount <= refreshRetry) {
					retryCount += 1;
					fnGetMapImage(dt, true);

				}
				else {
					alert("An error occured while loading map. Please refresh the page...");
					return;
				}
			}
			var mapTop = xmlDoc.getElementsByTagName("Top")[0].childNodes[0].nodeValue;
			var mapBottom = xmlDoc.getElementsByTagName("Bottom")[0].childNodes[0].nodeValue;
			var mapLeft = xmlDoc.getElementsByTagName("Left")[0].childNodes[0].nodeValue;
			var mapRight = xmlDoc.getElementsByTagName("Right")[0].childNodes[0].nodeValue;
			var zoomlevel = xmlDoc.getElementsByTagName("zoomlevel")[0].childNodes[0].nodeValue;
			//alert(mapimage);

			if(fnGetSession('wsscmp_loginrequired')==1)
            	fnGetMapPlacemarks(mapTop, mapLeft, mapBottom, mapRight);
            fnGetMapPointofinterests(mapTop, mapLeft, mapBottom, mapRight, zoomlevel);

			// Set init Vars for navi
			if(fnGetMapleft() == '' &&
               fnGetMapright() == '' &&
               fnGetMaptop() == '' &&
               fnGetMapbottom() == '') {
               
               /*initLeft = mapLeft;
               initRight = mapRight;
               initTop = mapTop;
               initBottom = mapBottom;*/
               
            }

			var res = "<img id='geomaticmap' src='" + mapImageDomain + mapImage + "' />";
			//alert(res);
			//return res;
			//$jq(mapCont).css("background", "url(" + mapDomain + mapImage + ") no-repeat");

			$jq(mapCont).html(res);
			//$jq(mapCont).animate({opacity: 1}, 1000);
			//$jq(mapCont).fadeIn(3000, 1);
			$jq(maptopCont).val(mapTop);
			$jq(mapbottomCont).val(mapBottom);
			$jq(mapleftCont).val(mapLeft);
			$jq(maprightCont).val(mapRight);
			fnSetZoomlevel(zoomlevel);
			
			//$jq("#tmpMapbox").fadeOut("fast");
			$jq(mapCont).animate({opacity: 1}, 400 );
			$jq("#tmpMapbox").animate({opacity: 0}, 400, '', function(){
				$jq("#tmpMapbox").css("display", "none");
				$jq("#mapModalBox").css("display", "none");
			});

			// Set directions
			if( xmlDoc.getElementsByTagName("DIRECTIONS")[0] != null /*&& lastCommand != 'NONE'*/) {
				fnBuildandShowDirections(xmlDoc);
				if(action=='ZOOMNAVIGATION') {
					navigationTmpImage = res;
					navigationTmpTop = mapTop;
					navigationTmpLeft = mapLeft;
					navigationTmpBottom = mapBottom;
					navigationTmpRight = mapRight;
					navigationTmpZoomlevel = zoomlevel;
				}
			}
			else {
				if(action=='ZOOMNAVIGATION')
					alert("Navigation path not found!");
			}

			if( xmlDoc.getElementsByTagName("pointofInterest")[0] != null) {
				var poigisid = xmlDoc.getElementsByTagName("pointofInterest")[0].getAttribute("id");
				var catid = xmlDoc.getElementsByTagName("pointofInterest")[0].getAttribute("catid");

				//if(action=='ZOOMPOINT')
				fnGetMapOnePointofinterest(poigisid, catid, action);
			}

			// Get Nav From && To points and show the icons
			if( bNavFromExists ) {
				fnShowNavFromPoint();
			}
			if( bNavToExists ) {
				fnShowNavToPoint();
			}
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}
	});
	
}

function fnGetMapPlacemarks(vTop, vLeft, vBottom, vRight) {
	var mapContW = fnGetContWidth();
	var mapContH = fnGetContHeight();
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;
	
	var	dt =	"action=getMapPlacemarks" +
				"&mapDomain=" + mapUIPath +
				"&type=MAP" +
				"&mapcode=" + mapCode +
				"&command=getMap" +
				"&zoomscale=1" +
				"&top=" + vTop +
				"&bottom=" + vBottom +
				"&left=" + vLeft +
				"&right=" + vRight +
				"&width=" + fnGetContWidth() +
				"&Heigth=" + fnGetContHeight();
	$jq.ajax({
		type: "GET",
		url: "upfiles/File/source/connectors/mapPlacemark.conn.php",
		data: dt,
		cache: true,
		queue: "fnGetMapPlacemarks",
		cancelExisting: true,
		success: function(response){
			var xmlDoc;
			//$jq("#mapbox").html(response);
			try //Internet Explorer
			{
				xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async="false";
				xmlDoc.loadXML(response);
			}
			catch(e)
			{
				try //Firefox, Mozilla, Opera, etc.
				{
					parser=new DOMParser();
					xmlDoc=parser.parseFromString(response,"text/xml");
				}
				catch(e)
				{
					alert(e.message);
					return;
				}
			}
			
			var maprestmp = response.split("|");
			if( maprestmp[0] == -1 ) { // Session expired
                window.location = "index.php?link=login.php";
                return;
            }

			var points = xmlDoc.getElementsByTagName('point');
			var id='', tmpid = '';
			var tmpx='', tmpy='', comment='', realx='', realy='';
			var ptimg='';
			var userserial=0, companyserial=0, useraccesslevel='';
			//var mapPtEdit = new mapPoint(0, 0);
			var mapPlm = null;
			for (i=0;i<points.length;i++)
			{
				id = points[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue;
				tmpid = "#pinpoint" + id;
				tmpx = points[i].getElementsByTagName("AREAX")[0].childNodes[0].nodeValue;
				tmpy = points[i].getElementsByTagName("AREAY")[0].childNodes[0].nodeValue;
				putitle = points[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue;
				comment = points[i].getElementsByTagName("COMMENT")[0].childNodes[0].nodeValue;
				realx = points[i].getElementsByTagName("X")[0].childNodes[0].nodeValue;
				realy = points[i].getElementsByTagName("Y")[0].childNodes[0].nodeValue;
				ptimg = points[i].getElementsByTagName("PTIMG")[0].childNodes[0].nodeValue;
				ptdesign = points[i].getElementsByTagName("DESIGNFILE")[0].childNodes[0].nodeValue;
				userserial = points[i].getElementsByTagName("USERSERIAL")[0].childNodes[0].nodeValue;
				companyserial = points[i].getElementsByTagName("COMPANYSERIAL")[0].childNodes[0].nodeValue;
				useraccesslevel = points[i].getElementsByTagName("USERACCESSLEVEL")[0].childNodes[0].nodeValue;
				
				mapPlm =  new mapPlacemark(
					{
						"x" : tmpx,
						"y" : tmpy,
						"id" : id,
						"img" : ptimg,
						"ptitle" : putitle,
						"comment" : comment,
						"design" : ptdesign,
						"userserial" : userserial,
						"useraccesslevel" : useraccesslevel,
						"companyserial" : companyserial,
						"realx" : realx,
						"realy" : realy
					}
				);

				mapPlm.create();
			}
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}
	});
}

function fnGetMapPointofinterests(vTop, vLeft, vBottom, vRight, vZoomlevel) {
	var mapContW = fnGetContWidth();
	var mapContH = fnGetContHeight();
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;
	
	var	dt =	"action=getMapPointofinterests" +
				"&mapDomain=" + mapUIPath +
				"&type=MAP" +
				"&mapcode=" + mapCode +
				"&command=getMap" +
				"&zoomscale=1" +
				"&top=" + vTop +
				"&bottom=" + vBottom +
				"&left=" + vLeft +
				"&right=" + vRight +
				"&width=" + fnGetContWidth() +
				"&Heigth=" + fnGetContHeight() +
				"&DisplayCategory=" + fnGetPOICategories() +
                "&pointofinterest=" + fnGetMapPOI() +
                "&zoomlevel=" + vZoomlevel;
    //alert(dt); 

	$jq.ajax({
		type: "GET",
		url: "upfiles/File/source/connectors/mapPOI.conn.php",
		data: dt,
		cache: true,
		queue: "fnGetMapPointofinterests",
		cancelExisting: true,
		success: function(response){
			var xmlDoc;
			//$jq("#mapbox").html(response);
			try //Internet Explorer
			{
				xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async="false";
				xmlDoc.loadXML(response);
			}
			catch(e)
			{
				try //Firefox, Mozilla, Opera, etc.
				{
					parser=new DOMParser();
					xmlDoc=parser.parseFromString(response,"text/xml");
				}
				catch(e)
				{
					alert(e.message);
					return;
				}
			}

//alert(response);

			var maprestmp = response.split("|");
			if( maprestmp[0] == -1 ) { // Session expired
                window.location = "index.php?link=login.php";
                return;
            }
			//alert(response);
			var pois = xmlDoc.getElementsByTagName('poi');
			var i = 0;
			var tmpid, id, gisid, tmpx, tmpy, catimg, companyserial, catid;
			var useraccesslevel, userserial;
			var namegr='', nameen='', image01='', citygr='', cityen='';
            var address='', stategr='', stateen='', descr='', categories='';
            var realx=0, realy=0;
            var addressno='', postcode='', phone='', area=0, mapcode='';

			for(i=0; i<pois.length; i++) {
				tmpid = '';id = '';gisid='';tmpx = '';tmpy = '';catimg = '';
				companyserial='';catid='';useraccesslevel='';userserial='';
				namegr='';nameen='';image01='';citygr='';cityen='';
            	address='';stategr='';stateen='';descr='';categories='';
            	realx=0;realy=0;
            	addressno=''; postcode=''; phone=''; area=0;
			
				id = pois[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue;
				gisid = pois[i].getElementsByTagName("GISID")[0].childNodes[0].nodeValue;
				tmpid = "#pinpoi" + id;
				tmpx = pois[i].getElementsByTagName("AREAX")[0].childNodes[0].nodeValue;
				tmpy = pois[i].getElementsByTagName("AREAY")[0].childNodes[0].nodeValue;
				realx = pois[i].getElementsByTagName("REALX")[0].childNodes[0].nodeValue;
				realy = pois[i].getElementsByTagName("REALY")[0].childNodes[0].nodeValue;
				
				if(pois[i].getElementsByTagName("NAMEGR")[0].hasChildNodes())
				    namegr = pois[i].getElementsByTagName("NAMEGR")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("NAMEEN")[0].hasChildNodes())
				    nameen = pois[i].getElementsByTagName("NAMEEN")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CITYGR")[0].hasChildNodes())
				    citygr = pois[i].getElementsByTagName("CITYGR")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CITYEN")[0].hasChildNodes())
				    cityen = pois[i].getElementsByTagName("CITYEN")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("STATEGR")[0].hasChildNodes())
				    stategr = pois[i].getElementsByTagName("STATEGR")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("STATEEN")[0].hasChildNodes())
				    stateen = pois[i].getElementsByTagName("STATEEN")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("ADDRESS")[0].hasChildNodes())
				    address = pois[i].getElementsByTagName("ADDRESS")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("DESCRIPTION")[0].hasChildNodes())
				    descr = pois[i].getElementsByTagName("DESCRIPTION")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CATIMAGE")[0].hasChildNodes())
					catimg = pois[i].getElementsByTagName("CATIMAGE")[0].childNodes[0].nodeValue;
				userserial = pois[i].getElementsByTagName("WSSUSER")[0].childNodes[0].nodeValue;
				companyserial = pois[i].getElementsByTagName("WSSCOMPANY")[0].childNodes[0].nodeValue;
				useraccesslevel = pois[i].getElementsByTagName("USERACCESSLEVEL")[0].childNodes[0].nodeValue;
				catid = pois[i].getElementsByTagName("CATID")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("IMAGE")[0].hasChildNodes())
				    image01 = pois[i].getElementsByTagName("IMAGE")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CATEGORIES")[0].hasChildNodes())
				    categories = pois[i].getElementsByTagName("CATEGORIES")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("ADDRESSNO")[0].hasChildNodes())
				    addressno = pois[i].getElementsByTagName("ADDRESSNO")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("POSTCODE")[0].hasChildNodes())
				    postcode = pois[i].getElementsByTagName("POSTCODE")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("PHONE")[0].hasChildNodes())
				    phone = pois[i].getElementsByTagName("PHONE")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("AREAID")[0].hasChildNodes())
				    area = pois[i].getElementsByTagName("AREAID")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("MAPCODE")[0].hasChildNodes())
				    mapcode = pois[i].getElementsByTagName("MAPCODE")[0].childNodes[0].nodeValue;

				//if(catimg=='') continue; // IE will show X for non existing images
				
				var mapPoint =  new mapPOI(
					{
						"x" : tmpx,
						"y" : tmpy,
						"realx" : realx,
						"realy" : realy,
						"id" : id,
						"catimg" : catimg,
						"namegr" : namegr,
						"nameen" : nameen,
						"catid" : catid,
						"userserial" : userserial,
						"useraccesslevel" : useraccesslevel,
						"companyserial" : companyserial,
						"image" : image01,
						"stategr" : stategr,
						"stateen" : stateen,
						"citygr" : citygr,
						"cityen" : cityen,
						"address" : address,
						"descr" : descr,
						"categories" : categories,
						"addressno" : addressno,
						"postcode" : postcode,
						"phone" : phone,
						"area" : area,
						"mapcode" : mapcode,
						"gisid" : gisid
					}
				);

				mapPoint.create();
			}
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}

	});

}

function fnGetMapOnePointofinterest(poigisid,catid,action) {
	var mapContW = fnGetContWidth();
	var mapContH = fnGetContHeight();
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;
	var	dt =	"action=getMapOnePointofinterest" +
				"&top=" + fnGetMaptop() +
				"&bottom=" + fnGetMapbottom() +
				"&left=" + fnGetMapleft() +
				"&right=" + fnGetMapright() +
				"&width=" + fnGetContWidth() +
				"&Heigth=" + fnGetContHeight() +
				"&gmpoi_gisid=" + poigisid +
				"&catid=" + catid;
 //   alert(dt);

	$jq.ajax({
		type: "GET",
		url: "upfiles/File/source/connectors/mapPOI.conn.php",
		data: dt,
		cache: true,
		queue: "getMapOnePointofinterest",
		cancelExisting: true,
		success: function(response){
			var xmlDoc;
			//$jq("#mapbox").html(response);
			try //Internet Explorer
			{
				xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async="false";
				xmlDoc.loadXML(response);
			}
			catch(e)
			{
				try //Firefox, Mozilla, Opera, etc.
				{
					parser=new DOMParser();
					xmlDoc=parser.parseFromString(response,"text/xml");
				}
				catch(e)
				{
					alert(e.message);
					return;
				}
			}
//alert(response);

			var maprestmp = response.split("|");
			if( maprestmp[0] == -1 ) { // Session expired
                window.location = "index.php?link=login.php";
                return;
            }
			//alert(response);
			var pois = xmlDoc.getElementsByTagName('poi');
			var i = 0;
			var tmpid, id, gisid, tmpx, tmpy, catimg, companyserial, catid;
			var useraccesslevel, userserial;
			var namegr='', nameen='', image01='', citygr='', cityen='';
            var address='', stategr='', stateen='', descr='', categories='';
            var realx=0, realy=0;
            var addressno='', postcode='', phone='', area=0, mapcode='';

			for(i=0; i<pois.length; i++) {
				tmpid = '';id = '';gisid='';tmpx = '';tmpy = '';catimg = '';
				companyserial='';catid='';useraccesslevel='';userserial='';
				namegr='';nameen='';image01='';citygr='';cityen='';
            	address='';stategr='';stateen='';descr='';categories='';
            	realx=0;realy=0;
            	addressno=''; postcode=''; phone=''; area=0;
			
				id = pois[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue;
				gisid = pois[i].getElementsByTagName("GISID")[0].childNodes[0].nodeValue;
				tmpid = "#pinpoi" + id;
				tmpx = pois[i].getElementsByTagName("AREAX")[0].childNodes[0].nodeValue;
				tmpy = pois[i].getElementsByTagName("AREAY")[0].childNodes[0].nodeValue;
				realx = pois[i].getElementsByTagName("REALX")[0].childNodes[0].nodeValue;
				realy = pois[i].getElementsByTagName("REALY")[0].childNodes[0].nodeValue;
				
				if(pois[i].getElementsByTagName("NAMEGR")[0].hasChildNodes())
				    namegr = pois[i].getElementsByTagName("NAMEGR")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("NAMEEN")[0].hasChildNodes())
				    nameen = pois[i].getElementsByTagName("NAMEEN")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CITYGR")[0].hasChildNodes())
				    citygr = pois[i].getElementsByTagName("CITYGR")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CITYEN")[0].hasChildNodes())
				    cityen = pois[i].getElementsByTagName("CITYEN")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("STATEGR")[0].hasChildNodes())
				    stategr = pois[i].getElementsByTagName("STATEGR")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("STATEEN")[0].hasChildNodes())
				    stateen = pois[i].getElementsByTagName("STATEEN")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("ADDRESS")[0].hasChildNodes())
				    address = pois[i].getElementsByTagName("ADDRESS")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("DESCRIPTION")[0].hasChildNodes())
				    descr = pois[i].getElementsByTagName("DESCRIPTION")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CATIMAGE")[0].hasChildNodes())
					catimg = pois[i].getElementsByTagName("CATIMAGE")[0].childNodes[0].nodeValue;
				userserial = pois[i].getElementsByTagName("WSSUSER")[0].childNodes[0].nodeValue;
				companyserial = pois[i].getElementsByTagName("WSSCOMPANY")[0].childNodes[0].nodeValue;
				useraccesslevel = pois[i].getElementsByTagName("USERACCESSLEVEL")[0].childNodes[0].nodeValue;
				catid = pois[i].getElementsByTagName("CATID")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("IMAGE")[0].hasChildNodes())
				    image01 = pois[i].getElementsByTagName("IMAGE")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("CATEGORIES")[0].hasChildNodes())
				    categories = pois[i].getElementsByTagName("CATEGORIES")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("ADDRESSNO")[0].hasChildNodes())
				    addressno = pois[i].getElementsByTagName("ADDRESSNO")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("POSTCODE")[0].hasChildNodes())
				    postcode = pois[i].getElementsByTagName("POSTCODE")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("PHONE")[0].hasChildNodes())
				    phone = pois[i].getElementsByTagName("PHONE")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("AREAID")[0].hasChildNodes())
				    area = pois[i].getElementsByTagName("AREAID")[0].childNodes[0].nodeValue;
				if(pois[i].getElementsByTagName("MAPCODE")[0].hasChildNodes())
				    mapcode = pois[i].getElementsByTagName("MAPCODE")[0].childNodes[0].nodeValue;

				
				var mapPoint =  new mapPOI(
					{
						"x" : tmpx,
						"y" : tmpy,
						"realx" : realx,
						"realy" : realy,
						"id" : id,
						"catimg" : catimg,
						"namegr" : namegr,
						"nameen" : nameen,
						"catid" : catid,
						"userserial" : userserial,
						"useraccesslevel" : useraccesslevel,
						"companyserial" : companyserial,
						"image" : image01,
						"stategr" : stategr,
						"stateen" : stateen,
						"citygr" : citygr,
						"cityen" : cityen,
						"address" : address,
						"descr" : descr,
						"categories" : categories,
						"addressno" : addressno,
						"postcode" : postcode,
						"phone" : phone,
						"area" : area,
						"mapcode" : mapcode,
						"gisid" : gisid
					}
				);

				mapPoint.create();
				
				if(action=='ZOOMPOINT')
					mapPoint.showPopup();
				mapPoint.bringToTop();
			}
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}

	});

}

function fnSetNavFromToPoint(pointX, pointY, storeX, storeY, showDiv, showPoint) {	
// New way	
	var PointX = roundNumber(getLonFromX(pointX), 6);
	var PointY = roundNumber(getLatFromY(pointY), 6);

	if( showDiv != '' ) {
		var selTitle = "";
		if( showPoint == "from" ) {
			fnClearFrom();
			
			$jq(storeX).val(PointX);
			$jq(storeY).val(PointY);
			
			selTitle = "<div class='selTitle'><img src='upfiles/Image/SetupImages/navFrom_menu_icon.gif' /> Από: <div class='searchCloseBtn' id='navfromCloseBtn'></div></div>";
		}
		else if( showPoint == "to" ) {
			fnClearTo();
			
			$jq(storeX).val(PointX);
			$jq(storeY).val(PointY);
			
			selTitle = "<div class='selTitle'><img src='upfiles/Image/SetupImages/navTo_menu_icon.gif' /> Προς: <div class='searchCloseBtn' id='navtoCloseBtn'></div></div>";
		}
		var selData = "<div class='selData'><span style='float:left;width:100%;'>X: "+ PointX +"</span><span style='float:left;width:100%;'>Y: "+ PointY +"</span></div>";
		$jq(showDiv).html(selTitle + selData);
		$jq(showDiv).show("slow");

		fnAddNavigation();

		$jq("#navfromCloseBtn").click(function(){
			$jq(mapNavFrom).val('');
			$jq("#navigationFrom").hide("slow");
			$jq("#navigationActions").slideUp("slow");
			$jq("#navigationResults").hide("fast");
			$jq("#tmpnavfrom").hide();

			if(bZoomNavigation) {
				fnRemoveNavigation();
			}


			bNavFromExists = false;
		});

		$jq("#navtoCloseBtn").click(function(){
			$jq(mapNavTo).val('');
			$jq("#navigationTo").hide("slow");
			$jq("#navigationActions").slideUp("slow");
			$jq("#navigationResults").hide("fast");
			$jq("#tmpnavto").hide();
			
			if(bZoomNavigation) {
				fnRemoveNavigation();
			}

			bNavToExists = false;
		});

	}
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;

	if( showPoint == "from" ) {
		$jq("body").append("<div id='tmpnavfrom' class='tmppinpoint'><img src='upfiles/Image/SetupImages/navFrom_point.gif' /></div>");
		$jq("#tmpnavfrom").hide();
		$jq("#tmpnavfrom")
			.css("top",(pointY - 30 + tOffset) + "px")
			.css("left",(pointX + lOffset - 5) + "px");
		$jq("#tmpnavfrom").show();

		bNavFromExists = true;
	}
	else if( showPoint == "to" ) {
		$jq("body").append("<div id='tmpnavto' class='tmppinpoint'><img src='upfiles/Image/SetupImages/navTo_point.gif' /></div>");
		$jq("#tmpnavto").hide();
		$jq("#tmpnavto")
			.css("top",(pointY - 30 + tOffset) + "px")
			.css("left",(pointX + lOffset - 5) + "px");
		$jq("#tmpnavto").show();

		bNavToExists = true;
	}
}

function fnShowNavFromPoint() {
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;
	var tmpx = getXFromLon($jq(mapNavPointFromX).val());
	var tmpy = getYFromLat($jq(mapNavPointFromY).val());

	if((tmpy - 29 + tOffset) < tOffset || (tmpy - 29 + tOffset) > tOffset + $jq(mapCont).height() ) return;
	if((tmpx + lOffset - 5) < lOffset || (tmpx + lOffset - 5) > lOffset + $jq(mapCont).width() ) return;
	
	$jq("body").append("<div id='tmpnavfrom' class='tmppinpoint'><img src='upfiles/Image/SetupImages/navFrom_point.gif' /></div>");
	$jq("#tmpnavfrom").hide();
	$jq("#tmpnavfrom")
		.css("top",(tmpy - 29 + tOffset) + "px")
		.css("left",(tmpx + lOffset - 5) + "px");
	$jq("#tmpnavfrom").show();

	bNavFromExists = true;
}

function fnShowNavToPoint() {
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;
	var tmpx = getXFromLon($jq(mapNavPointToX).val());
	var tmpy = getYFromLat($jq(mapNavPointToY).val());

	if((tmpy - 29 + tOffset) < tOffset || (tmpy - 29 + tOffset) > tOffset + $jq(mapCont).height() ) return;
	if((tmpx + lOffset - 5) < lOffset || (tmpx + lOffset - 5) > lOffset + $jq(mapCont).width() ) return;
	
	$jq("body").append("<div id='tmpnavto' class='tmppinpoint'><img src='upfiles/Image/SetupImages/navTo_point.gif' /></div>");
	$jq("#tmpnavto").hide();
	$jq("#tmpnavto")
		.css("top",(tmpy - 29 + tOffset) + "px")
		.css("left",(tmpx + lOffset - 5) + "px");
	$jq("#tmpnavto").show();

	bNavToExists = true;
}

function fnSavePoint(pointAction, pointSerial, pointType, PointX, PointY, pointTitle, pointComment) {
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPlacemark.conn.php",
		data:	"action=setPoint" +
				"&pointAction=" + pointAction +
				"&mapPointSerial=" + pointSerial +
				"&mapPointX=" + PointX +
				"&mapPointY=" + PointY +
				"&mapPointType=" + pointType +
				"&mapPointTitle=" + pointTitle +
				"&mapPointComment=" + pointComment,
		queue: "setpoint",
		cancelExisting: true,
		async: false,
		success: function(response){
			//alert(response);
			//fnGetMap(true);
			fnRemoveAllPlacemarks();
			fnGetMapPlacemarks(fnGetMaptop(), fnGetMapleft(), fnGetMapbottom(), fnGetMapright());
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return false;
		}
	});

	return true;
}

function fnGetContWidth() {
	return $jq(mapCont).width();
}

function fnGetContHeight() {
	return $jq(mapCont).height();
}

function fnSetTool(tool) {
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapgeneral.conn.php",
		data:	"action=setTool" +
				"&mapTool=" + tool,
		queue: "settool",
		cancelExisting: true,
		success: function(response){
			$jq("#st_seltool").html("Selected Tool: " + response);
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}
	});

	$jq(mapcommandCont).val(tool);
}

function fnSetSession(sesname, sesval) {
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapgeneral.conn.php",
		data:	"action=setSession" +
				"&sessionname=" + sesname +
				"&sessionval=" + sesval,
		queue: "setsession",
		cancelExisting: true,
		async: false,
		success: function(response){
			//alert(response);
			//$jq("#st_seltool").html("Selected Tool: " + response);
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}
	});
}

function fnGetSession(sesname) {
    var ret = '';

	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapgeneral.conn.php",
		data:	"action=getSession" +
				"&sessionname=" + sesname,
		queue: "getsession",
		cancelExisting: true,
		async: false,
		success: function(response){
			//alert(response);
			//$jq("#st_seltool").html("Selected Tool: " + response);
			ret =  response;
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			ret = '';
		}
	});
	
	return ret;
}

function fnUndo() {
	//alert(lastRequest);
	if(requestStack.length > 1 ) {
		requestStack.pop(); // POP twice to get previous

		var lastRequest = '';
		if(requestStack.length > 0 ) {
			lastRequest = requestStack.pop();

			if(lastRequest != '' ) {
				fnRemoveAllPlacemarks();
				fnRemovAllPOI();

				fnGetMapImage(lastRequest, false);
			}
		}
	}
}

function fnGetMapx() {
	return $jq(mapxCont).val();
}

function fnGetMapy() {
	return $jq(mapyCont).val();
}

function fnGetShidden() {
	return $jq(shiddenCont).val();
}

function fnGetMapcommandCont() {
	return $jq(mapcommandCont).val();
}

function fnGetMaptop() {
	return $jq(maptopCont).val();
}

function fnGetMapbottom() {
	return $jq(mapbottomCont).val();
}

function fnGetMapleft() {
	return $jq(mapleftCont).val();
}

function fnGetMapright() {
	return $jq(maprightCont).val();
}

function fnGetMapx2() {
	return $jq(mapx2Cont).val();
}

function fnGetMapy2() {
	return $jq(mapy2Cont).val();
}

function fnGetAddressId() {
	return $jq(addIdCont).val();
}

function fnGetNavFrom() {
	return $jq(mapNavFrom).val();
}

function fnGetNavTo() {
	return $jq(mapNavTo).val();
}

function fnGetNavPoint() {
	return $jq(mapNavPoint).val();
}

function fnGetNavPointFromX() {
	return $jq(mapNavPointFromX).val();
}

function fnGetNavPointFromY() {
	return $jq(mapNavPointFromY).val();
}

function fnGetNavPointToX() {
	return $jq(mapNavPointToX).val();
}

function fnGetNavPointToY() {
	return $jq(mapNavPointToY).val();
}

function fnGetPOICategories() {
	return $jq(poiCategories).val();
}

function fnSetPOICategories(cate) {
	return $jq(poiCategories).val(cate);
}

function fnGetMapPOI() {
	return $jq(gMapPOICont).val();
}
function fnSetMapPOI(vMapPOI) {
	$jq(gMapPOICont).val(vMapPOI);
}

function fnGetMapPOIFrom() {
	return $jq(mapnavpofrom).val();
}
function fnSetMapPOIFrom(vmapnavpofrom) {
	$jq(mapnavpofrom).val(vmapnavpofrom);
}

function fnGetMapPOITo() {
	return $jq(mapnavpoto).val();
}
function fnSetMapPOITo(vmapnavpoto) {
	$jq(mapnavpoto).val(vmapnavpoto);
}

function fnGetZoomlevel() {
	return $jq(ZoomlevelCont).val();
}
function fnSetZoomlevel(tzoomlevel) {
	$jq(ZoomlevelCont).val(tzoomlevel);
}


function showNavPoint(pointID) {
	var tmp = $jq(mapcommandCont).val();
	$jq(mapcommandCont).val("ZOOMNAVIGATIONPOINT");
	$jq(mapNavPoint).val(pointID);
	fnGetMap(false);
	$jq(mapcommandCont).val(tmp);
}

function fnBuildandShowDirections(xmlDoc) {
	var res='';
	var totals = '';

	var dirs = xmlDoc.getElementsByTagName('TR');
	var tdist = 0;
	var ttime = 0;
	
	for (i=0;i<dirs.length;i++)
	{
		res +=	"<div id='navline'>";
	
		if ( xmlDoc.getElementsByTagName("DirectionID")[i].childNodes[0].nodeValue == 0 ) {
			res +=	xmlDoc.getElementsByTagName("Direction")[i].childNodes[0].nodeValue;
		
		}
		else if (xmlDoc.getElementsByTagName("DirectionID")[i].childNodes[0].nodeValue == (dirs.length-1) ){
			res +=	xmlDoc.getElementsByTagName("Direction")[i].childNodes[0].nodeValue;
			totals += "<strong>Απόσταση: </strong><span id='tdist'>" + roundNumber(tdist, 2) + "</span> Km";

			if(xmlDoc.getElementsByTagName("EstimatedTime")) {
                //res += " Time: " + xmlDoc.getElementsByTagName("EstimatedTime")[i].childNodes[0].nodeValue;
				var esttime = xmlDoc.getElementsByTagName("EstimatedTime")[0].childNodes[0].nodeValue;
				
				if( esttime > 60 ) {
					var hours = roundNumber(parseFloat(esttime/60),0);
					var minutes = roundNumber(parseFloat((esttime - (hours * 60))/60),0);

					if(hours == 1)
						ttime = hours + " ώρα ";
					else
						ttime = hours + " ώρες ";

					if(minutes == 1)
						ttime += minutes + " λεπτό ";
					else {
						if(minutes>0)
							ttime += " / " + minutes + " λεπτά ";
					}
				}
				else  {
					var minutes = roundNumber(parseFloat(esttime),0);

					if(minutes == 1)
						ttime = minutes + " λεπτό ";
					else
						ttime = minutes + " λεπτά ";
				}
	            totals += "<br><strong>Χρόνος: </strong>" + ttime;
            }
        
		}
		else {
			var dist = 0;
            if(xmlDoc.getElementsByTagName("Distance")[i].childNodes[0]) {
				dist = xmlDoc.getElementsByTagName("Distance")[i].childNodes[0].nodeValue;
				dist = dist.replace(",", ".");
				dist = parseFloat(dist);
			}

			//tdist = dist;
			tdist += dist;
//alert(dist);
			if( dist < 1 ) {
			
				dist *= 1000;
				dist = parseInt(dist);
				dist += "m";
			}
			else {
				dist += "km";
			}
			
			res +=	"<div id='navnum'>"+ (i) + ". </div>" +
					"<div id='navlink'><a href='javascript:' onClick='showNavPoint("+
						(xmlDoc.getElementsByTagName("DirectionID")[i].childNodes[0].nodeValue)
				 		+");'>" +
						(xmlDoc.getElementsByTagName("Direction")[i].childNodes[0].nodeValue) +
					"</a><span id='navdist'>"+dist+"</span></div>";
					// + <div id='navdist'>"+dist+"</div>";
		}
		res +=	"</div>";
	}

//totals += "<br>tetewte";
	totals += "<br><a href='#resetNavigation'>Πλήρης Πλοήγηση</a>";
	totals += "<br><a href='#' onClick='fnPrintNavigation();'>Εκτύπωση</a>";
	$jq(mapDirections).html(res);
	$jq("#navigationTotals").html(totals);

	$jq("a[href*='#resetNavigation']").click(function() {
		if(navigationTmpImage!='') {
			$jq(mapCont).html(navigationTmpImage);
			$jq(maptopCont).val(navigationTmpTop);
			$jq(mapbottomCont).val(navigationTmpBottom);
			$jq(mapleftCont).val(navigationTmpLeft);
			$jq(maprightCont).val(navigationTmpRight);
			fnSetZoomlevel(navigationTmpZoomlevel);

			fnRemoveAllPlacemarks();
			fnRemovAllPOI();
			fnGetMapPlacemarks(navigationTmpTop, navigationTmpLeft, navigationTmpBottom, navigationTmpRight);
            fnGetMapPointofinterests(navigationTmpTop, navigationTmpLeft, navigationTmpBottom, navigationTmpRight, navigationTmpZoomlevel);
		}
	});
}

function showPointTypes () {

	if(bPTypesShow) {
		$jq("#ptpopup").hide();
		bPTypesShow = false;

		bAddPoint = false;
		$jq(mapCont).imgAreaSelect({ enable: true });
		$jq("#pinpoint").remove();

		return;
	}

	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPlacemark.conn.php",
		data:	"action=showPointTypes",
		queue: "showpointtypes",
		cancelExisting: true,
		success: function(response){

			var xmlDoc;
			//$jq("#mapbox").html(response);
			try //Internet Explorer
			{
				xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async="false";
				xmlDoc.loadXML(response);
			}
			catch(e)
			{
				try //Firefox, Mozilla, Opera, etc.
				{
					parser=new DOMParser();
					xmlDoc=parser.parseFromString(response,"text/xml");
				}
				catch(e)
				{
					alert(e.message);
					return;
				}
			}

			var pointtypes = xmlDoc.getElementsByTagName('POINTTYPE');
			var ptserial='', pttitle = '', ptimage='';
			var res = '';
			
			for (i=0;i<pointtypes.length;i++)
			{
				ptserial = xmlDoc.getElementsByTagName("SERIAL")[i].childNodes[0].nodeValue;
				pttitle = xmlDoc.getElementsByTagName("TITLE")[i].childNodes[0].nodeValue;
				ptimage = xmlDoc.getElementsByTagName("IMAGE")[i].childNodes[0].nodeValue;

				res += "<div id='ptpopup_line' class='ptpopup_line' name='"+ptserial+"'>";
					res += "<div id='ptpopup_line_image'><img id='ptpopup_line_img' src='"+ ptimage +"' /></div>";
					res += "<div id='ptpopup_line_title'>"+ pttitle +"</div>";
				res += "</div>";
			}
			
			$jq("#ptpopup_middle_scroll").html(res);
			
			$jq("#ptpopup")
					.css("top", $jq("#ma_pointtypes").offset().top + 30 + "px")
					.css("left", $jq("#ma_pointtypes").offset().left + "px")
					.fadeIn("fast");

			$jq("#ptpopup_close_btn").click(function() {
				if(bPointAdding) {
					alert("Already adding!");
					return;
				}
				
				$jq("#ptpopup").fadeOut("fast");
				bPTypesShow = false;

				bAddPoint = false;
				$jq(mapCont).imgAreaSelect({ enable: true });
				$jq("#pinpoint").remove();
				fnRemovePlacemarkPopup();
				$jq("#mapCurrentAction").css("display", "none");
			});

			$jq("#ptpopup_close_btn").hover(function() {
				$jq("#ptpopup_close").css("margin", "0");
				$jq("#ptpopup_close").css("border", "1px solid #999999");
			},
			function() {
				$jq("#ptpopup_close").css("border", "0");
				$jq("#ptpopup_close").css("margin", "1px");
			});

			$jq(".ptpopup_line").hover(function() {
				$jq(this).css("background-color", "#9C9892");
			},
			function() {
				$jq(this).css("background-color", "transparent");
			});
			
			bPTypesShow = true;

			/* ****************************************** */
			/* Add Point */
			/* ****************************************** */
			$jq(".ptpopup_line").click(function() {
//alert("Clicked");                
				if(bPointAdding) {
					alert("Already adding!");
					return;
				}

				$jq("#mapCurrentAction").css("left", $jq(this).offset().left - $jq(mapCont).offset().left + 54 + $jq(this).width() + 10);
				$jq("#mapCurrentAction").css("top", $jq(this).offset().top - $jq(mapCont).offset().top + 27);
				$jq("#mapCurrentAction").html("Cancel Adding");
				$jq("#mapCurrentAction").css("display", "block");
				$jq("#mapCurrentAction").click(function() {
					//if(bPointAdding) return;
					bAddPoint = false;
					$jq("#pinpoint").remove();
					fnRemovePlacemarkPopup();
					$jq("#mapCurrentAction").css("display", "none");
				});
				
				fnGetBubbleDesign($jq(this).attr("name"));
				
				bAddPoint = true;
				bContextShown = false;
				$jq("#pinpoint_image").html("<img src='" + $jq(this).find("#ptpopup_line_img").attr("src") + "' name="+$jq(this).attr("name")+" />");

			});
			
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}
	});
}

function fnGetBubbleDesign(ptypeserial) {
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPlacemark.conn.php",
		data:	"action=getBubbleDesign&ptypeserial=" + ptypeserial,
		queue: "getbubbledesign",
		cancelExisting: true,
		async: false,
		success: function(response){
			//return response;
			pinpointDesign = response;

		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}
	});


}

function getHtmlFromDesign(design) {
	var dsn = "";
	$jq.ajax({
		type: "GET",
		url: "upfiles/File/source/connectors/mapgeneral.conn.php",
		data:	"action=getHtmlFromDesign&designfile=" + design,
		queue: "gethtmlfromdesign",
		cancelExisting: true,
		async: false,
		success: function(response){
			dsn = response;
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return;
		}
	});

	return dsn;
}

function fnGetHtmlFromAddPOIDesign() {
	var result = '';
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPOI.conn.php",
		data:	"action=getHtmlFromAddPOIDesign",
		queue: "gethtmlfromdesign",
		async: false,
		cancelExisting: true,
		success: function(response){
			
			result = response;
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			result = 'ERROR';
		}
	});
	
	return result;
}

function fnGetHtmlFromPOICategoryDesign(catserial) {
	var result = '';
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPOI.conn.php",
		data:	"action=getHtmlFromPOICategoryDesign&serial=" + catserial,
		queue: "gethtmlfromdesign",
		async: false,
		cancelExisting: true,
		success: function(response){
			result = response;
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			result = 'ERROR';
		}
	});
	
	return result;
}

function enableImgAreaSelect(bEnable) {
//alert(bEnable);

	//if(bPointAdding) bEnable = false;

	imgAreaSelectIsEnabled = bEnable;
	$jq(mapCont).imgAreaSelect({ enable: bEnable });
}

function fnEnableDraggable(bEnable) {
	//if(bPointAdding) bEnable = false;

    bDraggableEnabled = bEnable;
        
	var lOffset = $jq(mapCont).offset().left;
	var tOffset = $jq(mapCont).offset().top;
    var startX = 0, startY = 0;
    
    if(!bEnable) {
        //$jq("#geomaticmap").draggable("disable");
        
        $jq('#geomaticmap').unbind('dragstart');
        $jq('#geomaticmap').unbind('drag');
        $jq('#geomaticmap').unbind('dragend');
        $jq('#geomaticmap').hover(function() {
			$jq(this).css("cursor", "default");
		});
    }
    else {
        if( bAddPoint || bAddPOI ) {
            //$jq("#geomaticmap").draggable("disable");
	        $jq('#geomaticmap').unbind('dragstart');
    	    $jq('#geomaticmap').unbind('drag');
        	$jq('#geomaticmap').unbind('dragend');
        	$jq('#geomaticmap').hover(function() {
				$jq(this).css("cursor", "default");
			});
        }
        else {
            //alert("DONE");

            $jq('#geomaticmap').hover(
				function() {
				    if( bAddPoint || bAddPOI ) {
				        $jq(this).css("cursor", "default");
				    }
				    else {
    					$jq(this).css("cursor", "-moz-grab");
    					$jq(this).css("cursor", "url(/upfiles/Image/SetupImages/openhand.cur), default/");
    				}
				},
				function() {
					$jq(this).css("cursor", "default");
            	});
            
            $jq('#geomaticmap')
                .bind('dragstart',function( event ){
                    //$jq(this).css("cursor", "move");
                    $jq(this).css("cursor", "-moz-grabbing");
					$jq(this).css("cursor", "url(/upfiles/Image/SetupImages/closedhand.cur), default/");

                    drag = true;

                	// Remove point to add them later
					$jq("#jqContextMenu").hide();
					$jq("#jqContextMenu + div").hide();
					bContextShown = false;
	
                    fnRemoveAllPlacemarks();
                    fnRemovAllPOI();
                    $jq("#tmpnavfrom").hide();
                    $jq("#tmpnavto").hide();

                    startX = parseInt($jq(this).width() / 2);//$jq(mapxCont).val(); //event.offsetX - lOffset;
                    startY = parseInt($jq(this).height() / 2);//$jq(mapyCont).val(); //event.offsetY - tOffset;
                    
                    //console.log("StaRT X: " + startX + " Start Y: " + startY);
                    
                    $jq(mapx2Cont).val("");
                    $jq(mapy2Cont).val("");
                })
                .bind('drag',function( event ){
                    $jq( this ).css({
                            position: "absolute",
                            top: event.offsetY - tOffset,
                            left: event.offsetX - lOffset
                            });
                    //console.log("DRAGGING: ", "X:" + (event.offsetX - lOffset) + " Y:" + (event.offsetY - tOffset));
                })
                .bind('dragend',function( event ){
   					$jq(this).css("cursor", "-moz-grab");
					$jq(this).css("cursor", "url(/upfiles/Image/SetupImages/openhand.cur), default/");
                    
                    
                    var y = parseInt(startY) - parseInt(event.offsetY - tOffset);//(tOffset + parseInt($jq(this).height())) - parseInt(event.offsetY - tOffset)*(-1);
                    var x = parseInt(startX) - parseInt(event.offsetX - lOffset);//(lOffset + parseInt($jq(this).width())) + parseInt(event.offsetX - lOffset);

                    $jq(mapyCont).val(y);
                    $jq(mapxCont).val(x);
                    
                    //console.log("X: " + x + " Y: " + y);
                });
      
            //$jq("#geomaticmap").live("draggable", function() {test();});
        }
    } 
}

function fnNavi(x1, y1) {
	fnRemoveAllPlacemarks();
	fnRemovAllPOI();
	$jq("#tmpnavfrom").hide();
	$jq("#tmpnavto").hide();

	var tmpCmd = $jq(mapcommandCont).val();
	$jq(mapcommandCont).val("RESET");

    var naviW = $jq("#mapnavicontainer").width();
    var naviH = $jq("#mapnavicontainer").height();
    var mapW = $jq(mapCont).width();
    var mapH = $jq(mapCont).height();
    
    var ratioX = parseInt(mapW / naviW);
    var ratioY = parseInt(mapH / naviH);
    
    //console.log("X: " + x1 + " Y: " + y1);
    var mapX = x1 * ratioX;
    var mapX2 = mapX + (30*ratioX);
    var mapY = y1 * ratioY;
    var mapY2 = mapY + (30*ratioY);
     
    fnRemoveAllPlacemarks();
	fnRemovAllPOI();
    
    var	dt =	"action=getMap" +
				"&mapDomain=" + mapUIPath +
				"&type=MAP" +
				"&mapcode=" + mapCode +
				"&command=ZOOMIN" +
				"&AddressID=" +
				"&zoomscale=1" +
				"&width=" + fnGetContWidth() +
				"&Heigth=" + fnGetContHeight() +
				"&map_x=" + mapX +
				"&map_y=" + mapY +
				"&top=" + initTop +
				"&bottom=" + initBottom +
				"&Left=" + initLeft +
				"&right=" + initRight +
				"&map_x2=" + mapX2 +
				"&map_y2=" + mapY2 +
				"&NavAddressFrom=" +
				"&NavAddressto=" +
				"&NavPointZoom=" +
				"&NavFromX=" +
				"&NavFromY=" +
				"&NavToX=" +
				"&NavToY=";
	fnGetMapImage(dt, false);
	$jq(mapcommandCont).val(tmpCmd);
}



function fnSavePOI(poiAction, poiSerial, poiX, poiY, poiNameGr, poiNameEn, poiDesc, poiCategory,
			poiNewCat, poiImage01,  poiAddress, poiAddressno, poiPostcode, poiPhone, poiArea) {
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPOI.conn.php",
		data:	"action=setPOI" +
				"&poiAction=" + poiAction +
				"&mapPoiSerial=" + poiSerial +
				"&mapPoiX=" + poiX +
				"&mapPoiY=" + poiY +
				"&mapPoiNameGr=" + poiNameGr +
				"&mapPoiNameEn=" + poiNameEn +
				"&mapPoiDesc=" + poiDesc +
				"&mapPoiCategory=" + poiCategory +
				"&mapPoiNewCategory=" + poiNewCat +
				"&mapPoiImage01=" + poiImage01 +
				"&mapPoiAddress=" + poiAddress +
				"&mapPoiAddressNo=" + poiAddressno +
				"&mapPoiPostCode=" + poiPostcode +
				"&mapPoiPhone=" + poiPhone +
				"&mapPoiAreaId=" + poiArea,
		queue: "setpoi",
 		cancelExisting: true,
 		async: false,
		success: function(response){
			//alert(response);

			if(response.indexOf("|") != -1) {
				var setpoires = response.split("|");

				if(setpoires[0].length > 0) {
					if(setpoires[0] != "1") { // Error
						alert(setpoires[1]);
						return false;
					}
				}
			}
			else {
				alert(response);
				return;
			}

			//fnGetMap(true);
			fnLoadPOICategories();
			fnRemovAllPOI();
			fnGetMapPointofinterests(fnGetMaptop(), fnGetMapleft(), fnGetMapbottom(), fnGetMapright(), fnGetZoomlevel());
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return false;
		}
	});

	return true;
}

function fnMovePOI(poiSerial, poiX, poiY) {
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPOI.conn.php",
		data:	"action=setPOI" +
				"&poiAction=MOVE" + 
				"&mapPoiSerial=" + poiSerial +
				"&mapPoiX=" + poiX +
				"&mapPoiY=" + poiY,
		queue: "setpoi",
 		cancelExisting: true,
 		async: false,
		success: function(response){
			//alert(response);

			if(response.indexOf("|") != -1) {
				var setpoires = response.split("|");

				if(setpoires[0].length > 0) {
					if(setpoires[0] != "1") { // Error
						alert(setpoires[1]);
						return false;
					}
				}
			}
			else {
				alert(response);
				return;
			}

			fnRemovAllPOI();
			fnGetMapPointofinterests(fnGetMaptop(), fnGetMapleft(), fnGetMapbottom(), fnGetMapright(), fnGetZoomlevel());
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return false;
		}
	});

	return true;
}

function fnMovePoint(pointSerial, PointX, PointY) {
	$jq.ajax({
		type: "POST",
		url: "upfiles/File/source/connectors/mapPlacemark.conn.php",
		data:	"action=setPoint" +
				"&pointAction=MOVE" + 
				"&mapPointSerial=" + pointSerial +
				"&mapPointX=" + PointX +
				"&mapPointY=" + PointY,
		queue: "setpoint",
		cancelExisting: true,
		async: false,
		success: function(response){
			//alert(response);
			//fnGetMap(true);
			fnRemoveAllPlacemarks();
			fnGetMapPlacemarks(fnGetMaptop(), fnGetMapleft(), fnGetMapbottom(), fnGetMapright());
		},
		error:  function(res,error) {
			//console.log("ERROR: ", res.status + " > " + error);
			return false;
		}
	});

	return true;
}

function fnLoadPOICategories() {
	$jq.ajax({
			type: "POST",
			url: "upfiles/File/source/connectors/mapPOIcategories.conn.php",
			data: "action=getPOIcategories&mapcode="+mapCode,
			cache: true,
			queue: "getPOIcategories",
			cancelExisting: true,
			success: function(response){
				var xmlDoc;
				//$jq("#mapbox").html(response);
				try //Internet Explorer
				{
					xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
					xmlDoc.async="false";
					xmlDoc.loadXML(response);
				}
				catch(e)
				{
					try //Firefox, Mozilla, Opera, etc.
					{
						parser=new DOMParser();
						xmlDoc=parser.parseFromString(response,"text/xml");
					}
					catch(e)
					{
						alert(e.message);
						return;
					}
				}
				
				$jq("#POItree").html(response);

				$jq("ul.tree").checkTree({
					/*
					// You can add callbacks to the expand, collapse, check, uncheck, and  halfcheck
					// events of the tree. The element you use as the argument is the LI element of
					// the object that fired the event.
					onExpand: function(el) {
						console.log("expanded ", el.find("label:first").text());
					},
					onCollapse: function(el) {
						console.log("collapsed ", el.find("label:first").text());
					},*/
					onCheck: function(el) {
						if((el.html()).indexOf("<ul") != -1 ) return false;
					
						var clickedid = el.find("input:first").val();
						//console.log("checked ", clickedid);
						var strpoicat = $jq(poiCategories).val();
						var arrpoicat=new Array();

						if( strpoicat != '' )
							arrpoicat = strpoicat.split(",");

						if(inArray(clickedid, arrpoicat) == -1) {
							arrpoicat[arrpoicat.length] = clickedid;
						}
						
						if( arrpoicat.length > 1 )
							$jq(poiCategories).val(arrpoicat.join(","));
						else
							$jq(poiCategories).val(arrpoicat[0]);

						//fnGetMap(true);

					},
					onUnCheck: function(el) {
						if((el.html()).indexOf("<ul") != -1 ) return false;
						
						var clickedid = el.find("input:first").val();
						//console.log("unchecked ", clickedid);
						var strpoicat = $jq(poiCategories).val();
						var arrpoicat = strpoicat.split(",");

						var catPos = inArray(clickedid, arrpoicat);

						if(catPos > -1) {
							arrpoicat.splice(catPos, 1);
						}
						
						if( arrpoicat.length > 1 )
							$jq(poiCategories).val(arrpoicat.join(","));
						else if( arrpoicat.length == 1 )
							$jq(poiCategories).val(arrpoicat[0]);
						else
							$jq(poiCategories).val('');

						//fnGetMap(true);
					},
					onHalfCheck: function(el) {
						//console.log("half checked ", el.find("label:first").text());
					},
					onCompleteCheck: function() {
						//fnGetMap(true);
						fnRemovAllPOI();
						fnGetMapPointofinterests(fnGetMaptop(), fnGetMapleft(), fnGetMapbottom(), fnGetMapright(), fnGetZoomlevel());
					},
					onCompleteUncheck: function() {
						//fnGetMap(true);
						fnRemovAllPOI();
						fnGetMapPointofinterests(fnGetMaptop(), fnGetMapleft(), fnGetMapbottom(), fnGetMapright(), fnGetZoomlevel());
					},
					
					// You can set the labelAction variable to either "check" or "expand"
					// to change what happens when you click on the label item.
					// The default is expand, which expands the tree. Check will toggle
					// the checked state of the items.
					labelAction: "both"
					
					/*
					// You can also change what happens when you hover over a label (over and out)
					onLabelHoverOver: function(el) { alert("You hovered over " + el.text()); },
					onLabelHoverOut: function(el) { alert("You hovered out of " + el.text()); }
					*/
					
				});
			}
		});
}

function fnRemovAllPOI() {
	$jq(".pinpoi").remove();
	$jq(".pinpoitooltip").remove();
	fnRemovePoiPopup();
}

function fnRemovePoiPopup() {
	$jq(".poipopup").remove();
	$jq(".addpoipopup").remove();
	bPointAdding = false;
}

function fnRemoveAllPlacemarks() {
	$jq(".pinpoint").remove();
	$jq(".pinpointtooltip").remove();
	fnRemovePlacemarkPopup();
}

function fnRemovePlacemarkPopup() {
	$jq(".pointpopup").remove();
	bPointAdding = false;
}

function inArray(str, arr) {
	var i=0;
	for(i=0; i < arr.length; i++) {
		if(arr[i] == str)
			return i;
	}

	return -1;
}

function getLonFromX(nX) {
	var lRight = parseFloat(fnGetMapright().replace(',','.'));
	var lLeft = parseFloat(fnGetMapleft().replace(',','.'));
	var lWidth = parseFloat(fnGetContWidth());
	var t = lLeft+((lRight-lLeft)/lWidth) * (parseInt(nX));
	/*console.log('lRight:' + lRight);
	console.log('lLeft:' + lLeft);
	console.log('lWidth:' + lWidth);
	console.log('nX:' + nX);
	console.log("X:" + t);*/
	return t;
}

function getLatFromY(nY) {
	//return 1+((fnGetMapbottom()-fnGetMaptop())/fnGetContHeight()) * (nY-1);
	var lTop = parseFloat(fnGetMaptop().replace(',','.'));
	var lBottom = parseFloat(fnGetMapbottom().replace(',','.'));
	var lHeight = parseFloat(fnGetContHeight());
	var t = lTop+((lBottom-lTop)/lHeight) * (parseInt(nY)-1);
	return t;
}

function getXFromLon(lon) {
	var lRight = parseFloat(fnGetMapright().replace(',','.'));
	var lLeft = parseFloat(fnGetMapleft().replace(',','.'));
	var lWidth = parseFloat(fnGetContWidth());

	return (((lon - lLeft)*lWidth) / (lRight-lLeft));
}

function getYFromLat(lat) {
	var lTop = parseFloat(fnGetMaptop().replace(',','.'));
	var lBottom = parseFloat(fnGetMapbottom().replace(',','.'));
	var lHeight = parseFloat(fnGetContHeight());
	
	return (((lat - lTop)*lHeight) / (lBottom-lTop))+1;
}

function fnAddNavigation() {
	if(
		( // FROM
			$jq(mapNavFrom).val() != '' ||
			($jq(mapNavPointFromX).val() != '' && $jq(mapNavPointFromY).val() != '') ||
			$jq(mapnavpofrom).val() != ''
		) &&
		( // TO
			$jq(mapNavTo).val() != '' ||
			($jq(mapNavPointToX).val() != '' && $jq(mapNavPointToY).val() != '') ||
			$jq(mapnavpoto).val()
		)
	) {
		/*var act = "<div class='navActions'><a href='#navigate'>Πλοήγηση</a></div>";
		$jq("#navigationResults").hide();
		$jq("#navigationActions").html(act);
		$jq("#navigationActions").slideDown("slow");*/

		//$jq("a[href*='#navigate']").click(function() {
			$jq(mapDirections).html('');
			bZoomNavigation = true;
			var tmp = $jq(mapcommandCont).val();
			$jq(mapcommandCont).val("ZOOMNAVIGATION");
			fnGetMap(false);
			$jq(mapcommandCont).val(tmp);

			$jq(searchcomp + " a.accordion_link").each(function () {
				if($jq(this).html() == 'Points of Interest') {

					var t = $jq(searchcomp).height() - (2/*Components*/ * 32 - 10 /*Padding bottom*/);

					if( $jq(this).next("div.component_body").css("display") != "none" ) {
						$jq(this).next("div.component_body").css("display", "none");
						$jq(this).next("div.component_body").siblings("div.component_body").css("height", t);
					}
				}
			});

			$jq("#navigationResults").slideDown("slow");
			$jq("#mapnavicontainer").slideUp("slow");
			$jq(".slide").animate({top: navitop - 11}, 600);
			
			$jq("#tmpnavto").hide();
			$jq("#tmpnavfrom").hide();

		//});
	}
}

function roundNumber(rnum, rlength) { // Arguments: number to round, number of decimal places
  return Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
}

function fnClearFrom() {
	$jq(mapNavFrom).val('');
	$jq(mapNavPointFromX).val('');
	$jq(mapNavPointFromY).val('');
	$jq(mapnavpofrom).val('');
	$jq("#tmpnavfrom").remove();
	bNavFromExists = false;
}

function fnClearTo() {
	$jq(mapNavTo).val('');
	$jq(mapNavPointToX).val('');
	$jq(mapNavPointToY).val('');
	$jq(mapnavpoto).val('');
	$jq("#tmpnavto").remove();
	bNavToExists = false;
}

function fnRemoveNavigation() {
	var tmp = $jq(mapcommandCont).val();
	$jq(mapcommandCont).val('NONE');
	fnGetMap(false);
	$jq(mapcommandCont).val(tmp);
	bZoomNavigation = false;
    var t = 0;

	$jq(searchcomp + " a.accordion_link").each(function () {
		if($jq(this).html() == 'Points of Interest') {

			t = $jq(searchcomp).height() - (2/*Components*/ * 32);

			if( $jq(this).next("div.component_body").css("display") == "none" ) {
				$jq(this).next("div.component_body").css("display", "block");
				$jq(this).next("div.component_body").siblings("div.component_body").css("height", t-$jq(this).next("div.component_body").height());
			}
		}
	});
}


function fnPrintNavigation() {
    /*
    // Create a random name for the print frame.
	var strFrameName = ("printer-" + (new Date()).getTime());

	// Create an iFrame with the new name.
	var jFrame = $jq( "<iframe id='printNavi' name='" + strFrameName + "'>" );

	// Hide the frame (sort of) and attach to the body.
	jFrame
		.css( "width", "1px" )
		.css( "height", "1px" )
		.css( "position", "absolute" )
		.css( "left", "-9999px" )
		.appendTo( $jq( "body:first" ) )
	;

	// Get a FRAMES reference to the new frame.
	var objFrame = window.frames[ strFrameName ];

	// Get a reference to the DOM in the new frame.
	var objDoc = objFrame.document;

	// Grab all the style tags and copy to the new
	// document so that we capture look and feel of
	// the current document.

	// Create a temp document DIV to hold the style tags.
	// This is the only way I could find to get the style
	// tags into IE.
	var jStyleDiv = $jq( "<div>" ).append(
		$jq( "style" ).clone()
		);


	// Write the HTML for the document. In this, we will
	// write out the HTML of the current element.
	objDoc.open();
	objDoc.write( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" );
	objDoc.write( "<html>" );
	objDoc.write( "<body>" );
	objDoc.write( "<head>" );
	objDoc.write( "<title>" );
	objDoc.write( document.title );
	objDoc.write( "</title>" );
    objDoc.write( '<LINK REL="stylesheet" TYPE="text/css" HREF="upfiles/File/css/geomaticmaps_print.css">' );
	objDoc.write( jStyleDiv.html() );
	objDoc.write( "</head>" );
    objDoc.write( "<div id='mapimageprint'>" );
	objDoc.write( $jq(mapCont).html() );
    objDoc.write( "<br /><br />" );
    objDoc.write( $jq(mapDirections).html() );
    objDoc.write( "</div>" );
	objDoc.write( "</body>" );
	objDoc.write( "</html>" );
	objDoc.close();

	// Print the document.
	objFrame.focus();
	objFrame.print();

	// Have the frame remove itself in about a minute so that
	// we don't build up too many of these frames.
	setTimeout(
		function(){
			jFrame.remove();
		},
		(60 * 1000)
		);
   */

    var WinPrint = window.open('','','left=0,top=0,width=1,height=1,t oolbar=0,scrollbars=0,status=0');
    WinPrint.document.write( '<LINK REL="stylesheet" TYPE="text/css" HREF="upfiles/File/css/sigmalivemaps_print.css">' );
    WinPrint.document.write( "<div id='mapimageprint'>" );
	WinPrint.document.write( $jq(mapCont).html() );
    WinPrint.document.write( "</div>" );
    WinPrint.document.write( "<br /><br />" );
    WinPrint.document.write( "<div id='mapimageprint'>" );
    WinPrint.document.write( $jq(mapDirections).html() );
    WinPrint.document.write( "</div>" );
    WinPrint.document.close();
    WinPrint.focus();
    WinPrint.print();
    WinPrint.close();
}