/*
* BOTROTATE
* - 
* VERSION 1.00
*
* REQUIRES
* - jquery 1.3.2
* - jquery.easing.1.3.js (or other easing library)
* 
* Jay Richardson
* Werkbot Studios - www.werkbot.com
* paceker: http://dean.edwards.name/packer/
* 
* BROWSER TESTED 
	- FF 3.5.7
	- IE 6,7,8
*/

//CHANGELOG

//DEFAULT OPTIONS
	var br_options = new Array();
//
	var image_set_count = 0;
	var total_images = new Array();
	var br_prev = new Array();
	var br_current = new Array();
	var br_next = new Array();
	var timerinterval = new Array();
	var links_css = new Array();
/*
*
*/
$.fn.botrotate = function(opts) {
	//
		var id = "botrotate-"+image_set_count;
		$(this).attr("id", id);
	//
		var tmp = new Object();
	//SET OUR OPTIONS
		if(opts){
			//SET OUR TIME
				if(opts.ease_speed>=0){
					tmp.time = 1000*Number(opts.time);
				}else{
					tmp.time =  5000;
				}
			//	
				if(!opts.buttons){
					tmp.buttons = false;
				}else{
					tmp.buttons = opts.buttons;	
				}
			//	
				if(!opts.button_type){
					tmp.button_type = "LIST";
				}else{
					tmp.button_type = opts.button_type;	
				}
			//	
				if(!opts.transition){
					tmp.transition = "FADE";
				}else{
					tmp.transition = opts.transition;	
				}	
			//	
				if(!opts.ease_in){
					tmp.ease_in = "easeInQuad";
				}else{
					tmp.ease_in = opts.ease_in;	
				}		
			//	
				if(!opts.ease_out){
					tmp.ease_out = "easeOutQuad";
				}else{
					tmp.ease_out = opts.ease_out;	
				}	
			//
				if(opts.ease_speed>0 && opts.ease_speed!=undefined){
					tmp.ease_speed = 1000*Number(opts.ease_speed);
				}else{
					tmp.ease_speed =  5000;
				}
		}else{
			tmp.time =  5000;
			tmp.buttons = false;
			tmp.button_type = "LIST";
			tmp.transition = "FADE";
			tmp.ease_in = "easeInQuad";
			tmp.ease_out = "easeOutQuad";
			tmp.ease_speed =  1000;
		}
	//
		br_options[id] = tmp;
	//CREATE OUR ROTATION
		$(this).createRotate();
}	
/*
*	createRotate
*/
$.fn.createRotate = function(){
	//$(".botrotate").each( function() {
		//
			var id = "botrotate-"+image_set_count;
			total_images[id] = $(this).find("> img").length;
		//SET OUR COUNTERS
			br_prev[id] = total_images[id]-1;
			br_current[id] = 0;
			br_next[id] = 1;
		//CREATE OUR BUTTON AREA
			if(br_options[id].buttons==true){
				var button_area = $("<div>").attr({
					'id': "botrotate_button_area-"+image_set_count,
					'class': "botrotate_button_area"
				});
				$(this).parent().append(button_area);
			//
				if(br_options[id].button_type=="NEXTPREV"){
					//CREATE A PREV BUTTON
						var button = $("<div>").attr({
							'id': "botrotate_button_prev",
							'class': "botrotate_button_prev"
						});
						//ADD OUR BUTTON CLICK EVENT
							button.click(function () {
								$(this).rotate(id, "LEFT", 1);
							});
							button_area.append(button);
					//CREATE A NEXT BUTTON
						var button = $("<div>").attr({
							'id': "botrotate_button_next",
							'class': "botrotate_button_next"
						});
						//ADD OUR BUTTON CLICK EVENT
							button.click(function () {
								$(this).rotate(id, "RIGHT", 1, false);
							});
							button_area.append(button);
				}else if(br_options[id].button_type=="LIST"){
					//CREATE A BUTTON FOR EACH IMAGE
						var count = 0;
						var first_flag = true;
						$(this).find("> img").each( function() {
							if(first_flag){
								var button = $("<div>").attr({
									'id': "botrotate_button-"+image_set_count+"-"+count,
									'class': "botrotate_button-"+count+" botrotate_button selected"
								}).html(
									$(this).attr("title")
								);
								first_flag = false;
								$(this).attr("title", "")
							}else{
								var button = $("<div>").attr({
									'id': "botrotate_button-"+image_set_count+"-"+count,
									'class': "botrotate_button-"+count+" botrotate_button"
								}).html(
									$(this).attr("title")
								);
								$(this).attr("title", "")
							}
							count++;
							button.click(function () {
								var num = $(this).attr("id").split("-");
								//CHECK TO SEE IF WE ARE CLICKING ON THE CURRENT LIVE IMAGE/IF NOT THEN GO AHEAD AND ROTATE
									if(num[2]!=br_current[id]){
										$(this).rotate(id, "RIGHT", num[2], false);
									}
							});
							button_area.append(button);
						});
					}
				}
		//GIVE EACH IMAGE AN ID
			var image_count = 0;
			$(this).find("> img").each( function() {
				$(this).attr("id", id+"-"+image_count);
				image_count++;
			});
		//HIDE ALL THE IMAGES
			$(this).find("> img").css({
				"position":"absolute",
				"display":"none"
			});	
		//HIDE ALL THE LINKS
			var link_count = 0;
			var tmp_link = new Array();
			$(this).find("> img").each(function() {
				//
					if($(this).next("div.botrotate_links:first").length>0){
						//
							var tmp = $(this).next("div.botrotate_links:first");
						//SET THE ID OF EACH LINK SET
							tmp.attr("id", id+"-links-"+link_count);
						//STORE THE LEFT POSITION OF THE LINK
							var tmp_left = tmp.css("left").replace("px", "");
						//IF THE LEFT CSS IS NOT SET (AUTO) WE WILL JUST SET IT TO ZERO
							if(tmp_left=="auto"){
								tmp_left = 0;
							}
							tmp_link.push(tmp_left);
					}else{
						tmp_link.push(0);	
					}
					link_count++;
			});
			links_css[id] = tmp_link;
			$(this).children("div.botrotate_links").css({
				"position":"absolute",
				"display":"none"
			});	
		//SHOW THE FIRST IMAGE
			$(this).find("img:first").
				css({
					"display": "block"							
				});
			//SHOW THE FIRST LINKS IF WE NEED TOO
				//CHECK TO SEE IF THE FIRST LINK SECTION, IS INDEED FIRST IN LINE TO BE DISPLAYED
				var tmp_id = $(this).find("div.botrotate_links:first").attr("id").split("-");
				if(tmp_id[3]==0){
					$(this).find("div.botrotate_links:first").
						css({
							"display": "block"							
						});
				}
		//START OUR TIMER
			if(br_options[id].time>0){
				timerinterval[id] = setInterval("$(this).rotate('"+id+"', 'RIGHT', 0, true)", br_options[id].time);
			}
	//});
		image_set_count++;
}
/*
*	rotate
*/
$.fn.rotate = function(id, dir, button_click, timer){
	//
		var id_num = id.split("-");
	//SET OUR CURRENT IMAGE & LINKS
		var current_image = "#"+id+"-"+br_current[id];
		var current_links = "#"+id+"-links-"+br_current[id];
	//IF NEXT_CLICK IS SET, WE NEED TO RESET OUR TIMER
		if(button_click>=0){
			if(br_options[id].time>0){
				clearInterval(timerinterval[id]);
				timerinterval[id] = setInterval("$(this).rotate('"+id+"', '"+dir+"', 0, '"+timer+"')", br_options[id].time);
			}
		}
	//CHEC TO SEE IF OUR BUTTON TYPE IS LIST - IF SO WE WILL SET THE NEXT AND PREV BUTTONS ACCORDINGLY, SINCE WE MAY NOT BE GOING IN A SEQUENCE
		if(br_options[id].button_type=="LIST" && timer==false){
			//DETERMINE WHICH WAY TO SLIDE
				if(button_click<br_current[id]){
					dir="LEFT";
				}else{
					dir="RIGHT";
				}
			//SET OUR PREV AND NEXT DETERMINED BY WHICH DIRECTION WE ARE GOING
				if(dir=="LEFT"){
					//
						if(button_click>0){
							br_prev[id] = button_click;
						}else{
							br_prev[id] = 0;
						}
						br_next[id] = button_click;
				}else{
					//
						if(button_click<total_images[id]-1){
							br_next[id] = Number(button_click);
						}else{
							br_next[id] = total_images[id]-1;
						}
						br_prev[id] = button_click;
				}
		}
	//
		if(dir=="LEFT"){
			//SET OUR NEXT IMAGE AND LINKS
				var next_image = "#"+id+"-"+br_prev[id];
				var next_links = "#"+id+"-links-"+br_prev[id];
			//SET OUR SELECTED CLASS FOR THE ACTIVE BUTTON
				if(br_options[id].button_type=="LIST"){
					$("#botrotate_button-"+id_num[1]+"-"+br_current[id]).removeClass("selected");
					$("#botrotate_button-"+id_num[1]+"-"+br_prev[id]).addClass("selected");
				}
		}else{
			//SET OUR NEXT IMAGE AND LINKS
				var next_image = "#"+id+"-"+br_next[id];
				var next_links = "#"+id+"-links-"+br_next[id];
			//SET OUR SELECTED CLASS FOR THE ACTIVE BUTTON
				if(br_options[id].button_type=="LIST"){
					$("#botrotate_button-"+id_num[1]+"-"+br_current[id]).removeClass("selected");
					$("#botrotate_button-"+id_num[1]+"-"+br_next[id]).addClass("selected");
				}
		}
	//
		if(br_options[id].transition=="FADE"){
			//FADE OUR CURRENT IMAGE OUT
				$(current_image).fadeOut(br_options[id].ease_speed);
				//FADE OUR CURRENT LINKS OUT OF THE FRAME
					$(current_links).fadeOut(br_options[id].ease_speed);
			//FADE IN OUR NEXT ELEMENT
				$(next_image).fadeIn(br_options[id].ease_speed);
				//FADE IN OUR NEXT ELEMENT LINKS
					$(next_links).fadeIn(br_options[id].ease_speed);
		}else{
			if(dir=="LEFT"){
				//SLIDE OUR CURRENT IMAGE OUT OF THE FRAME
					$(current_image).animate({"left": "+="+$(next_image).width()+"px"}, br_options[id].ease_speed, br_options[id].ease_in, function(){$(this).css({"display":"none", "left":"-"+$(current_image).width()+"px"});} );
					//SLIDE OUR CURRENT LINKS OUT OF THE FRAME
						$(current_links).animate({"left": "+="+$(next_image).width()+"px"}, br_options[id].ease_speed, br_options[id].ease_in, function(){$(this).css({"display":"none", "left":"-"+$(current_links).width()+"px"});} );
				//SLIDE IN OUR NEXT ELEMENT
					$(next_image).css({"display":"block", "left":"-"+$(next_image).width()+"px"});
					$(next_image).animate({"left": "+="+$(next_image).width()+"px"}, br_options[id].ease_speed, br_options[id].ease_out);
					//SLIDE IN OUR NEXT ELEMENT LINKS
						//if(links_css[id][br_next[id]]!=undefined){
							$(next_links).css({"display":"block", "left":"-"+$(next_image).width()+"px"});
							var tmp = Number(links_css[id][br_prev[id]]) + Number($(next_image).width());
							$(next_links).animate({"left": "+="+tmp+"px"}, br_options[id].ease_speed, br_options[id].ease_out);
						//}
			}else{
				//SLIDE OUR CURRENT IMAGE OUT OF THE FRAME
					$(current_image).animate({"left": "-="+$(next_image).width()+"px"}, br_options[id].ease_speed, br_options[id].ease_in, function(){$(this).css({"display":"none", "left":"-"+$(current_image).width()+"px"});} );
					//SLIDE OUR CURRENT LINKS OUT OF THE FRAME
						$(current_links).animate({"left": "-="+$(next_image).width()+"px"}, br_options[id].ease_speed, br_options[id].ease_in, function(){$(this).css({"display":"none", "left":"-"+$(current_links).width()+"px"});});
				//SLIDE IN OUR NEXT ELEMENT
					$(next_image).css({"display":"block", "left": $(next_image).width()+"px"});
					$(next_image).animate({"left": "-="+$(next_image).width()+"px"}, br_options[id].ease_speed, br_options[id].ease_out);
					//SLIDE IN OUR NEXT ELEMENT LINKS
						//if(links_css[id][br_prev[id]]!=undefined){
							$(next_links).css({"display":"block", "left": $(next_image).width()+"px"});
							var tmp = Number($(next_image).width()) - Number(links_css[id][br_next[id]]);
							$(next_links).animate({"left": "-="+tmp+"px"}, br_options[id].ease_speed, br_options[id].ease_out);
						//}
			}
		}
	//DETERMINE OUR NEXT ELEMENT
		if(dir=="RIGHT"){	
			br_prev[id] = br_current[id];		
			br_current[id] = br_next[id];
			if(br_next[id]<total_images[id]-1){
				br_next[id]++;
			}else{
				br_next[id] = 0;
			}
		}else{
			br_next[id] = br_current[id];
			br_current[id] = br_prev[id];
			if(br_prev[id]>0){
				br_prev[id]--;
			}else{
				br_prev[id] = total_images[id]-1;	
			}
		}
}
