function getCookie(c_name, cookieItems) {
	var resultData = new Array();
		
	if (document.cookie.length>0) {
		var c_start=document.cookie.indexOf(c_name + "=");
		var cookieData = "";
		if (c_start!=-1) { 
			c_start=c_start + c_name.length + 1; 
			var c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			cookieData = unescape(document.cookie.substring(c_start,c_end));
		}

		for(var key in cookieItems) {
			var item = cookieItems[key];
			var itemStart = cookieData.indexOf(item);
			if (itemStart !=-1) {
				itemStart = itemStart + item.length+1;
				var itemEnd = cookieData.indexOf(";",itemStart);
				if(itemEnd == -1) itemEnd = cookieData.length;
				var itemResult = cookieData.substring(itemStart,itemEnd);
				resultData[item] = itemResult;
			}
		}
	}
	return resultData;
}

function setCookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function checkCookie(c_name) {
	if (document.cookie.length > 0){
		if(document.cookie.indexOf(c_name + "=") !=-1) {
			return true;
		}
	}
	return false;
}

/**
 * Constructor for HtmlMarker, which picks up on strings from the GMarker
 * options array, and then calls the GMarker constructor.
 *
 * @param {GLatLng} latlng
 * @param {GMarkerOptions} Named optional arguments:
 *   opt_opts.html {String} text to place in the overlay div.
 *   opt_opts.htmlClass {String} class to use for the overlay div.
 *     (default "HtmlMarker_Class")
 *   opt_opts.htmlOffset {GSize} html offset, the x- and y-distance between
 *     the marker's latlng and the upper-left corner of the text div.
 *   opt_opts.iconImage {String} optional icon image URL. 
 *   	(default empty)
 *   opt_opts.iconShadow {String} optional icon shadow URL. 
 *   	(by default empty)
 */
function HtmlMarker(latlng, opt_opts){
  this.latlng_ = latlng;
  this.opts_ = opt_opts;

  this.html_ = opt_opts.html || "";
  this.htmlClass_ = opt_opts.htmlClass || "HtmlMarker_Class";
  this.htmlOffset_ = opt_opts.htmlOffset || null; // if null then center auto.
  
  this.clickable_ = opt_opts.clickable || true;
  this.title_ = opt_opts.title || "";
  this.htmlVisibility_  = true;
   
  if (opt_opts.draggable) {
  	// This version of HtmlMarker doesn't support dragging.
  	opt_opts.draggable = false;
  }

  this.getIcon().image = opt_opts.iconImage || "";
  this.getIcon().shadow = opt_opts.iconShadow || "";

  GMarker.apply(this, arguments);
  
};


// It's a limitation of JavaScript inheritance that we can't conveniently
// inherit from GMarker without having to run its constructor. In order for 
// the constructor to run, it requires some dummy GLatLng.
HtmlMarker.prototype = new GMarker(new GLatLng(0, 0));

/**
 * Is called by GMap2's addOverlay method. Creates the text div and adds it
 * to the relevant parent div.
 *
 * @param {GMap2} map the map that has had this HtmlMarker added to it.
 */
HtmlMarker.prototype.initialize = function(map) {
  // Do the GMarker constructor first.
  GMarker.prototype.initialize.apply(this, arguments);
  
  this.map_ = map;
  this.div_ = document.createElement("div");
  this.div_.className = this.htmlClass_;
  this.div_.innerHTML = this.html_;
  this.div_.style.position = "absolute";
  this.div_.style.cursor = "pointer";
  this.div_.title = this.title_;
  
  map.getPane(G_MAP_MARKER_PANE).appendChild(this.div_);

  // if offset is null then center auto
  if(null==this.htmlOffset_){
	  this.htmlOffset_ = new GSize(
		  -Math.round(this.div_.offsetWidth/2),
		  -Math.round(this.div_.offsetHeight/2)
	  );
  }
  
  if (this.clickable_) {
    /**
     * Creates a closure for passing events through to the source marker
     * This is located in here to avoid cluttering the global namespace.
     * The downside is that the local variables from initialize() continue
     * to occupy space on the stack.
     *
     * @param {Object} object to receive event trigger.
     * @param {GEventListener} event to be triggered.
     */
    function newEventPassthru(obj, event) {
      return function() { 
        GEvent.trigger(obj, event);
      };
    }
  
    // Pass through events fired on the text div to the marker.
    var eventPassthrus = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout'];
    for(var i = 0; i < eventPassthrus.length; i++) {
      var name = eventPassthrus[i];
      GEvent.addDomListener(this.div_, name, newEventPassthru(this, name));
    }
  }
};

/**
 * Call the redraw() handler in GMarker and our our redrawhtml() function.
 *
 * @param {Boolean} force will be true when pixel coordinates need to be recomputed.
 */
HtmlMarker.prototype.redraw = function(force) {
  GMarker.prototype.redraw.apply(this, arguments);
  this.redrawHtml_();  
};

/**
 * Moves the text div based on current projection and zoom level.
 */
HtmlMarker.prototype.redrawHtml_ = function() {
  // Calculate the DIV coordinates of two opposite corners of our bounds to
  // get the size and position of our rectangle
  var p = this.map_.fromLatLngToDivPixel(this.latlng_);
  var z = GOverlay.getZIndex(this.latlng_.lat());
  
  // Now position our div based on the div coordinates of our bounds
  this.div_.style.left = (p.x + this.htmlOffset_.width) + "px";
  this.div_.style.top = (p.y + this.htmlOffset_.height) + "px";
  this.div_.style.zIndex = z + 1; // in front of the marker
};

/**
 * Remove the text div from the map pane, destroy event passthrus, and calls the
 * default remove() handler in GMarker.
 */
 HtmlMarker.prototype.remove = function() {
  GEvent.clearInstanceListeners(this.div_);
  if (this.div_.outerHTML) {
    this.div_.outerHTML = ""; //prevent pseudo-leak in IE
  }
  if (this.div_.parentNode) {
    this.div_.parentNode.removeChild(this.div_);
  }
  this.div_ = null;
  GMarker.prototype.remove.apply(this, arguments);
};

/**
 * Return a copy of this overlay, for the parent Map to duplicate itself in full. This
 * is part of the Overlay interface and is used, for example, to copy everything in the 
 * main view into the mini-map.
 */
HtmlMarker.prototype.copy = function() {
  return new HtmlMarker(this.latlng_, this.opts_);
};


/**
 * Shows the marker, and shows html if it wasn't hidden. Note that this function 
 * triggers the event GMarker.visibilitychanged in case the marker is currently hidden.
 */
HtmlMarker.prototype.show = function() {
  GMarker.prototype.show.apply(this, arguments);
  if (this.htmlVisibility_) {
    this.showHtml();
  } else {
    this.hideHtml();
  }
};


/**
 * Hides the marker and html if it is currently visible. Note that this function 
 * triggers the event GMarker.visibilitychanged in case the marker is currently visible.
 */
HtmlMarker.prototype.hide = function() {
  GMarker.prototype.hide.apply(this, arguments);
  this.hideHtml();
};


/**
 * Repositions html and marker when setLatLng is called.
 */
HtmlMarker.prototype.setLatLng = function(latlng) {
  this.latlng_ = latlng;
  GMarker.prototype.setLatLng.apply(this, arguments);
  this.redrawHtml_();
};

/**
 * Sets the visibility of the html, which will be respected during show/hides.
 * If marker is visible when set, it will show or hide html appropriately.
 */
HtmlMarker.prototype.setHtmlVisibility = function(visibility) {
  this.htmlVisibility_ = visibility;
  if (!this.isHidden()) { // Marker showing, make visible change
    if (this.htmlVisibility_) {
      this.showHtml();
    } else {
      this.hideHtml();
    }
  }
};


/**
 * Returns whether html visibility is set on.
 * @return {Boolean}  
 */
HtmlMarker.prototype.getHtmlVisibility = function() {
  return this.htmlVisibility_;
};


/**
 * Hides the html of the marker.
 */
HtmlMarker.prototype.hideHtml = function() {
  this.div_.style.visibility = 'hidden';
};


/**
 * Shows the html of the marker.
 */
HtmlMarker.prototype.showHtml = function() {
  this.div_.style.visibility = 'visible';
};

var statsUseMap;
var dAsyncObj;
var hAsyncObj;

/*
var countryStatsToolbar;
YAHOO.util.Event.onContentReady('countryStatsToolbar', function(){
	countryStatsToolbar = new YAHOO.widget.ButtonGroup({id: 'countryStatsPeriod', name: 'countryStatsPeriod', container: 'countryStatsToolbar'});
	countryStatsToolbar.addButtons([
		{label: 'day', value: 1},
		{label: 'week', value: 7},
		{label: 'month', value: 30, checked: true},
		{label: '3 months', value: 90}
	]);
});
*/

function delImages(c) {
	var imgs = c.getElementsByTagName('img');
	for (var i = 0; i < imgs.length; i++) {
		imgs[i].parentNode.removeChild(imgs[i]);
	};
};
function toggleLoader(c, state) {
	delImages(c);
	c.innerHTML += state ? '<img src="http://tjekbenzin.dk/media/?resource=resources%2Freleaze%2F.benzin%2Fimages%2Fajax-loader.gif" />' : '';
};

