var sliding = scroller = timeouts = intervals = [];
var sliding_interval = 0;
var home_elements = ['what_we_do', 'where_we_do_it', 'who_we_do_it_for'];
var active_month;
var ajax_ready = true;
var fading, moving, play_interval, start_timeout, closing, quoting, quote_showing = false;
var ie6 = false;
var check_body_heights_interval;
var _content_height = 0;
var _body_height = 0;

//document.onmouseup   = mouse_up;

//Create a boolean variable to check for a valid Internet Explorer instance.
var xmlhttp = false;
//Check if we are using IE.
try
{
	//If the Javascript version is greater than 5.
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
	//If not, then use the older active x object.
	try
	{
		//If we are using Internet Explorer.
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (E)
	{
		//Else we must be using a non-IE browser.
		xmlhttp = false;
	}
}

if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
{
	xmlhttp = new XMLHttpRequest();
}

function make_request(server_page, obj_id, append)
{
	if (!append) append = false;
	if (!ajax_ready)
	{
		if (!ajax_timer) ajax_timer = time();
		else if (ajax_timer - time() > 5000)
		{
			ajax_ready = true;
			ajax_timer = 0;
		}
		setTimeout('make_request("'+server_page+'", "'+obj_id+'")', 100);
	}
	else
	{
		if (server_page.indexOf('?') > -1) server_page = server_page+"&"+time();
		else server_page = server_page+"?"+time();
		ajax_ready = false;
		xmlhttp.open("GET", server_page);
		xmlhttp.onreadystatechange = function()
		{
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
			{
				var content = xmlhttp.responseText;
				if (null != $(obj_id))
				{
					if (append) $(obj_id).innerHTML += content;
					else $(obj_id).innerHTML = content;

					var ajaxScript = $(obj_id).getElementsByTagName("script");
					if(ajaxScript.length)
					{
						for (x = 0;x < ajaxScript.length; x++)
						eval(ajaxScript[x].innerHTML);
					}
				}

				xmlhttp.onreadystatechange = function(){};
				ajax_ready = true;
			}
		}
		xmlhttp.send(null);
	}
}

function $(obj_id)
{
	return document.getElementById(obj_id);
}

function time()
{
	var d = new Date();
	return d.getTime();
}

function slide(obj, amount)
{
	if (sliding[obj]) clearInterval(sliding[obj].interval);
	sliding[obj] = {};
	sliding[obj].obj = $(obj);
	var inner = sliding[obj].obj.getElementsByTagName('DIV');
	sliding[obj].desired_height = inner[0].offsetHeight;
	if (amount) sliding[obj].change = amount;

	if (browser.client == 'Internet Explorer' && browser.version < 7)
	{
		if (amount > 0) sliding[obj].obj.style.height = sliding[obj].desired_height + 'px';
		else sliding[obj].obj.style.height = '0px';
		return false;
	}
/*	else
	{
		debug(0, sliding[obj].obj.offsetHeight);
		debug(1, sliding[obj].desired_height);
		if (sliding[obj].obj.offsetHeight == sliding[obj].desired_height) sliding[obj].change = -15;
		else sliding[obj].change = 15;
	}*/

	if (!sliding_interval) intervals[intervals.length] = sliding_interval = setInterval("do_slide()", (browser.client == 'FireFox' ? 60 : 30));
	return false;
}

function do_slide()
{
	var stop_sliding = true;
	for(var ele in home_elements)
	{
		if (sliding[home_elements[ele]+'_holder']) stop_sliding = false;
	}

	if (stop_sliding)
	{
		clearInterval(sliding_interval);
		sliding_interval = 0;
		return false;
	}

	for(var ele in home_elements)
	{
		var obj = home_elements[ele]+'_holder';
		if (sliding[obj])
		{
			var slider_height = sliding[obj].obj.offsetHeight;

			var percent_moved = slider_height / sliding[obj].desired_height;
			var ease = (Math.sin(percent_moved * 3.14159265));
			var change = Math.round(sliding[obj].change * ease);

			if (change > -1 && change <= 0 && sliding[obj].change < 0) change = -5;
			else if (change >= 0 && change < 1 && sliding[obj].change > 0) change = 5;

			slider_height += change;
			if (slider_height >= sliding[obj].desired_height)
			{
				sliding[obj].obj.style.height = sliding[obj].desired_height+'px';
				sliding[obj] = false;
			}
			else if (slider_height <= 0)
			{
				sliding[obj].obj.style.height = '0px';
				sliding[obj] = false;
			}
			else
			{
				sliding[obj].obj.style.height = slider_height+'px';
			}
		}
	}
}

function toggle_home(home_element)
{
	for(var ele in home_elements)
	{
		if (home_elements[ele] != home_element)
		{
			slide(home_elements[ele]+'_holder', (browser.client == 'FireFox' ? -80 : -40));
			$(home_elements[ele]+'_title').className = 'toggle';
		}
		else
		{
			slide(home_elements[ele]+'_holder', (browser.client == 'FireFox' ? 80 : 40));
			$(home_elements[ele]+'_title').className = 'toggle toggle_act';
		}
	}
}

function debug(debug_id,debug_var)
{
	if (!(debug_element = document.getElementById('debug_'+debug_id)))
	{
		var debug_element = document.createElement("div");
		debug_element.style.position = "fixed";
		debug_element.style.right="10px";
		debug_element.style.height="15px";
		debug_element.style.backgroundColor="#E0E0E0";
		debug_element.style.font="13px/17px verdana";
		debug_element.id = "debug_"+debug_id;
		debug_element.style.bottom = 10+(debug_id*20)+"px";
		document.body.appendChild(debug_element);
	}
	debug_element.innerHTML = debug_var;
}

function position_events_info(position_class,column,row)
{
	_events_info_bg = $('events_info_bg');
	_events_info_content = $('events_info_content');

	class_name = position_class;
	if(column) class_name += '_column_' + column;
	if(row) class_name += '_row_1';
	_events_info_bg.className = class_name;
	_events_info_content.className = class_name;
	_events_info_bg.style.opacity = 0;
    _events_info_bg.style.filter = "alpha(opacity=0)";
	_events_info_bg.style.display = 'block';

	//_events_info_content.style.top = _events_info_bg.offsetTop + 'px';
	//_events_info_content.style.left = _events_info_bg.offsetLeft + 'px';
	opacity(_events_info_bg.id, 0, 94, 500);
	show(_events_info_content.id);
	//_events_info_content.style.display = 'block';
}

function activate_month(pos, month)
{
	clear_all_timeouts();
	_events_info_bg = $('events_info_bg');
	_events_info_content = $('events_info_content');
	if(active_month) $('month_' + active_month).className = $('month_' + active_month).className.replace('month_act','');
	if(active_month == pos)
	{
		deactivate_months();
	}
	else
	{
		_events_info_content.innerHTML = events_info_close_text;
		_events_info_content.innerHTML += $('month_holder_' + month).innerHTML;
		//if(_events_info_content.offsetHeight < 185) $('events_info_bg').style.height = '185px';
		$('month_' + pos).className += ' month_act';
		info_position = info_positions[pos];
		position_events_info(info_position.pos,info_position.col,info_position.row);
		active_month = pos;
	}
}

function deactivate_months()
{
	if(active_month) $('month_' + active_month).className = $('month_' + active_month).className.replace('month_act','');
	opacity('events_info_bg', 94, 0, 500);
	hide('events_info_content');
	active_month = null;
}

function check_body_heights()
{
	if (_body_height == document.body.offsetHeight && _content_height == $('main_left_inner').offsetHeight) return false;
	document.body.style.height = '100%';
	_body_height = document.body.offsetHeight;
	_content_height = $('main_left_inner').offsetHeight;
	var _nav_height = $('main_right_inner').offsetHeight + $('main_right_inner').offsetTop;

	var _total_height = _content_height > _nav_height ? _content_height : _nav_height;

	var height = _total_height > _body_height ? _total_height : _body_height;

	document.body.style.height = height + 'px';
	$('main_left').style.height = height + 'px';
	$('main_right').style.height = height + 'px';

	if ($('home_bar')) $('home_bar').style.display = 'block';
	$('footer').style.display = 'block';

	if(ie6) clearInterval(check_body_heights_interval);
}

function select_nature(which,value)
{
	for(i = 1; i < 4; i++) $('nature_' + i).className = 'checkbox';
	$('nature_' + which).className = 'checkbox checkbox_on';
	$('c_nature').value = value;
}

function opacity(id, opacStart, opacEnd, duration, after_finish)
{
	var speed = browser.client == 'Internet Explorer' ? 45 : 30;
	var step = (opacEnd - opacStart) / (duration / speed);
    //speed for each frame
    var timer = 0;
	var opac = opacStart;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) dir = "down";
	else dir = "up";

	changeOpac(opac, id, dir);

	for(var timer = speed; timer <= duration; timer+=speed)
	{
		opac += step;
		timeouts[timeouts.length] = setTimeout("changeOpac(" + Math.round(opac) + ",'" + id + "','" + dir + "')",timer);
	}

	if (timer != duration)
	{
		timeouts[timeouts.length] = setTimeout("changeOpac(" + opacEnd + ",'" + id + "','" + dir + "')",duration);
	}

	if(after_finish) timeouts[timeouts.length] = setTimeout(after_finish,duration);
}

