var Browser = Class.create({
  initialize: function() {
    var userAgent = navigator.userAgent.toLowerCase();
    this.version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1];
    this.safari = /webkit/.test( userAgent );
    this.opera = /opera/.test( userAgent );
    this.msie = /msie/.test( userAgent ) && !/opera/.test( userAgent );
    this.mozilla = /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent );
  }
});

function ShowOver (_top,_left) {
	arrayPageSize=getPageSize();
	
	$('cnt').insert({after: '<div id="wOver_overlay" style="display: none;"></div>'});	

	$('wOver_overlay').style.width=arrayPageSize[0]+'px';
	$('wOver_overlay').style.height=arrayPageSize[1]+'px';	
	$('wOver_overlay').show();
	$('wOver_overlay').setOpacity(0.8);
	
	
	//SET WAIT
	$('cnt').insert({top: '<div id="wOver" style="display:none;"><div id="wOverContainer"><img src="/images/loader2.gif" width="16" height="16" border="0" align="absmiddle" /> loading...</div></div>'});
	//SET POS
	$('wOverContainer').setStyle({ 
		top: (_top?_top:(document.viewport.getScrollOffsets().top+Math.ceil((arrayPageSize[3]-$('wOverContainer').getHeight())/2)))+'px', 
		marginLeft: (_left?_left+'px':(document.viewport.getScrollOffsets().left+Math.ceil((arrayPageSize[2]-300)/2))+'px')
	});	

	$('wOver').show();
}

function OpenPlayer(e) {
	var src=Event.element(e);
	var ID = src.readAttribute('id');
		ShowPlayer (src,ID,'','contact');
  	
	return false;
}

function ShowPlayer (src,ID,_action,toopen,noover) {
  if (!noover)
	 ShowOver();

	var bro=new Browser;
	var objHash = {};
	objHash.id=ID;
	objHash.toopen = toopen;
//	objHash.action=(_action==undefined?"EVENTDET":_action);
//	objHash.type=(_type==undefined?"I":_type);
//	objHash.selected='';
  
//	if (src.readAttribute('rel')) {
//		objHash.info_label=src.readAttribute('rel');
//		objHash.selected=src.readAttribute('href').split('/').last();
//	}
	
	new Ajax.Request('include/player.php', {

		method: 'post', 
		parameters: objHash, 
		onSuccess: function(transport) {
			res=transport.responseText;
			if (res.startsWith('#')) {
				PrintError (res);
				CloseOver();
			}
			else {
				arrayPageSize=getPageSize();
				$('wOver').remove();
				$('cnt').insert({top: '<div id="wOver" style="display: none; height: '+arrayPageSize[1]+'px;"><div id="wOverContainer" style="width: 780px;">'+res+'</div></div>'});				
				var _top=document.viewport.getScrollOffsets().top+Math.ceil(arrayPageSize[3]/2-280);
				if (Prototype.Browser.IE && bro.version<7) {
					var _left=document.viewport.getScrollOffsets().left+Math.ceil(arrayPageSize[2]/2-780);
					$('wOverContainer').setStyle({ 
						top: _top+'px', 
						left: _left+'px'
					});	
				} else {
					$('wOverContainer').setStyle({ 
						top: _top+'px'
					});
					$('wOver').setStyle({
						backgroundImage: 'url(/images/player_shadow.png)', 
						backgroundPosition: 'center '+(_top-75)+'px'
					});
				}
				
				$('wOver').show();
			}				
		},
		onFailure: function (transport) {
			PrintError(transport.responseText);
			CloseOver();
		},
		onException: function (request, exception) {
			PrintError("Js Exception: " + exception);
			CloseOver();
		}
	});
	
	return false;
}


function setActive (id) {	
	var act_id=($$('#player_right .active')[0]?$$('#player_right .active')[0].id:'');	
	if (act_id==id)
		return false;
	switch (act_id)
	{
	case 'show_images':	
		if ($$('#gallery_slide_cnt img.zoomed')[0])
			$$('#gallery_slide_cnt img.zoomed')[0].setOpacity(1.0);
		break;
	case 'play_video':
		break;
	case 'read_info':
		$('player_txt').hide();
		if ($('track_player_txt'))
			$('track_player_txt').hide();
		$('player_cnt').show();
		break;
	case 'read_photo_info':
		$('player_txt').hide();
		if ($('track_player_txt'))
			$('track_player_txt').hide();
		$('player_cnt').show();
		break;
	}
	if (act_id)
		$(act_id).removeClassName('active');
	$(id).addClassName('active');
	return true;
}

