var ie = (navigator.appName == "Microsoft Internet Explorer") ? true : false;
var StateManager = EXANIMO.managers.StateManager;


function toggleFont(title){
	switch(title){
	case 'klein': 		
		$('vergroot').show();
		$('verklein').hide();
		break;
	case 'groot':
		$('vergroot').hide();
		$('verklein').show();
		break;
	}
}

function stripTags(input){
	var output = input.replace(/<\/?[^>]+(>|$)/g, "");
	return output;
}

var tekstRules = {
	'div#resize span#verklein' : function(el){
		el.onclick = function(){
			setStylesheet('klein'); 
			toggleFont('klein');
		}
	},
	'div#resize span#vergroot' : function(el){
		el.onclick = function(){
			setStylesheet('groot'); 
			toggleFont('groot');
		}
	}
};

var sendFormRules = {
	'form#sendForm' : function(el){
		el.onsubmit = function(){
			sendForm(this);
			return false;
		}
	} 
};

var sendContactFormRules = {
	'form#contactForm' : function(el){
		el.onsubmit = function(){
			sendContactForm(this);
			return false;
		}
	} 
};

var subNavRules = {
	'#subNav li a': function(el){
		el.onclick = function(){	
			var linktopass = this.href;			
			linktopass = linktopass.split("?");
			linktopass = linktopass[1];						
			StateManager.setState(linktopass);	
			analytics(this);		
			return false;
		}			
	}
};

var hoofdNavRules = {
	'#hoofdNavigatie li a' : function(el){
		el.onclick = function(){			
			var linktopass = this.href;			
			linktopass = linktopass.split("?");
			linktopass = linktopass[1];						
			StateManager.setState(linktopass);				
			return false;
		}			
	}	
};	

var functionaliteitRules = {
	'#functionaliteit a#send': function(el){
		el.onclick = function(){
			sendToFriend();
			return false;
		}
	},
	'#functionaliteit a#print': function(el){
		el.onclick = function(){
			window.print();
			return false;
		}
	}
};

var footerRules = {
	'#footer #links a.get': function(el){
		el.onclick = function(){			
			var linktopass = this.href;			
			linktopass = linktopass.split("?");
			linktopass = linktopass[1];						
			StateManager.setState(linktopass);		
			return false;	
		}
	}
};

function initHoofdNav(){	
	Behaviour.register(hoofdNavRules);
	Behaviour.apply();
	initSubNav();
}

function initSubNav(){	

}

function initContent(){
	var functPresent = document.getElementById('functionaliteit');
	if( functPresent != undefined){
		Behaviour.register(functionaliteitRules);
	}	
	
	var cfPresent = document.getElementById('contactForm');
	if( cfPresent != undefined){
		Behaviour.register(sendContactFormRules);
	}
}

function initFooter(){
	// Aangezien de footer soms wel eens een link kan hebben die ook in de subnavigatie kan staan, moeten we een id 
	// gebruiken die iets meer bevat dan alleen de pagina.	
	Behaviour.register(footerRules);
	Behaviour.apply();
	siteMap();
}

function logError(message, log){
	// TODO: Hier een php-bestand aanroepen om een fout te loggen. Automatische integratie met Mantis? JA!!!
	// Voor de errors moeten we de volgende dingen meesturen: 
	// - functie die de fout in ging
	// - filename waar de functie zich in bevindt
	// - regelnummer waar de fout gegenereerd is
	// - eventueel het object wat er mee gemoeid is
	// - response van de server(bijv. 404, timeout etc.)
	// - de melding die gestuurd is richting de gebruiker
	for(i = 0; i < log.length; i++){
		log[i];
	}
	return message;
}

function toggleClass(type,className)
{
	// Eerst andere active classes weghalen
	obj = $('container').getElementsByClassName(className);
	max = obj.length;
	
	for(i = 0; i < max; i++)
	{
		$(obj[i]).removeClassName(className);
	}						
	$(type).addClassName(className);			
}	

