var CONFIG = {
	TOPMENU: {
		ANIM_BG_POS_START: 		'0px',
		ANIM_BG_POS_END: 		'-19px',
		ANIM_DURATION_START: 	300,
		ANIM_DURATION_END:		500
	},
	ARTICLES: {
		ANIM_SLIDE_DURATION:	500		
	},
	SEARCH: {
		DEFAULT_INPUT_VALUE:	'Zoeken...'	
	}
};

function newSiteShow()
{
	$('site-overlay').setStyle('background', 'transparent');
	Cookie.set('newSite', 'true',  {duration: 360})
}

function newSite()
{
	if($('site-overlay'))
	{
		$('site-overlay').remove();
		$('wrapper').setStyle('display', 'block');
		Cookie.set('newSite', 'true',  {duration: 360});
	}
}

window.addEvent('domready', function() 
{
	/*
	if(Cookie.get('newSite'))
	{
		newSite();
	}
	*/
	
	new MyAccordion('div.accordion');
	new Search();
	new Swf();
	new FormAjax();
	new Tags();	
	
	new TextareasMaxlength();
	
	// maak een accordion met meerdere levels
	var objMultyHarmonica = new MultyHarmonica();
	objMultyHarmonica.setWrapperClassName('harmonica');
	objMultyHarmonica.setStretchClassName('content');
	objMultyHarmonica.setButtonClassName('button');
	objMultyHarmonica.start();
	
	// disable autofill for password field in form#edit	
	if($E('input[type=password]', $('edit')))
	{
		$E('input[type=password]', $('edit')).value = '';
	}
	
	if($E('form#login input#username'))
	{
		$E('form#login input#username').focus();
	}
});

window.addEvent('load', function()
{
	if($('googlemaps'))
	{
		loadMaps();
	}
});

/**
 * undocumented class
 *
 * @author Edgar Post
 **/
var TextareasMaxlength = new Class(
{
	initialize: function()
	{
		$ES('textarea').each(function(textarea)
		{
			if(textarea.name == 'tags' || textarea.name == 'opmerkingen')
			{
				return;
			}
			
			var maxLength = 500;
			
		 	if(textarea.getProperty('max'))
			{
				maxLength = textarea.getProperty('max');
			}
			
			label = textarea.getPrevious();
			
			labelHTML = label.innerHTML.replace('250', maxLength);
						
			label.setHTML(labelHTML + '<br><span style="font-weight:normal;color:#666;">Lengte: <span id="'+textarea.name+'-length">0</span>/'+maxLength+'</span>');
			
			textarea.addEvent('keypress', function()
			{
				if(this.value.length > maxLength)
				{
					this.value = this.value.substr(0, maxLength);
				}
				
				$(this.name+'-length').setHTML(this.value.length);
			});
		});
	}
});

/**
 * undocumented class
 *
 * @author Edgar Post
 **/
var Swf = new Class(
{
	initialize: function()
	{
		/*
		if($('site-overlay') && !Cookie.get('newSite'))
		{
			this.loadMovie($('site-overlay'), 'inc/swf/newsite.swf', '100%', 940);
		}
		else
		{
			newSite();
		}
		*/
		
		if($E('div.pushbox'))
		{
			if(fairchildIn20Seconden === true)
			{
				this.loadMovie($E('div.pushbox'), 'inc/swf/fairchildin20seconden.swf', 900, 234);
			}
			else
			{				
				this.loadMovie($E('div.pushbox'), 'inc/swf/pushbox_1.swf', 900, 234);
			}
		};
	
		if($E('div.fairchildin20secondenswf'))
		{
			this.loadMovie($E('div.fairchildin20secondenswf'), 'inc/swf/fairchildin20seconden.swf', 900, 234);
		};
	
		if($E('div.werkenbijswf'))
		{
			this.loadMovie($E('div.werkenbijswf'), 'inc/swf/werkenbij.swf', 900, 234);
		};
	},
	loadMovie: function(argElement, argSwf, argWidth, argHeight)
	{
		var so = new SWFObject(argSwf, argElement+'_swf', argWidth, argHeight, "8", "#fff");
		so.addParam('wmode', 'transparent');
	   	so.write(argElement);
	}	
}); 
		
