﻿///////////////////////////////////////////////////////////////////////////////
//
//  PTI.js
//
// 
// © 2009 Page Turn Interactive Ltd. All Rights Reserved.
//
//
///////////////////////////////////////////////////////////////////////////////

var responseSeperator = "#\\";
var tableSeperator = "}\\";
var rowSeperator = "|\\";
var columnSeperator = "~\\";

var modeFlash = "F";
var modeHTML = "H";

var moduleTypeLink = 1;
var moduleTypePollAnswer = 2;
var moduleTypeArticle = 3;
var moduleTypeVideo = 4;
var moduleTypeJump = 5;
var moduleTypeComp = 6;
var moduleTypeGallery = 7;
var moduleTypeForward = 8;

var ptiBuild = "3-1";
var ptiWS = "/V" + ptiBuild + "/PTI.aspx";
var ptiIsIE = (jQuery.browser.msie && parseInt(jQuery.browser.version.substr(0,1)) < 7);

var pitIsIphone = navigator.appVersion.match(/iphone/gi) ? true : false;
var pitIsIpad = navigator.appVersion.match(/ipad/gi) ? true : false;
var pitIsAndroid = navigator.appVersion.match(/android/gi) ? true : false;
var pitIsTouch = pitIsIphone || pitIsIpad || pitIsAndroid;


var ptiPageTurns = new Array();
var iScrollScroller;





/**** ipad touch - Start ********************************************************************/
var triggerElementID = null;
var fingerCount = 0;
var startX = 0;
var startY = 0;
var curX = 0;
var curY = 0;
var deltaX = 0;
var deltaY = 0;
var horzDiff = 0;
var vertDiff = 0;
var minLength = 72; 
var swipeLength = 0;
var swipeAngle = null;
var swipeDirection = null;


function touchStart(event,passedName) {
	// disable the standard ability to select the touched object
	//event.preventDefault();
	// get the total number of fingers touching the screen
	fingerCount = event.touches.length;
	// since we're looking for a swipe (single finger) and not a gesture (multiple fingers),
	// check that only one finger was used
	if ( fingerCount == 1 ) {
		// get the coordinates of the touch
		startX = event.touches[0].pageX;
		startY = event.touches[0].pageY;
		// store the triggering element ID
		triggerElementID = passedName;
	} else {
		// more than one finger touched so cancel
		touchCancel(event);
	}
}

function touchMove(event) {
	//event.preventDefault();
	if ( event.touches.length == 1 ) {
		curX = event.touches[0].pageX;
		curY = event.touches[0].pageY;
	} else {
		touchCancel(event);
	}
}

function touchEnd(event) {
	//event.preventDefault();
	// check to see if more than one finger was used and that there is an ending coordinate
	if ( fingerCount == 1 && curX != 0 ) {
		// use the Distance Formula to determine the length of the swipe
		swipeLength = Math.round(Math.sqrt(Math.pow(curX - startX,2) + Math.pow(curY - startY,2)));
		// if the user swiped more than the minimum length, perform the appropriate action
		if ( swipeLength >= minLength ) {
			caluculateAngle();
			determineSwipeDirection();
			processingRoutine();
			touchCancel(event); // reset the variables
		} else {
			touchCancel(event);
		}	
	} else {
		touchCancel(event);
	}
}

function touchCancel(event) {
	// reset the variables back to default values
	fingerCount = 0;
	startX = 0;
	startY = 0;
	curX = 0;
	curY = 0;
	deltaX = 0;
	deltaY = 0;
	horzDiff = 0;
	vertDiff = 0;
	swipeLength = 0;
	swipeAngle = null;
	swipeDirection = null;
	triggerElementID = null;
}

function caluculateAngle() {
	var X = startX-curX;
	var Y = curY-startY;
	var Z = Math.round(Math.sqrt(Math.pow(X,2)+Math.pow(Y,2))); //the distance - rounded - in pixels
	var r = Math.atan2(Y,X); //angle in radians (Cartesian system)
	swipeAngle = Math.round(r*180/Math.PI); //angle in degrees
	if ( swipeAngle < 0 ) { swipeAngle =  360 - Math.abs(swipeAngle); }
}

function determineSwipeDirection() {
	if ( (swipeAngle <= 45) && (swipeAngle >= 0) ) {
		swipeDirection = 'left';
	} else if ( (swipeAngle <= 360) && (swipeAngle >= 315) ) {
		swipeDirection = 'left';
	} else if ( (swipeAngle >= 135) && (swipeAngle <= 225) ) {
		swipeDirection = 'right';
	} else if ( (swipeAngle > 45) && (swipeAngle < 135) ) {
		swipeDirection = 'down';
	} else {
		swipeDirection = 'up';
	}
}

function processingRoutine() {
    

	if ( swipeDirection == 'left' )
	{
	    ptiNextPage(triggerElementID);	    
	} 
	else if ( swipeDirection == 'right' )
	{
	    ptiPreviousPage(triggerElementID);	    
	}
}
/**** ipad touch - Start ********************************************************************/





function ptiGetInstance(pstrContainerElementID)
{
    var objReturn;
    
    for (var intInstanceIndex = 0; intInstanceIndex < ptiPageTurns.length; ++intInstanceIndex)
    {   
        if (ptiPageTurns[intInstanceIndex].containerElementID == pstrContainerElementID)
        {
            objReturn = ptiPageTurns[intInstanceIndex];
        }
    }
    
    return objReturn;
}




/**** HTML Interface - Start ********************************************************************/
function ptiPreviousPage(pstrContainerElementID)
{
    ptiTrace("ptiPreviousPage: " + pstrContainerElementID);
    
    
    var objPageTurn = ptiGetInstance(pstrContainerElementID); 
    var elementID = objPageTurn.elementID;
    
    if (objPageTurn.loaded)
    {
        if (objPageTurn.mode == modeFlash)
        {
            if (objPageTurn.zoom && jQuery("#" + objPageTurn.containerZoomElementID).get(0).scrollTop && jQuery("#" + objPageTurn.containerZoomElementID).get(0).scrollTop > 0)
            {
                jQuery("#" + objPageTurn.containerZoomElementID).animate({scrollTop: 0},
                    {
                    duration:   500,
                    easing:     "swing", 
                    complete:   function(){swfobject.getObjectById(elementID).ptiPreviousPage();}
                    });   
            }
            else
            {
                swfobject.getObjectById(objPageTurn.elementID).ptiPreviousPage();
            }            
        }
        else
        {
            objPageTurn.htmlPreviousPage();
        }        
    }
}

function ptiNextPage(pstrContainerElementID)
{
    ptiTrace("ptiNextPage: " + pstrContainerElementID);

    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    var elementID = objPageTurn.elementID;
    
    if (objPageTurn.loaded)
    {
        if (objPageTurn.mode == modeFlash)
        {
            if (objPageTurn.zoom && jQuery("#" + objPageTurn.containerZoomElementID).get(0).scrollTop && jQuery("#" + objPageTurn.containerZoomElementID).get(0).scrollTop > 0)
            {
                jQuery("#" + objPageTurn.containerZoomElementID).animate({scrollTop: 0},
                    {
                    duration:   500,
                    easing:     "swing", 
                    complete:   function(){swfobject.getObjectById(elementID).ptiNextPage();}
                    });   
            }
            else
            {
                swfobject.getObjectById(objPageTurn.elementID).ptiNextPage();
            }            
        }
        else
        {
            objPageTurn.htmlNextPage();
        }        
    }
}

function ptiGotoPage(pstrContainerElementID, pageNo)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        if (objPageTurn.mode == modeFlash)
        {
            swfobject.getObjectById(objPageTurn.elementID).ptiGotoPage(pageNo);
        }
        else
        {
            objPageTurn.htmlGotoPage(pageNo);
        }        
    }
}
function ptiGotoPageIfOnCover(pstrContainerElementID, pageNo)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    

    if (objPageTurn.currentPageNo == 0)
    {        
        ptiGotoPage(pstrContainerElementID, pageNo);
    }
}

function ptiGotoPageSlow(pstrContainerElementID, pageNo)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        if (objPageTurn.mode == modeFlash)
        {
            swfobject.getObjectById(objPageTurn.elementID).ptiGotoPageSlow(pageNo);
        }
        else
        {
            objPageTurn.htmlGotoPage(pageNo);
        }        
    }
}
function ptiContents(pstrContainerElementID)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        objPageTurn.showContents();
    }
}
function ptiCloseContentsGotoPage(pstrContainerElementID, pageNo)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        objPageTurn.closeContentsGotoPage(pageNo);
    }
}
function ptiIssues(pstrContainerElementID)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        objPageTurn.showIssues();
    }
}
function ptiCloseIssuesGotoPage(pstrContainerElementID, pageNo)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        objPageTurn.closeIssuesGotoPage(pageNo);
    }
}
function ptiRightZoom(pstrContainerElementID)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        objPageTurn.rightZoom();
    }
}
function ptiLeftZoom(pstrContainerElementID)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        objPageTurn.leftZoom();
    }
}




/**** HTML Interface - End ****/







/**** Flash/HTML Callback Interface - Start ********************************************************************/
function ptiPagesViewed(pstrContainerElementID, pintLeftPageID, pintRightPageID)
{
    ptiTrace("ptiPagesViewed: " + pstrContainerElementID + ":" + pintLeftPageID + ":" + pintRightPageID);

    var objPageTurn = ptiGetInstance(pstrContainerElementID);    

    //set the current page to the right hand page providing there is one.  Otherwise use left.
    if (pintRightPageID > 0) {
        objPageTurn.currentPageNo = getByID(objPageTurn.onlineMagPages.items, pintRightPageID).number;
            
    } else if (pintLeftPageID > 0) {
        objPageTurn.currentPageNo = getByID(objPageTurn.onlineMagPages.items, pintLeftPageID).number;    
    }
    
    objPageTurn.pagesViewed(pintLeftPageID, pintRightPageID);    
}



function ptiLinkClicked(pstrContainerElementID, pintType, pintID)
{
    ptiTrace("ptiLinkClicked: " + pstrContainerElementID + ":" + pintType + ":" + pintID);
    

    var objPageTurn = ptiGetInstance(pstrContainerElementID);    

    if (pintType == moduleTypeLink)
    {
        //Link
        getByID(objPageTurn.allOnlineMagPageLinks, pintID).clicked();
    }    
    else if (pintType == moduleTypePollAnswer)
    {
        //PollAnswer
        getByID(objPageTurn.allOnlineMagPagePollAnswers, pintID).clicked();
    }    
    else if (pintType == moduleTypeArticle)
    {
        //Article
        getByID(objPageTurn.allOnlineMagPageArticles, pintID).clicked();
    }    
    else if (pintType == moduleTypeJump)
    {
        //Jump
        getByID(objPageTurn.allOnlineMagPageJumps, pintID).clicked();
    }    
    else if (pintType == moduleTypeComp)
    {
        //Comp
        getByID(objPageTurn.allOnlineMagPageComps, pintID).clicked();
    }    
    else if (pintType == moduleTypeGallery)
    {
        //Gallery
        getByID(objPageTurn.allOnlineMagPageGalleries, pintID).clicked();
    }    
    else if (pintType == moduleTypeForward)
    {
        //Forward
        getByID(objPageTurn.allOnlineMagPageForwards, pintID).clicked();
    }    
}


function ptiVideoPlayed(pstrContainerElementID, pintID)
{    
    ptiTrace("ptiVideoPlayed: " + pstrContainerElementID + ":" + pintID);

    //Video
    var objPageTurn = ptiGetInstance(pstrContainerElementID);    

    getByID(objPageTurn.allOnlineMagPageVideos, pintID).VideoPlayed();
}


function ptiGetConfig(pstrContainerElementID)
{
    var objPageTurn = ptiGetInstance(pstrContainerElementID);
    
    return objPageTurn.flashConfig;
}


function ptiGetPages(pstrContainerElementID)
{
    return ptiGetInstance(pstrContainerElementID).flashPages;
}


function ptiTrace(pstrMessage)
{
    jQuery("#divPtiTrace").append(pstrMessage + "<br />");    
}
/**** Flash Interface - End ****/


