function stripTags(input){
	var output = input.replace(/<\/?[^>]+(>|$)/g, "");
	return output;
}

/*---------------------------------------------------------------------
HISTORY
---------------------------------------------------------------------*/
StateManager.onstatechange = function(e){
    StateManager.setTitle('Fysiek Fysiotraining Rosmalen');
	action(e.id, false);
}

function analytics(content){			
	urchinTracker(content.innerHTML);
}

function action(content){
	//Hier checken wat we moeten inladen, bij een hoofdnav betekent
	//dit dat we altijd de eerste optie inladen van het hoofdmenu
	// We splitten de link op in een hoofdnav en een contentdeel
	if(content){
		content = '?'+content;
		var query_string = content.toQueryParams();
		var main_link, content_link, toggle,toggleContent,analytics1, analytics2;
		switch(query_string.hoofdNav){
			case '1':	
				//Over ons	
				toggle = 'onsNav';		
				main_link = 'templates/onsNav.tem.php';
				analytics1 = 'overons';
				break;
			case '2':
				//Uw fysiek
				toggle = 'doenNav';
				main_link = 'templates/doenNav.tem.php';
				analytics1 =  'fysiotraining';
				break;
			case '3':
				//Bedrijven
				toggle = 'bedrijfNav';
				main_link = 'templates/bedrijfNav.tem.php';
				analytics1 = 'bedrijven';
				break;
			default:
				toggle = 'onsNav';		
				main_link = 'templates/onsNav.tem.php';
				analytics1 = 'overons';
				break;
			
		}		
		content_link = 'templates/content.tem.php?id='+query_string.content;
		toggleContent = query_string.content;		
	}else{
		toggle = 'onsNav';	
		main_link = 'templates/onsNav.tem.php';
		content_link = 'templates/content.tem.php?id=27';
		toggleContent = 27;		
	}
	// Hoofdnav togglen en subnav inladen
	toggleClass(toggle,'active');
	new Ajax.Request(main_link, {		
		method: 'get',		
		onComplete: function(transport){ // Dit zijn alle responses met 2**, eventueel kunnen deze specifiek gelogd worden.
			var response = transport.responseText || "Door een technisch mankement moeten we een alternatieve manier gebruiken om de pagina in te laden. Het probleem is gemeld en wordt zo spoedig mogelijk opgelost."; 
			$('subNav').innerHTML = response;
			initSubNav();			
			// Subnavitem togglen inhoud inladen
			toggleClass('listsubNav'+toggleContent, 'subNavActive');
			new Ajax.Request(content_link, {
				method: 'get',
				onComplete: function(transport){
					var response = transport.responseText || "Door een technisch mankement moeten we een alternatieve manier gebruiken om de pagina in te laden. Het probleem is gemeld en wordt zo spoedig mogelijk opgelost.";
					$('content').innerHTML = response;
					initContent();
					//if(ie) updateFooter();
					Behaviour.apply();
				}
			});			
			scrollTo(0,0); 
		}		
	});	
}

function sendToFriend()
{
	var stfPresent = document.getElementById('sendFriendForm');
	if( stfPresent == undefined){
		new Ajax.Request('templates/send.tem.php', {
			method: 'get',
	 		onSuccess: function(transport){
	 			var response = transport.responseText || "no response text";
	 			new Insertion.Top($('content'),response);	
				// Behaviour regels voor het feitelijke versturen	
				Behaviour.register(sendFormRules);
				Behaviour.apply();
	 		}
		});
	}
}

function sendContactForm(){
	var tmpContactFormSerialized = $('contactForm').serialize(false);
		new Ajax.Request('ajax/contact.ajax.php', 
		{ 
			method:'post', 
			postBody: tmpContactFormSerialized,
			onComplete:	function(transport){
				//Content updaten met nieuwe content
				$('feedback').innerHTML = transport.responseText;
			}
		}
	);
}