//change the opacity for different browsers
function changeOpac(opacity, id, dir)
{
	//if (!id || !$(id)) return false;
    var object = $(id).style;
	if(opacity == 0 && dir == "up")
	{
		if($(id).tagName == "TR") object.display = "";
		else object.display = "block";
	}
    object.opacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
	if(opacity == 0 && dir == "down") object.display = "none";
}

function hide(obj,after_finish)
{
	opacity(obj, 100, 0, 500, after_finish);
}

function show(obj)
{
	opacity(obj, 0, 100, 500);
}

function set_bg_pos(obj_id, pos)
{
	var obj = $(obj_id);
	obj.style.backgroundPosition = pos;
}

function slide_background(obj_id, direction, from, distance, duration)
{
	fading = true;
    //speed for each frame
	var speed = 30;
	var pixels = distance / (duration / speed);
    var movement = from;
	var to = from + distance;
	var pos;

	if (browser.client == 'Internet Explorer' && browser.version < 7)
	{
		if (direction == 'vertical') pos = '-49px '+to+'px';
		else pos = to+'px -39px';

		set_bg_pos(obj_id, pos);
		fading = false;
		return false;
	}

	if (direction == 'vertical') pos = '-49px '+from+'px';
	else pos = from+'px -39px';

	set_bg_pos(obj_id, pos);

	for(var timer = speed; timer <= duration; timer+=speed)
	{
		movement += pixels;
		if (direction == 'vertical') pos = '-49px '+Math.round(movement)+'px';
		else pos = Math.round(movement)+'px -39px';
		timeouts[timeouts.length] = setTimeout("set_bg_pos('"+obj_id+"', '"+pos+"')",timer);
	}

	if (timer != duration)
	{
		if (direction == 'vertical') pos = '-49px '+to+'px';
		else pos = to+'px -39px';
		timeouts[timeouts.length] = setTimeout("set_bg_pos('"+obj_id+"', '"+pos+"')",duration);
	}
	timeouts[timeouts.length] = setTimeout("fading = false", duration);
}

