/* ------------------------------------
*
*	Since : 2008-07-24
*	Editor : BBmedia Inc. D_sasaki
*
-------------------------------------*/

// Set SlideClass Class

var SlideClass = function(obj){
	//now clicked index 
	this.clicked = "";
	//slide target index
	this.nextIndex = obj.nextIndex || 0;
	//visible img index
	this.nowImgIndex = 0;	
	//max index
	this.maxPos = obj.maxPos;		
	//content width
	this.width = obj.width;		
	//slide Speed
	this.slideSpeed = obj.slideSpeed || 800;		
	//easing type
	this.easing = obj.easing;
	
	//element
	this.slideStage = obj.slideStage;
	this.slideBox = obj.slideBox;
	this.navi = obj.navi;
	this.prev = obj.prev;
	this.next = obj.next;		
	this.numberNavi = obj.numberNavi;
	this.tab = this.numberNavi.find("a");
	
	this.setHeight();
	
	//set EventListener
	this.tab.bind("click",this,this.tabAction);
	this.tab.bind("focus",function(){
		this.blur();
	});
	this.prev.bind("click",this,this.prevAction);
	this.prev.bind("focus",function(){
		this.blur();
	});
	this.next.bind("click",this,this.nextAction);
	this.next.bind("focus",function(){
		this.blur();
	});
	
	var self = this;
	var ua = navigator.userAgent;
	var oldMacSafari = ((ua.indexOf("Safari") > -1) && ((ua.indexOf("312") > -1) || (ua.indexOf("125") > -1) || (ua.indexOf("124") > -1)) && (ua.indexOf("Mac") > -1));
	var numberkeys = [97,98,99,100,101,102,103,104];
	var checkNumber = function(num){
		var flag ;
		for	(var i = 0; i < numberkeys.length; i++){
			if(num == numberkeys[i]) {
				flag = true;
				break;
			} else {
				flag =  false;	
			}
		}
		return flag;
	}
	if(!oldMacSafari) {
		$(document).bind("keydown",function(e){
			if(e.keyCode == 37){
				self.prev.click();
			};
			if(e.keyCode == 39){
				self.next.click();
			}
			if(checkNumber(Number(e.keyCode))){
				var number = Number(e.keyCode - 97);
				$(self.tab).eq(number).click();	
			}
		});
	}
};

SlideClass.prototype = {
	setHeight : function(){
		var height = this.slideBox.height();
		this.slideStage.css("height",height)
	},
	nextPos: function(){
		return (this.nextIndex * this.width) 		
	},
	changeNavi : function(){
		//set className to navi
		this.navi
		.removeClass()
		.addClass("naviSet" + Number(this.nextIndex + 1));
	},
	slideContent : function(){
		var self = this;

		// change NowImg function
		/*
		var changeNowImg = function(index){
				self.nowImgIndex = index;
			}
		*/
		// next img id	
		//var targetImg = $("#ex" + this.nextIndex);
		/*
		this.slideBox
		.css({marginLeft:-this.nextPos() + "px"})
		callFlashFunc(self.nextIndex)
		self.nowImgIndex = self.nextIndex
		*/
		// slide box
		
		this.slideBox
		.animate({left:-this.nextPos() + "px"},
		this.slideSpeed,
		this.easing,
		function(){
			if(!(self.nextIndex == self.nowImgIndex)) {
				try {
					callFlashFunc(self.nextIndex);
				}
				catch (e) {
					return;
				}
				// change img
				/*
				self.fadeImg.fadeOut(self.fadeoutSpeed);
				targetImg.fadeIn(self.fadeinSpeed)
				
				// set NowImg
				var index = targetImg.attr("id").split("ex")[1];
				changeNowImg(index);
				*/
				self.nowImgIndex = self.nextIndex
			}
		});
		
	},
	tabAction : function(event){
		
		//"self" is "SlideClass"
		var self = event.data;
		
		// "clicked" is [[tab index]] now clicked. 
		//"this" is "cliced tab"
		
		self.clicked = $(self.tab).index(this);
		if(self.clicked == self.nextIndex) {
			return false;
		} else {
			//set "slide.clicked" to "slide.nextIndex".
			self.nextIndex = self.clicked;
		}

		//if slideBox is animated now, stop animation.
		var now = Math.abs(self.slideBox.css("left").split("px")[0])
		var flag = (now % self.width)
		if(flag) self.slideBox.stop();
		
		//change numberNavigationClassName.
		//slide slideBox.
		self.changeNavi();
		self.slideContent();
		
		return false;		
	},
	prevAction : function(event){
		
		//"self" is "SlideClass"
		var self = event.data;

		if(self.nextIndex == 0) return false;
		
		//if slideBox is animated now, stop animation.
		var now = Math.abs(self.slideBox.css("left").split("px")[0])
		var flag = (now % self.width)
		if(flag) self.slideBox.stop();
			
		self.nextIndex--;
		
		//change numberNavigationClassName.
		//slide slideBox.
		self.changeNavi();
		self.slideContent();	
			
		return false;
	},
	nextAction : function(event){

		//"self" is "SlideClass"
		var self = event.data;
		
		if(self.nextIndex == self.maxPos) return false;
		
		//if slideBox is animated now, stop animation.
		var now = Math.abs(self.slideBox.css("left").split("px")[0])
		var flag = (now % self.width)
		if(flag) self.slideBox.stop();	
		
		self.nextIndex++;
		
		//change numberNavigationClassName.
		//slide slideBox.
		self.changeNavi();
		self.slideContent();
		
		return false;		
	}	
};



