
if (window.jQuery == undefined)
{
	google.load("jquery", "1.4.2");

	// Call this function when the page has been loaded
	function initialize()
	{
		new _sinfonetWidgetSystem();
	}
	google.setOnLoadCallback(initialize);
}
else
{
	jQuery(document).ready(function()
	{

		new _sinfonetWidgetSystem();

	});
}


_sinfonetWidgetSystem = function()
{
	var _this = this;
	_this.widgetBox = null;
	var idPrefix = "sinfonetWidgetId-";
	var _baseUrl;
	if (window.location.hostname == "eclipse")
		_baseUrl = "http://eclipse";
	else
		_baseUrl = "http://www.xmlapi.suedtirol.info";

	function loadManifest(widget)
	{
		// check manifest
		if ((widget.manifest) && widget.manifest.length > 0)
		{
			// first check css resources
			for(var index=widget.manifest.length-1; index >=0 ; index--)
			{
				if (widget.manifest[index][0] == "css")
				{
					var cssItem = widget.manifest.splice(index, 1);
					cssUrl = cssItem[0][1].toLowerCase().replace("http://www.xmlapi.suedtirol.info/widget", _baseUrl + "/widget");
					jQuery("<link rel='stylesheet' type='text/css' href='" + cssUrl + "'/>").appendTo(jQuery("head"));
				}
			}
			
			// now load js-ressources
			for(var index=widget.manifest.length-1; index>=0 ; index--)
			{
				if (widget.manifest[index][0] == "js")
				{
					var jsItem = widget.manifest.splice(index, 1);
					jsUrl = jsItem[0][1].toLowerCase().replace("http://www.xmlapi.suedtirol.info/widget", _baseUrl + "/widget");
					jQuery.getScript(jsUrl, function()
					{
						loadManifest(widget);
						return;
					});
					return;
				}
			}

			// now load style-ressources
			for(var index=widget.manifest.length-1; index>=0 ; index--)
			{
				if (widget.manifest[index][0] == "style")
				{
					var cssItem = widget.manifest.splice(index, 1);
					cssUrl = cssItem[0][1].toLowerCase().replace("http://www.xmlapi.suedtirol.info/widget", _baseUrl + "/widget");
					jQuery("<link rel='stylesheet' type='text/css' href='" + cssUrl + "'/>").appendTo(jQuery("head"));
				}
			}

		}
		
		// check the main class
		for(var index=0; index<widget.manifest.length; index++)
		{
			if (widget.manifest[index][0] == "mainClass")
			{
				eval("widget.mainClass = new " + widget.manifest[index][1] + "(widget);");
				widget.mainClass.sinfonetSystem = _this;
				break;
			}
		}
		if (widget.mainClass == null)
		{
			// default startApp function
			widget.mainClass.startApp = function()
			{
				if (widget.content.status != "0")
				{
					widget.widgetBox.html("Error: " + widget.content.statusText);
					return;
				}
				widget.widgetBox.html(widget.content.responseHTML);
				return;
			}
		}
		
		var timer = window.setTimeout(function()
		{
			window.clearTimeout(timer);
			widget.mainClass.startApp();
			widget.waitBox.unmask();
		}, 800);
		return;
	}

	function init()
	{
		jQuery("a.sinfonetWidget, a[href*=SinfonetWidget]").each(function(index)
		{
			sinfonetWidgetLink = jQuery(this);
			// get config
			var widget = 
			{
				manifest: []
				, widgetBox: null
				, waitBox: null
				, mainClass: null
				, config: 
				{
					output: "json"
					, language: "de"
					, id: ""
					, pageNumber: 0
				}
			};

			var params = null;
			var href = sinfonetWidgetLink.attr("href");
			if (href.indexOf("?") != -1)
			{
				href = href.substr(href.indexOf("?")+1);
				if (href.substr(0, 1) == "{")
				{
					eval("var tempConfig = " + href);
					jQuery.extend(widget.config, widget.config, tempConfig);
				}
				else
				{
					params = href.split("&");
					for(index=0; index<params.length; index++)
					{
						data = params[index].split("=");
						widget.config[data[0]] = data[1];
					}
				}
			}
			else
			{
				if (href.indexOf("#") == -1)
					return;
				eval("var tempConfig = " + href.substr(href.indexOf("#")+1));
				jQuery.extend(widget.config, widget.config, tempConfig);
			}
	
			widget.waitBox = jQuery('<div id="' + idPrefix + widget.config.id + '" class="sinfonetWidget sinfonetWidget-' + widget.config.layout + '"></div>').insertAfter(sinfonetWidgetLink);
			sinfonetWidgetLink.remove();
			(widget.widgetBox = jQuery("<div class='sinfonetWidgetContent'></div>")).appendTo(widget.waitBox);
			widget.waitBox.mask("Loading Sinfonet Widget...");

			// add the screen parameters
			widget.config.screenWidth = window.screen.width;
			widget.config.screenHeight = window.screen.height;

			var xx = function(widget)
			{
				_this.ajax(_baseUrl + "/widget/index.php", widget.config, function(response)
				{
					if (response.status != 0)
					{
						widget.waitBox.unmask();
						widget.widgetBox.html("<div style='padding:5px;background-color:#eeeeee;border:1px solid #cccccc;'>" + response.statusText + "</div>");
						return;
					}
					//
					widget.content = response;
		
					// check manifest
					if ((response.manifest))
					{
						for(index=0; index<response.manifest.length; index++)
							widget.manifest.push(response.manifest[index]);
					
					}
					// check custom style
					if ((widget.config.style))
						widget.manifest.push(["style", widget.config.style]);
		
					loadManifest(widget);
				});
			};
			xx(widget);
		});
	}
	
	this.ajax = function(url, parameters, callBack)
	{
		var http;
		if (parameters == undefined)
			parameters = null;

		if (url.indexOf("?") == -1)
			url += "?";
		else
			url += "&";
		url += "callback=?"
					
		jQuery.getJSON(url, parameters,
		function(data)
		{
			if (callBack != undefined)
				callBack(data);
		});
	}
	
	this.outerHTML = function(element, howMany)
	{
		if (howMany == undefined)
			return jQuery( jQuery('<div></div>').html(element.clone()) ).html();
		
		var xx = jQuery('<div></div>');
		element.clone().each(function(index)
		{
			if (index >= howMany)
				return;
			jQuery(this).appendTo(xx);
		});
		
		return xx.html();
	}
	jQuery("<link rel='stylesheet' type='text/css' href='" + _baseUrl + "/widget/layout/style/sinfonetWidget.css'/>").appendTo(jQuery("head"));
	jQuery.getScript("http://www.xmlapi.suedtirol.info/common/jquery/jquery.loadmask.min.js", init);
}

