var SGDropMenu = new Class({
	// fx config
	_fx_delay: 0.25, // time to delay the effect by default, typically a fade etc.
	_fx_duration: 200, // the length which we should carry out an effect for
	//_header_bar_element: null,
	//_header_bar_top: 0,
	//_fx_header_bar:null,
	_current_menu:null,

	_menus: [ // collection of menus to move and their values
		{ 
			menu_item_id:647, 
			new_item_type:'div', 
			new_item_id:'holdermens', 
			content_element_name: 'float_mensmenu',
			height: 200,
			event:'over',
			fx_in:null,
			fx_out:null
		},

		{ 
			menu_item_id:651, 
			new_item_type:'div', 
			new_item_id:'holderwomens', 
			content_element_name: 'float_womensmenu',
			height: 200,
			event:'over',
			fx_in:null,
			fx_out:null
		}
	],

	/**
	 * Initialise the process, called automatically on creation of the object.
	 */
	initialize: function(){

		this._menus.each(
			function(menu,i) {
				this.createChildMenu(menu);
				this.addMenuEvents(menu);
			},
			this
		);
	},
	
	/**
	 * Create the child menu from the obj passed
	 */
	createChildMenu: function(menu){
		//create an empty element
		var new_div = document.createElement(menu.new_item_type);
		
		//give it an id
		new_div.id = menu.new_item_id;

		//put the new element under our menu item
		if(document.getElementById('menuitem'+menu.menu_item_id) != null) {
			$('menuitem'+menu.menu_item_id).appendChild(new_div);

			//Hide new element
			$(menu.new_item_id).setStyles({display:'none', visibility:'hidden', opacity:0});
	
			//popuplate it with content
			$(menu.new_item_id).innerHTML = $(menu.content_element_name).innerHTML;
	                
			//attach a slide to be toggled on each menu pane.
			menu.fx_in = new Fx.Styles(this.getMenuPane(menu), {wait:false,duration: this._fx_duration, transition: Fx.Transitions.linear});
			menu.fx_out = new Fx.Styles(this.getMenuPane(menu), {wait:false,duration: this._fx_duration, transition: Fx.Transitions.linear});
		}
		return true;
	},

	/**
	 * Assign actions to the links so they show the relevent children.
	 */
	addMenuEvents: function(menu) {
		var self = this;

		//add custom events to fire for the menu link
		switch (menu.event) {
			case 'over':
				if (this.getMenuLink(menu) != null) {
					this.getMenuLink(menu).addEvents({

						// standard mousein action for a menu item
						'mouseenter': function() {
							this.hideAllOthers(menu); 
							this.showMenu(menu); 
						}.bind(this),

						// standard mouseout action for a menu item
						'mouseleave': function() {
							this.hideMenu(menu);
						}.bind(this)
					});
				}
				break;

			case 'click':
				this.getMenuLink(menu).getElement('a').addEvents({
					'click': function(e) {
						new Event(e).stop();
						var scroller = new Fx.Scroll(document.body);
						scroll(0,0);

						this.hideAllOthers(menu);
						this.showMenu(menu)
						this.setLinkColors(menu);
					}.bind(this)
				});
				this.addCloseButton(menu);
		}

		//add custom events to fire for the menu pane
		if (this.getMenuPane(menu) != null) {
			this.getMenuPane(menu).addEvents({
				/*'mouseenter': function() {
					clearTimeout(this.timeout);
				}.bind(this),
				'mouseleave': function() { // standard mouseout action for a menu item
				//console.log('paneout:' + menu.menu_item_id);
					if(menu.event == 'over') {
						console.log('out');
						this.timeout = setTimeout(function() {
							this.getMenuPane(menu).fireEvent('hideme');
						}.bind(this), 100);
						//this.hideMenu(menu);
					}
				}.bind(this),*/
				// custom event to show this objects menu
				'showme':function () {
					this.getMenuPane(menu).setStyle('display', 'block');
					menu.fx_in.start({
						'opacity': 1
					});

					this.setCurrentMenu(menu);
	
					//obj._header_bar_element.setStyle('top',obj._header_bar_top + obj.getMenuPane(menu).getStyle('height').toInt() + 'px');
				}.bind(this),
				// custom event to hide this objects menu
				'hideme':function () { 
					menu.fx_in.start({
						'opacity': [this.getMenuPane(menu).getStyle('opacity'),0] 
					});
					this.getMenuPane(menu).setStyle('display', 'none');
				}.bind(this)
			},this);
		}
	},
	
	/**
	 *  Hide all the other elements by triggering their custome event
	 */
	hideAllOthers: function(menu) {
		//loop through all the menus
		this._menus.each(
			function(other,i) {
				//if its not the menu sent then fire the hide
				if(menu != other && other.event == 'over' || menu.event == 'click') {
					this.getMenuPane(other).fireEvent('hideme');
				}
			},
			this
		);
	},

	//Add close button to the current item
	addCloseButton: function(menu) {
		this.getMenuPane(menu).getElement('a').addEvent('click', function() {
			obj.hideMenu(menu);
			obj.resetLinkColors(menu);
		});
	},
	
	
	//Hold the hover colors for click links
	setLinkColors: function(menu) {
		this._menus.each(
			function(other,i) {
				this.resetLinkColors(other);
			},
			this
		);
		if(this.getMenuLink(menu).getStyle('border-bottom-width') == '4px') {
			this.getMenuLink(menu).setStyles({
				borderBottomColor: '#F7941D',
				backgroundColor: '#F7941D'
			});
		}
	},
	resetLinkColors: function(menu) {
		this.getMenuLink(menu).removeProperty('style');
	},

	/**
	 *  Show the  menu
	 */
	showMenu: function(menu) {
//		console.log('showMenu: ' + menu.menu_item_id);
		this.getMenuPane(menu).fireEvent('showme');
	},
	/**
	 *  Show the menu
	 */
	hideMenu: function(menu) {
		//console.log('showMenu: ' + menu.menu_item_id);
		this.getMenuPane(menu).fireEvent('hideme');
	},
	
	/**
	 *  get the menu item link for a menu item
	 */
	getMenuLink: function(menu) {
		return $('menuitem'+ menu.menu_item_id);
	},

	/**
	 * get the sub links pane for a menu item
	 */
	getMenuPane: function(menu) {
		return $(menu.new_item_id);
	},
	
	/**
	 * Set the last menu hovered over
	 */
	setCurrentMenu:function(menu) {
		obj._current_menu = menu;
	},
	
	/**
	 * Get the last menu hovered over
	 */
	getCurrentMenu:function() {
		return obj._current_menu;
	}
});


