﻿
var CMD_ID=1;PageNode=function(controller,prevNode,nextNode)
{this.fController=controller;this.fPrev=prevNode;this.fNext=nextNode;this.fPage=0;this.fHasLayout=false;var me=this;this.OnLoadHandler=function()
{me.id=++CMD_ID;new Mutex(me,"SyncOnLoadHandler");}
this.SyncOnLoadHandler=function()
{this.fController.PageImagePostLoad(this);}
this.OnFlashClickHandle=function()
{me.id=++CMD_ID;new Mutex(me,"SyncOnFlashClickHandle");}
this.SyncOnFlashClickHandle=function()
{this.fController.FlashClick(this);}
this.OnErrorHandler=function()
{}
this.OnAjaxSuccessHandler=function(transport)
{me.id=++CMD_ID;new Mutex(me,"SyncAjaxSuccessHandler",transport);}
this.SyncAjaxSuccessHandler=function(transport)
{this.fController.AjaxEmbedHandler(this,transport.responseText);this.fController.PageImagePostLoad(this);}
this.OnAjaxFailureHandler=function(transport)
{me.id=++CMD_ID;new Mutex(me,"SyncAjaxFailureHandler",transport);}
this.SyncAjaxFailureHandler=function(transport)
{this.fController.AjaxFailureHandler(this);this.fController.PageImagePostLoad(this);}}
PageController=function(container,pagesCount,cacheSize)
{this.REGULAR_PAGE=1;this.MOVIE_PAGE=2;this.AUDIO_PAGE=3;this.SYSTEM_PAGE=4;this.FLASH_PAGE=5;this.IMAGE_PAGE=6;this.ADV_PAGE=10;this.TEST_PAGE=10001;this.fImageK=0.9;this.fPlayImageK=0.6;this.fMaxZoom=3;this.fDefaultZoom=-7;this.PAGE_SIZE_DEVIATION=0.08;this.DEFAULT_PAGE_WIDTH=1700;this.DEFAULT_PAGE_HEIGHT=2200;this.PAGE_BG_WIDTH=1700;this.PAGE_BG_HEIGHT=2267;this.MOVIE_PLAY_IMAGE_WIDTH=320;this.MOVIE_PLAY_IMAGE_HEIGHT=240;this.AUDIO_IMAGE_WIDTH=380;this.AUDIO_IMAGE_HEIGHT=40;this.FLASH_IMAGE_WIDTH=380;this.FLASH_IMAGE_HEIGHT=40;this.TITLE_PADDING_SIZE=40;this.MOVIE_PAGE_BG_FILE="video_bg.jpg";this.AUDIO_PAGE_BG_FILE="audio_bg.jpg";this.FLASH_PAGE_BG_FILE="flash_bg.jpg";this.MOVIE_PLAY_IMAGE_FILE="icon_video.png";this.AUDIO_IMAGE_FILE="icon_audio.jpg";this.FLASH_IMAGE_FILE="icon_flash.jpg";this.fContainer=container;this.fPagesCount=pagesCount;this.fCurrentZoom=0;this.fSearch=null;var me=this;this.fCacheSize=cacheSize;if(this.fCacheSize%2==0)
{this.fCacheSize++;}
if(this.fCacheSize>pagesCount)
{this.fCacheSize=pagesCount;}
var CreateImagePane=function(pageNode)
{var anImagePane=document.createElement("span");anImagePane.style.position="absolute";anImagePane.style.visibility="hidden";anImagePane.className="PagePane";me.fContainer.appendChild(anImagePane);pageNode.fImagePane=anImagePane;if(me.IsPreview)
{var aPreviewImg=document.createElement("img");aPreviewImg.style.position="absolute";aPreviewImg.src="/img/new_look/sign_preview.gif";pageNode.fImagePane.appendChild(aPreviewImg);pageNode.fPreviewPane=aPreviewImg;}}
var DestroyImagePane=function(pageNode)
{if(pageNode.fPreviewPane)
{pageNode.fImagePane.removeChild(pageNode.fPreviewPane);delete pageNode.fPreviewPane;}
me.fContainer.removeChild(pageNode.fImagePane);delete pageNode.fImagePane;}
var CreateHtmlContainer=function(pageNode)
{var aHtmlContainer=document.createElement("div");aHtmlContainer.style.position="absolute";aHtmlContainer.style.visibility="hidden";aHtmlContainer.className="HtmlContainer";pageNode.fImagePane.appendChild(aHtmlContainer);pageNode.fHtmlContainer=aHtmlContainer;}
var DestroyHtmlContainer=function(pageNode)
{pageNode.fImagePane.removeChild(pageNode.fHtmlContainer);delete pageNode.fHtmlContainer;}
var CreateImage=function(pageNode)
{var anImage=document.createElement("img");anImage.style.position="absolute";anImage.style.visibility="hidden";if(pageNode.fPreviewPane)
{pageNode.fImagePane.insertBefore(anImage,pageNode.fPreviewPane);}
else
{pageNode.fImagePane.appendChild(anImage);}
pageNode.fImage=anImage;pageNode.fImage.onload=pageNode.OnLoadHandler;pageNode.fImage.onerror=pageNode.OnErrorHandler;}
var DestroyImage=function(pageNode)
{var parentNode=pageNode.fImage.parentNode;if(parentNode)
{parentNode.removeChild(pageNode.fImage);}
pageNode.fImage.src="";delete pageNode.fImage;}
var CreateFlashImage=function(pageNode)
{var anImage=document.createElement("img");pageNode.fFlashContentPane.appendChild(anImage);pageNode.fFlashImage=anImage;}
var DestroyFlashImage=function(pageNode)
{var parentNode=pageNode.fFlashImage.parentNode;if(parentNode)
{parentNode.removeChild(pageNode.fFlashImage);}
pageNode.fFlashImage.src="";delete pageNode.fFlashImage;}
var CreateMoviePlayImage=function(pageNode)
{var anImage=document.createElement("img");anImage.style.position="absolute";pageNode.fFlashContentPane.appendChild(anImage);pageNode.fMoviePlayImage=anImage;}
var DestroyMoviePlayImage=function(pageNode)
{var parentNode=pageNode.fMoviePlayImage.parentNode;if(parentNode)
{parentNode.removeChild(pageNode.fMoviePlayImage);}
pageNode.fMoviePlayImage.src="";delete pageNode.fMoviePlayImage;}
var CreateFlash=function(pageNode)
{var aFlashPane=document.createElement("div");aFlashPane.style.position="absolute";aFlashPane.className="FlashPane";pageNode.fFlashTitlePane=document.createElement("div");pageNode.fFlashContentPane=document.createElement("div");pageNode.fFlashTitlePane.id="media_layer_name";pageNode.fFlashContentPane.onclick=pageNode.OnFlashClickHandle;pageNode.fFlashTitlePane.style.position="absolute";pageNode.fFlashContentPane.style.position="absolute";aFlashPane.appendChild(pageNode.fFlashTitlePane);aFlashPane.appendChild(pageNode.fFlashContentPane);pageNode.fImagePane.appendChild(aFlashPane);pageNode.fFlash=aFlashPane;}
var DestroyFlash=function(pageNode)
{pageNode.fImagePane.removeChild(pageNode.fFlash);delete pageNode.fFlashContentPane;delete pageNode.fFlashTitlePane;delete pageNode.fFlash;}
var CreateLoadingImage=function(pageNode)
{var aLoadingPane=document.createElement("div");aLoadingPane.style.position="absolute";aLoadingPane.style.visibility="hidden";aLoadingPane.className="LoadingPagePane";var aLoadingText=document.createElement("span");aLoadingText.style.position="absolute";aLoadingText.innerHTML="Loading...";aLoadingText.className="LoadingPageText";aLoadingPane.appendChild(aLoadingText);me.fContainer.appendChild(aLoadingPane);pageNode.fLoadingPane=aLoadingPane;}
var DestroyLoadingImage=function(pageNode)
{me.fContainer.removeChild(pageNode.fLoadingPane);delete pageNode.fLoadingPane;}
var CreateShadow=function(pageNode)
{var aDiv=document.createElement("div");aDiv.style.position="absolute";aDiv.style.visibility="hidden";aDiv.className="Shadow";me.fContainer.appendChild(aDiv);pageNode.fShadow=aDiv;}
var DestroyShadow=function(pageNode)
{me.fContainer.removeChild(pageNode.fShadow);delete pageNode.fShadow;}
var ReleaseCache=function()
{if(me.fCacheHead)
{Log("Release old cache");var aNode=me.fCacheHead;for(var k=0;k<me.fCacheSize;k++)
{if(aNode.fFlash)
{DestroyFlash(aNode);}
DestroyImage(aNode);DestroyImagePane(aNode);DestroyLoadingImage(aNode);DestroyShadow(aNode);aNode=aNode.fNext;delete aNode.fPrev;}
delete me.fCacheHead;}}
var CreateCache=function()
{Log("Create cache");var prevNode=null;for(var k=0;k<me.fCacheSize;k++)
{var aNode=new PageNode(me,prevNode,null);CreateShadow(aNode);CreateLoadingImage(aNode);CreateImagePane(aNode);if(prevNode)
{prevNode.fNext=aNode;}
else
{me.fCacheHead=aNode;}
if(k+1==me.fCacheSize)
{aNode.fNext=me.fCacheHead;me.fCacheHead.fPrev=aNode;}
prevNode=aNode;}}
var GetCacheElement=function(num)
{var offset=num%me.fCacheSize;var aNode=me.fCacheHead;if(offset>=0)
{for(var k=1;k<=offset;k++)
{aNode=aNode.fNext;}}
else
{for(var k=-1;k>=offset;k--)
{aNode=aNode.fPrev;}}
return aNode;}
var GetPageInfo=function(pageNumber)
{var pageInfo=me.Pages[pageNumber-1];var documentName=null;var tokenString=null;var docInfo=me.Documents[pageInfo.did+''];if(docInfo)
{documentName=docInfo.n;tokenString=docInfo.tk;}
var pid=pageInfo.id?pageInfo.id:-1;if(pageInfo.t==me.REGULAR_PAGE)
{return{Token:tokenString,Type:pageInfo.t,FileName:pageInfo.fn,Width:pageInfo.w,Height:pageInfo.h,Id:pid};}
else if(pageInfo.t==me.MOVIE_PAGE)
{var flvFileName=pageInfo.fn.substring(0,pageInfo.fn.lastIndexOf('.'))+'.flv';return{Token:tokenString,Type:pageInfo.t,Name:documentName,FileName:pageInfo.fn,Width:me.DEFAULT_PAGE_WIDTH,Height:me.DEFAULT_PAGE_HEIGHT,ImageWidth:pageInfo.w,ImageHeight:pageInfo.h,FlvName:flvFileName,Id:pid};}
else if(pageInfo.t==me.AUDIO_PAGE)
{return{Token:tokenString,Type:pageInfo.t,Name:documentName,FileName:me.AUDIO_IMAGE_FILE,Width:me.DEFAULT_PAGE_WIDTH,Height:me.DEFAULT_PAGE_HEIGHT,ImageWidth:me.AUDIO_IMAGE_WIDTH,ImageHeight:me.AUDIO_IMAGE_HEIGHT,FlvName:pageInfo.fn,Id:pid};}
else if(pageInfo.t==me.FLASH_PAGE)
{return{Token:tokenString,Type:pageInfo.t,FileName:me.FLASH_IMAGE_FILE,Width:me.DEFAULT_PAGE_WIDTH,Height:me.DEFAULT_PAGE_HEIGHT,ImageWidth:me.FLASH_IMAGE_WIDTH,ImageHeight:me.FLASH_IMAGE_HEIGHT,FlvName:pageInfo.fn,Id:pid};}
else if(pageInfo.t==me.IMAGE_PAGE||pageInfo.t==me.SYSTEM_PAGE||pageInfo.t==me.ADV_PAGE)
{return{Token:tokenString,Type:pageInfo.t,FileName:pageInfo.fn,Width:me.DEFAULT_PAGE_WIDTH,Height:me.DEFAULT_PAGE_HEIGHT,ImageWidth:pageInfo.w,ImageHeight:pageInfo.h,Id:pid};}
else if(pageInfo.t==me.TEST_PAGE)
{return{Type:pageInfo.t,TestID:pageInfo.did.substring(1,pageInfo.did.length),Width:me.DEFAULT_PAGE_WIDTH,Height:me.DEFAULT_PAGE_HEIGHT,Id:pid};}
else
{alert("Error: Trying to get info for unknown page type");return"";}}
var GetPageURL=function(pageInfo,zoomValue)
{var result="/viewer/page.res?resid="+pageInfo.Token+"_"+pageInfo.FileName+"&zoomvalue="+zoomValue+"&pageID="+pageInfo.Id;if(me.fSearch)
{result=result+"&search="+me.fSearch;}
return result;}
var GetAdsURL=function(fileName,zoomValue)
{return"/viewer/ads.res?resid="+fileName+"&zoomvalue="+zoomValue;}
var GetBGURL=function(pageInfo,zoomValue)
{var fileName;if(pageInfo.Type==me.MOVIE_PAGE)
{fileName=me.MOVIE_PAGE_BG_FILE;}
else if(pageInfo.Type==me.AUDIO_PAGE)
{fileName=me.AUDIO_PAGE_BG_FILE;}
else if(pageInfo.Type==me.FLASH_PAGE)
{fileName=me.FLASH_PAGE_BG_FILE;}
else
{alert("Error: Trying to get background for wrong page type");return"";}
return"/viewer/system.res?resid="+fileName+"&zoomvalue="+zoomValue;}
var GetSystemURL=function(fileName,zoomValue)
{return"/viewer/system.res?resid="+fileName+"&zoomvalue="+zoomValue;}
var GetFlashFlvURL=function(pageInfo)
{return"/viewer/page.res?resid="+pageInfo.Token+"_"+pageInfo.FlvName;}
var GetTestPageURL=function(pageInfo)
{return"/viewer/testpage.aspx?testid="+pageInfo.TestID+"&pubid="+me.PubID+"&cl="+new Date().getTime();}
var GetPageSize=function(pageNumber)
{var pageInfo=GetPageInfo(pageNumber);return[pageInfo.Width,pageInfo.Height];}
var GetPageMinZoom=function(pageNumber)
{var pageInfo=GetPageInfo(pageNumber);var widthMinZoom=pageInfo.Width/me.Pages.fZoomStep-1;return-widthMinZoom;}
var GetMinImageZoom=function(pageInfo)
{var widthMinZoom=pageInfo.ImageWidth/me.Pages.fZoomStep;var heightMinZoom=pageInfo.ImageHeight/me.Pages.fZoomStep;return(-Math.min(widthMinZoom,heightMinZoom));}
var GetImageZoom=function(pageInfo)
{var realImageWidth=pageInfo.ImageWidth;var realImageHeight=pageInfo.ImageHeight;var imageSize=GetImageSize(pageInfo);var widthZoom=(imageSize.width-realImageWidth)/me.Pages.fZoomStep;var heightZoom=(imageSize.height-realImageHeight)/me.Pages.fZoomStep;var aZoom=Math.max(widthZoom,heightZoom);return Math.max(aZoom,GetMinImageZoom(pageInfo));}
var GetImageSize=function(pageInfo)
{var containerWidth;var containerHeight;if(pageInfo.Type==me.MOVIE_PAGE||pageInfo.Type==me.AUDIO_PAGE||pageInfo.Type==me.FLASH_PAGE)
{bgSize=GetBGSize();containerWidth=bgSize.width;containerHeight=bgSize.height;}
else
{containerWidth=me.fPageWidth;containerHeight=me.fPageHeight;}
return GetImageSizeImpl(containerWidth,containerHeight,pageInfo.ImageWidth,pageInfo.ImageHeight,me.fImageK);}
var GetImageSizeImpl=function(containerWidth,containerHeight,realImageWidth,realImageHeight,imageK)
{var imageHeight=0;var imageWidth=0;var isShrinked=false;if(realImageWidth<containerWidth&&realImageHeight<containerHeight)
{imageWidth=realImageWidth;imageHeight=realImageHeight;}
else
{var pageRatio=containerHeight/containerWidth;var ratio=realImageHeight/realImageWidth;if(ratio>pageRatio)
{imageHeight=containerHeight*imageK;imageWidth=Math.floor(imageHeight/ratio);}
else
{imageWidth=containerWidth*imageK;imageHeight=Math.floor(imageWidth*ratio);}
isShrinked=true;}
return{width:imageWidth,height:imageHeight,shrinked:isShrinked};}
var GetMinPlayImageZoom=function()
{var widthMinZoom=me.MOVIE_PLAY_IMAGE_WIDTH/me.Pages.fZoomStep;var heightMinZoom=me.MOVIE_PLAY_IMAGE_HEIGHT/me.Pages.fZoomStep;return(-Math.min(widthMinZoom,heightMinZoom));}
var GetPlayImageZoom=function(pageInfo)
{var imageSize=GetPlayImageSize(pageInfo);var widthZoom=(imageSize.width-me.MOVIE_PLAY_IMAGE_WIDTH)/me.Pages.fZoomStep;var heightZoom=(imageSize.height-me.MOVIE_PLAY_IMAGE_HEIGHT)/me.Pages.fZoomStep;var aZoom=Math.max(widthZoom,heightZoom);return Math.max(aZoom,GetMinPlayImageZoom(pageInfo));}
var GetPlayImageSize=function(pageInfo)
{var imageSize=GetImageSize(pageInfo);return GetImageSizeImpl(imageSize.width,imageSize.height,me.MOVIE_PLAY_IMAGE_WIDTH,me.MOVIE_PLAY_IMAGE_HEIGHT,me.fPlayImageK);}
var GetMinBGZoom=function()
{var widthMinZoom=me.PAGE_BG_WIDTH/me.Pages.fZoomStep;var heightMinZoom=me.PAGE_BG_HEIGHT/me.Pages.fZoomStep;return(-Math.min(widthMinZoom,heightMinZoom));}
var GetBGZoom=function()
{var bgSize=GetBGSize();var widthZoom=(bgSize.width-me.PAGE_BG_WIDTH)/me.Pages.fZoomStep;var heightZoom=(bgSize.height-me.PAGE_BG_HEIGHT)/me.Pages.fZoomStep;var aZoom=Math.max(widthZoom,heightZoom);return Math.max(aZoom,GetMinBGZoom());}
var GetBGSize=function()
{var imageWidth;var imageHeight;var pageRatio=me.fPageHeight/me.fPageWidth;var ratio=me.PAGE_BG_HEIGHT/me.PAGE_BG_WIDTH;if(ratio>pageRatio)
{imageHeight=me.fPageHeight*me.fImageK;imageWidth=Math.floor(imageHeight/ratio);}
else
{imageWidth=me.fPageWidth*me.fImageK;imageHeight=Math.floor(imageWidth*ratio);}
return{width:imageWidth,height:imageHeight};}
var LoadPage=function(pageNode,refresh)
{if(!pageNode.fNewPage)
{return;}
var isNewPage=(pageNode.fNewPage!=pageNode.fPage);if(!isNewPage)
{var newZoom=Math.max(me.fCurrentZoom,pageNode.fPageMinZoom);if(newZoom==pageNode.fPageZoom&&!refresh)
{return;}
pageNode.fPageZoom=newZoom;}
else
{pageNode.fPage=pageNode.fNewPage;pageNode.fPageMinZoom=GetPageMinZoom(pageNode.fPage);pageNode.fPageZoom=Math.max(me.fCurrentZoom,pageNode.fPageMinZoom);}
if(me.fLayout)
{me.fLayout.PagePreLoad(pageNode);}
if(pageNode.fMoviePlayImage)
{DestroyMoviePlayImage(pageNode);}
if(pageNode.fFlashImage)
{DestroyFlashImage(pageNode);}
if(pageNode.fFlash)
{DestroyFlash(pageNode);}
if(pageNode.fImage)
{DestroyImage(pageNode);}
if(pageNode.fHtmlContainer&&(isNewPage||pageNode.fType!=me.TEST_PAGE))
{DestroyHtmlContainer(pageNode);}
var pageInfo=GetPageInfo(pageNode.fPage);pageNode.fType=pageInfo.Type;if(pageInfo.Type!=me.TEST_PAGE)
{CreateImage(pageNode);}
if(pageInfo.Type==me.REGULAR_PAGE)
{pageNode.fImage.src=GetPageURL(pageInfo,pageNode.fPageZoom);}
else if(pageInfo.Type==me.MOVIE_PAGE||pageInfo.Type==me.AUDIO_PAGE||pageInfo.Type==me.FLASH_PAGE)
{CreateFlash(pageNode);CreateFlashImage(pageNode);if(pageInfo.Type==me.MOVIE_PAGE||pageInfo.Type==me.AUDIO_PAGE)
{var titleHtml='Title:&nbsp;<span class="media_name">'+pageInfo.Name+'</span>';pageNode.fFlashTitlePane.innerHTML=titleHtml;}
else
{pageNode.fFlashContentPane.style.position="absolute";}
if(pageInfo.Type==me.MOVIE_PAGE)
{CreateMoviePlayImage(pageNode);pageNode.fFlashImage.src=GetPageURL(pageInfo,GetImageZoom(pageInfo));pageNode.fMoviePlayImage.src=GetSystemURL(me.MOVIE_PLAY_IMAGE_FILE,GetPlayImageZoom(pageInfo));}
else
{pageNode.fFlashImage.src=GetSystemURL(pageInfo.FileName,GetImageZoom(pageInfo));}
pageNode.fImage.src=GetBGURL(pageInfo,GetBGZoom());}
else if(pageInfo.Type==me.IMAGE_PAGE)
{pageNode.fImage.src=GetPageURL(pageInfo,GetImageZoom(pageInfo));}
else if(pageInfo.Type==me.ADV_PAGE)
{pageNode.fImage.src=GetAdsURL(pageInfo.FileName,GetImageZoom(pageInfo));}
else if(pageInfo.Type==me.SYSTEM_PAGE)
{pageNode.fImage.src=GetSystemURL(pageInfo.FileName,GetImageZoom(pageInfo));}
else if(pageInfo.Type==me.TEST_PAGE)
{if(isNewPage)
{CreateHtmlContainer(pageNode);var url=GetTestPageURL(pageInfo);new Ajax.Request(url,{method:'get',onSuccess:pageNode.OnAjaxSuccessHandler,onFailure:pageNode.OnAjaxFailureHandler});}
else
{me.PageImagePostLoad(pageNode);}}
else
{alert("Unknown page type "+pageInfo.Type+"!");}
pageNode.fLayoutUpdate=true;}
var SetCurrentPageImpl=function(pageNum,zoom,refresh,updateView)
{if(!me.fPagesCount>0)
{return;}
if(pageNum<1)
{pageNum=1;}
if(pageNum>me.fPagesCount)
{pageNum=me.fPagesCount;}
var pageInfo=GetPageInfo(pageNum);pageWidth=pageInfo.Width;pageHeight=pageInfo.Height;if(zoom==null)
{if(me.fLayout)
{zoom=me.fLayout.GetDefaultZoom(pageWidth,pageHeight,me.Pages.fZoomStep);if(me.fCurrentZoom&&Math.abs(me.fCurrentZoom-zoom)<=Math.abs(me.fCurrentZoom)*me.PAGE_SIZE_DEVIATION)
{zoom=me.fCurrentZoom;}}
else
{zoom=me.fDefaultZoom;}}
else
{me.fZoom=zoom;}
if(zoom>me.fMaxZoom)
{zoom=me.fMaxZoom;}
me.fCurrentZoom=zoom;if(me.fCurrentPage)
{if(me.fLayout)
{me.fLayout.PagePreChange();}
me.fCacheHead=GetCacheElement(pageNum-me.fCurrentPage);}
var isPageChanged=(me.fCurrentPage!=pageNum);me.fCurrentPage=pageNum;if(me.fPageChangedListener)
{me.fPageChangedListener.OnPageChanged(me.fCurrentPage);}
var aNode=me.fCacheHead;var rightCacheSize=me.fCacheSize%2==0?me.fCacheSize*0.5:Math.floor(me.fCacheSize*0.5)+1;var leftCacheSize=me.fCacheSize-rightCacheSize;if(leftCacheSize>pageNum-1)
{leftCacheSize=pageNum-1;rightCacheSize=me.fCacheSize-leftCacheSize;}
for(var k=0;k<rightCacheSize;k++)
{var newPageNum=pageNum+k;if(newPageNum>me.fPagesCount)
{break;}
aNode.fNewPage=newPageNum;aNode=aNode.fNext;}
aNode=me.fCacheHead.fPrev;for(var k=1;k<=leftCacheSize;k++)
{var newPageNum=pageNum-k;if(newPageNum<1)
{break;}
aNode.fNewPage=newPageNum;aNode=aNode.fPrev;}
var aZoom=Math.max(zoom,GetPageMinZoom(pageNum));var pageRatio=pageWidth/pageHeight;pageWidth+=me.Pages.fZoomStep*aZoom;pageHeight=Math.floor(pageWidth/pageRatio);var sizeChanged=false;if(me.fPageWidth==null||me.fPageHeight==null||Math.abs(me.fPageWidth-pageWidth)>me.fPageWidth*me.PAGE_SIZE_DEVIATION||Math.abs(me.fPageHeight-pageHeight)>me.fPageHeight*me.PAGE_SIZE_DEVIATION)
{me.fPageWidth=pageWidth;me.fPageHeight=pageHeight;UpdatePagesSize();if(me.fLayout)
{me.fLayout.Resize();}
sizeChanged=true;}
if(me.fLayout)
{UpdatePagesLayout(sizeChanged);}
LoadPages(refresh||sizeChanged);UpdateImagesLayout();if(me.fLayout)
{me.fLayout.PagePostChange(refresh||updateView||sizeChanged);}}
var LoadPages=function(refresh)
{var aNode=me.fCacheHead;for(var k=0;k<me.fCacheSize;k++)
{LoadPage(aNode,refresh);aNode=aNode.fNext;}}
var UpdatePagesSize=function()
{var anImage;var anImagePane;var aLoadingPane;var pageInfo;var aNode=me.fCacheHead;for(var k=0;k<me.fCacheSize;k++)
{aShadow=aNode.fShadow;aShadow.style.width=me.fPageWidth+"px";aShadow.style.height=me.fPageHeight+"px";anImagePage=aNode.fImagePane;anImagePage.style.width=me.fPageWidth+"px";anImagePage.style.height=me.fPageHeight+"px";aLoadingPane=aNode.fLoadingPane;aLoadingPane.style.width=me.fPageWidth+"px";aLoadingPane.style.height=me.fPageHeight+"px";aNode.fLayoutUpdate=true;aNode=aNode.fNext;}}
var UpdatePagesLayout=function(needUpdate)
{var aNode=me.fCacheHead;for(var k=0;k<me.fCacheSize;k++)
{if(aNode.fNewPage&&(aNode.fNewPage!=aNode.fPage||needUpdate))
{me.fLayout.PageUpdateLayout(aNode);}
aNode=aNode.fNext;}}
var UpdateImagesLayout=function()
{var aNode=me.fCacheHead;for(var k=0;k<me.fCacheSize;k++)
{if(aNode.fNewPage&&aNode.fLayoutUpdate)
{var pageInfo=GetPageInfo(aNode.fNewPage);if(pageInfo.Type==me.REGULAR_PAGE)
{aNode.fImage.width=me.fPageWidth;aNode.fImage.height=me.fPageHeight;}
else if(pageInfo.Type==me.MOVIE_PAGE||pageInfo.Type==me.AUDIO_PAGE||pageInfo.Type==me.FLASH_PAGE)
{var bgSize=GetBGSize();aNode.fImage.width=bgSize.width;aNode.fImage.height=bgSize.height;var imageSize=GetImageSize(pageInfo);aNode.fFlashImage.width=imageSize.width;aNode.fFlashImage.height=imageSize.height;aNode.fFlash.style.width=bgSize.width+"px";aNode.fFlash.style.height=bgSize.height+"px";if(pageInfo.Type==me.MOVIE_PAGE||pageInfo.Type==me.AUDIO_PAGE)
{aNode.fFlashContentPane.style.width=imageSize.width+"px";aNode.fFlashContentPane.style.height=imageSize.height+"px";aNode.fFlashTitlePane.style.width=(bgSize.width-(me.TITLE_PADDING_SIZE))+"px";}
if(pageInfo.Type==me.MOVIE_PAGE)
{var playImageSize=GetPlayImageSize(pageInfo);aNode.fMoviePlayImage.width=playImageSize.width;aNode.fMoviePlayImage.height=playImageSize.height;}}
else if(pageInfo.Type==me.IMAGE_PAGE||pageInfo.Type==me.ADV_PAGE||pageInfo.Type==me.SYSTEM_PAGE)
{var imageSize=GetImageSize(pageInfo);aNode.fImage.width=imageSize.width;aNode.fImage.height=imageSize.height;}
else if(pageInfo.Type==me.TEST_PAGE)
{aNode.fHtmlContainer.style.width=me.fPageWidth+"px";aNode.fHtmlContainer.style.height=me.fPageHeight+"px";}
else
{alert("Unknown page type "+pageInfo.Type+"!");}
aNode.fLayoutUpdate=false;}
aNode=aNode.fNext;}}
var EmbedMovie=function(pageNode)
{var pageInfo=GetPageInfo(pageNode.fPage);var imageSize=GetImageSize(pageInfo);var so=new SWFObject("/viewer/movie.swf","sotester",imageSize.width,imageSize.height,"9","#FFFFFF");so.useExpressInstall("/viewer/expressinstall.swf");so.addParam("quality","high");so.addParam("wmode","transparent");so.addParam("menu","false");so.addVariable("movsrc",GetFlashFlvURL(pageInfo));so.addVariable("w",imageSize.width);so.addVariable("h",imageSize.height);so.addVariable("mediatype","");so.write(pageNode.fFlashContentPane);}
var EmbedAudio=function(pageNode)
{var pageInfo=GetPageInfo(pageNode.fPage);var imageSize=GetImageSize(pageInfo);var so=new SWFObject("/viewer/movie.swf","sotester",imageSize.width,200,"9","#FFFFFF");so.useExpressInstall("/viewer/expressinstall.swf");so.addParam("quality","high");so.addParam("wmode","transparent");so.addParam("menu","false");so.addVariable("movsrc",GetFlashFlvURL(pageInfo));so.addVariable("w",imageSize.width);so.addVariable("h",200);so.addVariable("mediatype","sound");so.write(pageNode.fFlashContentPane);}
var EmbedFlash=function(pageNode)
{var pageInfo=GetPageInfo(pageNode.fPage);var so=new SWFObject(GetFlashFlvURL(pageInfo),"sotester","100%","100%","9","#FFFFFF");so.useExpressInstall("/viewer/expressinstall.swf");so.addParam("quality","high");so.addParam("wmode","transparent");so.addParam("menu","false");so.write(pageNode.fFlash);}
var EmbedInstallFlash=function(pageNode)
{var embedHtml='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1" height="1">';embedHtml+='  <param value="/viewer/movie.swf" />';embedHtml+='  <embed src="/viewer/movie.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="1" height="1"></embed>';embedHtml+='</object>';pageNode.fFlash.innerHTML=embedHtml;}
var DetectFlash=function()
{if(navigator.mimeTypes.length>0){if(navigator.mimeTypes["application/x-shockwave-flash"])
{return navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin!=null;}
return false;}else if(window.ActiveXObject){try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash");return true;}catch(oError){return false;}}else{return false;}}
this.PageImagePostLoad=function(pageNode)
{if(this.fLayout)
{this.fLayout.ImageUpdateLayout(pageNode);this.fLayout.PagePostLoad(pageNode);}
if(pageNode.fType==this.MOVIE_PAGE)
{fixPNG(pageNode.fMoviePlayImage);}}
this.FlashClick=function(pageNode)
{pageNode.fFlashContentPane.removeChild(pageNode.fFlashImage);pageNode.fFlashContentPane.onclick=null;var aNode=me.fCacheHead;for(var k=0;k<me.fCacheSize;k++)
{if(aNode!=pageNode&&(aNode.fType==me.MOVIE_PAGE||aNode.fType==me.AUDIO_PAGE||aNode.fType==me.FLASH_PAGE))
{LoadPage(aNode,true);}
aNode=aNode.fNext;}
if(pageNode.fType==me.MOVIE_PAGE)
{pageNode.fFlashContentPane.removeChild(pageNode.fFlashContentPane.firstChild);}
else if(pageNode.fType==me.FLASH_PAGE)
{pageNode.fFlash.removeChild(pageNode.fFlashContentPane);pageNode.fFlash.removeChild(pageNode.fFlashTitlePane);}
if(!DetectFlash())
{EmbedInstallFlash(pageNode);return;}
if(pageNode.fType==me.MOVIE_PAGE)
{EmbedMovie(pageNode);}
else if(pageNode.fType==me.AUDIO_PAGE)
{EmbedAudio(pageNode);}
else if(pageNode.fType==me.FLASH_PAGE)
{EmbedFlash(pageNode);}}
this.AjaxEmbedHandler=function(pageNode,htmlContent)
{pageNode.fHtmlContainer.innerHTML=htmlContent;}
this.AjaxFailureHandler=function(pageNode)
{pageNode.fHtmlContainer.innerHTML="<center>An error occured while loading this page!</center>";}
this.SyncSetLayout=function(layout)
{if(this.fLayout)
{this.fLayout.Dispose();}
this.fLayout=layout;this.fLayout.Init();SetCurrentPageImpl(this.fCurrentPage==undefined?1:this.fCurrentPage,this.fZoom,true);}
this.SyncSetZoom=function(zoom)
{var aZoom;if(zoom>this.fCurrentZoom)
{aZoom=(zoom-this.fCurrentZoom)+this.fCacheHead.fPageZoom;}
else
{aZoom=zoom;}
SetCurrentPageImpl(this.fCurrentPage==undefined?1:this.fCurrentPage,aZoom,true,true);}
this.SyncSetCurrentPageAndZoom=function(pageNum,zoom)
{SetCurrentPageImpl(pageNum,zoom,true,true);}
this.SyncSetCurrentPage=function(pageNum,refresh,updateView)
{SetCurrentPageImpl(pageNum,this.fZoom,refresh,updateView);}
this.SyncSetSearch=function(aSearch)
{this.fSearch=aSearch;SetCurrentPageImpl(this.fCurrentPage==undefined?1:this.fCurrentPage,this.fZoom,true,true);}
this.SyncRefreshLayout=function()
{if(this.fLayout)
{this.fLayout.Resize();var aNode=me.fCacheHead;for(var k=0;k<me.fCacheSize;k++)
{if(aNode.fPage>0)
{this.fLayout.PageUpdateLayout(aNode);}
var aNode=aNode.fNext;}}}
this.Init=function(layout)
{this.InitPages();this.fLayout=layout;this.fLayout.Init();CreateCache();}
this.GetZoom=function()
{return this.fCurrentZoom;}
this.SetLayout=function(layout)
{this.id=++CMD_ID;new Mutex(this,"SyncSetLayout",layout);}
this.SetZoom=function(zoom)
{this.id=++CMD_ID;new Mutex(this,"SyncSetZoom",zoom);}
this.SetCurrentPageAndZoom=function(pageNum,zoom)
{this.id=++CMD_ID;new Mutex(this,"SyncSetCurrentPageAndZoom",pageNum,zoom);}
this.SetCurrentPage=function(pageNum,refresh,updateView)
{this.id=++CMD_ID;new Mutex(this,"SyncSetCurrentPage",pageNum,refresh,updateView);}
this.SetDefaultPage=function()
{this.SetCurrentPage(this.DEFAULT_PAGE!=null?this.DEFAULT_PAGE:1);}
this.SetSearch=function(aSearch)
{this.id=++CMD_ID;new Mutex(this,"SyncSetSearch",aSearch);}
this.HasSearch=function()
{return(this.fSearch!=null);}
this.ClearSearch=function()
{this.SetSearch(null);}
this.RefreshLayout=function()
{this.id=++CMD_ID;new Mutex(this,"SyncRefreshLayout");}
this.SetPageChangedListener=function(listener)
{this.fPageChangedListener=listener;}}