var asyncUrl = "http://tjekbenzin.dk/async/";
function getStats(useMap) {
	if (dAsyncObj) YAHOO.util.Connect.abort(dAsyncObj);
	if (hAsyncObj) YAHOO.util.Connect.abort(hAsyncObj);
	statsUseMap = useMap;
	var dailyContainer = document.getElementById(useMap ? 'mapStatsDaily' : 'countryStatsDaily');
	var hourlyContainer = document.getElementById(useMap ? 'mapStatsHourly' : 'countryStatsHourly');
	var period = 1;
	var pEls = document.getElementsByName(useMap ? 'mapStatsPeriod' : 'countryStatsPeriod');
	for (var i=0; i< pEls.length; i++) {
		if (pEls[i].checked) {
			period = parseInt(pEls[i].value);
			break;
		};
	};
	toggleLoader(dailyContainer, true);
	toggleLoader(hourlyContainer, true);
	
	var postData = {
		svcId: 'classifiedService',
		controllerId: 'classifiedStatistics',
		methodId: 'getCategorySavings',
		
		cacheable: 'true',
		filter: "c.key='" + buttonGroup.get('checkedButton').get('id') + "'",
		periodInMinutes: period*24*60,
			
		renderTpl: '.js',
		seed: Math.random()
	};
	if (useMap) {
		var bounds = map.getBounds();
		postData.toLatitude = bounds.getSouthWest().lat();
		postData.fromLongitude = bounds.getSouthWest().lng();
		postData.fromLatitude = bounds.getNorthEast().lat();
		postData.toLongitude = bounds.getNorthEast().lng();
	};
	postData.queryId = useMap ? 'perDay.filteredByGeo' : 'perDay';
	dAsyncObj = YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: getDailyStatsCallback}, encodeFormData(postData));

	postData.queryId = useMap ? 'perHour.filteredByGeo' : 'perHour';
	hAsyncObj = YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: getHourlyStatsCallback}, encodeFormData(postData));
};

function getDailyStatsCallback(o) {
	var maxAxis = 100;
	var dailyContainer = document.getElementById(statsUseMap ? 'mapStatsDaily' : 'countryStatsDaily');
	var daysData = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]];
	var savings = [];
	try {
		var data = YAHOO.lang.JSON.parse(o.responseText);
	} catch (x) {
		alert("JSON Parse failed!");
		toggleLoader(dailyContainer, false);
		return;
	};
	toggleLoader(dailyContainer, true);
	if (data.valid) {
		var data = data.response.categorySavingsMap;
		for (var day in data) {
			for (var j = 0; j < data[day].length; j++) {
				var dow = (data[day][j].perDayOrHour + 5) % 7;
				if (data[day][j].savings) {
					daysData[dow][0] += data[day][j].savings;
					daysData[dow][1]++;
				};
			};
		};

		//calculate savings
		var maxSaving = 0;
		for (var i = 0; i < 7; i++) {
			savings[i] = (daysData[i][1]) ? daysData[i][0]/daysData[i][1] : 0;
			if (savings[i] > maxSaving) maxSaving = savings[i];
		};

		//normalize savings to percents
		var maxAxis = Math.max(Math.ceil(maxSaving/50)*50, 50);
		for (var i = 0; i < 7; i++) {
			savings[i] = savings[i]/maxAxis*100;
		};
		var axisLabels = '';
		for (var i = 0; i <= 5; i++) {
			axisLabels += '|' + maxAxis/5*i;
		};

		var values = savings.join(',');
		
		var imgData = "<img src='http://chart.apis.google.com/chart?";
		imgData += "chs=220x150"; //Size
		imgData += "&amp;chbh=20"; //column width
		imgData += "&amp;cht=bvg"; // type
		imgData += "&amp;chts=000000,12"; //color
		imgData += "&amp;chf=bg,s,ffffff|c,s,ffffff"; // BG color
		imgData += "&amp;chxt=x,y"; // XY needed
		imgData += "&amp;chxl=0:|man|tir|ons|tor|fre|lør|søn|1:" + axisLabels; // XY strings data
		imgData += "&amp;chd=t:" + values; // XY % data
		imgData += "&amp;chco=cc0000"; // color
		imgData += "&amp;chls=1,1,0"; // line style
		imgData += "&amp;chg=14.2857,10,1,5"; // net line style
		imgData += "' alt='Gennemsnit besparelse i øre pr. dag.'/>"; // net line style
		toggleLoader(dailyContainer, false);
		dailyContainer.innerHTML += imgData;
	} else {
		alert('not valid');
	};
};

function getHourlyStatsCallback(o) {
	var hourlyContainer = document.getElementById(statsUseMap ? 'mapStatsHourly' : 'countryStatsHourly');
	var hoursData = new Array();
	var savings = new Array();
	for (var i = 0; i < 24; i++) {
		savings[i] = 0;
	};
	
	try {
		var data = YAHOO.lang.JSON.parse(o.responseText);
	} catch (x) {
		alert("JSON Parse failed!");
		toggleLoader(hourlyContainer, false);
		return;
	};
	toggleLoader(hourlyContainer, true);
	if (data.valid) {
		var data = data.response.categorySavingsMap;

		//calc savings
		var maxSaving = 0;
		for (var i = 0; i < 24; i++) {
			try {
				for (var j = 0; j < data[i].length; j++)
					savings[i] += data[i][j].savings/data[i].length;
			} catch(e) {
				savings[i] = 0;
			};
			if (savings[i] < 0) savings[i] = 0;
			if (savings[i] > maxSaving) maxSaving = savings[i];
		};
		//normalize savings to percents
		var maxAxis = Math.max(Math.ceil(maxSaving/50)*50, 50);
		for (var i = 0; i < 24; i++) {
			savings[i] = savings[i]/maxAxis*100;
		};
		var axisLabels = '';
		for (var i = 0; i <= 5; i++) {
			axisLabels += '|' + maxAxis/5*i;
		};

		//fill from 0 to first
		var firstIndex = 0;
		for (var i = 23; i >= 0; i--) {
			if (savings[i]) firstIndex = i;
		};
		for (var i = 0; i < firstIndex; i++) {
			savings[i] = savings[firstIndex];
		};

		//fill gaps
		for (var i = firstIndex; i < 24; i++) {
			if (savings[i]) {
				firstIndex = i;
			} else {
				savings[i] = savings[firstIndex];
			};
		};
		savings[24] = savings[0];
		var values = savings.join(',');
		
		var imgData = "<img src='http://chart.apis.google.com/chart?";
		imgData += "chs=330x150"; //Size
		imgData += "&amp;cht=lc"; // type
		imgData += "&amp;chts=000000,12"; //color
		imgData += "&amp;chf=bg,s,ffffff|c,s,ffffff"; // BG color
		imgData += "&amp;chxt=x,y"; // XY needed
		imgData += "&amp;chxl=0:|0|2|4|6|8|10|12|14|16|18|20|22|24|1:" + axisLabels; // XY strings data
		imgData += "&amp;chd=t:" + values; // XY % data
		imgData += "&amp;chco=cc0000"; // color
		imgData += "&amp;chls=1,1,0"; // line style
		imgData += "&amp;chg=4.1666,10,1,5"; // net line style
		imgData += "' alt='Gennemsnit besparelse i øre pr. time.'/>"; // net line style
		toggleLoader(hourlyContainer, false);
		hourlyContainer.innerHTML += imgData;
	} else {
		alert('not valid');
	};
};
// some constants
// NEED TO DEFINE ALMOST ALL OF THEM IN .property FILE


var cookieItems = {
	zoom:"zoom",
	lat:"lat",
	lng:"lng",
	type:"type",
	time:"time",
	mapType:"mapType",
	help:"help",
	gasTypes:"gasTypes"
};
var currentCountryCode = 'DK';

var cookieEnabled = false;
if (checkCookie('benzinUser')) {
	cookieEnabled = true;
	var cookies = getCookie('benzinUser', cookieItems);
}

var TIME_RANGE_SCALE = parseInt("6");
var TIME_RANGE_MAX_HOURS = parseInt("24");
var TIME_RANGE_INIT_HOURS = parseInt("2");
var CUSTOM_GAS_TYPES_MAX_COUNT = parseInt("6");
	var INIT_MAP_LAT;
		if ( cookieEnabled && cookies[cookieItems.lat] ) {
			INIT_MAP_LAT = cookies[cookieItems.lat];
			if(cookies[cookieItems.lat] == "true"){
				INIT_MAP_LAT = true;
			}
			if(cookies[cookieItems.lat] == "false"){
				INIT_MAP_LAT = false;
			}
		} else {
			INIT_MAP_LAT = 56.267761;
		}

	var INIT_MAP_LNG;
		if ( cookieEnabled && cookies[cookieItems.lng] ) {
			INIT_MAP_LNG = cookies[cookieItems.lng];
			if(cookies[cookieItems.lng] == "true"){
				INIT_MAP_LNG = true;
			}
			if(cookies[cookieItems.lng] == "false"){
				INIT_MAP_LNG = false;
			}
		} else {
			INIT_MAP_LNG = 9.558105;
		}

	var INIT_MAP_ZOOM;
		if ( cookieEnabled && cookies[cookieItems.zoom] ) {
			INIT_MAP_ZOOM = cookies[cookieItems.zoom];
			if(cookies[cookieItems.zoom] == "true"){
				INIT_MAP_ZOOM = true;
			}
			if(cookies[cookieItems.zoom] == "false"){
				INIT_MAP_ZOOM = false;
			}
		} else {
			INIT_MAP_ZOOM = 7;
		}

	var INIT_TYPE;
		if ( cookieEnabled && cookies[cookieItems.type] ) {
			INIT_TYPE = cookies[cookieItems.type];
			if(cookies[cookieItems.type] == "true"){
				INIT_TYPE = true;
			}
			if(cookies[cookieItems.type] == "false"){
				INIT_TYPE = false;
			}
		} else {
			INIT_TYPE = 0;
		}

	var INIT_MAP_TYPE;
		if ( cookieEnabled && cookies[cookieItems.mapType] ) {
			INIT_MAP_TYPE = cookies[cookieItems.mapType];
			if(cookies[cookieItems.mapType] == "true"){
				INIT_MAP_TYPE = true;
			}
			if(cookies[cookieItems.mapType] == "false"){
				INIT_MAP_TYPE = false;
			}
		} else {
			INIT_MAP_TYPE = 0;
		}

	var INIT_TIME;
		if ( cookieEnabled && cookies[cookieItems.time] ) {
			INIT_TIME = cookies[cookieItems.time];
			if(cookies[cookieItems.time] == "true"){
				INIT_TIME = true;
			}
			if(cookies[cookieItems.time] == "false"){
				INIT_TIME = false;
			}
		} else {
			INIT_TIME = TIME_RANGE_INIT_HOURS;
		}

	var INIT_HELP;
		if ( cookieEnabled && cookies[cookieItems.help] ) {
			INIT_HELP = cookies[cookieItems.help];
			if(cookies[cookieItems.help] == "true"){
				INIT_HELP = true;
			}
			if(cookies[cookieItems.help] == "false"){
				INIT_HELP = false;
			}
		} else {
			INIT_HELP = true;
		}



