var Wowenkho = {
	defaultoptions : 
	{
		duration: 250, 
		transition: 'expo:out', 
		'link':'cancel'
	},
	messageoptions : 
	{
		iconPath: 'images/',
		iconSize: 40,
		fontSize: 14,
		fxTransition: 'back:out',
		fxDuration: 900,
		fxUrgentTransition: 'back:out',
		fxOutTransition: 'back:in',
		fxOutDuration: 500,
		waitTime: 5000,
		stack : false
	},
	interfaceoptions :
	{
		lightbox : {
			'groupElements' : ['.tab','.imagegroup', '#imagesets'],
			'lightboxElements' : '.ceraBox',
			'zoomImage' : 
			{
				'url' : 'images/zoom.png',
				'position' : {
					'edge' : 'topLeft',
					'position' : 'topLeft', 
					'offset' : { 'x' : 5, 'y' : 5 }
				}
			},
			'options' : 
			{
				'addContentProtectionLayer' : true
			}
		},
		ajaxForms : '.ajaxform',
		radios : 'input[type=radio]',
		externals : '.external',
		redirects : '.gotopage',
		galleries : '.itemthumb',
		confirms : '.confirmclick',
		topScrollers : '.scrolltotop',
		tips : '.tip',
		arrowElement : {
			'styles' :
			{
				'width' : 0,
				'height' : 0,
				'border-color' : 'transparent #ddd transparent transparent',
				'border-style' : 'solid',
				'border-width' : '7px 12px 7px 0',
				'margin-left' : -10
			},
			'position' : 
			{
				'edge' : 'centerRight',
				'position' : 'topLeft',
				'offset' : { 'x' : 0, 'y' : 20 }
			}
		},
		fields : {
			'elements' : 'input[type=text], input[type=password], input[type=date], textarea, select',
			'focus' : {'background-color' : '#fe0'},
			'hover' : {'background-color' : '#ffa'}
		},
		
		datefields : {
			'elements' : '.datefield',
			'options' : 
			{
				'pickerClass': 'datepicker_vista',
				'format' : '%Y-%m-%d',
				'pickerPosition' : 'right',
				'animationDuration' : 200
			}
		},
		
		timefields : {
			'elements' : '.timefield',
			'options' : 
			{
				'timePicker': true,
				'pickerClass': 'datepicker_vista',
				'format' : '%Y-%m-%d %H:%M:00',
				'pickerPosition' : 'right',
				'animationDuration' : 200
			}
		},
		
		tagfields : {
			'fields' : 'input[name=articleTags]',
			'clouds' : '.tagcloud'
		}
	},
	checkformoptions :
	{
		forms : '.checkform, .ajaxform',
		inputs : 'input[type=text], input[type=password], input[type=radio], select, textarea',
		tagFields : 'input[name=articleTags]',
		errorFX : {'background-color' : '#c00'}
	}
};


Wowenkho.FxHelper = new Class(
{
	getFXStyles : function(FX)
	{
		return Object.keys(FX);
	}
});