/*************************************************************/
function toggleImageSilde(_show) {
	if (_show) {
		if ($('gallery_slide').getHeight()==0) {
			new Effect.Morph('gallery_slide', {
				style: {
					height: '46px'
				},
				duration: 0.3
			});
			if ($('gallery_slide_arrows'))
				$('gallery_slide_arrows').show();
		}
	} else {
		if ($('gallery_slide').getHeight()>0) {
			new Effect.Morph('gallery_slide', {
				style: {
					height: '0px'
				},
				duration: 0.3
			});
			if ($('gallery_slide_arrows'))
				$('gallery_slide_arrows').hide();
		}
	}
}
function imgLoad (event) {	
	event.stop();

	setActive('show_images');
	toggleImageSilde(true);

	if ($$('#gallery_slide_cnt img.zoomed')[0]) {
		src=$$('#gallery_slide_cnt img.zoomed')[0];
		src.removeClassName('zoomed');
	} else {
		src=$$('#gallery_slide_cnt img')[0];
	}
	LoadImage(src);
}
bind_imgLoad=imgLoad.bindAsEventListener();

function imgScrollLoad (event) {
	event.stop();
	
	if (!$('show_images').hasClassName('active'))
		setActive('show_images');
	
	var src=Event.element(event);

	$('player_cnt').innerHTML='<center><img src="/images/loader3.gif" width="16" height="16" border="0" style="margin-top: 200px;" /></center>';
	if ($$('#gallery_slide_cnt img.zoomed')[0]) {
		$$('#gallery_slide_cnt img.zoomed')[0].setOpacity(1.0);
		$$('#gallery_slide_cnt img.zoomed')[0].removeClassName('zoomed');		
	}
	LoadImage(src);
	
	return false;
}
function LoadImage (_src) {	
	var offsetPos=($('gallery_slide_cnt').cumulativeOffset().left-_src.up('a').cumulativeOffset().left);
	_src.setOpacity(0.5);
	_src.addClassName('zoomed');
	var attImgName=''; //$('player_cnt').down('img').readAttribute('src').split('/').last().split('.')[0];	
	var srcImgName=_src.readAttribute('src').split('/').last().split('.')[0];
	if (attImgName==srcImgName)
		return;	
	
	var img = document.createElement('img');
	
	img.onload = function (evt) {		
		$('player_cnt').innerHTML='';
		$('player_cnt').insert({top: img});		
		img.setStyle({
			'margin': Math.ceil(($('player_cnt').getHeight()-img.height)/2)+'px '+Math.ceil(($('player_cnt').getWidth()-img.width)/2)+'px'
		});	
		$('player_info').innerHTML=_src.up('a').readAttribute('title');

	}
	var path=_src.readAttribute('src').gsub('thumbs/','').split('/');
	path.pop();	
	path.push('/'+srcImgName+'.'+_src.up('a').readAttribute('id').split('.').last());
	img.src=path.join('/');

	//dida
	if (_src.up('a').next('span') && $('read_photo_info')) {
		if (_src.up('a').next('span').innerHTML!='')
			$('read_photo_info').removeClassName('disabled');
		else
			$('read_photo_info').addClassName('disabled');
	}	
	
	//altro
	if (_src.up('a').readAttribute('rel')) {		
		var id_ins=_src.up('a').readAttribute('rel').split('[').last().gsub(']','');
		img.id=id_ins;
		if ($('icm_'+id_ins))
			$('icm_'+id_ins).show();
	}
	

	//set pos
	/*if (offsetPos<-46) { //right
		//$('gallery_slide').scrollLeft+=46;
		ScrollLeft(46);
	} else if (offsetPos>=0) { //left
		//$('gallery_slide').scrollLeft-=46;
		ScrollLeft(-46);
	}*/
}
bind_imgScrollLoad=imgScrollLoad.bindAsEventListener();

