/***************************************************************
* GOOGLEMAPS
***************************************************************/
// let op, setDealerMarkers() moet in de pagina aanwezig zijn, anders worden de organisaties niet op de kaart weergegeven.

var gMapsObject = new Object();
gMapsObject.data = new Array();
gMapsObject.data['startPos'] = null;
gMapsObject.data['startZoom'] = null;
gMapsObject.data['map'] = null;
gMapsObject.data['geocoder'] = null;
gMapsObject.data['userPoint'] = null;
gMapsObject.data['bezoekerIcon'] = null;
gMapsObject.data['startingPosition'] = null;
gMapsObject.data['mapId'] = 'googleMaps';
gMapsObject.data['points'] = new Array();

gMapsObject.loadGoogleMaps = function() {
  	if (GBrowserIsCompatible()) {
		gMapsObject.data['startPos'] = gMapsObject.data['startingPosition'] ? new GLatLng(gMapsObject.data['startingPosition'].latitude,gMapsObject.data['startingPosition'].longitude) : new GLatLng(52.167194,5.232041);
		gMapsObject.data['startZoom'] = gMapsObject.data['startingPosition'] ? gMapsObject.data['startingPosition'].zoomlevel : 6;
		gMapsObject.data['map'] = new GMap2($(gMapsObject.data['mapId']));
		gMapsObject.data['geocoder'] = new GClientGeocoder();
		gMapsObject.data['bezoekerIcon'] = new GIcon(G_DEFAULT_ICON);
		gMapsObject.data['bezoekerIcon'].image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/blank.png";

		gMapsObject.data['map'].setCenter(gMapsObject.data['startPos'], gMapsObject.data['startZoom']);
		gMapsObject.data['map'].addControl(new GLargeMapControl());
		var mapControl = new GMapTypeControl();
		gMapsObject.data['map'].addControl(mapControl);
		gMapsObject.data['points'].each(function(propertyList){
			gMapsObject.processMarker(propertyList.latitude,
									  propertyList.longitude,
									  propertyList.message);
		});
	}
}

gMapsObject.setStartPos = function(latitude,longitude,zoomlevel){
	gMapsObject.data['startingPosition'] = {latitude: latitude, 
											longitude:longitude, 
											zoomlevel:zoomlevel};
}

gMapsObject.addMarker = function(latitude,longitude,message){
	gMapsObject.data['points'].push({
		latitude: latitude, 
		longitude: longitude, 
		message: message});
}

gMapsObject.processMarker = function(latitude, longitude, message){
	var targetLocation = 'http://maps.google.com/maps?f=d&hl=nl&daddr=\'+this.to.value+\'&saddr=\'+this.from.value+\',+Nederland';
	message += '<br /><br /><strong>Bereken de route:</strong><br /><form action="#" onsubmit="window.open(\'' +targetLocation +'\'); return false;"><input type="hidden" name="to" value="' + latitude + ',' + longitude + '"/>uw postcode : <input type="text" name="from" maxLength="6" size="6"><input type="submit" value="bereken route"></form>'
	var latlng = new GLatLng(latitude,longitude);
	var dealerIcon = new GIcon(G_DEFAULT_ICON);
	var markerOptions = { 
		icon:dealerIcon
	};
	var marker = new GMarker(latlng, markerOptions);
	gMapsObject.data['map'].addOverlay(marker);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(message);
	});
}

gMapsObject.calcProximityToPostcode = function(postcode, targetContainer, proximity, zoomlevel){
	//clearShapes();
	if (gMapsObject.data['geocoder']) {
		gMapsObject.data['geocoder'].getLatLng(
			postcode + ', netherlands',
			function(point) {
				if (!point) {
					if($('geocoderRespondedFalse')) {
						$('geocoderRespondedFalse').show();
					}
					gMapsObject.data['map'].setCenter(new GLatLng(52.167194,5.232041), 6);
					// todo : take action on empty return
				} else {
					if($('geocoderRespondedFalse')) {
						$('geocoderRespondedFalse').hide();
					}
					// setting the center
					gMapsObject.data['map'].setCenter(point, zoomlevel);
					// placing an extra marker for the found location
					markerOptions = { icon:gMapsObject.data['bezoekerIcon'] };
					var marker = new GMarker(point,markerOptions);
					gMapsObject.data['map'].addOverlay(marker);
					GEvent.addListener(marker, "click", function() {
						marker.openInfoWindowHtml('Door u ingevoerde postcode: ' + postcode);
					});
					
					dealerList.updateDealerContainer(proximity, point.lat(), point.lng(), targetContainer);
				}
			}
		);
	}

}