Wowenkho.Control = new Class(
{
	Implements : [Options, Wowenkho.FxHelper],
	
	options : Wowenkho.interfaceoptions,
	
	initialize : function(options)
	{
		this.setOptions(options);
		this.attachEvents();
	},
	
	attachEvents : function()
	{
		this.initLightbox();
		this.initTextFields();
		this.initRadios();
		this.initAjaxForms();
		this.initTips();
		this.initGalleries();
		this.initExternals();
		this.initRedirects();
		this.initTagClouds();
		this.initTagFields();
		this.initTopScrollers();
		this.initConfirms();
		this.initPlaceholders();
		this.initDatepickers();
	},
	
	initLightbox : function()
	{
		if(typeOf(CeraBox) != 'null')
		{
			this.lightbox = new CeraBox();
			
			var that = this;
			
			if(this.options.lightbox.zoomImage.url)
			{
				this.zoomImage = Asset.image(this.options.lightbox.zoomImage.url,
				{
					'class' : 'zoomimage',
					'onError' : function()
					{
						that.options.lightbox.zoomImage.url = null;
					}
				});
			}
			
			this.options.lightbox.groupElements.each(function(el,i)
			{
				var el = $$(el);
				
				el.each(function(groups,x)
				{
					var boxes = groups.getElements(this.options.lightbox.lightboxElements);
					
					if(boxes.length > 0)
					{
						this.lightbox.addItems(boxes,this.options.lightbox.options);
					}
					
					if(this.options.lightbox.zoomImage.url)
					{
						boxes.each(function(box,b)
						{
							box.setStyles(
							{
								'position':'relative',
								'display':'block'
							});
							var myZoom = this.zoomImage.clone().inject(box);
							myZoom.position(Object.append(Object.clone(this.options.lightbox.zoomImage.position),{'relativeTo':box}));
						},this);
					}
				},this);
			},this);
		}
	},
	
	initDatepickers : function()
	{
		if(!Browser.opera && !Browser.safari)
		{
			new DatePicker($$(this.options.datefields.elements),this.options.datefields.options);
			new DatePicker($$(this.options.timefields.elements),this.options.timefields.options);
		}
	},
	
	
	initPlaceholders : function()
	{
		var i = new Element('input');
		
		if(i.placeholder == null)
		{
			$$('input[placeholder][type=text]')
			.each(function(el,i)
			{
				el.set('value',el.get('placeholder'));
			})
			.addEvents(
			{
				'focus': function() 
				{
					if(this.get('value') == this.get('placeholder')) { this.set('value',''); }
				},
				'blur': function() 
				{
					if(this.get('value') == '') { this.set('value',this.get('placeholder')); }
				}
			});
		}
	},
	
	initConfirms : function()
	{
		var k = function(e)
		{
			e.stop();
			var msg = (this.get('rel') || 'Are you sure?') + '<br>',
			callback = function() 
			{
				if(this.get('tag') != 'form')
				{ 
					window.location = this.get('href'); 
				}
				else
				{
					var subEl = this.getElement('input[type=submit]'),
					hiddenSubmit = new Element('input',
					{
						'type' : 'hidden',
						'name' : subEl.get('name'),
						'value' : subEl.get('value')
					}).inject(this);
					
					this.submit();
				}
				
			}.bind(this);
			
			new Message(
				Object.append(Object.clone(Wowenkho.messageoptions),
				{
					'icon' : 'mediumQuestion.png',
					'title' : ' ',
					'message' : msg,
					'width' : 400,
					'callback' : callback,
					'onShow' : function()
					{
						document.id(document.body).set('mask',
						{
							'style' : 
							{
								'background-color' : '#047',
								'opacity' : 0,
								'z-index' : 2
							}
						}).mask().get('mask').element.setStyle('opacity',0.7);
					},
					'onComplete' : function()
					{
						var m = document.id(document.body);
						
						m.get('mask').element.set('tween',
						{
							'duration' : 'long',
							'transition' : 'expo:out',
							'onComplete' : function()
							{
								m.unmask();		
							}
						}).fade('hide');
					}
				})
			).ask();
			
		};
		
		$$(this.options.confirms).addEvents(
		{
			'click': function(e) 
			{
				if(this.get('tag') != 'form')
				{
					k.pass(e,this)();
				}
			},
		
			'submit': function(e)
			{
				if(this.get('tag') == 'form')
				{
					if((this.hasClass('ajaxform') || this.hasClass('checkform')))
					{
						if(Wowenkho.checkForm.isChecking(this))
						{
							k.pass(e,this)();
						}
					}
					else
					{
						k.pass(e,this)();
					}
				}
			}
		});
	},
	
	initRedirects : function()
	{
		$$(this.options.redirects).addEvent('change',function()
		{
			var title = this.retrieve('title') || this.get('title');
			window.location = title + this.get('value');
		});
	},
	
	initTopScrollers : function()
	{
		$$(this.options.topScrollers).addEvents(
		{
			'click': function(e)
			{
				e.stop();
				Wowenkho.windowScroll.toElement(window);
			}
		});
	},
	
	initTagFields : function()
	{
		var that = this,
		tf = $$(this.options.tagfields.fields),
		f = $$(tf.getParent('form')),
		k = function()
		{
			this.set('value',this.get('value').replace(/[^a-zA-Z0-9-\s,]/gi,'').replace(/\s*,\s* /gi,',').replace(/,\s*$/,'').replace(/^\s*,/,'').replace(/,{2,}/gi,',').replace(/-{2,}/gi,'-').replace(/\s{2,}/gi,' ').replace(/,\s,/gi,',').clean());
		};
		tf.addEvent('blur',function()
		{
			k.bind(this)();
		});

		f.addEvent('submit',function()
		{
			k.bind(this.getElement(that.options.tagfields.fields))();
		});
	},
	
	initTagClouds : function()
	{
		var tc = $$(this.options.tagfields.clouds);
		
		tc.each(function(cloud,i)
		{
			var tags = cloud.getElements('.tag');
			tags.each(function(tag)
			{
				tag.setStyle('font-size',(140.0 * (1.0 + ( 1.5 * tag.get('title').replace(/[^0-9]/gi,'').toInt() - tags.length/2 ) / tags.length ) ) + '%')
			})
			.addEvents(
			{
				'click' : function(e)
				{
					var form = this.getParent('form');
					
					if(form)
					{
						e.stop();
						var inputTags = form.getElement('input[name=articleTags]');
						if(inputTags.get('value').contains(this.get('html')) == false)
						{
							inputTags.value += ((inputTags.get('value').length == 0 || inputTags.get('value').charAt(inputTags.get('value').length) == ',')?'':',') + this.get('html');
						}
						inputTags.value = inputTags.get('value').clean();
					}
				}
			});
		});
	},
	
	initTips : function()
	{	
		
		var k, that = this,
		fx = Object.append(Object.clone(Wowenkho.defaultoptions),{'link' : 'cancel'}),
		arrowElement = new Element('div',
		{
			'styles' : that.options.arrowElement.styles,
			'tween' : fx
		});
		
		this.myTips = new Tips(this.options.tips,
		{
			'className' : 'tool',
			'offset' : { 'x' : 20, 'y' : -Wowenkho.interfaceoptions.arrowElement.position.offset.y },
			'onShow' : function(el,ho)
			{
				clearTimeout(k);
				
				el.set('morph',fx)
				.setStyle('display','block')
				.morph({'opacity' : 1, 'margin-left' : 0});
				
				arrowElement.inject(el).position(
					Object.append(Object.clone(that.options.arrowElement.position),{'relativeTo':el})
				).fade('in');
			},
			
			'onHide' : function(el,ho)
			{
				k = (function()
				{
					el.morph({'margin-left':10,'opacity':0});
					arrowElement.fade('out');
				}).delay(400);
			}
		});
	},
	
	initExternals : function()
	{
		$$(this.options.externals).each(function(element,index)
		{
			element.set('target', '_blank');
		});
	},
	
	initGalleries : function()
	{
		var that = this,
			galleries = $$(this.options.galleries);
		
		galleries.each(function(element,index)
		{
			element.set('morph',Wowenkho.defaultoptions);
			
			var thumbDetails = element.getElement('.thumbdetails'),
				linkTag = element.getElement('a').set('morph',Wowenkho.defaultoptions),
				linkRel = (linkTag) ? linkTag.get('rel') : '';
			
			if(thumbDetails)
			{
				thumbDetails.setStyle('cursor','pointer').addEvents(
				{
					'click' : function(e) 
					{ 
					
						e.stop();
						
						linkTag.fireEvent('click');
						/*if(linkRel.contains('milkbox'))
						{
							$$('a[rel='+ linkRel +']').each(function(em,m)
							{
								if(em == linkTag)
								{
									milkbox.showGallery({gallery : linkRel, index: m});
								}
							});
						}
						else
						{
							window.location = linkTag.get('href');
							e.stop();
						}*/
						
					}
				});
			}
			
			element.addEvents(
			{
				'mouseenter' : function()
				{
					var parentPanel = this.getParent('.panel');
					if(parentPanel && parentPanel.retrieve('fx'))
					{
						var panelFX = parentPanel.retrieve('fx');
						panelFX.slideIn.delay(400,panelFX);
					}
				},
				
				'mouseleave' : function()
				{
					
					var parentPanel = this.getParent('.panel');
					if((parentPanel) && parentPanel.retrieve('fx') != null)
					{
						var panelFX = parentPanel.retrieve('fx');
						panelFX.slideIn.delay(400,panelFX);
					}
				}
			});
		});
		
		this.imageLoader = new Wowenkho.ImageLoader(galleries);
		galleries.fireEvent('mouseleave');
		
	},
	
	initAjaxForms : function()
	{
		if(!document.id('ajaxResult'))
		{
			this.ajaxResult = new Element('div',{'id' : 'ajaxResult', 'styles' : {'height' : 0, 'width' : 0, 'opacity' : 0}}).inject(document.id(document.body));
			//this.ajaxResult = new Element('div',{'id' : 'ajaxResult'}).inject(document.id(document.body));
		}
		
		var ajaxForms = $$(this.options.ajaxForms);
		ajaxForms.getElement('input[type=submit]').each(function(elem)
		{
			var hiddenButton = new Element('input',{'type':'hidden','name':elem.get('name'),'value':elem.get('value')}).inject(elem,'after');
		});
		
		ajaxForms.store('ajaxRequest',new Request.HTML(	{method: 'post', url : 'server.php', update : 'ajaxResult', onRequest : function() { Wowenkho.notifier.display('Processing... Please wait...'); }})).addEvents(
		{
			'submit' : function(e)
			{
				if(Wowenkho.checkForm.isChecking(this))
				{	
					this.retrieve('ajaxRequest').post(this);
				}
				e.stop();
			}
		});
	},
	
	initTextFields : function()
	{
		this.fieldFocused = null;
		
		$$(this.options.fields.elements).each(function(element,index)
		{
			if(element.get('title'))
			{
				element.store('title',element.get('title')).erase('title');
			}
			
			var fx = new Fx.Morph(element, Wowenkho.defaultoptions),
				orig = element.getStyles(this.getFXStyles(this.options.fields.focus));
				
			element.addEvents(
			{
				'blur': function()
				{
					fx.start(orig);
				},
				
				'mouseenter': function()
				{
					fx.start(this.options.fields.hover);
				}.bind(this),
				
				'mouseleave': function()
				{
					if(this.fieldFocused != element)
					{
						fx.cancel().set(orig);
					}
					else
					{
						fx.cancel().set(this.options.fields.focus);
					}
				}.bind(this),
			
				'focus': function()
				{
					fx.start(this.options.fields.focus);
					this.fieldFocused = element;
				}.bind(this)
			});	
		},this);
	},
	
	initRadios : function()
	{
		$$(this.options.radios).addEvents(
		{
			'focus': function()
			{
				this.getParent().getElements('input[type=radio][name='+this.get('name')+']').setStyle('background-color','transparent');
			}
		});	
	}
	
});

