/**
 * Google Map API
 */
function loadMap(data) {

	if (data['zoom']) {
		var zoom = data['zoom'];
	} else {
		var zoom = 8;	
	}	

	var options = {
		zoom: zoom,
		center: new google.maps.LatLng(data['latitude'], data['longitude']),
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}

	var map = new google.maps.Map(document.getElementById("map_canvas"), options);

	if (data['markers']) {
		setMarkers(map, data['markers']);
	}

	if (data['kml']) { 	
		var kmlLayer = new google.maps.KmlLayer(data['kml']);
		kmlLayer.setMap(map);
	}

	infowindow = new google.maps.InfoWindow({
		content: "loading..."
	});

}

function setMarkers(map, markers) {
	for (var i = 0; i < markers.length; i++) {
		var site = markers[i];
		var siteLatLng = new google.maps.LatLng(site[1], site[2]);
		var marker = new google.maps.Marker({
		    position: siteLatLng,
		    map: map,
		    title: site[0],
		    zIndex: i,
		    html: site[3],
			icon: site[4]
		});

		google.maps.event.addListener(marker, "click", function () {
		    infowindow.setContent(this.html);
		    infowindow.open(map, this);
		});
	}
}


// When document is ready
jQuery(document).ready(function($) {
	
	/**
	 * Positioning of logo
	 */
	logoleft = parseInt(($(window).width() - 800) / 2 - 115);
	bgleft = parseInt(($(window).width() - 400) / 2);
	//$('#logo').css({'left': logoleft  + 'px'});
	//$('#logo').show();
	$('#page').css({'background-position': bgleft  + 'px 85px'});
	
	// Navigations
	$('ul.footer-navigation li:last').addClass('last');
	$('ul.meta-navigation li:last').addClass('last');

	
	/**
	 * If window size changes, move logo
	 */
	$(window).resize(function() {
		logoleft = parseInt(($(window).width() - 800) / 2 - 115);
		bgleft = parseInt(($(window).width() - 400) / 2);
		//$('#logo').stop().animate({'left': logoleft  + 'px'});
		$('#page').stop().animate({'background-position': bgleft  + 'px 85px'});
	});
	
	
	/**
	 * Google Map
	 */
	if ($("#map_canvas").length > 0) {
		var canvas = $('#map_canvas');
		var data = new Array();
		var markers = new Array();
		var i = 0;

		data['latitude'] = canvas.attr('data-latitude');
		data['longitude'] = canvas.attr('data-longitude');
		data['kml'] = canvas.attr('data-kml');
		data['zoom'] = canvas.attr('data-zoom');
		canvas.find('.marker').each(function() {
			markers[i] = new Array();
			markers[i][0] = $(this).find('.label').html();
			markers[i][1] = $(this).attr('data-latitude');
			markers[i][2] = $(this).attr('data-longitude');
			markers[i][3] = $(this).find('.text').html();
			markers[i][4] = $(this).attr('data-image');
			i++;			
		});
		data['markers'] = markers;
		
		loadMap(data);
	}


	/**
	 * Image gallery
	 */
	$('.image-gallery-browser').each(function() {
		
		// Variables
		var browser = $(this);
		var innerBrowser = browser.find('.image-gallery-browser-inner');
		var images = browser.find('.imgs'); // are not images but list elements li
		var maxHeight = 0;
		var current = index = hasPrev = hasNext = null;

		// Set width of inner container
		innerBrowser.css({'width': (images.length * 570) + 'px'});
		
		// Left control, shows previous image
		var leftControl = browser.find('.image-gallery-browser-item-control-left');
		
		// Right control, shows next image
		var rightControl = browser.find('.image-gallery-browser-item-control-right');
		
		// Initialize: previous button has to be white
		current = browser.find('.curr');
		index = current.index();
		hasPrev = (index > 0);
		if(!hasPrev)
			leftControl.find('img').remove();
		
		// Set description of first image
		browser.find('.image-gallery-browser-item-control-info').replaceWith('<div class="image-gallery-browser-item-control-info">' + current.attr('data-desc') + '</div>');
		
		// Find tallest images
		images.each(function() {
			var li = $(this);
			if(li.height() > maxHeight)
				maxHeight = li.height();
		});
		
		// Set margins for all images
		images.each(function() {
			var li = $(this);
			li.find('img').css({'margin-top': Math.floor((maxHeight - li.height()) / 2) + 'px'});
		});
		
		// Left click, show previous image
		leftControl.click(function () {
			var btn = $(this);
			current = browser.find('.curr');
			index = current.index();
			hasPrev = (index > 0);
			
			if (hasPrev) {
				var items = browser.find('.image-gallery-browser-items');
				//items.animate({'margin-left': (parseInt(items.css('margin-left')) + 570) + 'px'});
				innerBrowser.animate({'margin-left': '+=570px'});
				current.removeClass('curr');
				newCurrent = images.eq(index - 1).addClass('curr');
				browser.find('.image-gallery-browser-item-control-info').replaceWith('<div class="image-gallery-browser-item-control-info">' + newCurrent.attr('data-desc') + '</div>');
				// Swap buttons
				rightControl.html('<img src="' + ctx + '/docroot/imgs/arrow-right-golden-middle.png" alt="" />');
				if(newCurrent.index() == 0)
					leftControl.find('img').remove();
			}
			
		});
		
		// Right click, show next image
		rightControl.click(function () {
			var btn = $(this);
			current = browser.find('.curr');
			index = current.index();
			hasNext = (index + 1 < images.length);
			if (hasNext) {
				var items = browser.find('.image-gallery-browser-items');
				//items.animate({'margin-left': (parseInt(items.css('margin-left')) - 570) + 'px'});
				innerBrowser.animate({'margin-left': '-=570px'});
				current.removeClass('curr');
				newCurrent = images.eq(index + 1).addClass('curr');
				browser.find('.image-gallery-browser-item-control-info').replaceWith('<div class="image-gallery-browser-item-control-info">' + newCurrent.attr('data-desc') + '</div>');
				// Swap button images
				leftControl.html('<img src="' + ctx + '/docroot/imgs/arrow-left-golden-middle.png" alt="" />');
				if(newCurrent.index() + 1 >= images.length)
					rightControl.find('img').remove();
			}
		});
		
	});
	
	
	/**
	 * Partner
	 */
	$('.partner-item-container').each(function() {
		var partner = $(this);
		var divs = partner.find('.partner-item');
		divs.css({float: 'left'});
		if(divs.length > 1 && !$('.mgnlControlBarSmall').length) {
			partner.slider();
		}
	});
	
	
	/**
	 * News
	 */
	$('.news-more-link').each(function() {
		$(this).prev().append('&nbsp;').append($(this));
	});
	
	/**
	 * Subpages
	 */
	$('.subpages-more-link').each(function() {
		$(this).prev().append($(this));
	});

	
	
	/**
	 * Form validation and form elements
	 */
	$(function() {
		$("#geburtsdatum").datepicker({ changeYear: true, yearRange: '1900:2010' });
	});
	
	$('#amount').keyup(function() {
		var amount = $(this).val();
		if (amount.length == 0 || parseInt(amount) <= 0 || !isNumber(amount)) {
			$('#donate-help-amount').html('--');
			$('#donate-help-km').html('--');
			return false;
		}
		$('#donate-help-amount').html((parseInt(amount) * 20) + ".00");
		$('#donate-help-km').html(parseInt(amount));
		return false;
	});
	
	
	 // Validate contact form
	$('#donate').submit(function(e) {
		
		var form = $(this);
		
		if ($('#step').val() == 1 && validateForm('donate', 'tab1')) {
			if ($('input[name=type]:checked').val() == 'sms') {
				var smsText = "RIDE " + (parseInt($('#amount').val()) * 20);
				$('#donate-sms').replaceWith('<code id="donate-sms">' + smsText + '</code>');
				$('#tab1').hide();
				$('#tab21').show();
				$('#step').val(21);
			}
			if ($('input[name=type]:checked').val() == 'invoice') {
				$('#tab1').hide();
				$('#tab22').show();
				$('#step').val(22);
				$('#step-button').val('Spenden');
			}
			form.css('background-color', '#e7511e');
			return false;
		}
		else if ($('#step').val() == 21 && validateForm('donate', 'tab21')) {
			$('#tab21').hide();
			$('#tab31').show();
			$('#step').val(3);
			$('#step-button').hide();
			form.css('background-color', '#c13816');
			return false;
		}
		else if ($('#step').val() == 22 && validateForm('donate', 'tab22')) {
			return true;
		}
		else {
			return false;
		}
	});

	/**
	 * Form validation
	 */
	function validateForm(formName, tab) {
		var proceed = true;
		var errorBefore = false;
		
		// input, textarea
		$('#' + formName + ' #' + tab + ' :input.mandatory').each(function() {
			if ($(this).val() == '') {
				$(this).addClass('error');
				proceed = false;
				errorBefore = true;
			}
			else {
				$(this).removeClass('error');
			}
		});

		// input number
		$('#' + formName + ' #' + tab + ' :input.number').each(function() {
			if (!isNumber($(this).val())) {
				$(this).addClass('error');
				proceed = false;
			}
			else if (! errorBefore) {
				$(this).removeClass('error');
			}
		});

		// select
		$('#' + formName + ' #' + tab + ' :selected.mandatory').each(function() {
			if ($(this).val() == '') {
				$(this).addClass('error');
				proceed = false;
			}
			else if (! errorBefore) {
				$(this).removeClass('error');
			}
		});

		// radio, checkbox
		$('#' + formName + ' #' + tab + ' label.rel-mandatory').each(function() {
			var name = $(this).attr('rel');
			if (!$('input[name='+ name  +']:checked').val()) {
				$(this).addClass('error');
				proceed = false;
			}
			else if (! errorBefore) {
				$(this).removeClass('error');
			}
		});

		// email
		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		$('#' + formName + ' #' + tab + ' :text.validate-email').each(function() {
			if (!reg.test($(this).val())) {
				$(this).addClass('error');
				proceed = false;
			}
			else if (! errorBefore) {
				$(this).removeClass('error');
			}
		});

		// password confirmation
		$('#' + formName + ' #' + tab + ' :input[type=password]').each(function() {
			var name = $(this).attr('rel');
			if (name && $(this).val() != '' && $(this).val() != $('#' + name).val()) {
				$('#' + name).addClass('error');
				proceed = false;
			}
			else if (! errorBefore) {
				$('#' + name).removeClass('error');
			}
		});

		return proceed;
	}

	/**
	 * Check for a numeric value
	 */

	function isNumber(value) {
		if (!value.toString().match(/^\d*$/)) {
			return false;
		}
		else {
			return true;
		}
	}

	function isFloat(value) {
		if (!value.toString().match(/^[-]?\d*\.?,?\d*$/)) {
			return false;
		}
		else {
			return true;
		}
	}
	
	
});

/**
 * jQuery equals function to compare jQuery objects
 * 
 * @author Matt Kruse
 * @see http://groups.google.com/group/jquery-en/browse_thread/thread/002d7543186ddaa6
 */
$.fn.equals = function(compareTo) {
	if (!compareTo || !compareTo.length || this.length!=compareTo.length) {
		return false;
	}
	for (var i=0; i<this.length; i++) {
        if (this[i]!==compareTo[i]) {
        	return false;
        }
	}
	return true;
}




