
// Globals
var language = 'de';
var skip = false;
var myBanner = null;
 var geocoder = null;
 var current_marker = null;
var stepper = 0;
var stateObserver = 0;
var movingBanner = 0;
var hash = '';
var bannerURL = 'bannerbilder.html';
var contentCache = new Array();
var IE = (navigator.appName.indexOf('Microsoft')!=-1);
var city_id = 0;

// http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
function addEvent(obj, evType, fn){
 if (obj.addEventListener) { obj.addEventListener(evType, fn, false); return true; } 
 else if (obj.attachEvent) { var r = obj.attachEvent("on"+evType, fn); return r; } 
 else return false;
}
// Add Event when page is loaded.
addEvent(window, 'load', function() {
	showNode('centerContainer');
	if (location.protocol!='https:') if (location.hostname.indexOf('.net')==-1) if (GBrowserIsCompatible())
	{

		if (IE) {
document.getElementById('centerContainer').innerHTML += '<iframe id="iFrame" width="0" height="0" src="about:blank" />';
}
		if (checkRedirect()) return;
		if (location.hash!='') document.getElementById('Content').style.display = 'none';
//		movingBanner = window.setTimeout("myBanner = new MovingBanner('/"+bannerURL+"', document.getElementById('banner') )", 5000);
		quickMenu();
		checkStateChange();
//		window.clearTimeout(stepper);stepper=0;
		if (!IE) populateCache(0);
	}
} );
				function showNode(id) {
					document.getElementById(id).style.minHeight=(IE?document.documentElement.clientHeight:window.innerHeight)-80+'px';
				}
				function quickMenu() {
					menu1 = document.getElementById('Menu1').getElementsByTagName('ul')[0];
					lis = menu1.getElementsByTagName('li');
					anchors = document.getElementsByTagName('a');
					for (var i=0; i<anchors.length; i++) {
					  pageId = anchors[i].href;
					  if (pageId.substr(0,15)!=location.href.substr(0,15)) continue;
					  pageId = pageId.substr(pageId.lastIndexOf('/')+1, pageId.length);
					  pageId = pageId.substr(0, pageId.indexOf('.html'));
					  anchors[i].setAttribute('href','#'+pageId);
					  if (anchors[i].parentNode.nodeName == 'LI') 
					  	anchors[i].onclick = activate;
					  else
					  	anchors[i].onclick = resolveLink;					  
					}
					languageAs = document.getElementById('languageSelector').getElementsByTagName('a');
					for (var i=0; i<languageAs.length; i++)
					{
						languageAs[i].href = '/'+languageAs[i].className+'#';
					  	languageAs[i].onclick = function(evt) {
					  		this.href='/'+this.className+'#'+location.hash.substr(1,location.hash.length);
					  		return true;
					  	}
					  	if (location.pathname=='/'+languageAs[i].className) 
					  		language=languageAs[i].className;
					}
				}
				function activate(evt) {
					node = this.parentNode;
					siblingLis = node.parentNode.getElementsByTagName('li');
					for (var i=0; i<siblingLis.length; i++) siblingLis[i].className = '';
					node.className = 'act';
					if (node.getElementsByTagName('li').length>0) node.getElementsByTagName('li')[0].className = 'act';
					return resolveLink(null, this);
				}

				function resolveLink(evt, node) {
					if (!node) node = this;
					pageId = node.href;
					pageId = pageId.substr(pageId.indexOf('#')+1, pageId.length);
					loadContent(pageId);
					return true;
				}

				function loadContent(pageId) {
					hash = pageId;
//					document.getElementById('Content').style.color = '#88afd7';
					if ((pageId=='registrierung')||(pageId=='registrierung0')||(pageId=='109')||(pageId=='160')||(pageId=='registrierung00')||(pageId=='registrierung1')||(pageId=='612')||(pageId=='617')||(pageId=='register')||(pageId=='register1')||(pageId=='549')||(pageId=='545')||(pageId=='419')||(pageId=='720')||(pageId=='771')||(pageId=='774')) {
						location.href="https://nextbike.net/"+domain+"/index.php?id="+pageId+"&L="+language;
						return;
					}
					if (IE) document.getElementById('iFrame').contentWindow.location.href = 'index.php?type=14&L='+language+'&id='+pageId+'#'+pageId;
					if (contentCache[pageId] != null)
						insertContent(contentCache[pageId], pageId);
					else
						GDownloadUrl('index.php?type=13&L='+language+'&id='+pageId, function(data, responseCode) { 
							insertContent(data, pageId);
							if (!IE) contentCache[pageId] = data;
						});
				}
				function insertContent(data, pageId) {
							document.getElementById('Content').innerHTML = data;
//							document.getElementById('Content').style.color = '#FFF';
							document.getElementById('Content').style.display = 'block';
							for (i=0; i<document.getElementById('Content').getElementsByTagName('script').length; i++)
								eval(document.getElementById('Content').getElementsByTagName('script')[i].innerHTML);
							window.document.title = window.document.title.substr(0,window.document.title.indexOf(':')+2)+document.getElementById('Content').childNodes[0].getAttribute('alt');
							anchors = document.getElementById('Content').getElementsByTagName('a');
							for (var i=0; i<anchors.length; i++) {
							  page = anchors[i].href;
							  if (page.substr(0,15)!=location.href.substr(0,15)) continue;
							  if (page.indexOf('id=') != -1) {
							  	page = page.substr(page.indexOf('id=')+3, page.length);
							  	anchors[i].setAttribute('href','#'+page);
							  	anchors[i].onclick = resolveLink;
							  }
							}
							refreshMenu(document.getElementById('Content').childNodes[0].className);
							if (document.getElementById('maps')) initGoogleMaps();
							pageTracker._trackPageview("/"+language+"#"+pageId);
				}
				function refreshMenu(rootline) {
					menu1 = document.getElementById('Menu1').getElementsByTagName('ul')[0];
					lis = menu1.getElementsByTagName('li');
					for (var i=0; i<lis.length; i++) lis[i].className = '';
					if (rootline=='') return true;
					act = rootline.split('%');
					for (var i=0; i<lis.length; i++) {
						pageId = lis[i].firstChild.href;
						pageId = pageId.substr(pageId.indexOf('#')+1, pageId.length);
						for (var j=0; j<act.length; j++) if (pageId == act[j]) { 
							lis[i].className = 'act';
							if (document.getElementById('Content').childNodes[0].childNodes[0].className=='extra_menu') {
								if (j==0) lis[i].className = 'act nosub';
								if (j==1) lis[i].appendChild(document.getElementById('Content').childNodes[0].childNodes[0].childNodes[0]);
							}
						}
					}
				}
				function checkStateChange() {
//					alert(hash+ location.hash);
					if (hash != location.hash.substr(1,location.hash.length)) 
						loadContent(location.hash.substr(1,location.hash.length));
					stateObserver = window.setTimeout( checkStateChange, 1000 );
				}
				function populateCache(index) {
					lis = document.getElementById('Menu1').getElementsByTagName('li');
					if (index >= lis.length) return;
					if (lis[index].firstChild) if (lis[index].firstChild.href) {
						pageId = lis[index].firstChild.href;
						pageId = pageId.substr(pageId.indexOf('#')+1, pageId.length);
						GDownloadUrl('index.php?type=13&L='+language+'&id='+pageId, function(data, responseCode) {
							contentCache[pageId] = data;
							populateCache(index+1);
						});
					}
					else populateCache(index+1);
				}
	function checkRedirect() {
		if ((location.href.indexOf('fullhtml')!=-1)) return true;
		pageId = location.href;
		pageId = pageId.substr(pageId.lastIndexOf('/')+1, pageId.length);
		if (location.href.indexOf('id=')!=-1) {
			pageId = pageId.substr(pageId.indexOf('id=')+3, pageId.length);
			if (pageId.indexOf('&')!='') pageId = pageId.substr(0, pageId.indexOf('&'));
		}
		else if (location.href.indexOf('.html')!=-1) {
			pageId = pageId.substr(0, pageId.indexOf('.html'));
		} else
			pageId = '';
		if ((pageId!='') && (pageId!='registrierung') && (pageId!='register1'))  {
			lid = location.href.substr(location.href.indexOf('L=')+2, 1);
			lidCode = '';
			switch (lid) {
				case '1':
					lidCode = 'en';
					break;
				default:
					lidCode = '';
					break;
			}
			location.href='/'+lidCode+'#'+pageId;
			return true;
		}
		return false;
	}

