var marker_points = new Array();

function initialize(isGMap) {
		
	var isGMap = isGMap || false;
    var myOptions = {
		zoom: 7,
		mapTypeControl: false,
		scrollwheel: false
    }
	if (isGMap){
		myOptions.center = new google.maps.LatLng(point_map_center.lat, point_map_center.lng);//(52.27975692575725, 5.372314453125);
		myOptions.mapTypeId =  google.maps.MapTypeId.TERRAIN;
		var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
		for (i=0; i<marker_points.length; i++){
			var latlng = new google.maps.LatLng(marker_points[i].lat, marker_points[i].lng);
			var marker = new CustomMarkerGMap(latlng, map, marker_points[i].marker_url);
			var sidebar = marker_points[i].sidebar;
			var desc = marker_points[i].desc;
			var id = marker_points[i].university_id;
			(function (bar, mark, desc, LatLng, id){
				bar.unbind('click');
					bar.click(function(){
						map.panTo(LatLng);
						if (id != null) statistics_logUniversityView(id, 2);
						click_handler(mark, bar, desc, id);
						return false;
						});
				google.maps.event.addListener(mark, 'click', function() {
						if (id != null) statistics_logUniversityView(id, 1);
						//bar.click();
						click_handler(mark, bar, desc, id);
						return false;
					});
			})(sidebar, marker, desc, latlng, id);
		}
		//setTimeout(function(){$("#sidebar a.this").click()}, 5000);
		
	}
	else{
		myOptions.center = point_map_center;//{'lat':52.27975692575725, 'lng':5.372314453125};
		var map = new FMap (document.getElementById("map_canvas"), myOptions);
		var i = 0;
		jQuery.get(window.google_map_data_url, {}, function(data) {
				jQuery(data).find("university").each(function() {
						var marker_node = jQuery(this);
						var gmap = jQuery("gmap", marker_node);
						var marker_url = jQuery("marker", gmap).attr("url");
						var desc = jQuery("desc", marker_node).text();
						var university_url =  jQuery("url", marker_node).text();
						var university_id = marker_node.attr("id");
						var university_title = marker_node.attr("title");
						var latlng = {'lat':parseFloat(gmap.attr("lat")),
										  'lng':parseFloat(gmap.attr("lng"))};
						var marker = new CustomMarkerFake(latlng, map, marker_url);
						marker.draw();
						marker.marker_url = marker_url;
						marker.university_id = university_id;
						marker.desc = desc;
						marker.lat = parseFloat(gmap.attr("lat"));
						marker.lng = parseFloat(gmap.attr("lng"));

						var sidebar = $("<a href='"+university_url+"' class='sidebar-entry unid_" + university_id + "'>"+university_title+"</a>");
						sidebar.click(function (){
								if (university_id != null) statistics_logUniversityView(university_id, 2);
								click_handler(marker, sidebar, desc, university_id);
								return false;
							});
						$("#sidebar").append(sidebar);
						$(marker.div_).click(function(){
								if (university_id != null) statistics_logUniversityView(university_id, 1);
								//sidebar.click();
								click_handler(marker, sidebar, desc, university_id);
								return false;
							});
						marker.sidebar = sidebar;
						marker_points[i++] = marker;
					});
			}, "xml");
		
		$('#preloaderbg').hide("slow", function () {
				$('#map_wrapper').css('position','static');
				setTimeout(function(){$("#sidebar a:eq("+(Math.ceil(Math.random() * $("a", "#sidebar").length))+")").click()},1000);
			});
	}
}

function click_handler (marker_, sidebar_, desc_, university_id)
{
	var delta = 17;
	var delta_y=20;
	var is_first = false;
	$("div.this", "#map_canvas").animate({
			height:'-='+delta_y+'px',
				width:'-='+delta+'px',
				left:'+='+delta/2+'px',
				top:'+='+(delta)+'px'
				},200).removeClass("this");

	$(marker_.div_).animate({
			height:'+='+delta_y+'px',
				width:'+='+delta+'px',
				left:'-='+delta/2+'px',
				top:'-='+(delta)+'px'
				},200, function() { marker_.draw() }).addClass("this");

	if ($("a.this", "#sidebar").length == 0) is_first = true;
	$("a.this", "#sidebar").removeClass("this");
	sidebar_.addClass("this");
	if (!is_first){
		$("div.bw", "#description").fadeOut('slow', function(desc_){
				$("div.bw", "#description").remove();
				$("#description").prepend(desc_);
				$("a.jq_link_univ_tit", "#description").click(function() {
						if (university_id) statistics_logUniversityView(university_id, 3);
					});
				$("a.jq_link_univ_ext", "#description").click(function() {
						if (university_id) statistics_logUniversityView(university_id, 4);
					});
				$("a:not(.jq_link_univ_inn,.jq_link_univ_ext,.jq_link_univ_tit)", "#description").click(function() {
						if (university_id) statistics_logUniversityView(university_id, 5);
					});
				$("div.bw", "#description").css('display', 'none');
				$("div.bw", "#description").fadeIn('slow');
			}(desc_));
	}
	
}

