/* PARTLY BASED ON: http://www.php-help.ro/examples/mootools1.2_image_zoom/ */

var image_zoom_viewport, image_zoom_holder, image_zoom_nav_col;
var zoomed_image, zoomed_image_src, z_img_w, z_img_h, z_img_ratio;
var image_viewport_w, image_viewport_h, image_viewport_ratio;
var nav_dir_UP, nav_dir_RIGHT, nav_dir_DOWN, nav_dir_LEFT;
var zoom_nav_Z_IN, zoom_nav_Z_OUT;
var cur_img_w, cur_img_h;
var img_max_w, img_max_h, img_min_w, img_min_h, holder_dims;
var image_loaded = false;
var zoom_scale = 1.5;
var thumb_dragger, thumb_image, thumb_w, thumb_h, thumb_to_big_ratio, zoom_percentage;
var EL_work_focus_hold;

var output_shit = false;
var check_init_position = true;

var elements_animated = false;
var content_loaded = false;
var first_content_loaded = true;
var page_dims;
var in_ie_hell = false;
var in_iHell = false;

var bg_tiles_w = 3300;
var bg_tiles_h = 2970;

window.addEvent('domready', function() {
	// PREVENT IE DEFAULT DRAG/DROP FUNCTIONALITY
	// CHECK BROWSER
	if(Browser.Engine.trident) {
		in_ie_hell=true;
		document.ondragstart = function () { return false; };
	}
	// IPAD & IPHONE FIXES
	if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
		in_iHell = true;
		// ALTER OVERFLOWING DIVS
		// iFixes();
	}
	page_dims = get_page_size();
	show_loader();
	init_image_zoomer();
	set_menu_draggage();
	set_menu_links();
	init_tips();
	/// init_sub_menu();
	trigger_links();
	trigger_work_focus_bits();
});

function init_image_zoomer() {

	// get elements
	image_zoom_viewport = $('image_zoom_viewport');
	// image_zoom_nav_col = $('image_zoom_nav_col');
	image_zoom_holder = $('zoomed_image_holder');
	
	
	/*
	zoomed_image = $('zoom_image');
	zoomed_image_src = zoomed_image.src;
	if(in_iHell==true) {
		zoomed_image_src = 'http://www.janskehombergen.nl/_img/JH_banen_transparent_SM.png';
		zoomed_image.src = zoomed_image_src;
	}
	*/
	thumb_dragger = $('thumb_part');
	thumb_dragger.addEvent('click', function() { return false; });
	thumb_image = $('zoom_image_thumb');
	thumb_w = thumb_image.width;
	thumb_h = thumb_image.height;
	// nav elements
	nav_dir_UP = $('zoom_nav_UP');
	nav_dir_UP.addEvent('click', function() { move_vertical(image_zoom_holder, 'up'); return false; });
	nav_dir_RIGHT = $('zoom_nav_RIGHT');
	nav_dir_RIGHT.addEvent('click', function() { move_horizontal(image_zoom_holder, 'right'); return false; });
	nav_dir_DOWN = $('zoom_nav_DOWN');
	nav_dir_DOWN.addEvent('click', function() { move_vertical(image_zoom_holder, 'down'); return false;});
	nav_dir_LEFT = $('zoom_nav_LEFT');
	nav_dir_LEFT.addEvent('click', function() { move_horizontal(image_zoom_holder, 'left'); return false; });
	zoom_nav_Z_IN = $('zoom_nav_Z_IN');
	zoom_nav_Z_IN.addEvent('click', function() { zoom_image(image_zoom_holder, 'in'); return false; });
	zoom_nav_Z_OUT = $('zoom_nav_Z_OUT');
	zoom_nav_Z_OUT.addEvent('click', function() { zoom_image(image_zoom_holder, 'out'); return false; });
	// CONTENT BITS
	EL_work_focus_hold = $('work_focus_hold');
	
	z_img_w = bg_tiles_w;
	z_img_h = bg_tiles_h;
	z_img_ratio = z_img_w / z_img_h;
	// set_image_dims();
	
	// SET VIEWPORT
	set_view_port();
	// ON RESIZE: VIEW PORT RESETTEN
	window.addEvent('resize', function() {
		if(in_iHell==false) {
			set_view_port();
			// set_image_dims();
		}
	});
	
	
	/*
	// LOAD IMAGE
	var zi_loader = new Image();
	zi_loader.onload=function() {
		z_img_w = zi_loader.width;
		z_img_h = zi_loader.height;
		z_img_ratio = z_img_w / z_img_h;
		// ENLARGE IMG FOR iFUCKS
		if(in_iHell==true) {
			z_img_w = 3 * z_img_w;
			z_img_h = 3 * z_img_h;
		}
	}
	zi_loader.src = zoomed_image_src;
	*/
}
function set_view_port() {
	// ZET HEM OP VOLLEDIGE BREEDTE -95PX;
	page_dims = get_page_size();
	var window_w = page_dims.window_w;
	var window_h = page_dims.window_h;
	// var col_width = image_zoom_nav_col.getStyle('width').toInt();
	image_viewport_w = window_w;// - col_width; 
	image_viewport_h = window_h; //image_zoom_viewport.getStyle('height').toInt();
	// output('window_w = '+window_w+' | window_h = '+window_h);
	// output('image_viewport_h = '+image_viewport_h+' | image_viewport_w = '+image_viewport_w);
	image_viewport_ratio = image_viewport_w / image_viewport_h;
	image_zoom_viewport.setStyles({
		width: image_viewport_w,
		height: image_viewport_h
	});
	set_image_dims();
}