Wowenkho.Notifier = new Class(
{
	Implements: Options,
	
	options : 
	{
		element : 'notice',
		duration : 250,
		autohide : 15000,
		transition : 'expo:out',
		maskColor : '#5C3575',
		errorColor : '#fff'
	},
	
	initialize : function(opt)
	{
		this.setOptions(opt);
	},
	
	checkAutoHide : function()
	{
		return (this.options.autohide != null);
	},
	
	checkMessageError : function(message)
	{
		if((message.toLowerCase().contains('error')))
		{
			return true;
			//document.id(this.options.element).setStyles(this.options.errorColors);
		}
		else
		{
			return false;
			//document.id(this.options.element).setStyles(this.options.mainColors);
		}
	},
	
	setMessage : function(message)
	{
		document.id(this.options.element).getElement('.message').set('html',message);
	},
	
	display : function(message,urgent)
	{
		if(this.checkMessageError(message) || urgent)
		{
			message = message + '<br>';
			
			var color = (this.checkMessageError(message)) ? this.options.errorColor : this.options.maskColor;
			
			new Message(
			Object.append(Object.clone(Wowenkho.messageoptions),
			{
				'icon' : 'cautionMedium.png',
				'title' : ' ',
				'message' : message,
				'width' : 600,
				'onShow' : function()
				{
					
					document.id(document.body).mask({
						'style' : 
						{
							'background-color' : color,
							'opacity' : 0,
							'z-index' : 2
						},
						'destroyOnHide' : true
					}).get('mask').element.setStyle('opacity',0.9);
					
					
				},
				'onComplete' : function()
				{
					document.id(document.body).unmask();
				}
			})).tell();
		}
		else
		{
			var words = message.split(' ').length,
				speed = 2000 + ((words/3)*1000);
			
			new Message(
			Object.append(Object.clone(Wowenkho.messageoptions),{
				'icon' : 'okMedium.png',
				'title' : ' ',
				'message' : message,
				'waitTime' : speed
			})).say();
		}
		
	},
	
	hideElement : function()
	{
		this.elementFX.start(0);
	}
});