var asyncUrl = "http://tjekbenzin.dk/async/";

var INFO_ID = 'mapInfoBox';
var INFO_TOP_OFFSET = "-35";
var ZOOM_TRESHOLD = "11";
var buttonGroup;
var customButtons = [];
var userAliasForSms;
var aliasContainer = new Array();

var asyncObj;
var categories = new Array();

var oAC; // global YUI AutoComplete object
var placesArray = new Array(); // array for adresses retrieved by google maps address search
var placesCoords = new Array(); // array for addresses coordinates
var tabView;
var oDS = new YAHOO.util.FunctionDataSource(function () { // YUI DataSet object needed for AutoComplete
	return placesArray;
});

var geocoder = new GClientGeocoder();
geocoder.setBaseCountryCode(currentCountryCode);

YAHOO.util.Connect.setPollingInterval(60);
var firstLoad = true;
var mapCenterLan = INIT_MAP_LAT;
var mapCenterLong = INIT_MAP_LNG;
var mapZoom = parseInt(INIT_MAP_ZOOM);
var googleMapType = INIT_MAP_TYPE;
var mapType = INIT_TYPE;
var timePeriods = [1, 3, 6, 12, 24, 48];
var currentTimePeriodIndex = parseInt(INIT_TIME);
var currentTimePeriodIndex = (currentTimePeriodIndex >= timePeriods.length)?TIME_RANGE_INIT_HOURS:currentTimePeriodIndex;

var isHelpInfo = INIT_HELP;

var map = '';
var markers = new Array(); // array for markers(gas stations) coordinates
var gasStations = new Array(); // array for gas stations data
var selectedMarker = 0;

try {
	var typeOfGas = cookies[cookieItems.gasTypes].split(',');
} catch(e) {
	var typeOfGas = [
		'oktan92',
		'oktan95',
		'oktan98',
		'oktan98green',
		'diesel'
	];
};

var allStations = false;

function removeLoadingMask() {
	firstLoad = false;
	var loadingMask = YAHOO.util.Dom.get('loading-mask');
	if ( loadingMask ) loadingMask.parentNode.removeChild(loadingMask);
	var loadingDiv = YAHOO.util.Dom.get('loading');
	if ( loadingDiv ) loadingDiv.parentNode.removeChild(loadingDiv);
}

function getCurrentGeoUrl() {
	var url = $ar("lat", mapCenterLan, new String(window.location.href), true);
	url = $ar("lng", mapCenterLong, url, true);
	url = $ar("zoom", mapZoom, url, true);
	return url;
}

function getIndexOfCurrentMapType() {
	var i=0;
	var mapTypes = map.getMapTypes();
	var curMapType = map.getCurrentMapType();
	for (i=0; i<mapTypes.length; i++) {
		if ( mapTypes[i] === curMapType  ) {
			return i;
		}
	}
	return 0;
}

function helpInfo(el){
	el.parentNode.parentNode.style.display='none';

	isHelpInfo = false;
	var cookieData = cookieItems.zoom + '=' + mapZoom + ';';
	cookieData += cookieItems.lat + '=' + mapCenterLan + ';';
	cookieData += cookieItems.lng + '=' + mapCenterLong + ';';
	cookieData += cookieItems.type + '=' + mapType + ';';
	cookieData += cookieItems.mapType + '=' + googleMapType + ';';
	cookieData += cookieItems.time + '=' + currentTimePeriodIndex + ';';
	cookieData += cookieItems.help + '=false;';

	var buttons = buttonGroup.getButtons();
	var buttonKeys = '';
	for (var i = 0; i < buttons.length; i++) {
		buttonKeys += buttons[i].get('id') + ',';
	};
	buttonKeys = buttonKeys.replace(/,$/, '');
	cookieData += cookieItems.gasTypes + '=' + buttonKeys + ';';
	
	setCookie('benzinUser', cookieData, 14);

}

function formatDate(oDate) {
	var fDate = "";
	var today = new Date();
	var milisecToday = today.getHours()*3600000 + today.getMinutes()*60000 + today.getSeconds()*1000;
	var day = 86400000;

	if ((today.getTime() - milisecToday) < oDate.getTime()){
		fDate = "idag, " + oDate.format("HH:MM");
		return fDate;
	}

	if((today.getTime() - (milisecToday + day)) < oDate.getTime()) {
		fDate = "igår, " + oDate.format("HH:MM");
		return fDate;
	}
	else {
		var fDate = oDate.format("d mmm, HH:MM");
		return fDate;
	}

};



function formatDateSmall(oDate) {
	var fDate = "";
	var today = new Date();
	var milisecToday = today.getHours()*3600000 + today.getMinutes()*60000 + today.getSeconds()*1000;
	var day = 86400000;

	if ((today.getTime() - milisecToday) < oDate.getTime()){
		fDate = "idag,";
		return fDate;
	}

	if((today.getTime() - (milisecToday + day)) < oDate.getTime()) {
		fDate = "igår,";
		return fDate;
	}
	else {
		var fDate = oDate.format("d mmm");
		return fDate;
	}
};

function formatDateTmp(oDate) {
	var fDate = oDate.getDate() + '' +
		(oDate.getMonth() +1) + '' +
		oDate.getFullYear() + '' +
		oDate.getHours() + '' +
		oDate.getMinutes();

	return fDate;
};

function gmapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("gmap"));
		map.setCenter(new GLatLng(INIT_MAP_LAT, INIT_MAP_LNG), mapZoom); //Center to Denmark
		map.addControl(new GLargeMapControl());

		map.addControl(new GMapTypeControl());

		map.enableContinuousZoom();
		map.enableDoubleClickZoom();
		map.enableScrollWheelZoom();
		
		map.setMapType(map.getMapTypes()[googleMapType]);

		var helpAlert = document.getElementById('helpAlert');
		map.getContainer().appendChild(helpAlert);
		YAHOO.util.Dom.setStyle('helpAlert', 'display', isHelpInfo?'block':'none');

		GEvent.addListener(map, 'maptypechanged', function() {
			googleMapType = getIndexOfCurrentMapType();
		});
		GEvent.addListener(map, 'moveend', getPoints);
	};
};

// get gas stations based on currently visible map viewport and search options
function getPoints() {
	if (tabView.get('activeIndex') == 2) getStats(true);

	if (asyncObj) {
		YAHOO.util.Connect.abort(asyncObj);
	};
	markers = new Array();
	gasStations = new Array();

	mapCenterLan = map.getCenter().lat();
	mapCenterLong = map.getCenter().lng();
	mapZoom = map.getZoom();

	var cookieData = cookieItems.zoom + '=' + mapZoom + ';';
	cookieData += cookieItems.lat + '=' + mapCenterLan + ';';
	cookieData += cookieItems.lng + '=' + mapCenterLong + ';';
	cookieData += cookieItems.type + '=' + mapType + ';';
	cookieData += cookieItems.mapType + '=' + googleMapType + ';';
	cookieData += cookieItems.time + '=' + currentTimePeriodIndex + ';';
	cookieData += cookieItems.help + '=' + isHelpInfo + ';';

	var buttons = buttonGroup.getButtons();
	var buttonKeys = '';
	for (var i = 0; i < buttons.length; i++) {
		buttonKeys += buttons[i].get('id') + ',';
	};
	buttonKeys = buttonKeys.replace(/,$/, '');
	cookieData += cookieItems.gasTypes + '=' + buttonKeys + ';';

	setCookie('benzinUser', cookieData, 14);

	var bounds = map.getBounds();
	var period = timePeriods[currentTimePeriodIndex];

	var swLat = bounds.getSouthWest().lat();
	var swLng = bounds.getSouthWest().lng();
	var neLat = bounds.getNorthEast().lat();
	var neLng = bounds.getNorthEast().lng();

	var query = '+latitude:[' + swLat + ' TO ' + neLat + '] ' +
		'+longitude:[' + swLng + ' TO ' + neLng + ']';

	if (period < 48) {
		var now = new Date().getTime();
		var minStartDate = now - period * 3600 * 1000;
		query += ' +startDate:[' + minStartDate + 'ms TO ' + now + 'ms]';
	}

	var categoryKey = buttonGroup.get("checkedButton").get("id");

	var postData;
	var onSuccess = test;

	var imageSize = 30 + (map.getZoom() - parseInt(ZOOM_TRESHOLD))*6;

	postData = {
		svcId: 'classifiedService',
		controllerId: 'classifiedSearch',
		methodId: 'searchAds',

		queryString: query,
		categoryKey: categoryKey,

		facetFields: ['author'],
		facetSortByField: 'startDate',
		facetSortOrder: 'descending',
		imageSize:imageSize,

		include: [
			'userToCustomer.userId',
			'userToCustomer.userAlias',
			'userToCustomer.geoData.latitude',
			'userToCustomer.geoData.longitude',
			'userToCustomer.profile.business.logo.photo',
			'userToCustomer.profile.business.city',
			'userToCustomer.profile.business.address',
			'userToCustomer.profile.business.username',
			'userToCustomer.alias.locale',
			'alias.locale',
			'price',
			'startDate'
		],

		startFrom: '0',
		count: '100',

		script: 'scripts/GetPoints.java',
		renderTpl: '.js',
		seed: Math.random()
	};

	if (map.getZoom() <= parseInt(ZOOM_TRESHOLD)) {
		postData.cluster = 'true';
		postData.clusterSortByField = 'price';
		postData.clusterSortOrder = 'ascending';

		postData.clusterSizeLatitude = (neLat - swLat) / 7;
		postData.clusterAlgorithm = 'forel';
//		postData.clusterSizeLatitude = (neLat - swLat) / 5;
//		postData.clusterAlgorithm = 'simple';

		postData.count = -1;
		postData.imageSize = 30;
	}

	asyncObj = YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: onSuccess}, encodeFormData(postData));
};

