﻿
var $jq = jQuery.noConflict();   
(function($jq) {
	$jq.JMag = 0;
	var methods = {
		  JMag:function(setting) {
	        var ps =$jq.fn.extend({
	        	MagMod:'narmal',         //默认为正常模式，另外还有演示测试模式,演示模式4张图片不停轮换
				MagJson:false,           //Jmag杂志配置文件
				LeftPage:false,          //左页杂志
				RightPage:false,         //右页杂志
				ViewPage:false,            //详细查看页面
				Recommended:false,       //杂志推荐信息
				StarPageNum:0,           //初始页数
				PageCount:false,         //总页数
				PageWidth:"100%",
				PageHeight:"100%",
				ZoomNum:2,
				DefaultPageSpeed:800,       //默认翻书运动速度(单位：毫秒)
				BeforeLoad:function(e){},   //加载前动作
				AfterLoad:function(e){},  	//加载后动作
				PageEvent:false,		    //自定义翻页动画
				PageFirst:false,			//翻到第一页的动作
				PageLast:false,			    //翻到最后一页的动作
				PageError:function(e){}     //翻页错误统一函数
	        }, setting);
	       var ErrorMessage ={
	       		PageFast:"下載中",
	       		PageFirst:"首頁",
	       		PageLast:"最後一頁",
	       		PageMoving:"翻頁中，請稍候",
	       		AutoTimesNull:"無自動播放"
	       		
	        };
	       var DefaultPageEasing = ["easeInSine","easeOutSine"];
			var $jqself = $jq(this);
			if(!ps.PageCount)
			ps.PageCount = ps.MagJson.MagPage.length|ps.MagJson.MagIfo.PageCount;
			$jqself.data("Jmag config",MagJson).data("MagTitle",MagJson.MagIfo.MagName).data("PageNum",ps.StarPageNum).data("PageCount",MagJson.MagIfo.PageCount);
			var MagPage= MagJson.MagPage;
			var $jqimg = $jq(' <img  />');
			$jqself.data("ViewPageHtml",ps.ViewPage.find(".viewContanier").html());
			var $jqbookimg = $jq("<div class='contain'><div style='width:100%;height:100%;position:absolute;top:0px;left:0px;'></div><img /></div>")
			if(ps.Recommended)
			   $jq.each(MagPage, function(i){
					if(MagPage[i].Title != "" && MagPage[i].Title != undefined && MagPage[i].Title != null)   //加载推荐栏目
						ps.Recommended.html(ps.Recommended.html()+"<a href='#' class='RecA' page='i' onclick='TurnPage("+i+")'>"+MagPage[i].Title+"</a>");
				});
			var AutoTimes;
			var events ={
				SetDefaultPageSpeed:function(e,n)
				{
					ps.DefaultPageSpeed = n;
				},
				ChangeSetting:function(e,setting)
				{
					ps = $jq.fn.extend(ps,setting);
				},
				ChangeDefaultPageEasing:function(e,n)  //变换默认翻书动画
				{
					switch(n){
						case 0:DefaultPageEasing = ['swing','swing'];break;
						case 1:DefaultPageEasing = ['easeInQuad','easeOutQuad'];break;
						case 2:DefaultPageEasing = ['easeInCubic','easeOutCubic'];break;
						case 3:DefaultPageEasing = ['easeInQuart','easeOutQuart'];break;
						case 4:DefaultPageEasing = ['easeInQuint','easeOutQuint'];break;
						case 5:DefaultPageEasing = ['easeInSine','easeOutSine'];break;
						case 6:DefaultPageEasing = ['easeInExpo','easeOutExpo'];break;
						case 7:DefaultPageEasing = ['easeInCirc','easeOutCirc'];break;
						case 8:DefaultPageEasing = ['easeInElastic','easeOutElastic'];break;
						case 9:DefaultPageEasing = ['easeInBack','easeOutBack'];break;
						case 10:DefaultPageEasing = ['easeInBounce','easeOutBounce'];break;
						default:DefaultPageEasing = ['swing','swing'];break;
					}
				},
				StarJmag:function(e){
					var inf = new Object();
					inf.inf = "star";
					this.preload(inf,[MagPage[$jqself.data("PageNum")],MagPage[$jqself.data("PageNum")+1]]);
				},
			    CheakIsOk:function(){     //检测函数,是否可行运动
					this.ComClickTime = new Date();
					if(ps.ViewPage.is("div:visible"))
					{
				    	this.errMessage = ErrorMessage.ViewPageVisible;
				    	ps.PageError(this);
				    	return false;
					}
				    if(ps.LeftPage.find(".contain").is(":animated") || ps.RightPage.find(".contain").is(":animated") || (this.clickDate && this.ComClickTime-this.clickDate<500) )
				    {
				    	this.errMessage = ErrorMessage.PageFast;
				    	ps.PageError(this);
				    	return false;
				    } 
					if($jqself.data('style') == "PageBack" && $jqself.data("PageNum") <= 1)
					{	
						this.errMessage = ErrorMessage.PageFirst;
						ps.PageFirst?ps.PageFirst(this):ps.PageError(this);
						events.StopAuto(AutoTimes);
						return false;
					}
					if($jqself.data('style') == "PageGo" && $jqself.data("PageNum")>=ps.PageCount-2)
					{
						this.errMessage = ErrorMessage.PageLast;
						ps.PageLast?ps.PageLast(this):ps.PageError(this);
						events.StopAuto(AutoTimes);
						return false;
					}
					this.clickDate = new Date();
					return true;
			    },
				PageGo:function(){
					if(events.CheakIsOk())
					{
						if($jqself.data('style') == "PageGo"){
						$jqself.trigger("JMag.preload",[[MagPage[$jqself.data("PageNum")+2],MagPage[$jqself.data("PageNum")+3]]]);
						$jqself.data("PageNum",$jqself.data("PageNum")+2);
						}
						else if($jqself.data('style') == "PageBack"){
						$jqself.trigger("JMag.preload",[[MagPage[$jqself.data("PageNum")-2],MagPage[$jqself.data("PageNum")-1]]]);
						$jqself.data("PageNum",$jqself.data("PageNum")-2);
						}
					}
				},
				ifmusic:function(){
					
				
				},
				preload:function(e,ImageArr){
					var imgAr = new   Array();
					ps.BeforeLoad();
					for(i=0;i<ImageArr.length;i++) //预读图片 
		    		{ 
		    			(function(n){
		    				imgAr[n] = new Image();
	            			imgAr[n].src = ImageArr[n].Page||'images/b_mustBe.jpg';
	            			if (imgAr[n].complete)
							{
								if(e.inf !="star" && ($jqself.data('style') == "PageGo"||$jqself.data('style') == undefined))
									events.ComLeftPage(n,imgAr[n],ImageArr[n]);
								else if(e.inf !="star" && $jqself.data('style') == "PageBack")
									events.ComRightPage(n,imgAr[n],ImageArr[n]);
								else if(e.inf =="star")
									events.ComFirstPage(n,imgAr[n],ImageArr[n]);
								return;
							}
							$jq(imgAr[n]).load(function(){
								if(e.inf !="star" && ($jqself.data('style') == "PageGo"||$jqself.data('style') == undefined))
									events.ComLeftPage(n,imgAr[n],ImageArr[n]);
								else if(e.inf !="star" && $jqself.data('style') == "PageBack")
									events.ComRightPage(n,imgAr[n],ImageArr[n]);
								else if(e.inf =="star")
								{
									events.ComFirstPage(n,imgAr[n],ImageArr[n]);
								}
							});
		    			})(i); 
		    		}
				},
				ComFirstPage:function(n,imgObj,PageCon,x){
					if(n==0&&imgObj)
					{
				     var newIMG = $jqbookimg.clone().find("img").attr("src",imgObj.src).end().css({"width":ps.PageWidth});
				     newIMG.appendTo(ps.LeftPage);
				     ps.LeftPage.find("div.contain").eq(0).prepend(PageCon.PageHtml).find("*").not("img").css({"position":"absolute"});
				    }
				    else if(n==1&&imgObj)
				    {
				     var newIMG = $jqbookimg.clone().find("img").attr("src",imgObj.src).end().css({"width":ps.PageWidth});
				     newIMG.appendTo(ps.RightPage);
				     ps.RightPage.find(".contain").eq(0).prepend(PageCon.PageHtml).find("div").eq(0).find("*").not("img").css({"position":"absolute"});
				     ps.AfterLoad();
				    }
				},
				ComLeftPage:function(n,imgObj,PageCon,x){
					if(n==0&&imgObj)
					{
				     var newIMG = $jqbookimg.clone().find("img").attr("src",imgObj.src).end().css({"width":0});
				     ps.LeftPage.find(".contain").after(newIMG);
				     ps.LeftPage.find(".contain").eq(1).prepend(PageCon.PageHtml).find("*").not("img").css({"position":"absolute"});
				    }
				    else if(n==1&&imgObj)
				    {
				     var newIMG = $jqbookimg.clone().find("img").attr("src",imgObj.src).end().css({"width":ps.PageWidth});
				     ps.RightPage.find(".contain").before(newIMG);
				     ps.RightPage.find(".contain").eq(0).prepend(PageCon.PageHtml).find("*").not("img").css({"position":"absolute"});
				     ps.AfterLoad();
				     if(!ps.PageEvent)
				    	 events.Page();
				     else
				    	 ps.PageEvent();
				    }
				},
				ComRightPage:function(n,imgObj,PageCon){
					if(n==0&&imgObj)
					{
				     var newIMG = $jqbookimg.clone().find("img").attr("src",imgObj.src).end().css({"width":ps.PageWidth});
				     ps.LeftPage.find(".contain").before(newIMG)
				     ps.LeftPage.find(".contain").eq(0).prepend(PageCon.PageHtml).find("*").not("img").css({"position":"absolute"});
				    }
				    else if(n==1&&imgObj)
				    {
				     var newIMG = $jqbookimg.clone().find("img").attr("src",imgObj.src).end().css({"width":0});
				     ps.RightPage.find(".contain").after(newIMG);
				     ps.RightPage.find(".contain").eq(1).prepend(PageCon.PageHtml).find("*").not("img").css({"position":"absolute"});
				     ps.AfterLoad();
				     if(!ps.PageEvent)
				    	 events.Page();
				     else
				     	ps.PageEvent();
				    }
				},
				Page:function(){
					var obj1 = $jqself.data('style')=="PageGo"?ps.RightPage:ps.LeftPage ;
					var obj2 = obj1 == ps.LeftPage ? ps.RightPage : ps.LeftPage;
						  //obj1.find("div").eq(1).find("*").not("img").css({"visibility":"hidden"});
					obj1.find(".contain").eq(1).animate({width:8},ps.DefaultPageSpeed,DefaultPageEasing[0],function(){$jq(this).remove();obj2.find(".contain").eq(1).animate({width:ps.PageWidth},ps.DefaultPageSpeed,DefaultPageEasing [1],function(){$jq(this).prev().remove();});});   
				},
				Zoom:function(e,n,b){   //n即将放大的书页的偏移量
					if(ps.LeftPage.find("img").is(":animated") || ps.RightPage.find("img").is(":animated") )
					{
						this.errMessage = ErrorMessage.PageMoving;
						ps.PageError(this);
						return false;
					}
					ps.ViewPage.find(".viewBigIMG").css({"top":0});
					ps.ViewPage.show(); 
					ps.ViewPage.find(".viewContanier").prepend(MagPage[$jqself.data("PageNum")+n].PageHtml).find("*").not("img.viewBigIMG").each(function(){
						events.BigImgHtml(null,$jq(this));
					})
					if(ps.ViewPage.find("img").length)
						ps.ViewPage.find("img").attr("src",MagPage[$jqself.data("PageNum")+n].Page)
					else
						ps.ViewPage.html($jqimg.clone().attr("src",MagPage[$jqself.data("PageNum")+n].Page).css({'height':ps.PageHeight*b,'width':ps.PageWidth*b}))
				},
				AutoPlay:function(e,f){
					if(AutoTimes!=null)
						return false;
					if($jqself.data('style') == undefined)
						$jqself.data("style","PageGo");
					AutoTimes = setInterval(function(){
						$jqself.trigger("JMag.PageGo");
					},f)
				},
				StopAuto:function(e,f)
				{
					if(AutoTimes!=null)
					{
						clearInterval(AutoTimes);
						AutoTimes=null;
					}
					else{
					}
				},
				
				StopZoom:function(e){
					ps.ViewPage.find(".viewContanier").html($jqself.data("ViewPageHtml"));
					ps.ViewPage.hide();
					return;
				}
			}
			events.StarJmag();
			for(var event in events) {
				var e = "JMag." + event;
				$jq(this).unbind(e);
				$jq(this).bind(e, events[event]);
			}
		},
	StopAuto:function(f){
		$jq(this).trigger("JMag.StopAuto", f);
	},
	Zoom:function(f,b){
		b= b == undefined?2:b;
		$jq(this).trigger("JMag.Zoom",[f,b]);
	},
	AutoPlay:function(f){
		$jq(this).trigger("JMag.AutoPlay", f);
	},
	PageGo:function(f){
		if(f)
			this.jumpTo(f);
		else
		{
			$jq(this).data("style","PageGo");
			$jq(this).trigger("JMag.PageGo");
		}
	},
	PageBack:function(f){
		if(f)
			this.JumpTo(f)
		else
		{
			$jq(this).data("style","PageBack");
			$jq(this).trigger("JMag.PageGo");
		}
	},
	getPageNum:function(){
		return $jq(this).data("PageNum");
	},
	getTotalNum:function(){
		return $jq(this).data("PageCount");
	},
	getMagConfig:function(){
		return $jq(this).data("Jmag config");
	},
	jumpTo:function(n){
		if(n%2!=0)
			n=n-1;
		if(n==$jq(this).getPageNum())
			return false;
		$jq(this).data('style','PageGo');
		if($jq(this).getPageNum()>n)
			$jq(this).data('style','PageBack');
		$jq(this).trigger("JMag.preload",[[$jq(this).data('Jmag config').MagPage[n],$jq(this).data('Jmag config').MagPage[n+1]]]);
		$jq(this).data("PageNum",n);
	},
	StopZoom:function()
	{
		$jq(this).trigger("JMag.StopZoom");
	},
	ChangeSpeed:function(n)
	{
		$jq(this).trigger("JMag.SetDefaultPageSpeed",n);
	},
	ChangeDefaulf:function(setting){
		$jq(this).trigger("JMag.ChangeSetting",setting);
	}
	};
	$jq.each(methods, function(i) {
		$jq.fn[i] = this;
	});

})(jQuery);