/**
 * undocumented class
 *
 * @author Edgar Post
 **/
var fileFields = {};
var FormAjax = new Class(
{
	initialize: function()
	{		
		var forms = $ES('form.ajax-enabled');
		var classRef = this;
		for(var i=0; i<forms.length; i++)
		{
			form = forms[i];
			
			form.onsubmit = function()
			{	
				if($E('textarea[name=pagecontent]', form))
				{
					tinyMCE.triggerSave();
				}
				
				$ES('*').setStyle('cursor', 'wait');		
			
				classRef.unsetInputInvalid($ES('input', form));
				classRef.unsetInputInvalid($ES('textarea', form));
				classRef.unsetInputInvalid($ES('select', form));
				classRef.deleteErrorMessages();
				
				var doEvalScripts = true;
				
				// loops all input[file] elements
				for(var field in fileFields)
				{	
					if(fileFields[field] === false)
					{
						doEvalScripts = false;
					}
					
					input = $E('input[name='+field+']', form);
									
					if(input.getProperty('type')!='hidden' && input.hasClass('required'))
					{
						classRef.inputToImage(input, field);				
					}
				};
				
				var submit = this.send(
				{
					evalScripts: doEvalScripts,
					onComplete: function()
					{							
						$ES('*').setStyle('cursor', 'default');
						
						var movedToTop = false;
						if(response = Json.evaluate(this.response.text))
						{
							var focus = true;
							for(var field in response)
							{
								// try normal input
								input = $E('input[name='+field+']', form);
								
								// try select
								if(!input)
								{
									input = $E('select[name='+field+']', form);
								}
								
								// try textarea
								if(!input)
								{
									input = $E('textarea[name='+field+']', form);
								}
								
								// try global errormessage
								if(!input)
								{
									if(typeof(response[field]) == 'string' || typeof(response[field]) == 'STRING')
									{
										classRef.addErrorMessage(response[field]);
									}
									continue;
								}
								else
								{
									classRef.setInputInvalid(input, focus);
									if(!movedToTop)
									{
										document.location.href = window.location.toString()+'#';
										movedToTop = true;
									}
								}	
								
								focus = false;
							};
						}
					}
				});	
				return false;
			};
			
			classRef.checkFiles(form);
		}
	},
	
	checkFiles: function(form)
	{
		if(!$('iframe_upload'))
		{
			var iframe = new Element('iframe',{'name':'iframe_upload','id':'iframe_upload'}).addClass('iframe-upload-image').injectAfter(form);
		}
		
		var classRef = this;
		$ES('input[type=file]', form).each(function(fileInput)
		{
			if($(fileInput.getProperty('name')+'_exists'))
			{
				fileFields[fileInput.getProperty('name')] = true;
				classRef.inputToImage(fileInput, fileInput.getProperty('name'));
			}
			else if( !fileInput.hasClass('required') )
			{
				fileFields[fileInput.getProperty('name')] = true;				
			}
			else
			{
				fileFields[fileInput.getProperty('name')] = false;
			}
			
			fileInput.onchange = function()
			{
				var originalTarget = form.getProperty('target');
				var originalAction = form.getProperty('action');
								
				form.setProperty('target', 'iframe_upload');
				form.setProperty('action', 'admin/upload/?type='+$E('input[name=type]').getProperty('value'));
				form.submit();
				form.setProperty('target', originalTarget)
				form.setProperty('action', originalAction);	
			
				iframe.addEvent('load', function()
				{
					classRef.inputToImage(fileInput, fileInput.getProperty('name'));
				});					
			};
		});	
	},
	
	inputToImage: function(input, field)
	{		
		if(input.getProperty('type')=='hidden')
		{
			return;
		}
		
		if(!fileFields[field])
		{
			this.setInputInvalid(input, false);
		}
		else
		{			
			if($(input.getProperty('name')+'_exists'))
			{
				var disable_field = true;
				var img = $(input.getProperty('name')+'_exists');
			}
			else
			{
				var disable_field = false;
				var img = new Element('img', { 'src' : fileFields[field] });
			}
			
			img.setProperty('alt', 'Dubbelklik om deze afbeelding te vervangen');
			img.setStyles({'max-width': 237, 'cursor': 'pointer', 'float': 'left', 'margin-bottom': '10px'}).injectAfter(input);
			
			var hiddenInput = new Element('input',
			{
				'value'	: img.getProperty('src'),
				'type'	: 'hidden',
				'name'  : field,
				'id'	: field
			}).injectAfter(input);
			
			hiddenInput.disabled = disable_field;
			
			img.ondblclick = function()
			{
				if(!confirm('Weet je zeker dat je deze afbeelding wilt vervangen?'))
				{
					return false;
				}
				input.setProperty('disabled', '');
				input.setProperty('name', input.getProperty('name').replace('_old', ''));
				input.setStyle('display', 'block');
				hiddenInput.remove();
				this.remove();
			};
			
			input.setProperty('disabled', 'true');
			input.setProperty('name', input.getProperty('name')+'_old');
			input.setStyle('display', 'none');
			
			this.unsetInputInvalid();
		}
	},
	
	setInputInvalid: function(elm, message, focus)
	{
		elm.addClass('invalid');
		
		var img = new Element('img', {src:'image/forms/icn-invalid-cross.gif'}).injectAfter(elm).addClass('invalid-cross');
		new Fx.Style(img, 'opacity', { wait:true }).start(0,1);
		
		if(focus)
		{
			elm.focus();
		}
	},
	unsetInputInvalid: function(elms)
	{
		$ES('.invalid-cross').each(function(node)
		{
			node.remove();
		})
		
		$ES('.invalid').each(function(node)
		{
			node.removeClass('invalid');
		});
	},
	deleteErrorMessages: function()
	{
		errorMessages = $ES('ul.error-message li');
		
		
		for(var i=0; i<errorMessages.length; i++)
		{
			errorMessages[i].remove();
		}
	},
	addErrorMessage: function(strError)
	{
		var errorContainer = $E('ul.error-message');
		new Element('li').setText(strError).injectInside(errorContainer);
	}
});