function set_image_dims() {
	hide_loader();
	// output('vp ratio = '+image_viewport_ratio+' en img_ratio = '+z_img_ratio);
	// NAAR BREEDTE SCHALEN
	/*
	if(image_viewport_ratio>z_img_ratio) {
		// CHECK OF BEELD WEL GROTER IS DAN SCHERM TOELAAT
		if(z_img_w>image_viewport_w) {
			zoomed_image.width = image_viewport_w;
		} else {
			zoomed_image.width = z_img_w;
		}
		var just_height = Math.round(zoomed_image.width / z_img_ratio);
		zoomed_image.height = just_height;
	// NAAR HOOGTE SCHALEN
	} else {
		if(z_img_h>image_viewport_h) {
			zoomed_image.height = image_viewport_h;
		} else {
			zoomed_image.height = z_img_h;
		}
		zoomed_image.width = Math.round(zoomed_image.height * z_img_ratio);
	}
	*/
	// output('img w: '+zoomed_image.width+' en H: '+just_height+' init W: '+z_img_w+' init H: '+z_img_h);
	// IMG MIN & MAX ZOOM
	img_max_w=z_img_w;
	img_max_h=z_img_h;
	// NAAR BREEDTE SCHALEN
	if(image_viewport_ratio>z_img_ratio) {
		if(z_img_h>image_viewport_h) {
			img_min_h = image_viewport_h;
		} else {
			img_min_h = z_img_h;
		}
		img_min_w = Math.round(img_min_h * z_img_ratio);
	// NAAR HOOGTE SCHALEN
	} else {
		if(z_img_w>image_viewport_w) {
			img_min_w = image_viewport_w;
		} else {
			img_min_w = z_img_w;
		}
		img_min_h = Math.round(img_min_w / z_img_ratio);
	}
	//holder_dims = image_zoom_holder.getSize();
	cur_img_w = image_viewport_w;//holder_dims.x.toInt();
	cur_img_h = cur_img_w / z_img_ratio;
	// output('cur_img_w = '+cur_img_w+' | cur_img_h: '+cur_img_h +' z_img_ratio: '+z_img_ratio+' | image_viewport_w: '+image_viewport_w);
	
	image_zoom_holder.setStyles({
	    left: 0,
	    top: 0,
	    width: cur_img_w,
	    height: cur_img_h
	});

	drag_image = new Drag('zoomed_image_holder',{
		modifiers: {x:'left',y:'top'},
		grid:1,
		onDrag: function(element){
			var pos = element.getPosition('image_zoom_viewport');
			var left = pos.x;
			var top = pos.y;
			var new_positions = get_dragged_element_bounds(element, left, top);
			setPosition(element, new_positions[0], new_positions[1]);
			update_thumb_dragger();
		}
	});	
	update_thumb_dragger();
	thumb_dragger.makeDraggable({
		container: 'img_thumb_hold',
		onDrag: function(element){
			var th_drag_pos = element.getPosition('img_thumb_hold');
			var th_drag_left = th_drag_pos.x;
			var th_drag_top = th_drag_pos.y;
			thumb_to_big_ratio = cur_img_w / thumb_w;
			var new_big_left = -(th_drag_left*thumb_to_big_ratio);
			var new_big_top = -(th_drag_top*thumb_to_big_ratio);
			var new_pos = get_dragged_element_bounds(image_zoom_holder, new_big_left, new_big_top);
			setPosition(image_zoom_holder, new_pos[0], new_pos[1]);
		}
	});	
	update_text_size(cur_img_w / img_max_w);
	// INIT POSITION (AFHANKELIJK VAN PAGE URL)
	if(check_init_position==true) {
		if(document.body.id!='home') {
			var init_zoom_to_part = 'content_'+document.body.id;
			zoom_to_part(init_zoom_to_part);
		}
		check_init_position = false;
	}
}
function get_dragged_element_bounds(element, pos_x, pos_y) {
	if(	pos_x>0 || pos_y>0 || -pos_x > (-1*(image_viewport_w-cur_img_w)) || -pos_y > (-1*(image_viewport_w-cur_img_h))){
		// LEFT
		if ( -pos_x > (-1*(image_viewport_w-cur_img_w)) ) { 
			pos_x = image_viewport_w-cur_img_w; 
			if(output_shit==true) { output('out of RIGHT bounds | left:'+pos_x); }
		}
		// BOTTOM
		if( -pos_y > (-1*(image_viewport_h-cur_img_h))) { 
			pos_y = image_viewport_h-cur_img_h; 
			if(output_shit==true) { output('out of BOTTOM bounds | top:'+pos_y); }
		}
		// LEFT
		if(pos_x >= 0) { 
			pos_x = 0;  
			if(output_shit==true) { output('out of LEFT bounds | left:'+pos_x+' | img_w ='+cur_img_w); }
		}
		// TOP
		if(pos_y >= 0) { 
			pos_y = 0; 
			if(output_shit==true) { output('out of TOP bounds | top:'+pos_y+' | img_h ='+cur_img_h); }
		}
	}
	return Array(pos_x, pos_y);
}
function setPosition(element,left,top){
	if(output_shit==true) { output('left:'+left+' | top:'+top); }
	element.setStyles({
	    left: left,
	    top: top
	});
}
/* ======== DIRECTIONS ========= */
function move_vertical(element, direction) {
	animation_duration = 250;
	var pixels_dif = Math.round(0.75 *(image_viewport_h));
	// PAK CUR POSITION
	var image_pos = element.getPosition('image_zoom_viewport');
	var img_left = image_pos.x;
	var img_top = image_pos.y;
	// CHECK OF IE OMHOOG KAN
	if(direction=='up') {
		var new_top = img_top + pixels_dif;
	} else {
		var new_top = img_top - pixels_dif;
	}
	var new_positions = get_dragged_element_bounds(element, img_left, new_top);
	animate_element(element, img_top, new_positions[1], 'top', true);
	return false;
}
function move_horizontal(element, direction) {
	animation_duration = 250;
	var pixels_dif = Math.round(0.75 *(image_viewport_w));
	// PAK CUR POSITION
	var image_pos = element.getPosition('image_zoom_viewport');
	var img_left = image_pos.x;
	var img_top = image_pos.y;
	// CHECK OF IE OMHOOG KAN
	if(direction=='right') {
		var new_left = img_left - pixels_dif;
	} else {
		var new_left = img_left + pixels_dif;
	}
	var new_positions = get_dragged_element_bounds(element, new_left, img_top);
	animate_element(element, img_left, new_positions[0], 'left', true);
	return false;
}

