(function(){
	
	var
	debug=function(a){
		
		if( typeof this.debug=='function'){ this.debug(a); }
		else{ try{ console.log(a); }catch(e){} }
	
	}
	,
	browser=function(a)
	{
		debug=debug||function(){};
		debug("function browser is running");
		
		try{var r=false,
				all=[
					'chrome',
					'firefox',
					'iphone',
					'opera',
					'mac',
					'konq',
					'safari',
					'khtml',
					'msie',
					'iemac',
					'is_ie5',
					'is_ie6',
					'is_ie7',
					'is_ie8'
				],
				nav=navigator,
				agt=nav.userAgent.toLowerCase(), browser_agent=agt,
				ver=nav.appVersion.toLowerCase(), browser_version=ver,
				is_chrome=(agt.indexOf('chrome')!=-1),
				is_firefox=(agt.indexOf('firefox')!=-1),
				is_iphone=(agt.indexOf('iphone')!=-1),
				is_iPhone=is_iphone,
				is_opera=(agt.indexOf("opera")!=-1),
				is_mac=(agt.indexOf("mac")!=-1),
				is_konq=(agt.indexOf('konqueror')!=-1),
				is_safari=(!is_chrome)&&((agt.indexOf('safari')!=-1)&&
					(agt.indexOf('mac')!=-1) )?true:false,
				is_khtml=(is_safari||is_konq),
				is_msie=( (ver.indexOf('msie')!=-1)&&
					(!is_opera)&&(!is_khtml) ),
				is_iemac=(is_msie&&is_mac),
				is_ie5=(is_msie&&ver.indexOf('msie 5.')!=-1),
				is_ie6=(is_msie&&ver.indexOf('msie 6.')!=-1),
				is_ie7=(is_msie&&ver.indexOf('msie 7.')!=-1),
				is_ie8=(is_msie&&ver.indexOf('msie 8.')!=-1);
				
			var a=a.split(' ');
			for(var i=0;i<a.length;i++){
				var s = 'if( typeof is_'+a[i]+'!=\'undefined\' )'+
						'{ r=is_'+a[i]+'; }';
					s = 'try{'+s+'}catch(e){ debug(e); }';
				eval(s); if( r==true ){ break; }
			};
			
			return r;
			
		}catch(e){ debug(e); return true; }
		 
	}
	,
	thumb_update=function(){
		
		//debug('function thumb_update is running');
		
		var l=[
			'.thumbs-left', 
			'.thumbs-right'
			],
			w=window,			
			d=document,
			dE=d.documentElement,
			winWidth=w.innerWidth||dE.clientWidth||b.clientWidth||0,
			winHeight=w.innerHeight||dE.clientHeight||b.clientHeight||0,
			winX=winWidth/2,
			winY=winHeight/2,
			id=new Date().getTime(),
			self=this;
			//self.thumb_update_id=id;
		
		// search thumb x location for each parent thumb in list
		for(var i=0;i<l.length;i++){ 
			var p=l[i], ty=[],
				tx={id:[],left:[],right:[]}, 
			tx_ref={id:[],left:[],right:[]};
			
			// initialize and adjust x location from window center
			$(p+' .thumb').each(function(j){
				
				//if( self.thumb_update_id!=id ){ debug('break '+id); return; }
				
				var w = window, 
					dE = document.documentElement,
					scrollX = w.scrollX||dE.scrollLeft,
					scrollY = w.scrollY||dE.scrollTop,
					elt = $(this)[0],
					eltW = $(this).width(),
					eltH = $(this).height(),
					eltL = elt.offsetLeft,
					eltT = elt.offsetTop,
					eltX = eltL+(eltW/2),
					eltY = eltT+(eltH/2),
					posX = eltX-winX-scrollX,
					posY = eltY-winY-scrollY,
					id = j, x = 0;
					// for no collision
					ty.push([eltT,eltT+eltH]);
					tx_ref.id.push([eltL,eltL+eltW]);
					tx_ref.left.push([eltL,id]);
					tx_ref.right.push([eltL+eltW,id]);
					
				var n=250;
				if( Math.abs(posY)<n ){
					x=n-Math.abs(posY); 
					if( x>200 ){ x=200; }
				}
				
				if( p.indexOf('left')>=0 ){ 
					tx.id.push([(x-eltW),x]);
					// for no collision
					tx.left.push([(x-eltW),id]);
					tx.right.push([x,id]);
				}
				else if( p.indexOf('right')>=0 ){ 
					tx.id.push([x,(x+eltW)]);
					// for no collision
					tx.left.push([x,id]);
					tx.right.push([(x+eltW),id]);
				}
			
			});
			
			// adjust x location from each other to have no collision
			tx.left.sort();
			tx.right.sort();
			tx_ref.left.sort();
			tx_ref.right.sort();
			// adjust thumbs-left
			if( p.indexOf('left')>=0 ){ 
				tx.right.reverse();
				tx_ref.right.reverse();
				for(var j=0;j<tx.right.length;j++){ 
					var id = tx.right[j][1],
						left = tx.id[id][0],
						right = tx.id[id][1],
						top = ty[id][0],
						bottom = ty[id][1];
					for(var k=0;k<tx_ref.right.length;k++){
						var k_id = tx_ref.right[k][1],
							ref = tx_ref.id[k_id],
							x = (tx_ref.id[id][0]-tx.id[id][1])
							- (tx_ref.id[k_id][1]-tx.id[k_id][1]);
						if( ref[1]<tx_ref.id[id][1] &&
							ty[k_id][0]<ty[id][1] &&
							ty[k_id][1]>ty[id][0] &&
							x<0 ){
							tx.id[k_id]=[tx.id[k_id][0]-x,tx.id[k_id][1]-x];
							// tx.right & tx.left are no longer exact
						}
					}
				}
			}
			// adjust thumbs-right
			else if( p.indexOf('right')>=0 ){ 
				for(var j=0;j<tx.left.length;j++){ 
					var id = tx.left[j][1],
						left = tx.id[id][0],
						right = tx.id[id][1],
						top = ty[id][0],
						bottom = ty[id][1];
					for(var k=0;k<tx_ref.left.length;k++){
						var k_id = tx_ref.left[k][1],
							ref = tx_ref.id[k_id],
							x = (tx_ref.id[id][1]+tx.id[id][0])
							- (tx_ref.id[k_id][0]+tx.id[k_id][0]);
						if( ref[1]<tx_ref.id[id][1] &&
							ty[k_id][0]<ty[id][1] &&
							ty[k_id][1]>ty[id][0] &&
							x<0 ){
							tx.id[k_id]=[tx.id[k_id][0]-x,tx.id[k_id][1]-x];
							// tx.right & tx.left are no longer exact
						}
					}
				}
			}
			
			
			// move it if needed
			$(p+' .thumb').each(function(j){
				
				var id = j,
					left = tx.id[id][0],
					right = tx.id[id][1],
					elt_container = $('.thumb-container',this);
				
				if( p.indexOf('left')>=0 &&
					elt_container.css('right')!=right ){
					elt_container.css('right',right);
				}
				else if( p.indexOf('right')>=0 &&
					elt_container.css('left')!=left ){
					elt_container.css('left',left);
				}
				
			});
			
			// show it if needed
			$(p+' .thumb')
			.css({visibility:"visible"});
			$(p+' .thumb a')
			.css({visibility:"visible"});
		
		}
		
	}
	,
	thumb_mousewithin=function(){
		
		var elts=$('.thumb-mousewithin');
		
		if( elts.length>0 ){
			elts.each(function(){
				var w=window, 
					d=document,
					dE=d.documentElement,
					winWidth=w.innerWidth||dE.clientWidth||b.clientWidth||0,
					winHeight=w.innerHeight||dE.clientHeight||b.clientHeight||0,
					elt=$('a .img-title',this),
					eltW=elt.width(),
					eltH=elt.height(),
					eltX=w.mouseX, 
					eltY=w.mouseY; 
				
				if( eltX>winWidth-15 ){ eltX=winWidth-eltW-15; }
				else if( eltX+eltW>winWidth-15 ){ eltX-=eltW; }
				
				if( $.browser.msie ){
					if( eltY>winHeight-eltH-30 )
					{ eltY-=eltH; }else{ eltY+=20; }
				}else{
					if( eltY>winHeight-eltH-25 )
					{ eltY-=eltH; }else{ eltY+=10; }
				}
				
				// detect browser iPhone and adjust position
				if( navigator.appVersion.indexOf("iPhone")>=0 )
				{ eltX+=scrollX; eltY+=scrollY; }
				
				try{if( elt.length>0 ){
						elt.css({
						border:'1px solid #000000',
						backgroundColor:'#FFFFFF',
						position:'fixed',
						left:eltX,
						top:eltY,
						textAlign:'left',
						zIndex:'2'
					}); elt.css('visibility','visible');
				}}catch(e){}
		
			});
		}
		
	}
	,
	thumb_init=function(){
		
		debug('function thumb_init is running');		
		try{
			
			var thumbs_left='',
				thumbs_right='',
			 	pos='left';
		
			for(var i=0;i<$('.thumb').length;i++){
				var thumb=$('.thumb').eq(i);
				//if( pos=='left' ){ pos='right'; }
				//else{ pos='left'; }
				
				if(thumb.html()==""){ pos='right'; }
				else{
					var target='thumbs_'+pos;
					var s='<span class=\'thumb\' style=\''+
							thumb.attr('style')+'\'>'+
							'<span class=\'thumb-container\'>'+
								thumb.html().replace('%7E','~')+
							'</span>'+
						'</span>';
					eval(target+'+=s;');
				}
			} $('.thumb').remove();
		
			thumbs_left='<div class=\'thumbs-left\'>'+
				thumbs_left+'</div>';
			thumbs_right='<div class=\'thumbs-right\'>'+
				thumbs_right+'</div>';
			
			$('#thumbs').html(
				thumbs_left+
				thumbs_right );
			
			$('#content,#content .container,#img-container')
			.css({ padding:'0px' });
		
			var w=window; w.mouseX=0; w.mouseY=0;
			$().mousemove(mousemove);
		
			$('#img-container .thumb')
			.each(function(i){
				$('a',this)
				.hover(function(){
					$('#img-container .thumb').eq(i)
					.addClass('thumb-mousewithin');
				},function(){
					$('#img-container .thumb').eq(i)
					.removeClass('thumb-mousewithin')
				});
				var css_width=$('a img',this).attr('width'),
					css_height=$('a img',this).attr('height'),
					css={
						width:css_width,
						height:css_height,
						//visibility:'visible'
					}
				$(this).css(css);
				$('a',this).css(css);
			});
			
			window.setTimeout(this.thumb_update,1);
			
		}catch(e){ debug(e); return false; }; return true;
		
	}
	,
	menu_main_init=function(){
		
		debug('function menu_main_init is running');
		try{ var success=this.menu_main_update()||false;
		}catch(e){ debug(e); return false; }; return success;
		
	}
	,
	menu_main_update=function(){
		
		try{
			
			var elt = $('#menu_main');
				elt.width('220px');
				elt.height('120px');
		
			var w=window,
				dE = document.documentElement,
				eltWidth = parseInt(elt.width()), 
				eltHeight = parseInt(elt.height()), 
				scrollX = w.scrollX||dE.scrollLeft||0,
				scrollY = w.scrollY||dE.scrollTop||0,
				contentWidth = $('#content').width(),
				winWidth=w.innerWidth||dE.clientWidth||b.clientWidth||0,
				winHeight=w.innerHeight||dE.clientHeight||b.clientHeight||0,
				winCenterX = (winWidth-eltWidth)/2, 
				winCenterY = (winHeight-eltHeight)/2, 
				eltX = winCenterX,
				eltY = winCenterY;
		
			// bind position to body content and not window
			if( winWidth<contentWidth )
			{ eltX = ((contentWidth-eltWidth)/2)-scrollX; }
			
			var s='function menu_main_update check elt'+
				' width:'+eltWidth+' height:'+eltHeight;
			//debug(s);
			
			$('ul',elt).css({ top:'100px' });
			
			// detect browser iPhone and adjust position
			if( navigator.appVersion.indexOf("iPhone")>=0 )
			{ eltX+=scrollX; eltY+=scrollY; }
			
			// move it just if needed
			if( elt.css('left')!=eltX &&
				elt.css('top')!=eltY ){
				elt.css({
					display:'block',
					left:eltX+'px',
					top:eltY+'px'
				});
			}
			
		}catch(e){ debug(e); return false; }; return true;
		
	}
	,
	mousemove=function(e){ 
	
		var w=window, 
			dE = document.documentElement,
			scrollX = w.scrollX||dE.scrollLeft||0,
			scrollY = w.scrollY||dE.scrollTop||0,
			mouseX=e.pageX,
			mouseY=e.pageY;
			
		mouseX=mouseX-scrollX;
		mouseY=mouseY-scrollY;
		
		var s='function mousemove to'+
			' x:'+mouseX+' y:'+mouseY
		//debug(s);
		
		w.mouseX=mouseX;
		w.mouseY=mouseY;
		
		thumb_mousewithin();
		
	}
	,
	ready=function(){
		
		debug('function ready is running');
		
		// active stylesheet
		$('body').addClass('js-anim-home');
		
		/*
		// show slowly (dosn't work on ie)
		$('#img-container')
		.css({ visibitity:'hidden', opacity:0 })
		window.setTimeout( 
		function(){ 
			$('#img-container')
			.css({ visibitity:'visibile' })
			.animate({ opacity:1.0 }, 150, 
			function(){ 
				$('#img-container')
				.css({ opacity:100 });
			});
		}, 1000);
		*/
		
		var success = this.menu_main_init()||false; 
		if(!success){ debug('function ready failed menu_main_init'); }
		
		var success = this.thumb_init()||false; 
		if(!success){ debug('function ready failed thumb_init'); }
		
	}
	,
	resize=function(){
		
		this.menu_main_update();
		this.thumb_update();
	
	}
	,
	scroll=function(){
		
		this.menu_main_update();
		this.thumb_update();
		thumb_mousewithin();
		
	}
	,
	run=function(){
		
		// log
		var date = new Date(), js = 'unknown';
		try{js = $('script:last').attr('src');
			js = js.substr(js.lastIndexOf('/')+1);
		}catch(e){ debug(e); }
		var s = ''+
			'\nfunction running script: '+js+' '+
			'\nfrom: '+document.location.href+' '+
			'\nat '+date+' '+
			'\nwith browser: '+navigator.appName+
				' version: '+navigator.appVersion+
			'\n'+navigator.userAgent; 
			debug(s);
		
		var activate=false;
		// check compatibility to activate the script
		if( typeof jQuery!='undefined' 
			&& browser('chrome firefox safari iPhone msie') 
			&& !browser('ie5 ie6 ie7')
		){ activate=true; }
		else{ var s='function run '+
			'does not activate the script';
			debug(s);
		}
		
		if( activate ){
			
			// detect browser iPhone and define viewport
			if( navigator.appVersion.indexOf("iPhone")>=0 ){
				var s = 'width=auto; initial-scale=0.25;'+
					' maximum-scale=0.25; user-scalable=0;'
				s = '<meta name=\'viewport\' content=\''+
					s+'\' />';
				document.write(s);
			}
			
			var c=function(){};		
			c.prototype.thumb_init=thumb_init;
			c.prototype.thumb_update=thumb_update;
			c.prototype.thumb_mousewithin=thumb_mousewithin;
			c.prototype.menu_main_init=menu_main_init;
			c.prototype.menu_main_update=menu_main_update;	
			c.prototype.ready=ready;	
			c.prototype.resize=resize;
			c.prototype.scroll=scroll;
			//c.prototype.__constructor__=c;
		
			var obj=new c();
			$('body').ready(function(){obj.ready();});
			$(window).resize(function(){obj.resize();});
			$(window).scroll(function(){obj.scroll();});
			
		}
		
	};
	// autorun
	run();

})();