function ScrollLeft (_delta) {
	var _inc=0;
	var _sign=(_delta>0?1:-1);
	new PeriodicalExecuter(function(pe) {
		$('sopra').scrollLeft+=(50*_sign);
		_inc+=(50*_sign);
		if (Math.abs(_inc)>=Math.abs(_delta))
			pe.stop();
		}, .05);
}
function imgScrollPN (event) {
	event.stop();
	var src=Event.element(event);
	if (src.tagName.toLowerCase()!='a')
		src=src.up('a');
	//set PN
	switch (src.readAttribute('title').charAt(0)) {
	case 'n':
		delta=1;
		/*$$('#gallery_slide_arrows a')[0].show();		
		if (($('gallery_slide').cumulativeOffset().left-$('gallery_slide_cnt').cumulativeOffset().left)-($('gallery_slide_cnt').getWidth()-184)==0) //last 4 icons
			$$('#gallery_slide_arrows a')[1].hide();
		else
			$$('#gallery_slide_arrows a')[1].show();*/
		break;
	case 'p':
		delta=-1;
		/*$$('#gallery_slide_arrows a')[1].show();
		alert ($('gallery_slide').cumulativeOffset().left+'-'+$('gallery_slide_cnt').cumulativeOffset().left);
		if ($('gallery_slide').cumulativeOffset().left-$('gallery_slide_cnt').cumulativeOffset().left==46) //1 icons
			$$('#gallery_slide_arrows a')[0].hide();
		else
			$$('#gallery_slide_arrows a')[0].show();*/
		break;
	default:		
		return false;
		break;
	}	
	//move
	//new Effect.Move($('gallery_slide_cnt'), { x: (46*delta), duration: 0.2});
	//SetArrows(delta);
	//$('gallery_slide').scrollLeft+=(46*delta);
	ScrollLeft(950*delta);
	
	return false;
}
bind_imgScrollPN=imgScrollPN.bindAsEventListener();

function SetArrows (_type) { //TODO
	if (_type>0) {
		$$('#gallery_slide_arrows a')[0].show();
		if (($('gallery_slide').cumulativeOffset().left-$('gallery_slide_cnt').cumulativeOffset().left)-($('gallery_slide_cnt').getWidth()-184)==0) //last 4 icons
			$$('#gallery_slide_arrows a')[1].hide();
		else
			$$('#gallery_slide_arrows a')[1].show();
	} else {
		$$('#gallery_slide_arrows a')[1].show();
		if ($('gallery_slide').cumulativeOffset().left-$('gallery_slide_cnt').cumulativeOffset().left==46) //1 icons
			$$('#gallery_slide_arrows a')[0].hide();
		else
			$$('#gallery_slide_arrows a')[0].show();
	}	
}

/*************************************************************/

function printVideo(cod) {
	if ($('gallery_slide'))
		toggleImageSilde();
		
	$('player_info').innerHTML='';
	$('player_cnt').innerHTML='<object width="670" height="500"><param name="movie" value="http://www.youtube.com/v/'+cod+'&hl=it&fs=1&rel=0&color1=0x3a3a3a&color2=0x999999"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/'+cod+'&hl=it&fs=1&rel=0&color1=0x3a3a3a&color2=0x999999" type="application/x-shockwave-flash" allowfullscreen="false" width="670" height="500"></embed></object>';
}
function videoLoad (event) {
	event.stop();
	if (!setActive('play_video'))
		return false;

	printVideo($('play_video').readAttribute('href').split('/').last());
	
	return false;
}
bind_videoLoad=videoLoad.bindAsEventListener();

/*************************************************************/

function printInfo () {
	if ($('gallery_slide'))
		toggleImageSilde();
		
	$('player_cnt').hide();
	$('player_cnt').innerHTML='';
	$('player_txt').show();
	$('player_info').innerHTML='';
	if (!$('player_txt').hasClassName('init')) {
		InitScroll('player_txt',0,true);
		$('player_txt').addClassName('init');
	} else if ($('track_player_txt'))
		$('track_player_txt').show();
}
function infoLoad (event) {
	event.stop();
	setActive ('read_info');
	
	printInfo();	
	
	return false;
}
bind_infoLoad=infoLoad.bindAsEventListener();

function photoInfoLoad (event) {
	event.stop();
	var src=Event.element(event);
	if (src.hasClassName('disabled'))
		return false;
		
	$('player_txt').innerHTML=$$('#gallery_slide_cnt img.zoomed')[0].up('a').next('span').innerHTML;
	setActive ('read_photo_info');
	
	printInfo();
	
	return false;
}
bind_photoInfoLoad=photoInfoLoad.bindAsEventListener();