function fade_what(obj_id)
{
	if (obj_id == '_next')
	{
		var temp = image_matrix[current_image];
		temp = temp[2];
		if (image_list[temp+1]) obj_id = image_list[temp+1];
		else obj_id = image_list[0];
	}
	else if (obj_id == '_prev')
	{
		var temp = image_matrix[current_image];
		temp = temp[2];
		if (image_list[temp-1]) obj_id = image_list[temp-1];
		else obj_id = image_list[image_list.length-1];
	}
	if (current_image == obj_id || fading) return false;
	var old_pos = image_matrix[current_image];
	var new_pos = image_matrix[obj_id];
	var direction, current_from, new_from, distance;

	if (new_pos[1] != old_pos[1])
	{
		direction = 'vertical';
		current_from = -39;
		distance = old_pos[1] > new_pos[1] ? -39 : 39;
	}
	else
	{
		direction = 'horizontal';
		current_from = -49;
		distance = old_pos[0] > new_pos[0] ? -49 : 49;
	}

	new_from =current_from - distance;

	slide_background('letter_'+current_image, direction, current_from, distance, 500);
	opacity('image_'+current_image, 100, 0, 500);

	timeouts[timeouts.length] = setTimeout(function(){slide_background('letter_'+obj_id, direction, new_from, distance, 500);}, 500);
	timeouts[timeouts.length] = setTimeout(function(){opacity('image_'+obj_id, 0, 100, 500);}, 500);
	current_image = obj_id;
}