/*
_sinfonetWidgetPaging = function(sinfonetWidgetBox)
{
	var _sinfonetWidgetBox = sinfonetWidgetBox;
	var _resultPages = jQuery(".resultPage", _sinfonetWidgetBox);
	var _previousCmd = null;
	var _nextCmd = null;
	var _currentPage = null;
	var _pages = null;
	
	function init()
	{
		if (_resultPages.length == 0)
			return
		
		var firstPage = _currentPage = _resultPages.first();
		var lastPage = _resultPages.last();

		var pagingBox = jQuery("<div class='paging'>").css({"margin":"auto"}).insertAfter(lastPage);
		_previousCmd = jQuery("<div class='previousPage' style='float:left;'></div>").css({"cursor":"pointer", "width":"25px"}).appendTo(pagingBox).bind("click", function()
		{
			changePage(_currentPage.prev());
			return false;
		});
		_pages = jQuery("<div class='pages' style='float:left;'></div>").appendTo(pagingBox);
		_nextCmd = jQuery("<div class='nextPage' style='float:left;'></div>").css({"cursor":"pointer", "width":"25px", "text-align":"right"}).appendTo(pagingBox).appendTo(pagingBox).bind("click", function()
		{
			changePage(_currentPage.next());
			return false;
		});
		
		_resultPages.each(function(index)
		{
			index ++;
			var item = $(this);
			if (index > 1)
				item.hide();
			
			jQuery("<a class='pageNumber' href='#'>" + index + "</a>").appendTo(_pages).bind("click", function()
			{
				changePage(item);
				return false;
			});
		});
		// set box width for centring
		pagingBox.css({"width": String(_pages.outerWidth() + _previousCmd.outerWidth() + _nextCmd.outerWidth() + 5)+"px"});
		
		updatePageCommands();
	}
	
	function updatePageCommands()
	{
		if (_currentPage.next(".resultPage").length == 0)
			_nextCmd.html("&nbsp;");
		else
			_nextCmd.html(">>");

		if (_currentPage.prev(".resultPage").length == 0)
			_previousCmd.html("&nbsp;");
		else
			_previousCmd.html("&lt;&lt;");
		
		jQuery("a.currentPage", _pages).removeClass("currentPage");
		jQuery("a:eq(" + _currentPage.index() + ")", _pages).addClass("currentPage");
	}

	function changePage(newPage)
	{
		_currentPage.slideUp("slow", function()
		//_currentPage.fadeOut("slow", function()
		{
			_currentPage = newPage;
			updatePageCommands();

			newPage.slideDown("slow");
			//newPage.fadeIn("slow");
		});
	}
	
	init();
}

*/



