//////////////////////// PLACE IN STRING PACKAGE    ////////////////////////
String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g,"");
    }

google.load("maps", "2");

var mapContainer = "map";
var mapContainerExtender = "mapInfoBoxExtender";
var mapContainerExtenderVideo = "mapInfoBoxExtenderCol0";
var mapContainerExtenderContent = "mapInfoBoxExtenderCol1Content";

var mapContainerExtenderContentHeadTop = "mapInfoBoxExtenderCol1Top";
var mapContainerExtenderContentHeadTopLeft = "mapInfoBoxExtenderCol1Headline";
var mapContainerExtenderContentHeadTopRight = "mapInfoBoxExtenderCol1Right";

var contentpath = "/content/1/c8/01/44/23/51/";
var currentServer = "http://svt.se";
var geoXMLPath = "/content/1/c8/01/44/23/54/";
var currentPublicgeoXMLPath = "/content/1/c8/01/44/23/54/";

// path to player on PI-sajt (enabled 200-02-23)
var pathToPlayer = "/content/1/c8/01/44/23/51/";

//var mapMarkerPrimaryColor = "#E25219";
var mapMarkerPrimaryColor = "#BD0000";

var map;
var latestMarker;
var gmarkers = [];
var goverlays = [];
var geoXml = null;
var myIcons = [];
var infoWindowHoverSrc = [];
var so;

function RandomArticleControl() {}
function FAQArticlesControl() {}
function ReadMoreControl() {}
/*
function GMenuMapTypeControl() {}
*/

// Call this function when the page has been loaded
function initialize() 
{
	map = new google.maps.Map2(document.getElementById(mapContainer));

	map.setMapType(G_SATELLITE_MAP);
	map.addMapType(G_PHYSICAL_MAP);

	map.addControl(new GMenuMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 7-28)));
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	
	map.enableDoubleClickZoom();
	map.enableContinuousZoom();
	map.enableScrollWheelZoom();
	new GKeyboardHandler(map);

	addCustomControls();
	
	SetupIcons();
	SetupInfoWindowHover();
	
	var latlng = new GLatLng(32.24997445586331, 31.2890625);
	map.setCenter(latlng, 2);

	loadInitialMarkers();
	
}



function getMapControlButton(text)
{
	var myButtonIcons = [];
	var s;
	
	myButtonIcons['FAQ'] = contentpath + "icon_faq.gif";
	myButtonIcons['Slumpinslag'] = contentpath + "icon_slumpinslag.gif";

	var thisWidth = 103;
	if (text == "FAQ")
		thisWidth = 55;
	else if (text == "Slumpinslag")
		thisWidth = 103;

		
	s = '<div style="border: 1px solid black; overflow: hidden; position: absolute; width: '+thisWidth+'px; background-color: white; text-align: center; right: 0px; white-space: nowrap;">';
	s +=    '<div style="border-style: solid; border-color: white rgb(176, 176, 176) rgb(176, 176, 176) white; border-width: 1px; font-size: 12px;">';
	s +=			'<div style="text-align: left; padding-left: 6px; font-weight: bold; font-family: Arial,sans-serif; color: black;">'+text+'<img src="'+myButtonIcons[text]+'" style="padding-left: 6px; padding-right: 6px; vertical-align: top;" /></div>';
	s +=	'</div>';
	s +='</div>';
	
	return s;
}