function play_what()
{
	fade_what('_next');
	intervals[intervals.length] = play_interval = setInterval("fade_what('_next')", play_speed * 1000);
	$('play').className = 'pause';
}

function choose_what(obj_id)
{
	if (start_timeout)
	{
		clearTimeout(start_timeout);
		start_timeout = false;
	}
	if (play_interval)
	{
		clearInterval(play_interval);
		play_interval = false;
		$('play').className = '';
	}
	else if (obj_id == '_play') play_what();
	if (obj_id != '_play') fade_what(obj_id);
	return false;
}

function mouse_coords(ev)
{
	if(ev.pageX || ev.pageY)
	{
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

function mouse_move(ev)
{
	ev = ev || window.event;

	var mouse_pos = mouse_coords(ev);

	mousex = mouse_pos.x;
	mousey = mouse_pos.y;

	if (scroller['obj'])
	{
		var new_anchor_top = mousey - scroller['track_pos'] - scroller['offset'];
		if (new_anchor_top < 0) new_anchor_top = 0;
		if (new_anchor_top > scroller['track'].offsetHeight-scroller['obj'].offsetHeight) new_anchor_top = scroller['track'].offsetHeight-scroller['obj'].offsetHeight;
		var percent = new_anchor_top / (scroller['track'].offsetHeight-scroller['obj'].offsetHeight);
		var total_height = scroller['inner'].offsetHeight - scroller['inner'].parentNode.offsetHeight;
		var new_inner_top = percent * total_height;
		scroller['obj'].style.top = new_anchor_top+'px';
		scroller['inner'].style.top = 0 - new_inner_top+'px';
	}
	return false;
}

function mouse_up()
{
	scroller = [];
	document.onmouseup = null;
	return false;
}

function set_scroller(obj, inner)
{
	document.onmouseup = mouse_up;
	scroller['obj'] = obj;
	scroller['offset'] = mousey - get_position(obj).y;
	scroller['track'] = obj.parentNode;
	scroller['track_pos'] = get_position(scroller['track']).y;
	scroller['start'] = obj.offsetTop;
	scroller['inner'] = $(inner);
	return false;
}

function get_position(e)
{
	var left = 0;
	var top  = 0;

	while (e.offsetParent)
	{
		left += e.offsetLeft - e.offsetParent.scrollLeft;
		top  += e.offsetTop - e.offsetParent.scrollTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function navigate_to(url_path)
{
	if (!url_path) url_path = '';
	clear_all_intervals();
	clear_all_timeouts();
	if (browser.client == 'Internet Explorer' && browser.version < 7)
	{
		window.location = path+url_path;
	}
	paths = url_path.split('/');
	if (paths.length > 1) top_url_path = paths[0];
	else top_url_path = url_path;
	if ($(top_url_path+'_nav_item') && location.href.indexOf(top_url_path) == -1)
	{
		close('nav_holder');

		close_interval = setInterval(function(){
			if (closing) return false;
			clearInterval(close_interval);
			if($('pinch'))
			{
				var nav_item = $(top_url_path+'_nav_item');
				var pinch_position = get_position($('pinch')).y;
				var new_position = get_position(nav_item).y;
				var nav_items = nav_item.parentNode.childNodes;
				for (var i in nav_items) if (nav_items[i].tagName == 'DIV' && nav_items[i].className.indexOf('act') != -1)
				{
					nav_items[i].className = nav_items[i].className.replace('act', '');
					nav_anchors = nav_items[i].getElementsByTagName('A');
					nav_anchors[0].className = nav_anchors[0].className.replace('_act', '');
				}

				nav_item.className += ' act';
				nav_anchors = nav_item.getElementsByTagName('A');
				nav_anchors[0].className += '_act';

				move('pinch', pinch_position, new_position, 1);
			}
			return false;
		}, 100);

		nav_interval = setInterval(function(){
			if (moving || closing || quoting) return false;
			clearInterval(nav_interval);
			hide('main_left_inner');
			hide_quote();
			setTimeout(function(){
				window.location = path+url_path;
			}, 500);
			return false;
		}, 100);
	}
	else
	{
		hide('main_left_inner');
		hide_quote();
		setTimeout(function(){
			window.location = path+url_path;
		}, 500);
	}
	return false;
}

function move(what, from, to, sinusoidal)
{
	if (moving)
	{
		for(var i in moving)
		{
			clearTimeout(moving[i]);
		}
	}
	moving = [];
    //speed for each frame
	var speed = 20;
	var pixels = 6;
	var timer = 0;
	var pos;

	var offset = get_position($(what).parentNode).y;
	to = to - offset;
	from = from - offset;

	if (from == to)
	{
		moving = false;
		return false;
	}

	if (browser.client == 'Internet Explorer' && browser.version < 7)
	{
		set_pos(what, false, to);
		moving = false;
		return false;
	}

	if (!sinusoidal)
	{
		if (from < to)
		{
			for(var movement = from; movement <= to; movement+=pixels)
			{
				timer+=speed;
				moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+movement+")",timer);
			}
			var sign = -1;
		}
		else
		{
			for(var movement = from; movement >= to; movement-=pixels)
			{
				timer+=speed;
				moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+movement+")",timer);
			}
			var sign = 1;
		}
	}
	else
	{
		var movement = from;
		if (from < to)
		{
			while(movement <= to)
			{
				var percent_moved = (movement - from) / (to - from);
				var ease = (Math.sin(percent_moved * 3.14159265));
				var change = pixels * ease;

				if (change < 1) change = 1;

				movement += change;

				timer+=speed;
				moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+Math.round(movement)+")",timer);
			}
			var sign = -1;
		}
		else
		{
			while(movement >= to)
			{
				var percent_moved = (movement - from) / (to - from);
				var ease = (Math.sin(percent_moved * 3.14159265));
				var change = pixels * ease;

				if (change < 1) change = 1;

				movement -= change;

				timer+=speed;
				moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+Math.round(movement)+")",timer);
			}
			var sign = 1;
		}
	}

	if (movement != to)
	{
		timer+=speed;
		moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+to+")",timer);
		movement = to;
	}