var MyAccordion = new Class(
{
	initialize: function(className)
	{
		var accordions = $ES(className);
		
		var currentLocation = window.location.toString();
		currentLocation = currentLocation.split('#');
		currentLocation = currentLocation[currentLocation.length-1];
		
		var directLocation = false;
		
		for(var a=0; a<accordions.length; a++)
		{		
			accordion = accordions[a];
			elements = $ES('div.accordion-item', accordion);
				
			for(var i =0; i < elements.length; i++)
			{
				element = $(elements[i]);
				
				var toggler = $E('a', element);
				var content = $E('p', element);
				content.readmore = $E('a', content);
				
				content.setStyle('cursor', 'pointer');
				content.addEvent('click', function()
				{	
					document.location.href = this.readmore.href;
				});
				
				var itemLocation = toggler.getProperty('href').split('#');
				itemLocation = itemLocation[itemLocation.length-1];
								
				content.setStyle('padding-bottom', 0);
				
				toggler.addEvent('focus', function() 
				{ 
					this.blur();
				});
				
				toggler.addEvent('click', function()
				{		
					oldToggler = $E('a.active-accordion', this.getParent().getParent().getParent());
					oldContent = $E('p', oldToggler.getParent().getParent());
					oldContentHeight = oldContent.getSize().size.y;			
					
					activeToggler = $E('a', this.getParent().getParent());
					activeContent = $E('p', this.getParent().getParent());
					
					if(activeToggler == oldToggler) { return; }
					
					oldToggler.removeClass('active-accordion');
					
					new Fx.Styles(oldContent, { transition: Fx.Transitions.circInOut,duration:CONFIG.ARTICLES.ANIM_SLIDE_DURATION, wait:false }).start(
					{
						'height': 0,
						'opacity': 0
					});
										
					new Fx.Styles(activeContent, { transition: Fx.Transitions.circInOut,duration:CONFIG.ARTICLES.ANIM_SLIDE_DURATION, wait:false }).start(
					{
						'height': activeContent.getSize().scrollSize.y + 20,
						'opacity': 1
					});
					
					activeToggler.addClass('active-accordion');
				});
				
				if(currentLocation == itemLocation)
				{
					directLocation = toggler;
				}
				
				if(i==0)
				{
					toggler.addClass('active-accordion');
					content.setStyle('height', ( content.getSize().scrollSize.y + 20 ));
				}
				else
				{
					content.setStyle('height', 0);			
				}
			}
		};
		if(directLocation)
		{
			directLocation.fireEvent('click');	
		}
	}
});

