var in_ie_hell = false;
var in_ie6_hell = false;
var cur_page_size;

window.addEvent('domready', function() {
	if(Browser.Engine.trident==true) { 
		in_ie_hell=true; 
		if(Browser.version.toInt()<7) {
			in_ie6_hell = true;
			trigger_ie_object_links();
		}
	}
	if(document.body.id=='home') {
		// init_menu();
	}
	init_show_more();
	make_img_galleries();
	make_content_sliders();
	activate_auto_fillers();
	if($$('.bg_slide_show').length>0) {
		init_bg_slide_show();
	}
	if($('locations_map')!=null) {
		set_google_map($('locations_map'));
	}
	check_modal_links();
	// THANK YOU MAM?
	if($('thank_you')!=null) {
		launch_modal('thank_you');
	}
	push_quicklinks_down();
});
function init_menu() {
	var menu_z_index = 10;
	var main_buts = $$('#site_menu .main_menu');
	main_buts.each(function(menu_but) {
		var menu_but_rel = menu_but.getProperty('rel');
		if($(menu_but_rel)!=null) {
			menu_but.store('his_sub', $(menu_but_rel));
			menu_but.addEvent('mouseover', function() {
				menu_z_index++;
				menu_but.retrieve('his_sub').setStyle('z-index', menu_z_index);
			}); 
		}
	});
}

var toggle_families = ['item_toggler', 'faq_toggler', 'news_toggler', 'news_list_toggler'];

function init_show_more() {
	var show_more_links = $$('a.show_more');
	var show_more_divs = $$('div.show_more');
	output(show_more_links.length);
	// ZET DIVS OP DISPLAY NONE
	show_more_links.each(function(show_more_link, index) {
		var more_link_rel = show_more_link.getProperty('rel');
		var div_to_hide = $(more_link_rel);
		output(index+' rel = '+more_link_rel);
		show_more_link.store('his_show_more', div_to_hide);
		div_to_hide.setStyle('display', 'none');
		
		show_more_link.store('his_link_txt', show_more_links[index].innerHTML);
		show_more_link.store('is_faq_toggle', false);
		if(show_more_link.hasClass('toggle_faq')) {
			show_more_link.store('is_faq_toggle', true);
			show_more_link.innerHTML = '&gt; '+show_more_links[index].retrieve('his_link_txt');
		}
		// CHECK TOGGLE FAMS
		toggle_families.each(function(toggle_fam) {
			if(show_more_link.hasClass(toggle_fam)) {
				show_more_link.store('his_fam', toggle_fam);
			}
		});
		// zit in content slider ?
		show_more_link.store('his_content_slider', show_more_links[index].getParent('div.items_slider'));
		
		////// TOGGLE CLICK EVENT
		show_more_link.addEvent('click', function() {
			var his_div = this.retrieve('his_show_more');
			if(his_div.getStyle('display')=='none') {
				his_div.setStyle('display', 'block');
				this.addClass('toggled_open');
				if(this.retrieve('is_faq_toggle')==true) {
					this.innerHTML = 'v '+this.retrieve('his_link_txt');
				}
				toggle_fam(this);
			} else {
				his_div.setStyle('display', 'none');		
				this.removeClass('toggled_open');
				if(this.retrieve('is_faq_toggle')==true) {
					this.innerHTML = '&gt; '+this.retrieve('his_link_txt');
				}
			}
			if(this.retrieve('his_content_slider')!=null) {
				update_slider_height(this.retrieve('his_content_slider'));
			}
			return false;
		});
		
	});
}

function toggle_fam(link) {
	var his_fam_members = $$('.'+link.retrieve('his_fam'));
	var cur_his_show_more = link.retrieve('his_show_more');
	his_fam_members.each(function(toggle_link, index) {
		if(toggle_link.retrieve('his_show_more')!=cur_his_show_more) {
			var his_show_more = toggle_link.retrieve('his_show_more');
			his_show_more.setStyle('display', 'none');
			toggle_link.removeClass('toggled_open');
			if(toggle_link.retrieve('is_faq_toggle')==true) {
				toggle_link.innerHTML = '&gt; '+toggle_link.retrieve('his_link_txt');
			}
		}
	});
	// alert('fam: '+link.retrieve('his_fam')+' | his_fam_members: '+his_fam_members.length);
}