OnlineMagIssue = function(pstrContainerElementID, pobjConfig) {
    var strPN = "0";
    var strHTML = "";

    this.flashConfig = pobjConfig;

    this.mode = modeFlash;
    if (swfobject.getFlashPlayerVersion().major == 0) {
        this.mode = modeHTML;
    }
    else if (swfobject.getQueryParamValue("ptih") && swfobject.getQueryParamValue("ptih").toLowerCase() == "y") {
        this.mode = modeHTML;
    }

    this.containerElementID = pstrContainerElementID;
    this.containerZoomElementID = pstrContainerElementID + "_zoom";;
    this.elementID = pstrContainerElementID + "_inner";
    this.zoom = false;

    jQuery("#" + this.containerElementID).empty();

    this.flashConfig.containerElementID = this.containerElementID;
    this.flashConfig.elementID = this.elementID;



    this.loaded = false;
    this.host = this.flashConfig.hostIncWWW;
    this.firstPageAlreadyLoaded = false;


    this.flashPages = new Array();
    ptiPageTurns[ptiPageTurns.length] = this;

    if (swfobject.getQueryParamValue("ptie")) {
        this.emailAddress = unescape(swfobject.getQueryParamValue("ptie"));
    }
    else {
        this.emailAddress = "";
    }

    // Get the page number from the page name or the query string.
    // PAGE NO's start at 1 not 0 (Zero) if passed in by page name or query HOWEVER interally
    // to this script page numbers start at 0 (zero)
    var arPageNo = window.location.toString().toLowerCase().match(/page(\d{1,4})\.htm/);
    if (arPageNo)
    {
        strPN = removeLeadingZeros(arPageNo[1]) - 1;
        if (parseInt(strPN) < 0)
        {
            strPN = 0;
        }   
        this.flashConfig.firstPage = strPN;
    }
    else if (swfobject.getQueryParamValue("ptip")) {
        strPN = swfobject.getQueryParamValue("ptip") - 1;
        if (parseInt(strPN) < 0)
        {
            strPN = 0;
        }   
        this.flashConfig.firstPage = strPN; // url param override js setting
    }
    
    // get the proofing token if there is one
    if (swfobject.getQueryParamValue("ptit"))
    {
        this.flashConfig.proofingToken = swfobject.getQueryParamValue("ptit");
    }

    if (this.flashConfig.useUrlParams) {
        if (swfobject.getQueryParamValue("ptim")) {
            this.loadOnlineMag(swfobject.getQueryParamValue("ptim"), strPN);
        }
        else if (swfobject.getQueryParamValue("ptii")) {
            this.loadOnlineMagIssue(swfobject.getQueryParamValue("ptii"), strPN);
        }
    }
}

OnlineMagIssue.prototype.loadOnlineMag = function(pstrMGUID, pstrPN)
{   
    if (pstrPN == null)
    {
        pstrPN = "0";
    }

    var strUrl = "http://" + this.host + ptiWS + "?M=1&MGUID=" + pstrMGUID + "&PN=" + pstrPN + "&PT=" + encodeURI(this.flashConfig.proofingToken) + "&EA=" + encodeURI(this.emailAddress) + "&callback=?";
    jQuery.getJSON(strUrl, createDelegate(this, this.gotOnlineMagIssue));
}

OnlineMagIssue.prototype.loadOnlineMagIssue = function(pstrIGUID, pstrPN)
{
    if (pstrPN == null)
    {
        pstrPN = "0";
    }

    var strUrl = "http://" + this.host + ptiWS + "?M=1&IGUID=" + pstrIGUID + "&PN=" + pstrPN + "&PT=" + encodeURI(this.flashConfig.proofingToken) + "&EA=" + encodeURI(this.emailAddress) + "&callback=?";
    jQuery.getJSON(strUrl, createDelegate(this, this.gotOnlineMagIssue));
}

OnlineMagIssue.prototype.gotOnlineMagIssue = function(pobjReturn)
{
    var strHTML;
    var strElementMarkup;
    
    if (pobjReturn.returnStatus != 1)
    {
        return;
    }


    var arData;

    var strOnlineMag;
    var strOnlineMagIssue;
    var strOnlineMagIssueLists;
    var strOnlineMagPages;
    var strOnlineMagPageLinks;
    var strOnlineMagPagePollAnswers;
    var strOnlineMagPageArticles;
    var strOnlineMagPageVideos;
    var strOnlineMagPageJumps;
    var strOnlineMagPageComps;
    var strOnlineMagPageCompAnswers;
    var strOnlineMagPageGalleries;
    var strOnlineMagPageGalleryPhotos;
    var strOnlineMagPageForwards;


    // Must be ok, get Online Mag details
    arData = pobjReturn.returnData.split(tableSeperator);
    strOnlineMag = arData[0];
    strOnlineMagIssueLists = arData[1];
    strOnlineMagIssue = arData[2];
    strOnlineMagPages = arData[3];
    strOnlineMagPageLinks = arData[4];
    strOnlineMagPagePollAnswers = arData[5];
    strOnlineMagPageArticles = arData[6];
    strOnlineMagPageVideos = arData[7];
    strOnlineMagPageJumps = arData[8];
    strOnlineMagPageComps = arData[9];
    strOnlineMagPageCompAnswers = arData[10];
    strOnlineMagPageGalleries = arData[11];
    strOnlineMagPageGalleryPhotos = arData[12];
    strOnlineMagPageForwards = arData[13];


    if (strOnlineMagPages == null)
    {
        strOnlineMagPages = "";
    }

    if (strOnlineMagPageLinks == null)
    {
        strOnlineMagPageLinks = "";
    }

    if (strOnlineMagPagePollAnswers == null)
    {
        strOnlineMagPagePollAnswers = "";
    }

    if (strOnlineMagPageArticles == null)
    {
        strOnlineMagPageArticles = "";
    }

    if (strOnlineMagPageVideos == null)
    {
        strOnlineMagPageVideos = "";
    }

    if (strOnlineMagPageJumps == null)
    {
        strOnlineMagPageJumps = "";
    }

    if (strOnlineMagPageComps == null)
    {
        strOnlineMagPageComps = "";
    }

    if (strOnlineMagPageCompAnswers == null)
    {
        strOnlineMagPageCompAnswers = "";
    }

    if (strOnlineMagPageGalleries == null)
    {
        strOnlineMagPageGalleries = "";
    }

    if (strOnlineMagPageGalleryPhotos == null)
    {
        strOnlineMagPageGalleryPhotos = "";
    }

    if (strOnlineMagPageForwards == null)
    {
        strOnlineMagPageForwards = "";
    }

    if (strOnlineMag.length > 0)
    {
        var arOnlineMag = strOnlineMag.split(columnSeperator);

        this.onlineMagID = parseInt(arOnlineMag[0]);
        this.onlineMagName = arOnlineMag[1];
        this.onlineMagFolderName = arOnlineMag[2];
        this.onlineMagWidth = parseInt(arOnlineMag[3]);
        this.onlineMagHeight = parseInt(arOnlineMag[4]);
        this.onlineMagFrameWidth = parseInt(arOnlineMag[5]);
        this.onlineMagFrameHeight = parseInt(arOnlineMag[6]);
        this.OnlineMagFrameLeftRightMargin = parseInt(arOnlineMag[7]);
        this.OnlineMagFrameTopBottomMargin = parseInt(arOnlineMag[8]);        
        this.onlineMagZoomFrameWidth = parseInt(arOnlineMag[9]);
        this.onlineMagZoomFrameHeight = parseInt(arOnlineMag[10]);
        this.onlineMagZoomViewPageWidth = parseInt(arOnlineMag[11]);
        this.onlineMagZoomViewPageHeight = parseInt(arOnlineMag[12]);
        this.onlineMagZoomScrollBarWidth = parseInt(arOnlineMag[13]);
        this.analyticsCode = arOnlineMag[14];        
        this.errorMessage = arOnlineMag[15];
    }

    if (strOnlineMagIssueLists.length > 0)    
    {
        this.onlineMagIssueLists = new OnlineMagIssueLists(this, strOnlineMagIssueLists);
    }
    

    if (strOnlineMagIssue.length > 0)
    {
        var arOnlineMagIssue = strOnlineMagIssue.split(columnSeperator);

        this.onlineMagIssueID = parseInt(arOnlineMagIssue[0]);
        this.onlineMagIssueTitle = arOnlineMagIssue[1];
        this.onlineMagIssueUrl = arOnlineMagIssue[2];
        this.onlineMagIssueEditor = arOnlineMagIssue[3];
        
        this.onlineMagIssueFolderName = arOnlineMagIssue[4];
        this.onlineMagIssueIssueDate = arOnlineMagIssue[5];
        this.onlinePDFVersionUrl = arOnlineMagIssue[6];
        this.onlineMagIssueVisitID = parseInt(arOnlineMagIssue[7]);
        this.thumbnailSize = parseInt(arOnlineMagIssue[8]);
        
        // workout the thumb width and height
        if (this.onlineMagHeight > this.onlineMagWidth)
        {
            //Portrait
            this.thumbnailHeight = this.thumbnailSize;
            this.thumbnailWidth = parseInt(this.onlineMagWidth / (this.onlineMagHeight / this.thumbnailSize));
        }
        else
        {
            //Landscape
            this.thumbnailWidth = this.thumbnailSize;
            this.thumbnailHeight = parseInt(this.onlineMagHeight / (this.onlineMagWidth / this.thumbnailSize));            
        }            
    }


    this.allOnlineMagPageLinks = new Array();
    this.allOnlineMagPagePollAnswers = new Array();
    this.allOnlineMagPageArticles = new Array();
    this.allOnlineMagPageVideos = new Array();
    this.allOnlineMagPageJumps = new Array();
    this.allOnlineMagPageComps = new Array();
    this.allOnlineMagPageCompAnswers = new Array();
    this.allOnlineMagPageGalleries = new Array();
    this.allOnlineMagPageGalleryPhotos = new Array();
    this.allOnlineMagPageForwards = new Array();


    this.onlineMagPages = new OnlineMagPages(this, strOnlineMagPages, strOnlineMagPageLinks, strOnlineMagPagePollAnswers, strOnlineMagPageArticles, strOnlineMagPageVideos, strOnlineMagPageJumps, strOnlineMagPageComps, strOnlineMagPageCompAnswers, strOnlineMagPageGalleries, strOnlineMagPageGalleryPhotos, strOnlineMagPageForwards);
 
    
    this.flashConfig.onlineMagWidth = this.onlineMagWidth;
    this.flashConfig.onlineMagHeight = this.onlineMagHeight;
    this.flashConfig.onlineMagFrameWidth = this.onlineMagFrameWidth;
    this.flashConfig.onlineMagFrameHeight = this.onlineMagFrameHeight;

    this.flashConfig.onlineMagZoomFrameWidth = this.onlineMagZoomFrameWidth;
    this.flashConfig.onlineMagZoomFrameHeight = this.onlineMagZoomFrameHeight;
    this.flashConfig.onlineMagZoomViewPageWidth = this.onlineMagZoomViewPageWidth;
    this.flashConfig.onlineMagZoomViewPageHeight = this.onlineMagZoomViewPageHeight;
    this.flashConfig.onlineMagZoomScrollBarWidth = this.onlineMagZoomScrollBarWidth;
    
    this.currentPageNo = this.flashConfig.firstPage; // Zero based
    this.htmlTurning = false;
    
    
    // override globalFreezeOnFlip is jpeg images are being used
    if (this.onlineMagPages.length > 0)
    {
        if (this.onlineMagPages.items[0].pageImage.indexOf(".jpg") >-1 || this.onlineMagPages.items[0].pageImage.indexOf(".jpeg") >-1)
        {
            //Dont freeze on flip
            this.flashConfig.globalFreezeOnFlip = false;
        }    
    }
    

    //setup the navbar & inner container
    strHTML = "";
    strElementMarkup = "<div id=\"" + this.containerZoomElementID + "\" ontouchstart=\"touchStart(event,'" + this.containerElementID + "');\"  ontouchend=\"touchEnd(event);\" ontouchmove=\"touchMove(event);\" ontouchcancel=\"touchCancel(event);\">" + 
                       "    <div id=\"" + this.elementID + "\" class=\"ptihtml_Issue\" style=\"position: relative; width: " + parseInt(this.onlineMagWidth * 2).toString() + "px; height: " + this.onlineMagHeight.toString() + "px; margin: " + this.OnlineMagFrameTopBottomMargin.toString() + "px auto;\"></div>" + 
                       "</div>";
    
    if (this.flashConfig.navBar == "bottom")
    {
        strHTML += strElementMarkup;
    }
    strHTML += "<div class=\"ptinav\">";
    if (this.mode == modeFlash)
    {       
        strHTML += "    <div class=\"ptinav_leftzoom ptinav_zoomin\" title=\"Zoom In\"></div>";
    }        
    strHTML += "    <div class=\"ptinav_contents\" title=\"View Contents\"></div>";
    strHTML += "    <div class=\"ptinav_previous\" title=\"Previous Page\"></div>";
    strHTML += "    <div class=\"ptinav_page\"></div>";
    strHTML += "    <div class=\"ptinav_next\" title=\"Next Page\"></div>";
    strHTML += "    <div class=\"ptinav_issues\" title=\"Other Issues\"></div>";
    if (this.mode == modeFlash)
    {       
        strHTML += "    <div class=\"ptinav_rightzoom ptinav_zoomin\" title=\"Zoom In\"></div>";
    }
    strHTML += "</div>";
    if (this.flashConfig.navBar == "top")
    {
        strHTML += strElementMarkup;
    }
    strHTML += "<div class=\"ptipoweredby\"><span>powered by <a href=\"http://www.pageturninteractive.co.uk\" target=\"_blank\">Page Turn Interactive</a></span></div>";

    jQuery("#" + this.containerElementID).html(strHTML);

    var strContainerElementID = this.containerElementID;
    jQuery("#" + this.containerElementID + " .ptinav_previous").bind("click", function (){ptiPreviousPage(strContainerElementID);});
    jQuery("#" + this.containerElementID + " .ptinav_next").bind("click", function (){ptiNextPage(strContainerElementID);});
    jQuery("#" + this.containerElementID + " .ptinav_contents").bind("click", function (){ptiContents(strContainerElementID);});
    jQuery("#" + this.containerElementID + " .ptinav_issues").bind("click", function (){ptiIssues(strContainerElementID);});
    jQuery("#" + this.containerElementID + " .ptinav_leftzoom").bind("click", function (){ptiLeftZoom(strContainerElementID);});
    jQuery("#" + this.containerElementID + " .ptinav_rightzoom").bind("click", function (){ptiRightZoom(strContainerElementID);});

    


    if (ptiIsIE)
    {
        jQuery("#" + this.containerElementID + " .ptinav_previous, #" + this.containerElementID + " .ptinav_next, #" + this.containerElementID + " .ptinav_logo a, #" + this.containerElementID + " .ptinav_page, #" + this.containerElementID + " .ptinav_contents").fixPNG();
    }


    if (this.mode == modeFlash)
    {   
        if (this.errorMessage.length == 0)
        {
            this.showFlash()            
        }
        else
        {
            jQuery("#" + this.elementID).html("<p class=\"ptiIssueError\">" + this.errorMessage + "</p>");
        }
    }
    else
    {
        if (this.errorMessage.length == 0)
        {        
            // HTML Version
            jQuery("#" + this.elementID).css("width", parseInt(this.onlineMagWidth * 2).toString() + "px");
            jQuery("#" + this.elementID).css("height", this.onlineMagHeight.toString() + "px");
            

            strHTML = "";
            strHTML += "    <div class=\"ptihtml_LeftPageBehind\" style=\"position: absolute; width: " + this.onlineMagWidth.toString() + "px; height: " + this.onlineMagHeight.toString() + "px; top: 0px; left: 0px; background: top right no-repeat\">\n";
            strHTML += "        <div class=\"ptihtml_loader\"></div>\n";
            strHTML += "        <div class=\"ptihtml_leftShadow\"></div>\n";
            strHTML += "    </div>\n";
            strHTML += "    <div class=\"ptihtml_RightPageBehind\" style=\"position: absolute; width: " + this.onlineMagWidth.toString() + "px; height: " + this.onlineMagHeight.toString() + "px; top: 0px; left: " + this.onlineMagWidth.toString() + "px; background: top left no-repeat\">\n";
            strHTML += "        <div class=\"ptihtml_loader\"></div>\n";
            strHTML += "        <div class=\"ptihtml_rightShadow\"></div>\n";
            strHTML += "    </div>\n";
            strHTML += "\n";
            strHTML += "    <div class=\"ptihtml_LeftPage\" style=\"position: absolute; width: " + this.onlineMagWidth.toString() + "px; height: " + this.onlineMagHeight.toString() + "px; top: 0px; right: " + this.onlineMagWidth.toString() + "px; background: top right no-repeat\">\n";
            strHTML += "        <div class=\"ptihtml_loader\"></div>\n";
            strHTML += "        <div class=\"ptihtml_leftShadow\"></div>\n";
            strHTML += "        <div class=\"ptihtml_interactivity\"></div>\n";
            strHTML += "    </div>\n";
            strHTML += "    <div class=\"ptihtml_RightPage\" style=\"position: absolute; width: " + this.onlineMagWidth.toString() + "px; height: " + this.onlineMagHeight.toString() + "px; top: 0px; left: " + this.onlineMagWidth.toString() + "px; background: top left no-repeat\">\n";
            strHTML += "        <div class=\"ptihtml_loader\"></div>\n";
            strHTML += "        <div class=\"ptihtml_rightShadow\"></div>\n";
            strHTML += "        <div class=\"ptihtml_interactivity\"></div>\n";
            strHTML += "    </div>\n";
            strHTML += "\n";
            strHTML += "    <div class=\"ptihtml_LeftPageAbove\" style=\"width: " + this.onlineMagWidth.toString() + "px; height: " + this.onlineMagHeight.toString() + "px; background: top right no-repeat\">\n";
            strHTML += "        <div class=\"ptihtml_loader\"></div>\n";
            strHTML += "        <div class=\"ptihtml_rightShadow\"></div>\n";
            strHTML += "    </div>\n";
            strHTML += "    <div class=\"ptihtml_RightPageAbove\" style=\"width: " + this.onlineMagWidth.toString() + "px; height: " + this.onlineMagHeight.toString() + "px; background: top left no-repeat\">\n";
            strHTML += "        <div class=\"ptihtml_loader\"></div>\n";
            strHTML += "        <div class=\"ptihtml_leftShadow\"></div>\n";
            strHTML += "    </div>\n";
            strHTML += "\n";

            
            jQuery("#" + this.elementID).html(strHTML);
            jQuery("#" + this.elementID + " .ptihtml_rightShadow").fixPNG();
            jQuery("#" + this.elementID + " .ptihtml_leftShadow").fixPNG(); 
                       
                    
            this.htmlGotoPage(this.currentPageNo);
        }
        else
        {
            jQuery("#" + this.elementID).html("<p class=\"ptiIssueError\">" + htmlEncode(this.errorMessage) + "</p>");
        }
    }

    this.loaded = true;
}


