(function($) {
		  
$.fn.jQuad = function(options){
	var defaults = {time:7000,controls:false,width:758,height:288,type:"fade",thumbnails:false,thumbnailposition:'left',view:"normal",callback:function(){  } };
	var options = $.extend(defaults, options);
	var root = $(this);
	root.find("div").attr("id","jQuad-stage");
	var scrollleft=0,scrolltop=0,current;
	var ul = root.find("ul:first");
	var li = ul.find("li");
	var images = li.find("img");
	if(options.type!="slider")
	{
	 li.find("span").hide();
	 li.find("span").last().show();
	}
	 ul.prepend("<span id='loader' style='padding:4px;width:100px;background:#000000;color:#ffffff'>Loading please wait....</span>");
	  
	 if(options.view=="maximize")
		{
			
		$.each(ul.find("li img"),function(){
		var source,resize;
		  source = $(this).attr("src");
		  resize = "<img src=scale.php?path="+source+"&height="+$(window).height()+"&width="+$(window).width()+" alt="+source+"  />"; 
		  $(this).replaceWith(resize);
		 
		 
										  });
		}
	  
      if($.browser.webkit)
	  {
		  $(window).load(function(){   proceed();   });
	  }
		else 
	 proceed(); 				 
	
										 
	
	function proceed(){
		$("#loader").remove();	
	
	var dimension = {
	height:images.height(), width:images.width()
	};	
	
	
	   if(options.width>0&&options.height>0)
	 {
		dimension = {
	height:options.height, width:options.width
	};	
		 
	 }
	
	var list_array = $.makeArray(li);
	var thumb_array,th_current;
   var image_timer,flag=false,in_flag=false,de_flag=false;
	var thumbnails;

	var arr,index,block,trans_ch,w,h,src,parent,im;
	
		if(options.type=="slider")
		slider();
		 
	 if(options.controls==true)
	controllers();
	if(options.view=="maximize"&&options.type!="slider")
	maximize();
	if(options.thumbnails==true&&root.find("ul").length>1)
	{
		
		thumbnails  = root.find("ul:last");
		thumbnails.attr("id","jquad-thumbnail");
		generatethumbnails(options.thumbnailposition);
	    
	}
	
	
	li.css({"width":dimension.width,height:dimension.height,display:"block"});
	$("#jQuad-stage").css({"width":dimension.width,height:dimension.height});
	if(options.type!="slider")	 
	li.addClass('reset');
	 
	 function incrementz()
	 {
				
		var th,sr,temp =  list_array.pop();
		list_array.unshift(temp);
		if($(list_array[0]).hasClass('active'))
			$(list_array[0]).toggleClass('active reset');
			$(list_array[0]).find("span").hide();
			
			$(list_array[list_array.length-1]).toggleClass('active reset');
				$(list_array[list_array.length-1]).find("span").show();
			$(list_array[list_array.length-2].firstChild).css({display:"block",opacity:1.0});
			$(list_array[list_array.length-1].firstChild).css({display:"block",opacity:1.0});
		if(options.thumbnails==true){
			$(th_current).toggleClass('hover');
			
			 if(options.view=="maximize")
			 sr = $(list_array[list_array.length-1].firstChild).attr("alt");
			 else
			 sr = list_array[list_array.length-1].firstChild.src;
			 
			 
			 if(sr.lastIndexOf('/')!=-1)
			 sr = sr.substr(sr.lastIndexOf('/')+1,sr.length-1);
			 
			for(var i=0;i<thumb_array.length;i++)
			{
				th = thumb_array[i].firstChild.src;
				if(th.lastIndexOf('/')!=-1)
				th = th.substr(th.lastIndexOf('/')+1,th.length-1);
				
				if(th==sr)
			     {
					 $(thumb_array[i]).toggleClass('hover');
				    break;
				 }
			   
			}
			th_current = thumb_array[i];
			
		}	
		  
		
			
		options.callback(list_array[list_array.length-1].firstChild);	
	 };
	 
	 function decrementz()
	{
		
	var th,sr,temp = list_array.shift();
	list_array.push(temp);
	if($(list_array[list_array.length-2]).hasClass('active'))
			$(list_array[list_array.length-2]).toggleClass('active reset');
			$(list_array[list_array.length-2]).find("span").hide();
			
			$(list_array[list_array.length-1]).toggleClass('active reset');
			$(list_array[list_array.length-1]).find("span").show();
			
			$(list_array[list_array.length-1].firstChild).css({display:"block",opacity:1.0});
			
			
		if(options.thumbnails==true){
			$(th_current).toggleClass('hover');
			 
			  if(options.view=="maximize")
			 sr = $(list_array[list_array.length-1].firstChild).attr("alt");
			 else
			 sr = list_array[list_array.length-1].firstChild.src;
			 
			 
			 
			 if(sr.lastIndexOf('/')!=-1)
			 sr = sr.substr(sr.lastIndexOf('/')+1,sr.length-1);
			 
			for(var i=0;i<thumb_array.length;i++)
			{
				th = thumb_array[i].firstChild.src;
				if(th.lastIndexOf('/')!=-1)
				th = th.substr(th.lastIndexOf('/')+1,th.length-1);
				
				if(th==sr)
			     {
					 $(thumb_array[i]).toggleClass('hover');
				    break;
				 }
			   
			}
			th_current = thumb_array[i];
			
		}		
		
				in_flag = false;
				if(flag==false) 
				 image_timer = setTimeout(function() {  effects(); },options.time); 
		
		options.callback(list_array[list_array.length-1].firstChild);	
	};

	
	 
	 function effects()
	 {
		  in_flag=true;
		  
		  if(options.type=="slider")
		  {
			  slidenext();
			  return;
		  }
		 if(de_flag==true)
		 {
			
			 $(list_array[list_array.length-2].firstChild).css({display:"block",opacity:1.0});
		  de_flag=false;
		 }
		  
		 if(!isNaN(parseInt(options.type)) )
		trans_ch = parseInt(options.type);
		else if(options.type=="all")								   
		trans_ch = Math.floor(Math.random()* 9);
		else if(options.type=="flip")
		trans_ch = 11;
		else if(options.type=="fade")
		trans_ch = 0;
		else if(options.type=="blind")
		trans_ch = Math.ceil(Math.random()* 4);
		else if(options.type=="cube")
		trans_ch = 7 + Math.floor(Math.random()* 2) ;
		else if(options.type=="spectrum")
		trans_ch = 5 + Math.floor(Math.random()* 2) ;
		else if(options.type=="strip")
		trans_ch = 9 + Math.floor(Math.random()* 2) ;
		
		
	 
       switch(trans_ch)
			  {
				  case 0:$(list_array[list_array.length-1].firstChild).fadeOut(1500,function(){ incrementz();
					 
					if(flag==false) 
					{
						
				image_timer = setTimeout(function() {
												  
												  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;  }); break;
			      case 1: verticaleaseout(list_array[list_array.length-1].firstChild); break;
				  case 2: horizontaleaseout(list_array[list_array.length-1].firstChild); break;
				  case 3: verticalblind(list_array[list_array.length-1].firstChild); break;
				  case 4: horizontalblind(list_array[list_array.length-1].firstChild); break;
				  case 5: spectrumout(list_array[list_array.length-1].firstChild); break;
				  case 6: hspectrumout(list_array[list_array.length-1].firstChild); break;
				  case 7: cubescale(list_array[list_array.length-1].firstChild); break;
				  case 8: cubeout(list_array[list_array.length-1].firstChild); break;
				  case 9: horizontalstripout(list_array[list_array.length-1].firstChild); break;
				  case 10: verticalstripout(list_array[list_array.length-1].firstChild); break;
				
				  default: case 11: incrementz();
			 }
	 };
	
	  function controllers()
	  {
	  var controls = "<span id='controller' class='hover'><a href='#' id='previous'></a><a href='#' id='playtoggle' class='pause'></a><a href='#' id='next'></a></span>";	 
       $("#jQuad-stage").prepend(controls);
	   $("#controller").hover(function(){ $(this).toggleClass('hover'); }
							 ,function(){ $(this).toggleClass('hover'); });
	  $("#previous").click(function(){ 
								   if(options.type=="slider")
								   slideprev();
								   else{
								   if(in_flag==false)
								 {
									 in_flag = true;de_flag = true; clearTimeout(image_timer);	
								   decrementz();   
								 }
								   }
								   
								    });
	   $("#next").click(function(){ 
								 
								 if(in_flag==false)
								 {
									 in_flag = true; 
									  
								 clearTimeout(image_timer);	   effects();   
								 }
									   });
	  
	  $("#playtoggle").click(function(){ $(this).toggleClass('play pause'); 
															  
		if(flag==false)
		{
			
			 clearTimeout(image_timer);
			 flag=true;in_flag=false;
		}
		else
		{
			flag=false;
			
			if(in_flag!=true)
			 {
				  
				  
				 effects();
			 }
			 
			
		}
		});
	   
	   
	  
	   
       };
	  
	  
	 function generatethumbnails(direction)
	{
		
	var thumbs = thumbnails.find("li");
	 thumbs.addClass('thumbnail hover')
	thumbs.find("img").addClass('thumbnail');
	thumb_array = $.makeArray(thumbs);
	
	
	 
	thumbs.bind({'mouseover mouseout':function(){  $(this).toggleClass('hover');  }  ,
				  'click':function(){   $.fn.jQuad.setimage(this.firstChild.src)   }													   
																	   });
		switch(direction)
		{
		case 'down': thumbnails.addClass('down');   
	  				break;
		case 'left': thumbnails.addClass('left');   
		            break;
		case 'right':if(options.view=="maximize")
						thumbnails.addClass('maximumright');
		              else
		              thumbnails.addClass('right');
						break;
		}
	
	
	} ;
	 
	function maximize(){
		  dimension.width =$(window).width();
		  dimension.height =$(window).height();
		$("#jQuad-stage").addClass("maximum");
		
		
		
		} ;
	
	
	function spectrumout(image)
	{
		im = $(image);
		 w = Math.floor(dimension.width/30);
		 arr = new Array();
		 var i =0;
		 var index = 0;
		 parent = im.parent();
		 src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:w,
						height:dimension.height,
						'background-image':'url('+src+')',
						'background-attachment':'scroll'					
						}
							
							});
		 while(i<dimension.width)
		 {				
			arr[index]  = block.clone().css({ "left":i ,backgroundPosition:-i+"px 0px" });
			parent.append(arr[index++]);
			i = i + w;
		 }
		 im.hide();
		 
		 i=arr.length;
		 setTimeout(function() { fade(); },500); 
		 
		function fade()
			{
				if(i<1)
				{
					
					
					 incrementz();
					 
					if(flag==false) 
					{
						
				image_timer = setTimeout(function() {
												  
												  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
				
					return;
				}
				
			if(i>=4)	
			arr[i-4].css("opacity",0.8);
			if(i>=3)
			arr[i-3].css("opacity",0.6);
			if(i>=2)
			arr[i-2].css("opacity",0.4);	
			if(i>=0)
			arr[i-1].css("opacity",0.2);	
				
		setTimeout(function() { arr[--i].remove(); fade(); },110); 
			
			};
		 
	
		}; 
	

		
	
	function cubeout(image)
	{
		 im = $(image);
		 w = Math.floor(dimension.width/5);
		 h = Math.floor(dimension.width/5);
		 parent = im.parent();
		 arr = new Array();
		 i =0;
		 j =0;
		 var index = 0;
		 src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:w,
						height:h,
						'background-image':'url('+src+')'
						
						}
							
							});
		 while(i<dimension.width)
		 {
			
		    j=0;
			while(j<dimension.height)
			{
				
				arr[index] = block.clone().css({left:i ,top:j,backgroundPosition:-i+"px "+-j+"px" });
				parent.append(arr[index++]);
			j = j + h;
			}
			
			i = i + w;
		 }
		 im.hide();
	    i=0;
		setTimeout(function(){ doit(); },500);
		function doit(){
	    var random_no = random_array(arr.length);
		
		 var timer = setInterval(function()
		{				
		 
		 $(arr[random_no[i++]]).remove();
			
		 if(i>arr.length)
			{
				incrementz();
				clearInterval(timer);
				
				if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
			}
		  
		},70);
				
		};
	};	
	

	function cubescale(image)
	{
		 im = $(image);
		 w = Math.floor(dimension.width/5);
		 h = Math.floor(dimension.width/5);
		 parent = im.parent();
		 arr = new Array();
		 var i =0;
		 var j =0;
		 var index = 0;
		 src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:w,
						height:h,
						'background-image':'url('+src+')'
						
						}
					        });
		 while(i<dimension.width)
		 {
			
		    j=0;
			while(j<dimension.height)
			{
				
				arr[index] = block.clone().css({left:i ,top:j,backgroundPosition:-i+"px "+-j+"px" });
				parent.append(arr[index++]);
			j = j + h;
			}
			
			i = i + w;
		 }
		 im.hide();
	    i=0;
		setTimeout(function(){ doit(); },90);
		function doit(){
	    var random_no = random_array(arr.length);
		
		 var timer = setInterval(function()
		{				
		  
		  $(arr[random_no[i++]]).hide(160,function(){  $(this).remove();  });
		 
			
		 if(i>arr.length)
			{
				incrementz();
				clearInterval(timer);
				if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
			}
		  
		},110);
				
		};
	};	
	function hspectrumout(image)
	{
		 im = $(image);
		 h= Math.floor(dimension.height/30);
		 arr = new Array();
		 i =0;
		 var index = 0;
		 parent =im.parent();
		 src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:dimension.width,
						height:h,
						'background-image':'url('+src+')'
						}
							
							});
		 while(i<dimension.height)
		 {
			arr[index]  = block.clone().css({ "top":i ,backgroundPosition:"0px "+-i+"px" });
		    parent.append(arr[index++]);
			i = i + h;
		 }
		 im.hide();
		  i=arr.length;
		 setTimeout(function() { fade(); },1000); 
		 
		function fade()
			{
				if(i<1)
				{
					// end= new Date().getTime();
					 //alert(end-start);
					 incrementz();
					 if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
					return;
				}
				
			if(i>=4)	
			arr[i-4].css("opacity",0.8);
			if(i>=3)
			arr[i-3].css("opacity",0.6);
			if(i>=2)
			arr[i-2].css("opacity",0.4);	
			if(i>=0)
			arr[i-1].css("opacity",0.2);	
				
		setTimeout(function() { arr[--i].remove(); fade(); },110); 
			
			};
		 
	
		}; 
	

	function horizontaleaseout(image)
	{
		 im = $(image);
		 h= Math.floor(dimension.height/14);
		 arr = new Array();
		 i =0;
		 index = 0;
		 parent = im.parent();
		 src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:dimension.width,
						height:h,
						'background-image':'url('+src+')'
						
						}
							
							});
		 while(i<dimension.height)
		 {
					
			arr[index]  = block.clone().css({ "top":i ,backgroundPosition:"0px "+-i+"px" });
		    parent.append(arr[index]);
			i = i + h;
			arr[index].delay(i*1.2).animate({height:0},500,function(){  $(this).remove();  });
			index++;
		 }
		 im.hide();
		  setTimeout(function(){ incrementz(); 
											
											if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
											
											},2000);
	
		}; 
	
	function horizontalblind(image)
	{
		 im = $(image);
		 h=  Math.floor(dimension.height/15);
		 arr = new Array();
		 var i =0;
		 index = 0;
		 parent = im.parent();
		 src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:dimension.width,
						height:h,
						'background-image':'url('+src+')'
						
						}
							
							});
		 while(i<dimension.height)
		 {
					
				arr[index]  = block.clone().css({ "top":i ,backgroundPosition:"0px "+-i+"px" });
				 parent.append(arr[index]);
			i = i + h;
			arr[index].animate({height:0},500,function(){  $(this).remove();  });
			index++;
		 }
		im.hide();
		 setTimeout(function(){ incrementz();
										 if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;  
										   
										   },2000);		
			
	}; 
	
	function verticalblind(image)
	{
		 im = $(image);
		 w=  Math.floor(dimension.width/20);
		 arr = new Array();
		 var i =0;
		 index = 0;
		 parent = im.parent();
		 src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:w,
						height:dimension.height,
						'background-image':'url('+src+')'
						
						}
							
							});
		 while(i<dimension.width)
		 {
					
				arr[index]  = block.clone().css({ "left":i ,backgroundPosition:-i+"px 0px" });
				 parent.append(arr[index]);
			i = i + w;
			arr[index].animate({width:0},500,function(){  $(this).remove();  });
			index++;
		 }
		im.hide();
		setTimeout(function(){ incrementz();
										  if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
										  
										  },2000);		
			
	}; 
	
	
	function verticaleaseout(image)
	{
		im = $(image);
		w = Math.floor(dimension.width/17);
		if(options.view=="maximize")
		w = Math.floor(im.width()/15);
		
		arr = new Array();
		var fac,i =0;
		var index = 0;
		parent = im.parent();
		src = im.attr("src");
		block = $("<div />",{
					css:{
						position:"absolute",
						width:w,
						height:dimension.height,
						'background-image':'url('+src+')'
						}
							
							});
		 while(i<dimension.width)
		 {
					
				arr[index]  = block.clone().css({ "left":i ,backgroundPosition:-i+"px 0px" });
		    parent.append(arr[index]);
			i = i + w;
			arr[index].delay(i*1.2).animate({width:0},400,function(){  $(this).remove();  });
				index++;
		 }
		im.hide();
				  
		 setTimeout(function(){ incrementz();
										 if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;  
										   
										   },2000);
		
		}; 
	
	
	
	function horizontalstripout(image)
	{
		im = $(image);
		h= Math.floor(dimension.height/30);
		arr = new Array();
		var i =0;
		index = 0;
		parent = im.parent();
		src = im.attr("src");
		 block = $("<div />",{
					css:{
						position:"absolute",
						width:dimension.width,
						height:h,
						'background-image':'url('+src+')'
						
						}
							
							});
		 while(i<dimension.height)
		 {
					
				arr[index]  = block.clone().css({ "top":i ,backgroundPosition:"0px "+-i+"px" });
				 parent.append(arr[index]);
			i = i + h ;
			
			index++;
		 }
		 im.hide();
		 i=0;
		setTimeout(function(){ doit(); },1000);
		function doit(){
	    var random_no = random_array(arr.length);
		
		 var timer = setInterval(function()
		{				
		 
		 $(arr[random_no[i++]]).remove();
			
		 if(i>arr.length)
			{
				incrementz();
				if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
				clearInterval(timer);
			}
		  
		},70);
				
		};
		
	};
	
	
	
	function verticalstripout(image)
	{
		im = $(image);
		w= Math.floor(dimension.width/30);
		arr = new Array();
		var i =0;
		index = 0;
		var parent = im.parent();
		var src = im.attr("src");
		block = $("<div />",{
					css:{
						position:"absolute",
						width:w,
						height:dimension.height,
						'background-image':'url('+src+')'
						
						}
							
							});
		 while(i<dimension.width)
		 {
					
				arr[index]  = block.clone().css({ "left":i ,backgroundPosition:-i+"px 0px" });
				 parent.append(arr[index]);
			i = i + w ;
			
			index++;
		 }
		 im.hide();
		 i=0;
		setTimeout(function(){ doit(); },1000);
		function doit(){
	    var random_no = random_array(arr.length);
		
		 var timer = setInterval(function()
		{				
		 
		 $(arr[random_no[i++]]).remove();
			
		 if(i>arr.length)
			{
				incrementz();
				if(flag==false) 
					{
						image_timer = setTimeout(function() {
												  		  effects(); },options.time); 
				 
					}
				 if(in_flag==true)
				 in_flag=false;
				clearInterval(timer);
			}
		  
		},70);
				
		};
	
		};
	
   $.fn.jQuad.setimage = function(image){
		
		   var th;
		    
			if(image.lastIndexOf('/')!=-1)
			 image = image.substr(image.lastIndexOf('/')+1,image.length-1);
			 
			for(var i=0;i<list_array.length;i++)
			{
				if(options.view=="maximize")
				th = $(list_array[list_array.length-1].firstChild).attr("alt");
				else
				th = list_array[list_array.length-1].firstChild.src;
				if(th.lastIndexOf('/')!=-1)
				th = th.substr(th.lastIndexOf('/')+1,th.length-1);
				
				
				
				if(th==image)
			       break;
				else
				 incrementz();
				
			   
			}
		
		
		};
		
		function slider()
		{
			
			current = ul.find("li:first");
			//images.css({height:dimension.height,width:dimension.width});
			
			i =0;
			$(ul).wrap("<div class='slider' />");
			$("div.slider").css({height:dimension.height,width:dimension.width});
			$(ul).css({height:dimension.height});
				$.each(ul.find("li"),function(){
										  
										  $(this).css("margin-left",i);
										  i = i + dimension.width;
										  });
				
		  
			
		}
		function slidenext()
		{
			current = current.next();
			if(current.length==0)
			{
				current =  ul.find("li:first");
				scrollleft = 0;
			}
			else
			scrollleft = scrollleft + dimension.width;
			
			$("div.slider").animate({scrollLeft:scrollleft},2000,function(){
																if(flag==false) 
					                                            {
						                             			image_timer = setTimeout(function() {
												  				  effects(); },options.time); 
				                                 				}
																 if(in_flag==true)
																 in_flag=false;
																		  });
															
				 
			
		}
		
		function slideprev()
		{
			current = current.prev();
			if(current.length==0)
			{
				current =  ul.find("li:last");
				scrollleft =  (ul.find("li").length -1) * dimension.width;
			}
			else
			scrollleft = scrollleft - dimension.width;
			
			$("div.slider").animate({scrollLeft:scrollleft},2000);
			if(in_flag==true)
				 in_flag=false;
				 		
		}
	
	 $.fn.jQuad.stopslide = function(){
		 clearInterval(image_timer);
		 };
	 $.fn.jQuad.startslide = function(){
		transition();
		 };
	 $.fn.jQuad.settransition = function(val){
		 options.type = val;
		 };	 
		 
	
	 effects(); 
	
	}
	
} 


function random_array(maxn)
 {
	
    var array = new Array();
	var temp,i,flag=true;
	var index =0;
	 while(index<maxn)
	 {
		 flag = true;
		 temp = Math.floor(Math.random() * maxn);
		 for(i=0;i<array.length;i++)
		 {
			 if(temp==array[i])
			 {
				flag=false;
				break;
			 }
		 }
		 
		 if(flag==true)
		 array[index++] = temp;
	 }
	 
	 return array;
 };

		  })(jQuery);
