var open_folder = new Image();
open_folder.src = '/images/open_folder.gif';
var close_folder = new Image();
close_folder.src = '/images/close_folder.gif';
function toggleFolder(mid, lnk) {
	var img = lnk.getElementsByTagName('img')[0];
	var folder_state = null;
	if( img.src.indexOf('close') == -1 ) {
		img.src = close_folder.src;
		if( $(mid) )
			Element.hide(mid);
		folder_state = 'close';
	} else {
		img.src = open_folder.src;
		if( $(mid) )
			Element.show(mid);
		folder_state = 'open';
	}
	new Ajax.Request('/ajax/sitemap.php', {
		parameters:	$H({
			action:		'folder_state',
			menu_id:		mid,
			state:		folder_state
		}).toQueryString()
	});
}

var onloads = new Array();
function doLoad() {
	for( var i=0; i<onloads.length; i++ ) {
		eval( onloads[i] );
	}
}

function appendLoad(code) {
	onloads.push( code );
}
(function(){
	var func = function() { doLoad(); }
	var oldonload = window.onload;
	window.onload = typeof window.onload != 'function' ?
		func : function() {oldonload();func();};
})();

String.prototype.startsWith = function(val) {
	return this.indexOf(val) == 0;
}

String.prototype.trim = function() {
	return this.replace(/^\s*|\s*$/g,'');
}

var sub_back = null;
var active_sub = null;
var active_submenu = null;
function init_menu() {
	Event.observe(document.body, 'mouseover', (function(event) {
		if( active_submenu && active_submenu.visible() ) return;
		var mainnav = $('mainnav');
		var dim = mainnav.getDimensions();
		var top = Position.cumulativeOffset(mainnav)[1];
		var right = Position.cumulativeOffset(mainnav)[0]+dim.width;
		var bottom = top + dim.height;
		var mousex = Event.pointerX(event);
		var mousey = Event.pointerY(event);

		if((mousex > right) || (mousey < top) || (mousey > bottom)) {
			hide_menus(event, true, true);
		}
	}).bindAsEventListener(document.body));
	$A($('mainnav').childNodes).reject(function(e) {
		return (e.nodeType == 3) || (e.tagName.toLowerCase() != 'li');
	}).each(function(e) {
		Event.observe(e, 'mouseover', (function(event) {
			if( document.getElementsByClassName('subnav', e).length == 0 )
				hide_menus(event, true, true, false);
			else
				show_menu(e, event);
		}).bindAsEventListener(e));
	});
	$$('#mainnav li ul').each(function(e) {
		Position.absolutize(e);
		e.setStyle({
			width: '105px',
			height: '',
			overflow: '',
			margin: '0px',
			padding: '0px',
			zIndex: 100
		});
		Event.observe(e, 'mouseout', hide_menus.bindAsEventListener(e));
	});

	var head_pos = Position.cumulativeOffset($('header_img'));
	var head_dim = $('header_img').getDimensions();
	sub_back = document.createElement('div');
	Element.hide(sub_back);
	$('header_img').parentNode.appendChild(sub_back);
	Position.absolutize(sub_back);
	Element.setStyle(sub_back, {
		top: head_pos[1]+'px',
		left: (head_pos[0]+head_dim.width-105)+'px',
		width: '105px',
		height: '210px',
		backgroundColor: '#fff',
		zIndex: 50
	});
	Element.setOpacity(sub_back, 0.80);

	if( $$('#mainnav ul .active').length > 0 ) {
		active_submenu = $$('#mainnav ul .active')[0].parentNode
		active_sub = active_submenu.parentNode;
		show_menu(active_sub, null, false);
	}
}
appendLoad('init_menu()');