Wowenkho.CheckForm = new Class(
{
	Implements : [Options, Wowenkho.FxHelper],
	
	options : Wowenkho.checkformoptions,
	
	initialize : function(options)
	{
		this.setOptions(options);
		
		var that = this;
		this.initRules();
		
		$$(this.options.forms).addEvent('submit',function(e)
		{
			that.clearErrors(this);
			that.startChecking(this);
			that.validateFields(this);
			that.processValidation(this,e);
		});
	},
	
	addError : function(form,error)
	{
		form.errorResult.include(error);
	},
	
	clearErrors : function(form)
	{
		form.errorResult = [];
	},
	
	fetchErrors : function(form)
	{
		return form.errorResult.join(', ');
	},
	
	startChecking : function(form)
	{
		form.proceed = true;
	},
	
	stopChecking : function(form)
	{
		form.proceed = false;
	},
	
	isChecking : function(form)
	{
		return form.proceed || false;
	},
	
	initRules : function()
	{
		this.rules = {
			required : function(element)
			{
				if(element.retrieve('title') && !element.get('disabled'))
				{
					if(element.get('type') != 'radio')
					{
						var textvalue = (typeof(tinyMCE) != 'null' && tinyMCE.get(element.get('id')) != null ) ? tinyMCE.get(element.get('id')).getContent() : element.get('value');
						return !(textvalue.clean() == '');
					}
					else
					{
						var buttonValues = element.getParent().getElements('input[name='+element.get('name')+']:checked');
						return (buttonValues.length > 0);
					}
				}
				else
				{
					return true;
				}
			},
			
			numeric : function(element)
			{
				if(element.hasClass('numericData'))
				{
					if(element.get('value').clean() != '' && isNaN(element.get('value').toFloat()))
					{
						return false;
					}
					else
					{
						return true;
					}
				}
				else
				{
					return true;
				}
			},
			
			nospaces : function(element)
			{
				if(element.hasClass('noSpaces'))
				{
					if(element.get('value').clean().contains(' '))
					{
						return false;
					}
					else
					{
						return true;
					}
				}
				else
				{
					return true;
				}
			},
			
			minimum : function(element)
			{
				if(element.get('class').contains('minimum-'))
				{
					var minimumCount = element.get('class').split(' ').filter(function(item,index)
					{
						return item.contains('minimum-');
					})[0];
					
					minimumCount = minimumCount.replace('minimum-','').toInt();
					
					if(element.get('value').clean().length < minimumCount)
					{
						return false;
					}
					else
					{
						return true;
					}
				}
				else
				{
					return true;
				}
			},
			
			email : function(element)
			{
				if(element.hasClass('emailTest'))
				{
					var emailRegex = new RegExp(/^([a-zA-Z0-9]{1,})(((\.|-|_)[a-zA-Z0-9]{1,})+)?@([a-z]{3,})(\-[a-z0-9]{3,})?(\.[a-z]{2,})+$/);
					
					return element.get('value').test(emailRegex);
				}
				else
				{
					return true;
				}
			}
		};
		
	},
	
	validateFields : function(form)
	{
		Object.each(this.rules,function(rule,name)
		{
			if(this.isChecking(form))
			{
				form.getElements(this.options.inputs).set('morph',Wowenkho.defaultoptions).each(function(element,index)
				{
					var title = Array.pick([element.retrieve('title'), element.get('title'), element.get('alt'), element.get('name'), element.get('rel'), element.get('tag')]),
								orig = element.getStyles(this.getFXStyles(this.options.errorFX));
					
					if(!rule(element))	 
					{
						this.addError(form,title);	
						this.stopChecking(form);
						
						if(element.get('tag') == 'textarea' && typeof(tinyMCE) == 'object' && tinyMCE.get(element.get('id')) != null)
						{
							document.id(tinyMCE.get(element.get('id')).getBody()).morph(this.options.errorFX);
						}
						else if(element.get('tag') == 'input' && element.get('type') == 'radio')
						{
							$$(element.getParent().getElements('input[type=radio][name='+element.get('name')+']')).setStyles(this.options.errorFX);
						}
						else
						{
							element.morph(this.options.errorFX);	
						}
					}
					else
					{
						if(element.get('tag') == 'textarea' && typeof(tinyMCE) == 'object' && tinyMCE.get(element.get('id')) != null)
						{
							document.id(tinyMCE.get(element.get('id')).getBody()).morph('body');
						}
						else
						{
							element.morph(orig);	
						}
					}
				},this);
			}
		},this);
	},
	
	processValidation : function(form,e)
	{
		if(!this.isChecking(form))
		{
			Wowenkho.notifier.display(['Error: Some of the values you have placed are either missing or invalid. These fields are marked for your reference:<br><strong>',this.fetchErrors(form),'</strong>'].join(''));
			Wowenkho.windowScroll.toElement(form);
			e.stop();
		}
	}

});

Wowenkho.Panels = new Class(
{
	Implements : [Options,Wowenkho.FxHelper],
	
	options : 
	{
		togglers : '.togglepanel',
		panels : '.panel',
		toggleColors : {'background-color' : '#800', 'color' : '#fff'},
		tabOptions : {}
	},
	
	initialize : function(options)
	{
		this.setOptions(options);
		this.initPanels();
		this.initTabs();
		this.initTogglers();
	},
	
	initPanels : function()
	{
		this.panelFX = [];

		$$(this.options.panels).each(function(element,index)
		{
			this.panelFX[index] = new Fx.Slide(element,Object.append(Object.clone(Wowenkho.defaultoptions),{'duration':100})).hide();
			
			element.store('fx',this.panelFX[index]);
			
		},this);
		
	},
	
	initTabs : function()
	{
		this.tabItems = [];
		$$(this.options.panels).each(function(element,index)
		{
			this.tabItems[index] = new Wowenkho.Tabs(element,this.options.tabOptions);
		},this);
	},
	
	initTogglers : function()
	{
		$$(this.options.togglers).each(function(element,index)
		{
			var panelFX = this.panelFX[index];
			
			element.addEvents(
			{
				'click' : function()
				{
					this.togglePanel(index);
				}.bind(this)
			});
			
			if(element.get('rel') && element.get('rel') == 'open')
			{
				this.showPanel(index);
			}
			
		},this);
	},
	
	togglePanel : function(index)
	{
		var panelFX = this.panelFX[index];
		
		panelFX.toggle().chain(function()
		{
			if(panelFX.open)
			{
				Wowenkho.windowScroll.toElement(panelFX.element);
			}
		});
	},
	
	hidePanel : function(index)
	{
		var panelFX = this.panelFX[index];
		
		if(panelFX)
		{
			panelFX.hide();
		}
	},
	
	showPanel : function(index)
	{
		var panelFX = this.panelFX[index];
		
		if(panelFX)
		{
			panelFX.show();
		}
	},
	
	goToTab : function(panelIndex,itemID,buttonIndex)
	{
		
		console.log(panelIndex,itemID,buttonIndex);
		
		var displayChain = new Chain();
		
		displayChain.chain(
			function()
			{
				if(this.tabItems[panelIndex])
				{
					this.tabItems[panelIndex].goToTab(itemID,buttonIndex);
					displayChain.callChain();
				}
			}.bind(this),
			function()
			{
				if(document.id(itemID))
				{
					Wowenkho.windowScroll.toElement(document.id(itemID));
				}
			}.bind(this)
		);
		
		displayChain.callChain();
	}
});