function test(o) {
	if(o.responseText !== undefined){
		try {
			var points = YAHOO.lang.JSON.parse(o.responseText);
		}
		catch (x) {
			alert("JSON Parse failed! test(o)");
			return;
		};

		map.clearOverlays();

		var gs = points.response.users;

		var lastPrices = new Array();
		var last2 = new Array();

		for (var i = 0; i < gs.length; i++) {
			var gs_i = gs[i];

			gasStations[gs_i.id] = gs_i;
			try {
				var localeLetters = gs_i.locale.country.toLowerCase();
				var xOffset = -(localeLetters.charCodeAt(0)-96)*16;
				var yOffset = -(localeLetters.charCodeAt(1)-96)*11;
				var preAddr = '<div class="tableFlag" style="background-position: ' + xOffset + 'px ' + yOffset + 'px"></div><span style="display: block; padding-left: 20px;">';
			} catch(e) {
				var preAddr = '<span>';
			};
			var tmpRAddress = gs_i.address.replace(".", ". ");
			var valueLatPrice = {
				"date": new Date(gs_i.date),
				"name": "<img " + gs_i.logo.imgAttributes + ">&nbsp;&nbsp;&nbsp;<strong>" + gs_i.name + "</strong>",
				"price": (gs_i.userPrice || gs_i.adPrice) .amount,
				"address": preAddr + tmpRAddress + '</span>',
				"lat": parseFloat(gs_i.geoData.latitude),
				"lon": parseFloat(gs_i.geoData.longitude),
				"alias": gs_i.userAlias
			};

			lastPrices.push(valueLatPrice);

			var priceText = ((gs_i.userPrice || gs_i.adPrice).amount).toFixed(2);
			addMarkerNew(
				parseFloat(gs_i.geoData.latitude),
				parseFloat(gs_i.geoData.longitude),
				gs_i.userId,
				gs_i.userAlias,
				gs_i.logo.imgAttributes,
				priceText
				);
		};

		if ( firstLoad ) removeLoadingMask();

		//Latest prices
		var lastDataArray = new Array();
		var caption = "Billigste tanksstation fra aktuelle kortudsnit";

		if(lastPrices[0]) {
			lastPrices.sort(function(adDTO1, adDTO2) {
				var price1 = parseFloat(adDTO1.price);
				var price2 = parseFloat(adDTO2.price);
			 return price1 - price2;
			});

			if(lastPrices.length > 5) {
				var linkAllStations = document.getElementById('linkStations');
				YAHOO.util.Dom.setStyle(linkAllStations, 'display', 'block');
			} else {
				var linkAllStations = document.getElementById('linkStations');
				YAHOO.util.Dom.setStyle(linkAllStations, 'display', 'none');
			};

			if(allStations) {
				for (var counter = 0; counter < lastPrices.length; counter ++) {
					lastDataArray.push(lastPrices[counter]);
				};
			} else {
				for (var counter = 0; counter < lastPrices.length; counter ++) {
					lastDataArray.push(lastPrices[counter]);
					if(counter == 4) break;
				};
			};
			YAHOO.util.Dom.setStyle(lastDataArray[0].alias, 'background-color', '#f0e529');
			YAHOO.util.Dom.setStyle(lastDataArray[0].alias, 'border', '1px #ffa500 solid');
			YAHOO.util.Dom.setStyle('latPrices', 'display', 'block');

			var formatTableDate = function(elCell, oRecord, oColumn, oData) {
				var day = oData.getDate();
				day = (day < 10)?'0' + day :'' + day;
				var month = oData.getMonth() + 1;
				month = (month < 10)?'0' + month:'' + month;
				var hours = oData.getHours();
				hours = (hours < 10)?'0' + hours:'' + hours;
				var minutes = oData.getMinutes();
				minutes = (minutes < 10)?'0' + minutes:'' + minutes;
				elCell.innerHTML = day + '/' + month + '/' + oData.getFullYear() + ' ' + hours + ':' + minutes;
			};

			var myColumnDefs = [
				{key:"date", label:"Tid", formatter:formatTableDate, sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC},resizeable:false, width: 110},
				{key:"name", label:"Navn", sortable:false, resizeable:false, width: 150},
				{key:"price", label:"Pris", formatter:YAHOO.widget.DataTable.formatCurrency, sortOptions:{field:"price"} , sortable:true, resizeable:false, width: 35},
				{key:"address", label:"Adresse", sortable:false, resizeable:false, width: 200}
			];

			var myDataSource = new YAHOO.util.DataSource(lastDataArray);

			myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
			myDataSource.responseSchema = {
				fields: ["date", "name", "logo", "price", "address"]
			};

			var myDataTable = new YAHOO.widget.DataTable("latPrices", myColumnDefs, myDataSource, {caption: caption, currencyOptions:{prefix:"", decimalPlaces:2, decimalSeparator:".", thousandsSeparator:","}});

			myDataTable.set("selectionMode","single");

			myDataTable.subscribe("rowMouseoverEvent", function(oArgs){
				var ob = oArgs["target"];
				var textContent;
				if (ob.textContent) {
					textContent = ob.textContent;
				} else {
					textContent = ob.innerText;
				};

				address = unescape(textContent.substring((textContent.lastIndexOf(".") + 1),textContent.length));

				for (var counti = 0; counti < lastDataArray.length; counti++){
					var arrayAddress = lastDataArray[counti].address.replace(/<[^>]*>/g, '');
					var street = arrayAddress.substring((arrayAddress.lastIndexOf(".") + 1),arrayAddress.length);
					if (street == address){
						for(var counti2 = 0; counti2 < lastDataArray.length; counti2++){
							YAHOO.util.Dom.setStyle(lastDataArray[counti2].alias, 'background-color', '#FFFFFF');
							YAHOO.util.Dom.setStyle(lastDataArray[counti2].alias, 'border', 'none');
						};
						YAHOO.util.Dom.setStyle(lastDataArray[counti].alias, 'background-color', '#f0e529');
						YAHOO.util.Dom.setStyle(lastDataArray[counti].alias, 'border', '1px #ffa500 solid');
						break;
					};
				};
			});

			myDataTable.subscribe("rowClickEvent", function(oArgs) {
				var ob = oArgs["target"];
				var textContent;
				if (ob.textContent) {
					textContent = ob.textContent;
				} else {
					textContent = ob.innerText;
				};
				address = unescape(textContent.substring((textContent.lastIndexOf(".") + 1),textContent.length));
				for (var counti = 0; counti < lastDataArray.length; counti++) {
					var arrayAddress = lastDataArray[counti].address.replace(/<[^>]*>/g, '');
					var street = arrayAddress.substring((arrayAddress.lastIndexOf(".") + 1),arrayAddress.length);
					if (street == address)
						centerMarker(lastDataArray[counti].lat, lastDataArray[counti].lon, lastDataArray[counti].alias);
				};
			});
		} else {
			YAHOO.util.Dom.setStyle('latPrices', 'display', 'none');
		}
		/* End of Latest prices */
	};
	drawMapBanner();
}

function centerMarker (lat, lng, alias) {
	if ( asyncObj ) {
		YAHOO.util.Connect.abort(asyncObj);
	};
	map.setCenter(new GLatLng(lat, lng), map.getZoom());
	var userAlias = alias;
	var period = timePeriods[currentTimePeriodIndex];

	var query = '+author:' + userAlias;

	if(period < 48) {
		var now = new Date().getTime();
		var minStartDate = now - period * 3600 * 1000;
		query += ' +startDate:[' + minStartDate + 'ms TO ' + now + 'ms]';
	}


	var postData = {
		svcId: 'classifiedService',
		controllerId: 'classifiedSearch',
		methodId: 'searchAds',

		queryString: query,

		facetFields: ['categoryPath'],
		facetSortByField: 'startDate',
		facetSortOrder: 'descending',

		include: [
			'userToCustomer.id',
			'userToCustomer.userAlias',
			'userToCustomer.userId',
			'userToCustomer.profile.business.city',
			'userToCustomer.profile.business.address',
			'userToCustomer.profile.business.username',
			'userToCustomer.profile.business.logo.photo',
			'userToCustomer.geoData.*',
			'userToCustomer.alias.locale',
			'alias.locale',
			'price',
			'startDate',
			'category.*',
			'fields.fuel.reporter.id.int.0'
		],

		startFrom: '0',
		count: '100',

		script: 'scripts/GroupLatestAdsByGS.java',
		renderTpl: '.js',
		seed: Math.random()
	}
	asyncObj = YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: responseStationDetails}, encodeFormData(postData));
	var info = YAHOO.util.Dom.get(INFO_ID);
	map.getContainer().appendChild(info);

	mapSize = map.getSize();
	infoWidth = 400;
	infoHeight = 128;


		info.style.left = '126px';

		info.style.top = '63px';

	// events to hide infobox
	YAHOO.util.Event.on(document, 'mousedown', docClick);
	GEvent.addListener(map, 'dragstart', docClick);

}