var zoom_values = [660, 990, 1320, 1650, 1980, 2310, 2640, 2970, 3300];

function find_closest(img_w) {
	var closest_val;
	var closest_found = false;
	var prev_val = 660;
	zoom_values.each(function(zoom_value, index) {
		if((zoom_value>=img_w) && (closest_found==false)) {
			var test_val = zoom_value;
			var test_dif = zoom_value - img_w;
			if(
				(index>0) 
				&& 
				((img_w - prev_val) <= test_dif)
			) {
				closest_val = prev_val;
			} else {
				closest_val = zoom_value;
			}
			closest_found = true;
		}
		prev_val = zoom_value;
	});
	return closest_val;
}

function zoom_image(element, direction) {
	animation_duration = 250;
	var do_zoom=false;
	if(direction=='in') { if(cur_img_w!=img_max_w) { do_zoom = true; } else { update_text_size(); } }
	if(direction=='out') { if(cur_img_w!=img_min_w) { do_zoom = true; } }
	
	if(do_zoom==true) {
		// assign new size
		if(direction=='in') {
			// end stations
			new_img_w = Math.round(cur_img_w * zoom_scale);
			new_img_h = Math.round(cur_img_h * zoom_scale);
			// limit zoom
			if(new_img_w <= img_max_w && new_img_h < img_max_h) {
				cur_zoom_scale = zoom_scale;
				zoomed_img_w = new_img_w;
				zoomed_img_h = new_img_h;
			} else {
				cur_zoom_scale = cur_img_w / new_img_w;
				zoomed_img_w = img_max_w;
				zoomed_img_h = img_max_h;
			}
		} else {
			new_img_w = Math.round(cur_img_w / zoom_scale);
			new_img_h = Math.round(cur_img_h / zoom_scale);
			// limit zoom
			if(new_img_w >= img_min_w && new_img_h > img_min_h) {
				cur_zoom_scale = zoom_scale;
				zoomed_img_w = new_img_w;
				zoomed_img_h = new_img_h;
			} else {
				cur_zoom_scale = cur_img_w / new_img_w;
				zoomed_img_w = img_min_w;
				zoomed_img_h = img_min_h;
			}
		}
		// output('PRE zoomed_img_w: '+zoomed_img_w);
		zoomed_img_w= find_closest(zoomed_img_w);
		zoomed_img_h = zoomed_img_w / z_img_ratio;
		// output('zoomed_img_w: '+zoomed_img_w);
		//animate_element(zoomed_image, cur_img_w, zoomed_img_w, 'width', false);
		//animate_element(zoomed_image, cur_img_h, zoomed_img_h, 'height', false);
		animate_element(image_zoom_holder, cur_img_w, zoomed_img_w, 'width', false);
		animate_element(image_zoom_holder, cur_img_h, zoomed_img_h, 'height', false);
		
		cur_img_w = zoomed_img_w;
		cur_img_h = zoomed_img_h;
		
		// assign new position 
		var pos = image_zoom_holder.getPosition('image_zoom_viewport');
		if(direction=='in') {
			var new_left = pos.x; // Math.round(pos.x * cur_zoom_scale); => kan smoother, relatief tot het midden van wat je ziet...
			var new_top = pos.y; //Math.round(pos.y * cur_zoom_scale);
		} else {
			var new_left = Math.round(pos.x / cur_zoom_scale);
			var new_top = Math.round(pos.y / cur_zoom_scale);
		}
		var new_positions = get_dragged_element_bounds(image_zoom_holder, new_left, new_top);
		animate_element(image_zoom_holder, pos.x, new_positions[0], 'left', false);
		animate_element(image_zoom_holder, pos.y, new_positions[1], 'top', true);
	}
}
function update_thumb_dragger() {
	// 	WIDTH & HEIGHT
	var vis_part_w = image_viewport_w / cur_img_w;
		var drag_w = Math.round(vis_part_w * thumb_w) - 2;
		if(drag_w>thumb_w) { drag_w = thumb_w - 2; }
	var vis_part_h = image_viewport_h / cur_img_h;
		var drag_h = Math.round(vis_part_h * thumb_h) - 2;
		if(drag_h>thumb_h) { drag_h = thumb_h - 2; }
	
	// 	TOP AND LEFT
	var vis_part_left = image_zoom_holder.getStyle('left').toInt();
		if(vis_part_left!=0) {
			vis_part_left = vis_part_left / cur_img_w;
			var drag_left = -1*(Math.round(vis_part_left * thumb_w));
		} else {
			var drag_left = 0;
		}
		// output('drag_left = '+drag_left+'drag_w = '+drag_w+' en thumb_w ='+thumb_w);
	var vis_part_top = image_zoom_holder.getStyle('top').toInt();
		if(vis_part_top!=0) {
			vis_part_top = vis_part_top / cur_img_h;
			var drag_top = -1*(Math.round(vis_part_top * thumb_h));
		} else {
			var drag_top = 0;
		}
	
	thumb_dragger.setStyles({
		    width: drag_w,
		    height: drag_h,
		    top: drag_top,
		    left: drag_left
		});	
}
var animation_duration = 250;