Wowenkho.Tabs = new Class(
{
	Implements : [Options,Wowenkho.FxHelper],
	
	options : 
	{
		items : '.item',
		collapse : '.collapseTabs',
		buttons : '.tabButton',
		tabs : '.tab',
		hoverFX : {'background-color' : '#def', 'color' : '#369'},
		focusFX : {'background-color' : '#adf', 'color' : '#000'},
		blurFX : {'background-color' : '#fafafa', 'color' : '#aaa'}
	},
	
	initialize : function(element,options)
	{
		this.element = document.id(element);
		this.setOptions(options);
		
		if(this.element)
		{
			this.initTabs();
			this.initButtons();
			this.initCollapse();
		}
	},
	
	initTabs : function()
	{
		this.items = this.element.getElements(this.options.items);
		this.tabs = [];
		this.items.each(function(el,i)
		{
			this.tabs[i] = el.getElements(this.options.tabs);
			this.tabs[i].set('tween',Wowenkho.defaultoptions)
			.each(function(tab,x)
			{
				tab.store('panel',this.element).store('item',el).store('button',el.getElements(this.options.buttons)[x])
			},this);
			
			el.store('selectedButton',0);
		},this);
	},
	
	showTab : function(tabEl)
	{
		tabEl.retrieve('item').getElements(this.options.tabs).setStyles(
		{
			'display':'none',
			'opacity':0
		});
		tabEl.setStyle('display','block').fade('in');
	},
	
	initButtons : function()
	{
		var that = this;
		this.buttons = [];
		this.items.each(function(el,i)
		{
			this.buttons[i] = el.getElements(this.options.buttons);
			
			if(this.buttons[i].length > 0)
			{
				this.buttons[i].each(function(b,x)
				{
					b.store('item',el)
					.store('tab',that.tabs[i][x])
					.store('index',x);
				})
				.set('morph',Wowenkho.defaultoptions)
				.addEvents(
				{
					'mouseenter' : function()
					{
						if(that.checkSelectedButton(el) != this.retrieve('index'))
						{
							this.morph(that.options.hoverFX);
						}
					},
					
					'mouseleave' : function()
					{
						if(that.checkSelectedButton(el) != this.retrieve('index'))
						{
							this.morph(that.options.blurFX);
						}		
					},
					
					'click' : function(e)
					{
						if(e)
						{
							e.stop();
						}
						
						if(that.checkSelectedButton(el) != this.retrieve('index'))
						{
							that.selectButton(this);
							that.fixPanelHeight();
						}
					}
				});
				
				this.selectButton(this.buttons[i][0]);
			}
			
		},this);
	},
	
	fixPanelHeight : function()
	{
		var panelFX = this.element.retrieve('fx');
		if(panelFX)
		{
			panelFX.slideIn.delay(100,panelFX);
		}
	},
	
	checkSelectedButton : function(itemEl)
	{
		return itemEl.retrieve('selectedButton');
	},
	
	selectButton : function(buttonEl)
	{
		var itemEl = buttonEl.retrieve('item');
		itemEl.store('selectedButton',buttonEl.retrieve('index'));
		this.showTab(buttonEl.retrieve('tab'));
		
		buttonEl.retrieve('item').getElements(this.options.buttons).morph(this.options.blurFX);
		buttonEl.morph(this.options.focusFX);
		
	},
	
	initCollapse : function()
	{
		var collapseTabs = this.element.getElements(this.options.collapse);
		
		if(collapseTabs.length > 0)
		{
			collapseTabs.addEvent('click',function(e)
			{
				e.stop();
				this.collapseAll();
			}.bind(this));
		}
	},
	
	collapseAll : function()
	{
		this.items.each(function(el,i)
		{
			this.selectButton(this.buttons[i][0]);
			this.fixPanelHeight();
		},this);
	},
	
	goToTab : function(itemID,buttonIndex)
	{
		var item = document.id(itemID);
		if(item)
		{
			var button = item.getElements('.tabButton')[buttonIndex],
			panel = item.getParent('.panel');
			
			if(button)
			{
				button.fireEvent('click');
			}
			else
			{
				if(panel)
				{
					panel.retrieve('fx').slideIn();
				}
			}
		}
	}
});

Wowenkho.Upload = new Class(
{
	Implements : Options,
	
	options : 
	{
		'attachPanels' : '.attach',
		'attachButtons' : '.attachFiles',
		'attachLists' : '.attachList',
		'attachData' : '.data'
	},
	
	initialize : function(options)
	{
		this.setOptions(options);
		this.initElements();
		this.runAttach();
	},
	
	initElements : function()
	{
		this.attachPanels = $$(this.options.attachPanels);
		this.attachData = $$(this.options.attachData).setStyle('display','none');
	},
	
	runAttach : function()
	{
		var that = this;
		
		
		this.attachPanels.each(function(el,i)
		{
			var attachData = {};
			
			el.getElements(that.options.attachData).each(function(d,x)
			{
				var name = d.get('title'),
					value = d.get('rel');
				
				attachData[name] = value;
				
			});
			
			var list = el.getElement(that.options.attachLists),
				buttons = el.getElements(that.options.attachButtons),
				up = new FancyUpload3.Attach(list, buttons, 
				{
					method: 'post',
					path: 'js/uploader/Swiff.Uploader.swf',
					url: 'uploader.php',
					queued: 1,
					instantStart : true,
					timeLimit : 300,
					fieldName: 'uploadedfile',
					data : attachData,
					typeFilter : 
					{
						'Images (*.jpg, *.jpeg, *.gif, *.png)': '*.jpg; *.jpeg; *.gif; *.png'
					},
					
					onStart : function()
					{
						buttons.setStyle('display','none');
						list.getParent('.tab').retrieve('button').fireEvent('click');
					},
					
					onSelectFail: function(files) {
						files.each(function(file) {
							new Element('li', {
								'class': 'file-invalid',
								events: {
									click: function() {
										this.destroy();
									}
								}
							}).adopt(
								new Element('span', {html: file.validationErrorMessage || file.validationError})
							).inject(this.list, 'bottom');
						}, this);	
					},
					
					onFileSuccess: function(file) {
						
						new Element('img', {'src': './images/accept.png', 'alt' : '', 'styles': {'vertical-align' : 'middle'}}).inject(file.ui.element, 'top');
						file.ui.element.highlight('#e6efc2');
					},
					
					onFileError: function(file) {
						file.ui.cancel.set('html', 'Retry').removeEvents().addEvent('click', function() {
							file.requeue();
							return false;
						});
						
						new Element('span', {
							html: file.errorMessage,
							'class': 'file-error'
						}).inject(file.ui.cancel, 'after');
					},
					
					onFileRequeue: function(file) {
						file.ui.element.getElement('.file-error').destroy();
						
						file.ui.cancel.set('html', 'Cancel').removeEvents().addEvent('click', function() {
							file.remove();
							return false;
						});
						
						this.start();
					},
					
					onComplete : function()
					{
						window.location.hash = '';
						window.location.replace('?goToTab=' + $$('.panel').indexOf(el.getParent('.panel')) + ':' + el.get('rel') + ':3&r=' + Math.random().toString().toMD5() + '#' + el.get('rel'));
					}
			 
				});
		 
		});
	}
	
});