var Search = new Class(
{
	initialize: function()
	{
		this.searchInput();
		this.populairTagsFormat();
	},
	searchInput: function()
	{
		if(!$E('input.search-keyword')) { return; }
		
		var searchInput = $E('input.search-keyword');
		if(searchInput.value === '') 
		{
			searchInput.value = CONFIG.SEARCH.DEFAULT_INPUT_VALUE;
		}
		
		searchInput.addEvent('focus', function() 
		{ 
			if(this.value == CONFIG.SEARCH.DEFAULT_INPUT_VALUE) 
			{
				this.value = '';
			}
		});
		
		searchInput.addEvent('blur', function()
		{ 
			if(this.value === '') 
			{
				this.value = CONFIG.SEARCH.DEFAULT_INPUT_VALUE;
			}
		});
	},
	populairTagsFormat: function()
	{
		if(!$E('div.populair-tags')) { return; }
		
		var helpButton = $('help-button');
		var helpTags = $E('div.populair-tags');
		
		if(helpTags)
		{
			helpTags.setStyle('display', 'none');
			var tags = $ES('ul li a', $(helpTags));
			
			for(var i=0; i<tags.length; i++)
			{
				if(i != tags.length-1)
				{
					new Element('span').setText(', ').injectAfter(tags[i]);
				}
			};
		}
		
		helpTags.addEvent('mouseleave', function()
		{
			setTimeout(function() { $E('div.populair-tags').setStyle('display', 'none') }, 200);
		});
		
		helpButton.onclick = function()
		{
			if(helpTags.getStyle('display') == 'none')
			{
				helpTags.setStyle('display', 'block');
			}
			else
			{
				helpTags.setStyle('display', 'none');
			}
			return false;
		}		
	}
});

/**
 * undocumented class
 *
 * @author Edgar Post
 **/
var Nieuwsbrief = new Class(
{
	total : 		0,
	sent : 			0,
	sendInterval : 	0,
	percentage :    0,
	
	initialize: function()
	{
		this.setRecipients();
		//this.send();
	},
	setRecipients: function()
	{
		var classRef = this;
		var recipients = {};
		$ES('option', $('recipients')).each(function(node)
		{	
			classRef.total++;
			recipients[node.value] = true;
		});
		var sendMail = new Ajax('admin/nieuwsbrief/set-recipients/', 
		{
			data: recipients,
			method: 'get',
			onComplete: function()
			{
				response = Json.evaluate(this.response.text);
				if(response.result == 'true')
				{
					classRef.send();
				}
				else
				{
					alert('Er is iets mis gegaan!');
				}
			}
		}).request();
	},
	send: function()
	{
		var classRef = this;
		var sendMail = new Ajax('admin/nieuwsbrief/send-from-cache/', 
		{
			method: 'get',
			onComplete: function()
			{
				response = Json.evaluate(this.response.text);
								
				if(response.result == 'completed')
				{
					clearInterval(classRef.sendInterval);
					$('nieuwsbrief-send-status').setHTML('Status: Gereed');
				}
				else
				{
					classRef.sent++;
					classRef.sendInterval = setTimeout(function() { classRef.send(); }, 100);
					classRef.percentage = (  classRef.sent / classRef.total * 100 ) + '%';
					$('nieuwsbrief-send-progress').setStyle('width', classRef.percentage);
					$('nieuwsbrief-send-progress').setHTML('<span class="recipients-sent">'+classRef.sent+'</span> / <span class="recipients-count">'+classRef.total+'</span>');
					$('nieuwsbrief-send-status').setHTML('Status: Verzonden naar '+response.result);
				}
			}
		}).request();
	}
});