function addCustomControls()
{
	
	
	/////////////////////////////
	/////   RANDOM ARTICLE  ////
	/////////////////////////////
	RandomArticleControl.prototype = new GControl;
	RandomArticleControl.prototype.initialize = function(map) {
	  var me = this;
	  me.panel = document.createElement("div");
	  me.panel.id = "randomArticleBtn";
	  me.panel.innerHTML = "<a href=\"javascript:loadRandomArticle();\" style=\"cursor:pointer;\" >" + getMapControlButton("Slumpinslag") + "</a>";
	  map.getContainer().appendChild(me.panel);
	  return me.panel;
	};

	RandomArticleControl.prototype.getDefaultPosition = function() {
	  return new GControlPosition(
	      G_ANCHOR_TOP_RIGHT, new GSize(98, 7-28));
	};

	RandomArticleControl.prototype.getPanel = function() {
	  return me.panel;
	}
	//////////////////////
	
	
	
	////////////////
	/////   FAQ  ////
	////////////////
	FAQArticlesControl.prototype = new GControl;
	FAQArticlesControl.prototype.initialize = function(map) {
	  var me = this;
	  me.panel = document.createElement("div");
	  me.panel.id = "faqArticleBtn";
	  me.panel.innerHTML = "<a href=\"/svt/jsp/Crosslink.jsp?d=104386&a=1302179\" target=\"_self\" style=\"cursor:pointer;\" >" + getMapControlButton("FAQ") + "</a>";	  
	  map.getContainer().appendChild(me.panel);
	  return me.panel;
	};

	FAQArticlesControl.prototype.getDefaultPosition = function() {
	  return new GControlPosition(
	      G_ANCHOR_TOP_RIGHT, new GSize(208, 7-28));
	};

	FAQArticlesControl.prototype.getPanel = function() {
	  return me.panel;
	}
	//////////////////////
	
	
	////////////////////
	/////   LÄS MER  ////
	////////////////////
	ReadMoreControl.prototype = new GControl;
	ReadMoreControl.prototype.initialize = function(map) {
	  var me = this;
	  me.panel = document.createElement("div");
	  me.panel.style.border = "1px solid black";
	  me.panel.style.background = "white";
	  me.panel.style.paddingTop = "1px";
	  me.panel.style.paddingBottom = "1px";
	  me.panel.style.paddingLeft = "6px";
	  me.panel.style.paddingRight = "6px";
	  me.panel.style.fontWeight = "bold";
	  me.panel.id = "readMoreArticleBtn";
	  me.panel.innerHTML = "<a id=\"articleLinkElmt\" href=\"http://svt.se/packat\" target=\"_blank\" style=\"font-size:12px; font-family:Arial,sans-serif; color: #BBBBBB;\" >Läs mer</a>";
	  map.getContainer().appendChild(me.panel);
	  return me.panel;
	};

	ReadMoreControl.prototype.getDefaultPosition = function() {
	  return new GControlPosition(
	      G_ANCHOR_TOP_RIGHT, new GSize(233, 7));
	};

	ReadMoreControl.prototype.getPanel = function() {
	  return me.panel;
	}
	//////////////////////
	
	//map.addControl(new ReadMoreControl());
	map.addControl(new FAQArticlesControl());
	map.addControl(new RandomArticleControl());
	//disableReadMoreLink();
	
}


function addTime()
{
	var date = new Date();
	return "time=" + date.getTime();
}


function AddOverlay(markerArray)
{
	if (markerArray)
	{
		if (markerArray.length >= 1)
		{
			for(var i=0; i<markerArray.length;i++)
			{
				map.addOverlay(markerArray[i]);
			}
		}
	}
}

function RemoveOverlay(markerArray)
{
	if (markerArray)
	{
		if (markerArray.length >= 1)
		{
			for(var i=0; i<markerArray.length;i++)
			{
				map.removeOverlay(markerArray[i]);
			}
		}
	}
}

function destroy() {
	var elem = document.getElementById("swfcontentPackatplanetenVideo");
	elem.parentNode.removeChild(elem);
}


function removeSWFobject()
{
	so = null;	
}