function show_menu(element, event, hide_first) {
	if( typeof(hide_first) == 'undefined' ) hide_first = true;
	var submenu = document.getElementsByClassName('subnav', element)[0];
	if( !submenu ) return;
	if( submenu.visible() ) return;

	if( hide_first ) hide_menus(event, false, false, false);

	element.addClassName('hover');
	var head_dim = $('header_img').getDimensions();
	var sub_dim = submenu.getDimensions();
	var head_pos = Position.cumulativeOffset($('header_img'));

	var top = head_pos[1];
	var left = head_pos[0]+head_dim.width-105;

	// IE. Hack. Would love to know why this is needed
	if( document.all ) {
		top += 4;
		left += 4;
	}

	var bottom = top + head_dim.height;
	var preferred_top = Position.cumulativeOffset(element)[1];
	var sub_height = sub_dim.height > 209 ? 209 : sub_dim.height;

	submenu.setStyle({
		top: preferred_top + sub_height > bottom ?
			(bottom - sub_height+1)+'px' : (preferred_top+4)+'px',
		left: left+'px',
		height: sub_height+'px',
		overflow: 'hidden'
	});
	submenu.show();
	Element.setStyle(sub_back, {
		top: top+'px',
		left: left+'px'
	});
	Element.show(sub_back);
}

function hide_menus(event, hide_back, unconditional, show_default) {
	Position.prepare();
	if( typeof(hide_back) == 'undefined' )
		hide_back = true;
	if( typeof(unconditional) == 'undefined' )
		unconditional = false;
	if( typeof(show_default) == 'undefined' )
		show_default = true;
	$$('#mainnav li ul').each(function(e){
		if( !unconditional && e.visible() && Position.within(e,
			Event.pointerX(event), Event.pointerY(event)) ) {
			hide_back = false;
			show_default = false;
			throw $break;
		}
		e.hide();
		e.setStyle({
			height: '',
			oveflow: ''
		});
		e.parentNode.removeClassName('hover');
	});
	if( active_sub && show_default ) {
		show_menu(active_sub, event, false);
	} else if( hide_back ) {
		Element.hide(sub_back);
	}
}

function portfolio_swap_img(id, edit) {
	var suffix = edit ? '_box' : '_image';
	for( var i=1; i<=6; i++ ) {
		var img = $('img'+i+suffix);
		if( img )
			img.hide();
	}
	$('img'+id+suffix).show();
}

function init_map_markers() {
	var marker_height = 0;
	document.getElementsByClassName('marker').each(function(marker) {
		var key = marker.id.replace(/_marker\d+$/, '');
		var fld = $(key);
		var specs = fld.value ? fld.value.split('|') : ['x', ''];
		var marker_src = marker.getAttribute('src');
		if( fld.value && (marker_src.indexOf(specs[1]) == -1) )
			throw $continue;
		var map = $(key+'_map');

		var offset = Position.cumulativeOffset(map);
		var top;
		var left;
		if( fld.value ) {
			var dim = specs[0].split('x');
			top = (offset[1] + parseInt(dim[1])) + 'px';
			left = (offset[0] + parseInt(dim[0])) + 'px';
		} else {
			var dim = Element.getDimensions(map);
			top = (offset[1] + dim.height/2 + marker_height) + 'px';
			left = (offset[0] + dim.width + 10) + 'px';
			marker_height += Element.getDimensions(marker).height + 5
		}
		marker.style.top = top;
		marker.style.left = left;
		marker.show();
		new Draggable(marker);
		Droppables.add(map, {
			accept: 'marker',
			greedy: true,
			onDrop: function(drag, drop) {
				var moffset = Position.cumulativeOffset(drag);
				fld.value = (moffset[0]-offset[0])+'x'+
					(moffset[1]-offset[1])+'|'+
					drag.getAttribute('src');
			}
		});
		Droppables.add(document.body, {
			accept: 'marker',
			onDrop: function() {
				fld.value = "";
			}
		});
	});
}
appendLoad("init_map_markers()");

function init_overlay() {
	var offset = Position.cumulativeOffset($('portfolio_map'));
	$('map_overlay').style.top = offset[1]+'px';
	$('map_overlay').style.left = offset[0]+'px';
}