var currentCountry = "";
var flashMovie = null;
var gCarousel = null;
var gSliderTimer = null;
var gPreviousZoomLevel = null;
var zoomlevelLimitsToOne = 6;

jQuery(document).ready(function() 
{
	jQuery('#navigation li a').bind('click', function() 
	{
		var className = $(this).parent().attr("class");
		if(className != "dealerlogin" && className != "")
		{
			navigate(className);
		}
	});
	
	// navigate from dealerlogo
	jQuery('a.dealermap').bind('click', function() { return navigate("dealers"); });
	
	// product items
	jQuery('.page.products li a').bind('click', function(el)
	{
		getProductInfo($(this).attr('id'));
		return false;
	});

	// toggle dealerlogin form
	jQuery('li.dealerlogin a').bind('click', function() 
	{  
		jQuery("#dealerlogindialog").show();
		jQuery('li.dealerlogin').hide();
		jQuery('#username').focus();		
		return false; 
	});	
	
	// mousedown for dealerlogin form
	jQuery('#dealerlogindialog .submitbutton').bind('mousedown', function(el)
	{
		$(el.target).addClass("pressed");
	});

	jQuery('#dealerlogindialog .submitbutton').bind('click', function()
	{
		jQuery('#dealerloginform').submit();
	});
	
	jQuery('#nav_googlemaps').bind('click', function()
	{
		jQuery('.rcontainer.contactform').hide();
		jQuery('.rcontainer.googlemaps').show();		
	});
	jQuery('#nav_contactform').bind('click', function()
	{
		jQuery('.rcontainer.googlemaps').hide();		
		jQuery('.rcontainer.contactform').show();
	});	
	
	/*
	jQuery('#gotonl').bind('click', function()
	{
		goto("NETHERLANDS");
		return false;
	});*/

	// Main slidingpane
	jQuery('#acecarousel').jcarousel(
	{
		id: "main",
		scroll: 1,
		initCallback: acecarousel_initCallback,
		itemFirstInCallback: acecarousel_itemCallback,
		buttonNextHTML: null,
		buttonPrevHTML: null
	});			
	
	// init loop for the frontpage
	InitLoop();
	
	InitDealersMap(0);
});

function navigate(page)
{
	switch(page)
	{
		case "home": gCarousel.scroll(1); break;
		case "dealers": gCarousel.scroll(2); ResetDealersMap(); break;
		case "products": gCarousel.scroll(3); break;
		case "contact": gCarousel.scroll(4); break;
		case "dealerlogin": gCarousel.scroll(5); break;
		case "dealers2": gCarousel.scroll(6); ResetDealersMap(); break;
		default: gCarousel.scroll(1); break;
	}
	
	return false;
}
/*
function goto(id)
{
	try
	{
		if(flashMovie)
		{
			if (id == "NETHERLANDS")
			{
				//flashMovie.clickObject(id);	
				flashMovie.setZoom("5457.1429%", "-2594.83%", "-2378.77%", false);
				//flashMovie.setZoom('100%', '0%', '0%', false);
			}
		}
	}
	catch(e){	}
}
function amRegisterClick(map_id, object_id, title, value)
{
	if (title === "null")
	{
		resizeMap(true);
	}
	
	if (currentCountry != title && typeof title !== "undefined" && title !== "null" && title !== "borders")
	{
		//title = title.replace(" ", "_");
		title = escape(title);
		
		currentCountry = title;
		$.get('country.php', {country: title, map: map_id, obj: object_id}, function(data) 
		{
			resizeMap(false);
		
			jQuery('div#dealers div.left').html(data);			
		}, "html");		
	}
}
function resizeMap(fFull)
{
	if (fFull)
	{
		// set page to full
		jQuery('.page.dealers').removeClass('full').addClass('full');
	}
	else
	{
		// reset fulll width page
		jQuery('.page.dealers').removeClass('full');		
	}
}
function amRegisterHover(map_id, object_id, title, value)
{	
	//jQuery('div#dealers div.left').html("Map: "+ map_id +"<br>Object: "+ object_id +"<br>Title: "+ title +"<br>Value: "+ value);	
} 
function amMapCompleted(map_id)
{
	if (typeof map_id == "undefined")
	{
		 flashMovie = document.getElementById('ammap');
		 return;
	}	
	
	flashMovie = document.getElementById(map_id);
}    
function resetZoom()
{
	try
	{
		if (flashMovie)
		{
			flashMovie.setZoom('100%', '0%', '0%', false);
		}
	}
	catch(e){}
}
*/


