if (typeof window.addEventListener != 'undefined') window.addEventListener('load', init, false);
else if (typeof window.attachEvent != 'undefined') window.attachEvent('onload', init);

var istep=0;
var title = null, oSlider0 = null, oSlider1 = null, img0 = null, img1 = null, SliderSize = null;
var bFirst = true;
var bFirstPass = true;
var Bound = [0,0];
var oGalTitle = null;
var bStopSplider = false;
var isTreating = false;
if(typeof _debug == 'undefined') var _debug = false;
if(typeof gallery_direct == 'undefined') var gallery_direct = 0;
var Controls = {prev:null, next:null};
var incr = 1;
var switchTitle=true;
var nslider = 0;
var bFirst1 = true;
var o = 0;

var isOpera = navigator.appCodeName.match(/opera/i)!== null;

var rsElems = ['headertable', 'hr1', 'hr2', 'scale_table'];
var rsObjs = {};
function resizeElements(w){
	for(var i = 0; i < rsElems.length; i++){
		var j = rsElems[i];
		if(typeof rsObjs[j] == 'undefined') rsObjs[j] = document.getElementById(j);
		if(rsObjs[j]) rsObjs[j].style.width = w+'px';
	}
}
function init(){
	if(oSlider0 == null) {
		if(!(oSlider0 = document.getElementById('laeyr0'))) return;
		SetOpacity(oSlider0, 0);
	}
	if(oSlider1 == null) {
		if(!(oSlider1 = document.getElementById('laeyr1'))) return;
		SetOpacity(oSlider1, 0);
	}
	if(oGalTitle == null) oGalTitle = document.getElementById('GalTitle');
	var h0 = 0;
	if(title !== null || (title = document.getElementById('f_title'))) h0 = title.offsetHeight;
    var b = document.body;
	if(typeof max_w != 'undefined' && typeof max_h != 'undefined'){
		if(max_w == 0) max_w = b.offsetWidth - (isOpera ? 0 : 20);
		if(max_h == 0){
			var ss = getElementPosition(oSlider0);
			Bound = [max_w, b.offsetHeight-ss.top];
		}
		else{
			Bound = [max_w, max_h];
		}
	}
	else Bound = [b.offsetWidth, b.offsetHeight];
	var tw = 0, th = 0;
	for(var i=0; i < sliderfiles.length; i++){
		if(tw < sliderfiles[i][1]) tw = sliderfiles[i][1];
		if(th < sliderfiles[i][2]) th = sliderfiles[i][2];
	}
	if(Bound[1]<th) tw = Math.floor(tw*Bound[1]/th);
	resizeElements(tw);
//	var headertable = document.getElementById('headertable');
//	if(headertable) headertable.style.width = tw+'px';
	var menu = document.getElementById('menu');
	if(menu) menu.style.marginRight = Math.floor((b.offsetWidth-tw)/2)+'px';
	oSlider0.style.width = Bound[0]+'px'; oSlider0.style.height = Bound[1]+'px';
	oSlider1.style.width = Bound[0]+'px'; oSlider1.style.height = Bound[1]+'px';
	oSlider1.style.position = 'absolute';
	SliderSize  = getElementPosition(oSlider0);
	var l1 = document.getElementById('laeyr_1');
	if(l1){
		l1.style.top = SliderSize.top+'px';
		l1.style.width = SliderSize.width+'px';
		l1.style.textAlign = 'center';
	}
	if(Controls.prev !== null){
		Controls.prev.style.left = SliderSize.left+'px';
		Controls.prev.style.top = parseInt(SliderSize.top+(SliderSize.height-100)/2)+'px';
	}
	if(Controls.next !== null){
		Controls.next.style.left = (SliderSize.left+SliderSize.width-10)+'px';
		Controls.next.style.top = parseInt(SliderSize.top+(SliderSize.height-100)/2)+'px';
	}

	if(istep == 0){
		istep++; init();
	}
	else{ 
		if(typeof slider != 'undefined') {
			if(typeof slider[nslider] != 'undefined') ResizeImg(img0, slider[nslider]);
			if(typeof slider[nslider+1] != 'undefined') ResizeImg(img1, slider[nslider+1]);
		}
		istep=0; 
		if(bFirst) { bFirst=false; DownloadFiles(); }
	}

}