var content_slider_elements = [];
var content_sliders = [];
function make_content_sliders() {
	if($$('div.items_slider').length>0) {
		var items_sliders = $$('div.items_slider');
		items_sliders.each(function(item_slider, index) {
				var page_content_slider = new content_slider({
						slide_holder: item_slider,
						slide_per_item: true
				});
				content_slider_elements[index] = item_slider;
				content_sliders[index] = page_content_slider;
		});
	}
}
function update_slider_height(slider_element) {
	var his_slider_object = content_sliders[content_slider_elements.indexOf(slider_element)];
	his_slider_object.reset_slider_height();
}

function make_img_galleries() {
	if($$('.pic_gallery').length>0) {
		var pic_galleries = $$('.pic_gallery');
		pic_galleries.each(function(pic_gallery) {
			var gal_data = pic_gallery.id.split('-');
			var gal_type = gal_data[0];
			var gal_id = gal_data[1];
			var this_set_image_dimensions = false;
			if(gal_type=='page_gal') {
				if(pic_gallery.hasClass('page_content_gallery')==true) {
					gal_images = page_galleries[gal_id].large_images;		
				} else {
					gal_images = page_galleries[gal_id].thumbnails;
				}
				gal_captions = page_galleries[gal_id].captions;
			} else if(gal_type=='object_gal') {
				if(pic_gallery.hasClass('project_gallery')==true) {
					gal_images = object_galleries[gal_id].large_images;
				} else if(pic_gallery.hasClass('horizontal_slides')==true) {
					gal_images = object_galleries[gal_id].thumbs_horizontal;
				} else {
					gal_images = object_galleries[gal_id].thumbnails;
				}
				this_set_image_dimensions = true;
				gal_captions = object_galleries[gal_id].captions;
			}	
			var this_show_captions = true;
			if(pic_gallery.hasClass('no_caption')) { this_show_captions = false; }
				var another_image_gallery = new img_gallery({
						gallery_holder: pic_gallery,
						gallery_images: gal_images,
						gallery_captions: gal_captions,
						show_captions: this_show_captions,
						set_image_dimensions: this_set_image_dimensions
				});
		});
	}
}

function get_video_iframe_code(type, video_id, vid_w, vid_h) {
	var iframe_code;
	if(type=='youtube') {
		iframe_code = '<iframe src="http://www.youtube.com/embed/'+video_id+'" width="'+vid_w+'" height="'+vid_h+'" frameborder="0"></iframe>';
	} else if(type=='vimeo') {
		iframe_code = '<iframe src="http://player.vimeo.com/video/'+video_id+'" width="'+vid_w+'" height="'+vid_h+'" frameborder="0"></iframe>';
	}
	return iframe_code;	
}


function set_google_map(map_element) {
	var geocoder;
	var map;
	
	var default_lat = 52.224979;
	var default_long = 5.622372;
	var infowindow;
	
	function initialize() {
		geocoder = new google.maps.Geocoder();
		var latlng = new google.maps.LatLng(default_lat, default_long);
		var myOptions = {
			zoom: 9,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		}
		map = new google.maps.Map(map_element, myOptions);
	}
	initialize();



	map_locations.each(function(map_location) {
		geocoder.geocode( { 'address': map_location}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				// map.setCenter(results[0].geometry.location);
				var marker = new google.maps.Marker({
						map: map, 
						position: results[0].geometry.location
				});
				var info_window_header = '<strong>FAME</strong><br />';
				var infowindow = new google.maps.InfoWindow({
					content: info_window_header+map_location
				});
				google.maps.event.addListener(marker, 'click', function() {
					infowindow.open(map,marker);
				});				
			} else {
				alert("Geocode was not successful for the following reason: " + status);
			}
		});
	});
	
	function codeAddress() {
		var address = document.getElementById("address").value;
		geocoder.geocode( { 'address': address}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				map.setCenter(results[0].geometry.location);
				var marker = new google.maps.Marker({
						map: map, 
						position: results[0].geometry.location
				});
			} else {
				alert("Geocode was not successful for the following reason: " + status);
			}
		});
	}
}
/* ///////// PUSH QUICK LINKS TO BOTTOM ///////// */
function push_quicklinks_down() {
	if(typeof cur_page_size=='undefined') {
		cur_page_size = get_page_size();
	}
	if(cur_page_size.page_h<=cur_page_size.window_h) {
		var header_padding = 60;
		var ql_div_h = 190;
		var content_holder_div = $('content_holder');
		var content_dims = content_holder_div.getSize();
		var content_height = content_dims.y;
		// alert('content_height: '+content_height+' | window h: '+cur_page_size.window_h+' | cur_page_size.page_h: '+cur_page_size.page_h)
		content_holder_div.setStyle('height', cur_page_size.page_h - ql_div_h - header_padding);
	}
}

