var baseURL = '';

function loadSlide(params){
	params.pars		= params.url.split('?')[1];
	params.url		= params.url.split('?')[0];
	params.callback	= buildSlide;
	var myAjax			= new Ajax.Request(
		params.url,
		{
			method: 'get',
			parameters: params.pars,
			onComplete: function(transport){
				//this.res = transport.responseText.evalJSON(true);
				eval('this.res = ' + transport.responseText + ';');
				Object.isFunction(this.callback) ? this.callback(this) : this.container.replace(this.res.result);
			}.bind(params)
		}
	);
}

function buildSlide(params){
	
	params.cont.images = new Array();
	var firstImg = new Element('img');
	firstImg.src = params.cont.down('p.easyslide-image').down('img.easyslide-img').src;
	firstImg.description = params.cont.down('p.easyslide-caption').innerHTML;
	params.cont.images.push(firstImg);
	
	
	var outerDiv	= new Element('div', {'class': 'easyslide-image-outer'});
	var innerDiv	= new Element('div', {'class': 'easyslide-image-inner'});
	var links		= params.cont.down('span.easyslide-links').remove();

	innerDiv.resize	= function(){
		this.setStyle({
			width: this.select('img').inject(0, function(acc, img){
				return acc + img.getWidth();
			})+'px'
		});
	}
	
	/*innerDiv.setStyle({
		width: firstImg.width+'px'
	});*/
	
	outerDiv.setStyle({
		width: firstImg.width+'px',
		height: firstImg.height+'px'
	});
	links.setStyle({
		width: firstImg.width+'px'
	});
	links.addClassName('easyslide-links-js');
	
	innerDiv.appendChild(firstImg);
	for(var i = 1; i < params.res.length; i++){
		var img = new Element('img');
		img.src = params.res[i].img;
		img.onload = innerDiv.resize.bind(innerDiv);
		img.description = params.res[i].description;
		params.cont.images.push(img);
		innerDiv.appendChild(img);
	}
	
	params.cont.aPrev.onclick = function(){
		slideTo(-1, params.cont);
		return false;
	}
	
	params.cont.aNext.onclick = function(){
		slideTo(1, params.cont);
		return false;
	}
	
	outerDiv.update(innerDiv);
	params.cont.images[0].setOpacity(0.1);
	outerDiv.appendChild(links);
	params.cont.down('p.easyslide-image').replace(outerDiv);
	
	params.cont.innerDiv	= innerDiv;
	params.cont.outerDiv	= outerDiv;
	params.cont.links		= links;
	
	slideTo(1, params.cont);
}


function slideTo(dir, el){
	el.currentImage = el.currentImage || 0;
	var nextImage = Math.min(el.images.length - 1, Math.max(0, el.currentImage + dir));
	
	if(el.images[nextImage].complete != true){
		window.setTimeout(slideTo.bind(null, dir, el), 1000);
		return false;
	}
	el.images[0].setOpacity(1);
	
	var moveTo = el.images.inject(0, function(acc, image, index){
		return acc + ((index < nextImage) ? image.width : 0);
	});
	
	new Effect.Parallel([
		new Effect.Move(
			el.innerDiv,
			{
				x: -moveTo,
				y: 0,
				mode: 'absolute',
				transition: Effect.Transitions.sinoidal,
				sync: true
			}
		),
		new Effect.Morph(el.outerDiv, {
			style: 'width:'+el.images[nextImage].width+'px;height:'+el.images[nextImage].height+'px;',
			sync: true
		}),
		new Effect.Morph(el.links, {
			style: 'width:'+el.images[nextImage].width+'px;',
			sync: true
		})
	], {
		duration: 0.7,
		beforeStart: function(){
			this.currentImage += dir;
			this.aPrev[this.currentImage ? 'show' : 'hide']();
			this.aNext[(this.currentImage < this.images.length -1) ? 'show' : 'hide']();
		}.bind(el),
		afterFinish: function(){
			if(this.images[this.currentImage].description.length){
				this.down('p.easyslide-caption').show();
				this.down('p.easyslide-caption').addClassName('easyslide-caption-js');
				this.down('p.easyslide-caption').setStyle({width: (this.images[this.currentImage].width - 50)+'px'});
				this.down('p.easyslide-caption').update('<span>'+this.images[this.currentImage].description+'</span>');
			} else{
				this.down('p.easyslide-caption').hide();
			}
		}.bind(el)
	});
	
}

document.observe('dom:loaded', function(){
	$$('div.easyslide-container').each(function(el, index){
		el.aPrev	= el.down('span.easyslide-prev').down('a');
		el.aNext	= el.down('span.easyslide-next').down('a');
		
		if(el.down('p.easyslide-caption').innerHTML == ''){
			el.down('p.easyslide-caption').hide();
		}

		el.aPrev.onclick = function(){
			params	= {
				url:	this+'&type=222',
				cont:	el
			}
			loadSlide(params);
			return false;
		}
		el.aPrev.hide();
		
		el.aNext.onclick = function(){
			params = {
				url:	this+'&type=222',
				cont:	el
			}
			loadSlide(params);
			return false;
		}
	});
});