/*
	for(var bounce = pixels-1; bounce > 0; bounce--)
	{
		sign = sign == 1 ? -1 : 1;
		movement+=(bounce * sign);
		timer+=speed;
		moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+movement+")",timer);

		movement-=(bounce * sign);
		timer+=speed;
		moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+movement+")",timer);
	}

	timer+=speed;
	moving[moving.length] = setTimeout("set_pos('"+what+"', false, "+to+")",timer);
 */
	setTimeout("moving = false", timer);
	return false;
}

function set_pos(obj_id, x, y)
{
	if (x !== false) $(obj_id).style.left = x+'px';
	if (y !== false) $(obj_id).style.top = y+'px';
}

function clear_all_timeouts()
{
	if (timeouts) for (var i in timeouts) if (timeouts[i]) clearTimeout(timeouts[i]);
	timeouts = [];
}

function clear_all_intervals()
{
	if (intervals) for (var i in intervals) if (intervals[i]) clearInterval(intervals[i]);
	intervals = [];
}

function set_height(obj_id, height)
{
	$(obj_id).style.height = height+'px';
	return false;
}

function ease(from, to, current)
{
	var percent_moved = (current - from) / (to - from);
	return Math.sin(percent_moved * 3.14159265);
}

function close(what)
{
	if (!$(what)) return false;
	closing = true;
	var speed = 20;
	var pixels = 8;
	var timer = 0;
	var closed = 0;

	if (browser.client == 'Internet Explorer' && browser.version < 7)
	{
		set_height(what, closed);
		return false;
	}

	var inner = $(what).getElementsByTagName('DIV');
	var from = inner[0].offsetHeight;
	var height = from;

	while (height >= closed)
	{
		var change = pixels * ease(from, closed, height);

		if (change < 1) change = 1;

		height -= change;
		timer += speed;
		timeouts[timeouts.length] = setTimeout('set_height("'+what+'", '+Math.round(height)+')', timer);
	}

	if (height != closed)
	{
		timer += speed;
		timeouts[timeouts.length] = setTimeout('set_height("'+what+'", '+closed+')', timer);
	}

	timeouts[timeouts.length] = setTimeout('closing = false', timer);
	return false;
}