function sendForm(){
	var tmpFormSerialized = $('sendForm').serialize(true);
	if(ie){
		var url = getFrameHash();
	}else{
		var url = window.location.hash;
	}	
	url = url.replace("#","?");
	var h = $H({ link: url });	
	h.merge(tmpFormSerialized);
	var toSend = h.toQueryString();
	new Ajax.Request('ajax/mail.ajax.php', 
		{ 
			method:'post', 
			postBody: toSend,
			onComplete:	function(transport){
				//Content updaten met nieuwe content
				$('feedback').innerHTML = transport.responseText;
			}
		}
	);
}

function initFaq(){	
	var faqPresent = document.getElementById('vragenlijst');
	if( faqPresent != undefined){
		var intros = $('vragenlijst').getElementsByClassName('intro');
		var antwoorden = $('vragenlijst').getElementsByClassName('antwoord');
		intros.each( function(el){
			$(el).show();
		});
		antwoorden.each( function(el){
			$(el).hide();
		});
		var faqRules = {
			'ul#vragenlijst li': function(el){
				el.onmouseover = function() {
					$(this).addClassName('vraag_hover');
				};
				el.onmouseout = function() {
					$(this).removeClassName('vraag_hover');
				};
				el.onclick = function(){
					// Wat scriptaculous spul gaan doen.
					var split_id = this.id;
					split_id = split_id.gsub('faq_','');
					new Effect.toggle($('intro_'+split_id),'blind');
					new Effect.toggle($('antwoord_'+split_id),'blind');
				};
			}			
		}
		Behaviour.register(faqRules);
		Behaviour.apply();
	}
}

/*
 * Sitemap deel 
 */


function closeSiteMap(){
	$('lightbox').hide();
	new Effect.Fade('overlay', { duration: 0.2});
}

function siteMap(){
	var objBody = document.getElementsByTagName("body").item(0);
		
	var objOverlay = document.createElement("div");
	objOverlay.setAttribute('id','overlay');
	objOverlay.style.display = 'none';
	objOverlay.onclick = function() { closeSiteMap(); return false; }
	objBody.appendChild(objOverlay);	
	
	var objLightbox = document.createElement("div");
	objLightbox.setAttribute('id','lightbox');
	objLightbox.style.display = 'none';
	objBody.appendChild(objLightbox);
	
	var siteMapRules = {
		'#footer #links a#sitemap': function(el){
			el.onclick = function(){
				new Ajax.Request('templates/sitemap.tem.php', {
					method: 'get',
					// Vanaf hier de verschillende responsecodes afvangen en juiste afhandeling aanroepen, voorlopig alleen
					// succes en failure, later uitbouwen voor gelaagde error-reporting.
					onFailure: function(){				 		
			
					},
					onSuccess: function(transport){ // Dit zijn alle responses met 2**, eventueel kunnen deze specifiek gelogd worden.
						
						// Eerst een grijze overlay tekenen					
						var arrayPageSize = getPageSize();						
						$('overlay').setStyle({ 
							height: arrayPageSize[1]+'px',
							fontSize: '1.5em'
							});						
						new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 });
						
						//var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);
						//Element.setTop('lightbox', lightboxTop);
						$('lightbox').show();
						
						// Dan de sitemap inserten en centreren		
						var response = transport.responseText || "Door een technisch mankement moeten we een alternatieve manier gebruiken om de pagina in te laden. Het probleem is gemeld en wordt zo spoedig mogelijk opgelost."; 
						$('lightbox').innerHTML = response;						
					}		
				});
				return false;	
			}
		}
	}
	Behaviour.register(siteMapRules);
	Behaviour.apply();
}

function getPageSize(){
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}

Event.observe(window, 'load', function() {
	$('verklein').hide();	
	initHoofdNav();
	initFooter();	
	initContent();
	Behaviour.register(tekstRules);
	Behaviour.register(subNavRules);
	Behaviour.apply();
	StateManager.initialize();
});