/* ////////////// DEFAULT VALUES UIT INPUTS HALEN ON FOCUS ///////////// */
function activate_auto_fillers() {
	var set_inputs = $$('input.autofill');
	set_inputs.each(function(input_field, index) {
		input_field.his_set_value = input_field.value;
		input_field.addEvent('focus', function() {
			if(input_field.value==input_field.his_set_value) {
				input_field.value='';
			}
		});
		input_field.addEvent('blur', function() {
			if(input_field.value=='') {
				input_field.value=input_field.his_set_value;
			}
		});
	});
}

function get_page_size(){
	var scroll_position = window.getScroll();
	scroll_x = scroll_position.x;
	scroll_y = scroll_position.y;

	var body_size =	$(document.body).getScrollSize();
	body_w = body_size.x;
	body_h = body_size.y;
	
	var window_size = window.getSize();
	window_w = window_size.x;
	window_h = window_size.y;
	
	// for small pages with total height less then height of the viewport
	if(body_h < window_h){
		page_h = window_h;
	} else { 
		page_h = body_h;
	}

	// for small pages with total width less then width of the viewport
	if(scroll_x < window_w){	
		page_w = window_w;
	} else {
		page_w = body_w;
	}
	var page_size_object = new Object();
	page_size_object.page_w = page_w;
	page_size_object.page_h = page_h;
	page_size_object.window_w = window_w;
	page_size_object.window_h = window_h;
	return page_size_object;
}
function check_modal_links() {
	var modal_form_links = $$('a.modal_form');
	modal_form_links.addEvent('click', function() {
		show_form_modal(this);
		return false;
	});
}
function show_form_modal(the_link) {
	// LINK DATA
	var link_data = return_string_relevant_info(the_link.href);
	var form_type = link_data[0];
	var extra_query_string='';
	if(link_data.length>2) {
		// #bestel_publicatie-54 
		var item_id = link_data[1];
		var ref_url = unescape(link_data[2]);
		extra_query_string = '&id='+item_id;
	} else {
		// #buy_multiple_contact
		var ref_url = unescape(link_data[1]);
	}
	// SHOW LOADER
	link_insert_loader(the_link);
	// INSERT MODAL HOLDING HTML
	insert_modal_html();
	// MODAL ID
	modal_to_show = 'form_modal';
	// LOAD FILE
	var load_file = '_inc/_content_readers/load_ajax.inc.php?part='+form_type+'&modal_id='+modal_to_show+'&ref_url='+ref_url+extra_query_string;
	// MAKE ZE CALL
	sendRequest(load_file, handle_form_request);
}

function return_string_relevant_info(the_link) {
	var full_href_string = the_link.toString();
	var string_length = full_href_string.length;
	var bracket_index = full_href_string.indexOf("#");
	var relevant_info = full_href_string.substring((bracket_index+1), string_length);
	var relevant_info_array = relevant_info.split('-');
	// REF URL: 
	var ref_url = full_href_string.substring(0, bracket_index);
	relevant_info_array.push(ref_url); 
	return relevant_info_array;
}


var modal_to_show = '';
var modal_pic_height=0;
var image_to_enlarge;