gMapsObject.mapClick = function(clickedPoint) {
	var polyPoints = Array();

	var mapNormalProj = G_NORMAL_MAP.getProjection();
	var mapZoom = gMapsObject.data['map'].getZoom();
	var clickedPixel = mapNormalProj.fromLatLngToPixel(clickedPoint, mapZoom);

	var polySmallRadius = 50 + 20;
	var polyLargeRadius = polySmallRadius*2 + 20;
	var polyNumSides = 10;
	var polySideLength = 360/polyNumSides;
	var polyColor = '#cccccc';

	polyNumSides = 20;
	polySideLength = 18;

	for (var a = 0; a<(polyNumSides+1); a++) {
		var aRad = polySideLength*a*(Math.PI/180);
		var polyRadius = polySmallRadius; 
		var pixelX = clickedPixel.x + polyRadius * Math.cos(aRad);
		var pixelY = clickedPixel.y + polyRadius * Math.sin(aRad);
		var polyPixel = new GPoint(pixelX,pixelY);
		var polyPoint = mapNormalProj.fromPixelToLatLng(polyPixel,mapZoom);
		polyPoints.push(polyPoint);
	}
	var polygon = new GPolygon(polyPoints,"#000000",2,.5,polyColor,.5);
	gMapsObject.data['map'].addOverlay(polygon);
}

gMapsObject.clearShapes = function(){
	gMapsObject.data['map'].clearOverlays();
}

/***************************************************************
* STATIC LINKS
***************************************************************/

StaticLink = new Object();
StaticLink.repository = new Hash();
StaticLink.initialize = function(){
	$$('.staticLink').each(function(elem){
		elem.observe('click',StaticLink.eventHandler);
	});
}
StaticLink.setLink = function(linkRef,targetUrl) {
	StaticLink.repository.set(linkRef,targetUrl);
}
StaticLink.getLink = function(linkRef) {
	StaticLink.repository.get(linkRef);
}
StaticLink.eventHandler = function(e) {
	var reqLink = e.target.getAttribute('linkRef');
	StaticLink.redirect(reqLink);
}
StaticLink.redirect = function(linkRef) {
	// TODO : improve script with external window feature
	if(!StaticLink.repository.get(linkRef)) return false;
	var reposResult = StaticLink.repository.get(linkRef);
	StaticLink.redirectDirect(reposResult);
}

StaticLink.redirectDirect = function(URLPath) {
	if(URLPath.charAt(0) == '#') {
		document.location.hash = URLPath.substr(1);
	} else {
		var baseURL = '';
		$$('base').each(function(element) {
			baseURL = element.readAttribute('href');
		},this);
		if(URLPath.indexOf('://')==-1) {
			URLPath=baseURL+URLPath;
		}
		document.location.href = URLPath;
	}
}

document.observe('dom:loaded', function(eventObj){
	$$('a').each(function(elemObj){
		if(!elemObj.hasClassName('staticLink')){
			elemObj.observe('click', function(eventObject){
				StaticLink.redirectDirect(this.readAttribute('href'));
				window.event? event.returnValue = false : eventObject.preventDefault(); 
				return false;
			});
		}
	});
});



// E-MAIL HANDLING

var emptyString = /^\s*$/ ;
var proceed = 2;

function evalForm(formId,validationScript) {
	if ((validationScript == "") || eval(validationScript)) {
		document.getElementById(formId).submit();
	}
}

function commonCheck(valfield, required) {
	if (!document.getElementById)  return true; 
	if (emptyString.test(valfield.value)) {
		if (required) {
			setfocus(valfield);
			return false;
		}
		else {
			return true;  
		}
	}
	return proceed;
}

function validatePresent(valfield) {
  var stat = commonCheck(valfield, true);
  if (stat != proceed) return false;
  return true;
}
function validateEmail  (valfield, required) {
	var tfld = trim(valfield.value); 
	var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
	if (!email.test(tfld)) {
		setfocus(valfield);
		return false;
	}
	var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;
	return true;
}
function validateTelnr  (valfield, required) {
	var tfld = trim(valfield.value);  
	var telnr = /^\+?[0-9 ()-]+[0-9]$/  ;
	if (!telnr.test(tfld)) {
		setfocus(valfield);
		return false;
	}
	var numdigits = 0;
	for (var j=0; j<tfld.length; j++)
	if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;
	if (numdigits<6) {
		setfocus(valfield);
		return false;
	}
	return true;
}

function trim(str) { return str.replace(/^\s+|\s+$/g, ''); }

function setFocusDelayed() { global_valfield.focus(); }
function setfocus(valfield) {
	global_valfield = valfield;
	setTimeout('setFocusDelayed()',100);
}


/* DIVERSEN - form focus */

var currentlyActiveInputRef = false;
var currentlyActiveInputClassName = false;

function highlightActiveInput() {
  if(currentlyActiveInputRef) {
    currentlyActiveInputRef.className = currentlyActiveInputClassName;
  }
  currentlyActiveInputClassName = this.className;
  this.className = 'inputHighlighted';
  currentlyActiveInputRef = this;
}

function blurActiveInput() {
  this.className = currentlyActiveInputClassName;
}