function animate_element(element, cur_pos, end_pos, property, update_thumb_pos, proceed_to_next) {
	var cur_pos_st = cur_pos+'px';
	var end_pos_st = end_pos+'px';
	// if (undefined != proceed_to_next) { proceed_to_next = false; }

	if(typeof proceed_to_next=='undefined') { proceed_to_next = false; }
	// output('proceed_to_next : '+proceed_to_next);
	if(update_thumb_pos==true) {
		var nav_animator = new Fx.Tween(
				element, 
				{ property: property, duration: animation_duration, transition: Fx.Transitions.Quart.easeIn }
			).start(cur_pos_st, end_pos_st).chain( function() { 
				elements_animated = true;
				// output('elements_animated');
				if(content_loaded==true) {
					insert_content();
				} else if(first_content_loaded==false) {
					show_loader();
				}
				update_thumb_dragger();
				update_text_size();
			});
	} else {
		var nav_animator = new Fx.Tween(
			element, 
			{ property: property, duration: animation_duration, transition: Fx.Transitions.Quart.easeIn }
		)
		.start(cur_pos_st, end_pos_st).chain(function() {
			if(proceed_to_next==true) {
				move_to_part();
				//output('proceed_to_next!');
			}
			// alert('done')
		});	
	}
}
function update_text_size() {
	var percentage = image_zoom_holder.getStyle('width').toInt() / img_max_w;
	zoom_percentage = percentage;
	var font_percentage = Math.round(100* percentage);
	
	if((in_ie_hell==true) && (font_percentage>85)) { font_percentage = 100; }
	// output('font_percentage = '+font_percentage);
	var font_percentage_style = font_percentage+'%';
	line_height_percentage = (font_percentage+45)+'%';
	var opacity_val = font_percentage / 100;
	// output('opacity_val = '+opacity_val);
	///*
	$$('.site_text').setStyles({
		'font-size': font_percentage_style,
		'line-height': line_height_percentage,
		'opacity': opacity_val
	});
	if($('text_focus_scrolling')!=null) {
		var scrolling_div = $('text_focus_scrolling');
		if(opacity_val==1) {
			scrolling_div.setStyle('overflow-y', 'auto');
		} else {
			scrolling_div.setStyle('overflow-y', 'hidden');		
		}
	}
}
var site_menu_EL, image_zoom_nav_EL, img_thumb_hold_EL;
var drag_menu;
function set_menu_draggage() {
	site_menu_EL = $('site_menu');
	image_zoom_nav_EL = $('image_zoom_nav');
	img_thumb_hold_EL = $('img_thumb_hold');
	
	drag_menu = new Drag('site_menu',{ handle: $('drag_handle') });	
	drag_zoom_nav = new Drag('image_zoom_nav',{});	
}