_sinfonetWidgetDefaultMap = function(widget)
{
	var _this = this;
	var _mapUtility = null;
	var _infoWindow = null;
	var _markers = [];
	var _widget = widget;

	this.startApp = function()
	{
		var xx = window.google;
		if (xx == undefined || ((xx) && xx.maps == undefined))
		{
			window.func148415sfddfd5454 = function(){execAfterMapLoad();};
			jQuery.getScript("http://maps.google.com/maps/api/js?sensor=false&callback=func148415sfddfd5454");
		}
		else
			execAfterMapLoad();

		return;
	}

	function execAfterMapLoad()
	{
		if (_widget.content.status != "0")
		{
			_widget.widgetBox.html(_widget.content.statusText);
			return;
		}
		_widget.widgetBox.html(_widget.content.responseHTML);

		mapBox = $(".sinfonetWidget-Map", _widget.widgetBox);
		if (mapBox.length == 0)
			return;

		_widget.waitBox.mask();
		
		_mapUtility = new googleMapsUtility(mapBox, {zoom: 8});
		_mapUtility.drawSuedtirolBorder();
		_infoWindow = new google.maps.InfoWindow({disableAutoPan: false});

		_mapUtility.maps.setOptions({scrollwheel: false, mapTypeId: google.maps.MapTypeId.TERRAIN, mapTypeControlOptions: {astyle: google.maps.MapTypeControlStyle.DROPDOWN_MENU, position: google.maps.ControlPosition.BOTTOM_LEFT}}); 

		var showItem = parseInt($(".document", _widget.widgetBox).length * Math.random());
		$(".document", _widget.widgetBox).each(function(index)
		{
			var document = $(this);
			var docId = document.attr("id");

			// check GPS
			var gpsPositions = $(".dataType-GPS a", document)
			if (gpsPositions.length == 0)
			{
				document.remove()
				return;
			}
			gpsPositions.each(function(index)
			{
				var link = $(this);
				link.remove();

				var params = getUrlVars(link.attr("href"));
				if (!(params.q))
					return
				
				var position = params.q.split("+");
				if (position.length != 2)
					return;
				
				var html = "<div class='sinfonetWidget-MapInfoWindow'>"
					+ _this.sinfonetSystem.outerHTML($(".Title", document))
					+ _this.sinfonetSystem.outerHTML($(".dataType-Image", document), 1)
					+ _this.sinfonetSystem.outerHTML($(".dataType-Address", document).css("width", "55%"))
					+ "</div>";
				
				$('.imageGallery img', document).each(function(index)
				{
					if (index != 0)
						$(this).hide();
				}); 
				
				var marker = _mapUtility.setPoiOnMap('MapPosition', {lat: position[0], lng: position[1]}, $(".Title", document).text());
				google.maps.event.addListener(marker, "click", function(latLon, a, b, c)
				{
					if (_infoWindow != null)
						_infoWindow.close();
					
					_infoWindow.setContent(html);
					_infoWindow.open(_mapUtility.maps, marker);
	
					if (docId == $("div.document:visible", _widget.widgetBox).attr("id"))
						return;
					
					if ($("div.document:visible", _widget.widgetBox).length == 0)
					{
						$("#" + docId, _widget.widgetBox).slideToggle("slow");
						return;
					}
						
	
					$("div.document:visible", _widget.widgetBox).slideToggle("slow", function()
					{
						$("#" + docId, _widget.widgetBox).slideToggle("slow");
					});
	
				});
				_markers.push(marker);
			});

			var route = jQuery(".dataType-GPSRoute", document);
			if (route.length > 0)
			{
				var text;
				var routeBox;
				switch(_widget.config.language)
				{
					case 'de':
						text = 'Strecke auf Karte anzeigen';break;
					case 'it':
						text = 'Visualizza percorso su mappa';break;
					default: 
						text = 'Show route an map';	break;
				}

				jQuery("<a href='#'></a>").appendTo(route).text(text).fancybox(
				{
					'transitionIn'	:	'elastic',
					'transitionOut'	:	'elastic',
					'speedIn'		:	600, 
					'speedOut'		:	200, 
					'overlayShow'	:	true
					, 'autoScale'	:	false
					, 'autoDimensions'	: false
					, "width"		:	800
					, "height"		:	600
					, 'content'		:	'<div class="sinfonetWidget-RouteMap">Please wait ...</div>'
					, 'onComplete'	:	function()
					{
						routeBox = jQuery(".sinfonetWidget-RouteMap");
						routeBox.css({"width": "800px", "height": "600px"});
						routeMap = new googleMapsUtility(routeBox, {zoom: 10, mapTypeId: google.maps.MapTypeId.TERRAIN, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}});
						routeMap.drawSuedtirolBorder();
						var line = routeMap.drawLine("#00ff00", jQuery("input[name=Route]", route).val().split(" "));
						routeMap.setPoiOnMap("MapPosition", {lat: line.getPath().getAt(0).lat(), lng: line.getPath().getAt(0).lng()});
					}
					, 'onClosed'	: function()
					{
						delete routeMap;
					}
				});
			}
			
			document.hide();
		});

		if ((showItem+1) > _markers.length)
			showItem = 0;
		
		if (_markers.length > 0)
		{
			_mapUtility.fitBounds(_markers);
			var timerId = window.setTimeout(function()
			{
				window.clearTimeout(timerId);
				google.maps.event.trigger(_markers[showItem], "click");
			}, 500);

		}
		_widget.waitBox.unmask();
	}
	
	function getUrlVars(url)
	{
	    var vars = [], hash;
	    var hashes = url.slice(url.indexOf('?') + 1).split('&');
	    for(var i = 0; i < hashes.length; i++)
	    {
	        hash = hashes[i].split('=');
	        vars.push(hash[0]);
	        vars[hash[0]] = hash[1];
	    }
	    return vars;
	}
}
/*
__sinfonetWidgetDefaultMap = function(config)
{
	var _this = this;
	var _mapUtility = null;
	var _infoWindow = null;
	var _markers = [];
	var _config = config;
	
	this.startApp = function(sinfonetWidgetSystem, response)
	{
		var _sinfonetWidgetSystem = sinfonetWidgetSystem;
		var _response = response;
		var xx = window.google;
		if (xx == undefined)
		{
			window.func148415sfddfd5454 = function(){execAfterMapLoad(_sinfonetWidgetSystem, _response);};
			jQuery.getScript("http://maps.google.com/maps/api/js?sensor=false&callback=func148415sfddfd5454");
			return;
			var script = document.createElement("script");
			script.type = "text/javascript";
			script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=func148415sfddfd5454";
			document.body.appendChild(script);
		}
		else
		{
			execAfterMapLoad(_sinfonetWidgetSystem, _response);
			return;
		}
	}

	function execAfterMapLoad(sinfonetWidgetSystem, response)
	{
		if (response.status != "0")
		{
			sinfonetWidgetSystem.widgetBox.html(response.errorText);
			return;
		}
		sinfonetWidgetSystem.widgetBox.html(response.responseHTML);

		mapBox = $(".sinfonetWidget-Map", sinfonetWidgetSystem.widgetBox);
		if (mapBox.length == 0)
			return;
		
		_mapUtility = new googleMapsUtility(mapBox, {zoom: 8});
		_mapUtility.drawSuedtirolBorder();
		_infoWindow = new google.maps.InfoWindow({disableAutoPan: false});

		_mapUtility.maps.setOptions({scrollwheel: false, mapTypeId: google.maps.MapTypeId.TERRAIN, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}}); 

		var showItem = parseInt($(".document", sinfonetWidgetSystem.widgetBox).length * Math.random());
		$(".document", sinfonetWidgetSystem.widgetBox).each(function(index)
		{
			var document = $(this);
			var docId = document.attr("id");

			// check GPS
			var gpsPositions = $(".dataType-GPS a", document)
			if (gpsPositions.length == 0)
			{
				document.remove()
				return;
			}
			gpsPositions.each(function(index)
			{
				var link = $(this);
				link.remove();

				var params = getUrlVars(link.attr("href"));
				if (!(params.q))
					return
				
				var position = params.q.split("+");
				if (position.length != 2)
					return;
				
				var html = "<div class='sinfonetWidget-MapInfoWindow'>"
					+ sinfonetWidgetSystem.outerHTML($(".Title", document))
					+ sinfonetWidgetSystem.outerHTML($(".dataType-Image", document), 1)
					+ sinfonetWidgetSystem.outerHTML($(".dataType-Address", document))
					+ "</div>";
				
				$('.imageGallery img', document).each(function(index)
				{
					if (index != 0)
						$(this).hide();
				}); 
				
				var marker = _mapUtility.setPoiOnMap('MapPosition', {lat: position[0], lng: position[1]}, $(".Title", document).text());
				google.maps.event.addListener(marker, "click", function(latLon, a, b, c)
				{
					if (_infoWindow != null)
						_infoWindow.close();
					
					_infoWindow.setContent(html);
					_infoWindow.open(_mapUtility.maps, marker);
	
					if (docId == $("div.document:visible", sinfonetWidgetSystem.widgetBox).attr("id"))
						return;
					
					if ($("div.document:visible", sinfonetWidgetSystem.widgetBox).length == 0)
					{
						$("#" + docId, sinfonetWidgetSystem.widgetBox).slideToggle("slow");
						return;
					}
						
	
					$("div.document:visible", sinfonetWidgetSystem.widgetBox).slideToggle("slow", function()
					{
						$("#" + docId, sinfonetWidgetSystem.widgetBox).slideToggle("slow");
					});
	
				});
				_markers.push(marker);
			});
			
			var routeMap = null;

			jQuery(".dataType-GPSRoute", document).each(function()
			{
				var route = $(this);
				
				var text;
				switch(_config.language)
				{
					case 'de':
						text = 'Strecke auf Karte anzeigen';break;
					case 'it':
						text = 'Visualizza percorso su mappa';break;
					default: 
						text = 'Show route an map';	break;
				}
				
				jQuery("<a href='#'></href>").text(text).appendTo(route).fancybox(
				{
					'transitionIn'	:	'elastic',
					'transitionOut'	:	'elastic',
					'speedIn'		:	600, 
					'speedOut'		:	200, 
					'overlayShow'	:	true
					, 'autoScale'	:	false
					, 'autoDimensions'	: false
					, "width"		:	800
					, "height"		:	600
					, 'content'		:	'<div class="sinfonetWidget-RouteMap">Please wait ...</div>'
					, 'onComplete'	:	function()
					{
					return;
						var routeBox = jQuery(".sinfonetWidget-RouteMap");
						routeBox.css({"width": "800px", "height": "600px"});
						routeMap = new googleMapsUtility(routeBox, {zoom: 10, mapTypeId: google.maps.MapTypeId.TERRAIN, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}});
						routeMap.drawSuedtirolBorder();
						var line = routeMap.drawLine("#00ff00", jQuery("input[name=Route]", route).val().split(" "));
						routeMap.setPoiOnMap("MapPosition", {lat: line.getPath().getAt(0).lat(), lng: line.getPath().getAt(0).lng()});
					}
					, 'onClosed'	: function()
					{
						delete routeMap;
					}
				});
			});
			
			
			document.hide();
		});

		if ((showItem+1) > _markers.length)
			showItem = 0;
		
		google.maps.event.trigger(_markers[showItem], "click");
		//$($("div.document", sinfonetWidgetSystem.widgetBox)[showItem]).show();
	}
	
	function getUrlVars(url)
	{
	    var vars = [], hash;
	    var hashes = url.slice(url.indexOf('?') + 1).split('&');
	    for(var i = 0; i < hashes.length; i++)
	    {
	        hash = hashes[i].split('=');
	        vars.push(hash[0]);
	        vars[hash[0]] = hash[1];
	    }
	    return vars;
	}
}

*/