//init object container outside of event function to provide globality
var obj;

/**
 * Seems to be used in the mobile template
 * @returns {Boolean}
 */
function menu_searchcheck() {
    if ($('searchword').value == '' || $('searchword').value.length <= 2) {
        return false;
    } else {
    	return true;
    }
    return false;
}

/*function hide_sizefilter() {
	if ($$('form.size-filter-form') != null) $$('form.size-filter-form').setStyle('display', 'none');
}

function show_sizefilter() {
	if ($$('form.size-filter-form') != null) $$('form.size-filter-form').setStyle('display', 'block');
}*/


window.addEvent('domready', function() {

	//Newsletter form
	/*if ($('newsletter-form') != null) {
		var newsletterbuttons = new Array('newsletter_men_submit', 'newsletter_women_submit'),
			//newlettercategories = new Array('mens', 'womens'),
			newsform = $('newsletter-form');

		//Stop form from submitting
		newsform.addEvent('submit', function(e) {
			new Event(e).stop();
		});

		//Add click events to buttons
		for (var i=0; i < newsletterbuttons.length; i++) {
			$(newsletterbuttons[i]).addEvent('click', function(e) {
				new Event(e).stop();
	
				//var categoryField = $('newsletter_category');
				$('newsletter_category').value = this.defaultValue;
	
				//Check form is valid
				if(document.formvalidator.isValid(newsform)) {
					var callback = function(responseText) {
	
						if(responseText.indexOf('success') > 0) {
							repsponseText  = responseText.replace(/success/i, "");
							var content = '<div class="newsletterthanks"><p>'+lang_theme_newsletter_thanks+ repsponseText + '</p></div>';
							var time = 3000;
							var height = 87;
						}
						else {
							var content = '<div class="popup-message error"><p>'+responseText+'</p></div>';
							var time = 3000;
							var height = "auto";
						}
						news_letter_popup(content, height);
						//Close final popup
						t = setTimeout('document.boxB.close()', time);
					};
					var opt = {
						method:'post',
						data:newsform,
						onComplete:callback,
						evalScripts:true
					};
					//Post form
					new Ajax(newsform.action, opt).request();
				}
				//Invalid form
				else {
					if($('newsletter_email').hasClass('invalid')) var message = lang_theme_please_email;
					else if($('newsletter_category').hasClass('invalid')) var message = lang_theme_please_newsletter;
	
					var content = '<div class="popup-message error"><p>'+message+'</p></div>';
					news_letter_popup(content, 100);
					//t = setTimeout('document.boxB.close()', 3000);
				}
			});
		}
	}*/

	//Language selection?
	if ($('language_choice')!=null) {
		$('language_choice').addEvent('click', function(e) {
			content = $('pop_up_languages').innerHTML;
			content += '<div class="buttons"><a id="langclose" title="'+lang_theme_cancel_link+'" class="arrow-button-left close">'+lang_theme_cancel_link+'</a></div></div>'
	        popup(content, 125,545);
		});
	}
	
	updateviewbag();

	obj = new SGDropMenu();
});
//function news_letter_popup(content, height, width) {
//	//Close any previous popup
//	if(typeof document.boxB != 'undefined') {
//		document.boxB.close();
//	}
//	/*var len = $$('.cbContainer').length;
//	if(len > 0) {
//		for(var n = 0; n < len; n++) {
//			$$('.cbContainer')[n].remove();
//		}
//		if(typeof t != 'undefined') clearTimeout(t);
//	}*/
//	var popup_options = {
//		buttons:0,
//		width:width || 345,
//		height:height,
//		overlay:true,
//		showCloseBtn:true
//	};
//
//	//if the ie6 don't do the overlay it doesn't work properly.
//	if(Template.ie6) {
//		popup_options.overlay = false;
//	}
//	document.boxB = new MooPrompt('', content, popup_options);
//	/*if(getInternetExplorerVersion() == 6) {
//		document.boxB = new MooPrompt('', content, {
//			buttons:0,
//			width:width || 345,
//			height:height,
//			overlay:false,
//			showCloseBtn:true
//		});
//	} else {
//        document.boxB = new MooPrompt('', content, {
//        	buttons:0,
//        	width:width || 345,
//        	height:height,
//        	overlay:true,
//        	showCloseBtn:true
//        });
//	}*/
//	document.boxB.closeBtn.innerHTML = "<span>" + lang_theme_close_link + "</span>";
//	document.boxB.closeBtn.addEvent('click', function(e) {
//		document.boxB.close();
//		$$('.cbOverlay').setStyle('visible', 'hidden');
//	});
//	//Cancel
//	$$('.popup-message .close').addEvent('click', function(e) {
//		document.boxB.close();
//	});
//
//	//Hide proceed button
//	if($defined($('confirm-terms'))) {
//		var confirm_link = $$('.popup-message .confirm');
//		confirm_link.setStyle('display', 'none');
//		$('confirm-terms').addEvent('click', function() {
//			if(this.checked) confirm_link.setStyle('display', 'inline-block');
//			else confirm_link.setStyle('display', 'none');
//		});
//	}
//}