OnlineMagIssue.prototype.showFlash = function()
{
    if (jQuery("#" + this.containerZoomElementID).get(0).scrollTop && jQuery("#" + this.containerZoomElementID).get(0).scrollTop > 0)
    {
        
        jQuery("#" + this.containerZoomElementID).animate({scrollTop: 0},
            {
            duration:   500,
            easing:     "swing", 
            complete:   createDelegate(this, this.showFlashNow)
            });   
    }
    else
    {
        this.showFlashNow();
    }
}


OnlineMagIssue.prototype.showFlashNow = function()
{
    this.zoom = false;
    jQuery("#" + this.containerZoomElementID).css("overflow", "");
    jQuery("#" + this.containerZoomElementID).css("height", "");
    jQuery("#" + this.containerZoomElementID).removeClass("ptiZoomed");

    // Flash Version 
    var strBase = "http://" + this.host + "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName
    var strSwf = "http://" + this.host + "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName + "/PTI.swf?id=" + this.containerElementID;
    var intWidth = this.onlineMagFrameWidth;
    var intHeight = this.onlineMagFrameHeight;

    var objFlashVars = {};
    var objFlashParams = {wmode: "transparent", allowscriptaccess: "always", base: "http://" + this.host + "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName};
    var objFlashAttributes = {};   
    
    swfobject.embedSWF(strSwf, this.elementID, intWidth, intHeight, "8.0.0", "expressInstall.swf", objFlashVars, objFlashParams, objFlashAttributes);
}

OnlineMagIssue.prototype.showFlashZoom = function()
{
    this.zoom = true;
    jQuery("#" + this.containerZoomElementID).css("overflow", "auto");
    jQuery("#" + this.containerZoomElementID).css("height", this.onlineMagFrameHeight.toString() + "px");
    jQuery("#" + this.containerZoomElementID).addClass("ptiZoomed");
    
    

    // Flash Version 
    var strBase = "http://" + this.host + "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName
    var strSwf = "http://" + this.host + "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName + "/PTIZoom.swf?id=" + this.containerElementID;
    var intWidth = this.onlineMagZoomFrameWidth;
    var intHeight = this.onlineMagZoomFrameHeight;

    var objFlashVars = {};
    var objFlashParams = {wmode: "transparent", allowscriptaccess: "always", base: strBase};
    var objFlashAttributes = {};   

    swfobject.embedSWF(strSwf, this.elementID, intWidth, intHeight, "8.0.0", "expressInstall.swf", objFlashVars, objFlashParams, objFlashAttributes);            
}


OnlineMagIssue.prototype.leftZoom = function()
{
    if (this.zoom)
    {
        this.flashConfig.firstPage = this.currentPageNo;
        this.showFlash();
        
        jQuery("#" + this.containerElementID + " .ptinav_leftzoom").removeClass("ptinav_zoomout").addClass("ptinav_zoomin");
        jQuery("#" + this.containerElementID + " .ptinav_rightzoom").removeClass("ptinav_zoomout").addClass("ptinav_zoomin");            
    }
    else
    {
        if (this.currentPageNo % 2 == 0)
        {
            this.currentPageNo += -1;
        }
        if (this.currentPageNo < 0)
        {
            this.currentPageNo = 0;
        }

        this.flashConfig.firstPage = this.currentPageNo;
        this.showFlashZoom();

        jQuery("#" + this.containerElementID + " .ptinav_leftzoom").removeClass("ptinav_zoomin").addClass("ptinav_zoomout");
        jQuery("#" + this.containerElementID + " .ptinav_rightzoom").removeClass("ptinav_zoomin").addClass("ptinav_zoomout");            
    }
}

OnlineMagIssue.prototype.rightZoom = function()
{    
    if (this.zoom)
    {
        if (this.currentPageNo % 2 == 1)
        {
            this.currentPageNo += 1;                
        }
        if (this.currentPageNo > (this.onlineMagPages.length - 1))
        {
            this.currentPageNo = (this.onlineMagPages.length - 1);
        }
        
        this.flashConfig.firstPage = this.currentPageNo;            
        this.showFlash();        

        jQuery("#" + this.containerElementID + " .ptinav_leftzoom").removeClass("ptinav_zoomout").addClass("ptinav_zoomin");
        jQuery("#" + this.containerElementID + " .ptinav_rightzoom").removeClass("ptinav_zoomout").addClass("ptinav_zoomin");            
    }
    else
    {
        this.flashConfig.firstPage = this.currentPageNo;            
        this.showFlashZoom();

        jQuery("#" + this.containerElementID + " .ptinav_leftzoom").removeClass("ptinav_zoomin").addClass("ptinav_zoomout");
        jQuery("#" + this.containerElementID + " .ptinav_rightzoom").removeClass("ptinav_zoomin").addClass("ptinav_zoomout");            
    }
}




OnlineMagIssue.prototype.htmlPreviousPage = function()
{
    var nextPage = 0;

    if (this.currentPageNo > 0)
    {
        nextPage = (this.currentPageNo - 2);
        
        if (nextPage < 0)
        {
            nextPage = 0;
        }
        
        this.htmlGotoPage(nextPage);
    }
}

OnlineMagIssue.prototype.htmlNextPage = function()
{
    var nextPage = 0;

    if (this.currentPageNo < (this.onlineMagPages.length - 1))
    {
        nextPage = this.currentPageNo + 2;
        
        if (nextPage > (this.onlineMagPages.length - 1))
        {
            nextPage = (this.onlineMagPages.length - 1);
        }
        
        this.htmlGotoPage(nextPage);
    }
}



OnlineMagIssue.prototype.htmlGotoPage = function(pageNo)
{
    var intDuration = 1000;
    var strNextLeftPage = "";
    var strNextRightPage = "";
    var objIssue = this;


    if (this.htmlTurning) return;
                    
    if (pageNo % 2 == 1) pageNo += 1;
    
    if (pageNo > 0)
    {
        strNextLeftPage = this.onlineMagPages.items[pageNo - 1].jpegUrl;
    }
    if (pageNo < (this.onlineMagPages.length - 1))
    {
        strNextRightPage = this.onlineMagPages.items[pageNo].jpegUrl;
    }            


    if (strNextLeftPage.length > 0 && this.currentPageNo > 0)
    {
        jQuery("#" + this.elementID + " .ptihtml_LeftPageBehind .ptihtml_leftShadow").css("display", "block");
    }
    else
    {
        jQuery("#" + this.elementID + " .ptihtml_LeftPageBehind .ptihtml_leftShadow").css("display", "none");            
    }

    if (strNextRightPage.length > 0  && this.currentPageNo < (this.onlineMagPages.length - 1))
    {
        jQuery("#" + this.elementID + " .ptihtml_RightPageBehind .ptihtml_rightShadow").css("display", "block");
    }
    else
    {
        jQuery("#" + this.elementID + " .ptihtml_RightPageBehind .ptihtml_rightShadow").css("display", "none");            
    }
    

    jQuery("#" + this.elementID + " .ptihtml_LeftPage .ptihtml_interactivity").empty();
    jQuery("#" + this.elementID + " .ptihtml_RightPage .ptihtml_interactivity").empty();


    if (pageNo < this.currentPageNo)
    {
        //Prev
        this.htmlTurning = true;
        
        jQuery("#" + this.elementID + " .ptihtml_LeftPageBehind").css("background-image", "url(" + strNextLeftPage + ")");

        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("left", "0px");
        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("width", "0px");
        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("display", "block");
        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("background-image", "url(" + strNextRightPage + ")");


        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("left", parseInt(this.onlineMagWidth * 2).toString() + "px");
        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("width", "0px");
        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("display", "none");

        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").animate({left: this.onlineMagWidth.toString() + "px", width: this.onlineMagWidth.toString() + "px"}, 
            {
            duration:   intDuration, 
            step:       createDelegate(this, this.stepLeftPage), 
            easing:     "swing", 
            complete:   createDelegate(this, this.htmlGoneToPage)
            });
    }
    else if  (pageNo > this.currentPageNo)
    {
        //Next
        this.htmlTurning = true;
        jQuery("#" + this.elementID + " .ptihtml_RightPageBehind").css("background-image", "url(" + strNextRightPage + ")");

        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("left", "0px");
        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("width", "0px");
        jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("display", "none");

        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("left", parseInt(this.onlineMagWidth * 2).toString() + "px");
        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("width", "0px");
        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("display", "block");
        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("background-image", "url(" + strNextLeftPage + ")");

        jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").animate({left: "0px", width: this.onlineMagWidth.toString() + "px"}, 
            {
            duration:   intDuration, 
            step:       createDelegate(this, this.stepRightPage), 
            easing:     "swing", 
            complete:   createDelegate(this, this.htmlGoneToPage)
            });
    }
    else
    {
        this.htmlGoneToPage();
    }
    
    this.currentPageNo = pageNo;    
}