function insert_modal_html() {
	// INSERT HTML AT TOP OF PAGE
	var body_tag = document.getElementsByTagName("body").item(0);
	// -- MODAL
	var page_modal = document.createElement("div");
	page_modal.setAttribute('id','modal_holder');
	body_tag.insertBefore(page_modal, body_tag.firstChild);
	// -- OVERLAY
	var overlay_div = document.createElement("div");
	overlay_div.setAttribute('id','overlay');
	body_tag.insertBefore(overlay_div, page_modal.nextSibling);
}

/* -----------------------------------------------------
	SHOW LOADING FUNCTIONS
 -----------------------------------------------------*/
var active_loading_link;
var active_loading_link_html;
var ajax_loader_html = ' <img src="_img/ajax_loader.gif" alt="Loading..." border="0" />';

function link_insert_loader(the_link) {
	active_loading_link = the_link;
	active_loading_link_html = the_link.innerHTML;
	the_link.innerHTML = active_loading_link_html + ajax_loader_html;
}
function hide_inserted_loader() {
	if((active_loading_link!='') && (active_loading_link!=null)) {
		active_loading_link.innerHTML = active_loading_link_html;
	} 
}
/* -----------------------------------------------------
	INSTANT EDIT CALLBACK FUNCTIONS
 -----------------------------------------------------*/

function handle_form_request(req) {
	var html_to_show = req.responseText;
	var container = document.getElementById('modal_holder');
	container.innerHTML = html_to_show;
	hide_inserted_loader();
	launch_modal(modal_to_show);
}

function show_overlay(overlay_height_int) {
	var overlay_height = overlay_height_int + 'px';
	overlay_div.setStyle('height', overlay_height);
	overlay_div.setStyle('display', 'block');
	overlay_div.setStyle('opacity', '0');
	overlay_div.fade(0, 1);
}
/* -----------------------------------------------------
	LAUNCH MODAL
 -----------------------------------------------------*/

function launch_modal(modal_to_display) {

	cur_page_size=get_page_size();

	var target_modal_div = $(modal_to_display);
	// ZET OP ZICHTBAAR
	target_modal_div.setStyle('opacity', '0');
	target_modal_div.style.display = "block";
	//  MODAL DIMENSIONS
	var modal_size = target_modal_div.getSize();
	var modal_div_w = modal_size.x;
	var modal_div_h = modal_size.y;
	
	var page_height = cur_page_size.page_h;
	var overlay_height = page_height;
	if(modal_div_h>page_height) {
		overlay_height = modal_div_h;
	}	
	// CENTER THE MODAL AND MAKE SURE LEFT AND TOP VALUES ARE NOT NEGATIVE
	var modal_div_x = Math.round(((cur_page_size.window_w - modal_div_w) / 2));
	var modal_div_y = Math.round(scroll_y + ((cur_page_size.window_h - modal_div_h) / 2));

	target_modal_div.style.top = (modal_div_y < 0) ? "0px" : modal_div_y + "px";
	target_modal_div.style.left = (modal_div_x < 0) ? "0px" : modal_div_x + "px";

 	// OVERLAY
	overlay_div = $('overlay');
	show_overlay(overlay_height);
	target_modal_div.fade(0, 1);
	
	// CLOSE BUSINESS
	var close_link = $('close_modal');
	if(close_link!=null) {
		close_link.onclick=function() {
			close_cur_modal();
		}
	}
	overlay_div.onclick=function() {
		close_cur_modal();
	}
}
var div_fader = new Fx;