function hidebag() {
	$('minicart_dropdown').setStyle('visibility', 'hidden');
}

//mbedit
//This seems to show or hide the mini bag
window.addEvent('domready', function() {
	if ($('shopping-bag') != null) {
		if (!$('shopping-bag').hasClass('nodrop')) {
			$('shopping-bag').addEvent('mouseenter', function(event) {
				getshoppingbag();
			});
			$('shopping-bag').addEvent('mouseover', function(event) {
				$('minicart_dropdown').setStyle('visibility', 'visible');
				$('shopping-bag').setStyle('background-color', '#F7941D');
			});
		
			$('shopping-bag').addEvent('mouseleave', function(event) {
				$('minicart_dropdown').setStyle('visibility', 'hidden');
				$('shopping-bag').setStyle('background-color', '#3A3A3C');
			});
		}
	}
});

function updateviewbag() {
        //scrollbars
        if ($('mbscroll-container-vertical') != null){

            var full_height = $('minibag_contents').getSize().size.y;
            var box_height = 262;
            var height = full_height/box_height;

            //do we need the scroll bar
            if(height>1){
                $('mbscroll-container-vertical').setStyle('width', '16px');
                //$('mbscroll-container-vertical').setStyle('left', '203px');
                $('minibag').setStyle('width', '202px');
                $('mbscroll-container-vertical').innerHTML = '<div id="mbscroll-scroll-up"></div><div id="mbscroll" class="mbscroll-vert"><div id="mbscrollhandle" class="mbscrollhandle-vert"></div></div><div id="mbscroll-scroll-down"></div>';
                //Work out handle size


                $('mbscrollhandle').setStyle('height', 228/height);
                //$('mbscrollhandle').setStyle('height', 10);
                makeMBScrollbar($('minibag'), $('mbscroll'), $('mbscrollhandle'), false);
            }
        }else  {
            //no scroll bar hide it and make the minibag wider.
            //$('mbscroll-container-vertical').setStyle('width', '0px');
            if ($('minibag') != null){
                $('minibag').setStyle('width', '223px');
            }
        }
        //end mbedit
}
function minicart_update() {
	var callbackCart = function(responseText) {
		carts = $$( '.vmCartModule' );
		if( carts ) {
			try {
				
				for (var i=0; i<carts.length; i++){
					carts[i].innerHTML = responseText;
					
				}
			} catch(e) {}
		}
		getshoppingbag();
	};
	var option = {method: 'post', onComplete: callbackCart, data: {only_page:1,page: "shop.basket_short", option: "com_virtuemart"}};
	new Ajax( 'index2.php', option).request();
}

