/*
|--------------------------------------------------------------------------
| Amedia Creative Frontend Framework > Accordion
|--------------------------------------------------------------------------
|
| @package		Amedia Creative
| @subpackage	Frontend Framework
| @company		Amedia Creative, Inc.
| @phone		310/651/8733
| @fax			310/388/1210
| @author		Joey Avino
| @email		joey@amediacreative.com 
| @link			http://www.amediacreative.com
| @copyright	2008 Amedia Creative, Inc.
| @requires 	mootools.1.2.js
|
*/

/*
|--------------------------------------------------------------------------
| Amedia Creative Frontend Framework > Accordion > Core JavaScript
|--------------------------------------------------------------------------
|
| NOTE: Do not change the names of these classes.
|
*/

	/**
	* Accordion FX Class
	*
	* @name 	AccordionFx
	* @access 	public
	* @param 	var-type none
	* @return 	none
	* @author 	Joey Avino
	* @email	joey@amediacreative.com
	*/
	var AccordionFx = new Class({

		Implements: Options, options: {

			button: '.toggler',
			content: '.element',
			link_tag: '.toggler a',
			start_event: 'mouseenter',
			end_event: 'mouseleave',
			css_start: '.accordion_link_rollover',
			css_end: '.accordion_link_rollout',
			a_speed: 1000,
			r_speed: 250,
			a_transition: Fx.Transitions.Pow.easeOut,
			r_transition: Fx.Transitions.Pow.easeOut,
			wait_bool: false,
			a_id: 'accordion',
			a_css_active: 'accordion_active',
			a_css_link: 'accordion_link',
			start_pos: 0

		},

		/**
		* Initialize the AccordionFx class.
		*
		* @name 	AccordionFx
		* @access 	public
		* @param 	var-type none
		* @return 	none
		* @author 	Joey Avino
		* @email	joey@amediacreative.com
		*/
		initialize: function(options) {

			this.setOptions(options);

			var functions = {

				remove_event: this.remove_event,
				readd_event: this.readd_event,
				button_morph: this.button_morph

			};
			
			functions.button_morph(options);

			var my_accordion = new Accordion(this.options.button, this.options.content, {

				opacity: false,
				transition: options.a_transition,

				onActive: function(toggler, element) {

					functions.remove_event(toggler, options);
					toggler.setProperty('class', options.a_css_active);

				},

				onBackground: function(toggler, element) {

					functions.readd_event(toggler, options, functions);
					toggler.setProperty('class', options.a_css_link);

				},

				display: this.options.start_pos

			});
		},





		/**
		* More Buttons for rollovers of accordion togglers.
		*
		* @name 	button_morph
		* @access 	public
		* @param 	var-type none
		* @return 	none
		* @author 	Joey Avino
		* @email	joey@amediacreative.com
		*/
		button_morph: function(options) {

			var list = $$(options.link_tag);

			list.each(function(element) {

				var fx = new Fx.Morph(element, {

					duration: options.r_speed,
					wait: options.wait_bool,
					transition: options.r_transition

				});

				element.addEvent(options.start_event, function() {

					fx.start(options.css_start);

				});

				element.addEvent(options.end_event, function() {

					fx.start(options.css_end);

				});
			});
		},





		/**
		* This function removes the event of the active toggler.
		*
		* @name 	remove_event
		* @access 	public
		* @param 	var-type none
		* @return 	none
		* @author 	Joey Avino
		* @email	joey@amediacreative.com
		*/
		remove_event: function(obj, options) {

			var hover_tag = obj.getElement('a');
			hover_tag.removeEvents(options.start_event);
			hover_tag.removeEvents(options.end_event);

		},





		/**
		* This function re-adds events of re-activated togglers due to clicks.
		*
		* @name 	readd_event
		* @access 	public
		* @param 	var-type none
		* @return 	none
		* @author 	Joey Avino
		* @email	joey@amediacreative.com
		*/
		readd_event: function(obj, options, functions) {

			var link_tag = obj.getElement('a');
			options.link_tag = link_tag;
			functions.button_morph(options);

			var fx = new Fx.Morph(link_tag, {

				duration: 0,
				wait: false

			});

			fx.start(options.css_end);

		}
	});