jQuery.fn.reverse = Array.prototype.reverse;

(function ($) {
// START

var menu_timer = false;

var MENU_DELAY = 700;
var ANIMATION_SPEED = 200;


function menu_over () {
	var 	me = $(this),
			parentNode = me.parent('li').eq(0),
			parents = me.parents('li');
	if (parentNode.hasClass('hovered')) {
		window.clearTimeout(menu_timer);
		return false;
	}
	hide_all_sibling_menus(me);
	clear_current_link();
	//console.log(parents, me);
	parents.addClass('hovered');
	var submenu = me.siblings('ul').eq(0);
//	submenu.slideDown(300);
	if (submenu.length) {
		submenu.fadeIn(ANIMATION_SPEED);
		parents.addClass('submenu_visible');
	}
};



function submenu_over () {
	window.clearTimeout(menu_timer);
};

function menu_out () {
	window.clearTimeout(menu_timer);
	menu_timer = window.setTimeout(function() {
		hide_all_menus();
		highlight_current_link();
	}, MENU_DELAY);
};

function hide_all_menus () {
	$('ul#nav li').removeClass('hovered').removeClass('submenu_visible');
	// $('#nav li ul').slideUp(300);
	$('ul#nav ul').fadeOut(ANIMATION_SPEED);
	window.clearTimeout(menu_timer);
};
function hide_all_sibling_menus (el) {
	el.parents('li').eq(0).siblings('li').removeClass('hovered').removeClass('submenu_visible');
	// $('#nav li ul').slideUp(300);
	el.parents('li').eq(0).siblings('li').find('ul').fadeOut(ANIMATION_SPEED);
	window.clearTimeout(menu_timer);
};

function highlight_current_link () {
	$('ul#nav>li>a').reverse().each(function() {
		var me = $(this);
		if (document.location.pathname.match(me.attr('href'))) {
			me.parent('li').eq(0).addClass('current');
		}
	});
};
function clear_current_link () {
	$('ul#nav>li>a').reverse().each(function() {
		$(this).parent('li').eq(0).removeClass('current');
	});
};

// DOM READY
$(function () {
	$('ul#nav li a').mouseover(menu_over).mouseout(menu_out);
	$('ul#nav li ul').mouseover(submenu_over).mouseout(menu_out).hide();
	
	//$('ul#nav>li>ul>li>a').mouseover(menu_over).mouseout(menu_out);
	//$('ul#nav>li>ul>li>ul').mouseover(submenu_over).mouseout(menu_out).hide();
	highlight_current_link();
	
	// add submenu pointers
	$('ul#nav li').each(function() {
		if ($(this).children('ul').length) {
			$(this).children('a').append($('<span>').text(' >').addClass('pointer'));
		}
	});
	
});



// FORM PROMPTS - uses title as a prompt, if element has the class "prompt"
var initPrompt = function(item) {
	if ($(item).attr('title') && !$(item).val() || $(item).attr('title') == $(item).val()) {
		$(item).val($(item).attr('title'));
		$(item).addClass('prompt');
		/* TODO fixme - cannot change type attribute in IE, need to recreate element
		if ($(item).attr('type') == 'password') {
			// if its a password, change type so the prompt is visible
			item.setAttribute('type', 'text');
			$(item).one('focus', function() {
				// change back on focus
				item.setAttribute('type', 'password');
			});
		}
		*/
		
		$(item).one('focus', function() {
			$(item).val('');
			$(item).removeClass('prompt');
		});
	}
	else {
		$(item).removeClass('prompt');
	}
};

$(function() {
	$('form input.prompt').each(function(i, item) {
		initPrompt(item);
		// reinstate the prompt if the user unfocuses without typing anything
		$(item).blur(function() {
			initPrompt(this);
		});
	});
});





$(function() {

	// Kill links to self
	$('a').each(function(i, item) {
		if (item.href == window.location) {
			$(item).addClass('current');
		}
	});

	// Add stars to required fields
	$('input.required, select.required, textarea.required').parent('li, tr').find('label, th').append("*").addClass('required');

	// fix checkboxes
	$('input[type=checkbox]').addClass('checkbox');

});





/* use title field in form inputs as a prompt for the field (for forms with class "titleprompt" */
$(function formPrompt(){
	$('form.titleprompt input, form input.titleprompt').each(function(i, item) {
		var input = $(item), promptRemoved = false, removePromptFunc;
		//console.log(item);
		if (input.attr("type") == "text" && input.attr("title") && !input.val()) {
			input.addClass("prompt");
			input.val(input.attr("title"));
			removePromptFunc = function(){
				//console.log(input.val(), input.attr("title"));
				if (!promptRemoved && input.val() == input.attr("title")){
					input.removeClass("prompt");
					input.val("");
					promptRemoved = true;
				}
			};
			//console.log(input);
			input.focus(removePromptFunc);
			//input.click(function(){alert("sd")});
			input.parents("form").submit(removePromptFunc);			
		}
	});
/*
	var input = ('input'), promptRemoved = false;
	if (!input.value){
		input.classList.add('prompt');
		input.value = prompt;
		var removePrompt = function(){
			if (!promptRemoved && input.value == prompt){
				input.classList.remove('prompt');
				input.value = '';
				promptRemoved = true;
			}
		};
		input.addEventListener('focus', removePrompt, 0);
		form.addEventListener('submit', removePrompt, 0);
	}
*/
	
});



// END
}) ($);