function minicart_remove(product_id) {

   var action = 'index.php?option=com_virtuemart&Itemid=16&func=cartDelete&only_page=1&product_id='+product_id;

    var callback = function(responseText) {
            $('removeproduct_'+product_id).setStyle('display', 'none');
            minicart_update();
            getshoppingbag();
            
    };
    var opt = {
        method: 'post',
        onComplete: callback,
        evalScripts: true
    };

    new Ajax(action, opt).request();


}

function getshoppingbag() {

    try {
        var action = 'index.php?option=com_supergroupadmin&task=viewbag&format=raw';
        if ($('minicartmouse').value != 1 || $('minicart_dropdown').innerHTML == ''){
            var callback = function(responseText) {
                $('minicart_dropdown').innerHTML = responseText;
                $('minicartmouse').value = 1;
                updateviewbag();
            };

            var opt = {
                method:'get',
                onComplete:callback,
                evalScripts:true
            };
            new Ajax(action, opt).request();
        }
        
    }
    catch(e) {
    	
    }
    var pos = $('viewcart_pos').offsetWidth;
    pos = pos + 2
    $('minicart_dropdown').setStyle('visibility', 'visible');
    $('shopping-bag').setStyle('background-color', '#F7941D');
}

/*function menuleave(dropdown,menu) {
	$$('li.item'+menu).setStyle('backgroundColor', '#212122');
	$$('li.item'+menu).setStyle('borderBottomColor', '#000');
	dropdown.start(1,0);

}*/