function CustomMarkerGMap(latlng,  map, url) {

    this.latlng_ = latlng;
	this.url_ = url;
	this.width_ = 33;
	this.height_ = 40;
    this.setMap(map);
}

CustomMarkerGMap.prototype = new google.maps.OverlayView();

CustomMarkerGMap.prototype.draw = function() {
    var me = this;
    var div = this.div_;
    if (!div) {

		div = this.div_ = document.createElement('DIV');

		div.style.position = "absolute";
		div.style.paddingLeft = "0px";
		div.style.cursor = 'pointer';
		div.style.width= me.width_+"px";
		div.style.height= me.height_+"px";
		
		var img = document.createElement("img");
		img.src = me.url_;
		img.style.width= "100%";
		img.style.height= "100%";

		div.appendChild(img);
		google.maps.event.addDomListener(div, "click", function(event) {
				google.maps.event.trigger(me, "click");
				});
		
		var panes = this.getPanes();
		panes.overlayImage.appendChild(div);
		
    }
	

    var point = this.getProjection().fromLatLngToDivPixel(this.latlng_);
    if (point) {
	var off = $(div).hasClass('this')? [-8, -17]: [0, 0];
		div.style.left = off[0] + point.x - me.width_/2 + 'px';
		div.style.top = off[1] + point.y - me.height_ + 'px';
    }
}

CustomMarkerGMap.prototype.remove = function() {
    if (this.div_) {
		this.div_.parentNode.removeChild(this.div_);
		this.div_ = null;
    }
};

CustomMarkerGMap.prototype.get_position = function() {
	return this.latlng_;
};



function CustomMarkerFake(latlng,  map, url) {

    this.latlng_ = latlng;
	this.url_ = url;
	this.width_ = 33;
	this.height_ = 40;
	this.map = map;
}

CustomMarkerFake.prototype.draw = function() {
    var me = this;
    var div = this.div_;
    if (!div) {

		div = this.div_ = document.createElement('DIV');

		div.style.position = "absolute";
		div.style.paddingLeft = "0px";
		div.style.cursor = 'pointer';
		div.style.width= me.width_+"px";
		div.style.height= me.height_+"px";
		
		var img = document.createElement("img");
		img.src = me.url_;
		img.style.width= "100%";
		img.style.height= "100%";

		div.appendChild(img);
		
		var panes = me.map.container;
		panes.appendChild(div);
		
    }
	

	var point = this.map.fromLatLngToDivPixel(this.latlng_);
    if (point) {
	var off = $(div).hasClass('this')? [-8, -17]: [0, 0];
		div.style.left = off[0] + point.x - me.width_/2 + 'px';
		div.style.top = off[1] + point.y - me.height_ + 'px';
    }
}


	function FMap (canvas, options){
		var offset=268435456;
		var radius=offset/Math.PI;
	
		var me = this;
		this.container = canvas;
		var opts = options || {};
		this.size = {width:parseInt($(this.container).css('width')),height:parseInt($(this.container).css('height'))};
		this.center = opts.center || {lat:52.283282143126186, lng:4.60601806640625};
		this.center.x = Math.round(offset+radius*this.center.lng*Math.PI/180);
		this.center.y = Math.round(offset-radius*Math.log((1+Math.sin(this.center.lat*Math.PI/180))/(1-Math.sin(this.center.lat*Math.PI/180)))/2);
		this.scale = opts.zoom || 7;
		this.offset = {x:Math.round(this.size.width/2), y:Math.round(this.size.height/2)};
		this.key = window.google_map_key;
		this.x = 0;
		this.y = 0;

		$(this.container).css('background','url(http://maps.google.com/staticmap?center='+this.center.lat+','+this.center.lng+'&zoom='+this.scale+'&size='+this.size.width+'x'+this.size.height+'&maptype=terrain&key='+this.key+')');
		//$(this.container).bind('click',{options:opts, markers:markers},run_map);

		this.fromLatLngToDivPixel = function(LatLng) {
			var point = {};
			var shift = 21-me.scale;
			var x = Math.round(offset+radius*LatLng.lng*Math.PI/180);
			var y = Math.round(offset-radius*Math.log((1+Math.sin(LatLng.lat*Math.PI/180))/(1-Math.sin(LatLng.lat*Math.PI/180)))/2);
			point.y =  me.offset.y+((y-me.center.y)>>shift);
			point.x =  me.offset.x+((x-me.center.x)>>shift);
			return point;
		}			
		$(this.container).append("<div class='map_button'></div>");
		$("div.map_button", this.container).css('background', "url('"+window.google_show_map_icon_url+"') no-repeat");
		$(this.container).bind('click', this.container, run_map);
		
	}
function run_map(event){
	$(event.data).unbind();
	initialize(true);
	/*
	$.getScript("http://maps.google.com/maps/api/js?sensor=false", function(){
			//initialize(true);
			console.log ('initialize GMap');
			//jQuery(window).unload(GUnload);
			//return true;
		});
	*/
}
