var mootools = new Class({
	
	Implements: [Options],
	
	options: {
		gamesLoaded:false
	},
	initialize: function(options){
		this.setOptions(options);
		this.skyscraper();
	},
	skyscraper: function() {
		var el = $('bannerRight');
		if(el) el.setStyle('visibility','visible');
	},
	clickLogo: function() {
		var el = $('logo');
		if(el) {
			el.addEvents({
				'mouseenter':function(){ this.setStyle('cursor','pointer'); },
				'mouseleave':function(){ this.setStyle('cursor','auto'); },
				'click':function(e){ e.stop();window.location.href='http://www.spillxl.com'; }
			});
		}
	},
	myGames: function(){
		var height = 96;
		var el = $('myGamesButton');
		var cont = $('myGamesContent');
		var img = $('myGamesIMG');
		if(el) {
			cont.setStyle('height','0px');
			var slider = cont.set('morph',{duration:300, wait:false});
			
			var req = new Request.HTML({
				url:'_mygames.php',
				update:cont,
				method:'get',
				evalScripts:true,
				link:'chain',
				onComplete:function(){
					if(Cookie.read("myGamesButton")=='open') {
						cont.setStyle('height',height+'px');
						img.src='http://www.spillxl.com/images/myGamesOpened.gif';
					}
				}
			}).send();
			
			el.addEvents({
				'mouseenter':function(){
					this.setStyle('background-color','#FFFFFF');
					this.setStyle('cursor','pointer');
				},
				'mouseleave':function(){
					this.setStyle('background-color','#93CFE5');
					this.setStyle('cursor','auto');
				},
				'click':function(e){
					if(cont.getStyle('height').toInt()=='0') {
						Cookie.write("myGamesButton","open");
						img.src='http://www.spillxl.com/images/myGamesOpened.gif';
						slider.morph({'height':height+'px'});
					}
					if(cont.getStyle('height').toInt()==height) {
						Cookie.write("myGamesButton","closed");
						img.src='http://www.spillxl.com/images/myGamesClosed.gif';
						slider.morph({'height':'0px'});
					}
				}
			});
		}
	},
	myGamesRemove: function(elements,update,lang_question) {
		$$(elements).each(function(el){
			var parent = el.getParent();
			var fx = parent.set('morph',{
				duration:500,wait:false,
				onComplete:function(){
					parent.destroy();
				}
			});
			el.addEvents({
				'mouseenter':function(){ this.setStyle('cursor','pointer'); },
				'mouseleave':function(){ this.setStyle('cursor','auto'); },
				'click':function(e){
					if(window.confirm(lang_question)) {
						var req = new Request.HTML({
							url:'_removeGame.php',
							update: $(update),
							method:'get',
							data:'id='+el.id,
							link:'chain',
							onComplete:function(){
								fx.morph({'opacity':0});
							}
						}).send();
					}
				}
			});
		});
	},
	myGamesSwitch:function(element,autostart,cont,url,height){
		element = $(element);
		cont = $(cont);
		var duration = 300;
		var start = new Fx.Morph(cont,{
			duration:duration,
			onComplete:function(){
				this.req = new Request.HTML({
					url:url,
					update:cont,
					method:'get',
					evalScripts:true,
					link:'chain',
					onComplete:function(){
						new Fx.Morph(cont,{ duration:duration }).start({'height':height});
					}
				}).send();
			}
		});
		if(autostart) {
			start.start({'height':0});
		} else {
			element.addEvent('click',function(e) {
				e.stop();
				start.start({'height':0});
			});
		}
	},
	saveGame: function(element,url,update,lang_saved) {
		var element = $(element);
		var update = $(update);
		if(element) {
			element.addEvents({
				'mouseenter':function(){
					this.setStyle('background-color','#FFFFFF');
					this.setStyle('cursor','pointer');
				},
				'mouseleave':function(){
					this.setStyle('background-color','#93CFE5');
					this.setStyle('cursor','auto');
				},
				'click':function(e){
					e.stop();
					var req = new Request.HTML({
						url:url,
						update:update,
						method:'get',
						data:'id='+element.title,
						link:'chain',
						onComplete:function(){
							if ($('myGamesContent').getStyle('height').toInt() > 0) {
								this.myGamesSwitch('',true,'myGamesContent','_mygames.php',96);
							} else {
								this.myGamesSwitch('',true,'myGamesContent','_mygames.php',0);
							}
							//alert(lang_saved);
							element.destroy();
						}.bind(this)
					}).send();
				}.bind(this)
			});
		}
	},
	catGames: function(element,elements){
		var element = $(element);
		if(element) {
			$$(elements).set('morph',{duration:200});
			$$(elements).each(function(el){
				el.addEvents({
					'mouseenter':function(){ this.morph({'background-color':'#CCEAF5'}); },
					'mouseleave':function(){ this.morph({'background-color':'#FFFFFF'}); }
				});
			});
		}
	},
	mouseover: function(elements,mouseover,mouseout){
		$$(elements).each(function(el){
			el.addEvents({
				'mouseenter':function(){ this.setStyle('background-color',mouseover); },
				'mouseleave':function(){ this.setStyle('background-color',mouseout); }
			});
		});
	},
	loadMoreGames:function(element,url) {
		var element = $(element);
		if(element) {
			var req = new Request.HTML({
				url:url,
				update:element,
				method:'get',
				evalScripts:true,
				link:'chain',
				onComplete:function(){
					element.removeClass('loading');
				}
			}).send();
		}
	},
	moreGames:function(elements,mouseover,mouseout) {
		$$(elements).each(function(el){
			el.addEvents({
				'mouseenter':function(){
					this.setStyles({
						'background-color':mouseover,
						'cursor':'pointer'
					});
				},
				'mouseleave':function(){
					this.setStyles({
						'background-color':mouseout,
						'cursor':'auto'
					});
				},
				'click':function(e){
					e.stop();
					window.location.href=el.title;
				}
			});
		});
	},
	tabBar:function(element,elements,update){
		var element = $(element);
		var update = $(update);
		if(element) {			
			$$(elements).each(function(el){
				var data=el.title;
				el.addEvent('click',function(e) {
					e.stop();
					var req = new Request.HTML({
						url:el.getProperty('href'),
						update:update,
						method:'get',
						evalScripts:true,
						data:data,
						link:'chain',
						onRequest:function() {
							update.addClass('loading');
						},
						onComplete:function(){
							update.removeClass('loading');
						}
					}).send();
				});
			});
		}
	},
	gameSlider:function(element,slider){
		var element = $(element);
		var slider = $(slider);
		var duration = 100;
		var transition = Fx.Transitions.Quart.easeOut
		if(element) {
			var sWrapper = $('wrapper').getStyle('width').toInt();
			var sHeader = $('header').getStyle('left').toInt();
			var sLogo = $('logo').getStyle('left').toInt();
			var sHeaderText = $('headerText').getStyle('right').toInt();
			var sHeaderBox = $('headerBox').getStyle('right').toInt();
			var sContainer = $('container').getStyle('width').toInt();
			var sGameContainerW = $('gameContainer').getStyle('width').toInt();
			var sGameContainerH = $('gameContainer').getStyle('height').toInt();
	
			var wrapper = $('wrapper').set('morph',{ duration:duration,transition:transition });
			var header = $('header').set('morph',{ duration:duration,transition:transition });
			var logo = $('logo').set('morph',{ duration:duration,transition:transition });
			var headerText = $('headerText').set('morph',{ duration:duration,transition:transition });
			var headerBox = $('headerBox').set('morph',{ duration:duration,transition:transition });
			var container = $('container').set('morph',{ duration:duration,transition:transition });
			var gameContainer = $('gameContainer').set('morph',{ duration:duration,transition:transition });
			
			var slider = new Slider(element,slider, {
				steps:10,	
				offset:0,
				snap:false,
				wheel: true,
				onChange: function(pos){
					oriPos = pos;
					pos = pos-5;
					var add = 0;
					add=pos*50;					
					var math = (100/sGameContainerW)*(sGameContainerW+add);
				
					if(oriPos>=5) {
						wrapper.morph({'width':(sWrapper+add)});
						header.morph({'left':(sHeader+(add/2))});
						logo.morph({'left':(sLogo+(add/2))});
						headerText.morph({'right':(sHeaderText+(add/2))});
						headerBox.morph({'right':(sHeaderBox+(add/2))});
						container.morph({'width':(sContainer+add)});
					}
					gameContainer.morph({
						'width':(sGameContainerW+add),
						'height':(sGameContainerH*(math/100))
					});
				}		 
			}).set(5);
		}
	},
	highscores:function(element,url,update,type,query){
		var element = $(element);
		var update_el = $(update);
		if(element && update_el) {
			var req = new Request.HTML({
				url:url,
				update:update_el,
				method:'get',
				data:'type='+type+'&gameValue='+$('highscoreSearchID').value+'&query='+query,
				link:'chain',
				onRequest:function(){
					update_el.set('html','');
					update_el.addClass('loading-h');
				},
				onComplete:function(){
					$$('#'+update+' li').setStyle('width',(element.getSize().x-30));
					update_el.removeClass('loading-h');
				}
			}).send();
		}
	},
	highscoreSearch:function(element){
		var element = $(element);
		if(element) {
			element.addEvent('keyup',function(){
				this.highscores('highscoresDay','_highscores.php','highscores_day','day',element.value);
				this.highscores('highscoresWeek','_highscores.php','highscores_week','week',element.value);
				this.highscores('highscoresAll','_highscores.php','highscores_all','all',element.value);
			}.bind(this));
		}
	},
	gameSelect: function(element,url,loader){
		var element = $(element);
		var loader = $(loader);
		if(element && loader){
			var request = new Request.JSON({
				method: 'get',
				url: url,
				link:'chain',
				onFailure:function() {
					loader.set('text','Error while fetching list');
				},
				onSuccess: function(jsonObj) {
					this.setGames(jsonObj.games,element);
					element.addEvents({
						'change':function(){
							window.document.location = element.value;
						}
					});
				}.bind(this)
			}).send();
		}
	},
	setGames: function(array,element) {
		array.each(function(el){
			var opt = new Element('option',{
				'value':el.src,
				'text':el.title
			});
			opt.inject(element);
		});
	},
	friendRequest:function(element,update){
		var element = $(element);
		var update = $(update);
		var req = new Request.HTML({
			update:update,
			url:element.action,
			evalScripts:true,
			link:'chain',
			onRequest:function(){
				update.addClass('loading');
				//update.set('text','');
			},
			onSuccess:function(){
				update.removeClass('loading');
				update.setStyle('height','auto');
			}
		}).send(element);
	},
	sendToFriend:function(element,update){
		$(element).addEvent('submit', function(e) {
			e.stop();
			this.friendRequest(element,update);
		}.bind(this));
	},
	addFriend:function(element,hidden,update_element,update){
		var element = $(element);
		var hidden = $(hidden);
		element.addEvent('click',function(e){
			e.stop();
			hidden.value='true';			
			this.friendRequest(update_element,update);
		}.bind(this));
	},
	removeFriend:function(elements,element,update){
		$$('.'+elements).each(function(el){
			el.addEvent('click',function(e){
				e.stop();
				$(elements).value=el.id;				
				this.friendRequest(element,update);
			}.bind(this));
		}.bind(this));
	},
	sendToFriendExample:function(toName,toNameTarget,fromName,formNameTarget){
		var toName = $(toName);
		var toNameTarget = $(toNameTarget);
		var fromName = $(fromName);
		var formNameTarget = $(formNameTarget);
		var startText = toName.get('text');
		var startText2= fromName.get('text');
		
		toNameTarget.addEvent('keyup',function(e){		
			if(toNameTarget.value=='') {
				toName.set('text',startText);
			} else {
				toName.set('text',toNameTarget.value);
			}
		});
		
		formNameTarget.addEvent('keyup',function(e){		
			if(formNameTarget.value=='') {
				fromName.set('text',startText);
			} else {
				fromName.set('text',formNameTarget.value);
			}
		});
	},
	
	niceform: function(elements) {
		$$(elements).set('morph',{duration:100});
		$$(elements).addEvents({
			'focus':function(){
				var bordercolor = '#029FDA';
				var color = '#029FDA';
				if(this.hasClass('error')) {
					bordercolor = '#EF4A4A';
					color = '#EF4A4A';
				}
				if(this.getProperty('type')!='submit')
					this.morph({'border-color':bordercolor,'color':color});
			},
			'blur':function(){
				var bordercolor = '#034158';
				var color = '#034158';
				if(this.hasClass('error')) {
					bordercolor = '#8F0808';
					color = '#8F0808';
				}
				if(this.getProperty('type')!='submit')
					this.morph({'border-color':bordercolor,'color':color});
			}
		});
	},
	
	userRater: function(elements,url,img1,img2,container){
		$$(elements).each(function(el){
			var id = el.getProperty('id');
			var title = el.getProperty('title');
			var request = new Request.JSON({
				method: 'get',
				url: url,
				data: 'id=' + title,
				link:'chain',
				onFailure:function() {
					$(el).set('text','Error while fetching rating');
				},
				onSuccess: function(jsonObj) {
					this.setRateScore(id,jsonObj.score,img1,img2);
					if(!jsonObj.voted) {
						var rateSaver = new Element('div',{
							'id':'rateSaver'
						}).inject($(id));
						this.activateRate(id,jsonObj.score,img1,img2,elements,url,container);
					}
				}.bind(this)
			}).send();
		}.bind(this));
	},
	setRateScore: function(element,score,img1,img2) {
		var element = $(element);
		if(element) {
			element.getElements('img').each(function(el,i){
				if(i<=score) el.set('src',img2);
				else el.set('src',img1);
			});
		}
	},
	activateRate: function(element,score,img1,img2,oriEl,url,container) {
		var elements = $(element);
		var overTxt = $(container);
		elements.getElements('img').each(function(el,i){
			el.addEvents({
				'mouseenter':function(){
					el.setStyle('cursor','pointer');
					overTxt.set('text',el.getProperty('alt'));
					overTxt.setStyle('visibility','visible');
					this.setRateScore(element,i,img1,img2);
				}.bind(this),
				'mouseleave':function(){
					overTxt.set('text','');
					overTxt.setStyle('visibility','hidden');
					this.setRateScore(element,score,img1,img2);
				}.bind(this),
				'click':function(){
					this.removeRate(elements);
					
					var req = new Request.JSON({
						update:$('rateSaver'),
						url:url,
						method:'get',
						data:'id=' + elements.title + '&type=u&image='+i,
						link:'chain',
						onSuccess:function(jsonObj) {
							this.setRateScore(element,jsonObj.score,img1,img2);
							el.removeEvents();
						}.bind(this)
					}).send();
					
				}.bind(this)
			});
		}.bind(this));
	},
	removeRate: function(elements) {
		elements.getElements('img').each(function(el) {
			el.removeEvents();
			$('rateOverTxt').setStyle('visibility','hidden');
			el.setStyle('cursor','auto');
		});
	},
	
	req: function(update,url) {
		var update = $(update);
		var req = new Request.HTML({
			url:url,
			update:update,
			method:'get',
			link:'chain',
			evalScripts:true,
			onRequest:function(){
				update.addClass('loading');
			},
			onFailure:function(){
				update.removeClass('loading');
				update.set('text','Error while loading file');
			},
			onSuccess:function(){
				update.removeClass('loading');
				update.setStyle('height','auto');
			}
		}).send();
	},
	
	form: function(element,update,submitButton,submitDiv,centerBar,padding) {
		var element = $(element);
		var update = $(update);
		if (submitButton != undefined) {
			var submitButton = $(submitButton);
		}
		if (submitDiv != undefined) {
			var submitDiv = $(submitDiv);
		}
		element.addEvent('submit', function(e) {
			e.stop();
			var req = new Request.HTML({
				url:element.getProperty('action'),
				update:update,
				evalScripts:true,
				link:'chain',
				onRequest:function(){
					update.addClass('loading');
					if (padding != undefined) {
						submitDiv.setStyle('margin-left','150px');
					}
					if (submitButton != undefined) {
						submitButton.blur();
						submitButton.addClass('invisible');
					}
					if (submitDiv != undefined) {
						submitDiv.addClass('loadingBar');
						if (centerBar != undefined) {
							submitDiv.addClass('loadingBarCenter');
						}
					}
				}.bind(this),
				onFailure:function(){
					update.removeClass('loading');
					update.set('text','Error while loading file');
				}.bind(this),
				onSuccess:function(){
					update.removeClass('loading');
					update.setStyle('height','auto');
					if (padding != undefined) {
						submitDiv.setStyle('margin-left',"0px;");
					}
					if (submitButton != undefined) {
						submitButton.removeClass('invisible');
					}
					if (submitDiv != undefined) {
						submitDiv.removeClass('loadingBar');
						if (centerBar != undefined) {
							submitDiv.removeClass('loadingBarCenter');
						}
					}
				}.bind(this)
			}).post(element);
		}.bind(this));
	},
	
	focus: function(element){
		if($(element)) $(element).focus();
	},
	
	lpRegister: function(element,toggler){
		if($(element) && $(toggler)) {
			this.req('linkpartner-form','_linkpartner.php');
			var slider = new Fx.Slide(element).hide();
			$(toggler).addEvent('click',function(e){
				e.stop();
				slider.toggle();
			});
		}
	}
});

mootools.implement(new Options, new Events);

function bookmark(url, title) {
	if (document.all) {
		window.external.AddFavorite(url, title);
	} else if (window.sidebar) {
		window.sidebar.addPanel(title, url, "")
	}
}