var gMaps, directionsPanel, directions, gOverlay;

var gPosition = 
{
	'Voordeur': 		[ 52.09868923559704, 5.125154256820679 ],
	'Parkeergarage': 	[ 52.098096063353765, 5.126688480377197 ]
}

function loadMaps()
{
	//$('form-route-planner').remove();
	
	if (GBrowserIsCompatible()) 
	{		
		gMaps = new GMap2(document.getElementById("googlemaps"));	
		gMaps.addControl(new GLargeMapControl());	
		changeCenter(gPosition.Parkeergarage[0], gPosition.Parkeergarage[1]);
	}
	
	$('route-naar').onchange = function()
	{
		selection = this.options[this.options.selectedIndex].firstChild.nodeValue;
		changeCenter(gPosition[selection][0], gPosition[selection][1]);
	};
}

function changeCenter(argLang,argLong)
{
	gMaps.setCenter(new GLatLng(argLang, argLong), 15);
	gMaps.clearOverlays();
	gMaps.addOverlay(new GMarker(new GLatLng(argLang, argLong)));
}

function showRouteBeschrijving()
{
	if($('route-van').value == '')
	{
		alert('Je hebt nog geen vertrekadres ingevuld.');
		$('route-van').focus();
		return;
	}
	
	var from = $('route-van').value+', Nederland';
	var to = $('route-naar').options[$('route-naar').options.selectedIndex].value+', Nederland';
	
	$('googledirections').setHTML('');
		
	directionsPanel = document.getElementById("googledirections");
	directions = new GDirections(gMaps, directionsPanel);					 
	GEvent.addListener(directions, "error", handleError);
	
	directions.load(from+" to "+to);	
}

function handleError()
{
	switch(this.getStatus().code)
	{
		default:
		{		
			break;
		}
		case G_GEO_SUCCESS :
		{
			
			break;
		}
		case G_GEO_UNKNOWN_ADDRESS :
		{
			alert( 'Het ingevulde vertrek adres kan niet worden gevonden. Probeer iets specifieker te zijn.' );
			break;
		}
		case G_GEO_BAD_REQUEST :
		case G_GEO_SERVER_ERROR :
		case G_GEO_BAD_KEY :
		case G_GEO_TOO_MANY_QUERIES :
		{
			alert( 'De Google Maps server is helaas niet beschikbaar.' );
			break;
		}
		case G_GEO_MISSING_QUERY :
		{
			alert( 'Vul uw vertrekadres in.' );
			break;
		}	
		case G_GEO_UNAVAILABLE_ADDRESS :
		{
			alert( 'Het ingevuld adres kan niet worden gevonden.' );
			break;
		}
		case G_GEO_UNKNOWN_DIRECTIONS :
		{
			alert( 'Routebeschrijving kan niet worden getoond. Probeer het eens vanaf een ander vertrekadres.' );				
			break;
		}
	}
}

/**
 * undocumented class
 *
 * @author Edgar Post
 **/
var Tags = new Class(
{
	initialize: function()
	{
		if(!$('other-tags')) { return; }
		
		var selector = $('other-tags');
		var insertedTags = $('tags');
		
		selector.onchange = function()
		{
			selectedTags = this.options[this.options.selectedIndex].value.toString().split(',');
			currentTags = insertedTags.value.toString().split(',');
			
			currentTags.merge(selectedTags);
			currentTags.remove('');
			
			currentTags = currentTags.join(',');
			insertedTags.value = currentTags;
			
			this.options.selectedIndex = 0;
		};
	}
});

 
function cleanWhitespace(element)
{
	element = $(element);
	for (var i = 0; i < element.childNodes.length; i++)
	{
		var node = element.childNodes[i];
		if (node.nodeType == 3 && !/\S/.test(node.nodeValue)){
			node.parentNode.removeChild(node);
		}	
	}
}
/**
 * MultyHarmonica: A multy
 *
 * @author Mient-jan Stelling
 **/