function close_cur_modal() {
	if (document.getElementById) {
		// REMOVE THE DYNAMIC DIVS
		if ($(modal_to_show)) { 	
			var modal_to_show_to_del = $(modal_to_show);
			div_fader = new Fx.Tween(modal_to_show_to_del, { property: 'opacity', duration: 150 } ).start(1, 0);
		}
		if ($('overlay')) { 	
			var overlay = $('overlay');
			div_fader = new Fx.Tween(overlay, { property: 'opacity', duration: 150 } ).start(1, 0).chain(
				function() {  
				  	document.body.removeChild(overlay);
			  		var modal_holder = $('modal_holder');
				  	document.body.removeChild(modal_holder);
				}
			);
		}
	}
}
function start_key_functions() {
 	document.onkeydown = check_key;
}
function check_key(event) {
	// IE hack
	if (window.event) { event = window.event; }
	var keycode = event.keyCode;
	var escapeKey;
	if (event.DOM_VK_ESCAPE) {  // mozilla
		escapeKey = event.DOM_VK_ESCAPE;
	} else { // ie
		escapeKey = 27;
	}
	var key = String.fromCharCode(keycode).toLowerCase();
	if (keycode == escapeKey){ // close lightbox
			close_cur_modal();
	}
}
start_key_functions();

/* -----------------------------------------------------
	XMLHTTP Functions
	As found on Quirksmode. You hero.
 -----------------------------------------------------*/

function sendRequest(url,callback,postData) {
	var req = createXMLHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData)
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
		//	alert('HTTP error ' + req.status);
			return;
		}
		callback(req);
	}
	if (req.readyState == 4) return;
	req.send(postData);
}

function XMLHttpFactories() {
	return [
		function () {return new XMLHttpRequest()},
		function () {return new ActiveXObject("Msxml2.XMLHTTP")},
		function () {return new ActiveXObject("Msxml3.XMLHTTP")},
		function () {return new ActiveXObject("Microsoft.XMLHTTP")}
	];
}

function createXMLHTTPObject() {
	var xmlhttp = false;
	var factories = XMLHttpFactories();
	for (var i=0;i<factories.length;i++) {
		try {
			xmlhttp = factories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}
/* ////////////// VALIDATE ///////////// */
function validate_order(theform) {
	if(!default_check(theform.person_name)) { return false; }
	if(!default_check(theform.person_first_name)) { return false; }
	if(!default_check(theform.person_address)) { return false; }
	if(!default_check(theform.person_postcode)) { return false; }
	if(!default_check(theform.person_city)) { return false; }
	if(!default_check(theform.person_email)) { return false; }
	if (echeck(theform.person_email.value)==false){
		theform.person_email.focus()
		return false;
	}
	return true;
}

function default_check(input) {
	if(input!=undefined) {
		if ((input.value==null)||(input.value=="")){
    		input.style.borderColor="#ff0000";
			input.focus();
			return false;
		} else {
	    	input.style.borderColor='#CCCCCC';
    	    return true;
		}
	} else {
		return true;
	}
}

function echeck(str) {

	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   alert("Please fill out a valid email address")
	   return false
	}
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   alert("Please fill out a valid email address")
	   return false
	}	
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		alert("Please fill out a valid email address")
		return false
	}	
	if (str.indexOf(at,(lat+1))!=-1){
		alert("Please fill out a valid email address")
		return false
	}
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		alert("Please fill out a valid email address")
		return false
	}
	if (str.indexOf(dot,(lat+2))==-1){
		alert("Please fill out a valid email address")
		return false
	}
	if (str.indexOf(" ")!=-1){
		alert("Please fill out a valid email address")
		return false
	}
	return true;
}

/* ////////////// OUTPUT DIV ///////////// */
var op_i=0;
var output_div_available;
var output_div;
function output(string) {
	if(output_div_available==undefined) {
		if($('output')!=null) {
			output_div_available=true;
			output_div = $('output');
		} else {
			output_div_available=false;		
		}
	}
	if(output_div_available==true) {
		var cur_content = output_div.innerHTML;
		output_div.innerHTML = cur_content+'<br />'+string;
	}
	return false;
}

function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "	";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

///////////////////////////////////////////////////////////////////
////// INTERNET EXPLORER 6 FAAAIL GEDRAG CORRIGEREN FFS... ////////
///////////////////////////////////////////////////////////////////
function trigger_ie_object_links() {
	var project_links = $$('a.project_link');
	project_links.addEvent('click', function() {
		document.location = this.href;
		// return false;
	});
}
////// SHUFFLE ARRAY
Array.implement({
  shuffle: function() {
    //destination array
    for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);
    return this;
  }
});

