/**
 * Klasa odpowiedzialna za zarzadzanie mapkami 
 */
if(typeof(Meteor) == 'undefined'){ Meteor = {}; }

//**************Klasa do obslugi Document ready***********
(function () {
	var ie  = !!(window.attachEvent && !window.opera);
	var wk  = /webkit\/(\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525);
	var fn  = [];
	var run = function () { for (var i = 0; i < fn.length; i++) fn[i](); };
	var d   = document;
	d.ready = function (f) {
		if (!ie && !wk && d.addEventListener)
			return d.addEventListener('DOMContentLoaded', f, false);
		if (fn.push(f) > 1) return;
		if (ie)
			(function () {
				try { d.documentElement.doScroll('left'); run(); }
				catch (err) { setTimeout(arguments.callee, 0); }
			})();
		else if (wk)
			var t = setInterval(function () {
				if (/^(loaded|complete)$/.test(d.readyState))
					clearInterval(t), run();
			}, 0);
	};
})();

//**************Uzywane przed md5 ***********
function utf8_encode ( argString ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var string = (argString+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}

//**************Klasa do obslugi Md5***********
function md5 (str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // + namespaced by: Michael White (http://getsprink.com)
    // +    tweaked by: Jack
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: md5('Kevin van Zonneveld');
    // *     returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'
 
    var xl;
 
    var rotateLeft = function (lValue, iShiftBits) {
        return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
    };
 
    var addUnsigned = function (lX,lY) {
        var lX4,lY4,lX8,lY8,lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
    };
 
    var _F = function (x,y,z) { return (x & y) | ((~x) & z); };
    var _G = function (x,y,z) { return (x & z) | (y & (~z)); };
    var _H = function (x,y,z) { return (x ^ y ^ z); };
    var _I = function (x,y,z) { return (y ^ (x | (~z))); };
 
    var _FF = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var _GG = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var _HH = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var _II = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var convertToWordArray = function (str) {
        var lWordCount;
        var lMessageLength = str.length;
        var lNumberOfWords_temp1=lMessageLength + 8;
        var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
        var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
        var lWordArray=new Array(lNumberOfWords-1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount-(lByteCount % 4))/4;
        lBytePosition = (lByteCount % 4)*8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
        lWordArray[lNumberOfWords-2] = lMessageLength<<3;
        lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
        return lWordArray;
    };
 
    var wordToHex = function (lValue) {
        var wordToHexValue="",wordToHexValue_temp="",lByte,lCount;
        for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            wordToHexValue_temp = "0" + lByte.toString(16);
            wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length-2,2);
        }
        return wordToHexValue;
    };
 
    var x=[],
        k,AA,BB,CC,DD,a,b,c,d,
        S11=7, S12=12, S13=17, S14=22,
        S21=5, S22=9 , S23=14, S24=20,
        S31=4, S32=11, S33=16, S34=23,
        S41=6, S42=10, S43=15, S44=21;
 
    str = this.utf8_encode(str);
    x = convertToWordArray(str);
    a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
    
    xl = x.length;
    for (k=0;k<xl;k+=16) {
        AA=a; BB=b; CC=c; DD=d;
        a=_FF(a,b,c,d,x[k+0], S11,0xD76AA478);
        d=_FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
        c=_FF(c,d,a,b,x[k+2], S13,0x242070DB);
        b=_FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
        a=_FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
        d=_FF(d,a,b,c,x[k+5], S12,0x4787C62A);
        c=_FF(c,d,a,b,x[k+6], S13,0xA8304613);
        b=_FF(b,c,d,a,x[k+7], S14,0xFD469501);
        a=_FF(a,b,c,d,x[k+8], S11,0x698098D8);
        d=_FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
        c=_FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
        b=_FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
        a=_FF(a,b,c,d,x[k+12],S11,0x6B901122);
        d=_FF(d,a,b,c,x[k+13],S12,0xFD987193);
        c=_FF(c,d,a,b,x[k+14],S13,0xA679438E);
        b=_FF(b,c,d,a,x[k+15],S14,0x49B40821);
        a=_GG(a,b,c,d,x[k+1], S21,0xF61E2562);
        d=_GG(d,a,b,c,x[k+6], S22,0xC040B340);
        c=_GG(c,d,a,b,x[k+11],S23,0x265E5A51);
        b=_GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
        a=_GG(a,b,c,d,x[k+5], S21,0xD62F105D);
        d=_GG(d,a,b,c,x[k+10],S22,0x2441453);
        c=_GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
        b=_GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
        a=_GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
        d=_GG(d,a,b,c,x[k+14],S22,0xC33707D6);
        c=_GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
        b=_GG(b,c,d,a,x[k+8], S24,0x455A14ED);
        a=_GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
        d=_GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
        c=_GG(c,d,a,b,x[k+7], S23,0x676F02D9);
        b=_GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
        a=_HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
        d=_HH(d,a,b,c,x[k+8], S32,0x8771F681);
        c=_HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
        b=_HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
        a=_HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
        d=_HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
        c=_HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
        b=_HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
        a=_HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
        d=_HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
        c=_HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
        b=_HH(b,c,d,a,x[k+6], S34,0x4881D05);
        a=_HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
        d=_HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
        c=_HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
        b=_HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
        a=_II(a,b,c,d,x[k+0], S41,0xF4292244);
        d=_II(d,a,b,c,x[k+7], S42,0x432AFF97);
        c=_II(c,d,a,b,x[k+14],S43,0xAB9423A7);
        b=_II(b,c,d,a,x[k+5], S44,0xFC93A039);
        a=_II(a,b,c,d,x[k+12],S41,0x655B59C3);
        d=_II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
        c=_II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
        b=_II(b,c,d,a,x[k+1], S44,0x85845DD1);
        a=_II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
        d=_II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
        c=_II(c,d,a,b,x[k+6], S43,0xA3014314);
        b=_II(b,c,d,a,x[k+13],S44,0x4E0811A1);
        a=_II(a,b,c,d,x[k+4], S41,0xF7537E82);
        d=_II(d,a,b,c,x[k+11],S42,0xBD3AF235);
        c=_II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
        b=_II(b,c,d,a,x[k+9], S44,0xEB86D391);
        a=addUnsigned(a,AA);
        b=addUnsigned(b,BB);
        c=addUnsigned(c,CC);
        d=addUnsigned(d,DD);
    }
 
    var temp = wordToHex(a)+wordToHex(b)+wordToHex(c)+wordToHex(d);
 
    return temp.toLowerCase();
}