//minibag scrollbar creator
// @todo make so that it only scrolls vertically

function makeMBScrollbar(content,scrollbar,handle,horizontal,ignoreMouse,startpoint){
	var fx = new Fx.Styles(content, {duration: 1000, wait: false});

	if(content != null && scrollbar != null && handle != null){
		var steps = (horizontal?(content.getSize().scrollSize.x - content.getSize().size.x):(content.getSize().scrollSize.y - content.getSize().size.y));

		var slider = new Slider(scrollbar, handle, {
			steps: steps,

			mode: (horizontal?'horizontal':'vertical'),
			onChange: function(step){
				// Scrolls the content element in x or y direction.
				var x = (horizontal?step:0);
				//x = startpoint + x;
				var y = (horizontal?0:step);
				content.scrollTo(x,y);
			}
		}).set(0);


		if( !(ignoreMouse) ){
			// Scroll the content element when the mousewheel is used within the
			// content or the scrollbar element.

			$$(content, scrollbar).addEvent('mousewheel', function(e){
				e = new Event(e).stop();
				var step = slider.step - e.wheel * 30;
				slider.set(step);
			});
		}
		//RW - 04/03/2010
		//Sets the sliders starting position
		slider.set(slider.step + Number(startpoint))

		//DA 18/01/2010
		//attach key listener
		document.addEvent('keydown', function(k){
			//console.log(k.keyCode);
			switch(k.keyCode) {
				//catch left btn
				case 37:
					slider.set(slider.step-249);
				break;
				//catch right btn
				case 39:
					slider.set(slider.step+249);
				break;
				//anything else
				default:
			}
		});

		// Stops the handle dragging process when the mouse leaves the document body.
		//attach the left and right clicks :D
		if($('mbscroll-scrollleft') == null){
			$('mbscroll-scroll-up').addEvent('click',function(){
				slider.set(slider.step-50);
			});
			$('mbscroll-scroll-down').addEvent('click',function(){
				slider.set(slider.step+50);
			});
		}
		else {
			var scr = false;
			var scl = false;
			var time = 0;
			var stid = 0;

			$('mbscroll-scrollright').addEvent('mousedown',function(){
				if (scr == false) {
					scr = true;
					scrollDirection("left");
					//stid = setTimeout(function() { scrollDirection("left") },1);
				} else {
					clearTimeout(stid);
					scr = false;
					scl = false;
				}
			}).addEvent('mouseup',function(){
				scr = false;
				scl = false;
			});

			$('mbscroll-scrollleft').addEvent('mousedown',function(){
				if (scl == false) {
					scl = true;
					scrollDirection("right");
					//stid = setTimeout(function() { scrollDirection("right") },1);
				} else {
					clearTimeout(stid);
					scr = false;
					scl = false;
				}
			}).addEvent('mouseup',function(){
				scr = false;
				scl = false;
			});

			var flow = {
				startleft: function() {
					while (scl == true) {
						scrollDirection(left);
					}
				},
				startright: function() {
					while (scr == true) {
						scrollDirection(right);
                            }
                    },
                    stop: function() {
                        scr = false;
                        scl = false;
                    }
                }

			function scrollDirection(direction) {
				if (direction == "left") {
					for ($i = 0; $i < 2; $i++) {
						slider.set(slider.step+3);
					}
				}
				else {
					for ($i = 0; $i < 2; $i++) {
						slider.set(slider.step-3);
					}
				}

				if (scl != false) {
					stid = setTimeout(function() {scrollDirection(direction)},1);
				}
				if (scr != false) {
					stid = setTimeout(function() {scrollDirection(direction)},1);
				}
			}
		}
	}
}

/**
 * Called by news_letter_popup()
 * @deprecated (Use Template.ie6)
 * @returns {Number}
 */
/*function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}*/