var menu_links, h1_links;

function set_menu_links() {
	menu_links = $$('#site_menu a');
	menu_links.addEvent('click', function(event) {
		zoom_to_part(this.rel);
		instant_link_action(this);
		return false;		
	});
	// H1 LINKS
	h1_links = $$('h1.content_holder_h1 a');
	h1_links.addEvent('click', function(event) {
		zoom_to_part(this.rel);
		instant_link_action(this);
		return false;		
	});
}

function init_sub_menu() {
	/*
	var sub_menu_holders = $$('.sub_menu_holder');
	sub_menu_holders.each(function(sub_linker, index) {
		sub_linker.store('his_sub_menu', $(sub_linker.getProperty('rel')));
		sub_linker.addEvent('mouseover', function() {
			// output('sub: '+sub_linker.retrieve('his_sub_menu'));
			//sub_linker.retrieve('his_sub_menu').setStyle('display', 'block');
		});
		sub_linker.addEvent('mouseout', function() {
			// sub_linker.retrieve('his_sub_menu').setStyle('display', 'none');
		});
	});
	*/
}

var top_offset = 165;
var left_offset = 330;
var div_to_zoom_to, holder_position;

function zoom_to_part(part_id) {
	animation_duration = 450;
	
	elements_animated = false;
	
	if(part_id=='content_autonoom') {
		left_offset = 165;
	} else {
		left_offset = 330;
	}
	
	div_to_zoom_to = $(part_id);

	// HOLDER DIMS
	holder_position = image_zoom_holder.getCoordinates();
	var cur_holder_w = holder_position.width;
	var cur_holder_h = holder_position.height;
	var cur_holder_top = holder_position.top;
	var cur_holder_left = holder_position.left;

	// TARGET DIMS
	var part_position = div_to_zoom_to.getCoordinates(image_zoom_holder);
	var target_top = Math.round(part_position.top / zoom_percentage);
	var target_left = Math.round(part_position.left / zoom_percentage);
	var target_top = (-1 * target_top) + top_offset;
	var target_left = (-1 * target_left) + left_offset;

	// ZET NAAR VOLLE GROOTTE
	cur_img_w = img_max_w;
	cur_img_h =  img_max_h;

	// PAST HET ?
	var new_positions = get_dragged_element_bounds(image_zoom_holder, target_left, target_top);
	
	// ZOOM IN
	animate_element(image_zoom_holder, cur_holder_w, img_max_w, 'width', false);
	animate_element(image_zoom_holder, cur_holder_h, img_max_h, 'height', false);
	//animate_element(image_zoom_holder, pos.y, new_positions[1], 'top', true);

	// MOVE TO TOP LEFT
	animate_element(image_zoom_holder, cur_holder_top, new_positions[1], 'top', false);
	animate_element(image_zoom_holder, cur_holder_left, new_positions[0], 'left', true);
	
}
/*
function zoom_to_part(part_id) {
	animation_duration = 450;
	
	elements_animated = false;
	
	if(part_id=='content_autonoom') {
		left_offset = 165;
	} else {
		left_offset = 330;
	}

	div_to_zoom_to = $(part_id);
	// HOLDER DIMS
	holder_position = image_zoom_holder.getCoordinates();
	var cur_holder_w = holder_position.width;
	var cur_holder_h = holder_position.height;
	// ZET NAAR VOLLE GROOTTE
	cur_img_w = img_max_w;
	cur_img_h =  img_max_h;
	
	// ZOOM IN
	animate_element(image_zoom_holder, cur_holder_w, img_max_w, 'width', false);
	animate_element(image_zoom_holder, cur_holder_h, img_max_h, 'height', false, true);
}
function move_to_part() {
	// TARGET DIMS
	var part_position = div_to_zoom_to.getCoordinates(image_zoom_holder);
	var target_top = Math.round(part_position.top / zoom_percentage);
	var target_left = Math.round(part_position.left / zoom_percentage);
	var target_top = (-1 * target_top) + top_offset;
	var target_left = (-1 * target_left) + left_offset;
	// PAST HET ?
	var new_positions = get_dragged_element_bounds(image_zoom_holder, target_left, target_top);
	
	holder_position = image_zoom_holder.getCoordinates();
	var cur_holder_top = holder_position.top;
	var cur_holder_left = holder_position.left;
	
	// MOVE TO TOP LEFT
	animate_element(image_zoom_holder, cur_holder_top, new_positions[1], 'top', false);
	animate_element(image_zoom_holder, cur_holder_left, new_positions[0], 'left', true);
	//animate_element(image_zoom_holder, pos.y, new_positions[1], 'top', true);

}
*/
///////////////////////////////////////////////////////////////////////
///////////// GET WINDOW & PAGE-DIMS /////////////////////////////////
/////////////////////////////////////////////////////////////////////
var page_size_object;
var overlay_div;
var scroll_x, scroll_y, window_w, window_h;

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;
}
///////////////////////////////////////////////////////////////////////
///////////// HELP FUNCTIONS /////////////////////////////////
/////////////////////////////////////////////////////////////////////

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;
}
function output(string) {
	var output_div = $('output');
	var cur_content = output_div.innerHTML;
	output_div.innerHTML = cur_content+'<br />'+string;
}