/**
 * Klasa zarzadzaninia ladowaniem kontenera mapki
 */
Meteor.MapsManager = function(){
	o = {
		clientDomain : top.window.location.toString().split(/\/+/g)[1],
		hashKey : '',
		obiektId : ''
	};
	
	/**
	 * Ogolne parametry klasy
	 */
	var options = {
		url : '',
		mapContainerID : 'MeteorMapContainer',
		linkID : 'MeteorLinki',
		obiektIDAttribute : 'data-id',
		mapWidth : 0,
		mapHeight : 0,
		meteorService : false,
		noLinks : false,
		beforeShowCallback : function(){},
		afterShowCallback : function(){}		
	};
	
	/**
	 * Opcje wyswietlania mapki mozliwe do nadpisania 
	 */
	o.mapDisplayOptions = {
			
	}
	
	/**
	 * Konstruktor
	 */
	var _init  = function(){
	}();
	
	var getUrl = function(){
		return options.url = 'http://add.meteor24.pl/miniservice/?c=GetLocalisation'+"&domain="+o.clientDomain+"&obiektNr="+o.obiektId+"&key="+o.hashKey;
	}
	
	/**
	 * Metoda pokazuje mape
	 */
	o.showMap = function(param){
		setOptions(param);
		
		if (!options.meteorService) {
			document.ready(function(){
				// wywolanei funkcji przed wklejeniem mapki
				options.beforeShowCallback();
				
				// wklejenie mapki 
				insertMap();
				
				// wywolanie funkcji po wklejeniu mapki
				options.afterShowCallback();
			});
		} else {
			// wywolanei funkcji przed wklejeniem mapki
			options.beforeShowCallback();
			
			// wklejenie mapki
			insertMap();

			// wywolanie funkcji po wklejeniu mapki
			options.afterShowCallback();
		}
	};
	
	var setOptions = function(oParams){
		if (typeof(oParams) != "undefined"){
			if (typeof(oParams.mapWidth) != "undefined"){
				options.mapWidth = oParams.mapWidth;
			}
			if (typeof(oParams.mapHeight) != "undefined"){
				options.mapHeight = oParams.mapHeight;
			}
			if (typeof(oParams.beforeShowCallback) != "undefined"){
				options.beforeShowCallback = oParams.beforeShowCallback;
			}
			if (typeof(oParams.afterShowCallback) != "undefined"){
				options.afterShowCallback = oParams.afterShowCallback;
			}
		}
		
		if (typeof(MeteorSerwis) != "undefined" && MeteorSerwis == 1){
			options.meteorService = true;
			options.noLinks = true;
		}
	}
	
	/**
	 * Metoda wkleja mapke do drzewa DOM
	 * @exception {string} Cannot find required HTML Tag in DOM
	 * @exception {string} Cannot find required attribute 'obiektNr'
	 */
	var insertMap = function(sObiektId){
		if (!options.noLinks && !testIfMapProperlyInserted()){
			throw {name: "", message: "Map inserted improperly."};
		}
		
		o.requiredElement = document.getElementById(options.mapContainerID);		
		if (o.requiredElement != null){
			o.obiektId = o.requiredElement.getAttribute(options.obiektIDAttribute);
			if (o.obiektId != null){
				// ukrycie linkow 
				if (!options.noLinks) {
					document.getElementById(options.linkID).style.display = "none";
				}
				// obliczenie hash'a
				o.hashKey = md5(o.obiektId+o.clientDomain);
				// wklejenie mapki
				var width = (options.mapWidth != 0)?options.mapWidth :o.requiredElement.style.width;
				var height = (options.mapHeight != 0)?options.mapHeight:o.requiredElement.style.height;
				createIframeElement(width,height, getUrl());
			} else {
				throw {name: "", message: "Cannot find required attribute '"+options.obiektIDAttribute+"'."}
			}
		} else {
			// Brak wymaganego elementu w DOM
			throw {name: "", message: "Cannot find required HTML Tag in DOM."}
		}
	};
	
	/**
	 * Metoda sprawdza czy mapa zostala prawidlowo wstawiona
	 * @return {Boolean} status wklejenia mapz
	 */
	var testIfMapProperlyInserted = function(){
		if (document.getElementById(options.linkID) != null){
			if(!document.getElementById(options.linkID).innerHTML.match(/(href="http:\/\/meteor24.pl")|(href="http:\/\/meteor.turystyka.pl")|(href="http:\/\/ibed.pl")/)){
				return false;				
			}
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * Utworzenie i wstawienie do drzewa DOM Iframa o zadanych parametrach
	 * @param {Object} width wysokość
	 * @param {Object} height wysokość
	 * @param {Object} src źródło
	 */
	var createIframeElement = function(width, height, src){
		var iframeElement = document.createElement('iframe');
		iframeElement.setAttribute('src',src);
		iframeElement.setAttribute('width',width);
		iframeElement.setAttribute('height',height);
		iframeElement.setAttribute('border' ,0);
		iframeElement.setAttribute('frameborder', 0);
		o.requiredElement.appendChild(iframeElement);
	}
	
	var setDefault = function(){
		
	};
	
	return o;
}

/**
 * Klasa zarzadza narzedziami uzywanymi przy ustawianiu mapy.
 */
Meteor.MapsManager.Tools = {
	options : {
		mapContainerID : "map",
		direction : null,
		radius : 3,
		map : null,
		pLinePoints : null,
		normalProj : null,
		searchAreaHighlight : null,
		logoPath : "http://add.meteor24.pl/gfx/meteor24.pl/5_t.gif",
		logoLinkHref : "http://www.meteor24.pl",
		markerPath : "http://add.meteor24.pl/miniservice/resources/GetLocalisation/gfx/gaim.gif"
	},
	
	getHtmlStructure : function(){
		return "<a class='kldg' href='"+this.options.logoLinkHref+"' target='_top'><img height='27' width='150' src='"+this.options.logoPath+"' class='kldg'></a><div class='menu'><div id='topStrip'><b><input type='text' value=''/><input type='button' value='Pokaż trasę dojazdu' /></b></div><div id='rightStrip'><div id='rightStripPanel'><button class='m_zoomin'></button><button class='m_zoomout'></button><u /></div></div></div>";
	},
	
	
	
	prepareGoogleMap : function(){
		if (GBrowserIsCompatible()) {
			_mFlags = {}
			_mSvgEnabled = false;

			Meteor.MapsManager.Tools.options.map = new GMap2(document.getElementById(Meteor.MapsManager.Tools.options.mapContainerID));
			Meteor.MapsManager.Tools.options.map.enableScrollWheelZoom();
			Meteor.MapsManager.Tools.options.map.enableDoubleClickZoom();
			Meteor.MapsManager.Tools.options.map.enableContinuousZoom();

			Meteor.MapsManager.Tools.options.map.setCenter(new GLatLng(52.15932, 19.13432), 5);

			_mPreferMetric=true;
			GEvent.addListener(Meteor.MapsManager.Tools.options.map, "mouseover", function(){
				Meteor.MapsManager.Tools.options.map.addControl(new GOverviewMapControl());
				Meteor.MapsManager.Tools.options.map.showControls();
			});
			GEvent.addListener(Meteor.MapsManager.Tools.options.map, "mouseout", function(){
				Meteor.MapsManager.Tools.options.map.hideControls();
			});
			this.options.directions = new GDirections(Meteor.MapsManager.Tools.options.map, null);
			this.options.normalProj = G_NORMAL_MAP.getProjection();
			GEvent.addListener(this.options.directions, "load", this.directionsOnLoad);
			GEvent.addListener(this.options.directions, "error", this.handleGoogleErrors);
		}
	},
	
	findRoute : function(param){
			if (typeof(param.radius)!='undefined') { radius =  param.radius; }
			this.options.directions.load("from: "+param.locFrom+" to: "+param.locTo, {getPolyline:true,locale:'pl_PL'});				
	},

	
	handleGoogleErrors : function(){
		var status = Meteor.MapsManager.Tools.options.directions.getStatus();
		Meteor.MapsManager.Tools.handleMessage(status);
	},
	
	handleMessage : function(param){
		var message;
		switch(param.code){
			case G_GEO_MISSING_ADDRESS:
				message = "Adres docelowy nie został zdefiniowany";
			break;
			case G_GEO_UNKNOWN_ADDRESS:
				message = "Adres docelowy jest nieznany";
			break;
			case G_GEO_UNAVAILABLE_ADDRESS:
				message = "Adres docelowy jest niedostępny";
			break;
			case G_GEO_UNKNOWN_DIRECTIONS:
				message = "System nie potrafi odnaleść drogi pomiędzy podanymi lokacjami, spróbuj podać inny punkt";
			break;
		}
		if (Meteor.MapsManager.Tools.options.searchAreaHighlight) {
			map.removeOverlay(Meteor.MapsManager.Tools.options.searchAreaHighlight);
		}
		this.displayAlert({text: message, header: "Wystąpił błąd podczas przetwarzania rządania."});
	},
	
	displayAlert : function(param){
		if (Meteor.Util != null){
			Meteor.Util.alert(param);
		} else {
			alert(param.text);
		}
	},
	
	directionsOnLoad : function(){

		var status = Meteor.MapsManager.Tools.options.directions.getStatus();
		var bounds = Meteor.MapsManager.Tools.options.directions.getBounds();
		var distance = Meteor.MapsManager.Tools.options.directions.getDistance();
		
		//alert(distance);
		Meteor.MapsManager.Tools.options.map.setCenter(bounds.getCenter(),Meteor.MapsManager.Tools.options.map.getBoundsZoomLevel(bounds));	
		Meteor.MapsManager.Tools.options.pLinePoints = Meteor.MapsManager.Tools.getPolylinePoints(Meteor.MapsManager.Tools.options.directions.getPolyline());			
		var threshhold = Meteor.MapsManager.Tools.options.radius * 1000 * 0.1; 
		var ptsReduced = [];
		var crdToSend=[];
		var lineString = '';
		var lastPoint = new GLatLng(0,0);
		var added = 0;
				
		
		//wybieram przerzedzone punkty 
		for (n = 0 ; n < Meteor.MapsManager.Tools.options.pLinePoints.length ; n++) {
			var p = Meteor.MapsManager.Tools.options.pLinePoints[n];
			if (p.distanceFrom(lastPoint) > threshhold) {
				ptsReduced.push(p);
				lineString += p.lat().toFixed(6) + ',' + p.lng().toFixed(6) + 'x';
				lastPoint = p;
				added++;
			}
		}	
		Meteor.MapsManager.Tools.markSearchArea();	
	},

	getPolylinePoints : function(p) {
		var pLinePoints = Array();
		for (var n = 0 ; n < p.getVertexCount() ; n++ ) {
			pLinePoints.push(p.getVertex(n));
		}
		return pLinePoints;
	},
	
	markSearchArea : function() {
	
		if(!Meteor.MapsManager.Tools.getPolylinePoints){
			return;
		}
		if (Meteor.MapsManager.Tools.options.searchAreaHighlight) {
			Meteor.MapsManager.Tools.options.map.removeOverlay(Meteor.MapsManager.Tools.options.searchAreaHighlight);
		}	

		var center = Meteor.MapsManager.Tools.options.map.getCenter();
		var zoom = Meteor.MapsManager.Tools.options.map.getZoom();
		if (Meteor.MapsManager.Tools.options.pLinePoints && Meteor.MapsManager.Tools.options.pLinePoints.length) {

			for (n = 0 ; n < Meteor.MapsManager.Tools.options.pLinePoints.length ; n++) {
				var p = Meteor.MapsManager.Tools.options.pLinePoints[n];
			}
			var centerPx = Meteor.MapsManager.Tools.options.normalProj.fromLatLngToPixel(center, zoom);
			var nextPxLatLon =  Meteor.MapsManager.Tools.options.normalProj.fromPixelToLatLng(new GPoint(centerPx.x+1,centerPx.y), zoom);
			var dPx = nextPxLatLon.distanceFrom(center)/ 1000; //  /1000;
			var pxWidth = Math.ceil(Meteor.MapsManager.Tools.options.radius / dPx) * 2;
			//GPolyline(points,  color?,  weight?,  opacity?)
			
			Meteor.MapsManager.Tools.options.searchAreaHighlight = new GPolyline(Meteor.MapsManager.Tools.options.pLinePoints,'#FFFF00',pxWidth, 0.30);
			Meteor.MapsManager.Tools.options.map.addOverlay(Meteor.MapsManager.Tools.options.searchAreaHighlight);
		}	
	}
}
