tar_fbox = {
	runningtimers : {},
	init : function(custom) {
		$("body").addClass("tar_js_on");
		onthis = (custom) ? custom : ".tar_fbox";
		$(onthis).each(function(){
			tar_fbox.setup($(this));
		});
	},
	setup : function(elem) {
		var selectedindex = ($(elem).find(".tar_fbox_full").attr("rel")) ? $(elem).find(".tar_fbox_full").attr("rel") : 0;
		$(elem).find(".tar_fbox_full .tar_fbox_page:not(:eq(" + selectedindex + "))").hide();
		$(elem).find(".tar_fbox_full .tar_fbox_page:eq(" + selectedindex + ")").addClass("tfb_selected");
		if ($(elem).find(".tar_fbox_list")) {
			if ($(elem).find(".tar_fbox_list .tar_fbox_thumb").length == 0) {
				for (i=0;i<$(elem).find(".tar_fbox_full .tar_fbox_page").length;i++) {
					var labeltemp = ($(elem).find(".tar_fbox_list").hasClass(".labeled")) ? i+1 : "";
					$(elem).find(".tar_fbox_list").append('<span class="tar_fbox_thumb tar_fbox_indicator">' + labeltemp + '</span>');
				}
			}
			tar_fbox.addrels($(elem).find(".tar_fbox_full"),".tar_fbox_page");
			$(elem).find(".tar_fbox_list").each(function(){
				tar_fbox.addrels(this,".tar_fbox_thumb");
			});
			if ($(elem).find(".tar_fbox_list").hasClass("prevnext")) {
				$(elem).find(".tar_fbox_list").prepend('<span class="tar_fbox_iterative tar_fbox_prev" rel="prev"><span><</span></span>').append('<span class="tar_fbox_iterative tar_fbox_next" rel="next"><span>></span></span>');
			}
			$(elem).find(".tar_fbox_list .tar_fbox_thumb[rel=" + selectedindex + "]").addClass("tfb_selected");
		}
		if ($(elem).find(".tar_fbox_controls") && $(elem).find("var[title=\"pageduration\"]").text() > 0) {
			$(elem).find(".tar_fbox_controls").append('<span class="tar_fbox_pause"><span class="tar_fbox_pause_button"><span>Pause</span></span><span class="tar_fbox_resume_button"><span>Resume</span></span></span>');
		}
		tar_fbox.eventsetup(elem);
	},
	addrels : function(elem,childname) {
		var childnum = $(elem).find(childname).length;
		for (i=0;i<childnum;i++) {
			$(elem).find(childname + ":eq(" + i + ")").attr("rel",i);
		}
	},
	eventsetup : function(elem) {
		$(elem).find(".tar_fbox_list.clickable .tar_fbox_thumb").click(function(){
			if (!($(this).hasClass("tfb_selected"))) {
				tar_fbox.fliphandle(this,"direct");
				if ($(elem).find(".tar_fbox_controls")) {
					tar_fbox.pauseit($(elem).attr("id"),"pause");
				}
				$(this).find("a").blur();
				return false;
			}
		});
		$(elem).find(".tar_fbox_list.hoverable .tar_fbox_thumb").hover(function(){
			if (!($(this).hasClass("tfb_selected"))) {
				tar_fbox.fliphandle(this,"direct");
				if ($(elem).find(".tar_fbox_controls")) {
					tar_fbox.pauseit($(elem).attr("id"),"pause");
				}
			}
		});
		$(elem).find(".tar_fbox_list.prevnext .tar_fbox_iterative").click(function(){
			tar_fbox.fliphandle(this,"iterate");
			if ($(elem).find(".tar_fbox_controls")) {
				tar_fbox.pauseit($(elem).attr("id"),"pause");
			}
		});
		$(elem).find(".tar_fbox_controls .tar_fbox_pause").click(function(){
			tar_fbox.pauseit($(elem).attr("id"),"toggle");
		});
		if ($(elem).find("var[title=\"pageduration\"]").length > 0) {
			var auto = $(elem).find("var[title=\"autoplay\"]").text();
			if ($(elem).find("var[title=\"pageduration\"]").text() > 0) { tar_fbox.automate(elem,auto); }
		}
	},
	automate : function(elem,auto) {
		var getid = $(elem).attr("id");
		var getdur = $(elem).find("var[title=\"pageduration\"]").text();
		tar_fbox.runningtimers[getid] = setInterval('tar_fbox.fliphandle("#' + getid + '","auto")',getdur);
		if (auto == "false") { tar_fbox.pauseit(getid,"direct"); }
	},
	pauseit : function(getid,method) {
		if ($("#" + getid).hasClass("paused") && method == "toggle") {
			$("#" + getid).removeClass("paused");
			tar_fbox.automate($("#" + getid));
		} else {
			$("#" + getid).addClass("paused");
			tar_fbox.killinterval(getid);
		}
	},
	killinterval : function(getid) {
		clearInterval(tar_fbox.runningtimers[getid]);
	},
	fliphandle : function(elem,method) {
		switch (method) {
			case "direct" :
				var switchto = $(elem).attr("rel");
				var findid = $(elem).closest(".tar_fbox").attr("id");
				break;
			case "auto" :
				var selectedindex = parseInt($(elem).find(".tar_fbox_full .tfb_selected").attr("rel"));
				var offset = (direc == "prev") ? -1 : 1;
				var switchto = selectedindex + offset;
				var findid = $(elem).attr("id"); 
				break;
			case "iterate" :
				var direc = $(elem).attr("rel");
				var selectedindex = parseInt($(elem).parent().children(".tfb_selected").attr("rel"));
				var offset = (direc == "prev") ? -1 : 1;
				var switchto = selectedindex + offset;
				var findid = $(elem).closest(".tar_fbox").attr("id");
				break;
				
		}
		var limit = $("#" + findid).find(".tar_fbox_full .tar_fbox_page").length - 1;
		switchto = (switchto > limit) ? 0 : switchto;
		switchto = (switchto < 0) ? limit : switchto;
		tar_fbox.flipit($("#" + findid),switchto);
	},
	flipit : function(elem,switchto) {
		var switchfrom = $(elem).find(".tar_fbox_full .tfb_selected").parent().children().index($(elem).find(".tar_fbox_full .tfb_selected"));
		var tohide = $(elem).find(".tar_fbox_full .tfb_selected").removeClass("tfb_selected").stop(true,true);
		var toshow = $(elem).find(".tar_fbox_full .tar_fbox_page:eq(" + switchto + ")").addClass("tfb_selected").stop(true,true);
		var pageeffect = ($(elem).find("var[title=\"pageeffect\"]").length > 0) ? $(elem).find("var[title=\"pageeffect\"]").text() : "fade";
		var pageeffectduration = ($(elem).find("var[title=\"pageeffectduration\"]").length > 0) ? parseInt($(elem).find("var[title=\"pageeffectduration\"]").text()) : 1000;
		var parentdim = [parseInt($(elem).find(".tar_fbox_full").outerHeight()),parseInt($(elem).find(".tar_fbox_full").outerWidth())];
		switch (pageeffect) {
			case "cut":
				tar_fbox.animations_a.cut(toshow,"in");
				tar_fbox.animations_a.cut(tohide,"out");
				break;
			case "fade":
				tar_fbox.animations_a.fade(toshow,"in",pageeffectduration);
				tar_fbox.animations_a.fade(tohide,"out",pageeffectduration);
				break;
			case "slide_up":
				tar_fbox.animations_a.slide_up(toshow,"in",pageeffectduration,parentdim[0]);
				tar_fbox.animations_a.slide_up(tohide,"out",pageeffectduration,parentdim[0]);
				break;
			case "slide_down":
				tar_fbox.animations_a.slide_down(toshow,"in",pageeffectduration,parentdim[0]);
				tar_fbox.animations_a.slide_down(tohide,"out",pageeffectduration,parentdim[0]);
				break;
			case "slide_left":
				tar_fbox.animations_a.slide_left(toshow,"in",pageeffectduration,parentdim[1]);
				tar_fbox.animations_a.slide_left(tohide,"out",pageeffectduration,parentdim[1]);
				break;
			case "slide_right":
				tar_fbox.animations_a.slide_right(toshow,"in",pageeffectduration,parentdim[1]);
				tar_fbox.animations_a.slide_right(tohide,"out",pageeffectduration,parentdim[1]);
				break;
			case "slide_direc":
				if (switchto > switchfrom) {
					tar_fbox.animations_a.slide_left(toshow,"in",pageeffectduration,parentdim[1]);
					tar_fbox.animations_a.slide_left(tohide,"out",pageeffectduration,parentdim[1]);
				} else {
					tar_fbox.animations_a.slide_right(toshow,"in",pageeffectduration,parentdim[1]);
					tar_fbox.animations_a.slide_right(tohide,"out",pageeffectduration,parentdim[1]);
				}
				break;
			case "rise_up":
				tar_fbox.animations_a.rise_up(toshow,"in",pageeffectduration);
				tar_fbox.animations_a.rise_up(tohide,"out",pageeffectduration);
				break;
			case "fall_down":
				tar_fbox.animations_a.fall_down(toshow,"in",pageeffectduration);
				tar_fbox.animations_a.fall_down(tohide,"out",pageeffectduration);
				break;
			case "ff_slide":
				$(toshow).css({"z-index" : 50});
				$(tohide).css({"z-index" : 49});
				tar_fbox.animations_a.slide_right(toshow,"in",pageeffectduration,parentdim[1]);
				tar_fbox.animations_a.fade(tohide,"out",pageeffectduration);
				break;
		}
		if ($(elem).find(".tar_fbox_page.tfb_selected").find(".tar_fbox_supplemental").length > 0) {
			var getid = $(elem).attr("id") + "supbox";
			var supeffect = ($(elem).find("var[title=\"supplementaleffect\"]")) ? $(elem).find("var[title=\"supplementaleffect\"]").text() : "fade";
			var supeffectdelay = ($(elem).find("var[title=\"supplementaldelay\"]")) ? parseInt($(elem).find("var[title=\"supplementaldelay\"]").text()) : 100;
			var supeffectdur = ($(elem).find("var[title=\"supplementalduration\"]")) ? parseInt($(elem).find("var[title=\"supplementalduration\"]").text()) : 1000;
			switch(supeffect) {
				case "fade":
					tar_fbox.animations_s.fade($(elem).find(".tar_fbox_page.tfb_selected").find(".tar_fbox_supplemental"),supeffectdelay,supeffectdur,getid);
					break;
				case "slide_in":
					tar_fbox.animations_s.slide_in($(elem).find(".tar_fbox_page.tfb_selected").find(".tar_fbox_supplemental"),supeffectdelay,supeffectdur,getid);
					break;
			}
		}
		if ($(elem).find(".tar_fbox_list").length > 0) {
			$(elem).find(".tar_fbox_list .tfb_selected").removeClass("tfb_selected");
			$(elem).find(".tar_fbox_list .tar_fbox_thumb[rel=" + switchto + "]").addClass("tfb_selected");
		}
	},
	animations_a : {
		cut : function(effectelem,direc) {
			if (direc == "in") { $(effectelem).show(); } else { $(effectelem).hide(); }
		},
		fade : function(effectelem,direc,dur) {
			if (direc == "in") { $(effectelem).fadeIn(dur); } else { $(effectelem).fadeOut(dur); }
		},
		slide_up : function(effectelem,direc,dur,crit) {
			if (direc == "in") { $(effectelem).css({top : crit,display : "block"}).animate({top : '0px'},dur); } else { $(effectelem).animate({top : '-100%'},dur,function(){ $(this).css({display : 'block'}); }); }
		},
		slide_down : function(effectelem,direc,dur,crit) {
			if (direc == "in") { $(effectelem).css({top : (0-crit),display : "block"}).animate({top : '0px'},dur); } else { $(effectelem).animate({top : '100%'},dur,function(){ $(this).css({display : 'block'}); }); }
		},
		slide_left : function(effectelem,direc,dur,crit) {
			if (direc == "in") { $(effectelem).css({left : crit,display : "block"}).animate({left : '0px'},dur); } else { $(effectelem).animate({left : '-100%'},dur,function(){ $(this).css({display : 'block'}); }); }
		},
		slide_right : function(effectelem,direc,dur,crit) {
			if (direc == "in") { $(effectelem).css({left : (0-crit),display : "block"}).animate({left : '0px'},dur); } else { $(effectelem).animate({left : '100%'},dur,function(){ $(this).css({display : 'block'}); }); }
		},
		rise_up : function(effectelem,direc,dur) {
			if (direc == "in") { $(effectelem).css({bottom : 0, top : "auto"}).slideDown(dur,function(){$(this).css({bottom : "auto", top : 0});}); } else { $(effectelem).slideUp(dur); }
		},
		fall_down : function(effectelem,direc,dur) {
			if (direc == "in") { $(effectelem).slideDown(dur); } else { $(effectelem).css({bottom : 0, top : "auto"}).slideUp(dur,function(){$(this).css({bottom : "auto", top : 0});}); }
		}
	},
	animations_s : {
		fade : function(supelem,delay,dur,setid) {
			$(supelem).addClass("oneoff-supelem").hide();
			if (tar_fbox[setid]) {
				clearTimeout(tar_fbox[setid].suptimer);
			}
			tar_fbox[setid] = { "suptimer" : setTimeout('$(".oneoff-supelem").fadeIn(' + dur + ').removeClass("oneoff-supelem")',delay) }
		},
		slide_in : function(supelem,delay,dur,setid) {
			var ctop = parseInt($(supelem).css("top"));
			var cbottom = parseInt($(supelem).css("bottom"));
			var cleft = parseInt($(supelem).css("left"));
			var cright = parseInt($(supelem).css("right"));
			$(supelem).addClass("oneoff-supelem").hide();
			if (tar_fbox[setid]) {
				clearTimeout(tar_fbox[setid].suptimer);
			}
			if ($(supelem).hasClass("top")) {
				var crit = 0-parseInt($(supelem).outerHeight());
				tar_fbox[setid] = { "suptimer" : setTimeout('$(".oneoff-supelem").css({top : ' + (crit-ctop) + ',display : "block"}).animate({top : ' + ctop + '},' + dur + ').removeClass("oneoff-supelem")',delay) }
			} else if ($(supelem).hasClass("bottom")) {
				var crit = 0-parseInt($(supelem).outerHeight());
				tar_fbox[setid] = { "suptimer" : setTimeout('$(".oneoff-supelem").css({bottom : ' + (crit-cbottom) + ',display : "block"}).animate({bottom : ' + cbottom + '},' + dur + ').removeClass("oneoff-supelem")',delay) }
			} else if ($(supelem).hasClass("left")) {
				var crit = 0-parseInt($(supelem).outerWidth());
				tar_fbox[setid] = { "suptimer" : setTimeout('$(".oneoff-supelem").css({left : ' + (crit-cleft) + ',display : "block"}).animate({left : ' + cleft + '},' + dur + ').removeClass("oneoff-supelem")',delay) }
			} else if ($(supelem).hasClass("right")) {
				var crit = 0-parseInt($(supelem).outerWidth());
				tar_fbox[setid] = { "suptimer" : setTimeout('$(".oneoff-supelem").css({right : ' + (crit-cright) + ',display : "block"}).animate({right : ' + cright + '},' + dur + ').removeClass("oneoff-supelem")',delay) }
			}
		}
	}
}