Wowenkho.Carousel = new Class(
{
	Implements: Options,
	
	options : 
	{
		container : 'carousel',
		delay : 7000,
		minCount : 3,
		offset : 0,
		mode : 'vertical' //vertical, horizontal, fade
	},
	
	initialize : function(opt)
	{
		this.setOptions(opt);
		
		if(document.id(this.options.container))
		{
			this.initElements();
			this.startSlide.delay(1600,this);
		}
	},
	
	hasEnoughElements : function()
	{
		return this.elements.length > this.options.minCount;
	},
	
	initElements : function()
	{
		this.container = document.id(this.options.container);
		this.container.store('origDim',this.container.getSize());
		this.elements = this.container.getChildren();
		var firstElement = this.elements[0], wrapperSize = {}, containerSize = {};
		this.wrapper = new Element('span').setStyle('display','block').inject(this.container).adopt(this.elements);
		
		switch(this.options.mode)
		{
			case  'vertical':
			{
				wrapperSize = { 'height' : firstElement.getSize().y * ((this.elements.length >= this.options.minCount) ? this.options.minCount : this.elements.length) };
				containerSize = wrapperSize;
				
				this.elements.setStyles(
				{
					'position' : 'relative'
				});
			
			}
			break;
			
			case 'fade' :
			{
				this.setOptions({'minCount':1});
				wrapperSize = { 'height' : firstElement.getSize().y * ((this.elements.length >= this.options.minCount) ? this.options.minCount : this.elements.length) };
				containerSize = wrapperSize;
				
				this.elements.setStyles(
				{
					'position' : 'absolute',
					'top' : 0,
					'left' : 0,
					'width' : this.container.retrieve('origDim').x,
					'opacity' : 0
				});
				
				firstElement.setStyle('opacity',1);
			}
			break;
			
			
			case 'horizontal':
			{
				wrapperSize = { 'width' : (firstElement.getSize().x + firstElement.getStyle('margin-left').toInt()) * this.elements.length };
				containerSize = { 
					'width' : this.options.offset + (firstElement.getSize().x + firstElement.getStyle('margin-left').toInt()) * ((this.elements.length >= this.options.minCount) ? this.options.minCount : this.elements.length),
					'height' : firstElement.getSize().y 
				};
				
				this.elements.setStyles(
				{
					'float':'left',
					'position' : 'relative',
					'width' : this.container.retrieve('origDim').x
				});
				
			}
			break;
		}

		this.wrapper.setStyles(wrapperSize);
		this.container.setStyles(
		Object.append(
			{ 
				'overflow' : 'hidden', 
				'position' : 'relative'
			},containerSize)
		)
		.addEvents(
		{
			'mouseenter' : function()
			{
				this.pauseSlide();
			}.bind(this),
			
			'mouseleave' : function()
			{
				this.startSlide();
			}.bind(this)
		});
		
		//this.imageloader = new Wowenkho.ImageLoader(this.elements);
	},
	
	startSlide : function()
	{
		this.pauseSlide();
		
		if(this.hasEnoughElements())
		{
			this.slideInterval = this.slideElements.periodical(this.options.delay,this);
		}
	},
	
	slideElements : function()
	{
		var firstElement = this.elements.shift(),
			fxChain = new Fx.Morph(firstElement,
			{
				'duration' : 1000,
				'transition' : 'expo:in:out', 
				'link' : 'cancel' 
			});
		
		switch(this.options.mode)
		{	
			case 'vertical' :
			{
				fxChain.start(
					{
						'margin-top' : -(firstElement.getSize().y)
					})
				.chain(
					function()
					{
						firstElement.inject(this.wrapper);
						this.elements.push(firstElement);
						fxChain.callChain();
					}.bind(this),
					
					function()
					{
						fxChain.start(
						{
							'margin-top' : [firstElement.getSize().y,0]
						});
					}.bind(this)
				);	
			}
			break;
			
			case 'horizontal' :
			{
				fxChain.start(
				{
					'margin-left' : -(firstElement.getSize().x)
				})
				.chain(
					function()
					{
						firstElement.inject(this.wrapper);
						this.elements.push(firstElement);
						fxChain.callChain();
					}.bind(this),
					
					function()
					{
						fxChain.start(
						{
							'margin-left' : [firstElement.getSize().x,0]
						});
					}.bind(this)
				);	
			}
			break;
			
			case 'fade' : 
			{
				var nextElement = firstElement.getNext();
				nextElement.fade(0,1);
				
				fxChain.start(
				{
					'opacity' : [1,0]
				})
				.chain(
					function()
					{
						firstElement.inject(this.wrapper);
						this.elements.push(firstElement);
						fxChain.callChain();
					}.bind(this)
				);	
			}
			break;
		}
	},
	
	pauseSlide : function()
	{
		if(this.hasEnoughElements())
		{
			clearInterval(this.slideInterval);
		}
	}
});

Wowenkho.ImageLoader = new Class(
{
	Implements : Options,
	
	options :
	{
		'placeholder' : 'images/placeholder.png'
	},
	
	initialize : function(elements,options)
	{
		this.elements = $$(Array.pick([document.id(elements),$$(elements)]));
		
		if(this.elements.length > 0)
		{
			this.elements.setStyle('visibility','hidden');
			
			this.setOptions(options);
			this.initImages();
			this.initLoading();
			this.initAssets();
		}
	},
	
	initImages : function()
	{
		var that = this;
		this.imagesURL = []; 
		this.images = [];
		
		this.elements.setStyle('visibility','visible').each(function(el,i)
		{
			var img;
			//if element is image itself
			if(el.get('tag') == 'img' && el.get('src'))
			{
				
				img = el.get('src');
				this.imagesURL.push(img);
				
				var outer = new Element('div').wraps(el);
				this.elements[i] = outer;
				this.images.push(el);
			}
			
			//if element has a background image
			else if(el.getStyle('background-image') != 'none')
			{
				img = el.getStyle('background-image').replace(/url\("?([^\\")]+?)"?\)/,'$1');
				
				this.imagesURL.push(img);
				
				var inner = new Element('div',
				{
					'class' : 'img',
					'styles' : el.getStyles(
					'background-repeat',
					'background-color',
					'background-position',
					'background-image',
					'background-size',
					'-moz-background-size',
					'-o-background-size',
					'height',
					'width'
				)
					
				}).adopt(el.getChildren()).inject(el);
				
				this.images.push(inner);
			}
			
			//if element has an image inside
			else if(el.getElement('img') && el.getElement('img').get('src'))
			{
				img = el.getElement('img').get('src');
				this.imagesURL.push(img);
				this.images.push(el.getElement('img'));
			}
			
			//if element has a child div which bears the background image
			else if(el.getElement('div') && el.getElement('div').getStyle('background-image') != 'none')
			{
				img = el.getElement('div').getStyle('background-image').replace(/url\("?([^\)]+)"?\)/,'$1').replace('"','');
				
				this.imagesURL.push(img);
				this.images.push(el.getElement('div'));
			}
			
			
			if(img)
			{
				el.store('image',img);
				el.setStyles(
				{
					'background-image':'none'
				});
			}
			
			
		},this);
		
		this.images = $$(this.images);
		
		this.images.setStyles(
		{
			'visibility' : 'hidden',
			'opacity' : 0
		});
	},
	
	initAssets : function()
	{
		var that = this;
		this.imageAssets = new Asset.images(this.imagesURL, 
		{
			onProgress : function(c,i)
			{
		
				var imageChain = new Chain(), 
					that = this;
				
				imageChain.chain(
					function() { that.hideLoading(i,this); },
					function() { that.showImage(i,this); }
				);
				
				imageChain.callChain();
				
			}.bind(this)
		});
		
	},
	
	showImage : function(index,chain)
	{
		
		var imageURL = this.imagesURL[index],
			opacity = this.options.opacity
			els = this.elements.filter(function(el,i)
			{
				return el.retrieve('image') == imageURL;
			});
		
		els.each(function(element,i)
		{
			var index = this.elements.indexOf(element);
			
			this.images[index].setStyles(
			{
				'visibility' : 'visible'
			}).fade('in');
		},this);
		
		chain.callChain();
	},
	
	hideLoading : function(index,chain)
	{
		var imageURL = this.imagesURL[index],
			els = this.elements.filter(function(el,i)
			{
				return el.retrieve('image') == imageURL;
			})
		
		els.each(function(element,i)
		{	
			var loading = element.getElement('.loading');
			
			if(loading)
			{
				loading.destroy();
			}
			
			chain.callChain();
		});
	},
	
	initLoading : function()
	{
		var loading = new Element('div',
		{
			'class':'loading',
			'html' : '<img src="images/loading.gif" alt="" >',
			'styles' : 
			{
				'width' : 32,
				'height' : 32,
				'font' : 'bold 14px/1 Arial,sans-serif',
				'color' : '#000',
				'padding' : 10,
				'float' : 'left'
			}
		});
		
		this.elements.each(function(div,i)
		{
			var lc = loading.clone().inject(div,'top');
			
		},this);
	}
});


