﻿var ScaleView=new Class({
	Implements:[Events,Options],
	initialize:function(options){
		var self=this;
		this.el=$('cont');
		this.needHelp=Browser.Engine.trident?(Browser.Engine.version<5||document.documentMode<8):Browser.Engine.webkit;
		this.links=$$('#nav a').addEvent('click',function(){self.goto(self.links.indexOf(this));return false});
		this.loads=$$(Array.combine([this.el.get('src')],this.links.get('href')).map(function(src){return $extend(new Image(),{src:src})}));
 
		if(this.links.length){
			this.float=new Element('a',{href:'javascript:void(0)','id':'float'}).set('opacity',0.5).inject(document.body);
			this.offset=Hash.map(this.float.addEvent('click',function(e){self.goto(self.dir=='next')}).getSize(),function(v){return v/2});
			document.addEvents({
				mousemove:this.mouse.bind(this),
				keydown:function(e){if(e.code==37||e.code==39)self.goto(e.code==39)}
			});
		}
		this.goto(0);
		window.addEvents({
			keypress:function(e){if(e.code==32||e.code==39||e.code==40)return $type(e.target.value)=='string'},
			mousewheel:$lambda(!Browser.Engine.presto),
			resize:this.scale.bind(this)
		});
	},
	set:function(size){
		this.el.style.width=this.el.style.height='auto';
		try{this.el.style.minWidth=this.el.style.minHeight='inherit'}catch(e){};
		if(!this.needHelp)this.el.setStyles(size.width>size.height?{minWidth:'50%',minHeight:'50%'}:{height:'50%'});
		this.scale(this.size=size);
		this.el.set('src',this.size.get('src'));
	},
	scale:function(v){
		if(((v=window.getSize()).x!=this.x||v.y!=this.y||this.el.src!=this.size.src)){//this.needHelp&&
			var s=this.size,width=Math.round(v.y*(s.width/s.height));this.x=v.x;this.y=v.y;
			this.el.setStyle('width',(s.width>s.height&&v.x>width)?'50%':width);
		}
	},
	goto:function(i){
		if($type(i)!='number')i=this.loads.get('src').indexOf(this.el.get('src'))+(i?1:-1);
		i=this.loads.length==i?0:(i<0?this.loads.length-1:i);
		$$(this.links.removeClass('cur')[i]).addClass('cur');
		if(i=this.loads[i])i.complete?this.set(i):(i.onload=this.set.pass(i,this));
	},
	mouse:function(e,dir){
		var w=document.body.offsetWidth/3,x=e.client.x,y=document.body.offsetHeight-e.client.y,m=document.menu;
		if(m.style.opacity>0){
			var t=m.style.top.toInt(),b=t+m.offsetHeight,l=m.style.left.toInt(),r=l+m.offsetWidth,my=e.client.y;
			if(my>t&&my<b&&x>l&&x<r)return this.float.style.display='none';
		}
		if((document.body.clientHeight-e.client.y)>70&&(dir=(x<w)?'prev':(x>(w+w)?'next':false))){
			this.float.style.left=e.client.x-this.offset.x+'px';
			this.float.style.top=e.client.y-this.offset.y+'px';
		}
		if(this.dir!=dir){
			this.float.style.display=dir?'block':'none';
			if(this.dir=dir)this.float.className=dir;
		}
	}
});
