// Customize Prototype
var oldhide = Element.Methods.hide;
Element.Methods = Object.extend(Element.Methods, {
	hide: function(element) {
    if ($(element)) 
		return oldhide(element);
    return element;
  }
});
// Submit-on-enter behavior for textboxes
function genSubmitOnEnter(button) {
	return function(event) {
		if (event.keyCode == Event.KEY_RETURN) {
			Event.stop(event);
			button.click();
		}
	}
}
// Toggle-type functions
function genTextTogglerFunction(obj, btn, ar)
{
	if (!ar)
		ar = ['Show','Hide'];
	return function(){
		btn.value = btn.value == ar[0] ? ar[1] : ar[0];
		obj.toggle();
	};
}
function genAddRemoveClassFunction(className, add, remove)
{
	add = add instanceof Array ? add : [add];
	remove = remove instanceof Array ? remove : [remove];
	return function(){
		add.each(function(el){Element.addClassName(el,className);});
		remove.each(function(el){Element.removeClassName(el,className);});
	}
}
function genHideShowFunction(toHide, toShow)
{
	toHide = toHide instanceof Array ? toHide : [toHide];
	toShow = toShow instanceof Array ? toShow : [toShow];
	return function(){
		toHide.each(Element.hide);
		toShow.each(Element.show);
	}
}

// Toggle class work

function extendMenuTabTogglerClass(pageClass, currentDiv, linkSuffix, notHere)
{
	currentDiv = currentDiv ? currentDiv : 'currentDiv';
	linkSuffix = linkSuffix ? linkSuffix : 'Link';
	notHere = notHere ? notHere : 'notHere';
	Object.extend(pageClass, {
		subParts: null,
		handlers: {},
		_initialize: function()
			{
				pageClass.subParts = $$('.subPart');
				if ($(pageClass.subParts[0]))
				{
					if (!pageClass.subParts.any(function(div){return $(currentDiv).value==div.id;}))
						$(currentDiv).value = pageClass.subParts[0].id;
					pageClass.subPartLinkIds = pageClass.subParts.map(function(div){return div.id+linkSuffix;});
					pageClass.refresh(true);
				}
			},
		subPartLinkIds: null,
		showAll: function(){pageClass.subParts.each(Element.show);},
		refresh: function(observe)
			{
				pageClass.subParts.each(function(div){
					var linkid = div.id + linkSuffix; // TODO find better way to link links to subparts
					var classToggler = genAddRemoveClassFunction(notHere, pageClass.subPartLinkIds, linkid);
					var hideShow = genHideShowFunction(pageClass.subParts, div);
					if (div.id == $(currentDiv).value)
					{
						classToggler();
						hideShow();
					}
					if (observe)
					{
						$(linkid).observe('click', classToggler);
						$(linkid).observe('click', hideShow);
						var f = function(){$(currentDiv).value = div.id;};
						$(linkid).observe('click', f);
						pageClass.handlers[div.id] = $A([classToggler, hideShow, f]);
					}
				});
				if (location.hash) location.hash = location.hash;
			},
		fauxClick: function(divid)
			{
				pageClass.handlers[divid].each(function (f){f();});
				return true;
			}
	});
	// Hook everything up
	Event.observe(window, 'load', pageClass._initialize);
}