function loadInfoBox(dID, aID)
{
	removeSWFobject();
	document.getElementById(mapContainerExtender).style.display = "block";
	document.getElementById(mapContainerExtenderContent).innerHTML = DisplayAJAXLoading();
		
	if (document.getElementById("startaInslag_"+ aID))
		document.getElementById("startaInslag_"+ aID).innerHTML = "Filmen spelas nu nedanför kartan";
	
	document.getElementById('videoIframe').src = pathToPlayer + "player.htm?d="+dID+"&a="+aID;
	
	var geoXMLURL = geoXMLPath + dID + "_" + aID + ".xml?"+addTime();
	GDownloadUrl(geoXMLURL, function(data)
	{
		
		document.getElementById(mapContainerExtenderContent).innerHTML = "";
		var xml = GXml.parse(data);
		var description = xml.documentElement.getElementsByTagName("Document")[0].getElementsByTagName("description")[0].childNodes[0].nodeValue;
		description.trim();
		description = nl2br(description);
		var originalArticleLink = xml.documentElement.getElementsByTagName("Document")[0].getElementsByTagName("NetworkLink")[0].getElementsByTagName("Link")[0].getElementsByTagName("href")[0].childNodes[0].nodeValue;
		originalArticleLink.trim();
		
		//originalArticleLink = "<a href=\""+originalArticleLink+"\" target=\"_blank\">LÄS MER</a>"
		
		// snippet - Sändningsdatum
		var snippet = "";
		if (xml.documentElement.getElementsByTagName("Document")[0].getElementsByTagName("Snippet")[0])
		{
			snippet = "<i>" + xml.documentElement.getElementsByTagName("Document")[0].getElementsByTagName("Snippet")[0].childNodes[0].nodeValue + "</i><br />";
		}
		
		document.getElementById(mapContainerExtenderContent).innerHTML = snippet + description;// + "<br />" + originalArticleLink + " | " + "<a href=\"http://svt.se/packat\" target=\"_blank\">FAQ</a>" + " | " + "<a href=\"javascript:loadRandomArticle();\" >SLUMPINSLAG</a>";
		
		var currentMarker = findMarker(dID, aID);
		
		//////
		document.getElementById(mapContainerExtenderContentHeadTop).style.display = "block";
		document.getElementById(mapContainerExtenderContent).style.overflow = "scroll";
		document.getElementById(mapContainerExtenderContentHeadTopLeft).innerHTML = currentMarker.content.title;
		document.getElementById(mapContainerExtenderContentHeadTopLeft).style.width = "200px";
		document.getElementById(mapContainerExtenderContentHeadTopRight).innerHTML = "<a href=\"" + originalArticleLink + "\" target=\"_blank\"><img title=\"Läs mer\" src=\""+contentpath+"planeten_las_mer.jpg\" /></a>";
		document.getElementById(mapContainerExtenderContentHeadTopRight).style.width = "50px";
		//////
		
		
	}
	);
	
}

function DisplayAJAXLoading()
{
	return "<img src=\""+contentpath+"ajax-loader.gif\" border=\"1\" />";
}

function displayArticlePosition(aID, dID)
{
	for (var i = 0; i < (gmarkers.length); i++) 
	{
		if (gmarkers[i].content.aID == aID && gmarkers[i].content.dID == dID)
		{
			gmarkers[i].openInfoWindowHtml(gmarkers[i].html);
			break;
		}
	}
}

function loadRandomArticle()
{
	
	if (gmarkers.length == 0)
		exit;
	
	var i = Math.floor(gmarkers.length*Math.random());
	map.setCenter(gmarkers[i].getLatLng());
	gmarkers[i].openInfoWindowHtml(gmarkers[i].html);
	
}

function findMarker(dID, aID)
{
	var marker = null;
	for (var i = 0; i < (gmarkers.length); i++) 
	{
		if (gmarkers[i].content.aID == aID && gmarkers[i].content.dID == dID)
		{
			marker = gmarkers[i];
			break;
		}
	}
	return marker;
}