function checkMobile(inputNode, mobilePrefix) {
	value = inputNode.value;
	while (value.match(/\D/)) value = value.replace(/\D/,'');
	if (value.substr(0,2) == '00') value = value.slice(2,value.length);
	if (value.substr(0,1) == '0') value = mobilePrefix + value.slice(1,value.length);
	while (value.match(/\D/)) value = value.replace(/\D/,'');
	value = '+' + value;
	ccl = countryCodeLength(value);
	if (value.substr(ccl+1,1)=='0') value = value.substr(0,ccl+1) + value.slice(ccl+2,value.length);
	inputNode.value = value;
}

function countryCodeLength(number) {
	countryCodes = [ ["1","7"],
					['20','27','30','31','32','33','34','36','40','41','43','44','45','46','47','48','49','51','52','53','54','55','56','57','58','60','61','62','63','64','65','66','81','82','84','86','90','91','92','93','94','95','98'],
					['212','213','216','218','220','221','222','223','224','225','226','227','228','229','230','231','232','233','234','235','236','237','238','239','240','241','242','243','244','245','247','248','249','250','251','252','253','254','255','256','257','258','260','261','262','263','264','265','266','267','268','269','290','291','297','298','299','350','351','352','353','354','355','356','357','358','359','370','371','372','373','374','375','376','377','378','380','381','385','386','387','389','390','396','420','421','500','501','502','503','504','505','506','507','508','509','590','591','592','593','594','595','596','597','598','599','670','671','673','674','675','676','677','678','679','680','682','684','685','686','687','688','689','691','692','850','852','853','855','856','871','872','873','874','880','886','960','961','962','963','964','965','966','967','968','971','972','973','974','975','976','977','992','993','994','995','996','998'],
					['1242','1246','1264','1268','1284','1340','1345','1441','1473','1649','1664','1758','1767','1784','1787','1809','1868','1869','1876','4175','6722','6723','6724'],
					['67210','67211','67212','67213'] ];
	for (var i=0; i<countryCodes.length; i++) {
		code = number.substr(1,i+1);
		for (var j=0; j<countryCodes[i].length; j++)
			if (code == countryCodes[i][j]) return i+1;
	}
	return 0;
}