function open(what)
{
	if (!$(what))
	{
		show_quote();
		return false;
	}
	opening = true;
	var speed = 20;
	var pixels = 8;
	var timer = 0;
	var closed = 0;

	var inner = $(what).getElementsByTagName('DIV');
	var desired_height = inner[0].offsetHeight;

	if (browser.client == 'Internet Explorer' && browser.version < 7)
	{
		set_height(what, desired_height);
		return false;
	}

	var height = what.offsetHeight;

	while(height <= desired_height)
	{
		var change = pixels * ease(closed, desired_height, height);

		if (change < 1) change = 1;

		height += change;
		timer += speed;
		timeouts[timeouts.length] = setTimeout('set_height("'+what+'", '+Math.round(height)+')', timer);
	}

	if (height != desired_height)
	{
		timer += speed;
		timeouts[timeouts.length] = setTimeout('set_height("'+what+'", '+desired_height+')', timer);
	}

	timeouts[timeouts.length] = setTimeout('opening = false', timer);
	timeouts[timeouts.length] = setTimeout('show_quote();', timer);
	return false;
}

function find_swf(name)
{
	if (navigator.appName.indexOf("Microsoft")!= -1) return window[name];
	else return document[name];
}

function activate_dot(dot_id,url_path)
{
	map = $('interactive_map');
    if(map) map.activateDot(dot_id);
	else navigate_to(url_path);
}

function log()
{
    if(typeof(console) != 'undefined')
    {
        for(i = 0; i < arguments.length; i++)
        {
            console.log(arguments[i]);
        }
    }
}

function init(page)
{
	show('main_left_inner');
	open('nav_holder');
	switch(page)
	{
		case 'home':
			$('main_left_inner').style.height = $('home_bar').offsetTop - 44 + 'px';
			setTimeout("toggle_home('what_we_do');", 2500);
			break;
	}
	document.onmousemove = mouse_move;
}

function show_quote()
{
	if($('quote_area'))
	{
		if($('nav').offsetHeight < 270)
		{
			quote_showing = true;
			show('quote_area');
		}
	}
}

function hide_quote()
{
	if($('quote_area'))
	{
		if(quote_showing)
		{
			quoting = true;
			hide('quote_area','quoting = false;');
		}
	}
}