OnlineMagIssue.prototype.stepLeftPage = function(now, fx)
{
    if ((this.onlineMagWidth - now) >= 0)
    {
    jQuery("#" + this.elementID + " .ptihtml_LeftPage").css({width: parseInt(this.onlineMagWidth - now) + "px"});
    }
}

OnlineMagIssue.prototype.stepRightPage = function(now, fx)
{
    if ((this.onlineMagWidth - now) >= 0)
    {
        jQuery("#" + this.elementID + " .ptihtml_RightPage").css({width: parseInt(this.onlineMagWidth - now) + "px"});
    }
}

OnlineMagIssue.prototype.htmlGoneToPage = function()
{
    var strLeftPageUrl = "";
    var intLeftPageID = 0;
    var intLeftPageIndex = -1;
    var strLeftPageTitle = "";

    var strRightPageUrl = "";
    var intRightPageID = 0;
    var intRightPageIndex = -1;
    var strRightPageTitle = "";
    
    if (this.currentPageNo > 0)
    {
        intLeftPageIndex = (this.currentPageNo - 1);
        strLeftPageUrl = this.onlineMagPages.items[intLeftPageIndex].jpegUrl;
        intLeftPageID = this.onlineMagPages.items[intLeftPageIndex].id;
        strLeftPageTitle = this.onlineMagPages.items[intLeftPageIndex].title;

        jQuery("#" + this.elementID + " .ptihtml_LeftPage").css("background-image", "url(" + strLeftPageUrl + ")");
        jQuery("#" + this.elementID + " .ptihtml_LeftPage").css("width", this.onlineMagWidth.toString() + "px");
        jQuery("#" + this.elementID + " .ptihtml_LeftPage").css("display", "block");
    }
    else
    {
        jQuery("#" + this.elementID + " .ptihtml_LeftPage").css("display", "none");
    }
    if (this.currentPageNo < (this.onlineMagPages.length - 1))
    {
        intRightPageIndex = (this.currentPageNo);
        strRightPageUrl = this.onlineMagPages.items[intRightPageIndex].jpegUrl;
        intRightPageID = this.onlineMagPages.items[intRightPageIndex].id;
        strRightPageTitle = this.onlineMagPages.items[intRightPageIndex].title;

        jQuery("#" + this.elementID + " .ptihtml_RightPage").css("background-image", "url(" + strRightPageUrl + ")");
        jQuery("#" + this.elementID + " .ptihtml_RightPage").css("width", this.onlineMagWidth.toString() + "px");
    }            


    jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("left", "0px");
    jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("width", "0px");
    jQuery("#" + this.elementID + " .ptihtml_LeftPageAbove").css("display", "none");

    jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("left", parseInt(this.onlineMagWidth * 2).toString() + "px");
    jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("width", "0px");
    jQuery("#" + this.elementID + " .ptihtml_RightPageAbove").css("display", "none");


    this.htmlTurning = false;

    // Output Links
    var arPageIndexs = new Array();
    if (intLeftPageIndex > -1)
    {
        arPageIndexs.push({pageIndex: intLeftPageIndex, pageClass: "ptihtml_LeftPage", pageTitle: strLeftPageTitle});
    }
    if (intRightPageIndex > -1)
    {
        arPageIndexs.push({pageIndex: intRightPageIndex, pageClass: "ptihtml_RightPage", pageTitle: strRightPageTitle});
    }

    for (var intIndex = 0; intIndex < arPageIndexs.length; ++intIndex)
    {   
        var intPageIndex = arPageIndexs[intIndex].pageIndex;
        var strPageClass= arPageIndexs[intIndex].pageClass;
        var strModuleHTML = "";

        for (var intModuleIndex = 0; intModuleIndex < this.flashPages[intPageIndex].modules.length; ++intModuleIndex)
        {   
            var objModule = this.flashPages[intPageIndex].modules[intModuleIndex];
            var strUrl = objModule.url;
            var strAutoPlay = "false";
            var strAutoPlayTouch = "";
            
            if (objModule.urlH264)
            {
                strUrl = objModule.urlH264;
            }
            
            if (objModule.autoPlay)
            {
                strAutoPlay = "true";
                strAutoPlayTouch = "autoplay";
            }
            
            
            if (objModule.moduleType != moduleTypeVideo)
            {
                strModuleHTML += "<div ";
                strModuleHTML += "class=\"ptihtml_module\" ";
                strModuleHTML += "onclick=\"ptiLinkClicked('" + this.containerElementID + "', " + objModule.moduleType + ", " + objModule.id + ");\" ";
                strModuleHTML += "style=\"position: absolute; display: block; left: " + objModule.posLeft + "px; top: " + objModule.posTop + "px; width: " + objModule.width + "px; height: " + objModule.height + "px;\" ";
                strModuleHTML += "title=\"" + objModule.title + "\" ";
                strModuleHTML += ">";
                strModuleHTML += "</div>";
            }
            else if (objModule.moduleType == moduleTypeVideo && strUrl)
            {
				if (pitIsTouch)
				{
					strModuleHTML += "<video id=\"video" + objModule.id.toString() + "\" style=\"position: absolute; display: block; left: " + objModule.posLeft + "px; top: " + objModule.posTop + "px; width: " + objModule.width + "px; height: " + objModule.height + "px;\" controls=\"controls\" autoplay=\"" + strAutoPlayTouch + "\" onplay=\"ptiVideoPlayed('" + this.containerElementID + "', " + objModule.id.toString() + "); \" height=\"" + objModule.height + "\" width=\"" + objModule.width + "\">";
					strModuleHTML += "	<source src=\"" + strUrl + "\" />";
					strModuleHTML += "</video>";					
				}
				else
				{
					strModuleHTML += "<div ";
					strModuleHTML += "class=\"ptihtml_video\" ";
					strModuleHTML += "style=\"position: absolute; display: block; left: " + objModule.posLeft + "px; top: " + objModule.posTop + "px; width: " + objModule.width + "px; height: " + objModule.height + "px;\" ";
					strModuleHTML += ">";

					strModuleHTML += "<a class=\"media {width: " + objModule.width + ", height: " + objModule.height + ", autoplay: " + strAutoPlay + "}\" href=\"" + strUrl + "\"></a>";

					strModuleHTML += "</div>";
				}
            }            
        }
        
        jQuery("#" + this.elementID + " ." + strPageClass + " .ptihtml_interactivity").html(strModuleHTML);
        
        jQuery("#" + this.elementID + " ." + strPageClass + " .ptihtml_interactivity .ptihtml_module").animate({opacity: "0.3"},
            {
            duration: 250,
            complete: function(){jQuery(this).animate({opacity: "0"}, {duration: 250, complete: function(){jQuery(this).css("opacity", "");}});}
            });
        
        if (!pitIsTouch)
        {
            jQuery("#" + this.elementID + " .ptihtml_video .media").media();        
        }        
    }


    ptiPagesViewed(this.containerElementID, intLeftPageID, intRightPageID);
    
    // cache pages
    if (this.flashConfig.cachePages)
    {
        var intCounter = 0;
        for (intCounter=0;intCounter<=this.flashConfig.cacheSize;intCounter++)
        {
            if ((this.currentPageNo - intCounter) > -1 && (this.currentPageNo + intCounter) < (this.onlineMagPages.length))
            {
                var img1 = new Image();
                img1.src = this.onlineMagPages.items[this.currentPageNo - intCounter].jpegUrl;

                var img2 = new Image();
                img2.src = this.onlineMagPages.items[this.currentPageNo + intCounter].jpegUrl;
            }
        }        
    }        

}






OnlineMagIssue.prototype.pagesViewed = function(pintLeftPageID, pintRightPageID) {
    var strPages = "";
    var intNumber;
    var strLeftHtmlFileName = ""
    var strRightHtmlFileName = ""

    if (pintLeftPageID < 1) {
        pintLeftPageID = 0
    }
    else {
        intNumber = getByID(this.onlineMagPages.items, pintLeftPageID).number;
        strLeftHtmlFileName = "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName + "/page" + (intNumber + 1).toString() + ".htm";
        strPages += (intNumber + 1) + "-";
    }

    if (pintRightPageID < 1) {
        pintRightPageID = 0
    }
    else {
        intNumber = getByID(this.onlineMagPages.items, pintRightPageID).number;
        if (intNumber == 0)
        {
            strRightHtmlFileName = "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName;
        }
        else
        {
            strRightHtmlFileName = "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName + "/page" + (intNumber + 1).toString() + ".htm";
        }
        strPages += (intNumber + 1) + "-";
    }

   
    strPages = strPages.substring(0, (strPages.length - 1)) + " of " + this.onlineMagPages.length;

    jQuery("#" + this.containerElementID + " .ptinav_page").html(strPages);

    // log with PTI
    var strRowDelimitedPageIDs = pintLeftPageID.toString() + "," + pintRightPageID.toString();
    var strUrl = "http://" + this.host + ptiWS + "?M=3&VID=" + this.onlineMagIssueVisitID.toString() + "&PNS=" + strRowDelimitedPageIDs + "&callback=?";

    jQuery.getJSON(strUrl,
                    function(pobjReturn) {
                        if (pobjReturn.returnStatus != 1) {
                            ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                            return;
                        }
                    });

    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        if (strLeftHtmlFileName.length > 0 )
        {
          _gaq.push(['_trackPageview', strLeftHtmlFileName]);
        }

        if (strRightHtmlFileName.length > 0)
        {
          _gaq.push(['_trackPageview', strRightHtmlFileName]);
        }
    }

    if (pintRightPageID > 0 && getByID(this.onlineMagPages.items, pintRightPageID).number == 0) {
        if (this.firstPageAlreadyLoaded == false && this.flashConfig.jumpToPageOnFirstPageLoad > 0) {
            window.setTimeout("ptiGotoPageIfOnCover('" + this.containerElementID + "', " + this.flashConfig.jumpToPageOnFirstPageLoad + ")", this.flashConfig.jumpToPageOnFirstPageLoadDelay);
        }

        this.firstPageAlreadyLoaded = true;
    }
}



OnlineMagIssue.prototype.showContents = function()
{
    var strHTML = "";
    var objOnlineMagIssue = this;
    
    strHTML += "<div class=\"pticontent\">";

    strHTML += "<a class=\"pti_thumb pti_thumbright\">"
    strHTML += "<img class=\"pti_thumbpageblank\" src=\"" + "http://" + this.host + "/Themes/Transparent.gif\" width=\"" + this.thumbnailWidth.toString() + "\" height=\"" + this.thumbnailHeight.toString() + "\" />"
    strHTML += "</a>";

    for (var intPageIndex = 0; intPageIndex < this.onlineMagPages.length; ++intPageIndex)
    {   
        var objPage = this.onlineMagPages.items[intPageIndex];

        if (intPageIndex % 2)
        {
            strHTML += "<a class=\"pti_thumb pti_thumbleft\" ";
        }
        else
        {
            strHTML += "<a class=\"pti_thumb pti_thumbright\" ";
        }
                
        strHTML += "title=\"" + htmlEncode(objPage.title) + "\" href=\"javascript: ptiCloseContentsGotoPage('" + this.containerElementID + "', " + objPage.number.toString() + ");\">";
        strHTML += "<img class=\"pti_thumbpage\" style=\"-moz-opacity:0;\" src=\"" + objPage.thumbnailUrl + "\" alt=\"" + htmlEncode(objPage.title) + "\" width=\"" + this.thumbnailWidth.toString() + "\" height=\"" + this.thumbnailHeight.toString() + "\" />"
        strHTML += "</a>";
    }

    strHTML += "</div>";
    
    var objItems = new Array();
    objItems.push(jQuery.fn.ptibox.generateItemObject(strHTML, "", "", "Contents", null, (6 * this.thumbnailWidth) + 140, (3 * this.thumbnailHeight) + 100));    
    jQuery().ptibox({itemArray              : objItems, 
                     showInfoButton         : false, 
                     showPlayButton         : false,
                     callbackOnShow         : function() {
                     
                        jQuery(".pticontent .pti_thumb .pti_thumbpage").each(function(index) {
                            if (jQuery(".pticontent .pti_thumb .pti_thumbpage").get(index).complete)
                            {
                                jQuery(this).animate({opacity: 1.0}, 1000);
                            }
                            else
                            {
                                jQuery(this).bind('load', function() {
                                    jQuery(this).animate({opacity: 1.0}, 1000);
                                });
                            }
                        
                        });
                        
                     }
                     
                    });
    
}