function InitRotateImg(){
	if(!bFirst1 || typeof slider == 'undefined' || slider.length < 2) return;
	bFirst1 = false;
	oSlider0.innerHTML = '';
	oSlider0.padding = 0;
	img0 = document.createElement('IMG');
	img0.src = slider[0][0];
	img0.width = img0.height = 0;
	oSlider0.appendChild(img0);
	ResizeImg(img0, slider[0]); 
	oSlider0.onclick = function(e){ if(bStopSplider && !isTreating) Next(); }

	oSlider1.innerHTML = '';
	oSlider1.padding = 0;
//	oSlider1.style.backgroundColor = '#f00';
	img1 = document.createElement('IMG');
	img1.src = slider[1][0];
	img1.width = img1.height = 0;
	oSlider1.appendChild(img1);
	ResizeImg(img1, slider[1]);
	
	var o = document.getElementById('laeyr_1');
	if(o) o.style.display = 'none';
	
	window.setTimeout(RotateImg0, 100);
}
function RotateImg0() {
	if(typeof slider == 'undefined') return;
	ResizeImg(img0, slider[nslider]);
	ResizeImg(img1, slider[nslider+1]);
	Fade0();
}
function Fade0(){
	var step = 0.05;
	var o = GetOpacity(oSlider0);
	var timer=window.setInterval(function() {
		if((o += incr*step)>=1 || o<=0){
			if(o>=1){
				SetOpacity(oSlider0, 1);
				incr = -1;
				window.clearInterval(timer);
				window.setTimeout(Fade0, 1500);
			}
			if(o<0){
				SetOpacity(oSlider0, 0);
				SetOpacity(oSlider1, 1);
				incr = 1;
				window.clearInterval(timer);
				if(gallery_direct != 0) CreateDirectElements();
				window.setTimeout(RotateImg, 1500);
			}
			return;
		}
		SetOpacity(oSlider0, o);
		if(incr<0) SetOpacity(oSlider1, 1-o);
		SetGalleryTitle(o);
	}, 100);
}

function RotateImg() {
	// смена картинки вперед
	if(typeof slider == 'undefined') return;
	if(bStopSplider || isTreating) return;
	nslider = (nslider + 1) % slider.length;
	ResizeImg(img0, slider[nslider]);
	SetOpacity(oSlider0, 1);
	var next = (nslider + 1) % slider.length;
	SetOpacity(oSlider1, 0);
	ResizeImg(img1, slider[next]);
	Fade();
}
function Fade(){
	isTreating = true;
	var step = 0.05;
	o = GetOpacity(oSlider0);
	if(o>=1) { o=1; incr = -1; }
	var timer=window.setInterval(function() {
		if((o += incr*step)>=1 || o<=0){
			if(o>1){
				SetOpacity(oSlider0, 1);
				SetOpacity(oSlider1, 0);
				incr = -1;
				window.clearInterval(timer);
				window.setTimeout(Fade, 1500);
			}
			if(o<0){
				SetOpacity(oSlider0, 0);
				SetOpacity(oSlider1, 1);
				incr = 1;
				window.clearInterval(timer);
				isTreating = false;
				if(!bStopSplider) window.setTimeout(RotateImg, 1500);
				else ShowControls(true);
				
			}
			return;
		}
		SetOpacity(oSlider0, o);
		SetOpacity(oSlider1, 1-o);
		SetGalleryTitle(o);
	}, 100);
}

function RotateImg1Step(nexti) {
	if(typeof slider == 'undefined') return;
	if(!bStopSplider || isTreating) return;
	if(nexti<0){
		var curr = (nslider + 1) % slider.length;
		ResizeImg(img0, slider[curr]);
		SetOpacity(oSlider0, 1);
		SetOpacity(oSlider1, 0);
		ResizeImg(img1, slider[nslider]);
		nslider = (nslider - 1) % slider.length;
		if(nslider < 0) nslider = slider.length-1
	}
	else{
		nslider = (nslider + 1) % slider.length;
		ResizeImg(img0, slider[nslider]);
		SetOpacity(oSlider0, 1);
		var next = (nslider + 1) % slider.length;
		SetOpacity(oSlider1, 0);
		ResizeImg(img1, slider[next]);
	}
	ShowControls(false);
	Fade();
}

function Next() {
	RotateImg1Step(1);
}
function Prev() {
	RotateImg1Step(-1);
}

function SetGalleryTitle(o){
	if(!oGalTitle) return;
	var ind = -1;
	if(incr < 0){ if(o < 0.5 && (ind = nslider + 1) >= slider.length) ind = 0; }
	else if(o > 0.5){ ind = nslider; }
	if(ind != -1) oGalTitle.innerHTML = (typeof gallery_name == 'undefined' ? '' : (gallery_name+'. ')) + slider[ind][3];
}