function MovingBanner(imageListURL, bannerNode) {
	// Constructor
	var self = this;
	var lastIndex = 1;
	var pictures = document.createElement('div');

	GDownloadUrl(imageListURL, function(data, responseCode) {
			pictures.innerHTML = bannerNode.innerHTML + data;
			pictureSet = pictures.getElementsByTagName('img');
			
			bannerNode.style.overflow='hidden';
			//bannerNode.style.backgroundColor='#777';
			for (i=0; i<pictureSet.length; i++) {
				pictureSet[i].style.position = 'absolute';
				pictureSet[i].style.left = '100px';
				addEvent(pictureSet[i],'click', function() {if (stepper==0) { stepper=window.setTimeout(function() { myBanner.step() },40);} else {window.clearTimeout(stepper);stepper=0}});
				pictureSet[i].setAttribute('onclick','if (stepper==0) { stepper=window.setTimeout(function() { myBanner.step() },40);} else {window.clearTimeout(stepper);stepper=0}');
			}

			randoms = new Array();
			randoms[0] = 0;
			while (randoms.length < pictureSet.length) {
				randomIndex = Math.round((Math.random()*pictureSet.length)-0.5);
				exists = false;
				for (i=0; i<randoms.length; i++) if (randomIndex == randoms[i]) exists = true;
				if (!exists) randoms.push(randomIndex);
			}
			//alert(pictureSet.length +' = '+ randoms.length+ '\n' + randoms);

			randomSet = new Array();
			for (i=0; i<pictureSet.length; i++) {
				randomSet[i] = pictureSet[randoms[i]];
			}
			pictureSet = randomSet;

			{
				bannerNode.innerHTML = '';
				bannerNode.appendChild(pictureSet[0].cloneNode(true));
				bannerNode.appendChild(pictureSet[1].cloneNode(true));
	
				bannerNode.childNodes[0].style.left = '0px';
				bannerNode.childNodes[1].style.left = '1100px';
			}

			//alert(pictureSet[5].width);
			stepper = window.setTimeout(function() { self.step() }, 50);
	});


	this.step = function() {	
		//alert(parseInt(bannerNode.childNodes[1].style.left)); 
		bannerNode.style.visibility = 'hidden'; // Opera
		for (i=0; i<bannerNode.childNodes.length; i++) {
			bannerNode.childNodes[i].style.left = eval(parseInt(bannerNode.childNodes[i].style.left) - 1) + 'px';
		}
		bannerNode.style.visibility = 'visible'; // Opera

		if (parseInt(bannerNode.lastChild.style.left) <= 1099) {

			pictureSet = pictures.getElementsByTagName('img');
			//alert(lastIndex +'\n'+ pictureSet.length);
			lastIndex ++;
			if (lastIndex == pictureSet.length) lastIndex = 0;

			bannerNode.appendChild(pictureSet[lastIndex].cloneNode(true));
			//alert(eval(799 + bannerNode.childNodes[bannerNode.childNodes.length-2].width) + 'px');
			bannerNode.childNodes[bannerNode.childNodes.length-1].style.left = eval(1099 + bannerNode.childNodes[bannerNode.childNodes.length-2].width) + 'px';

		}
		if ((parseInt(bannerNode.firstChild.style.left)+bannerNode.firstChild.width) < 0) bannerNode.removeChild(bannerNode.firstChild);
		stepper = window.setTimeout(function() { self.step() },40);
	}
}