OnlineMagIssue.prototype.closeContentsGotoPage = function(pageNo)
{
    
    var strElementID = this.elementID;
    var objOnlineMagIssue = this;
    
    jQuery(".pticontent .pti_thumb .pti_thumbpage").unbind();

    if (this.mode == modeFlash)
    {
        jQuery.fn.ptibox.close( function(){
                                swfobject.getObjectById(strElementID).ptiGotoPage(pageNo);
                                });
    }
    else
    {
        jQuery.fn.ptibox.close( function(){
                                objOnlineMagIssue.htmlGotoPage(pageNo);
                                });
    }        

}


OnlineMagIssue.prototype.showIssues = function()
{
    var strHTML = "";
    
    strHTML += "<div class=\"pticontent\">";
    strHTML += "<table class=\"ptiissuelist\">";

    for (var intIssueListIndex = 0; intIssueListIndex < this.onlineMagIssueLists.length; ++intIssueListIndex)
    {   
        var objIssueList = this.onlineMagIssueLists.items[intIssueListIndex];
        var strEditor = "&nbsp;";
        
        if (objIssueList.onlineMagIssueEditor.length > 0)
        {
            strEditor = htmlEncode(objIssueList.onlineMagIssueEditor);
        }

        strHTML += "    <tr>";
        strHTML += "        <td class=\"ptiissuelistcovercell\"><a href=\"" + objIssueList.onlineMagIssueUrl + "\" title=\"View Issue\" class=\"ptiissuelistanchor\"><img src=\"" + objIssueList.onlineMagIssueFirstPageUrl + "\" class=\"ptiissuelistimage\" /></a></td>";
        strHTML += "        <td class=\"ptiissuelistdatacell\">";
        strHTML += "            <div class=\"ptiissuelistcontainer\">";
        strHTML += "                <div class=\"ptiissuelistlabel\">Issue Name/No.</div>";
        strHTML += "                <div class=\"ptiissuelistdata\">" + htmlEncode(objIssueList.onlineMagIssueTitle) + "</div>";
        strHTML += "                <div class=\"ptiissuelistlabel\">Issue Date</div>";
        strHTML += "                <div class=\"ptiissuelistdata\">" + htmlEncode(objIssueList.onlineMagIssueIssueDate) + "</div>";
        strHTML += "                <div class=\"ptiissuelistlabel\">Editor</div>";
        strHTML += "                <div class=\"ptiissuelistdata\">" + strEditor + "</div>";
        strHTML += "            </div>";
        strHTML += "        </td>";
        strHTML += "    </tr>";
    }

    strHTML += "</table>";
    strHTML += "</div>";
    
    var objItems = new Array();
    objItems.push(jQuery.fn.ptibox.generateItemObject(strHTML, "", "", "Issues", null, (this.thumbnailWidth) + 300, (2 * this.thumbnailHeight) + 100));    
    jQuery().ptibox({itemArray              : objItems, 
                     showInfoButton         : false, 
                     showPlayButton         : false                     
                    });    
}








