/* Progressive Map jQuery Plugin v1; Martin Schlagnitweit <office@solunic.at> */

(function($){

	// toArray Added from jquery 1.4 to be compatibel with jQuery 1.3
	jQuery.fn.toArray = function() {
			return jQuery.fn.slice.call( this, 0 );
	};

	$.fn.progressiveMap = function(options) {

		return this.each(function(){
			var element = $(this);

			// Return early if this element already has a plugin instance
			if (element.data('progressivemap')) return;

			// Pass options to plugin constructor
			var progressivemap = new ProgressiveMap(this, options);

			// Store plugin object in this element's data
			element.data('progressivemap', progressivemap);
		});
		
	};

	//Default settings
	$.fn.progressiveMap.defaults = {
		zoom: 3,
		debug: false,
		mapType: 'roadmap',
		openFirstInfoWindowOnLoad: true,
		initialLat: 0,
		initialLng: 0,
		afterLoad: function(){},
		afterZoom: function(){},
		onDragEnd: function(){}
	};


	
	var ProgressiveMap = function(element, options){
		var settings;
		var mapContainer;

		var googleMap;

		var markers;
		var center;
		var zoom;
		var mapType;

		var firstMarker;
		
		var infowindows;
		
		
		construct();


		function addInfoWindow(infowindow){
			infowindows[infowindows.length] = infowindow;
		}

		function closeAllInfoWindows(){
			for(var i = 0; i < infowindows.length; i++){
				infowindows[i].close();
			}
		}

		function getFirstInfoWindow(){
			if(infowindows.length >= 1){
				return infowindows[0];
			}
		}
		
		
		function construct(){
			settings = $.extend({}, $.fn.progressiveMap.defaults, options);
			mapContainer = $(element);

			infowindows = new Array();
			
			parseMapData();

			loadMap();
			unHideMap();

			addMarkersToMap();
			
			if(settings.openFirstInfoWindowOnLoad){
				openFirstInfoWindow();
			}
		}

		function loadMap(){
			var availableMapTypes = new Array();
			availableMapTypes['roadmap'] = google.maps.MapTypeId.ROADMAP;
			availableMapTypes['terrain'] = google.maps.MapTypeId.TERRAIN;


			var googleMapOptions = {
				scrollwheel: false,
				zoom: zoom,
				center: center,
				mapTypeId: availableMapTypes[mapType]
			};

			googleMap = new google.maps.Map(element, googleMapOptions);
			
			handleCallback();
			
		}

		function handleCallback(){
			google.maps.event.addListener(googleMap, 'dragend', function() {
				settings.onDragEnd.call(this);
			});

		  	google.maps.event.addListener(googleMap, 'zoom_changed', function() {
				settings.afterZoom.call(this);
		  	});

			settings.afterLoad.call(googleMap);
		}
	
		function unHideMap(){
			mapContainer.show().css('visibility', 'visible');
		}
		
		
		function parseMapData(){
			
			if(settings.debug)
				$('.status', mapContainer).html('<p>Start Parsing</p>');
			
			markers = parseMarkers();
			center = parseCenter();
			zoom = parseZoom();
			mapType = parseMapType();
		}

		function parseMarkers(){
			var markerRaw = $('ul.progressive-map-markers > li', mapContainer);		
			var markers = markerRaw.toArray();

			if(settings.debug)
				$('.status', mapContainer).html($('.status', mapContainer).html() + '<p>Markers parsed successfully</p>');
			
			return markers;
			
		}

		function parseCenter(){
			var centerRaw = $('.progressive-map-center', mapContainer).html();		
			if(cleanUp(centerRaw) != ''){
				var center = stringToLatLng(centerRaw);
			}else{
				var center = new google.maps.LatLng(settings.initialLat, settings.initialLng)
			}

			if(settings.debug)
				$('.status', mapContainer).html($('.status', mapContainer).html() + '<p>Center parsed successfully</p>');

			return center;
		}

		function parseZoom(){
			var zoomRaw = $('.progressive-map-zoom', mapContainer).html();		
			
			if(cleanUp(zoomRaw) != ''){
				var zoom = parseInt(zoomRaw);
			}else{
				var zoom = settings.zoom;
			}
			
			if(settings.debug)
				$('.status', mapContainer).html($('.status', mapContainer).html() + '<p>Zoom parsed successfully</p>');

			return zoom;
		}
		
		function parseMapType(){
			var mapTypeRaw = $('.progressive-map-type', mapContainer).html();		
			
			if(cleanUp(mapTypeRaw) != ''){
				var mapType = cleanUp(mapTypeRaw);
			}else{
				var mapType = settings.mapType;
			}

			if(settings.debug)
				$('.status', mapContainer).html($('.status', mapContainer).html() + '<p>MapType parsed successfully</p>');
			
			return mapType;
		}
		
		function addMarkersToMap(){
			if(typeof markers != 'undefined'){
				for ( var i = 0; i < markers.length; i++ ){
				  addSingleMarkerToMap(markers[i]);
				}
			}
		}
		
		function addSingleMarkerToMap(markerElement){
			var markerData = $(markerElement);
			
			var markerPosition = $('.progressive-map-marker-position', markerData).html();
			
			markerPosition = stringToLatLng(markerPosition);


			var markerIconElement = $('img.progressive-map-marker-icon', markerData)
			
			if(markerIconElement.length > 0) {
				var markerIcon = markerIconElement.attr('src');

//				var markerIconWidth = markerIconElement.attr('width');
//				var markerIconHeight = markerIconElement.attr('height');

				var markerIconWidth = $('.progressive-map-marker-icon-width', markerData).html();
				markerIconWidth = parseInt(markerIconWidth);

				var markerIconHeight = $('.progressive-map-marker-icon-height', markerData).html();
				markerIconHeight = parseInt(markerIconHeight);

				
				var markerIconPosition = $('.progressive-map-marker-icon-position', markerData).html();
				markerIconPosition = cleanUp(markerIconPosition).toLowerCase();
			
				if(markerIconPosition == "center"){
					var markerPoint = new google.maps.Point(markerIconWidth/2, markerIconHeight/2);
				}else{
					var markerPoint = new google.maps.Point(markerIconWidth/2, markerIconHeight);
				}

			  	var image = new google.maps.MarkerImage(markerIcon,
			      new google.maps.Size(markerIconWidth, markerIconHeight),
			      new google.maps.Point(0, 0),
			      markerPoint
				);

				var marker = new google.maps.Marker({
					map: googleMap,
					position: markerPosition,
					icon:image
				});
			} else {

				var marker = new google.maps.Marker({
					map: googleMap,
					position: markerPosition
				});
				
			}
			
			

			if(typeof firstMarker == 'undefined'){
				firstMarker = marker;
			}

			var infoWindowContent = $('.progressive-map-marker-infowindow', markerData).html();



			var infowindow = new google.maps.InfoWindow({
				content: infoWindowContent
			});

			addInfoWindow(infowindow);

		    google.maps.event.addListener(marker, 'click', function() {
				closeAllInfoWindows();
				infowindow.open(googleMap, marker);
		    });
			
		}
		
		function openFirstInfoWindow(){
			if(typeof firstMarker != 'undefined'){
				firstInfoWindow = getFirstInfoWindow();
				firstInfoWindow.open(googleMap, firstMarker);
			}
		}
				
		function cleanUp(string){
			return $.trim(string);
		}
		
		function stringToLatLng(latLngString){
			latLngString = cleanUp(latLngString);
			var latLngData = latLngString.split(',');
			
			var lat = cleanUp(latLngData[0]);
			var lng = cleanUp(latLngData[1]);
			
			var latlng = new google.maps.LatLng(lat, lng);
						
			return latlng;
		}
		

	}

})( jQuery );;
(function($){
	$(document).ready(function(){

		$('.powerbrand_map').progressiveMap();

		// var piwikTracker;		
		// init();
		// resolveDeepLinks();
		
	});

	String.prototype.beginsWith = function(it) { return this.indexOf(it) == 0; };

	String.prototype.isInternalURL = function() { 
		http = "http://";
		
		siteLocation = siteLocation.replace("http://", "");
		siteLocationParts = siteLocation.split("/");
		siteLocationDomainURL = http + siteLocationParts[0];

		return !this.beginsWith(http) || this.beginsWith(siteLocationDomainURL)
	};

	String.prototype.isDownload = function() { 
		
		if (this.hasClass('download')){
			return true;
		}else{
			return false;
		}

	};

	function init(){
		
		if($("body.logged-in").length == 0) {
			initializeLinks();
		}

		initializePiwik();
		
		initializeClickHeat();
	}

	function resolveDeepLinks(){
		window_location_href = window.location.href.split("#");
		if(window_location_href.length > 1){
			sub_part = window_location_href[1];
		
			if(window_location_href[0].match(/([a-zA-Z]*)\.html/)){
				new_source_file = window_location_href[0].replace(/([a-zA-Z]*)\.html/, sub_part + ".html");
			}else{
				new_source_file = window_location_href[0].replace(/\/$/, "/" + sub_part + ".html");
			}

			changeContent(new_source_file);
		}

	}
	
	function initializePiwik(){
		var pkBaseURL = "http://piwik.solunic.at/";
		piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 8);
  		piwikTracker.enableLinkTracking();
	}
	
	function initializeLinks(){
		// links to check

		siteLocation = window.location.href;

		
		$(".menu a").click(function(e){
			if($(this).attr('href').isInternalURL()){
				changeContent($(this).attr("href"), e); 
			}
		});
		
		$("#content .content a").click(function(e){
			var isNotDownload = !$(this).isDownload();
			var isInternalLink = $(this).attr('href').isInternalURL()
			
			if(isInternalLink && isNotDownload){
				changeContent($(this).attr("href"), e); 
			}
		});
	
	}

	function initializeClickHeat(){
		clickHeatGroup = document.title.replace(" | POWERBRAND", ""); 
		initClickHeat();
	}


	function changeContent(source_file, e){

/*		if($("body.logged-in").length > 0){
			return true;
		}
*/		
		// log action to piwik
		count_piwik(source_file);
		
		
		$('#page-wrapper').fadeOut(200);

		$('#page-wrapper').load(
			source_file + ' #page', 
			function(data){
				
				var title = data.match(/<title>(.*?)<\/title>/);
		      	title = title[1];
		
		      	document.title = title;
				
				window_location_href = window.location.href.split("#");
				window_location_href = window_location_href[0];
				
				window.location.href = window_location_href + "#" + title.replace(" | POWERBRAND", "").toLowerCase();
				
				$('#page-wrapper').fadeIn(200);
				init();
			}
		);

		e.preventDefault();

	}

	function count_piwik(action){

		if(!action){
			action = "index";
		}
		
		piwikTracker.trackPageView(action);

	}

})(jQuery);
;