function ShowControls(show){
	Controls.prev.style.display = Controls.next.style.display = show ? 'block' : 'none';
}
function CreateDirectElements(){
	var b1 = document.getElementById('SlideShowButton');
	if(!b1) return;
	b1.innerHTML = 'Остановить слайдшоу';
	b1.className = 'stop';
	b1.onclick = function(){
		if(this.className == 'stop'){
			this.innerHTML = 'Возобновить слайдшоу';
			this.className = 'start';
			bStopSplider = true;
			if(!isTreating) ShowControls(true);
		}
		else{
			this.innerHTML = 'Остановить слайдшоу';
			this.className = 'stop';
			ShowControls(bStopSplider = false);
			if(!isTreating) RotateImg();
		}
	}
	Controls.prev = document.createElement('IMG');
	document.body.appendChild(Controls.prev);
	with(Controls.prev){
		width = 40; height = 100;
		src = '/imgs/trans.gif';
		alt = title = 'Предыдущее фото'
		onclick = function(){ Prev(); }
		style.cursor = 'pointer';
		style.background = 'url(/imgs/prev.png) no-repeat left top';
		style.display = 'block';
		style.position = 'absolute';
	}
	Controls.prev.style.left = SliderSize.left+'px';
	Controls.prev.style.top = parseInt(SliderSize.top+(SliderSize.height-100)/2)+'px';
	Controls.next = document.createElement('IMG');
	document.body.appendChild(Controls.next);
	with(Controls.next){
		width = 40; height = 100;
		src = '/imgs/trans.gif';
		alt = title = 'Следуюшее фото'
		onclick = function(){ Next(); }
		style.cursor = 'pointer';
		style.background = 'url(/imgs/next.png) no-repeat left top';
		style.display = 'block';
		style.position = 'absolute';
	}
	Controls.next.style.left = (SliderSize.left+SliderSize.width-40)+'px';
	Controls.next.style.top = parseInt(SliderSize.top+(SliderSize.height-100)/2)+'px';
}

function ResizeImg(oimg, img){
	oimg.src = img[0];
	var w2 = img[1], h2 = img[2];
	if(w2>Bound[0]){ h2 = Math.round(Bound[0]/img[1]*img[2]); w2 = Bound[0]; }
	if(h2>Bound[1]){ w2 = Math.round(Bound[1]/img[2]*img[1]); h2 = Bound[1]; }
	with(oimg.style){
		width = w2+'px';
		height = h2+'px';
		marginLeft = Math.round((Bound[0]-w2)/2)+'px';
		marginTop = Math.round((Bound[1]-h2)/2)+'px';
	}
}

function GetOpacity(obj){
	var o=(typeof(obj.style.KhtmlOpacity)!="undefined")? parseFloat(obj.style.KhtmlOpacity):
			(typeof(obj.style.MozOpacity)!="undefined")? parseFloat(obj.style.MozOpacity):
			(typeof(obj.filters)!="undefined") ? obj.filters.item("DXImageTransform.Microsoft.Alpha").Opacity/100:
			(typeof(obj.style.opacity)!="undefined")? parseFloat(obj.style.opacity):
			null;
	if(o==null) return 1;
	if(isNaN(o)) o = 1;
	return o;
}

function SetOpacity(o, v){
	if(o.filters){
		o.filters.item('DXImageTransform.Microsoft.Alpha').opacity=Math.floor(v*100);
	}
	with(o.style) { KhtmlOpacity=MozOpacity=opacity=v; }
}

function DownloadFiles(){
	if(typeof sliderfiles == 'undefined' || sliderfiles.length == 0) return;
	var req=null;
   	if (typeof(window.XMLHttpRequest)!='undefined') { try { req = new XMLHttpRequest(); } catch (e){ } }
   	else if (typeof(window.ActiveXObject)!='undefined') {
       	try { req = new ActiveXObject('Msxml2.XMLHTTP');} catch (e){
            try { req = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e){ }
		}
	}
	if(!req) return true;
	req.onreadystatechange = function(){
		try { 
			if (req.readyState == 4) {
				if (req.status == 200) {
					if(typeof slider == 'undefined') slider = new Array();
					var file = sliderfiles.shift();
					if(_debug) window.status = 'File '+file[0]+' is downloaded';
					slider.push(file);
				}
				else sliderfiles.shift();
				window.setTimeout(DownloadFiles, 500);
				InitRotateImg();
			} 
		}
		catch( e ) {
			sliderfiles.shift();
			window.setTimeout(DownloadFiles, 500);
		}
	}
	if(_debug) window.status = 'Download file '+sliderfiles[0][0];
	req.open("GET", sliderfiles[0][0], true);
	req.send(null);
	return false;
}
function getElementPosition(elem) {
	var w = elem.offsetWidth, h = elem.offsetHeight, l = 0, t = 0;
	while (elem) {
		l += elem.offsetLeft;
		t += elem.offsetTop;
		elem = elem.offsetParent;
	}
	return {"left":l, "top":t, "width": w, "height":h};
}