OnlineMagIssueLists = function(pobjOnlineMagIssue, pstrOnlineMagIssueLists)
{
    this.onlineMagIssue = pobjOnlineMagIssue;
    this.items = new Array();
    this.length = 0;
        
    if (pstrOnlineMagIssueLists.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagIssueLists.split(rowSeperator);
        
    for (var intIssueListIndex = 0; intIssueListIndex < arData.length; ++intIssueListIndex)
    {   
        objOnlineMagIssueList = new OnlineMagIssueList(this, arData[intIssueListIndex]);
        this.items[this.items.length] = objOnlineMagIssueList;
    }
    
    this.length = this.items.length;
}





OnlineMagIssueList = function(pobjOnlineMagIssueLists, pstrOnlineMagIssueList)
{
    this.onlineMagIssueLists = pobjOnlineMagIssueLists;

    if (pstrOnlineMagIssueList.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagIssueList.split(columnSeperator);
    
    this.onlineMagIssueID = parseInt(arData[0]);
    this.onlineMagIssueTitle = arData[1];    
    this.onlineMagIssueUrl = arData[2];
    this.onlineMagIssueFirstPageUrl = arData[3];
    this.onlineMagIssueIssueDate = arData[4];
    this.onlineMagIssueEditor = arData[5];    
    this.thumbnailSize = parseInt(arData[6]);
    
    // workout the thumb width and height
    if (this.onlineMagHeight > this.onlineMagWidth)
    {
        //Portrait
        this.thumbnailHeight = this.thumbnailSize;
        this.thumbnailWidth = parseInt(this.onlineMagIssueLists.onlineMagIssue.onlineMagWidth / (this.onlineMagIssueLists.onlineMagIssue.onlineMagHeight / this.thumbnailSize));
    }
    else
    {
        //Landscape
        this.thumbnailWidth = this.thumbnailSize;
        this.thumbnailHeight = parseInt(this.onlineMagIssueLists.onlineMagIssue.onlineMagHeight / (this.onlineMagIssueLists.onlineMagIssue.onlineMagWidth / this.thumbnailSize));            
    }            
}




























OnlineMagPages = function(pobjOnlineMagIssue, pstrOnlineMagPages, pstrOnlineMagPageLinks, pstrOnlineMagPagePollAnswers, pstrOnlineMagPageArticles, pstrOnlineMagPageVideos, pstrOnlineMagPageJumps, pstrOnlineMagPageComps, pstrOnlineMagPageCompAnswers, pstrOnlineMagPageGalleries, pstrOnlineMagPageGalleryPhotos, pstrOnlineMagPageForwards)
{
    this.onlineMagIssue = pobjOnlineMagIssue;
    this.items = new Array();
    this.length = 0;
        
    if (pstrOnlineMagPages.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPages.split(rowSeperator);
        
    for (var intPageIndex = 0; intPageIndex < arData.length; ++intPageIndex)
    {   
        objOnlineMagPage = new OnlineMagPage(this, intPageIndex, arData[intPageIndex], pstrOnlineMagPageLinks, pstrOnlineMagPagePollAnswers, pstrOnlineMagPageArticles, pstrOnlineMagPageVideos, pstrOnlineMagPageJumps, pstrOnlineMagPageComps, pstrOnlineMagPageCompAnswers, pstrOnlineMagPageGalleries, pstrOnlineMagPageGalleryPhotos, pstrOnlineMagPageForwards);
        this.items[this.items.length] = objOnlineMagPage;
    }

    this.length = this.items.length;
}





OnlineMagPage = function(pobjOnlineMagPages, pintPageNumber, pstrOnlineMagPage, pstrOnlineMagPageLinks, pstrOnlineMagPagePollAnswers, pstrOnlineMagPageArticles, pstrOnlineMagPageVideos, pstrOnlineMagPageJumps, pstrOnlineMagPageComps, pstrOnlineMagPageCompAnswers, pstrOnlineMagPageGalleries, pstrOnlineMagPageGalleryPhotos, pstrOnlineMagPageForwards)
{
    this.onlineMagPages = pobjOnlineMagPages;

    if (pstrOnlineMagPage.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPage.split(columnSeperator);
    
    this.id = arData[0];
    this.title = arData[1];
    this.pageImage = arData[2];
    this.url = arData[3];
    this.thumbnailUrl = arData[4];
    this.jpegUrl = arData[5];
    this.number = pintPageNumber;

    
    this.OnlineMagPageLinks = new OnlineMagPageLinks(this, pstrOnlineMagPageLinks);
    this.OnlineMagPagePollAnswers = new OnlineMagPagePollAnswers(this, pstrOnlineMagPagePollAnswers);    
    this.OnlineMagPageArticles = new OnlineMagPageArticles(this, pstrOnlineMagPageArticles);
    this.OnlineMagPageVideos = new OnlineMagPageVideos(this, pstrOnlineMagPageVideos);
    this.OnlineMagPageJumps = new OnlineMagPageJumps(this, pstrOnlineMagPageJumps);
    this.OnlineMagPageComps = new OnlineMagPageComps(this, pstrOnlineMagPageComps, pstrOnlineMagPageCompAnswers);
    this.OnlineMagPageGalleries = new OnlineMagPageGalleries(this, pstrOnlineMagPageGalleries, pstrOnlineMagPageGalleryPhotos);
    this.OnlineMagPageForwards = new OnlineMagPageForwards(this, pstrOnlineMagPageForwards);
    
        
    // Populate Flash Object
    var objFlashPage = {id: this.id, pageImage: this.pageImage, url: this.url, modules: new Array()};

    populateFlashPageLink(moduleTypeLink, this.OnlineMagPageLinks, objFlashPage.modules);
    populateFlashPageLink(moduleTypePollAnswer, this.OnlineMagPagePollAnswers, objFlashPage.modules);
    populateFlashPageLink(moduleTypeArticle, this.OnlineMagPageArticles, objFlashPage.modules);
    populateFlashPageLink(moduleTypeVideo, this.OnlineMagPageVideos, objFlashPage.modules);
    populateFlashPageLink(moduleTypeJump, this.OnlineMagPageJumps, objFlashPage.modules);
    populateFlashPageLink(moduleTypeComp, this.OnlineMagPageComps, objFlashPage.modules);
    populateFlashPageLink(moduleTypeGallery, this.OnlineMagPageGalleries, objFlashPage.modules);
    populateFlashPageLink(moduleTypeForward, this.OnlineMagPageForwards, objFlashPage.modules);

    this.onlineMagPages.onlineMagIssue.flashPages[this.onlineMagPages.onlineMagIssue.flashPages.length] = objFlashPage;
}

function populateFlashPageLink(pintModuleType, pobjs, pobjAddToArray)
{
    var strTitle = "";
    var strUrl = "";
    var strUrlH264 = "";
    var blnAutoPlay = false;

    for (var intInstanceIndex = 0; intInstanceIndex < pobjs.length; ++intInstanceIndex)
    {
        var obj = pobjs.items[intInstanceIndex];
        
        strTitle = "";
        strUrl = "";
        urlH264 = "";
        blnAutoPlay = false;

        if (obj.title != null)
        {
            strTitle = obj.title;
        }
        else if (obj.anwser != null)        
        {
            strTitle = obj.anwser;
        }

        if (obj.url != null)
        {
            strUrl = obj.url;
        }
        
        if (obj.urlH264 != null)
        {
            strUrlH264 = obj.urlH264;
        }

        if (obj.autoPlay != null)
        {
            blnAutoPlay = obj.autoPlay;
        }
    
        var objLink = {moduleType: pintModuleType,
                       id: obj.id, 
                       onlineMagPageID: obj.onlineMagPageID, 
                       title: strTitle,
                       width: obj.width, 
                       height: obj.height, 
                       posLeft: obj.posLeft, 
                       posTop: obj.posTop, 
                       url: strUrl, 
                       urlH264: strUrlH264, 
                       autoPlay: blnAutoPlay};
                
        pobjAddToArray[pobjAddToArray.length] = objLink;    
    }
}

OnlineMagPage.prototype.getPageVideoHTML = function(parAutoPlayPageVideos)
{
    var strReturn = "";

    if (this.OnlineMagPageVideos.length > 0)
    {
        for (var intPageVideoIndex = 0; intPageVideoIndex < this.OnlineMagPageVideos.length; ++intPageVideoIndex)
        {
            var objPageVideo = this.OnlineMagPageVideos.items[intPageVideoIndex];
            var strAutoStart = "";
            
            if (objPageVideo.autoPlay)
            {
                strAutoStart = "true";
                parAutoPlayPageVideos[parAutoPlayPageVideos.length] = objPageVideo;
            }
            else
            {
                strAutoStart = "false";
            }
            
            strReturn += "<div style=\"position:absolute; top: " + objPageVideo.posTop.toString() + "px; left: " + objPageVideo.posLeft.toString() + "px; width: " + objPageVideo.width.toString() + "px; height: " + objPageVideo.height.toString() + "px;\"";
            strReturn += "<object id='mediaPlayer' width=\"" + objPageVideo.width.toString() + "\" height=\"" + objPageVideo.height.toString() + "\"";
            strReturn += "classid='CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95'";
            strReturn += "codebase='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'";
            strReturn += "standby='Loading Microsoft Windows Media Player components...' type='application/x-oleobject'>";
            strReturn += "<param name='fileName' value=\"" + objPageVideo.UrlH264 + "\">";
            strReturn += "<param name='animationatStart' value='true'>";
            strReturn += "<param name='transparentatStart' value='true'>";
            strReturn += "<param name='autoStart' value='" + strAutoStart + "'>";
            strReturn += "<param name='showControls' value=\"true\">";
            strReturn += "<param name='loop' value=\"true\">";
            strReturn += "<embed type='application/x-mplayer2'";
            strReturn += "pluginspage='http://microsoft.com/windows/mediaplayer/en/download/'";
            strReturn += "id='mediaPlayer' name='mediaPlayer' displaysize='4' autosize='-1'";
            strReturn += "bgcolor='darkblue' showcontrols=\"true\" showtracker='-1'";
            strReturn += "showdisplay='0' showstatusbar='-1' videoborder3d='-1' width=\"" + objPageVideo.width.toString() + "\" height=\"" + objPageVideo.height.toString() + "\"";
            strReturn += "src=\"" + objPageVideo.UrlH264 + "\" autostart=\"" + strAutoStart + "\" designtimesp='5311' loop=\"true\">";
            strReturn += "</embed>";
            strReturn += "</object>";
            strReturn += "</div>";
        }
    }
    
    return strReturn;
}



OnlineMagPageLinks = function(pobjOnlineMagPage, pstrOnlineMagPageLinks)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageLinks.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageLinks.split(rowSeperator);
    
    
    for (var intLinkIndex = 0; intLinkIndex < arData.length; ++intLinkIndex)
    {   
        // only add links to thsi page
        if (arData[intLinkIndex].split(columnSeperator)[2] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPageLink(this, arData[intLinkIndex]);
    
            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageLinks.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageLink = function(pobjOnlineMagPageLinks, pstrOnlineMagPageLink)
{
    this.onlineMagPageLinks = pobjOnlineMagPageLinks;
        
    if (pstrOnlineMagPageLink.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageLink.split(columnSeperator);

    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPageID = arData[2];
    this.title = arData[3];
    this.url = arData[4];
    this.target = arData[5];
    this.width = arData[6];
    this.height = arData[7];
    this.posLeft = arData[8];
    this.posTop = arData[9];
}

OnlineMagPageLink.prototype.clicked = function()
{
    if (this.url.indexOf("mailto:") == 0)
    {
        // Open in current location
        window.location = this.url;
    }
    else
    {
        // open link in windows    
        var objWindow = window.open(this.url, this.target, "");
        if (!objWindow)
        {
            showPopUpBlocked(this.url, this.target);        
        }    
    }       


    this.linkVisit();
}

OnlineMagPageLink.prototype.linkVisit = function()
{
    var strUrl = "http://" + this.onlineMagPageLinks.onlineMagPage.onlineMagPages.onlineMagIssue.host + ptiWS + "?M=4&VID=" + this.onlineMagPageLinks.onlineMagPage.onlineMagPages.onlineMagIssue.onlineMagIssueVisitID.toString() + "&LID=" + this.id + "&callback=?";
    
    jQuery.getJSON( strUrl, 
                    function(pobjReturn)
                    {
                        if (pobjReturn.returnStatus != 1)
                        {
                            ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                            return;
                        }
                    });
                                        
    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Clicked", this.title]);
    }
}








OnlineMagPagePollAnswers = function(pobjOnlineMagPage, pstrOnlineMagPagePollAnswers)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;


    if (pstrOnlineMagPagePollAnswers.length == 0)
    {
        return;
    }

    var arData = pstrOnlineMagPagePollAnswers.split(rowSeperator);
    
    
    for (var intLinkIndex = 0; intLinkIndex < arData.length; ++intLinkIndex)
    {   
        // only add links to thsi page
        if (arData[intLinkIndex].split(columnSeperator)[9] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPagePollAnswer(this, arData[intLinkIndex]);

            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPagePollAnswers.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}



OnlineMagPagePollAnswer = function(pobjOnlineMagPagePollAnswers, pstrOnlineMagPagePollAnswer)
{
    this.onlineMagPagePollAnswers = pobjOnlineMagPagePollAnswers;
        
    if (pstrOnlineMagPagePollAnswer.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPagePollAnswer.split(columnSeperator);
    
    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPagePollID = arData[2];
    this.pollTitle = arData[3];
    this.anwser = arData[4];
    this.width = arData[5];
    this.height = arData[6];
    this.posLeft = arData[7];
    this.posTop = arData[8];
    this.onlineMagPageID = arData[9];
    this.popupWidth = parseInt(arData[10]);
    this.popupHeight = parseInt(arData[11]);
}

OnlineMagPagePollAnswer.prototype.clicked = function()
{    
    var strUrl = "http://" + this.onlineMagPagePollAnswers.onlineMagPage.onlineMagPages.onlineMagIssue.host + ptiWS + "?M=5&VID=" + this.onlineMagPagePollAnswers.onlineMagPage.onlineMagPages.onlineMagIssue.onlineMagIssueVisitID.toString() + "&AID=" + this.id + "&callback=?";
    var intPopupWidth = this.popupWidth;
    var intPopupHeight = this.popupHeight;
    
    jQuery.fn.ptibox.showLoading();

    jQuery.getJSON( strUrl, 
                    function(pobjReturn)
                    {
                        if (pobjReturn.returnStatus != 1)
                        {
                            ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                            return;
                        }
                                                
                        //Output the poll results
                        var arTables = pobjReturn.returnData.split(tableSeperator);
                        var strVoted = arTables[0];
                        var strTitle = arTables[1];
                        var arRows = arTables[2].split(rowSeperator);
                        var intHighestPercentage = 1;
                        var strHTML = "";

                        for (var intPollAnswerIndex = 0; intPollAnswerIndex < arRows.length; ++intPollAnswerIndex)
                        {
                            if (parseInt(arRows[intPollAnswerIndex].split(columnSeperator)[3]) > intHighestPercentage) 
                            {
                                intHighestPercentage = parseInt(arRows[intPollAnswerIndex].split(columnSeperator)[3]);
                            }
                        }

                        strHTML += "<div class=\"ptipoll\">";  
                        strHTML += "<div class=\"pti_title\">" + htmlEncode(strTitle) + "</div>"

                        for (var intPollAnswerIndex = 0; intPollAnswerIndex < arRows.length; ++intPollAnswerIndex) {
                            var arCols = arRows[intPollAnswerIndex].split(columnSeperator);
                            var intID = parseInt(arCols[0]);
                            var strAnswer = arCols[1];
                            var intPercentage = parseInt(arCols[3]);
                            var intPercentageWidth = parseInt(intPercentage * (380 / intHighestPercentage)) + 1;


                            strHTML += "<div class=\"pti_answer\">" + htmlEncode(strAnswer) + " <span>(" + intPercentage.toString() + "%)</span></div>"
                            //strHTML += "<div class=\"pti_bar\" style=\"width: " + intPercentageWidth.toString() + "px;\">&nbsp;</div>"
                            strHTML += "<div id=\"pti_bar" + intID.toString() + "\" class=\"pti_bar\" style=\"width: 0%;\">&nbsp;</div>"
                        }
                        strHTML += "</div>";

                        jQuery.fn.ptibox.hideLoading();
                        this.ptiboxItems = new Array();
                        this.ptiboxItems.push(jQuery.fn.ptibox.generateItemObject(strHTML, "", "", strTitle, null, intPopupWidth, intPopupHeight));    
                        jQuery().ptibox({itemArray: this.ptiboxItems, 
                                         showInfoButton         : false, 
                                         showPlayButton         : false,
                                         callbackOnShow         : function() {
                                         
                                                                    for (var intPollAnswerIndex = 0; intPollAnswerIndex < arRows.length; ++intPollAnswerIndex) {
                                                                        var arCols = arRows[intPollAnswerIndex].split(columnSeperator);
                                                                        var intID = parseInt(arCols[0]);
                                                                        var intPercentage = parseInt(arCols[3]);
                                                                        var strPlusPercentage = "+=" + intPercentage.toString() + "%";
                                                                        
                                                                        jQuery("#pti_bar" + intID.toString()).animate({width: strPlusPercentage}, "slow");
                                                                    }
                                                                }
                                        });
                        
                        
                    });
                    
    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Clicked", this.pollTitle + " - " + this.answer]);
    }                    
}











OnlineMagPageArticles = function(pobjOnlineMagPage, pstrOnlineMagPageArticles)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageArticles.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageArticles.split(rowSeperator);
    
    
    for (var intArticleIndex = 0; intArticleIndex < arData.length; ++intArticleIndex)
    {   
        // only add Articles to thsi page
        if (arData[intArticleIndex].split(columnSeperator)[2] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPageArticle(this, arData[intArticleIndex]);

            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageArticles.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageArticle = function(pobjOnlineMagPageArticles, pstrOnlineMagPageArticle)
{
    this.onlineMagPageArticles = pobjOnlineMagPageArticles;
        
    if (pstrOnlineMagPageArticle.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageArticle.split(columnSeperator);

    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPageID = arData[2];
    this.title = arData[3];
    this.width = arData[4];
    this.height = arData[5];
    this.posLeft = arData[6];
    this.posTop = arData[7];
    this.popupWidth = parseInt(arData[8]);
    this.popupHeight = parseInt(arData[9]);
    
    var strUrl = "http://" + this.onlineMagPageArticles.onlineMagPage.onlineMagPages.onlineMagIssue.host + ptiWS + "?M=6&VID=" + this.onlineMagPageArticles.onlineMagPage.onlineMagPages.onlineMagIssue.onlineMagIssueVisitID.toString() + "&AID=" + this.id + "&callback=?";    
    this.ptiboxItems = new Array();
    this.ptiboxItems.push(jQuery.fn.ptibox.generateItemObject("", "", strUrl, this.title, null, this.popupWidth, this.popupHeight));    
}

OnlineMagPageArticle.prototype.clicked = function()
{
    jQuery().ptibox({itemArray: this.ptiboxItems, 
                     showInfoButton         : false, 
                     showPlayButton         : false
                    });

    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Clicked", this.title]);
    }                          
}







OnlineMagPageVideos = function(pobjOnlineMagPage, pstrOnlineMagPageVideos)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageVideos.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageVideos.split(rowSeperator);
    
    
    for (var intVideoIndex = 0; intVideoIndex < arData.length; ++intVideoIndex)
    {   
        // only add Videos to thsi page
        if (arData[intVideoIndex].split(columnSeperator)[2] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPageVideo(this, arData[intVideoIndex]);

            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageVideos.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageVideo = function(pobjOnlineMagPageVideos, pstrOnlineMagPageVideo)
{
    this.onlineMagPageVideos = pobjOnlineMagPageVideos;
        
    if (pstrOnlineMagPageVideo.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageVideo.split(columnSeperator);

    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPageID = arData[2];
    this.title = arData[3];
    this.url = arData[4];
    this.width = arData[5];
    this.height = arData[6];
    this.posLeft = arData[7];
    this.posTop = arData[8];
    
    if (arData[9] == "true")
    {
        this.autoPlay =  true;
    }
    else
    {
        this.autoPlay =  false;
    }

    this.urlH264 = arData[10];
}


OnlineMagPageVideo.prototype.VideoPlayed = function()
{
    var strUrl = "http://" + this.onlineMagPageVideos.onlineMagPage.onlineMagPages.onlineMagIssue.host + ptiWS + "?M=7&VID=" + this.onlineMagPageVideos.onlineMagPage.onlineMagPages.onlineMagIssue.onlineMagIssueVisitID.toString() + "&LID=" + this.id + "&callback=?";
    
    jQuery.getJSON( strUrl, 
                    function(pobjReturn)
                    {
                        if (pobjReturn.returnStatus != 1)
                        {
                            ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                            return;
                        }
                    });


    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Played", this.title]);
    }                          
}






OnlineMagPageJumps = function(pobjOnlineMagPage, pstrOnlineMagPageJumps)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageJumps.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageJumps.split(rowSeperator);
    
    
    for (var intJumpIndex = 0; intJumpIndex < arData.length; ++intJumpIndex)
    {   
        // only add Jumps to thsi page
        if (arData[intJumpIndex].split(columnSeperator)[2] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPageJump(this, arData[intJumpIndex]);

            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageJumps.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageJump = function(pobjOnlineMagPageJumps, pstrOnlineMagPageJump)
{
    this.onlineMagPageJumps = pobjOnlineMagPageJumps;
        
    if (pstrOnlineMagPageJump.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageJump.split(columnSeperator);

    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPageID = arData[2];
    this.title = arData[3];
    this.pageNo = parseInt(arData[4]);
    this.width = arData[5];
    this.height = arData[6];
    this.posLeft = arData[7];
    this.posTop = arData[8];
}

OnlineMagPageJump.prototype.clicked = function()
{
    ptiGotoPage(this.onlineMagPageJumps.onlineMagPage.onlineMagPages.onlineMagIssue.containerElementID, this.pageNo);
    
    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Clicked", this.title]);
    }                              
}





OnlineMagPageComps = function(pobjOnlineMagPage, pstrOnlineMagPageComps, pstrOnlineMagPageCompAnswers)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageComps.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageComps.split(rowSeperator);
    
    
    for (var intCompIndex = 0; intCompIndex < arData.length; ++intCompIndex)
    {   
        // only add Comps to thsi page
        if (arData[intCompIndex].split(columnSeperator)[2] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPageComp(this, arData[intCompIndex], pstrOnlineMagPageCompAnswers);

            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageComps.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageComp = function(pobjOnlineMagPageComps, pstrOnlineMagPageComp, pstrOnlineMagPageCompAnswers)
{
    this.onlineMagPageComps = pobjOnlineMagPageComps;
        
    if (pstrOnlineMagPageComp.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageComp.split(columnSeperator);

    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPageID = arData[2];
    this.title = arData[3];
    this.captureEmail = parseInt(arData[4]);
    this.width = arData[5];
    this.height = arData[6];
    this.posLeft = arData[7];
    this.posTop = arData[8];
    this.popupWidth = parseInt(arData[9]);
    this.popupHeight = parseInt(arData[10]);

    this.onlineMagPageCompAnswers = new OnlineMagPageCompAnswers(this, pstrOnlineMagPageCompAnswers);    
}

OnlineMagPageComp.prototype.clicked = function()
{
    var strHTML = "";
    var strButton = "";
    var intLastQuestionID = 0
    var intQuestionCount = 0
    var objAnswer;
    
    strHTML += "<div class=\"pticomp\">";  
    strHTML += "<div class=\"pti_title\">" + htmlEncode(this.title) + "</div>"
    
    for (var intAnswerIndex = 0; intAnswerIndex < this.onlineMagPageCompAnswers.length; ++intAnswerIndex)
    {   
        objAnswer = this.onlineMagPageCompAnswers.items[intAnswerIndex];
        
        if (objAnswer.onlineMagPageCompQuestionID != intLastQuestionID)
        {
            intQuestionCount += 1;
            strHTML += "<div class=\"pti_question\">" + htmlEncode(intQuestionCount.toString() +  ". " + objAnswer.question) + "</div>";
        }
        
        strHTML += "<div class=\"pti_answer\"><label for=\"pti_rdoAnswer" + objAnswer.id.toString() + "\"><input id=\"pti_rdoAnswer" + objAnswer.id.toString() + "\" name=\"Question" + objAnswer.onlineMagPageCompQuestionID.toString() + "\" type=\"radio\" value=\"" + objAnswer.id.toString() + "\" />" + htmlEncode(objAnswer.answer) + "</label></div>";
        
        intLastQuestionID = objAnswer.onlineMagPageCompQuestionID
    }
    
    if (this.captureEmail == 2 || this.captureEmail == 3) //Email optional or required
    {
        intQuestionCount += 1;
        strHTML += "<div class=\"pti_question\">" + htmlEncode(intQuestionCount.toString()) +  ". Please enter your email address</div>";
        strHTML += "<div class=\"pti_answer\"><input id=\"pti_txtCompEmail\" name=\"pti_txtCompEmail\" class=\"CompEmail\" type=\"text\" value=\"\" /></div>";
    }
            
    strHTML += "</div>";
    
    strButton += "<a id=\"pti_submit\"><span>Submit</span></a>";
    
    this.ptiboxItems = new Array();
    this.ptiboxItems.push(jQuery.fn.ptibox.generateItemObject(strHTML, strButton, "", this.title, null, this.popupWidth, this.popupHeight));    
    jQuery().ptibox({itemArray              : this.ptiboxItems, 
                     showInfoButton         : false, 
                     showPlayButton         : false
                    });
    
    jQuery("#pti_submit").unbind().bind("click", createDelegate(this, this.submit));
    
    
    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Clicked", this.title]);
    }                                  
}


OnlineMagPageComp.prototype.submit = function()
{
    //Get the answers for each question and ensure that all questions have been answered   
    var strHTML = "";
    var blnAllQuestionsAnswered = true;
    var intQuestionCount = 0;
    var objAnswer;
    var strSelectedEmail = "";
    var strSelectedIDs = "";


    if (this.onlineMagPageCompAnswers.length > 0)
    {
        var intLastQuestionID = this.onlineMagPageCompAnswers.items[0].onlineMagPageCompQuestionID;
        var blnLastQuestionAnswered = false;
        
        for (var intAnswerIndex = 0; intAnswerIndex < this.onlineMagPageCompAnswers.length; ++intAnswerIndex)
        {   
            objAnswer = this.onlineMagPageCompAnswers.items[intAnswerIndex];
            
            
            if (objAnswer.onlineMagPageCompQuestionID != intLastQuestionID)
            {
                if (blnLastQuestionAnswered == false)
                {
                    blnAllQuestionsAnswered = false;
                }
                
                intQuestionCount += 1;
                blnLastQuestionAnswered = false;
            }
            
            if (document.getElementById("pti_rdoAnswer" + objAnswer.id.toString()).checked)
            {
                blnLastQuestionAnswered = true;
                
                if (strSelectedIDs.length == 0)
                {
                    strSelectedIDs += objAnswer.id.toString();
                }
                else
                {
                    strSelectedIDs += "," + objAnswer.id.toString();            
                }
            }
                    
            intLastQuestionID = objAnswer.onlineMagPageCompQuestionID;
        }

        if (blnLastQuestionAnswered == false)
        {
            blnAllQuestionsAnswered = false;
        }
    }

    if (this.captureEmail == 2 || this.captureEmail == 3) //Email optional or required
    {
        strSelectedEmail = document.getElementById("pti_txtCompEmail").value;

        if (this.captureEmail == 3 && strSelectedEmail.length == 0) //Email optional or required
        {
            blnAllQuestionsAnswered = false;            
        }
    }

    if (blnAllQuestionsAnswered == false)
    {
        alert("All questions must be answered");
    }
    else
    {
        jQuery("#pti_submit").fadeOut();
    
        var strUrl = "http://" + this.onlineMagPageComps.onlineMagPage.onlineMagPages.onlineMagIssue.host + ptiWS + "?M=8&VID=" + this.onlineMagPageComps.onlineMagPage.onlineMagPages.onlineMagIssue.onlineMagIssueVisitID.toString() + 
                     "&CID=" + this.id + 
                     "&AIDS=" + strSelectedIDs + 
                     "&E=" + encodeURI(strSelectedEmail) + 
                     "&callback=?";

        jQuery.fn.ptibox.showLoading();
                                    
        jQuery.getJSON( strUrl, 
                        function(pobjReturn){
                            if (pobjReturn.returnStatus != 1)
                            {
                                ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                                jQuery("#pti_submit").fadeIn();
                                return;
                            }
                            
                            jQuery("#pti_submit").unbind();
                            
                            var arReturnData = pobjReturn.returnData.split(columnSeperator); //HTML, popupWidth, popupHeight
                            var strResult = "";
                            strResult += "<div class=\"pticompresult\">" + arReturnData[0] + "</div>";
                            jQuery.fn.ptibox.showItem(jQuery.fn.ptibox.generateItemObject(strResult, "", "", this.title, null, parseInt(arReturnData[1]), parseInt(arReturnData[2])));
                        });
                        
        // log with Analytics
        if (this.analyticsCode.length > 0)
        {
            _gaq.push(['_trackEvent', this.subType, "Submitted", this.title]);
        }                                                      
    }
}







OnlineMagPageCompAnswers = function(pobjOnlineMagPageComp, pstrOnlineMagPageCompAnswers)
{
    this.onlineMagPageComp = pobjOnlineMagPageComp;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageCompAnswers.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageCompAnswers.split(rowSeperator);
    
    
    for (var intAnswerIndex = 0; intAnswerIndex < arData.length; ++intAnswerIndex)
    {   
        // only add Answers to thsi Comp
        if (arData[intAnswerIndex].split(columnSeperator)[1] == this.onlineMagPageComp.id)
        {
            this.items[this.items.length] = new OnlineMagPageCompAnswer(this, arData[intAnswerIndex]);

            this.onlineMagPageComp.onlineMagPageComps.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageCompAnswers.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageCompAnswer = function(pobjOnlineMagPageCompAnswers, pstrOnlineMagPageCompAnswer)
{
    this.onlineMagPageCompAnswers = pobjOnlineMagPageCompAnswers;
        
    if (pstrOnlineMagPageCompAnswer.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageCompAnswer.split(columnSeperator);

    this.id = arData[0];
    this.onlineMagPageCompID = arData[1];
    this.onlineMagPageCompQuestionID = arData[2];
    this.question = arData[3];
    this.answer = arData[4];
}









OnlineMagPageGalleries = function(pobjOnlineMagPage, pstrOnlineMagPageGalleries, pstrOnlineMagPageGalleryPhotos)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageGalleries.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageGalleries.split(rowSeperator);
    
    
    for (var intGalleryIndex = 0; intGalleryIndex < arData.length; ++intGalleryIndex)
    {   
        // only add Galleries to thsi page
        if (arData[intGalleryIndex].split(columnSeperator)[2] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPageGallery(this, arData[intGalleryIndex], pstrOnlineMagPageGalleryPhotos);

            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageGalleries.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageGallery = function(pobjOnlineMagPageGalleries, pstrOnlineMagPageGallery, pstrOnlineMagPageGalleryPhotos)
{
    this.onlineMagPageGalleries = pobjOnlineMagPageGalleries;
        
    if (pstrOnlineMagPageGallery.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageGallery.split(columnSeperator);

    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPageID = arData[2];
    this.title = arData[3];
    this.width = arData[4];
    this.height = arData[5];
    this.posLeft = arData[6];
    this.posTop = arData[7];
    this.popupWidthHeight = parseInt(arData[8]);
    
    
    var arPhotoData = pstrOnlineMagPageGalleryPhotos.split(rowSeperator);
    
    /*
    var intRowCount = 0;
    var strPhotos = "";

    for (var intPhotoIndex = 0; intPhotoIndex < arPhotoData.length; ++intPhotoIndex)
    {   
        // only add Galleries to thsi page
        if (arPhotoData[intPhotoIndex].split(columnSeperator)[1] == this.id)
        {
            intRowCount+=1;
            if (intRowCount > 1)
            {
                strPhotos += rowSeperator;
            }
            
            strPhotos += arPhotoData[intPhotoIndex];
        }
    }

    this.photos = strPhotos;
    */

    this.ptiboxItems = new Array();

    for (var intPhotoIndex = 0; intPhotoIndex < arPhotoData.length; ++intPhotoIndex)
    {   
        // only add Galleries to this page
        var arPhoto = arPhotoData[intPhotoIndex].split(columnSeperator);
        if (arPhoto[1] == this.id)
        {
            this.ptiboxItems.push(jQuery.fn.ptibox.generateItemObject("", "", arPhoto[2], arPhoto[3], null, null, null));
        }
    }                                     
}


OnlineMagPageGallery.prototype.clicked = function()
{    
    jQuery().ptibox({itemArray: this.ptiboxItems});
    

    var strUrl = "http://" + this.onlineMagPageGalleries.onlineMagPage.onlineMagPages.onlineMagIssue.host + ptiWS + "?M=9&VID=" + this.onlineMagPageGalleries.onlineMagPage.onlineMagPages.onlineMagIssue.onlineMagIssueVisitID.toString() + "&GID=" + this.id + "&callback=?";    
    jQuery.getJSON( strUrl, 
                    function(pobjReturn)
                    {
                        if (pobjReturn.returnStatus != 1)
                        {
                            ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                            return;
                        }
                    });

    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Clicked", this.title]);
    }                                                      
}








OnlineMagPageForwards = function(pobjOnlineMagPage, pstrOnlineMagPageForwards)
{
    this.onlineMagPage = pobjOnlineMagPage;
    this.items = new Array();
    this.length = 0;

    if (pstrOnlineMagPageForwards.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageForwards.split(rowSeperator);
    
    
    for (var intForwardIndex = 0; intForwardIndex < arData.length; ++intForwardIndex)
    {   
        // only add Forwards to thsi page
        if (arData[intForwardIndex].split(columnSeperator)[2] == this.onlineMagPage.id)
        {
            this.items[this.items.length] = new OnlineMagPageForward(this, arData[intForwardIndex]);

            this.onlineMagPage.onlineMagPages.onlineMagIssue.allOnlineMagPageForwards.push(this.items[this.items.length - 1]);
        }
    }

    this.length = this.items.length;
}




OnlineMagPageForward = function(pobjOnlineMagPageForwards, pstrOnlineMagPageForward)
{
    this.onlineMagPageForwards = pobjOnlineMagPageForwards;
        
    if (pstrOnlineMagPageForward.length == 0)
    {
        return;
    }
    
    var arData = pstrOnlineMagPageForward.split(columnSeperator);

    this.id = arData[0];
    this.subType = arData[1];
    this.onlineMagPageID = arData[2];
    this.title = arData[3];
    this.width = arData[4];
    this.height = arData[5];
    this.posLeft = arData[6];
    this.posTop = arData[7];
    this.popupWidth = parseInt(arData[8]);
    this.popupHeight = parseInt(arData[9]);
}

OnlineMagPageForward.prototype.clicked = function()
{
    /* might need this code
    var newdiv = document.createElement("div");
    newdiv.innerHTML = xhr.responseText;
    var container = document.getElementById("container");
    container.appendChild(newdiv);
    */
    
    var strHTML = "";
    var strButton = "";
    var intLastQuestionID = 0
    var intQuestionCount = 0
    var objAnswer;
    

    strHTML += "<div class=\"ptiforward\">";

    strHTML += "<div class=\"pti_title\">" + htmlEncode(this.title) + "</div>";

    strHTML += "<div class=\"pti_question\">Your name</div>";
    strHTML += "<div class=\"pti_answer\"><input id=\"pti_txtForwardFromName\" name=\"pti_txtForwardFromName\" class=\"pti_forwardname\" type=\"text\" vcard_name=\"vCard.Name\" value=\"\" /></div>";

    strHTML += "<div class=\"pti_question\">Your email address</div>";
    strHTML += "<div class=\"pti_answer\"><input id=\"pti_txtForwardFromEmail\" name=\"pti_txtForwardFromEmail\" class=\"pti_forwardemail\" type=\"text\" vcard_name=\"vCard.Email\" value=\"\" /></div>";

    strHTML += "<div class=\"pti_question\">Your friend\'s email address</div>";
    strHTML += "<div class=\"pti_answer\"><input id=\"pti_txtForwardToEmail\" name=\"pti_txtForwardToEmail\" class=\"pti_forwardemail\" type=\"text\" vcard_name=\"vCard.Email\" value=\"\" /></div>";

    strHTML += "<div class=\"pti_question\">Message (optional)</div>";
    strHTML += "<div class=\"pti_answer\"><textarea id=\"pti_txtForwardMessage\" name=\"pti_txtForwardMessage\" class=\"pti_forwardmessage\" rows=\"5\" cols=\"10\"></textarea></div>";
        
    strHTML += "</div>";
    
    strButton += "<a id=\"pti_submit\"><span>Submit</span></a>";
    
    this.ptiboxItems = new Array();
    this.ptiboxItems.push(jQuery.fn.ptibox.generateItemObject(strHTML, strButton, "", this.title, null, this.popupWidth, this.popupHeight));    
    jQuery().ptibox({itemArray              : this.ptiboxItems, 
                     showInfoButton         : false, 
                     showPlayButton         : false
                    });
    
    jQuery("#pti_submit").unbind().bind("click", createDelegate(this, this.submit));
    

    // log with Analytics
    if (this.analyticsCode.length > 0)
    {
        _gaq.push(['_trackEvent', this.subType, "Clicked", this.title]);
    }                                                          
}


OnlineMagPageForward.prototype.submit = function()
{
    //Get the answers for each question and ensure that all questions have been answer    
    var strHTML = "";
    var strFromName = "";
    var strFromEmail = "";
    var strToEmail = "";
    var strMessage = "";
    
    
    strFromName = document.getElementById("pti_txtForwardFromName").value;
    strFromEmail = document.getElementById("pti_txtForwardFromEmail").value;
    strToEmail = document.getElementById("pti_txtForwardToEmail").value;
    strMessage = document.getElementById("pti_txtForwardMessage").value;
    
    if (strFromName.length == 0) 
    {
        alert("Your name must be provided.");
    }
    else if (validateEmail(strFromEmail, true, false) == false) 
    {
        alert("Your email address must be provided and must be valid");
    }
    else if (validateEmail(strToEmail, true, false) == false)
    {
        alert("Your friend's email address must be provided and must be valid");
    }
    else
    {        
        jQuery("#pti_submit").fadeOut();

        var strUrl = "http://" + this.onlineMagPageForwards.onlineMagPage.onlineMagPages.onlineMagIssue.host + ptiWS + "?M=10&VID=" + this.onlineMagPageForwards.onlineMagPage.onlineMagPages.onlineMagIssue.onlineMagIssueVisitID.toString() + 
                     "&FID=" + this.id + 
                     "&FN=" + encodeURI(strFromName) + 
                     "&FE=" + encodeURI(strFromEmail) + 
                     "&TE=" + encodeURI(strToEmail) + 
                     "&MG=" + encodeURI(strMessage) + 
                     "&callback=?";
                
        jQuery.fn.ptibox.showLoading();

        jQuery.getJSON( strUrl, 
                        function(pobjReturn)
                        {
                            if (pobjReturn.returnStatus != 1)
                            {
                                ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                                jQuery("#pti_submit").fadeIn();
                                return;
                            }

                            jQuery("#pti_submit").unbind();
                            
                            var strResult = ""
                            strResult += "<div class=\"ptiforward\">";  
                            strResult += "<div class=\"pti_result\">Thank you for using forward to a friend</div>"
                            strResult += "</div>";  

                            jQuery.fn.ptibox.showItem(jQuery.fn.ptibox.generateItemObject(strResult, "", "", this.title, null, 400, 400));
                        });

        // log with Analytics
        if (this.analyticsCode.length > 0)
        {
            _gaq.push(['_trackEvent', this.subType, "Submitted", this.title]);
        }                                                      
    }

    return false;
}











/* GENERAL FUNCTIONS */
function ptiGetDefaultConfig()
{
	var objConfig = new Object();

    objConfig.useUrlParams = false;
    objConfig.navBar = "bottom";
    objConfig.hostIncWWW = "issues.pageturninteractive.com";
    objConfig.htmlhostIncWWW = window.location.host; // used by flash
    
    if (objConfig.htmlhostIncWWW.indexOf("dev.issues.pageturninteractive.com") >= 0)
    {
        objConfig.hostIncWWW = "dev.issues.pageturninteractive.com"
    }    
    
    objConfig.proofingToken = "";
    objConfig.jumpToPageOnFirstPageLoad = 0;
    objConfig.jumpToPageOnFirstPageLoadDelay = 2000;

	// Page Flip Specific	
	objConfig.scaleContent = true;
	objConfig.preserveProportions = false;
	objConfig.centerContent = true;
	objConfig.hardcover = false;
	objConfig.hardcoverThickness = 2;
	objConfig.hardcoverEdgeColor = "0xCCCCCC";
	objConfig.highlightHardcover = true;
    objConfig.frameWidth = 0.5;
    objConfig.frameColor = "0xCCCCCC";
    objConfig.frameAlpha = 50;
	objConfig.firstPage = 0;
	objConfig.alwaysOpened = false;
	objConfig.autoFlip = 50;
	objConfig.navigationFlipOffset = 100;
	objConfig.flipOnClick = true;
	objConfig.handOverCorner = true;
	objConfig.handOverPage = false;
	objConfig.staticShadowsType = "Asymmetric";
	objConfig.staticShadowsDepth = 1;
	objConfig.staticShadowsLightColor = "0xCCCCCC";
	objConfig.staticShadowsDarkColor = "0x666666";
	objConfig.shadowsDepth = 2;
	objConfig.dynamicShadowsLightColor = "0xFFFFFF";
	objConfig.dynamicShadowsDarkColor = "0x000000";
	objConfig.moveSpeed = 3;
	objConfig.closeSpeed = 3;
	objConfig.gotoSpeed = 3;
	objConfig.rigidPageSpeed = 3;
	objConfig.flipSound = "02.mp3";
	objConfig.hardcoverSound = "02.mp3";
	objConfig.preloaderType = "Progress Bar";
	objConfig.pageBack = "0xFFFFFF";
	objConfig.backgroundSymbol = "";
	objConfig.loadOnDemand = true;
	objConfig.allowPagesUnload = true;
	objConfig.cachePages = true;
	objConfig.cacheSize = 20;
	objConfig.userPreloaderId = "";
	objConfig._showUnderlyingPages = false; // !!!
	objConfig.playOnDemand = true;
	objConfig.globalFreezeOnFlip = true;
	objConfig.globalDark = false;
	objConfig.globalSmooth = false;
	objConfig.globalRigid = false;
	objConfig.flipCornerStyle = "manualy";
	objConfig.flipCornerPosition = "bottom-right";
	objConfig.flipCornerAmount = 150;
	objConfig.flipCornerAngle = 45;
	objConfig.flipCornerRelease = true;
	objConfig.flipCornerVibrate = true;
	objConfig.flipCornerPlaySound = true;

	return objConfig;
}


function removeLeadingZeros(pstr)
{

    var strReturn = "";
    var blnFoundNonZero = false;
    
    for (var intStringIndex = 0; intStringIndex <= pstr.length; ++intStringIndex)
    {   
        if (blnFoundNonZero || pstr.toString().substr(intStringIndex, 1) != "0")
        {
            strReturn += pstr.toString().substr(intStringIndex, 1);
            blnFoundNonZero = true;
        }
    }
    
    return strReturn;    

}

function htmlEncode(strPlainText) {
    var str = new String(strPlainText);

    return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
}


function htmlDecode(strEnclodedText) {
    var str = new String(strEnclodedText);

    return str.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"");
} 


function showPopUpBlocked(pstrUrl, pstrTarget)
{
    var strHTML = "";

    strHTML += "<div class=\"ptipopupblocked\">";
    strHTML += "<div class=\"pti_title\">Pop-Up Blocked</div>";
    strHTML += "<div class=\"pti_message\">Your web browser has been set to block pop-ups.  Please click <a href=\"" + pstrUrl + "\" target=\"" + pstrTarget + "\">here</a> to view the link.</div>";
    strHTML += "</div>";

    this.ptiboxItems = new Array();
    this.ptiboxItems.push(jQuery.fn.ptibox.generateItemObject(strHTML, "", "", "Pop-Up Blocked", null, 300, 200));    
    jQuery().ptibox({itemArray              : this.ptiboxItems, 
                     showInfoButton         : false, 
                     showPlayButton         : false
                    });
}

function createDelegate(instance, method)
{
    return function() {
        return method.apply(instance, arguments);
    }
}

function getByID(parObjects, pintID)
{
    var objReturn;

    for (var intObjectIndex = 0; intObjectIndex < parObjects.length; ++intObjectIndex)
    {   
        // only add Forwards to thsi page
        if (parObjects[intObjectIndex].id == pintID)
        {
            objReturn = parObjects[intObjectIndex];
        }
    }
    
    return objReturn;
}

function getIndexByID(parObjects, pintID)
{
    var intReturn = -1;

    for (var intObjectIndex = 0; intObjectIndex < parObjects.length; ++intObjectIndex)
    {   
        // only add Forwards to thsi page
        if (parObjects[intObjectIndex].id == pintID)
        {
            intReturn = intObjectIndex;
        }
    }
    
    return intReturn;
}

function validateEmail(pstrEmail,pblnRequired,pblnShowMessage)
{
    if (pstrEmail == '' && pblnRequired) {
       if (pblnShowMessage) alert('email address is required');
       return false;
    }
    if (pstrEmail == '') return true;
    var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
    for (i=0; i<invalidChars.length; i++) {
       if (pstrEmail.indexOf(invalidChars.charAt(i),0) > -1) {
          if (pblnShowMessage) alert('email address contains invalid characters');
          return false;
       }
    }
    for (i=0; i<pstrEmail.length; i++) {
       if (pstrEmail.charCodeAt(i)>127) {
          if (pblnShowMessage) alert("email address contains invalid characters");
          return false;
       }
    }

    var atPos = pstrEmail.indexOf('@',0);
    if (atPos == -1) {
       if (pblnShowMessage) alert('email address must contain an @');
       return false;
    }
    if (atPos == 0) {
       if (pblnShowMessage) alert('email address must not start with @');
       return false;
    }
    if (pstrEmail.indexOf('@', atPos + 1) > - 1) {
       if (pblnShowMessage) alert('email address must contain only one @');
       return false;
    }
    if (pstrEmail.indexOf('.', atPos) == -1) {
       if (pblnShowMessage) alert('email address must contain a period in the domain name');
       return false;
    }
    if (pstrEmail.indexOf('@.',0) != -1) {
       if (pblnShowMessage) alert('period must not immediately follow @ in email address');
       return false;
    }
    if (pstrEmail.indexOf('.@',0) != -1){
       if (pblnShowMessage) alert('period must not immediately precede @ in email address');
       return false;
    }
    if (pstrEmail.indexOf('..',0) != -1) {
       if (pblnShowMessage) alert('two periods must not be adjacent in email address');
       return false;
    }
    return true;
}