var MultyHarmonica = new Class({
	initialize:function(){},
	
	cleanWhitespace:function(element)
	{
		element = $(element);
		for (var i = 0; i < element.childNodes.length; i++)
		{
			var node = element.childNodes[i];
			if (node.nodeType == 3 && !/\S/.test(node.nodeValue)){
				node.parentNode.removeChild(node);
			}	
		}
	},
	setWrapperClassName:function( argStrWrapper ){
		this.strWrapper = argStrWrapper;
	},
	setStretchClassName:function( argStrStretch ){
		this.strStretch = argStrStretch;
	},
	setButtonClassName:function( argStrButton ){
		this.strButton = argStrButton;
	},
	
	start:function()
	{
		var arrFxBackground = [];
		var arrFxText		= [];
				
		var stretchers = $$( 'div.' + this.strStretch );
		
		var arrHarmonicaButton 	= Array();
		var myAccordion 		= Array();
	
		var domHarmonica = $$( 'div.' + this.strWrapper);
		for (var intI = 0; intI < domHarmonica.length; intI++)
		{
			var node 		= domHarmonica[intI];
			var arrButton	= Array();
			var arrStretch	= Array();
			
			this.cleanWhitespace(node);
			for (var intISub = 0; intISub < node.childNodes.length; intISub++)
			{
				var subNode = node.childNodes[intISub];
				if(subNode.className == this.strButton)
				{
					$(subNode)._parent = {};
					$(subNode)._parent.strButton = this.strButton;
					$(subNode).addEvent('mouseover',function()
					{
						//if( !this.hasClass( this._parent.strButton + '_on') )
						//{
						//	this.addClass( this._parent.strButton + '_on')
						//	this.removeClass( this._parent.strButton );
						//}
					});
					
					$(subNode).addEvent('mouseout',function()
					{
						if( !this.hasClass('click') )
						{
							// this.addClass( this._parent.strButton );
							//this.removeClass( this._parent.strButton + '_on');
						}
					});
					arrButton.push( subNode );
				}
				else if(subNode.className == this.strStretch )
				{
					arrStretch.push( subNode );	
				}
			}
				
			if(intI < 2)
			{ 
				var intDisplay = 0; 
			}
			else
			{
				intDisplay = -1; 
			}
			
			myAccordion[intI] = new Accordion(arrButton, arrStretch, 
			{ 	
				duration: 500,
				start:false,
				alwaysHide:true,
				display: intDisplay,
				fixedHeight:false,
				transition: Fx.Transitions.circInOut,
				onComplete: function(toggler, element)
				{
					var element = $(this.elements[this.previous]);
					if( element )
					{
						var harr = $$(element.getChildren()).getStyle('height');
						if (element.offsetHeight>0) {
							element.setStyle('height', 'auto' );
						}
					}
					
					element.readmore = $E('a', element);
				
					element.setStyle('cursor', 'pointer');
					element.addEvent('click', function()
					{	
						// document.location.href = this.readmore.href;
					});
					
					/*console.log( domElement );
					var el = this.elements[this.previous];
					if (el.offsetHeight > 0) el.setStyle('height', 'auto');*/
				},
				onActive:function( domElement, intI )
				{
					var prevButton = domElement.getPrevious();
					if(prevButton) var prevButton = prevButton.getPrevious()
					if(prevButton)
					{
						//$(prevButton).setStyle('borderBottom','0px');
					}
					// domElement.addClass( this.strButton + '_on' );
					domElement.addClass( 'click' );
					domElement.getNext().setStyle('border-bottom','1px solid #CCCCCC');
					// domElement.getLast().setStyle('border-bottom','0px solid #CCCCCC');
					// domElement.removeClass( this.strButton );
					//$(domElement).setStyle('borderBottom','0px');
				}.bind(this),
				onBackground:function( toggle,content )
				{				
					toggle.removeClass('click');
					toggle.getNext().setStyle('border-bottom','0px solid #CCCCCC');
					
					content.setStyle('height', content['offsetHeight']);  /* turn off auto */
					toggle.removeClass('active'); 
					content.removeClass('active');
					
					// domElement.addClass( this.strButton );
					// domElement.removeClass( this.strButton + '_on');
					//var nextButton = domElement.getNext().getNext();
				}.bind(this)
			});
			
			
		}
	
	}
}); 