function acecarousel_initCallback(carousel) 
{
	gCarousel = carousel;	
	jQuery('#acecarousel-next').bind('click', function() { gCarousel.next(); return false; });
	jQuery('#acecarousel-prev').bind('click', function() { gCarousel.prev(); return false; });		
}
function acecarousel_itemCallback(carousel, el, index, state)
{	
	//console.log($(el).attr('id'));
}
function InitLoop()
{
	jQuery('ul.fotocarousel').jcarousel(
	{
		id: "fotos",
		auto: 4,
		wrap: "both",
		scroll: 1,
		initCallback: imageslider_initCallback,		
		buttonNextHTML: null,
		buttonPrevHTML: null
	});
	
}
function getProductInfo(strName)
{
	jQuery('.page.products a.current').removeClass('current');
	jQuery('a#'+ strName).addClass('current');
	
	// check if we have a previously loaded product slider
	if (gProductCarousel)
	{
		gProductCarousel.stopAuto();
	}

	// send an ajax request to get the product info
	strName = escape(strName);	
	$.get('productdb.php', {product: strName}, function(data) 
	{
		jQuery('div#products div.right').html(data);
		
		window.clearTimeout(gSliderTimer);
		gSliderTimer = window.setTimeout(function()
		{
			try
			{
				// create slider for product photo's
				jQuery('ul.imageslider').jcarousel(
				{
					id: "products",
					/*auto: 4,*/
					wrap: "both",
					scroll: 1,
					initCallback: imageslider_initCallback,
					itemFirstInCallback: imageslider_itemCallback,
					buttonNextHTML: null,
					buttonPrevHTML: null
				});
			}
			catch(e){}
		}, 1000);
		
	}, "html");
	
	return false;
}
var gProductCarousel = null;
function imageslider_initCallback(carousel)
{
	gProductCarousel = carousel;
	
	// if there are multiple items. bind a onlick event
	var items = carousel.options.size;
	
	// clear all indexers (always)
	var iWidth = items * 18;
	jQuery('div.photoindexer').html("").width(iWidth);
	
	if (items > 1)
	{
		// start auto scrolling only when more than 1 items
		carousel.startAuto(4);
		
		jQuery('ul.imageslider img').bind('click', function() { carousel.next(); return false; });	
		
		// create new indexers for the number of items we have initialized
		for(var i=0; i < items; i++)
		{
			jQuery('div.photoindexer').append('<div class="indexer" id="index'+ (i+1) +'"></div>');
		}
	}	
}
function imageslider_itemCallback(carousel, el, index, state)
{
	// note, the wrap functionalty is not good. If the index is out of bounds jump to the first picture...
	var items = carousel.options.size;
	if (index > items) { carousel.scroll(1); return; }
	
	// remove old index and set it to the current index
	jQuery('div.indexer.current').removeClass('current');
	jQuery('div#index'+index).addClass('current');
}


function ResetDealersMap()
{
	if(map_2)
	{
		var center = new GLatLng(40.44694705960048, -1.40625);
		map_2.setCenter(center, 2);		
		getData(map_2);
	}
}

function InitDealersMap(retries) 
{
	var map_element = document.getElementById("map");
	
	if (!window.GBrowserIsCompatible) 
	{
		if (retries < 10) setTimeout(InitDealersMap(++retries), 200);
	} 
	else if (window.GBrowserIsCompatible && GBrowserIsCompatible() && map_element) 
	{
		map_2 = new GMap2(map_element);
		//var center = new GLatLng(52.1087422322, 5.3506587546);
		//map_2.setCenter(center, 7);
		
		var center = new GLatLng(40.44694705960048, -1.40625);
		map_2.setCenter(center, 2);
		
		map_2.addControl(new GSmallMapControl());
		map_2.addControl(new GMapTypeControl());
		map_2.enableContinuousZoom();
		map_2.enableDoubleClickZoom();
		map_2.enableScrollWheelZoom();
		
		getData(map_2);
		
		GEvent.addListener(map_2, "moveend",function() 
		{
			getData(map_2);
		});
	}
}


function getData(map) 
{
	if (map) 
	{
		var izoom = map.getZoom();
		var center = map.getCenter();
		var lat = center.lat();
		var lng = center.lng();
		
		//console.log("zoom: "+ izoom +", lat: "+ lat +", long: "+ lng);
		if (gPreviousZoomLevel == null || gPreviousZoomLevel != map.getZoom())
		{
			reloadData(map);
		}		
	}
}

function reloadData(map)
{
	gPreviousZoomLevel = map.getZoom();
			
	var center = map.getCenter();
	if(center)
	{
		var lat = center.lat();
		var lng = center.lng();
		
		if(gPreviousZoomLevel < zoomlevelLimitsToOne)
		{
			map.clearOverlays();
		}
		
		var url = "/dealer.php?zoom="+ gPreviousZoomLevel +"&lat="+ lat +"&lng="+ lng;
		
		// query acebikes for dealer list
		$.ajax({
			url: url,
			dataType: 'json',
			data: null,
			success: function(data)
			{			
				for(var i =0; i < data.length; i++)
				{
					if (data[i])
					{
						createDealerMarker(map, data[i]);
					}
				}
			}
		});		
	}
}


function createDealerMarker(map, dealer)
{
	var point = new GLatLng(parseFloat(dealer.latitude), parseFloat(dealer.longitude));
	var name = dealer.naam;
	var address = dealer.adres + "<br>"+ dealer.woonplaats;
	
	var url = "";
	if(dealer.website && dealer.website.length > 0)
	{		
		url = dealer.website;
		if (url.substr(0, 7) != "http://")
		{
			url = "http://"+ url;
		}
	}

	var marker = createMarker(map, point, name, address, url);
	map.addOverlay(marker);
}

function createMarker(map, point, name, address, url) 
{
	var marker = new GMarker(point);
	var html = '<b>' + name + '</b> <br/>' + address;
	if (url != "")
	{
		html += "<br><a href='"+ url +"' target='_blank'>"+ url +"</a>";
	}
		
	GEvent.addListener(marker, 'click', function() 
	{
		if(gPreviousZoomLevel < zoomlevelLimitsToOne)
		{
			map.setZoom(8);
			map.panTo(point);		
		}
		else
		{
			// pan to this one
			map.setZoom(16);
			map.panTo(point);		
		
			marker.openInfoWindowHtml(html);
		}
	});
	
	return marker;
}