function addMarkerNew(lat, lng, userId, userAlias, logo, price) {
//alert(userId);

	html = "<table><tr><td><img " + logo + " ></td></tr><tr><td><div id=" + userAlias + " align='center' style='background: #ffffff;font-size:" + map.getZoom() + "; font-weight: 600;'>" + price + "</div></td></tr></table>";

	var icon = new GIcon();
	icon.image = 'http://tjekbenzin.dk/media/?resource=resources%2Freleaze%2F.benzin%2F1_1.gif';
	icon.iconSize = new GSize(1, 1);
	icon.iconAnchor = new GPoint(1, 1);
	icon.infoWindowAnchor = new GPoint(1, 1);

	markers[userId] = new HtmlMarker(new GLatLng(lat, lng), {"html": html, icon: icon});
	markers[userId].getIcon().shadow = '';
	markers[userId].userId = userId;
	markers[userId].userAlias = userAlias;

	map.addOverlay(markers[userId]);

	GEvent.addListener(markers[userId], "click", function() {
		if ( asyncObj ) {
			YAHOO.util.Connect.abort(asyncObj);
		};
		var period = timePeriods[currentTimePeriodIndex];
		var query = '+author:' + userAlias;

		if(period < 48) {
			var now = new Date().getTime();
			var minStartDate = now - period * 3600 * 1000;
			query += ' +startDate:[' + minStartDate + 'ms TO ' + now + 'ms]';
		}


		var postData = {
			svcId: 'classifiedService',
			controllerId: 'classifiedSearch',
			methodId: 'searchAds',

			queryString: query,

			facetFields: ['categoryPath'],
			facetSortByField: 'startDate',
			facetSortOrder: 'descending',

			include: [
				'userToCustomer.id',
				'userToCustomer.userAlias',
				'userToCustomer.userId',
				'userToCustomer.profile.business.city',
				'userToCustomer.profile.business.address',
				'userToCustomer.profile.business.username',
				'userToCustomer.profile.business.logo.photo',
				'userToCustomer.geoData.*',
				'userToCustomer.alias.locale',
				'alias.locale',
				'price',
				'startDate',
				'category.*',
				'fields.fuel.reporter.id.int.0'
			],

			startFrom: '0',
			count: '100',

			script: 'scripts/GroupLatestAdsByGS.java',
			renderTpl: '.js',
			seed: Math.random()
		};
		asyncObj = YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: responseStationDetails}, encodeFormData(postData));
		var info = YAHOO.util.Dom.get(INFO_ID);
		map.getContainer().appendChild(info);

		mapSize = map.getSize();
		infoWidth = 400;
		infoHeight = 128;

/*		if (map.fromLatLngToContainerPixel(this.getLatLng()).x + infoWidth > mapSize.width)
			if (map.fromLatLngToContainerPixel(this.getLatLng()).x - infoWidth < 0)
				info.style.left = map.fromLatLngToContainerPixel(this.getLatLng()).x - parseInt(infoWidth/2) + 'px';
			else
				info.style.left = map.fromLatLngToContainerPixel(this.getLatLng()).x - infoWidth + 'px';
		else
			info.style.left = map.fromLatLngToContainerPixel(this.getLatLng()).x + 'px';
*/
		var centerX = map.fromLatLngToContainerPixel(this.getLatLng()).x;
		var halfInfoWidth = parseInt(infoWidth/2);

		if (centerX + infoWidth > mapSize.width) {
			// Trying to move left
			if (centerX - infoWidth < 0) {
				// Tyring to navigate over borders & to leave close button visible :-)
				if ( (centerX + halfInfoWidth < mapSize.width) && (centerX - halfInfoWidth > 0) ) {
					info.style.left = centerX - halfInfoWidth + 'px';
				} else {
					info.style.left = mapSize.width - infoWidth - 5 + 'px';
				}
			} else {
				info.style.left = centerX - infoWidth + 'px';
			}
		} else {
			// rendering info box to the right of point
			info.style.left = centerX + 'px';
		}

		if (map.fromLatLngToContainerPixel(this.getLatLng()).y - infoHeight + parseInt(INFO_TOP_OFFSET) < 0) {
			info.style.top = map.fromLatLngToContainerPixel(this.getLatLng()).y + 'px';
		} else {
			info.style.top = map.fromLatLngToContainerPixel(this.getLatLng()).y - infoHeight + parseInt(INFO_TOP_OFFSET) + 'px';
		}

		// events to hide infobox
		YAHOO.util.Event.on(document, 'mousedown', docClick);
		GEvent.addListener(map, 'dragstart', docClick);

	});
};

function responseStationDetails(o){
	try {
			var points = YAHOO.lang.JSON.parse(o.responseText);
		}
		catch (x) {
			alert("JSON Parse failed!");
			YAHOO.util.Dom.setStyle('tempAjax', 'display', 'none');
			alert(o.responseText);
			return;
		};

	var gs = points.response.users[0];
	if ( gs == null ) {
		var info = YAHOO.util.Dom.get(INFO_ID);
		map.getContainer().appendChild(info);
		var lastReporterAlias = 'ukendt';
		var lastReporterLink = 'ukendt';
		var lastReportDate = 'ukendt';
		YAHOO.util.Dom.get('gasPricesUpd').innerHTML = 'Opdateret: ukendt';
		YAHOO.util.Dom.get('userInfo').innerHTML = '<a class="blueUser" href="' + lastReporterLink +'">' + lastReporterAlias + '</a>';
		YAHOO.util.Dom.get('gasPrices').innerHTML = 'ukendt';
		YAHOO.util.Dom.get('gasStationInfo').innerHTML = '<strong> Address: </strong> <br />ukendt';
	} else {
		selectedMarker = gs.id;
		var info = YAHOO.util.Dom.get(INFO_ID);
		map.getContainer().appendChild(info);

		//Generic GasPrices
		var gasPrices = '';

		var lastReporterAlias = gs.ads[0].reporterUserAlias;
		var lastReporterLink = gs.ads[0].reporterUserLink;
		var lastReportDate = gs.ads[0].startDate;

		var lastReportDateTmp = new Date(lastReportDate);
		//lastReportDateTmp = formatDateTmp(lastReportDateTmp);

		for(var index in gs.gasTypeOrder) {
			var gasType = gs.gasTypeOrder[index];

			var newIcons = "<image src='" + gasType.iconUrl + "' />";

			var status = false;
			for(var i in gs.ads) {
				var ad = gs.ads[i];
				var category = ad.category;

				if ( category.key == gasType.key ) {

//					var price = (ad.price/100).toFixed(2);
					var price = ad.adPrice.amount.toFixed(2);
					if ( ad.userPrice != null ) {
						price += ' (' + ad.userPrice.amount + ' ' + ad.userPrice.currencySymbol + ')';
					} else {
						price += ' ' + ad.adPrice.currencySymbol;
					}
					status = true;

					var adLastReportDateTmp = new Date(ad.startDate);
					//adLastReportDateTmp = formatDateTmp(adLastReportDateTmp);

					if ( adLastReportDateTmp > lastReportDateTmp ) {
						lastReporterAlias = ad.reporterUserAlias;
						lastReporterLink = ad.reporterUserLink;
						lastReportDate = ad.startDate;

						lastReportDateTmp = adLastReportDateTmp;
					};

					reportDate = new Date(ad.startDate);

					gasPrices += '<div class="gasType">' + '<span class="priceCat" id="' + category.key + '">'
						+ newIcons + '<span id="priceData">' + price
						+ ' <a href="#" onclick="reportPriceToolbox(this, ' + gs.userId + ', \''
						+ gs.userAlias + '\', ' + category.id + ', ' + parseFloat(gs.geoData.latitude) + ', '
						+ parseFloat(gs.geoData.longitude) + ', \'' + category.key + '\', \''
						+ price + '\',\'' + formatDate(reportDate) + '\', \'' + gasType.iconUrl + '\'); return false;"> Indberet</a> </span></span></div>';

					var myTooltip = new YAHOO.widget.Tooltip("myTooltip", {
						context:category.key,
						text:formatDate(reportDate)} );

					break;
				}
			}

			if( !status ){
				gasPrices += '<div class="gasType">' + '<span class="priceCat" id="' + gasType.key + '">'
						+ newIcons + '<span id="priceData"> Ingen data ' +
						 ' <a href="#" onclick="reportPriceToolbox(this, ' + gs.userId + ', \''
						 + gs.userAlias + '\', ' + gasType.id + ', ' + parseFloat(gs.geoData.latitude) + ', '
						 + parseFloat(gs.geoData.longitude) + ', \'' + gasType.key
						 + '\', \'No data\', \'null\' ); return false;"> Indberet</a> </span></span></div>';
			}

		}

		lastReportDate = new Date(lastReportDate);
		YAHOO.util.Dom.get('gasPricesUpd').innerHTML = 'Opdateret: ' + formatDate(lastReportDate);

		if ( 'anonymous' == lastReporterAlias ) {
			lastReporterAlias = '';
		}

		YAHOO.util.Dom.get('userInfo').innerHTML = 'af: <a class="blueUser" href="' + lastReporterLink +'">' + lastReporterAlias + '</a>';
		YAHOO.util.Dom.get('gasPrices').innerHTML = gasPrices;

		var currentUserId = '4';

		try {
			var localeLetters = gs.locale.country.toLowerCase();
			var xOffset = -(localeLetters.charCodeAt(0)-96)*16;
			var yOffset = -(localeLetters.charCodeAt(1)-96)*11;
			var preAddr = '<div class="tableFlag" style="margin-right: 5px; background-position: ' + xOffset + 'px ' + yOffset + 'px"></div>';
		} catch(e) {
			var preAddr = '';
		};
		var profileAddress = preAddr + gs.profile.address + '. ' + gs.profile.city;
		if( 'yes' == 'no' ) {
			var alias = gs.alias;
			var bookmark = gs.bookmark;
			var img_bookmark = "";
			var tooltip_id = "";
			var tooltip_text = "";
			var book_link = "";
			var book_onclick = "";

			if(bookmark != null) {

				if(bookmark){
					img_bookmark = "http://tjekbenzin.dk/media/?resource=resources%2Freleaze%2F.benzin%2Fimages%2Fstar_yellow.gif";
					tooltip_id = "bookmarked";
					tooltip_text = "Se mine favoritter";
					book_link = "http://tjekbenzin.dk/userhome.spage";
					book_onclick = "";
				}
				else {
					img_bookmark = "http://tjekbenzin.dk/media/?resource=resources%2Freleaze%2F.benzin%2Fimages%2Fstar_blue.gif";
					tooltip_id = "add_bookmark";
					tooltip_text = "Tilføj til favoritter";
					book_link = "#";
					book_onclick = "addBookmark(" + gs.userId + ", '" + gs.userAlias + "'); return false;";
				}

				//gs...locale
				YAHOO.util.Dom.get('gasStationInfo').innerHTML = '<div style="float: left; padding-bottom: 10px; width: 150px; overflow:hidden;"><span style="float: left;"><a href="'	+ gs.profileLink + '"><img ' + gs.logo.imgAttributes + ' alt="'
				+ gs.stationName + '"></a></span><span id="' + tooltip_id + '"><a href="' + book_link + '" onclick="' + book_onclick + '"><img src=' + img_bookmark + '></a></span>'
				+ '<span id="stationAddress" style="clear: both; float: left; width: 170px; overflow: hidden;"><a href="' + gs.profileLink + '">'
				+ profileAddress + '</a></span></div>';

				var myTooltip = new YAHOO.widget.Tooltip("myTooltip", {
						context:tooltip_id,
						text:tooltip_text} );
			}
			if('da_DK' !== 'uk_UA'){
				if ( alias != null ) {
					YAHOO.util.Dom.get('gasStationInfo').innerHTML += '<div id="smsAlias"><strong>SMS-alias:</strong> ' + alias + ' <a href="#" onclick="reportSmsAliasToolbox(this, \''+ alias + '\', ' + gs.userId + ',\'' + gs.userAlias + '\'); return false;">Ret</a> / <a href="#" onClick="deleteSmsAlias(this, ' + gs.userId + '); return false;">Slet</a></div>';
				} else {
					YAHOO.util.Dom.get('gasStationInfo').innerHTML += '<div id="smsAlias"><strong>SMS-alias:</strong> <i>ingen</i> <a href="#" onclick="reportSmsAliasToolbox(this, \'\', ' + gs.userId + ', \'' + gs.userAlias + '\'); return false;">tilføj</a></div>';
				}
				YAHOO.util.Dom.get('gasStationInfo').innerHTML += '<span id="helpLink"><img src="http://tjekbenzin.dk/media/?resource=resources%2Freleaze%2F.benzin%2Fimages%2Fhelp.jpg" height="15" width="15"><i><a href="http://tjekbenzin.dk/help.page#sms_help" target="_blank;">Hjælp</a></i></span>';		
			} else {
				var mapiaZoom = '18'; // zoom from 0  (far) to 19 (close)
				var mapiaTag = '6644'; // petrol/gas stations
				var mapType = 'b'; // b - satellite; w - only map
				
				var wikiLinkUrl = 'http://wikimapia.org/beta/#lat=' + parseFloat(gs.geoData.latitude) + '&lon=' + parseFloat(gs.geoData.longitude) + '&z=' + mapiaZoom + '&l=0&m=' + mapType + '&tag=' + mapiaTag;
				var wikimapiaLink = '<a href="' + wikiLinkUrl + '" target="_blank">Wikimapia.org</a>';
				YAHOO.util.Dom.get('gasStationInfo').innerHTML += '<div id="wikiInfo"><strong>' + wikimapiaLink + '</string></div>';
			}


		}
		else {
			YAHOO.util.Dom.get('gasStationInfo').innerHTML = '<a href="' + gs.profileLink + '"><img '
			+ gs.logo.imgAttributes + ' alt="' + gs.stationName + '"></a><br />'
			+ '<a id="stationAddress" href="' + gs.profileLink + '">' + profileAddress + '</a><br />';
		}

		YAHOO.util.Dom.setStyle('tempAjax', 'display', 'none');
	}
	YAHOO.util.Dom.setStyle(info.id, 'display', 'block');
	try{frameExtLinks()} catch(e){};
}

