// FadeMenu
var FadeMenu = new Class({initialize: function fadeMenu(elem,options) {this.parentElem = $(elem);if($type(this.parentElem) != 'element') {throw new Error('invalid element or id passed as first argument');}this.options = new Abstract({fadeRecursive:true,fadeInSpeed:400,fadeOutSpeed:100,fadeOutDelay:200,ignoreClass:false});if($type(options) == 'object') {this.options.extend(options);}this.menuItems = this.parentElem.getChildren().filterByTag('li');for(var i=0; i<this.menuItems.length; i++) {var subMenu = this.menuItems[i].getElement('ul');if($type(subMenu) == 'element'&& !($defined(this.ignoreClass) && subMenu.className != this.ignoreClass)) {this.menuItems[i].subMenu = subMenu;this.setupSubMenu(subMenu);subMenu.create(this.options);}}},setupSubMenu: function(subMenu) {if($type(subMenu) == 'element') {new Abstract(subMenu).extend({create: function(options) {this.options = options;this.parentElem = this.getParent();this.menuItems().setOpacity(0);this.setOpacity(0);this.addEvent('fadein',this.showMenu);this.addEvent('fadeout',this.hideMenu);var thisMenu = this;this.parentElem.addEvent('mouseenter',function(evt) {thisMenu.latestEvent = 'mouseenter'; thisMenu.fireEvent('fadein',evt)});this.parentElem.addEvent('mouseleave',function(evt) {thisMenu.latestEvent = 'mouseleave'; thisMenu.fireEvent('fadeout',evt,thisMenu.options.fadeOutDelay)});if(this.options.fadeRecursive) {new FadeMenu(this,this.options)};},showMenu: function(evt) {if(this.latestEvent == 'mouseleave') {return false;}this.fadeInQueue = this.menuItems();this.setOpacity(1);this.fadeInItems();},hideMenu: function(evt) {if(this.latestEvent == 'mouseenter') {return false;}this.fadeOutQueue = this.menuItems();this.fadeOutItems();},fadeInItems: function() {var thisMenu;if(this.element) {thisMenu = this.element.getParent();}else {thisMenu = this;}if(thisMenu.fadeInQueue.length > 0 && thisMenu.latestEvent == 'mouseenter') {thisItem = thisMenu.fadeInQueue.shift();if($defined(thisItem.fadeout)) {thisItem.fadeout.stop();}if(thisItem.getStyle('opacity') < 1) {thisItem.fadein = new Fx.Style(thisItem, 'opacity', {duration: thisMenu.options.fadeInSpeed}).start(thisItem.getStyle('opacity'),0.9999).chain(thisMenu.fadeInItems);} else {thisMenu.fadeInItems();}} else {return false;}},fadeOutItems: function() {var thisMenu;if(this.element) {thisMenu = this.element.getParent();}else {thisMenu = this;}if(thisMenu.fadeOutQueue.length > 0) {if(thisMenu.latestEvent == 'mouseleave') {thisItem = thisMenu.fadeOutQueue.pop();if($defined(thisItem.fadein)) {thisItem.fadein.stop();}if(thisItem.getStyle('opacity') > 0) {thisItem.fadeout = new Fx.Style(thisItem, 'opacity', {duration: thisMenu.options.fadeOutSpeed}).start(thisItem.getStyle('opacity'),0).chain(thisMenu.fadeOutItems);} else {thisMenu.fadeOutItems();}} else {return false;}} else {if(thisMenu.latestEvent == 'mouseleave') {thisMenu.setOpacity(0);}}},menuItems: function() {return this.getChildren().filterByTag('li')}});}}});

var MyTips   = Tips.extend({
	initialize: function(options){
		if (!options) options = {};
		options.fixed     = true;
		options.hideDelay = 1000;
		options.onShow    = function(toolTip){this.fx.start(1);};
		options.onHide    = function(toolTip){this.fx.start(0);};
		this.parent($$('.tip'), options);
 	    this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 200, wait: false}).set(0);
	}
});

var MyAccordion = Accordion.extend({
	initialize: function(options) {
		if (!options) options = {};
		options.opacity    = true;
		options.alwaysHide = false;
		this.parent('h3.atStart', 'div.atStart', options, $('accordion'));
	}
});

window.addEvent('domready',function() {
    new FadeMenu('dropmenu');
	new MyTips();
	new MyAccordion();
});

function getElementsByClassName(oElm, strTagName, oClassNames){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object"){
		for(var i=0; i<oClassNames.length; i++){
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j=0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}