function initInputHighlightScript() {
  var tags = ['INPUT','TEXTAREA'];
  for(tagCounter=0;tagCounter<tags.length;tagCounter++){
    var inputs = document.getElementsByTagName(tags[tagCounter]);
    for(var no=0;no<inputs.length;no++){
      if(inputs[no].className && inputs[no].className=='doNotHighlightThisInput')continue;
      if(inputs[no].tagName.toLowerCase()=='textarea' || (inputs[no].tagName.toLowerCase()=='input' && inputs[no].type.toLowerCase()=='text')){
        inputs[no].onfocus = highlightActiveInput;
        inputs[no].onblur = blurActiveInput;
      }
    }
  }
}

/***************************************************************
* SLIDESHOW
***************************************************************/
function Slideshow(slideshow, timeout) {
  this.slides = [];
  var nl = $(slideshow).getElementsByTagName('div');
  for (var i = 0; i < nl.length; i++) {
    if (Element.hasClassName(nl[i], 'slide')) {
      this.slides.push(nl[i]);
    }
  }
  this.timeout = timeout;
  this.current = 0;

  for (var i = 0; i < this.slides.length; i++) {
    this.slides[i].style.zIndex = this.slides.length - i;
  }

  Element.show(slideshow);
  setTimeout((function(){this.next();}).bind(this), this.timeout + 850);
}
Slideshow.prototype = {
  next: function() {
    for (var i = 0; i < this.slides.length; i++) {
      var slide = this.slides[(this.current + i) % this.slides.length];
      slide.style.zIndex = this.slides.length - i;
    }

    Effect.Fade(this.slides[this.current], {
      afterFinish: function(effect) {
        effect.element.style.zIndex = 0;
        Element.show(effect.element);
        Element.setOpacity(effect.element, 1);
      }
    });
    
    this.current = (this.current + 1) % this.slides.length;
    setTimeout((function(){this.next();}).bind(this), this.timeout + 850);
  }
}

/* ---------------------------------------------------------------- //
// CONFIRM                                                          //
// ---------------------------------------------------------------- */

function initiate_confirm(e){
	var elem = e.target;
	var confirmMessage = elem.getAttribute("confirmMessage").replace(/\\n/,"\n");
	if(!confirmMessage) return false;
	if(!confirm(confirmMessage)) {
		window.event? event.returnValue = false : e.preventDefault();
		return false;
	}
}


/* ---------------------------------------------------------------- //
// "POPUP"                                                          //
// ---------------------------------------------------------------- */

var flvLoaded = false;

function get_flvPlayer(player){
	// deze antieke manier omdat ome adobe vindt dat het zo moet
	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	return (isIE) ? window[player] : document[player];
}

function popup_show(e) {
	elem = e.target;
	$('popup_name').innerHTML = elem.getAttribute('windowName');
	var targElem = elem.getAttribute('targPlayer') ? $(elem.getAttribute('targPlayer')) : $('popup_img');
	$$('.popup_targElem').each(function(elem){
		if(!elem.hasClassName('popup_toggle')) elem.toggleClassName('popup_toggle');
	});
	if($('popup_achtergrond').hasClassName('popup_toggle')) $('popup_achtergrond').toggleClassName('popup_toggle');
	if($('popup_content').hasClassName('popup_toggle')) $('popup_content').toggleClassName('popup_toggle');
	if(targElem.hasClassName('popup_toggle')) targElem.toggleClassName('popup_toggle');
	if(targElem == $('popup_flv')) {
		get_flvPlayer('popup_flv').playVideo(elem.getAttribute("srcValue"));
		//$('popup_flv').playVideo(elem.getAttribute("srcValue"));
	} else {
		targElem.src = elem.getAttribute("srcValue");
	}
};

function popup_hide() {
	$('popup_name').innerHTML = "";
	$('popup_img').src = "images/ladenWit.gif";
	if(flvLoaded) { get_flvPlayer('popup_flv').pauseResume(); } ;
	flvLoaded = true;
	if(!$('popup_achtergrond').hasClassName('popup_toggle')) { $('popup_achtergrond').toggleClassName('popup_toggle'); };
	if(!$('popup_content').hasClassName('popup_toggle')) { $('popup_content').toggleClassName('popup_toggle'); };

};

/***************************************************************
* DOM EVENT LISTNERS
***************************************************************/
document.observe('dom:loaded', function(event){
	if($('googleMaps')) { 
		gMapsObject.loadGoogleMaps();
	}
	StaticLink.initialize();
	
	$$('.openPopup').each(function(elem){elem.observe('click',popup_show)});
	$$('.closePopup').each(function(elem){elem.observe('click',popup_hide);});
	$$('.popup_targElem').each(function(elem){elem.observe('click',popup_hide);});
	$$('.confirmBox').each(function(elem){elem.observe('click',initiate_confirm)});
	$$('.slideshow').each(function(elem){new Slideshow(elem.id, 3000)});
	if($('popup_name')) { popup_hide(); } // dit mag aanvankelijk niet gehide zijn, want dan vertikt je browser de swf te downloaden
	initInputHighlightScript();
});