var site={
	title:'Elder Maier',
	el:null,
	size:false,
	horizontalTileLimit:6,
	tilesPadding:1000,
	events:{
		domready:function(){
			site.title = document.title;
			site.el=$('wrap');
			topnav.setup($('topnav'));
			nav.setup($('nav'));
			tileManager.setup($('tiles'));
			funnav.setup($('funnav'));
			imageViewer.setup();
			this.fireEvent('resize');
			if(user.preferences.design=='grass'){//Weather on grass theme
				if(clientWeather)weather.setup();
				else weather.conditions.cloudy.setup();
			}
			site.pageLoading();
		},
		resize:function(){
			site.size = window.getSize();
			site.el.setStyle('height',site.size.y-(site.el.getStyle('margin-bottom').toInt()+site.el.offsetTop)+"px");	
			nav.el.getParent().setStyles({
				'position':'absolute',
				'top':tileManager.el.offsetHeight/2-nav.el.getParent().offsetWidth-14+"px",
				'left':tileManager.el.offsetWidth/2-tileObj.width+50+"px"
			});
			tileManager.fx.options.offset.x = -site.el.offsetWidth/2+tileObj.width/2;
			tileManager.fx.options.offset.y = -site.el.offsetHeight/2+tileObj.height/2;
			if(tileManager.current)tileManager.toTile(tileManager.current,true);
			imageViewer.resize();
		}
	},
	ajaxLink:function(e,href,set){
		if(e && !this.get('href').match("/?"))return;
		if(e)e=new Event(e).stop();
		set = set||false;
		this.href = href || this.href;
		this.linkType=this.linkType || this.href.split("?")[1].split("=")[0];
		this.request=this.request||unescape(this.href.split("?")[1].split("=")[1]);
		if(this.linkType=="tag"){
			$$('div.tile').some(function(el){
				if(el.tag.match(this.request)){
					tileManager.select(el,set);
					return(true);
				}
			},this);
		}
		if(this.linkType=="tile")tileManager.select($('tile'+this.request),set);
	},
	pageLoading:function(){
		if(!$type(window.location.href.split("?")[1]))window.location.href+="#?tag=home";
		this.ajaxLink(null,window.location.href.split("#")[1]||window.location.href,true);
	}
};

var tileManager={
	el:null,
	current:false,
	toTile: false,
	fx: false,
	setup:function(element){
		this.el=this.el||element;
		this.current = this.current||this.el.getElement('div.tile');
		tileObj.width = this.current.getStyle('width').toInt()+this.current.getStyle('padding').toInt()*2;
		tileObj.height = this.current.getStyle('height').toInt()+this.current.getStyle('padding').toInt()*2;
		if(!this.fx){
			if(Browser.Engine.trident)this.fx = new Fx.ieScroll(this.el,{duration:300,wait:false,transition:Fx.Transitions.linear,offset:{x:-this.el.offsetWidth/2+tileObj.width/2,y:-this.el.offsetHeight/2+tileObj.height/2}});
			else this.fx = new Fx.Scroll(this.el,{duration:500,wait:false,transition:Fx.Transitions.Quint.easeOut,offset:{x:-this.el.offsetWidth/2+tileObj.width/2,y:-this.el.offsetHeight/2+tileObj.height/2}});
			this.toTile = this.fx.toElement.bind(this.fx);
		}
		count = {col:0,row:0,max:$$('div.tile').length-1};
		$$('div.tile').each(this.position);
		this.el.setStyle('display','block');
		nav.el.getChildren().setStyle('padding-bottom','0');
		nav.el.getLast().setStyle('padding-bottom','200px');
	},
	position:function(el,i){
		el.setStyles({
			'left':site.tilesPadding+tileObj.width*count.col+10*count.col+"px",
			'top':site.tilesPadding+tileObj.height*count.row+10*count.row+"px"
		});
		if(i==count.max && !$('padder')){
			new Element('div',{'id':'padder',
				'styles':{
					'position':'absolute',
					'left':tileObj.width*(site.horizontalTileLimit)+site.tilesPadding*2+"px",
					'top':el.getStyle('top').toInt()+site.tilesPadding+"px",
					'width':tileObj.width,
					'height':tileObj.height
				}
			}).inject(tileManager.el);
		}
		if(count.col<site.horizontalTileLimit-1){count.col++;}
		else{count.col=0;count.row++;}
		if(!el.setup && el.get('id')!=null)tileObj.setup(el);
		el.removeEvents();
		el.addEvents(tileObj.events);
		el.getElement('h2.title a').addEvent('click',site.ajaxLink);
	},
	select:function(tile,set,adding){
		tile=tile||tileManager.current||$$('div.tile')[0];
		set=set||false;
		adding=adding||false;
		this.toTile(tile,set);
		if(tileManager.current){tileManager.current.active=false;tileManager.current.removeClass('active');}
		tileManager.current = tile.addClass('active');tile.active = true;
		if(adding)return;
		window.location.href = "#?tile="+tile.number;
		if(nav.current)nav.current.removeClass('active');
		nav.current = tile.nav.addClass('active');
		nav.toLink(nav.current,set);
		document.title =site.title+" | "+tile.title;
	}
};

var tileObj={
	width:null,
	height:null,
	events:{
		click:function(e){
			if(!this.hasClass('active')){if(e)e=new Event(e).stop();$lambda(false);tileManager.select(this);}
		}
	},
	setup:function(tile){
		var properties = {
			number: tile.get('id').replace("tile",""),
			active: false,
			nav: $('nav'+tile.get('id').replace("tile","")),
			title: tile.getElement('h2 a').get('text'),
			tag: tile.getElement('div.tags a').get('text'),
			type: tile.get('class').replace("tile ","").replace(" active",""),
			setup: true
		}
		$extend(tile,properties);
	}
};