function addBookmark(contentId, userAlias){
	userAliasForSms = userAlias;
	var currentUser = '4';
	var categoryKey = buttonGroup.get("checkedButton").get("id");

	var postData = {
				svcId: 'commonServicePortlet',
				controllerId: 'bookmark',
				methodId: 'createBookmark',
				actionId: 'no',
				caption: 'User:' + contentId,
				contentId: contentId,
				contentClassUid: '5674103920188172751',
				description: 'BOOKMARK FROM INDEX PAGE',
				iconPath:'icon/path',
				page:'index.page',
				params:'gas_type:' + categoryKey,
				serviceName:'commonServicePortlet',
				userId: currentUser,

				renderTpl: '.js',
				seed: Math.random()
		};

	YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: addBookmarkCallback}, encodeFormData(postData));
}

function addBookmarkCallback(o){
	if(o.responseText !== undefined){
		try {
			var points = YAHOO.lang.JSON.parse(o.responseText);
		}
		catch (x) {
			alert("JSON Parse failed!");
			alert(o.responseText);
			return;
		};

		if(points.valid) {
			defaultCallBack();
		}
	}
}

function defaultCallBack(){
			var userAlias = userAliasForSms;

		var period = timePeriods[currentTimePeriodIndex];
		var query = ' +author:' + userAlias;

		if(period < 48) {
			var now = new Date().getTime();
			var minStartDate = now - period * 3600 * 1000;
			query += ' +startDate:[' + minStartDate + 'ms TO ' + now + 'ms]';
		}

		var postData = {
			svcId: 'classifiedService',
			controllerId: 'classifiedSearch',
			methodId: 'searchAds',

			queryString: query,

			facetFields: ['categoryPath'],
			facetSortByField: 'startDate',
			facetSortOrder: 'descending',

			include: [
				'userToCustomer.id',
				'userToCustomer.userAlias',
				'userToCustomer.userId',
				'userToCustomer.profile.business.city',
				'userToCustomer.profile.business.address',
				'userToCustomer.profile.business.username',
				'userToCustomer.profile.business.logo.photo',
				'userToCustomer.geoData.*',
				'userToCustomer.alias.locale',
				'alias.locale',
				'price',
				'startDate',
				'category.*',
				'fields.fuel.reporter.id.int.0'
			],

			startFrom: '0',
			count: '100',

			script: 'scripts/GroupLatestAdsByGS.java',
			renderTpl: '.js',
			seed: Math.random()
		};
		asyncObj = YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: responseStationDetails}, encodeFormData(postData));
		}

function deleteSmsAlias(e, stationId){
	var container = e.parentNode;
	container.innerHTML = '';
	var currentUser = '4';

	aliasContainer[0] = container;
	aliasContainer[1] = stationId;
	aliasContainer[2] = '';

	var postData = {
				svcId: 'commonServicePortlet',
				controllerId: 'users',
				methodId: 'deleteUserSettings',
				favoriteUserId: stationId,
				key: '8',
				type: '0',
				userId: currentUser,
				value: '',

				renderTpl: '.js',
				seed: Math.random()
		};

		YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: deleteSmsAliasCallback}, encodeFormData(postData));

}

function deleteSmsAliasCallback(o) {
	if(o.responseText !== undefined){
		try {
			var points = YAHOO.lang.JSON.parse(o.responseText);
		}
		catch (x) {
			alert("JSON Parse failed!");
			alert(o.responseText);
			return;
		};

		if(points.valid) {
			defaultCallBack();
		}
	}
}

function reportSmsAliasToolbox (e, alias, stationId, userAlias) {

	var container = e.parentNode;
	container.innerHTML = '';

	aliasContainer[0] = container;
	aliasContainer[1] = stationId;
	aliasContainer[2] = alias;

	var inp = document.createElement('input');
	inp.id = 'reportAliasInput';
	inp.type = 'text';
	inp.style.width = '50px';
	inp.style.background = 'none';
	inp.style.border = '1px solid #7f9db9';
	inp.style.margin = '0px 0px 0px 0px';
	if(alias !== ''){
		inp.value = alias;
	}

	//Button Report
	var btn = document.createElement('input');
	btn.id = 'reportAlias';
	btn.type = 'button';
	btn.value = 'OK';
	btn.style.position = 'relative';
	btn.style.top = '2px';

	//Button Cancel
	var btnCancel = document.createElement('input');
	btnCancel.id = 'cancelAlias';
	btnCancel.type = 'button';
	btnCancel.value = 'Annuller';
	btnCancel.style.position = 'relative';
	btnCancel.style.top = '2px';

	//Events on buttons
	YAHOO.util.Event.on(btn, 'click', reportSmsAlias, {'container': container, 'userAlias' : userAlias, 'stationId': stationId});
	YAHOO.util.Event.on(btnCancel, 'click', cancelSmsAlias, {'container': container, 'userAlias' : userAlias, 'alias' : alias, 'stationId': stationId});

	container.appendChild(inp);
	container.appendChild(btn);
	container.appendChild(btnCancel);

}

function reportSmsAlias(e, params) {
	var aliasNew = YAHOO.util.Dom.get('reportAliasInput').value;
	var favUserId = params.stationId;
	var currentUser = '4';

	userAliasForSms = params.userAlias;

	pattern = /^[0-9a-zA-Z]{1,16}$/;
	if( aliasNew.match(pattern) ) {

		YAHOO.util.Dom.get('reportAliasInput').disabled = 'disabled';
		YAHOO.util.Dom.get('reportAlias').disabled = 'disabled';
		YAHOO.util.Dom.get('cancelAlias').disabled = 'disabled';

		for(var counterLinks = 0; counterLinks < YAHOO.util.Dom.get('gasPrices').getElementsByTagName('a').length; counterLinks++){
			YAHOO.util.Dom.get('gasPrices').getElementsByTagName('a')[counterLinks].onclick = "return false;";
		}

		// End of disabled active links
		userAliasForSms = params.userAlias;

		var postData = {
				svcId: 'commonServicePortlet',
				controllerId: 'users',
				methodId: 'saveUserSettings',
				favoriteUserId: favUserId,
				key: '8',
				type: '0',
				userId: currentUser,
				value: aliasNew,

				renderTpl: '.js',
				seed: Math.random()
		};

		YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: reportSmsAliasCallback}, encodeFormData(postData));

	}
	else {
		alert('Alias is incorrect! Alias may containe only letters and/or numbers.');
	}
}

function reportSmsAliasCallback (o) {
	if(o.responseText !== undefined){
		try {
			var points = YAHOO.lang.JSON.parse(o.responseText);
		}
		catch (x) {
			alert("JSON Parse failed!");
			alert(o.responseText);
			return;
		};

		if(!points.valid){
			alert(points.errors.allErrors[0].defaultMessage);
			defaultCallBack();
		}
		else {
		defaultCallBack();
		}

	}

}

