var mainmenu = Class.create({
	headers : new Array(),
	panels : new Array(),
	panel_rule: '',
	
	_swap_over: function(event){
		var over_element = $(Event.element(event));
		over_element._overimage();
	},
	
	_swap_out: function(event){
		var over_element = $(Event.element(event));
		over_element._outimage();
	},
	
	_openelement: function(event){
		Event.stop(event);
		var clicked_element = $(Event.element(event));
		
		parent_element = $(clicked_element.up(1));
		panel_element = parent_element.select(this.panel_rule).first();
		
		if(panel_element){
			panel_element = $(panel_element);
			if(!panel_element.visible()){
				clicked_element._selectedimage();
				new Effect.SlideDown(panel_element,{duration: 0.4, transition: Effect.Transitions.spring});
			}else{
				clicked_element._unselectimage();
				new Effect.SlideUp(panel_element,{duration: 0.2});
			}
		}
	},
	
	initialize: function(container, header, panel){
		
		this.headers = $(container).select(header);
		this.panels = $(container).select(panel);
		this.panel_rule = panel;
		
		if(this.headers && this.panels){
		
			Element.addMethods({
				_outimage: function(element){
					var hover_element = $(element);
					var img_element = $(hover_element);
					var new_src = img_element.src;
					
					if(new_src.indexOf('_sel') == -1){
						new_src = new_src.replace('_ovr','');
						img_element.src = new_src; 
					}
				},
				_unselectimage: function(element){
					var hover_element = $(element);
					var img_element = $(hover_element);
					var new_src = img_element.src;
					
					if(new_src.indexOf('_sel') != -1){
						new_src = new_src.replace('_sel','');
						img_element.src = new_src; 
					}
				},
				_overimage: function(element){
					var hover_element = $(element);
					var img_element = $(hover_element);
					
					var new_src = img_element.src;
					var data = img_element.src.replace(/^\s|\s$/g, "");
					
		            if (/\.\w+$/.test(data)){
		                var m = data.match(/([^\/\\]+)\.(\w+)$/);
		                if (m){
		                	str_filename =m[1];
		                	str_extension =m[2];
		                }
		            }
					str_filename = str_filename.replace('_ovr','');
					if (str_filename.indexOf('_sel') == -1 ){
						var e=/^((http|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+\.[^#?\s]+)(#[\w\-]+)?$/;
						if (data.match(e)){
							protocol= RegExp.$2;
							host = RegExp.$3;
							path = RegExp.$4;
						}
						str_filename +='_ovr';
						img_element.src = protocol+"://"+host+path+"/"+str_filename+"."+str_extension;
					}
				},
				_selectedimage: function(element) {
					
					var element = $(element);
					var new_src = element.src;
					var data = element.src.replace(/^\s|\s$/g, "");
					
		            if (/\.\w+$/.test(data)){
		                var m = data.match(/([^\/\\]+)\.(\w+)$/);
		                if (m){
		                	str_filename =m[1];
		                	str_extension =m[2];
		                }
		            }
					str_filename = str_filename.replace('_ovr','');
					
					var e=/^((http|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+\.[^#?\s]+)(#[\w\-]+)?$/;
					if (data.match(e)){
						protocol= RegExp.$2;
						host = RegExp.$3;
						path = RegExp.$4;
						/*
						return  {url: RegExp['$&'],
						protocol: RegExp.$2,
						host:RegExp.$3,
						path:RegExp.$4,
						file:RegExp.$6,
						hash:RegExp.$7};
						*/
					}
					str_filename +='_sel';
					element.src = protocol+"://"+host+path+"/"+str_filename+"."+str_extension;
				}
			});
			
			this.headers.each(function(ele,index){
				
				Event.observe(ele, 'click', this._openelement.bind(this));
				Event.observe(ele, 'mouseover', this._swap_over.bind(this));
				Event.observe(ele, 'mouseout', this._swap_out.bind(this));
				
				/*
				ele.observe('eeeclick',function(event){
					Event.stop(event);
					clicked_element = $(Event.element(event));
					parent_element = $(clicked_element.up(1));
					panel_element = parent_element.select(panel).first();
					
					if(panel_element){
						panel_element = $(panel_element);
						if(!panel_element.visible()){
							clicked_element._selectedimage();
							new Effect.SlideDown(panel_element,{duration: 0.4, transition: Effect.Transitions.spring});
						}else{
							new Effect.SlideUp(panel_element,{duration: 0.2});
						}
					}
				});
				*/
			},this);
		}
	}
});