function loadInitialMarkers() {
	    GDownloadUrl(geoXMLPath+"master.xml", function(data, responseCode) 
		{
			var xml = GXml.parse(data);
			
			var placemarks = xml.documentElement.getElementsByTagName("Document")[0].getElementsByTagName("Placemark");
			var latestPoint = new GPoint(37.4419, -122.1419);

			//for (var i = placemarks.length-1; i >= 0; i--) 
			for (var i = 0; i < (placemarks.length); i++) 
			{
				//
				// COLLECT VARIABLES FROM XML
				//
				var dID = placemarks[i].getAttribute("id").split("#")[0];
				var aID = placemarks[i].getAttribute("id").split("#")[1];					
				var description = placemarks[i].getElementsByTagName("description")[0].childNodes[0].nodeValue;				
				var name = placemarks[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
				
				var snippet = "";
				if (placemarks[i].getElementsByTagName("Snippet")[0])
					snippet = placemarks[i].getElementsByTagName("Snippet")[0].childNodes[0].nodeValue;

				var styleUrl = "videopuff_201x113.jpg";
				if (placemarks[i].getElementsByTagName("styleUrl")[0])
				{
					// om det inte finns ogiltiga tecken i filnamnet
					if (isValidImageName(placemarks[i].getElementsByTagName("styleUrl")[0].childNodes[0].nodeValue))
						styleUrl = placemarks[i].getElementsByTagName("styleUrl")[0].childNodes[0].nodeValue;
				}
					
				//
				// CREATE VARIABLES FOR MARKER
				//
				var point = CreatePointFromPlacemark(placemarks[i]);
				var icon = myIcons['default'];
				
				//
				// CREATE MARKER
				//
				var marker = CreateMarker(point, name, snippet, description, icon, aID, dID, styleUrl);
				
				//
				// ADD MARKER TO MAP
				//
				map.addOverlay(marker);
				gmarkers.push(marker);
				
			}
			
			//map.setCenter(gmarkers[gmarkers.length-1].getLatLng(), 3);
		}
		);
} 

function isValidImageName(str)
{
	if (str.indexOf(" ") == -1)
		return true;
	else
		return false;
}

function CreatePointFromPlacemark(placemark)
{
	var coordinates = placemark.getElementsByTagName("Point")[0].getElementsByTagName("coordinates")[0].childNodes[0].nodeValue.split(",");
	return new GPoint(coordinates[0], coordinates[1]);
}

function CreateMarker(point, title, snippet, description, icon, aID, dID, styleUrl) 
{
	var marker = new GMarker(point, icon);
	description = GetShortDescription(description);
	marker.content = {title:title, description: description, snippet: snippet, aID: aID, dID: dID, styleUrl: styleUrl};

	
	var readMoreLink = "";
	if (marker.content.styleUrl.length > 0)
		readMoreLink = "<img src=\""+geoXMLPath + marker.content.styleUrl+"\" border=\"0\" />";
	
	var html = "<div style=\"font-family:Verdana,Arial; font-size: 11px; font-weight:bold; padding-bottom: 3px;\">"+marker.content.title+"</div><div id=\"infoWindowBGSrc_"+marker.content.aID +"\" style=\"font-weight:bold; background-image: url("+geoXMLPath + marker.content.styleUrl+"); width: 201px; height: 113px;\"><a href='javascript: loadInfoBox(" + marker.content.dID + ", " + marker.content.aID + ");' border=\"0\" ><img id=\"infoWindowHoverSrc_"+marker.content.aID+"\" src=\""+infoWindowHoverSrc['out']+"\" border=\"0\"></a></div><div id=\"startaInslag_"+marker.content.aID+"\" style=\"width: 201px; height: 14px; color: #000000;\"></div>";

	marker.html = html;

	
	GEvent.addListener(marker, "infowindowclose", function() 
	{
		clearInterval(intervall);
	});
	
	 
	 GEvent.addListener(marker, 'mouseover', function() 
			{
				marker.setImage(currentServer + contentpath + "24_white.png");}
			);
				
	GEvent.addListener(marker, 'mouseout', function() 
			{
				marker.setImage(myIcons['default'].image);}
			);
	 
	GEvent.addListener(marker, "click", function() {
        latestMarker = marker; // Store this clicked marker 
		marker.openInfoWindowHtml(marker.html);
      });


	return marker;
}
var intervall;

function nl2br(text){
	text = escape(text);
	if(text.indexOf('%0D%0A') > -1){
		re_nlchar = /%0D%0A/g ;
	}else if(text.indexOf('%0A') > -1){
		re_nlchar = /%0A/g ;
	}else if(text.indexOf('%0D') > -1){
		re_nlchar = /%0D/g ;
	}
	return unescape( text.replace(re_nlchar,'<br />') );
}



function SetupIcons()
{
	
	var iconOptions = {};
	iconOptions.width = 24;
	iconOptions.height = 24;
	iconOptions.primaryColor = mapMarkerPrimaryColor;	
	iconOptions.cornerColor = "#FFFFFF";
	iconOptions.strokeColor = "#000000";
	var icon = MapIconMaker.createMarkerIcon(iconOptions);

	myIcons['default'] = icon;
	

}

function SetupInfoWindowHover()
{
	infoWindowHoverSrc['out'] = contentpath + "preview_small.gif";
	infoWindowHoverSrc['over'] = contentpath + "preview_small_over.gif";
}


function GetShortDescription(description)
{
	description = description.substr(0,50);
	description.trim();
	description += "...";
	return description;
}