function cancelSmsAlias(ev, params) {
	YAHOO.util.Event.stopEvent(ev);

	var alias = params.alias;
	var stationId = params.stationId;
	var container = params.container;
	var userAlias = params.userAlias;

	if (alias == '') {
		alias = '<i>ingen</i>';
		container.innerHTML = '<strong>SMS-alias:</strong> ' + alias + ' <a href="#" onclick="reportSmsAliasToolbox(this, \''+ params.alias + '\', ' + stationId + ', \'' + userAlias + '\'); return false;">tilføj</a></div>';
	}
	else {
		container.innerHTML = '<strong>SMS-alias:</strong> ' + alias + ' <a href="#" onclick="reportSmsAliasToolbox(this, \''+ params.alias + '\', ' + stationId + ', \'' + userAlias + '\'); return false;">Ret</a> / <a href="#" onClick="deleteSmsAlias(this, ' + stationId + '); return false;">Slet</a></div>';
	}
}

// hide infobox if user clicked somewhere out of its div or drag map
function docClick(e) {
	var target = e?(e.target || e.srcElement):e;
	if (!target || !(YAHOO.util.Dom.isAncestor(INFO_ID, target) || target.id === INFO_ID)) {
		selectedMarker = 0;
		YAHOO.util.Dom.get(INFO_ID).style.display = 'none';
		YAHOO.util.Event.removeListener(document, 'mousedown', docClick);
		GEvent.clearListeners(map, 'dragstart');
	};
};


// show input for reporting of price
function reportPriceToolbox(e, userId, userAlias, categoryId, lat, lon, category, priceOld, dateOld, gasTypeIcon) {
	//alert(lat);alert(lon);
	if( 'yes' == 'no' ) {
		var container = e.parentNode.parentNode;
		container.innerHTML = '';
		var inp = document.createElement('input');
		inp.id = 'reportPriceInput';
		inp.type = 'text';
		inp.style.width = '50px';
		inp.style.background = 'none';
		inp.style.border = '1px solid #7f9db9';
		inp.style.margin = '0px 0px 0px 0px';

		//Button Report
		var btn = document.createElement('input');
		btn.id = 'report_' + userId;
		btn.type = 'button';
		btn.value = 'Indberet';
		btn.style.position = 'relative';
		btn.style.top = '2px';

		//Button Cancel
		var btnCancel = document.createElement('input');
		btnCancel.id = 'cancel_' + userId;
		btnCancel.type = 'button';
		btnCancel.value = 'Annuller';
		btnCancel.style.position = 'relative';
		btnCancel.style.top = '2px';

		inp.onkeyup = function(){
						checkPrice(inp);
					};

	/*	inp.onchange = function(){
						var price = this.value;
						pattern = /^[0-9]{1,2}([,.][0-9]{1,2})?$/;
						if( price.match(pattern) ) {
							inp.style.border = '1px solid #7f9db9';
							btn.disabled = false;
						} else {
							inp.style.border = '2px solid #7f0000';
							btn.disabled = true;
						}
					};
	*/

		//Events on buttons
		YAHOO.util.Event.on(btn, 'click', reportPrice, {'e': container, 'userId': userId, 'userAlias': userAlias, 'categoryId': categoryId, 'lat': lat, 'lon':lon, 'inp':inp});
		YAHOO.util.Event.on(btnCancel, 'click', cancelReport, {'container': container, 'category': category, 'priceOld': priceOld, 'userId': userId, 'categoryId': categoryId, 'dateOld':dateOld, 'lat': lat, 'lon':lon, 'userAlias': userAlias, 'gasTypeIcon' : gasTypeIcon});

		container.appendChild(inp);
		container.appendChild(btn);
		container.appendChild(btnCancel);
	}
	else {
		alert('You have no permissions to report prices. Please, log in.');
	}
};

function checkPrice(inp) {
	var price = inp.value;
	pattern = /^[0-9]{1,2}([,.][0-9]{1,2})?$/;
	if( price.match(pattern) ) {
		inp.style.border = '1px solid #7f9db9';
		return true;
	} else {
		inp.style.border = '2px solid #bf0000';
		return false;
	}
}

function cancelReport(ev, params) {
	YAHOO.util.Event.stopEvent(ev);
	var dateOld = params.dateOld;
	var container = params.container;
	var category = params.category;
	//alert(typeof params.priceOld);
//	if((typeof params.priceOld) == "string"){
//		var priceOld = "Ingen data";
//	}
//	else {
//		var priceOld = (params.priceOld).toFixed(2);
//	}
	var priceOld = params.priceOld

	var categoryId = params.categoryId;
	var userId = params.userId;
	var lat = params.lat;
	var lon = params.lon;
	var userAlias = params.userAlias;
	var icon = params.gasTypeIcon;

	var newIcons = "<image src='" + icon + "' />";

	if(dateOld == 'null') {
		container.innerHTML = '<span class="priceCat" id="' + category + '">' + newIcons
			+ '<span id="priceData">' + priceOld + '&nbsp;<a href="#" onclick="reportPriceToolbox(this, ' + userId + ', \''
			+ userAlias + '\', ' + categoryId + ', ' + lat + ', ' + lon + ', \''
			+ category + '\', \'No data\', \'null\'); return false;">Indberet</a></span>';
	}
	else {

		container.innerHTML = '<span class="priceCat" id="' + category + '">' + newIcons
			+ '<span id="priceData">' + priceOld + '&nbsp;<a href="#" onclick="reportPriceToolbox(this, ' + userId + ', \''
			+ userAlias + '\', ' + categoryId + ', ' + lat + ', ' + lon + ', \'' + category + '\', \''
			+ priceOld + '\',\'' + dateOld + '\'); return false;">Indberet</a></span></span>';

		var myTooltip = new YAHOO.widget.Tooltip("myTooltip", {
				context:category,
				text:dateOld} );
	}
}

// report price request
function reportPrice(ev, params) {
	if ( !checkPrice(params.inp) ) return;

	var price = params.inp.value;

	if(price.indexOf(',') > '-1') {
		price = price.replace(",", ".");
	}


	price = Math.round(price*100);

	var tmp = YAHOO.util.Dom.get('tempAjax');
	map.getContainer().appendChild(tmp);

	mapSize = map.getSize();

	tmp.style.left = '300px';

	tmp.style.top = '300px';

	YAHOO.util.Dom.setStyle('tempAjax', 'display', 'block');

	YAHOO.util.Event.stopEvent(ev);

	var bounds = map.getBounds();

	/* Disable all links and buttons*/

	params.inp.disabled = 'disabled';
	YAHOO.util.Dom.get('cancel_' + params.userId).disabled = 'disabled';
	YAHOO.util.Dom.get('report_' + params.userId).disabled = 'disabled';

	for(var counterLinks = 0; counterLinks < YAHOO.util.Dom.get('gasPrices').getElementsByTagName('a').length; counterLinks++){
		YAHOO.util.Dom.get('gasPrices').getElementsByTagName('a')[counterLinks].onclick = "return false;";
	}

	if(YAHOO.util.Dom.get('smsAlias')) {
	for(var counterLinks = 0; counterLinks < YAHOO.util.Dom.get('smsAlias').getElementsByTagName('a').length; counterLinks++){
		YAHOO.util.Dom.get('smsAlias').getElementsByTagName('a')[counterLinks].onclick = "return false;";
	}
	}

	/* End of Disable all links and buttons*/



	var postData = {
			svcId: 'classifiedService',
			controllerId: 'classifiedCategoryAd',
			methodId: 'selectCategoryAd',
			categoryAdType: '8',
			categoryId: params.categoryId,
			userId: params.userId,
			userAlias: params.userAlias,
			price: price,
			lat: params.lat,
			lon: params.lon,
			script: 'scripts/reportPriceFromIndex.js',
			renderTpl: '.js',
			seed: Math.random()
	};

	YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: reportPriceCallback}, encodeFormData(postData));
};

function reportPriceCallback(o) {
	if(o.responseText !== undefined) {
		try {
			var points = YAHOO.lang.JSON.parse(o.responseText);
		}
		catch (x) {
			alert("JSON Parse failed!");
			YAHOO.util.Dom.setStyle('tempAjax', 'display', 'none');
			alert(o.responseText);
			return;
		};

		var userAlias = points.response;

		var period = timePeriods[currentTimePeriodIndex];
		var query = ' +author:' + userAlias;

		if(period < 48) {
			var now = new Date().getTime();
			var minStartDate = now - period * 3600 * 1000;
			query += ' +startDate:[' + minStartDate + 'ms TO ' + now + 'ms]';
		}

		var postData = {
			svcId: 'classifiedService',
			controllerId: 'classifiedSearch',
			methodId: 'searchAds',

			queryString: query,

			facetFields: ['categoryPath'],
			facetSortByField: 'startDate',
			facetSortOrder: 'descending',

			include: [
				'userToCustomer.id',
				'userToCustomer.userAlias',
				'userToCustomer.userId',
				'userToCustomer.profile.business.city',
				'userToCustomer.profile.business.address',
				'userToCustomer.profile.business.username',
				'userToCustomer.profile.business.logo.photo',
				'userToCustomer.geoData.*',
				'userToCustomer.alias.locale',
				'alias.locale',
				'price',
				'startDate',
				'category.*',
				'fields.fuel.reporter.id.int.0'
			],

			startFrom: '0',
			count: '100',

			script: 'scripts/GroupLatestAdsByGS.java',
			renderTpl: '.js',
			seed: Math.random()
		};
		var onSuccess = function(data) {
			responseStationDetails(data);
			getPoints();
		};
		asyncObj = YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: onSuccess}, encodeFormData(postData));
	}
};


YAHOO.util.Event.on(window,"unload",function() {
	GUnload();
});

function searchAddr(){
	var string = YAHOO.util.Dom.get('mapSearchQuery').value;
	if(string == "") {
		alert("Write something in search place.");
	} else {
		geocoder.getLocations(string , getAddr);
		if(placesArray[0]){
			YAHOO.util.Dom.get('mapSearchQuery').innerHTML = placesArray[0];
			var zoom = Math.max(Math.round(placesCoords[placesArray[0]][1]/9*20), parseInt(ZOOM_TRESHOLD)+1);
			map.setCenter(new GLatLng(placesCoords[placesArray[0]][0].coordinates[1], placesCoords[placesArray[0]][0].coordinates[0]), zoom);
		} else {
			alert('Cannot find address. Please try another.');
		};
	};
};