(function($){
/*	$.extend({
		printMap : function(el){
			// create and set iframe
			var iframe = document.createElement('IFRAME');
			

			$(iframe).css({
				position : "absolute",
				width : 0,
				height : 0,
				left : "-500px",
				top : "-500px"			  
			})
			.appendTo("body");
			
			var doc = iframe.contentWindow.document;
			
			// set CSS
			$("link").each(function(){
				if($(this).attr("rel").toLowerCase() == 'stylesheet')	{
					doc.write('<link type="text/css" rel="stylesheet" href="'+ $(this).attr("href") + '"></link>');
				}					
			})
			doc.write('<div class="'+$(el).attr("class")+'">'+$(el).html()+'</div>');
			doc.close();
			
			// focus and print
			iframe.contentWindow.focus();
			iframe.contentWindow.print();
			
			// remove iframe
			setTimeout(function(){
				document.body.removeChild(iframe);
			},2000)
		}	
			
	});
*/			  
	$.extend ({
		toggleItem : function(opt){
			
			function changeItem(){

				var self = $(this);
				
				var target = self.attr("href").split("#")[1];
				var targetNode = $("#" + target);
				
				targetNode.siblings("div").fadeOut(450,function(){
					targetNode.fadeIn(200);											
				});
							
				self.parent()
				.addClass("open")
				.siblings("li").removeClass("open");	
				
				return false;
				
			};
			
			opt.btn
			.bind("click",changeItem)
			.bind("focus",function(){
				this.blur();
			});				
		}			  
	});	  
	$.fn.extend({
		/*
		slideImg : function(opt){
			
			// extend option
			opt = $.extend({
				slideSpeed : 500,
				easing : "easeOutExpo",
				slideInPoint : "",
				slideOutPoint : "",
				openBtn : "",
				closeBtn : ""
			}, opt || {});
			
			//slideIn function
			function slideIn(event){
				event.data
				.animate({left : opt.slideInPoint},
				opt.slideSpeed,
				opt.easing);
			};
			
			//slideOut function
			function slideOut(event){
				event.data
				.animate({left : opt.slideOutPoint},
				opt.slideSpeed,
				opt.easing);
			};
			
			return this.each(function(){
				var self = $(this);
				opt.openBtn.bind("click",self,slideIn)
				opt.openBtn.bind("focus",function(){
					this.blur();
				});	
				opt.closeBtn.bind("click",self,slideOut)
				opt.closeBtn.bind("focus",function(){
					this.blur();
				});	
			});
			
		},
		*/
		crossfadeNavi : function(opt){
			
			// extend option
			opt = $.extend({
				hoverEx : '_on',
				nowEx : '_op',
				fadeSpeed : 500,
				defaultAnimation : false
			}, opt || {});
		
			//add id to nowImg
			var nowImg = $(this).filter("[src*='" + opt.nowEx + "']").attr("id","nowImg");
			//add id to nowNode
			nowImg.parent().parent().attr("id","nowNode");
		
			return this.each(function(i) {
								  
				$(this).parent("a").bind("focus",function(){
					this.blur();
				});
				
				if($(this).attr("id") == "nowImg") return;	
				
				var org = $(this);
				var orgSrc = org.attr("src");
				
				// cleate hoverImage Element 
				var pos = orgSrc.lastIndexOf(".");			
				var hoverSrc = orgSrc.substr(0,pos) + opt.hoverEx + orgSrc.substr(pos);
				var hover = org.clone(true);
				// set hoverImage
				hover.attr("src",hoverSrc)
				.addClass("hoverImg")
				.insertAfter(org);
				
				// defaultAnimation
				if(opt.defaultAnimation) {
					var defaultAnimationId = setTimeout(function(){
						hover.fadeIn(opt.fadeSpeed,function(){
							hover.fadeOut(opt.fadeSpeed);								
						})	
					},i * 120);
				}
				
				// lists [not(org parent) and not(nowNode)]
				var lists = org.parent().parent().siblings().not("#nowNode");
				
				// set EventListener
				org.mouseover(function(e){				
					hover.fadeIn(opt.fadeSpeed);			
					// fadeOut other element
					lists.each(function(){
						$(this).find("img:last").fadeOut(); 
					});			
					e.stopPropagation();
				});
				hover.mouseout(function(e){
					hover.fadeOut(opt.fadeSpeed);		
					e.stopPropagation();
				});
				
				$("#contentsNav").hover(function(e){
					return;
				},function(e){
					// trriger hover event
					hover.mouseout();
				})
						
			});
		}
	});
})(jQuery);