Wowenkho.ImageSets = new Class(
{
	Implements : Options,
	
	options : 
	{
		'container' : 'imagesets',
		'imagesClass' : '.imageitem',
		'imagesPerSet' : 9,
		'prevArrow' : 'images/previous.gif',
		'nextArrow' : 'images/next.gif',
		'prevArrowHover' : 'images/previoushover.gif',
		'nextArrowHover' : 'images/nexthover.gif',
		'imageIDPrefix' : 'imageset',
		'thumbnailClass' : '.thumbnail'
	},
	
	initialize : function(options)
	{
		this.setOptions(options);
		
		this.container = document.id(this.options.container);
		
		if(this.container)
		{
			this.images = $$(this.container.getElements(this.options.imagesClass));
			this.clearElement = new Element('div', { 'class' : 'clear' });
		
			if(this.needsPaging())
			{
				this.initSets();
				this.initContainer();
				this.initScroll();
				this.initArrows();	
				this.scrollMove(0);
			}
			this.clearElement.inject(this.container);
			this.imageloader = new Wowenkho.ImageLoader(this.images.getElements(this.options.thumbnailClass));
		}
	},
	
	needsPaging : function()
	{
		return this.images.length > this.options.imagesPerSet;
	},
	
	initSets : function()
	{
		
		this.setElement = new Element('div',
		{
			'class' : 'imageset',
			'styles' : 
			{
				'width' : this.container.getSize().x,
				'float' : 'left'
			}
		});
		
		var iArray = [], c = 0;
		
		this.images.each(function(el,i)
		{
			iArray.push(el);
			
			if((i+1) % (this.options.imagesPerSet) == 0 || i == this.images.length - 1)
			{
				var setClone = this.setElement.clone().set('id',this.options.imageIDPrefix + c).adopt(iArray).inject(this.container),
					clearClone = this.clearElement.clone().inject(setClone);
				
				iArray = [];
				c++;
			}
		},this);
	},
	
	initContainer : function()
	{
		this.imageSets = $$(this.container.getElements('.imageset'));
		
		$$(this.imageSets.getElements('div')).setStyles(
		{
			'z-index' : 2
		})
		
		this.container.setStyles(
		{
			'overflow' : 'hidden',
			'height' : this.imageSets[0].getSize().y
		});
		
		this.imagesElement = new Element('div',
		{
			'id' : 'imagesetswrapper',
			'styles' : 
			{
				'height' : '100%',
				'width' : this.imageSets[0].getSize().x * this.imageSets.length
			}
		}).adopt(this.imageSets).inject(this.container);
		
		this.wrapperElement = new Element('div',{'styles' : {'position' : 'relative'}}).wraps(this.container);
		
	},
	
	initScroll : function()
	{
		this.scrollImages = new Fx.Scroll(this.container,Wowenkho.defaultoptions);
		this.currentScroll = 0;
		this.maxScroll = this.imageSets.length;
	},
	
	
	scrollMove : function(i)
	{
		var el = document.id(this.options.imageIDPrefix + i);
		if(el)
		{
			
			this.scrollImages.toElement(el);
			
			this.currentScroll = i;
			
			if(this.currentScroll == 0)
			{
				this.prevArrow.setStyle('display','none');
			}
			else
			{
				this.prevArrow.setStyle('display','block');
			}
			
			if(this.currentScroll == this.maxScroll - 1)
			{
				this.nextArrow.setStyle('display','none');
			}
			else
			{
				this.nextArrow.setStyle('display','block');
			}
		}
		
		
	},
	
	initArrows : function()
	{
		var that = this, 
		prevPos = {
			'relativeTo' : this.container,
			'position' : 'centerLeft',
			'edge' : 'centerRight',
			'offset' : {'x' : 15, 'y' : 0}
		},
		nextPos = {
			'relativeTo' : this.container,
			'position' : 'centerRight',
			'edge' : 'centerLeft',
			'offset' : {'x' : -15, 'y' : 0}
		},
		position = function(x,pos)
		{
			x.position(pos);	
		};
		
		
		this.prevArrow = new Element('a',
		{
			'id' : 'prevArrowButton',
			'href' : '#',
			'class' : 'arrow',
			'alt' : 'previous',
			'events' : 
			{
				'click' : function(e)
				{
					e.stop();
					this.blur();
					that.scrollMove(that.currentScroll-1);
				}
			}
		}).inject(this.wrapperElement);
		
		
		this.nextArrow = new Element('a',
		{
			'id' : 'nextArrowButton',
			'href' : '#',
			'class' : 'arrow',
			'alt' : 'next',
			'events' : 
			{
				'click' : function(e)
				{
					e.stop();
					this.blur();
					that.scrollMove(that.currentScroll+1);
				}
			}
		}).inject(this.wrapperElement);
		
		
		position(this.prevArrow,prevPos);
		position(this.nextArrow,nextPos);
		
		window.addEvent('resize',function()
		{
			position(this.prevArrow,prevPos);
			position(this.nextArrow,nextPos);
		}.bind(this));
	}
});