function initGoogleMaps() {
	if (!GBrowserIsCompatible()) return;

	marker = new Array();
	markers = 0;

	// Create our "tiny" marker icon
	var myicon = new GIcon();
	myicon.image = "/uploads/tf/nextbike-icon-red-1.png";
	myicon.shadow = "/uploads/tf/nextbike-icon-shadow.png";
	myicon.iconSize = new GSize(56, 48);
	myicon.shadowSize = new GSize(56, 48);
	myicon.iconAnchor = new GPoint(26, 23);
	myicon.infoWindowAnchor = new GPoint(30, 20);
	var myicon2 = new GIcon(myicon);
	myicon2.image = "/uploads/tf/nextbike-icon-red-1.png";

	map = new GMap2(document.getElementById("maps"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.enableScrollWheelZoom();
	map.setCenter(new GLatLng( 0,0),0);
	var mgr = new GMarkerManager(map, {trackMarkers: true});

	areas = new GGeoXml("http://maps.google.de/maps/ms?ie=UTF8&hl=de&oe=UTF8&msa=0&msid=117603251244312388326.000452abfa6b7d1da5348&output=kml");
	map.addOverlay( areas );
	areas_nz = new GGeoXml("http://maps.google.de/maps/ms?ie=UTF8&hl=nz&oe=UTF8&msa=0&msid=113141097346271387613.000451f116b17f05026b5&output=kml");
	map.addOverlay( areas_nz );

	GDownloadUrl("/maps/nextbike-official.xml", function(data, responseCode) {
		var xml = GXml.parse(data);
		for (var i = 0; i < xml.documentElement.childNodes.length; i++) {
			country = xml.documentElement.childNodes[i];
			marker[markers] = new GMarker(new GLatLng( parseFloat(country.getAttribute("lat")), parseFloat(country.getAttribute("lng")) ), { icon:myicon } );
			marker[markers].node = country;
			mgr.addMarker(marker[markers], 0, 3);
			if (!domain) domain = location.hostname.substr(location.hostname.lastIndexOf(".")+1);
			if (marker[markers].node.getAttribute('domain')==domain)
				map.setCenter(marker[markers].getPoint(),parseInt(marker[markers].node.getAttribute("zoom")));
			markers ++;
			for (var j = 0; j < country.childNodes.length; j++) {
				city = country.childNodes[j];
				marker[markers] = new GMarker(new GLatLng( parseFloat(city.getAttribute("lat")), parseFloat(city.getAttribute("lng")) ), { icon:myicon } );
				marker[markers].node = city;
				mgr.addMarker(marker[markers], 4, 8);
				if (marker[markers].node.getAttribute('uid')==city_id)
					map.setCenter(marker[markers].getPoint(),parseInt(marker[markers].node.getAttribute("zoom")));
				markers ++;
				for (var k = 0; k < city.childNodes.length; k++) {
					place = city.childNodes[k];
					marker[markers] = new GMarker(new GLatLng( parseFloat(place.getAttribute("lat")), parseFloat(place.getAttribute("lng")) ),
										{ icon:(parseInt(place.getAttribute("bikes"))>1?myicon2:myicon) } );
					marker[markers].node = place;
					mgr.addMarker(marker[markers], 9);
					markers ++;
				}
			}
		}
	});

	GEvent.addListener(map, "click", function(mymarker, point) {
		if (mymarker) if (mymarker.node) {
			switch (mymarker.node.nodeName) {
				case 'country':
				case 'city':
					if (map.getZoom()<parseInt(mymarker.node.getAttribute("zoom"))) 
						map.setCenter(mymarker.getPoint(),parseInt(mymarker.node.getAttribute("zoom")));
					else map.panTo(mymarker.getPoint());
					break;
				case 'place':
					if (map.getZoom()<15) map.setCenter(mymarker.getPoint(),15);
					else map.panTo(mymarker.getPoint());
					available = parseInt(mymarker.node.getAttribute("bikes"));
					switch (language) {
						case 'de': 
							official_message = ""; //(parseInt(mymarker.node.getAttribute("spot"))?" - Bikespot":"");
							station_message = (mymarker.node.getAttribute("number")?"Stationsnummer: "+mymarker.node.getAttribute("number"):"");
							available_message = (available>4?"Mehr als 4":available)+(available==1?" Rad":" Räder")+" verfügbar";
							break;
						default: 
							official_message = ""; //(parseInt(mymarker.node.getAttribute("spot"))?" - Bikespot":"");
							station_message = (mymarker.node.getAttribute("number")?"Station number: "+mymarker.node.getAttribute("number"):"");
							available_message = (available>4?"More than 4":available)+(available==1?" bike":" bikes")+" available";
							break;
					}
					current_marker = mymarker;
					window.setTimeout('current_marker.openInfoWindowHtml("<b>'+mymarker.node.getAttribute("name")+official_message+"</b>, "+mymarker.node.parentNode.getAttribute("name")+(station_message?"<br/>"+station_message:"")+"<br/>"+available_message+'<br/>")',100);
					break;
			}
   		} else {
			map.closeInfoWindow();
    	}
	});
	
	geocoder = new GClientGeocoder();
} 

function findNextbike( myadressField ) {
   myadressField.style.background = '#fff';
   geocoder.getLatLng( myadressField.value, function(point) {
     if (point) {
       var minindex = 0;
       var dist = new Array();
       for (i=0; i<markers; i++) {
         dist[i] = (marker[i].getPoint().lng() - point.lng()) * (marker[i].getPoint().lng() - point.lng());
         dist[i] += (marker[i].getPoint().lat() - point.lat()) * (marker[i].getPoint().lat() - point.lat());
         if (dist[i]<dist[minindex]) if (marker[i].node.nodeName=='place') minindex = i;
       }
       var zoom = 1;
       if (dist[minindex] < 50) zoom = 3;
       if (dist[minindex] < 30) zoom = 4;
       if (dist[minindex] < 15) zoom = 5;
       if (dist[minindex] < 5) zoom = 6;
       if (dist[minindex] < 2) zoom = 7;
       if (dist[minindex] < 0.5) zoom = 8;
       if (dist[minindex] < 0.05) zoom = 9;
       if (dist[minindex] < 0.006) zoom = 10;
       if (dist[minindex] < 0.002) zoom = 11;
       if (dist[minindex] < 0.0006) zoom = 12;
       if (dist[minindex] < 0.0002) zoom = 13;
       if (dist[minindex] < 0.00006) zoom = 14;
       if (dist[minindex] < 0.00002) zoom = 15;
       map.setCenter(point, zoom);
       window.setTimeout('GEvent.trigger( map, "click" , marker['+minindex+'], marker['+minindex+'].getPoint(), true )',100);
     } else {
       myadressField.style.background = '#fdd';
     }
   });
}