var nav={
	el:null,
	current:false,
	toLink:null,
	fx:null,
	setup:function(element){
		this.el=element;
		this.fx = new Fx.Scroll(nav.el,{duration:2000,wait:false,offset:{x:0,y:-this.el.offsetHeight/2+this.el.getElement('a').offsetHeight}});
		this.toLink = this.fx.toElement.bind(this.fx);
		$$('a.scroller').addEvents(this.scrollers.events);
		this.el.getElements('a').addEvents(this.links.events);
	},
	scrollers:{
		events:{
			mouseenter:function(){
				this.direction = this.direction||this.get('href').split("#")[1];
				if(this.direction=="up") nav.fx.toTop();
				else nav.fx.toBottom();
			},
			mouseleave:function(){
				nav.fx.cancel();
			},
			click:$lambda(false)
		}
	},
	links:{
		events:{
			click:function(e){
				if(e)e=new Event(e).stop();
				this.tile=this.tile||$('tile'+this.get('id').split("nav")[1]);
				tileManager.select(this.tile);
			}
		}
	}
};

var topnav={
	el:null,
	current:false,
	setup:function(element){
		if(element)this.el=element;
		this.current=this.current||this.el.getElement('a');
		this.el.getElements('a').addEvent('click',site.ajaxLink).addEvent('click',this.click);
	},
	click:function(e){
		if(topnav.current)topnav.current.removeClass('active');
		topnav.current=this.addClass('active');
	}
};

var funnav={
	el:null,
	setup:function(element){
		this.el = element;
		this.el.getElements('a').addEvent('click',funnav.click);
	},
	click:function(e){
		if(e)e=new Event(e).stop();
		this.type=this.type||this.href.split("#")[1];
		funnav[this.type].run(null,this)
	},
	random:function(){
		var rand = $random(0,count.max);
		while($$('div.tile')[rand]==tileManager.current){rand=$random(0,count.max);}
		tileManager.select($$('div.tile')[rand]);
	},
	design:function(){
		
	},
	universe:function(leave){
		leave = leave||false;
		if(tileManager.current.hasClass('universe') || leave){
			$$('div.tile').removeClass('universe').removeEvents('dblclick');
			this.set('html','View Universe');
			$('navContainer').removeClass('universe');
		}else{
			$$('div.tile').addClass('universe').addEvent('dblclick',funnav.universe.bind(this));
			this.set('html','View Tiles');
			$('navContainer').addClass('universe');
		}
		tileManager.setup();
		tileManager.select(null,true);
	}
};

var imageViewer = {
	overlay:null,
	img:null,
	active:false,
	target:null,
	setup:function(){
		this.overlay = new Element('div',{'class':'overlay','events':{'click':imageViewer.toggle}}).inject(document.body);
		this.overlay.fx = new Fx.Morph(this.overlay,{duration:200, wait:false});
		this.img = new Element('img',{'class':'largeImg'}).inject(document.body);
		this.img.fx = new Fx.Morph(this.img,{duration:200, wait:false});
		this.image.setup();
	},
	resize:function(){
		if(imageViewer.overlay)imageViewer.overlay.setStyle('height',site.size.y);
	},
	image:{
		setup:function(el){
			if($type(el)!='element'){$$('div.tile img').each(imageViewer.image.setup);return;}
			el.removeEvents('click');
			el.addEvent('click',imageViewer.image.click);
		},
		click:function(e){
			if(e)e=new Event(e).stop();
			if(this.getParent('div.tile').active)imageViewer.toggle.run(null,this);
			else tileManager.select(this.getParent('div.tile'));
		}
	},
	hide:function(){
		imageViewer.overlay.setStyle('display','none');
		imageViewer.img.setStyle('display','none');
	},
	toggle:function(e){
		if(e)e=new Event(e).stop();
		if(imageViewer.active){
			imageViewer.overlay.fx.set({'opacity':0});
			var pos = imageViewer.target.getPosition();
			imageViewer.img.fx.start({
				'left':pos.x,
				'top':pos.y,
				'width':imageViewer.target.getStyle('width'),
				'height':imageViewer.target.offsetHeight-10				 
			}).chain(imageViewer.hide);
			imageViewer.active=false;
			return;
		}
		imageViewer.target = this;
		imageViewer.overlay.fx.set({'opacity':.7,'display':'block'});
		var image = new Asset.image(this.get('src').replace("/small/","/").replace("_400","_500"),{onload:function(img){
			imageViewer.img.fx.set({'visibility':'hidden','display':'block'});
			imageViewer.img.set('src',img.src).setStyles({'width':'20%','height':'auto'});
			var limit = {x:site.size.x*.8,y:site.size.y*.8};
			var image = {x:imageViewer.img.offsetWidth,y:imageViewer.img.offsetHeight};
			var resize = {x:(image.x>image.y)?limit.x:image.x*(limit.y/image.y),y:(image.y>image.x)?limit.y:image.y*(limit.x/image.x)};
			if(resize.y>limit.y){
				limit.x = image.x*(limit.y/image.y);
				resize = {x:(image.x>image.y)?limit.x:image.x*(limit.y/image.y),y:(image.y>image.x)?limit.y:image.y*(limit.x/image.x)};
			}
			var pos = this.getPosition();
			imageViewer.img.fx.start({
				'visibility':'visible',
				'left':[pos.x,site.size.x/2-resize.x/2],
				'top':[pos.y,site.size.y/2-resize.y/2],
				'width':[this.getStyle('width'),resize.x],
				'height':[this.offsetHeight-10,resize.y]
			});
		}.bind(this)});
		imageViewer.active = true;
	}
};

var count=false;

window.addEvents(site.events);