Wowenkho.ImagePickers = new Class(
{
	Implements: [Options,Events],
	
	options : 
	{
		'form' : '.imagepicker'
	},

	initialize : function(options)
	{
		this.setOptions(options);
		
		this.pickers = $$('.imagepicker');
		
		if(this.pickers.length > 0 && typeOf(tinyMCE) != 'null')
		{
			this.initPickers();
		}
	},
	
	initPickers : function()
	{
		this.pickers.addEvent('submit',function(e)
		{
			e.stop();
			var selected = this.getElement('input[name=imageSelected]:checked'),
			alignment = this.getElement('select[name=imageAlignment]'),
			textarea = this.getParent('.tab').getElement('textarea'),
			mce = tinyMCE.get(textarea.get('id'));
			
			
			
			if(selected != null)
			{
				var pos = '';
				switch(alignment.get('value'))
				{
					case 'left'	:
					 pos = 'class="floatleft"';
					break;
					
					case 'right'	:
					 pos = 'class="floatright"';
					break;
					
					case 'center'	:
					 pos = 'style="display: block; margin: 10px auto;"';
					break;
				}
				
				
				if(typeOf(mce.selection.getStart()) == 'document')
				{
					new Message(
					Object.append(Object.clone(Wowenkho.messageoptions),
					{
						'icon' : 'cautionMedium.png',
						'title' : ' ',
						'message' : 'Error: Select from the textbox where you want to insert your image<br>',
						'width' : 600,
						'onShow' : function()
						{
							
							document.id(document.body).mask({
								'style' : 
								{
									'background-color' : '#900',
									'opacity' : 0,
									'z-index' : 2
								},
								'destroyOnHide' : true
							}).get('mask').element.setStyle('opacity',0.8);
							
							
						},
						'onComplete' : function()
						{
							document.id(document.body).unmask();
						}
					})).tell();
				}	
				else
				{
					mce.selection.setContent('<img src="' + selected.get('value') + '" ' + pos + '>');
				}
				
			}
			else
			{
				new Message(
				Object.append(Object.clone(Wowenkho.messageoptions),
				{
					'icon' : 'cautionMedium.png',
					'title' : ' ',
					'message' : 'Error: Please select an image to insert<br>',
					'width' : 600,
					'onShow' : function()
					{
						
						document.id(document.body).mask({
							'style' : 
							{
								'background-color' : '#900',
								'opacity' : 0,
								'z-index' : 2
							},
							'destroyOnHide' : true
						}).get('mask').element.setStyle('opacity',0.8);
						
						
					},
					'onComplete' : function()
					{
						document.id(document.body).unmask();
					}
				})).tell();
			}
		});
	
	}
});

var Scrollable = new Class({
    initialize: function(element, options) {
        // Renders a scrollbar over the given element
        this.element = element;
        this.active = false;
        var scrollable = this;

        // Some default options
        options = options || {};
        options.autoHide = (typeOf(options.autoHide) != 'null' ? options.autoHide : 1);
        options.fade = (typeOf(options.fade) != 'null' ? options.fade : 1);
				
        new Element('div',{
            'class': 'cont'
        }).wraps(element);
				
        this.container = new Element('div', {
            'class': 'scrollbar',
						'tween' : Wowenkho.defaultoptions,
            html: '<div class="knob"></div>'
        }).inject(element, 'bottom');
        
        this.slider = new Slider(this.container, this.container.getElement('div'), {
            mode: 'vertical',
            onChange: function(step) {
                element.scrollTop = ((element.scrollHeight - element.clientHeight) * (step / 100));
            }
        });
        this.reposition.delay(50, this);

        // Making the element scrollable via mousewheel
        element.addEvent('mouseover', function() {
            if (this.scrollHeight > this.clientHeight) {
                if (options.autoHide && options.fade) scrollable.container.fade('in');
                else if (options.autoHide && !options.fade) scrollable.container.fade('show');

                this.addEvent('mousewheel', function(event) {
                    event.preventDefault();    // Stops the entire page from scrolling
                    this.scrollTop = this.scrollTop - (event.wheel * 30);
                    scrollable.slider.set(Math.round((this.scrollTop / (this.scrollHeight - element.clientHeight)) * 100));
                });
            }
        });
        element.addEvent('mouseout', function() {
            if (options.autoHide && options.fade) scrollable.container.fade('out');
            else if (options.autoHide && !options.fade) scrollable.container.fade('hide');

            this.removeEvents('mousewheel');
        });
        window.addEvent('resize', function() {
            scrollable.reposition.delay(50,scrollable);
        });

        // Initial hiding of the scrollbar
        if (options.autoHide) scrollable.container.fade('hide');

        return this;
    },
    reposition: function() {
        // Repositions the scrollbar by rereading the container element's dimensions/position
        var initSize = this.element.getComputedSize();
        var containerSize = this.container.getSize();
        var initPos = this.element.getPosition();
        //var relpos=getRelPos(this.element);
        this.container.setStyles({
            height: initSize['height'],
            top: (initSize['computedTop']),
            left: (initSize['totalWidth']-containerSize.x)
        });
        this.slider.autosize();
    }
});

window.addEvent('domready',function()
{
	
	Wowenkho.notifier = new Wowenkho.Notifier();
	Wowenkho.windowScroll = new Fx.Scroll(window,{duration: 500, transition: 'expo:in:out', link: 'cancel', offset: {'x' : 0, 'y' : -50}});
	Wowenkho.checkForm = new Wowenkho.CheckForm();
	Wowenkho.control = new Wowenkho.Control();
	Wowenkho.upload = new Wowenkho.Upload();
	Wowenkho.panels = new Wowenkho.Panels();
	Wowenkho.imagesets = new Wowenkho.ImageSets({'imagesPerSet':6});
	Wowenkho.imagepickers = new Wowenkho.ImagePickers();
	$$('.scrollable').each(function(el){new Scrollable(el);});

});