YAHOO.util.Event.on(window, "load", function() {
	tabView = new YAHOO.widget.TabView('demo');
	tabView.getTab(0).addListener('click', getPoints);
	tabView.getTab(1).addListener('click', function(){getStats(false)});
	tabView.getTab(2).addListener('click', function(){getStats(true)});

	gmapLoad();

	renderSliderInfo(currentTimePeriodIndex);

	buttonGroup = new YAHOO.widget.ButtonGroup({id: 'gasTypes', name: 'checkboxfield2', container: 'sliderControl', usearia: true});
	var buttonsParams = [];
	for (var i = 0; i < typeOfGas.length; i++) {
		buttonsParams.push({id: typeOfGas[i]});
	};
	buttonGroup.addButtons(buttonsParams);
	buttonGroup.check(INIT_TYPE);
	buttonGroup.on("checkedButtonChange", onCheckedButtonChange);

	for (var i = 0; i < customButtonsCategories.length; i++) {
		customButtons[customButtonsCategories[i]] = new YAHOO.widget.Button({type: 'checkbox', id: customButtonsCategories[i] + '-custom', container: 'customGasTypesButtons'});
	};

	getPoints();

	oAC = new YAHOO.widget.AutoComplete("mapSearchQuery", "mapSearchAC", oDS);

	// workaround with AutoComplete.
	// when user types AutoComplete automatically generates request to binded DataSet, but in this moment it has no items
	// PASS1: on this event - request to google maps search generates (if flag=false) and set flag=false
	// PASS2: on the search results response retrieved - collect results to array attached to DataSet, set flag=true and manually generate request from AutoComplete to DataSet (function getAddr)
	YAHOO.util.Event.on(oAC.getInputEl(),"keyup",function(v){
		switch (v.keyCode) {
			case 9: // tab
			case 13: // enter
			case 27: // esc
			case 39: // right
			case 38: // up
			case 40: // down
				break;
			default:
				var countryCode = currentCountryCode;
				var countryCodePattern = new RegExp("(\\s)*(\\,)?(\\s)*(" + countryCode + ")?$", "i");
				var query = decodeURIComponent(oAC.getInputEl().value).replace(countryCodePattern, '');
				geocoder.getLocations(query + ', ' + countryCode , getAddr);
				break;
		};
	});
	oAC.itemSelectEvent.subscribe(function(e, params) {
		var zoom = Math.max(Math.round(placesCoords[params[2]][1]/9*20), parseInt(ZOOM_TRESHOLD)+1);
		map.setCenter(new GLatLng(placesCoords[params[2]][0].coordinates[1], placesCoords[params[2]][0].coordinates[0]), zoom);
	});
});

function renderSliderInfo(period) {
	if (period == timePeriods.length - 1) {
		YAHOO.util.Dom.get('hours1').innerHTML = "";
		YAHOO.util.Dom.get('hours').innerHTML = "";
		YAHOO.util.Dom.get('hours2').innerHTML = "Viser alle";
	} else {
		YAHOO.util.Dom.get('hours1').innerHTML = "Viser seneste";
		YAHOO.util.Dom.get('hours').innerHTML = timePeriods[period];
		YAHOO.util.Dom.get('hours2').innerHTML = "&nbsp;timer";
	};
};

var onCheckedButtonChange = function (p_oEvent) {
	mapType = p_oEvent.newValue.index;
	getPoints();
	switch(tabView.get('activeIndex')) {
		case 0:
			break;
		case 1:
			getStats(false);
			break;
		case 2:
			getStats(true);
			break;
	};
};

function getAddr(response) {
	placesArray = new Array();
	placesCoords = new Array();
	if(!response || response.Status.code != 200) {
	}
	else {
		for (var i = 0; i < response.Placemark.length; i++) {
			if (response.Placemark[i].AddressDetails.Country.CountryNameCode == currentCountryCode) {
				placesArray.push(response.Placemark[i].address);
				placesCoords[response.Placemark[i].address] = [response.Placemark[i].Point, response.Placemark[i].AddressDetails.Accuracy];
			};
		};
	oAC.sendQuery(oAC.getInputEl().value);
	};
};








// predefined geo positions
function hidePrePosList() {
	document.getElementById('prePosList').style.visibility = 'hidden';
};
function focusPrePosBtn() {
	document.getElementById('prePosBtn').focus();
};
function setMapToPrePos() {
	var coord = document.getElementById('prePosList').value.split(/\s*;\s*/);
	map.setCenter(new GLatLng(parseFloat(coord[0]), parseFloat(coord[1])), parseInt(coord[2]));
};

YAHOO.util.Event.on(window, 'load', function(){
	var list = document.getElementById('prePosList');
	var btnReg = YAHOO.util.Region.getRegion(document.getElementById('prePosBtn'));
	document.body.appendChild(list);
	YAHOO.util.Dom.setXY(list, [btnReg.left, btnReg.bottom]);

	YAHOO.util.Event.on('prePosBtn', 'click', function(e) {
		YAHOO.util.Event.stopEvent(e);
		document.getElementById('prePosList').style.visibility = 'visible';
		document.getElementById('prePosList').focus();
	});

	YAHOO.util.Event.on('prePosList', 'blur', function() {
		hidePrePosList();
	});

	YAHOO.util.Event.on('prePosList', 'click', function() {
		setMapToPrePos();
		hidePrePosList();
		focusPrePosBtn();
	});

	YAHOO.util.Event.on('prePosList', 'keypress', function(e) {
		var ke = YAHOO.util.Event.getCharCode(e);
		if (ke == 13) {
			setMapToPrePos();
			hidePrePosList();
			focusPrePosBtn();
		}
		else if (ke == 27) {
			hidePrePosList();
			focusPrePosBtn();
		};
	});
});

function drawMapBanner() {
	var info = {
		bannerWidth: 590,
		bannerHeight: 85,
		lat: map.getCenter().lat(),
		lng: map.getCenter().lng(),
		addToMap: true
	};
	
	drawBanner( 'bannerCampaign', info);
}

YAHOO.util.Event.on(window, "load", drawMapBanner);


function addToStatisticView(id){
alert(id);
var adId = id;
	var postData = {
				svcId: 'commonServicePortlet',
				controllerId: 'stats',
				methodId: 'trackContent',

				contentClassUid: '-596384488263840137',
				contentId: adId,
				trackCode: '',
				type: '0',


				renderTpl: '.js',
				script: 'scripts/campaign/randomPostProcess.js',
				seed: Math.random()
		};
		YAHOO.util.Connect.asyncRequest('POST', asyncUrl, {success: respAddToStatisticView}, encodeFormData(postData));
}
function respAddToStatisticView(o){
	alert(o.responseText);
}
function showAllStations(stat){
	var linkAllStations = document.getElementById('linkStations');
	if(stat == 1){
		allStations = true;
		linkAllStations.innerHTML="<a href='#' onClick='showAllStations(0); return false;'>Se kun 5 billigste tankstation fra den aktuelle kort</a>";
	} else {
		allStations = false;
		linkAllStations.innerHTML="<a href='#' onClick='showAllStations(1); return false;'>Se alle tankstationer</a>";
	};
	getPoints();
};


function initCustomGasTypes(){
	for (var key in customButtons) {
		customButtons[key].set('checked', false);
	};
	var buttons = buttonGroup.getButtons();
	for (var i = 0; i < buttons.length; i++) {
		customButtons[buttons[i].get('id')].set('checked', true);
	};
};

function toggleCustomGasTypes() {
	var currentDisplay = document.getElementById('customGasTypes').style.display;
	document.getElementById('customGasTypes').style.display = (currentDisplay == 'block')?'none':'block';
	if (document.getElementById('customGasTypes').style.display == 'block')
		initCustomGasTypes();
};

function applyCustomGasTypes() {
	var customCheckedCount = 0;
	for (var key in customButtons) {
		if (customButtons[key].get('checked')) customCheckedCount++;
	};
	if (customCheckedCount <= 0 || customCheckedCount > CUSTOM_GAS_TYPES_MAX_COUNT) {
		alert('Number of selected gas types should be between 1 and ' + CUSTOM_GAS_TYPES_MAX_COUNT);
		return;
	};
	
	var checkedKey = buttonGroup.get('checkedButton').get('id');
	var hasChecked = false;
	var buttons = buttonGroup.getButtons();
	for (var i = buttons.length - 1; i >= 0; i--) {
		buttonGroup.removeButton(i);
	};
	var buttonsParams = [];
	for (var key in customButtons) {
		if (customButtons[key].get('checked')) {
			if (key == checkedKey) {
				buttonsParams.push({id: key, checked: true});
				hasChecked = true;
			} else {
				buttonsParams.push({id: key});
			};
		};
	};
	buttonGroup.addButtons(buttonsParams);
	if (!hasChecked)
		buttonGroup.check(0);

	var cookieData = cookieItems.zoom + '=' + mapZoom + ';';
	cookieData += cookieItems.lat + '=' + mapCenterLan + ';';
	cookieData += cookieItems.lng + '=' + mapCenterLong + ';';
	cookieData += cookieItems.type + '=' + mapType + ';';
	cookieData += cookieItems.time + '=' + currentTimePeriodIndex + ';';
	cookieData += cookieItems.help + '=' + isHelpInfo + ';';

	var buttons = buttonGroup.getButtons();
	var buttonKeys = '';
	for (var i = 0; i < buttons.length; i++) {
		buttonKeys += buttons[i].get('id') + ',';
	};
	buttonKeys = buttonKeys.replace(/,$/, '');
	cookieData += cookieItems.gasTypes + '=' + buttonKeys + ';';

	setCookie('benzinUser', cookieData, 14);

	toggleCustomGasTypes();
};

function increasePeriod() {
	if (currentTimePeriodIndex < timePeriods.length - 1) {
		currentTimePeriodIndex++;
		renderSliderInfo(currentTimePeriodIndex);
		getPoints();
	};
};

function decreasePeriod() {
	if (currentTimePeriodIndex > 0) {
		currentTimePeriodIndex--;
		renderSliderInfo(currentTimePeriodIndex);
		getPoints();
	};
};