function CloseOver() {
	$('wOver').remove();
	$('wOver_overlay').remove();
}
function UnloadOver() {
	$('wOver').fade({ duration: 0.3, afterFinish: function() {CloseOver()} });
}
function PrintError(txt) {
	alert (txt);
}
// -----------------------------------------------------------------------------------
// getPageSize() from lightbox by Lokesh Dhakar
// Returns array with page width, height and window width, height
// Core code from - quirksmode.com
// Edit for Firefox by pHaez
// 2 Edit by me
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	
//	console.log(self.innerWidth);
//	console.log(document.documentElement.clientWidth);

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

//	console.log("xScroll " + xScroll)
//	console.log("windowWidth " + windowWidth)

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
//	console.log("pageWidth " + pageWidth)

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.com
//
function getPageScroll(){

	var xScroll, yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}

	arrayPageScroll = new Array(xScroll,yScroll) 
	return arrayPageScroll;
}
/* SCROLL */
var slider=new Array();
function InitScroll (_box,_delta,_vertical,_hide,_mWheel)
{	
	if (!$(_box))
		return false;

	_vertical=(_vertical==undefined?false:_vertical);

	var boxSize=(_vertical?$(_box).getHeight():$(_box).getWidth());
	if (_delta)
		boxSize+=_delta;
	var cntSize=(_vertical?$(_box).scrollHeight:$(_box).scrollWidth)+boxSize;
	
	var handleSize=Math.round((boxSize*boxSize)/cntSize);	

	if ((_vertical && $(_box).scrollHeight <= $(_box).offsetHeight) ||
		 (!_vertical && $(_box).scrollWidth <= $(_box).offsetWidth)) {
		return;
	}
	$(_box).insert({after: '<div id="track_'+_box+'" class="'+(_vertical?'v':'o')+'Track"><div id="handle_'+_box+'" class="handle"></div></div>'});
	if (_hide)
		$('track_'+_box).hide();
	if (_vertical) {
		$('track_'+_box).setStyle({
			width: '15px',
			height: $(_box).getHeight()+(_delta?_delta:'')+'px'
		});
		if (handleSize>15)
			$('handle_'+_box).style.height=handleSize+"px";
			
		slider[_box] = new Control.Slider('handle_'+_box, 'track_'+_box, {
			axis: 'vertical',
			onSlide: function(v) { scrollVertical(v, $(_box), slider);  },
			onChange: function(v) { scrollVertical(v, $(_box), slider); }
		});
			
	} else {
		if (_delta)
			$('track_'+_box).setStyle({width: ($('track_'+_box).getWidth()+_delta)+'px'});
		if (handleSize>15)
			$('handle_'+_box).style.width=handleSize+"px";
			
		slider[_box] = new Control.Slider('handle_'+_box, 'track_'+_box, {
			axis: 'horizontal',
			onSlide: function(v) { scrollHorizontal(v, $(_box), slider);  },
			onChange: function(v) { scrollHorizontal(v, $(_box), slider); }
		});
	}	
	
	if (_mWheel==true || _mWheel==undefined) {
		if (window.addEventListener)	//DOMMouseScroll is for mozilla.
			$(_box).addEventListener('DOMMouseScroll', wheel, false);	
		
		$(_box).onmousewheel = $(_box).onmousewheel = wheel;// IE/Opera.
	}
}

function scrollHorizontal(value, element, slider)
{	
	element.scrollLeft = Math.round(value/slider[element.id].maximum*(element.scrollWidth+10-element.offsetWidth));
}
function scrollVertical(value, element, slider)
{	
	element.scrollTop = Math.round(value/slider[element.id].maximum*(element.scrollHeight+10-element.offsetHeight));
}

function handle(obj,delta) {	
	slider[obj.id].setValueBy(-delta/5);
}

function wheel(event) {	
	var delta = 0;
	if (!event) /* For IE. */
		event = window.event;
	if (event.wheelDelta) { /* IE/Opera. */
		delta = event.wheelDelta/120;
		/** In Opera 9, delta differs in sign as compared to IE.*/
		/*if (window.opera)
			delta = -delta;*/
	} else if (event.detail) { /** Mozilla case. */
		/** In Mozilla, sign of delta is different than in IE.
		* Also, delta is multiple of 3.
		*/
		delta = -event.detail/3;
	}
	/** If delta is nonzero, handle it.
	* Basically, delta is now positive if wheel was scrolled up,
	* and negative, if wheel was scrolled down.
	*/
	if (delta)
		handle(this,delta);
	/** Prevent default actions caused by mouse wheel.
	* That might be ugly, but we handle scrolls somehow
	* anyway, so don't bother here..
	*/
	if (event.preventDefault)
		event.preventDefault();
	event.returnValue = false;
}
