(function($){
	var CajasolSlider=function(element,options){
						var settings=$.extend({},$.fn.cajasolSlider.defaults,options);
						var vars={currentSlide:0,antSlide:0,antImage:'',currentImage:'',totalSlides:0,randAnim:'',running:false,paused:false,stop:false};
						var slider=$(element);
						slider.data('cajasol:vars',vars);
						slider.css('position','relative');
						slider.addClass('cajasolSlider');
						var kids=slider.children();
						vars.currentSlide=Math.floor(Math.random()*(kids.size()));//numero aleatorio con respecto al total
						kids.each(function(){
									var child=$(this);
									var link='';
									if(!child.is('img')){
										if(child.is('a')){
											child.addClass('cajasol-imageLink');
											link=child;
										}
										child=child.find('img:first');
									}
									var childWidth=child.width();
									if(childWidth==0){
										childWidth=child.attr('width');
									}
									var childHeight=child.height();
									if(childHeight==0){
										childHeight=child.attr('height');
									}
									if(childWidth>slider.width()){
										slider.width(childWidth);
									}
									if(childHeight>slider.height()){
										slider.height(childHeight);
									}
									if(link!=''){
										link.css('display','none');
									}
									child.css('display','none');
									vars.totalSlides++;
						});
						if(settings.startSlide>0){
							if(settings.startSlide>=vars.totalSlides)
								settings.startSlide=vars.totalSlides-1;
							vars.currentSlide=settings.startSlide;
						}
						if($(kids[vars.currentSlide]).is('img')){
							vars.currentImage=$(kids[vars.currentSlide]);
						}else{
							vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
						}
						if($(kids[vars.currentSlide]).is('a')){
							$(kids[vars.currentSlide]).css('display','block');
						}
						slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
						/*slider.append($('<div class="cajasol-caption"><p></p></div>').css({display:'none',opacity:settings.captionOpacity}));*/
						var processCaption=function(settings){
							/*var cajasolCaption=$('.cajasol-caption',slider);
							if(vars.currentImage.attr('title')!=''){
								var title=vars.currentImage.attr('title');
								if(title.substr(0,1)=='#')
									title=$(title).html();
								if(cajasolCaption.css('display')=='block'){
									cajasolCaption.find('p').fadeOut(settings.animSpeed,function(){$(this).html(title);$(this).fadeIn(settings.animSpeed);});
								}else{
									cajasolCaption.find('p').html(title);
								}
								cajasolCaption.fadeIn(settings.animSpeed);
							}else{
								cajasolCaption.fadeOut(settings.animSpeed);
							}*/
						};
						processCaption(settings);
						var timer=0;
						if(!settings.manualAdvance&&kids.length>1){
							timer=setInterval(function(){
												cajasolRun(slider,kids,settings,false);
										},settings.pauseTime);
						}
						if(settings.directionNav){
							slider.append('<div class="cajasol-directionNav"><a class="cajasol-prevNav">'+settings.prevText+'</a><a class="cajasol-nextNav">'+settings.nextText+'</a></div>');
							if(settings.directionNavHide){
								$('.cajasol-directionNav',slider).hide();
								slider.hover(function(){$('.cajasol-directionNav',slider).show();},function(){$('.cajasol-directionNav',slider).hide();});
							}
							$('a.cajasol-prevNav',slider).live('click',function(){if(vars.running)return false;clearInterval(timer);timer='';vars.currentSlide-=2;cajasolRun(slider,kids,settings,'prev');});
							$('a.cajasol-nextNav',slider).live('click',function(){if(vars.running)return false;clearInterval(timer);timer='';cajasolRun(slider,kids,settings,'next');});
						}
						if(settings.controlNav){
							var cajasolControlDiv=$('<div class="cajasol-controlNav"></div>');
							slider.append(cajasolControlDiv);
							var cajasolControl=$('<ul></ul>');
							cajasolControlDiv.append(cajasolControl);
							for(var i=0;i<kids.length;i++){
								if(settings.controlNavThumbs){
									var child=kids.eq(i);
									if(!child.is('img')){
										child=child.find('img:first');
									}
									if(settings.controlNavThumbsFromRel){
										cajasolControl.append('<a class="cajasol-control" rel="'+i+'"><img src="'+child.attr('rel')+'" alt="" /></a>');
									}else{
										cajasolControl.append('<li><a rel="'+i+'"><img src="'+child.attr('src').replace(settings.controlNavThumbsSearch,settings.controlNavThumbsReplace)+'" alt="" /></a></li>');
									}
								}else{
									cajasolControl.append('<a class="cajasol-control" rel="'+i+'">'+(i+1)+'</a>');
								}
							}
							//$('.cajasol-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');
							//////////////////////////
							vars.antSlide = vars.currentSlide;
							var currentControlNav = $('.cajasol-controlNav a:eq('+vars.currentSlide+')',slider);
							currentControlNav.addClass('active');
							vars.antImage = vars.currentImage;
							//ponemos la imagen alargada
							var newSrcImg = vars.currentImage.attr('src').split('.jpg')[0]+'_thumbs_activo.png';
							currentControlNav.find('img:first').attr('src',newSrcImg);
							//////////////////////////
							$('.cajasol-controlNav a',slider).live('click',function(){
																			if(vars.running)return false;
																			if($(this).hasClass('active'))return false;
																			clearInterval(timer);timer='';
																			slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
																			vars.currentSlide=$(this).attr('rel')-1;
																			cajasolRun(slider,kids,settings,'control');
																			vars.antSlide = $(this).attr('rel'); ///////////////
																		});
						}
						if(settings.keyboardNav){
							$(window).keypress(function(event){
												if(event.keyCode=='37'){
													if(vars.running)return false;
													clearInterval(timer);
													timer='';
													vars.currentSlide-=2;
													cajasolRun(slider,kids,settings,'prev');
												}
												if(event.keyCode=='39'){
													if(vars.running)return false;
													clearInterval(timer);
													timer='';
													cajasolRun(slider,kids,settings,'next');}});
						}
						if(settings.pauseOnHover){
							slider.hover(function(){vars.paused=true;clearInterval(timer);timer='';},function(){vars.paused=false;if(timer==''&&!settings.manualAdvance){timer=setInterval(function(){cajasolRun(slider,kids,settings,false);},settings.pauseTime);}});
						}
						slider.bind('cajasol:animFinished',function(){
															vars.running=false;
															$(kids).each(function(){
																			if($(this).is('a')){
																				$(this).css('display','none');
																			}});
															if($(kids[vars.currentSlide]).is('a')){
																$(kids[vars.currentSlide]).css('display','block');
															}
															if(timer==''&&!vars.paused&&!settings.manualAdvance){
																timer=setInterval(function(){cajasolRun(slider,kids,settings,false);},settings.pauseTime);
															}
															settings.afterChange.call(this);});
						var createSlices=function(slider,settings,vars){
											for(var i=0;i<settings.slices;i++){
												var sliceWidth=Math.round(slider.width()/settings.slices);
												if(i==settings.slices-1){
													slider.append($('<div class="cajasol-slice"></div>').css({left:(sliceWidth*i)+'px',width:(slider.width()-(sliceWidth*i))+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'}));
												}else{
													slider.append($('<div class="cajasol-slice"></div>').css({left:(sliceWidth*i)+'px',width:sliceWidth+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'}));
												}
											}
										};
						var createBoxes=function(slider,settings,vars){
											var boxWidth=Math.round(slider.width()/settings.boxCols);
											var boxHeight=Math.round(slider.height()/settings.boxRows);
											for(var rows=0;rows<settings.boxRows;rows++){
												for(var cols=0;cols<settings.boxCols;cols++){
													if(cols==settings.boxCols-1){
														slider.append($('<div class="cajasol-box"></div>').css({opacity:0,left:(boxWidth*cols)+'px',top:(boxHeight*rows)+'px',width:(slider.width()-(boxWidth*cols))+'px',height:boxHeight+'px',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'}));
													}else{
														slider.append($('<div class="cajasol-box"></div>').css({opacity:0,left:(boxWidth*cols)+'px',top:(boxHeight*rows)+'px',width:boxWidth+'px',height:boxHeight+'px',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'}));
													}
												}
											}
										};
						var cajasolChangeControlNav = function(){
										if(settings.controlNav){
											//ponemos el anterior en peque&ntilde;o
											var antControlNav = $('.cajasol-controlNav a:eq('+vars.antSlide+')',slider);
											var antImgControl = antControlNav.find('img:first');
											var antSrcImg = vars.antImage.attr('src').split('.jpg')[0]+'_thumbs.png';
											antImgControl.fadeOut(500, function(){
												$(this).attr('src',antSrcImg);
												$(this).fadeIn(500);
											});
											//eliminamos todos los class active
											$('.cajasol-controlNav a',slider).removeClass('active');
											//cambiamos de imagen a la recogida
											var currentControlNav = $('.cajasol-controlNav a:eq('+vars.currentSlide+')',slider);
											currentControlNav.addClass('active');
											//ponemos la imagen alargada
											var currentImgControl = currentControlNav.find('img:first');
											var newSrcImg = vars.currentImage.attr('src').split('.jpg')[0]+'_thumbs_activo.png';
											currentImgControl.fadeOut(500, function(){
												$(this).attr('src',newSrcImg);
												$(this).fadeIn(500);
											});
											
											
											//actualizamos el anterior con actual
											vars.antImage = vars.currentImage;
											vars.antSlide = vars.currentSlide;
										}
						};
						var cajasolRun=function(slider,kids,settings,nudge){
										var vars=slider.data('cajasol:vars');
										if(vars&&(vars.currentSlide==vars.totalSlides-1)){
											settings.lastSlide.call(this);
										}
										if((!vars||vars.stop)&&!nudge)return false;
										settings.beforeChange.call(this);
										if(!nudge){
											slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
										}else{
											if(nudge=='prev'){
												slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
											}
											if(nudge=='next'){
												slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
											}
										}
										vars.currentSlide++; 
										if(vars.currentSlide==vars.totalSlides){
											vars.currentSlide=0;
											vars.antSlide = vars.totalSlides - 1; /////////////
											settings.slideshowEnd.call(this);
										}
										if(vars.currentSlide<0)
											vars.currentSlide=(vars.totalSlides-1);
										if($(kids[vars.currentSlide]).is('img')){
											vars.currentImage=$(kids[vars.currentSlide]);
										}else{
											vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
										}
										cajasolChangeControlNav(); //////////
										/*if(settings.controlNav){
											//ponemos el anterior en peque&ntilde;o
											var antControlNav = $('.cajasol-controlNav a:eq('+vars.antSlide+')',slider);
											var antSrcImg = vars.antImage.attr('src').split('.jpg')[0]+'_thumbs.png';
											antControlNav.find('img:first').attr('src',antSrcImg);
											//eliminamos todos los class active
											$('.cajasol-controlNav a',slider).removeClass('active');
											//cambiamos de imagen a la recogida
											var currentControlNav = $('.cajasol-controlNav a:eq('+vars.currentSlide+')',slider);
											currentControlNav.addClass('active');
											//ponemos la imagen alargada
											var newSrcImg = vars.currentImage.attr('src').split('.jpg')[0]+'_thumbs_activo.png';
											currentControlNav.find('img:first').attr('src',newSrcImg);
											//actualizamos el anterior con actual
											vars.antImage = vars.currentImage;
											vars.antSlide = vars.currentSlide;
										}*/
										processCaption(settings);
										$('.cajasol-slice',slider).remove();
										$('.cajasol-box',slider).remove();
										if(settings.effect=='random'){
											var anims=new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade','boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
											vars.randAnim=anims[Math.floor(Math.random()*(anims.length+1))];
											if(vars.randAnim==undefined)vars.randAnim='fade';
										}
										if(settings.effect.indexOf(',')!=-1){
											var anims=settings.effect.split(',');
											vars.randAnim=anims[Math.floor(Math.random()*(anims.length))];
											if(vars.randAnim==undefined)vars.randAnim='fade';
										}
										vars.running=true;
										if(settings.effect=='sliceDown'||settings.effect=='sliceDownRight'||vars.randAnim=='sliceDownRight'||settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft'){
											createSlices(slider,settings,vars);
											var timeBuff=0;
											var i=0;
											var slices=$('.cajasol-slice',slider);
											if(settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft')
												slices=$('.cajasol-slice',slider)._reverse();
											slices.each(function(){
															var slice=$(this);
															slice.css('top','0px');
															if(i==settings.slices-1){
																setTimeout(function(){
																				slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('cajasol:animFinished');});
																			},(100+timeBuff));
															}else{
																setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);},(100+timeBuff));
															}
															timeBuff+=50;i++;});
										}else if(settings.effect=='sliceUp'||settings.effect=='sliceUpRight'||vars.randAnim=='sliceUpRight'||settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft'){
											createSlices(slider,settings,vars);
											var timeBuff=0;
											var i=0;
											var slices=$('.cajasol-slice',slider);
											if(settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft')
												slices=$('.cajasol-slice',slider)._reverse();
											slices.each(function(){
															var slice=$(this);
															slice.css('bottom','0px');
															if(i==settings.slices-1){
																setTimeout(function(){
																				slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('cajasol:animFinished');});},(100+timeBuff));
															}else{
																setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);},(100+timeBuff));
															}
															timeBuff+=50;i++;});
										}else if(settings.effect=='sliceUpDown'||settings.effect=='sliceUpDownRight'||vars.randAnim=='sliceUpDown'||settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft'){
											createSlices(slider,settings,vars);
											var timeBuff=0;
											var i=0;
											var v=0;
											var slices=$('.cajasol-slice',slider);
											if(settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft')
												slices=$('.cajasol-slice',slider)._reverse();
											slices.each(function(){
															var slice=$(this);
															if(i==0){
																slice.css('top','0px');
																i++;
															}else{
																slice.css('bottom','0px');
																i=0;
															}
															if(v==settings.slices-1){
																setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('cajasol:animFinished');});},(100+timeBuff));
															}else{
																setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);},(100+timeBuff));
															}
															timeBuff+=50;v++;});
										}else if(settings.effect=='fold'||vars.randAnim=='fold'){
											createSlices(slider,settings,vars);
											var timeBuff=0;
											var i=0;
											$('.cajasol-slice',slider).each(function(){
																			var slice=$(this);
																			var origWidth=slice.width();
																			slice.css({top:'0px',height:'100%',width:'0px'});
																			if(i==settings.slices-1){
																				setTimeout(function(){slice.animate({width:origWidth,opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('cajasol:animFinished');});},(100+timeBuff));
																			}else{
																				setTimeout(function(){slice.animate({width:origWidth,opacity:'1.0'},settings.animSpeed);},(100+timeBuff));
																			}
																			timeBuff+=50;i++;});
										}else if(settings.effect=='fade'||vars.randAnim=='fade'){
											createSlices(slider,settings,vars);
											var firstSlice=$('.cajasol-slice:first',slider);
											firstSlice.css({'height':'100%','width':slider.width()+'px','top':'0px'});
											firstSlice.animate({opacity:'1.0'},(settings.animSpeed*2),'',function(){slider.trigger('cajasol:animFinished');});
										}else if(settings.effect=='slideInRight'||vars.randAnim=='slideInRight'){
											createSlices(slider,settings,vars);
											var firstSlice=$('.cajasol-slice:first',slider);
											firstSlice.css({'height':'100%','width':'0px','opacity':'1'});
											firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function(){slider.trigger('cajasol:animFinished');});
										}else if(settings.effect=='slideInLeft'||vars.randAnim=='slideInLeft'){
											createSlices(slider,settings,vars);
											var firstSlice=$('.cajasol-slice:first',slider);
											firstSlice.css({'height':'100%','width':'0px','opacity':'1','left':'','right':'0px'});
											firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function(){firstSlice.css({'left':'0px','right':''});slider.trigger('cajasol:animFinished');});
										}else if(settings.effect=='boxRandom'||vars.randAnim=='boxRandom'){
											createBoxes(slider,settings,vars);
											var totalBoxes=settings.boxCols*settings.boxRows;
											var i=0;
											var timeBuff=0;
											var boxes=shuffle($('.cajasol-box',slider));
											boxes.each(function(){
															var box=$(this);
															if(i==totalBoxes-1){
																setTimeout(function(){box.animate({opacity:'1'},settings.animSpeed,'',function(){slider.trigger('cajasol:animFinished');});},(100+timeBuff));
															}else{
																setTimeout(function(){box.animate({opacity:'1'},settings.animSpeed);},(100+timeBuff));
															}
															timeBuff+=20;i++;});
										}else if(settings.effect=='boxRain'||vars.randAnim=='boxRain'||settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
											createBoxes(slider,settings,vars);
											var totalBoxes=settings.boxCols*settings.boxRows;
											var i=0;
											var timeBuff=0;
											var rowIndex=0;
											var colIndex=0;
											var box2Darr=new Array();
											box2Darr[rowIndex]=new Array();
											var boxes=$('.cajasol-box',slider);
											if(settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
												boxes=$('.cajasol-box',slider)._reverse();
											}
											boxes.each(function(){
															box2Darr[rowIndex][colIndex]=$(this);
															colIndex++;
															if(colIndex==settings.boxCols){
																rowIndex++;
																colIndex=0;
																box2Darr[rowIndex]=new Array();
															}});
											for(var cols=0;cols<(settings.boxCols*2);cols++){
												var prevCol=cols;
												for(var rows=0;rows<settings.boxRows;rows++){
													if(prevCol>=0&&prevCol<settings.boxCols){
														(function(row,col,time,i,totalBoxes){
															var box=$(box2Darr[row][col]);
															var w=box.width();
															var h=box.height();
															if(settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
																box.width(0).height(0);
															}
															if(i==totalBoxes-1){
																setTimeout(function(){box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3,'',function(){slider.trigger('cajasol:animFinished');});},(100+time));
															}else{
																setTimeout(function(){box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3);},(100+time));
															}
														})(rows,prevCol,timeBuff,i,totalBoxes);
														i++;
													}
													prevCol--;
												}
												timeBuff+=100;
											}
										}
									};
						var shuffle=function(arr){
							for(var j,x,i=arr.length;i;j=parseInt(Math.random()*i),x=arr[--i],arr[i]=arr[j],arr[j]=x);return arr;
						};
						var trace=function(msg){
							if(this.console&&typeof console.log!="undefined")
								console.log(msg);
						};
						this.stop=function(){
							if(!$(element).data('cajasol:vars').stop){
								$(element).data('cajasol:vars').stop=true;
								trace('Stop Slider');
							}
						};
						this.start=function(){
							if($(element).data('cajasol:vars').stop){
								$(element).data('cajasol:vars').stop=false;
								trace('Start Slider');
							}
						};
						settings.afterLoad.call(this);
						return this;
					};
	$.fn.cajasolSlider=function(options){
		return this.each(function(key,value){
							var element=$(this);
							if(element.data('cajasolSlider'))return element.data('cajasolSlider');
							var cajasolSlider=new CajasolSlider(this,options);
							element.data('cajasolSlider',cajasolSlider);
						});
	};
	$.fn.cajasolSlider.defaults={effect:'random',slices:15,boxCols:8,boxRows:4,animSpeed:500,pauseTime:3000,startSlide:0,directionNav:true,directionNavHide:true,controlNav:true,controlNavThumbs:false,controlNavThumbsFromRel:false,controlNavThumbsSearch:'.jpg',controlNavThumbsReplace:'_thumb.jpg',keyboardNav:true,pauseOnHover:true,manualAdvance:false,captionOpacity:0.8,prevText:'Prev',nextText:'Next',beforeChange:function(){},afterChange:function(){},slideshowEnd:function(){},lastSlide:function(){},afterLoad:function(){}};
	$.fn._reverse=[].reverse;
})(jQuery);
