﻿///////////////////////////////////////////////////////////////////////////////
//
//  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 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;




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);    
    
    if (objPageTurn.loaded)
    {
        if (objPageTurn.mode == modeFlash)
        {
            swfobject.getObjectById(objPageTurn.elementID).ptiPreviousPage();
        }
        else
        {
            objPageTurn.htmlPreviousPage();
        }        
    }
}

function ptiNextPage(pstrContainerElementID)
{
    ptiTrace("ptiNextPage: " + pstrContainerElementID);

    var objPageTurn = ptiGetInstance(pstrContainerElementID);    
    
    if (objPageTurn.loaded)
    {
        if (objPageTurn.mode == modeFlash)
        {
            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 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);
    }
}


/**** HTML Interface - End ****/







/**** Flash/HTML Callback Interface - Start ********************************************************************/
function ptiPagesViewed(pstrContainerElementID, pintLeftPageID, pintRightPageID)
{
    ptiTrace("ptiPagesViewed: " + pstrContainerElementID + ":" + pintLeftPageID + ":" + pintRightPageID);
    
    ptiGetInstance(pstrContainerElementID).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("#divTrace").append(pstrMessage + "<br />");    
}
/**** Flash Interface - End ****/


















OnlineMagIssue = function(pstrContainerElementID, pobjConfig) {
    var strPN = "0";
    var strHTML = "";

/*
    if (pitIsTouch)
    {
        //iPhone, iPad, or Android
        document.addEventListener('touchmove', function(e){ e.preventDefault(); }, false);
    }
*/

    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.elementID = pstrContainerElementID + "_inner";

    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
    }

    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 + "/JSON/PTI.aspx?M=1&MGUID=" + pstrMGUID + "&PN=" + pstrPN + "&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 + "/JSON/PTI.aspx?M=1&IGUID=" + pstrIGUID + "&PN=" + pstrPN + "&EA=" + encodeURI(this.emailAddress) + "&callback=?";
    jQuery.getJSON(strUrl, createDelegate(this, this.gotOnlineMagIssue));
}

OnlineMagIssue.prototype.gotOnlineMagIssue = function(pobjReturn)
{
    var strHTML;
    
    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.errorMessage = arOnlineMag[7];
    }

    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.currentPageNo = this.flashConfig.firstPage;
    
    
    // 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(".jepg") >-1)
        {
            //Dont freeze on flip
            this.flashConfig.globalFreezeOnFlip = false;
        }    
    }
    

    //setup the navbar & inner container
    strHTML = "";
    
    if (this.flashConfig.navBar == "bottom")
    {
        strHTML += "<div id=\"" + this.elementID + "\"></div>";
    }
    strHTML += "<div class=\"ptinav\">";
    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>";
    strHTML += "</div>";
    if (this.flashConfig.navBar == "top")
    {
        strHTML += "<div id=\"" + this.elementID + "\"></div>";
    }
    strHTML += "<div class=\"ptipoweredby\"><span>powered by <a href=\"http://www.pageturninteractive.co.uk\" target=\"_blank\">Page Turn Interactive</a></span>";
    strHTML += "</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);});


    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)
        {        
            // Flash Version 
            var objFlashVars = {};
            var objFlashParams = {wmode: "transparent", allowscriptaccess: "always", base: "http://" + this.host + "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName};
            var objFlashAttributes = {};   
            
            swfobject.embedSWF("http://" + this.host + "/" + this.onlineMagFolderName + "/" + this.onlineMagIssueFolderName + "/PTI.swf?id=" + this.containerElementID, this.elementID, this.onlineMagFrameWidth, this.onlineMagFrameHeight, "8.0.0", "expressInstall.swf", objFlashVars, objFlashParams, objFlashAttributes);
        }
        else
        {
            jQuery("#" + this.elementID).html("<p class=\"ptiIssueError\">" + this.errorMessage + "</p>");
        }
    }
    else
    {
        if (this.errorMessage.length == 0)
        {        
            // HTML Version
            var intTopBottomMargin = parseInt((this.onlineMagFrameHeight - this.onlineMagHeight) / 2);
            
            strHTML = "";
            strHTML += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin: " + intTopBottomMargin.toString() + "px auto; width:" + this.onlineMagFrameWidth + ";height:" + this.onlineMagFrameHeight + "\">";
            strHTML += "<tbody>";
            strHTML += "<tr>";
            strHTML += "<td style=\"text-align: right; width: 50%; padding: 0 margin: 0;\"><div class=\"ptihtml_leftpage\" style=\"position: relative;\">&nbsp;</div></td>";
            strHTML += "<td style=\"text-align: left; width: 50%; padding: 0 margin: 0;\"><div class=\"ptihtml_rightpage\" style=\"position: relative;\">&nbsp;</div></td>";
            strHTML += "</tr>";
            strHTML += "<tbody>";
            strHTML += "</table>";
            
            jQuery("#" + this.elementID).html(strHTML);
                    
            this.htmlShowPages();
        }
        else
        {
            jQuery("#" + this.elementID).html("<p class=\"ptiIssueError\">" + htmlEncode(this.errorMessage) + "</p>");
        }
    }

    this.loaded = true;
}



OnlineMagIssue.prototype.htmlPreviousPage = function()
{
    if (this.currentPageNo > 0)
    {
        this.currentPageNo -= 2;
        
        if (this.currentPageNo < 0)
        {
            this.currentPageNo = 0;
        }
        
        this.htmlShowPages();
    }
}

OnlineMagIssue.prototype.htmlNextPage = function()
{
    if (this.currentPageNo < (this.onlineMagPages.length - 1))
    {
        this.currentPageNo += 2;
        

        if (this.currentPageNo > (this.onlineMagPages.length - 1))
        {
            this.currentPageNo = (this.onlineMagPages.length - 1);
        }
        
        this.htmlShowPages();
    }
}

OnlineMagIssue.prototype.htmlGotoPage = function(pageNo)
{
    var intCurrentPage = this.currentPageNo;
    var intNextPage = pageNo;
    
    if (intCurrentPage  % 2 == 0) intCurrentPage -= 1;
    if (intNextPage  % 2 == 0) intNextPage -= 1;
    
    if (intCurrentPage != intNextPage)
    {    
        this.currentPageNo = pageNo;
        this.htmlShowPages();
    }
}

OnlineMagIssue.prototype.htmlShowPages = function()
{
    var strLeft = "&nbsp;";
    var strRight = "&nbsp;";
    var intLeftPageNo = -1;
    var intRightPageNo = 1;
    var intLeftPageID = 0;
    var intRightPageID = 0;
    
    if (this.currentPageNo == 0)
    {
        // First Page
        intRightPageNo = this.currentPageNo;
        strRight = "<img src=\"" + this.onlineMagPages.items[intRightPageNo].jpegUrl + "\" alt=\"" + this.onlineMagPages.items[intRightPageNo].title + "\" style=\"width:" + this.onlineMagWidth.toString() + "px;height:" + this.onlineMagHeight.toString() + "px;border:none;\" />";
        intRightPageID = this.onlineMagPages.items[intRightPageNo].id;        
    }
    else if (this.currentPageNo == (this.onlineMagPages.length - 1))
    {
        // Last Page
        intLeftPageNo = this.currentPageNo;
        strLeft = "<img src=\"" + this.onlineMagPages.items[intLeftPageNo].jpegUrl + "\" alt=\"" + this.onlineMagPages.items[intLeftPageNo].title + "\" style=\"width:" + this.onlineMagWidth.toString() + "px;height:" + this.onlineMagHeight.toString() + "px;border:none;\" />";        
        intLeftPageID = this.onlineMagPages.items[intLeftPageNo].id;
    }
    else
    {
        // two page spread
        intLeftPageNo = this.currentPageNo;
        
        if (intLeftPageNo % 2 == 0)
        {
            intLeftPageNo -= 1;
        }
        strLeft = "<img src=\"" + this.onlineMagPages.items[intLeftPageNo].jpegUrl + "\" alt=\"" + this.onlineMagPages.items[intLeftPageNo].title + "\" style=\"width:" + this.onlineMagWidth.toString() + "px;height:" + this.onlineMagHeight.toString() + "px;border:none;\" />";        
        intLeftPageID = this.onlineMagPages.items[intLeftPageNo].id;

        intRightPageNo = (intLeftPageNo + 1);
        strRight = "<img src=\"" + this.onlineMagPages.items[intRightPageNo].jpegUrl + "\" alt=\"" + this.onlineMagPages.items[intRightPageNo].title + "\" style=\"width:" + this.onlineMagWidth.toString() + "px;height:" + this.onlineMagHeight.toString() + "px;border:none;\" />";
        intRightPageID = this.onlineMagPages.items[intRightPageNo].id;
    }


    // Output Pages    
    jQuery("#" + this.elementID + " .ptihtml_leftpage").html(strLeft);
    jQuery("#" + this.elementID + " .ptihtml_rightpage").html(strRight);    


    // Output Links
    var arPageNos = new Array();
    if (intLeftPageNo > -1)
    {
        arPageNos.push({pageNo: intLeftPageNo, pageClass: "ptihtml_leftpage"});
    }
    if (intRightPageNo > -1)
    {
        arPageNos.push({pageNo: intRightPageNo, pageClass: "ptihtml_rightpage"});
    }


    for (var intPageIndex = 0; intPageIndex < arPageNos.length; ++intPageIndex)
    {   
        var intPageNo = arPageNos[intPageIndex].pageNo;
        var strPageClass= arPageNos[intPageIndex].pageClass;
        var strModuleHTML = "";
        var strPostAppend = "";

        for (var intModuleIndex = 0; intModuleIndex < this.flashPages[intPageNo].modules.length; ++intModuleIndex)
        {   
            var objModule = this.flashPages[intPageNo].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 += ">";
                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 height=\"" + objModule.height + "\" width=\"" + objModule.width + "\">";
					strModuleHTML += "	<source src=\"" + strUrl + "\" />";
					strModuleHTML += "</video>";
					
					// this line make sure that it loads on the ipad
					strPostAppend += "document.getElementById('video" + objModule.id.toString() + "').load();";
				}
				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).append(strModuleHTML);
        
        if (pitIsTouch)
        {
			window.setTimeout(strPostAppend, 2000);
        }
        else
        {
            jQuery(".ptihtml_video .media").media();        
        }        
    }
    
    ptiPagesViewed(this.containerElementID, intLeftPageID, intRightPageID);
}




OnlineMagIssue.prototype.pagesViewed = function(pintLeftPageID, pintRightPageID) {
    var strPages = "";

    if (pintLeftPageID < 1) {
        pintLeftPageID = 0
    }
    else {
        strPages += (getByID(this.onlineMagPages.items, pintLeftPageID).number + 1) + "-";
    }

    if (pintRightPageID < 1) {
        pintRightPageID = 0
    }
    else {
        strPages += (getByID(this.onlineMagPages.items, pintRightPageID).number + 1) + "-";
    }

    strPages = strPages.substring(0, (strPages.length - 1)) + " of " + this.onlineMagPages.length;

    jQuery("#" + this.containerElementID + " .ptinav_page").html(strPages);




    var strRowDelimitedPageIDs = pintLeftPageID.toString() + "," + pintRightPageID.toString();
    var strUrl = "http://" + this.host + "/JSON/PTI.aspx?M=3&VID=" + this.onlineMagIssueVisitID.toString() + "&PNS=" + strRowDelimitedPageIDs + "&callback=?";

    jQuery.getJSON(strUrl,
                    function(pobjReturn) {
                        if (pobjReturn.returnStatus != 1) {
                            ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                            return;
                        }
                    });

    if (pintRightPageID > 0 && getByID(this.onlineMagPages.items, pintRightPageID).number == 0) {
        if (this.firstPageAlreadyLoaded == false && this.flashConfig.jumpToPageOnFirstPageLoad > 0) {
            window.setTimeout("ptiGotoPage('" + this.containerElementID + "', " + this.flashConfig.jumpToPageOnFirstPageLoad + ")", this.flashConfig.jumpToPageOnFirstPageLoadDelay);
        }

        this.firstPageAlreadyLoaded = true;
    }
}


OnlineMagIssue.prototype.PDFVisit = function()
{
    var strUrl = "http://" + this.host + "/JSON/PTI.aspx?M=2&VID=" + this.onlineMagIssueVisitID.toString() + "&callback=?";
    
    jQuery.getJSON( strUrl, 
                    function(pobjReturn)
                    {
                        if (pobjReturn.returnStatus != 1)
                        {
                            ptiTrace("JSON ERROR: " + pobjReturn.returnMessage);
                            return;
                        }
                    });
}

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 strUrl = "";
    var strUrlH264 = "";
    var blnAutoPlay = false;

    for (var intInstanceIndex = 0; intInstanceIndex < pobjs.length; ++intInstanceIndex)
    {
        var obj = pobjs.items[intInstanceIndex];

        strUrl = "";
        urlH264 = "";
        blnAutoPlay = false;

        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, 
                       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)[1] == 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.onlineMagPageID = arData[1];
    this.title = arData[2];
    this.url = arData[3];
    this.width = arData[4];
    this.height = arData[5];
    this.posLeft = arData[6];
    this.posTop = arData[7];
}

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, "", "");
        if (!objWindow)
        {
            showPopUpBlocked(this.url);        
        }    
    }       


    this.linkVisit();
}

OnlineMagPageLink.prototype.linkVisit = function()
{
    var strUrl = "http://" + this.onlineMagPageLinks.onlineMagPage.onlineMagPages.onlineMagIssue.host + "/JSON/PTI.aspx?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;
                        }
                    });
}








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)[7] == 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.onlineMagPagePollID = arData[1];
    this.anwser = arData[2];
    this.width = arData[3];
    this.height = arData[4];
    this.posLeft = arData[5];
    this.posTop = arData[6];
    this.onlineMagPageID = arData[7];
    this.popupWidth = parseInt(arData[8]);
    this.popupHeight = parseInt(arData[9]);
}

OnlineMagPagePollAnswer.prototype.clicked = function()
{    
    var strUrl = "http://" + this.onlineMagPagePollAnswers.onlineMagPage.onlineMagPages.onlineMagIssue.host + "/JSON/PTI.aspx?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");
                                                                    }
                                                                }
                                        });
                        
                        
                    });
}











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)[1] == 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.onlineMagPageID = arData[1];
    this.title = arData[2];
    this.width = arData[3];
    this.height = arData[4];
    this.posLeft = arData[5];
    this.posTop = arData[6];
    this.popupWidth = parseInt(arData[7]);
    this.popupHeight = parseInt(arData[8]);
    
    var strUrl = "http://" + this.onlineMagPageArticles.onlineMagPage.onlineMagPages.onlineMagIssue.host + "/JSON/PTI.aspx?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
                    });
      
}







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)[1] == 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.onlineMagPageID = arData[1];
    this.title = arData[2];
    this.url = arData[3];
    this.width = arData[4];
    this.height = arData[5];
    this.posLeft = arData[6];
    this.posTop = arData[7];
    
    if (arData[8] == "true")
    {
        this.autoPlay =  true;
    }
    else
    {
        this.autoPlay =  false;
    }

    this.urlH264 = arData[9];
}


OnlineMagPageVideo.prototype.VideoPlayed = function()
{
    var strUrl = "http://" + this.onlineMagPageVideos.onlineMagPage.onlineMagPages.onlineMagIssue.host + "/JSON/PTI.aspx?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;
                        }
                    });
}






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)[1] == 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.onlineMagPageID = arData[1];
    this.title = arData[2];
    this.pageNo = parseInt(arData[3]);
    this.width = arData[4];
    this.height = arData[5];
    this.posLeft = arData[6];
    this.posTop = arData[7];
}

OnlineMagPageJump.prototype.clicked = function()
{
    ptiGotoPage(this.onlineMagPageJumps.onlineMagPage.onlineMagPages.onlineMagIssue.containerElementID, this.pageNo);
}





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)[1] == 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.onlineMagPageID = arData[1];
    this.title = arData[2];
    this.captureEmail = parseInt(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]);

    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));
}


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 + "/JSON/PTI.aspx?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])));
                        });
    }
}







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)[1] == 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.onlineMagPageID = arData[1];
    this.title = arData[2];
    this.width = arData[3];
    this.height = arData[4];
    this.posLeft = arData[5];
    this.posTop = arData[6];
    this.popupWidthHeight = parseInt(arData[7]);
    
    
    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});
    
    this.GalleryViewed();
}

OnlineMagPageGallery.prototype.GalleryViewed = function()
{
    var strUrl = "http://" + this.onlineMagPageGalleries.onlineMagPage.onlineMagPages.onlineMagIssue.host + "/JSON/PTI.aspx?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;
                        }
                    });
}








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)[1] == 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.onlineMagPageID = arData[1];
    this.title = arData[2];
    this.width = arData[3];
    this.height = arData[4];
    this.posLeft = arData[5];
    this.posTop = arData[6];
    this.popupWidth = parseInt(arData[7]);
    this.popupHeight = parseInt(arData[8]);
}

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));            
}


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 + "/JSON/PTI.aspx?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));
                        });
    }

    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.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)
{
    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=\"_blank\">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;
}






//swobject
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();

//iscroll
(function(){function i(m,k){this.element=typeof m=="object"?m:document.getElementById(m);this.wrapper=this.element.parentNode;this.element.style.webkitTransitionProperty="-webkit-transform";this.element.style.webkitTransitionTimingFunction="cubic-bezier(0,0,0.25,1)";this.element.style.webkitTransitionDuration="0";this.element.style.webkitTransform=d?"translate3d(0,0,0)":"translate(0,0)";this.options={bounce:d,momentum:d,checkDOMChanges:true,topOnDOMChanges:false,hScrollbar:d,vScrollbar:d,fadeScrollbar:b||c||!a,shrinkScrollbar:b||c,desktopCompatibility:false,overflow:"auto"};if(typeof k=="object"){for(var l in k){this.options[l]=k[l]}}if(this.options.desktopCompatibility){this.options.overflow="hidden"}this.wrapper.style.overflow=this.options.overflow;this.refresh();window.addEventListener("onorientationchange" in window?"orientationchange":"resize",this,false);if(a||this.options.desktopCompatibility){this.element.addEventListener(f,this,false)}if(this.options.checkDOMChanges){this.element.addEventListener("DOMSubtreeModified",this,false)}if(!a){this.element.addEventListener("click",this,true)}}i.prototype={x:0,y:0,dist:0,handleEvent:function(k){switch(k.type){case"click":if(!k._fake){k.stopPropagation()}break;case f:this.touchStart(k);break;case h:this.touchMove(k);break;case e:this.touchEnd(k);break;case"webkitTransitionEnd":this.transitionEnd(k);break;case"orientationchange":case"resize":this.refresh();break;case"DOMSubtreeModified":this.onDOMModified(k);break}},onDOMModified:function(k){this.refresh();if(this.options.topOnDOMChanges&&(this.x!=0||this.y!=0)){this.scrollTo(0,0,"0")}},refresh:function(){this.scrollWidth=this.wrapper.clientWidth;this.scrollHeight=this.wrapper.clientHeight;this.maxScrollX=this.scrollWidth-this.element.offsetWidth;this.maxScrollY=this.scrollHeight-this.element.offsetHeight;var l=this.x,k=this.y;if(this.scrollX){if(this.maxScrollX>=0){l=0}else{if(this.x<this.maxScrollX){l=this.maxScrollX}}}if(this.scrollY){if(this.maxScrollY>=0){k=0}else{if(this.y<this.maxScrollY){k=this.maxScrollY}}}if(l!=this.x||k!=this.y){this.setTransitionTime("0");this.setPosition(l,k,true)}this.scrollX=this.element.offsetWidth>this.scrollWidth?true:false;this.scrollY=!this.scrollX||this.element.offsetHeight>this.scrollHeight?true:false;if(this.options.hScrollbar&&this.scrollX){this.scrollBarX=(this.scrollBarX instanceof j)?this.scrollBarX:new j("horizontal",this.wrapper,this.options.fadeScrollbar,this.options.shrinkScrollbar);this.scrollBarX.init(this.scrollWidth,this.element.offsetWidth)}else{if(this.scrollBarX){this.scrollBarX=this.scrollBarX.remove()}}if(this.options.vScrollbar&&this.scrollY&&this.element.offsetHeight>this.scrollHeight){this.scrollBarY=(this.scrollBarY instanceof j)?this.scrollBarY:new j("vertical",this.wrapper,this.options.fadeScrollbar,this.options.shrinkScrollbar);this.scrollBarY.init(this.scrollHeight,this.element.offsetHeight)}else{if(this.scrollBarY){this.scrollBarY=this.scrollBarY.remove()}}},setPosition:function(k,m,l){this.x=k;this.y=m;this.element.style.webkitTransform=d?"translate3d("+this.x+"px,"+this.y+"px,0px)":"translate("+this.x+"px,"+this.y+"px)";if(!l){if(this.scrollBarX){this.scrollBarX.setPosition(this.x)}if(this.scrollBarY){this.scrollBarY.setPosition(this.y)}}},setTransitionTime:function(k){k=k||"0";this.element.style.webkitTransitionDuration=k;if(this.scrollBarX){this.scrollBarX.bar.style.webkitTransitionDuration=k;this.scrollBarX.wrapper.style.webkitTransitionDuration=d&&this.options.fadeScrollbar?"300ms":"0"}if(this.scrollBarY){this.scrollBarY.bar.style.webkitTransitionDuration=k;this.scrollBarY.wrapper.style.webkitTransitionDuration=d&&this.options.fadeScrollbar?"300ms":"0"}},touchStart:function(l){l.preventDefault();l.stopPropagation();this.moved=false;this.dist=0;this.setTransitionTime("0");if(this.options.momentum){var k=new WebKitCSSMatrix(window.getComputedStyle(this.element).webkitTransform);if(k.e!=this.x||k.f!=this.y){this.element.removeEventListener("webkitTransitionEnd",this,false);this.setPosition(k.e,k.f);this.moved=true}}this.touchStartX=a?l.touches[0].pageX:l.pageX;this.scrollStartX=this.x;this.touchStartY=a?l.touches[0].pageY:l.pageY;this.scrollStartY=this.y;this.scrollStartTime=l.timeStamp;this.element.addEventListener(h,this,false);this.element.addEventListener(e,this,false)},touchMove:function(p){var n=a?p.touches[0].pageX:p.pageX,m=a?p.touches[0].pageY:p.pageY,l=this.scrollX===true?n-this.touchStartX:0,k=this.scrollY===true?m-this.touchStartY:0,q=this.x+l,o=this.y+k;this.dist+=Math.abs(this.touchStartX-n)+Math.abs(this.touchStartY-m);this.touchStartX=n;this.touchStartY=m;if(q>0||q<this.maxScrollX){q=this.options.bounce?Math.round(this.x+l/3):q>=0?0:this.maxScrollX}if(o>0||o<this.maxScrollY){o=this.options.bounce?Math.round(this.y+k/3):o>=0?0:this.maxScrollY}if(this.dist>5){this.setPosition(q,o);this.moved=true}},touchEnd:function(q){this.element.removeEventListener(h,this,false);this.element.removeEventListener(e,this,false);var n=q.timeStamp-this.scrollStartTime;if(!this.moved){this.resetPosition();var r=a?q.changedTouches[0].target:q.target;while(r.nodeType!=1){r=r.parentNode}var s=document.createEvent("MouseEvents");s.initMouseEvent("click",true,true,q.view,1,r.screenX,r.screenY,r.clientX,r.clientY,q.ctrlKey,q.altKey,q.shiftKey,q.metaKey,0,null);s._fake=true;r.dispatchEvent(s);return false}if(!this.options.momentum||n>250){this.resetPosition();return false}var l=this.scrollX===true?this.momentum(this.x-this.scrollStartX,n,this.options.bounce?-this.x+this.scrollWidth/5:-this.x,this.options.bounce?this.x+this.element.offsetWidth-this.scrollWidth+this.scrollWidth/5:this.x+this.element.offsetWidth-this.scrollWidth):{dist:0,time:0};var k=this.scrollY===true?this.momentum(this.y-this.scrollStartY,n,this.options.bounce?-this.y+this.scrollHeight/5:-this.y,this.options.bounce?(this.maxScrollY<0?this.y+this.element.offsetHeight-this.scrollHeight:0)+this.scrollHeight/5:this.y+this.element.offsetHeight-this.scrollHeight):{dist:0,time:0};if(!l.dist&&!k.dist){this.resetPosition();return false}var m=Math.max(Math.max(l.time,k.time),1);var p=this.x+l.dist;var o=this.y+k.dist;this.scrollTo(p,o,m+"ms")},transitionEnd:function(){this.element.removeEventListener("webkitTransitionEnd",this,false);this.resetPosition()},resetPosition:function(m){var n=this.x,l=this.y,k=this,m=m||"500ms";if(this.x>=0){n=0}else{if(this.x<this.maxScrollX){n=this.maxScrollX}}if(this.y>=0||this.maxScrollY>0){l=0}else{if(this.y<this.maxScrollY){l=this.maxScrollY}}if(n!=this.x||l!=this.y){this.scrollTo(n,l,m)}else{if(this.scrollBarX||this.scrollBarY){if(this.scrollBarX){this.scrollBarX.hide()}if(this.scrollBarY){this.scrollBarY.hide()}}}},scrollTo:function(l,k,m){this.element.addEventListener("webkitTransitionEnd",this,false);this.setTransitionTime(m||"450ms");this.setPosition(l,k)},momentum:function(r,l,p,k){var o=2.5,q=1.2,m=Math.abs(r)/l*1000,n=m*m/o/1000,s=0;if(r>0&&n>p){m=m*p/n/o;n=p}else{if(r<0&&n>k){m=m*k/n/o;n=k}}n=n*(r<0?-1:1);s=m/q;return{dist:Math.round(n),time:Math.round(s)}},destroy:function(k){window.removeEventListener("resize",this,false);this.element.removeEventListener(f,this,false);this.element.removeEventListener(h,this,false);this.element.removeEventListener(e,this,false);this.element.removeEventListener("DOMSubtreeModified",this,false);this.element.removeEventListener("click",this,true);this.element.removeEventListener("webkitTransitionEnd",this,false);if(this.scrollBarX){this.scrollBarX=this.scrollBarX.remove()}if(this.scrollBarY){this.scrollBarY=this.scrollBarY.remove()}if(k){this.wrapper.parentNode.removeChild(this.wrapper)}return null}};var j=function(l,q,p,n){this.dir=l;this.fade=p;this.shrink=n;this.bar=document.createElement("div");var o="position:absolute;top:0;left:0;-webkit-transition-timing-function:cubic-bezier(0,0,0.25,1);pointer-events:none;-webkit-transition-duration:0;-webkit-transition-delay:0;-webkit-transition-property:-webkit-transform;z-index:10;background:rgba(0,0,0,0.5);"+(d?"-webkit-transform:translate3d(0,0,0);":"-webkit-transform:translate(0,0);")+(l=="horizontal"?"-webkit-border-radius:3px 2px;min-width:6px;min-height:5px":"-webkit-border-radius:2px 3px;min-width:5px;min-height:6px"),m,k;this.bar.setAttribute("style",o);this.wrapper=document.createElement("div");o="-webkit-mask:-webkit-canvas(scrollbar"+this.dir+");position:absolute;pointer-events:none;overflow:hidden;opacity:0;-webkit-transition-duration:"+(p?"300ms":"0")+";-webkit-transition-delay:0;-webkit-transition-property:opacity;"+(this.dir=="horizontal"?"bottom:2px;left:1px;right:7px;height:5px":"top:1px;right:2px;bottom:7px;width:5px;");this.wrapper.setAttribute("style",o);this.wrapper.appendChild(this.bar);q.appendChild(this.wrapper);if(this.dir=="horizontal"){m=this.wrapper.offsetWidth;k=document.getCSSCanvasContext("2d","scrollbar"+this.dir,m,5);k.fillStyle="rgb(0,0,0)";k.beginPath();k.arc(2.5,2.5,2.5,Math.PI/2,-Math.PI/2,false);k.lineTo(m-2.5,0);k.arc(m-2.5,2.5,2.5,-Math.PI/2,Math.PI/2,false);k.closePath();k.fill()}else{m=this.wrapper.offsetHeight;k=document.getCSSCanvasContext("2d","scrollbar"+this.dir,5,m);k.fillStyle="rgb(0,0,0)";k.beginPath();k.arc(2.5,2.5,2.5,Math.PI,0,false);k.lineTo(5,m-2.5);k.arc(2.5,m-2.5,2.5,0,Math.PI,false);k.closePath();k.fill()}};j.prototype={init:function(k,l){this.maxSize=this.dir=="horizontal"?this.wrapper.clientWidth:this.wrapper.clientHeight;this.size=Math.round(this.maxSize*this.maxSize/l);this.maxScroll=this.maxSize-this.size;this.toWrapperProp=this.maxScroll/(k-l);this.bar.style[this.dir=="horizontal"?"width":"height"]=this.size+"px"},setPosition:function(l,k){if(!k&&this.wrapper.style.opacity!="1"){this.show()}l=this.toWrapperProp*l;if(l<0){l=this.shrink?l+l*3:0;if(this.size+l<5){l=-this.size+5}}else{if(l>this.maxScroll){l=this.shrink?l+(l-this.maxScroll)*3:this.maxScroll;if(this.size+this.maxScroll-l<5){l=this.size+this.maxScroll-5}}}if(d){l=this.dir=="horizontal"?"translate3d("+Math.round(l)+"px,0,0)":"translate3d(0,"+Math.round(l)+"px,0)"}else{l=this.dir=="horizontal"?"translate("+Math.round(l)+"px,0)":"translate(0,"+Math.round(l)+"px)"}this.bar.style.webkitTransform=l},show:function(){if(d){this.wrapper.style.webkitTransitionDelay="0"}this.wrapper.style.opacity="1"},hide:function(){if(d){this.wrapper.style.webkitTransitionDelay="200ms"}this.wrapper.style.opacity="0"},remove:function(){this.wrapper.parentNode.removeChild(this.wrapper);return null}};var d=("WebKitCSSMatrix" in window&&"m11" in new WebKitCSSMatrix()),b=navigator.appVersion.match(/iphone/gi)?true:false,c=navigator.appVersion.match(/ipad/gi)?true:false,g=navigator.appVersion.match(/android/gi)?true:false,a=b||c||g,f=a?"touchstart":"mousedown",h=a?"touchmove":"mousemove",e=a?"touchend":"mouseup";window.iScroll=i})();

//Media
/*
 * jQuery Media Plugin for converting elements into rich media content.
 *
 * Examples and documentation at: http://malsup.com/jquery/media/
 * Copyright (c) 2007-2008 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * @author: M. Alsup
 * @version: 0.92 (24-SEP-2009)
 * @requires jQuery v1.1.2 or later
 * $Id: jquery.media.js 2460 2007-07-23 02:53:15Z malsup $
 *
 * Supported Media Players:
 *	- Flash
 *	- Quicktime
 *	- Real Player
 *	- Silverlight
 *	- Windows Media Player
 *	- iframe
 *
 * Supported Media Formats:
 *	 Any types supported by the above players, such as:
 *	 Video: asf, avi, flv, mov, mpg, mpeg, mp4, qt, smil, swf, wmv, 3g2, 3gp
 *	 Audio: aif, aac, au, gsm, mid, midi, mov, mp3, m4a, snd, rm, wav, wma
 *	 Other: bmp, html, pdf, psd, qif, qtif, qti, tif, tiff, xaml
 *
 * Thanks to Mark Hicken and Brent Pedersen for helping me debug this on the Mac!
 * Thanks to Dan Rossi for numerous bug reports and code bits!
 * Thanks to Skye Giordano for several great suggestions!
 * Thanks to Richard Connamacher for excellent improvements to the non-IE behavior!
 */
;(function($) {

/**
 * Chainable method for converting elements into rich media.
 *
 * @param options
 * @param callback fn invoked for each matched element before conversion
 * @param callback fn invoked for each matched element after conversion
 */
$.fn.media = function(options, f1, f2) {
	if (options == 'undo') {
		return this.each(function() {
			var $this = $(this);
			var html = $this.data('media.origHTML');
			if (html)
				$this.replaceWith(html);
		});
	}
	
	return this.each(function() {
		if (typeof options == 'function') {
			f2 = f1;
			f1 = options;
			options = {};
		}
		var o = getSettings(this, options);
		// pre-conversion callback, passes original element and fully populated options
		if (typeof f1 == 'function') f1(this, o);

		var r = getTypesRegExp();
		var m = r.exec(o.src.toLowerCase()) || [''];

		o.type ? m[0] = o.type : m.shift();
		for (var i=0; i < m.length; i++) {
			fn = m[i].toLowerCase();
			if (isDigit(fn[0])) fn = 'fn' + fn; // fns can't begin with numbers
			if (!$.fn.media[fn])
				continue;  // unrecognized media type
			// normalize autoplay settings
			var player = $.fn.media[fn+'_player'];
			if (!o.params) o.params = {};
			if (player) {
				var num = player.autoplayAttr == 'autostart';
				o.params[player.autoplayAttr || 'autoplay'] = num ? (o.autoplay ? 1 : 0) : o.autoplay ? true : false;
			}
			var $div = $.fn.media[fn](this, o);

			$div.css('backgroundColor', o.bgColor).width(o.width);
			
			if (o.canUndo) {
				var $temp = $('<div></div>').append(this);
				$div.data('media.origHTML', $temp.html()); // store original markup
			}
			
			// post-conversion callback, passes original element, new div element and fully populated options
			if (typeof f2 == 'function') f2(this, $div[0], o, player.name);
			break;
		}
	});
};

/**
 * Non-chainable method for adding or changing file format / player mapping
 * @name mapFormat
 * @param String format File format extension (ie: mov, wav, mp3)
 * @param String player Player name to use for the format (one of: flash, quicktime, realplayer, winmedia, silverlight or iframe
 */
$.fn.media.mapFormat = function(format, player) {
	if (!format || !player || !$.fn.media.defaults.players[player]) return; // invalid
	format = format.toLowerCase();
	if (isDigit(format[0])) format = 'fn' + format;
	$.fn.media[format] = $.fn.media[player];
	$.fn.media[format+'_player'] = $.fn.media.defaults.players[player];
};

// global defautls; override as needed
$.fn.media.defaults = {
	standards:  false,      // use object tags only (no embeds for non-IE browsers)
	canUndo:    true,       // tells plugin to store the original markup so it can be reverted via: $(sel).mediaUndo()
	width:		400,
	height:		400,
	autoplay:	0,		   	// normalized cross-player setting
	bgColor:	'#ffffff', 	// background color
	params:		{ wmode: 'transparent'},	// added to object element as param elements; added to embed element as attrs
	attrs:		{},			// added to object and embed elements as attrs
	flvKeyName: 'file', 	// key used for object src param (thanks to Andrea Ercolino)
	flashvars:	{},			// added to flash content as flashvars param/attr
	flashVersion:	'7',	// required flash version
	expressInstaller: null,	// src for express installer

	// default flash video and mp3 player (@see: http://jeroenwijering.com/?item=Flash_Media_Player)
	flvPlayer:	 'mediaplayer.swf',
	mp3Player:	 'mediaplayer.swf',

	// @see http://msdn2.microsoft.com/en-us/library/bb412401.aspx
	silverlight: {
		inplaceInstallPrompt: 'true', // display in-place install prompt?
		isWindowless:		  'true', // windowless mode (false for wrapping markup)
		framerate:			  '24',	  // maximum framerate
		version:			  '0.9',  // Silverlight version
		onError:			  null,	  // onError callback
		onLoad:			      null,   // onLoad callback
		initParams:			  null,	  // object init params
		userContext:		  null	  // callback arg passed to the load callback
	}
};

// Media Players; think twice before overriding
$.fn.media.defaults.players = {
	flash: {
		name:		 'flash',
		title:		 'Flash',
		types:		 'flv,mp3,swf',
		mimetype:	 'application/x-shockwave-flash',
		pluginspage: 'http://www.adobe.com/go/getflashplayer',
		ieAttrs: {
			classid:  'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',
			type:	  'application/x-oleobject',
			codebase: 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + $.fn.media.defaults.flashVersion
		}
	},
	quicktime: {
		name:		 'quicktime',
		title:		 'QuickTime',
		mimetype:	 'video/quicktime',
		pluginspage: 'http://www.apple.com/quicktime/download/',
		types:		 'aif,aiff,aac,au,bmp,gsm,m4v,mov,mid,midi,mpg,mpeg,mp4,m4a,psd,qt,qtif,qif,qti,snd,tif,tiff,wav,3g2,3gp',
		ieAttrs: {
			classid:  'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
			codebase: 'http://www.apple.com/qtactivex/qtplugin.cab'
		}
	},
	realplayer: {
		name:		  'real',
		title:		  'RealPlayer',
		types:		  'ra,ram,rm,rpm,rv,smi,smil',
		mimetype:	  'audio/x-pn-realaudio-plugin',
		pluginspage:  'http://www.real.com/player/',
		autoplayAttr: 'autostart',
		ieAttrs: {
			classid: 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'
		}
	},
	winmedia: {
		name:		  'winmedia',
		title:		  'Windows Media',
		types:		  'asx,asf,avi,wma,wmv',
		mimetype:	  $.browser.mozilla && isFirefoxWMPPluginInstalled() ? 'application/x-ms-wmp' : 'application/x-mplayer2',
		pluginspage:  'http://www.microsoft.com/Windows/MediaPlayer/',
		autoplayAttr: 'autostart',
		oUrl:		  'url',
		ieAttrs: {
			classid:  'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6',
			type:	  'application/x-oleobject'
		}
	},
	// special cases
	iframe: {
		name:  'iframe',
		types: 'html,pdf'
	},
	silverlight: {
		name:  'silverlight',
		types: 'xaml'
	}
};

//
//	everything below here is private
//


// detection script for FF WMP plugin (http://www.therossman.org/experiments/wmp_play.html)
// (hat tip to Mark Ross for this script)
function isFirefoxWMPPluginInstalled() {
	var plugs = navigator.plugins;
	for (var i = 0; i < plugs.length; i++) {
		var plugin = plugs[i];
		if (plugin['filename'] == 'np-mswmp.dll')
			return true;
	}
	return false;
}

var counter = 1;

for (var player in $.fn.media.defaults.players) {
	var types = $.fn.media.defaults.players[player].types;
	$.each(types.split(','), function(i,o) {
		if (isDigit(o[0])) o = 'fn' + o;
		$.fn.media[o] = $.fn.media[player] = getGenerator(player);
		$.fn.media[o+'_player'] = $.fn.media.defaults.players[player];
	});
};

function getTypesRegExp() {
	var types = '';
	for (var player in $.fn.media.defaults.players) {
		if (types.length) types += ',';
		types += $.fn.media.defaults.players[player].types;
	};
	return new RegExp('\\.(' + types.replace(/,/ig,'|') + ')\\b');
};

function getGenerator(player) {
	return function(el, options) {
		return generate(el, options, player);
	};
};

function isDigit(c) {
	return '0123456789'.indexOf(c) > -1;
};

// flatten all possible options: global defaults, meta, option obj
function getSettings(el, options) {
	options = options || {};
	var $el = $(el);
	var cls = el.className || '';
	// support metadata plugin (v1.0 and v2.0)
	var meta = $.metadata ? $el.metadata() : $.meta ? $el.data() : {};
	meta = meta || {};
	var w = meta.width	 || parseInt(((cls.match(/w:(\d+)/)||[])[1]||0));
	var h = meta.height || parseInt(((cls.match(/h:(\d+)/)||[])[1]||0));

	if (w) meta.width	= w;
	if (h) meta.height = h;
	if (cls) meta.cls = cls;

	var a = $.fn.media.defaults;
	var b = options;
	var c = meta;

	var p = { params: { bgColor: options.bgColor || $.fn.media.defaults.bgColor } };
	var opts = $.extend({}, a, b, c);
	$.each(['attrs','params','flashvars','silverlight'], function(i,o) {
		opts[o] = $.extend({}, p[o] || {}, a[o] || {}, b[o] || {}, c[o] || {});
	});

	if (typeof opts.caption == 'undefined') opts.caption = $el.text();

	// make sure we have a source!
	opts.src = opts.src || $el.attr('href') || $el.attr('src') || 'unknown';
	return opts;
};

//
//	Flash Player
//

// generate flash using SWFObject library if possible
$.fn.media.swf = function(el, opts) {
	if (!window.SWFObject && !window.swfobject) {
		// roll our own
		if (opts.flashvars) {
			var a = [];
			for (var f in opts.flashvars)
				a.push(f + '=' + opts.flashvars[f]);
			if (!opts.params) opts.params = {};
			opts.params.flashvars = a.join('&');
		}
		return generate(el, opts, 'flash');
	}

	var id = el.id ? (' id="'+el.id+'"') : '';
	var cls = opts.cls ? (' class="' + opts.cls + '"') : '';
	var $div = $('<div' + id + cls + '>');

	// swfobject v2+
	if (window.swfobject) {
		$(el).after($div).appendTo($div);
		if (!el.id) el.id = 'movie_player_' + counter++;

		// replace el with swfobject content
		swfobject.embedSWF(opts.src, el.id, opts.width, opts.height, opts.flashVersion,
			opts.expressInstaller, opts.flashvars, opts.params, opts.attrs);
	}
	// swfobject < v2
	else {
		$(el).after($div).remove();
		var so = new SWFObject(opts.src, 'movie_player_' + counter++, opts.width, opts.height, opts.flashVersion, opts.bgColor);
		if (opts.expressInstaller) so.useExpressInstall(opts.expressInstaller);

		for (var p in opts.params)
			if (p != 'bgColor') so.addParam(p, opts.params[p]);
		for (var f in opts.flashvars)
			so.addVariable(f, opts.flashvars[f]);
		so.write($div[0]);
	}

	if (opts.caption) $('<div>').appendTo($div).html(opts.caption);
	return $div;
};

// map flv and mp3 files to the swf player by default
$.fn.media.flv = $.fn.media.mp3 = function(el, opts) {
	var src = opts.src;
	var player = /\.mp3\b/i.test(src) ? $.fn.media.defaults.mp3Player : $.fn.media.defaults.flvPlayer;
	var key = opts.flvKeyName;
	src = encodeURIComponent(src);
	opts.src = player;
	opts.src = opts.src + '?'+key+'=' + (src);
	var srcObj = {};
	srcObj[key] = src;
	opts.flashvars = $.extend({}, srcObj, opts.flashvars );
	return $.fn.media.swf(el, opts);
};

//
//	Silverlight
//
$.fn.media.xaml = function(el, opts) {
	if (!window.Sys || !window.Sys.Silverlight) {
		if ($.fn.media.xaml.warning) return;
		$.fn.media.xaml.warning = 1;
		alert('You must include the Silverlight.js script.');
		return;
	}

	var props = {
		width: opts.width,
		height: opts.height,
		background: opts.bgColor,
		inplaceInstallPrompt: opts.silverlight.inplaceInstallPrompt,
		isWindowless: opts.silverlight.isWindowless,
		framerate: opts.silverlight.framerate,
		version: opts.silverlight.version
	};
	var events = {
		onError: opts.silverlight.onError,
		onLoad: opts.silverlight.onLoad
	};

	var id1 = el.id ? (' id="'+el.id+'"') : '';
	var id2 = opts.id || 'AG' + counter++;
	// convert element to div
	var cls = opts.cls ? (' class="' + opts.cls + '"') : '';
	var $div = $('<div' + id1 + cls + '>');
	$(el).after($div).remove();

	Sys.Silverlight.createObjectEx({
		source: opts.src,
		initParams: opts.silverlight.initParams,
		userContext: opts.silverlight.userContext,
		id: id2,
		parentElement: $div[0],
		properties: props,
		events: events
	});

	if (opts.caption) $('<div>').appendTo($div).html(opts.caption);
	return $div;
};

//
// generate object/embed markup
//
function generate(el, opts, player) {
	var $el = $(el);
	var o = $.fn.media.defaults.players[player];

	if (player == 'iframe') {
		var o = $('<iframe' + ' width="' + opts.width + '" height="' + opts.height + '" >');
		o.attr('src', opts.src);
		o.css('backgroundColor', o.bgColor);
	}
	else if ($.browser.msie) {
		var a = ['<object width="' + opts.width + '" height="' + opts.height + '" '];
		for (var key in opts.attrs)
			a.push(key + '="'+opts.attrs[key]+'" ');
		for (var key in o.ieAttrs || {}) {
			var v = o.ieAttrs[key];
			if (key == 'codebase' && window.location.protocol == 'https:')
				v = v.replace('http','https');
			a.push(key + '="'+v+'" ');
		}
		a.push('></ob'+'ject'+'>');
		var p = ['<param name="' + (o.oUrl || 'src') +'" value="' + opts.src + '">'];
		for (var key in opts.params)
			p.push('<param name="'+ key +'" value="' + opts.params[key] + '">');
		var o = document.createElement(a.join(''));
		for (var i=0; i < p.length; i++)
			o.appendChild(document.createElement(p[i]));
	}
	else if (o.standards) {
		// Rewritten to be standards compliant by Richard Connamacher
		var a = ['<object type="' + o.mimetype +'" width="' + opts.width + '" height="' + opts.height +'"'];
		if (opts.src) a.push(' data="' + opts.src + '" ');
		a.push('>');
		a.push('<param name="' + (o.oUrl || 'src') +'" value="' + opts.src + '">');
		for (var key in opts.params) {
			if (key == 'wmode' && player != 'flash') // FF3/Quicktime borks on wmode
				continue;
			a.push('<param name="'+ key +'" value="' + opts.params[key] + '">');
		}
		// Alternate HTML
		a.push('<div><p><strong>'+o.title+' Required</strong></p><p>'+o.title+' is required to view this media. <a href="'+o.pluginspage+'">Download Here</a>.</p></div>');
		a.push('</ob'+'ject'+'>');
	}
	 else {
	        var a = ['<embed width="' + opts.width + '" height="' + opts.height + '" style="display:block"'];
	        if (opts.src) a.push(' src="' + opts.src + '" ');
	        for (var key in opts.attrs)
	            a.push(key + '="'+opts.attrs[key]+'" ');
	        for (var key in o.eAttrs || {})
	            a.push(key + '="'+o.eAttrs[key]+'" ');
	        for (var key in opts.params) {
	            if (key == 'wmode' && player != 'flash') // FF3/Quicktime borks on wmode
	            	continue;
	            a.push(key + '="'+opts.params[key]+'" ');
	        }
	        a.push('></em'+'bed'+'>');
	    }	
	// convert element to div
	var id = el.id ? (' id="'+el.id+'"') : '';
	var cls = opts.cls ? (' class="' + opts.cls + '"') : '';
	var $div = $('<div' + id + cls + '>');
	$el.after($div).remove();
	($.browser.msie || player == 'iframe') ? $div.append(o) : $div.html(a.join(''));
	if (opts.caption) $('<div>').appendTo($div).html(opts.caption);
	return $div;
};
})(jQuery);




//jQuery.ptibox
;(function(jQuery) {

	jQuery.fn.fixPNG = function() {
		return this.each(function () {
			var image = jQuery(this).css('backgroundImage');

			if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
				image = RegExp.$1;
				jQuery(this).css({
					'backgroundImage': 'none',
					'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=" + (jQuery(this).css('backgroundRepeat') == 'no-repeat' ? 'crop' : 'scale') + ", src='" + image + "')"
				}).each(function () {
					var position = jQuery(this).css('position');
					if (position != 'absolute' && position != 'relative')
						jQuery(this).css('position', 'relative');
				});
			}
		});
	};

	var elem, opts, busy = false, playing = false, imagePreloader = new Image, loadingTimer, loadingFrame = 1, imageRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i;
	var isIE = (jQuery.browser.msie && parseInt(jQuery.browser.version.substr(0,1)) < 7);

	jQuery.fn.ptibox = function(settings) {
		settings = jQuery.extend({}, jQuery.fn.ptibox.defaults, settings);
                
		var matchedGroup = this;

		function _initialize() {
			elem = this;
			opts = settings;

			_start();

			return false;
		};

		function _start() {
			if (busy) return;

			if (jQuery.isFunction(opts.callbackOnStart)) {
				opts.callbackOnStart();
			}
            			
			if (settings.itemArray.length > 0) {
				opts.itemArray = settings.itemArray;
			    opts.itemCurrent	= 0;

			} else {
			    opts.itemArray		= [];
			    opts.itemCurrent	= 0;

				var item = {};

				if (!elem.rel || elem.rel == '') {
					var item = {href: elem.href, title: elem.title};

					if (jQuery(elem).children("img:first").length) {
						item.orig = jQuery(elem).children("img:first");
					}
                                        
					opts.itemArray.push( item );

				} else {
					
					var subGroup = jQuery(matchedGroup).filter("a[rel=" + elem.rel + "]");

					var item = {};

					for (var i = 0; i < subGroup.length; i++) {
						item = {href: subGroup[i].href, title: subGroup[i].title};

						if (jQuery(subGroup[i]).children("img:first").length) {
							item.orig = jQuery(subGroup[i]).children("img:first");
						}

						opts.itemArray.push( item );
					}

					while ( opts.itemArray[ opts.itemCurrent ].href != elem.href ) {
						opts.itemCurrent++;
					}
				}
			}

			if (opts.overlayShow) {
				if (isIE) {
					//jQuery('embed, object, select').css('visibility', 'hidden');
					jQuery('select').css('visibility', 'hidden');
				}

				jQuery("#ptibox_overlay").css('opacity', opts.overlayOpacity).show();
			}

			jQuery.fn.ptibox.changeItem();
		};

        _initialize();
        
		return this.unbind('click');
	};


	jQuery.fn.ptibox.changeItem =  function() {
		jQuery("#ptibox_right, #ptibox_left, #ptibox_close, #ptibox_info, #ptibox_play, #ptibox_title, #ptibox_caption").hide();

		var href = opts.itemArray[opts.itemCurrent].href;
		var htmlContent = opts.itemArray[opts.itemCurrent].htmlContent;
		var htmlButton = opts.itemArray[opts.itemCurrent].htmlButton;
        var width = opts.frameWidth;
        var height = opts.frameHeight;
		
		if (opts.itemArray[opts.itemCurrent].frameWidth != null)
		{
		    width = opts.itemArray[opts.itemCurrent].frameWidth;
        }
        
		if (opts.itemArray[opts.itemCurrent].frameHeight != null)
		{
		    height = opts.itemArray[opts.itemCurrent].frameHeight;
        }
        


        if (htmlContent == null)
        {
            htmlContent = "";
        }

        if (htmlContent.length > 0)
        {
            //htmlContent as parameter            
			jQuery.fn.ptibox.setContent('<div id="ptibox_div"><div id="ptibox_div_inner">' + htmlContent + '</div></div>', htmlButton, width, height);                
        }
		else if (href.match(/#/))
		{
		    // Inline Content
			var target = window.location.href.split('#')[0]; target = href.replace(target, ''); target = target.substr(target.indexOf('#'));

			jQuery.fn.ptibox.setContent('<div id="ptibox_div"><div id="ptibox_div_inner">' + jQuery(target).html() + '</div></div>', htmlButton, width, height);

		}
		else if (href.match(imageRegExp))
		{
		    // Images
			imagePreloader = new Image; imagePreloader.src = href;

			if (imagePreloader.complete)
			{
				jQuery.fn.ptibox.proceedImage();

			} 
			else
			{
				jQuery.fn.ptibox.showLoading();

				jQuery(imagePreloader).unbind().bind('load', function() {
                    jQuery.fn.ptibox.hideLoading();
					jQuery.fn.ptibox.proceedImage();
				});
			}
        }
        else if (href.match("iframe") /*|| elem.className.indexOf("iframe") >= 0*/)
        {
	        //iframe
		    jQuery.fn.ptibox.setContent('<iframe id="ptibox_frame" onload="jQuery.fn.ptibox.showIframe()" name="ptibox_iframe' + Math.round(Math.random()*1000) + '" frameborder="0" hspace="0" src="' + href + '"></iframe>', htmlButton, width, height);
        }
        else if (href.match("callback"))
        {
	        //jsonp
			jQuery.fn.ptibox.showLoading();

			jQuery.getJSON(href, function(data) {
                if (data.returnStatus != 1)
                {
                    ptiTrace("JSON ERROR: " + data.returnMessage);
                    return;
                }
			
                jQuery.fn.ptibox.hideLoading();
				jQuery.fn.ptibox.setContent( '<div id="ptibox_div"><div id="ptibox_div_inner">' + data.returnData + '</div></div>', htmlButton, width, height );
			});				
		}
		else
		{
		    //regular ajax
			jQuery.fn.ptibox.showLoading();

			jQuery.get(href, function(data) {
                jQuery.fn.ptibox.hideLoading();
				jQuery.fn.ptibox.setContent( '<div id="ptibox_div"><div id="ptibox_div_inner">' + data + '</div></div>', htmlButton, width, height );
			});
		}
	};

	jQuery.fn.ptibox.proceedImage =  function() {
		if (opts.imageScale) {
			var w = jQuery.fn.ptibox.getViewport();

			var r = Math.min(Math.min(w[0] - 36, imagePreloader.width) / imagePreloader.width, Math.min(w[1] - 60, imagePreloader.height) / imagePreloader.height);

			var width = Math.round(r * imagePreloader.width);
			var height = Math.round(r * imagePreloader.height);

		} else {
			var width = imagePreloader.width;
			var height = imagePreloader.height;
		}

		jQuery.fn.ptibox.setContent('<img alt="" id="ptibox_img" src="' + imagePreloader.src + '" />', "", width, height);
	};

	jQuery.fn.ptibox.preloadNeighborImages =  function() {
		if ((opts.itemArray.length -1) > opts.itemCurrent) {
			var href = opts.itemArray[opts.itemCurrent + 1].href;

			if (href.match(imageRegExp)) {
				objNext = new Image();
				objNext.src = href;
			}
		}

		if (opts.itemCurrent > 0) {
			var href = opts.itemArray[opts.itemCurrent -1].href;

			if (href.match(imageRegExp)) {
				objNext = new Image();
				objNext.src = href;
			}
		}
	};

	jQuery.fn.ptibox.setContent =  function(value, button, width, height) {
		busy = true;

		var pad = opts.padding;
		var heightbutton = 40;
		var heightdiv = (height-heightbutton);


		if (isIE) {
			jQuery("#ptibox_content")[0].style.removeExpression("height");
			jQuery("#ptibox_content")[0].style.removeExpression("width");
		}

		if (pad > 0) {
			width	+= pad * 2;
			height	+= pad * 2;

			jQuery("#ptibox_content").css({
				'top'		: pad + 'px',
				'right'		: pad + 'px',
				'bottom'	: pad + 'px',
				'left'		: pad + 'px',
				'width'		: 'auto',
				'height'	: 'auto'
			});

			if (isIE) {
				jQuery("#ptibox_content")[0].style.setExpression('height', '(this.parentNode.clientHeight - 20)');
				jQuery("#ptibox_content")[0].style.setExpression('width', '(this.parentNode.clientWidth - 20)');
			}

		} else {
			jQuery("#ptibox_content").css({
				'top'		: 0,
				'right'		: 0,
				'bottom'	: 0,
				'left'		: 0,
				'width'		: '100%',
				'height'	: '100%'
			});
		}

		if (jQuery("#ptibox_outer").is(":visible") && width == jQuery("#ptibox_outer").width() && height == jQuery("#ptibox_outer").height()) {
			jQuery("#ptibox_content").fadeOut("fast", function() {
			    
			    jQuery("#ptibox_button").html(button);
			    
	            if (button)
	            {
	                // Resize Content
	                jQuery("#ptibox_div").height(heightdiv);
	                jQuery("#ptibox_button").height(heightbutton);
	                jQuery("#ptibox_button").css({'display':'block'});
	            }
	            else
	            {
	                jQuery("#ptibox_button").css({'display':'none'});	            
	            }
	            
				jQuery("#ptibox_content").empty().append(jQuery(value)).fadeIn("normal", function() {
					jQuery.fn.ptibox.finish();
				});				
			});

            
			return;
		}

		var w = jQuery.fn.ptibox.getViewport();

		var itemLeft	= (width + 36)	> w[0] ? w[2] : (w[2] + Math.round((w[0] - width - 36) / 2));
		var itemTop		= (height + 50)	> w[1] ? w[3] : (w[3] + Math.round((w[1] - height - 50) / 2));


		var itemOpts = {
			'left':		itemLeft,
			'top':		itemTop,
			'width':	width + 'px',
			'height':	height + 'px'
		};

		if (jQuery("#ptibox_outer").is(":visible")) {

			jQuery("#ptibox_content").fadeOut("normal", function() {
				jQuery("#ptibox_content").empty();
				jQuery("#ptibox_outer").animate(itemOpts, opts.zoomSpeedChange, opts.easingChange, function() {
			        jQuery("#ptibox_button").html(button);
	                if (button)
	                {
	                    // Resize Content
	                    jQuery("#ptibox_div").height(heightdiv);
	                    jQuery("#ptibox_button").height(heightbutton);
	                    jQuery("#ptibox_button").css({'display':'block'});
	                }
	                else
	                {
	                    jQuery("#ptibox_button").css({'display':'none'});
                    }
					jQuery("#ptibox_content").append(jQuery(value)).fadeIn("normal", function() {
						jQuery.fn.ptibox.finish();
					});                
				});
			});
			
		} else {
			if (opts.zoomSpeedIn > 0 && opts.itemArray[opts.itemCurrent].orig !== undefined) {
			    jQuery("#ptibox_button").html(button);
				jQuery("#ptibox_content").empty().append(jQuery(value));
	            if (button)
	            {
	                // Resize Content
	                jQuery("#ptibox_div").height(heightdiv);
                    jQuery("#ptibox_button").height(heightbutton);
                    jQuery("#ptibox_button").css({'display':'block'});
                }
                else
                {
                    jQuery("#ptibox_button").css({'display':'none'});
                }

				var orig_item	= opts.itemArray[opts.itemCurrent].orig;
				var orig_pos	= jQuery.fn.ptibox.getPosition(orig_item);

				jQuery("#ptibox_outer").css({
					'left':		(orig_pos.left - 18) + 'px',
					'top':		(orig_pos.top  - 18) + 'px',
					'width':	jQuery(orig_item).width(),
					'height':	jQuery(orig_item).height()
				});

				if (opts.zoomOpacity) {
					itemOpts.opacity = 'show';
				}

				jQuery("#ptibox_outer").animate(itemOpts, opts.zoomSpeedIn, opts.easingIn, function() {
					jQuery.fn.ptibox.finish();
				});

			} else {

			    jQuery("#ptibox_button").html(button);
				jQuery("#ptibox_content").hide().empty().append(jQuery(value)).show();
	            if (button)
	            {
	                // Resize Content
	                jQuery("#ptibox_div").height(heightdiv);
                    jQuery("#ptibox_button").height(heightbutton);
                    jQuery("#ptibox_button").css({'display':'block'});
                }
                else
                {
                    jQuery("#ptibox_button").css({'display':'none'});
                }
				jQuery("#ptibox_outer").css(itemOpts).fadeIn("normal", function() {
					jQuery.fn.ptibox.finish();
				});
			}
		}
	};

	jQuery.fn.ptibox.setNavigation =  function() {
        jQuery("#ptibox_info").hover(function() {
            jQuery('#ptibox_caption').css({ visibility: "visible" });
        }, function() {

            jQuery('#ptibox_caption').css({ visibility: "hidden" });
        });

		if (opts.itemCurrent != 0) {
			jQuery("#ptibox_left, #ptibox_left_ico").unbind().bind("click", function(e) {
				e.stopPropagation();

				opts.itemCurrent--;
				jQuery.fn.ptibox.changeItem();

				return false;
			});

			jQuery("#ptibox_left").show();
		}

		if (opts.itemCurrent != ( opts.itemArray.length -1)) {
			jQuery("#ptibox_right, #ptibox_right_ico").unbind().bind("click", function(e) {
				e.stopPropagation();

				opts.itemCurrent++;
				jQuery.fn.ptibox.changeItem();

				return false;
			});

			jQuery("#ptibox_right").show();
		}

        if (opts.itemArray.length > 1) {
            jQuery("#ptibox_play").unbind().bind("click", function(e) {
                e.stopPropagation();

                jQuery.fn.ptibox.toggleSlideshow();

                return false;
            });

            jQuery("#ptibox_play").show();
        }
	};

	jQuery.fn.ptibox.toggleSlideshow =  function() {
        if (playing) {
            jQuery.fn.ptibox.stopSlideshow();
        }
        else {
            jQuery.fn.ptibox.startSlideshow();
        }
    }

	jQuery.fn.ptibox.startSlideshow =  function() {
        if (!playing) {
            playing = !playing;

            jQuery("#ptibox_play").addClass("ptibox_pause");
            jQuery("#ptibox_play").removeClass("ptibox_play");

            intInterval = window.setInterval(function() {
                if (opts.itemCurrent == opts.itemArray.length - 1) {
                    opts.itemCurrent = 0;
                }
                else {
                    opts.itemCurrent++;
                }

                jQuery.fn.ptibox.changeItem();
            }, 3000);
        }
    }

	jQuery.fn.ptibox.stopSlideshow =  function() {
        if (playing)
        {
            playing = !playing;

            jQuery("#ptibox_play").addClass("ptibox_play");
            jQuery("#ptibox_play").removeClass("ptibox_pause");

            intInterval = window.clearInterval(intInterval);
        }
    }

	jQuery.fn.ptibox.finish =  function() {
		jQuery.fn.ptibox.setNavigation();

		jQuery.fn.ptibox.preloadNeighborImages();

		jQuery(document).keydown(function(e) {
			if (e.keyCode == 27) {
			    jQuery.fn.ptibox.stopSlideshow();
				jQuery.fn.ptibox.close();
				jQuery(document).unbind("keydown");

			} else if(e.keyCode == 37 && opts.itemCurrent != 0) {
				opts.itemCurrent--;
				jQuery.fn.ptibox.changeItem();
				jQuery(document).unbind("keydown");

			} else if(e.keyCode == 39 && opts.itemCurrent != (opts.itemArray.length - 1)) {
				opts.itemCurrent++;
				jQuery.fn.ptibox.changeItem();
				jQuery(document).unbind("keydown");
			}
		});

		if (opts.centerOnScroll) {
			jQuery(window).bind("resize scroll", jQuery.fn.ptibox.scrollBox);
		} else {
			jQuery("div#ptibox_outer").css("position", "absolute");
		}

		if (opts.hideOnContentClick) {			    
		    jQuery("#ptibox_wrap").click(jQuery.fn.ptibox.stopSlideshow);
			jQuery("#ptibox_wrap").click(jQuery.fn.ptibox.close);
		}


        // shop content clicks closing
		//jQuery("#ptibox_inner").bind("click", function(){alert("click");return false;});
		
		jQuery("#ptibox_overlay, #ptibox_close").bind("click", jQuery.fn.ptibox.stopSlideshow);
		jQuery("#ptibox_overlay, #ptibox_close").bind("click", jQuery.fn.ptibox.close);

        if (opts.showCloseButton)
        {
            jQuery("#ptibox_close").show();
        }
        else
        {
            jQuery("#ptibox_close").hide();
        }
                    
        if (opts.showInfoButton)
        {
            jQuery("#ptibox_info").show();
        }
        else
        {
            jQuery("#ptibox_info").hide();
        }

        if (opts.showPlayButton)
        {
            jQuery("#ptibox_play").show();
        }
        else
        {
            jQuery("#ptibox_play").hide();
        }
                
        jQuery("#ptibox_caption").show();

        if (opts.itemArray[opts.itemCurrent].title !== undefined && opts.itemArray[opts.itemCurrent].title.length > 0) {
            //jQuery('#ptibox_title div').html(opts.itemArray[ opts.itemCurrent ].title);
            //jQuery('#ptibox_title').show();

            var strTitle = "";

            if (opts.itemArray.length > 1) {
                strTitle = "<strong>Image " + (opts.itemCurrent + 1) + " of " + opts.itemArray.length + " </strong><br />" + opts.itemArray[opts.itemCurrent].title;
            }
            else {
                strTitle = opts.itemArray[opts.itemCurrent].title;
            }

            jQuery('#ptibox_caption_inner').html(strTitle);
            //jQuery('#ptibox_title').show();
        }

		if (opts.overlayShow && isIE) {
			//jQuery('embed, object, select', jQuery('#ptibox_content')).css('visibility', 'visible');
			jQuery('select', jQuery('#ptibox_content')).css('visibility', 'visible');
		}

        if (pitIsTouch && jQuery("#ptibox_div_inner").html())
        {
            //iPhone, iPad, or Android and there is some content			
			document.addEventListener('touchmove', jQuery.fn.ptibox.preventDefault, false);            
            iScrollScroller = new iScroll("ptibox_div_inner");            
        }        

		if (jQuery.isFunction(opts.callbackOnShow)) {
			opts.callbackOnShow();
		}

		busy = false;
	};



	jQuery.fn.ptibox.preventDefault = function(e){
		// used by touch
		e.preventDefault();
	}


	jQuery.fn.ptibox.scrollBox = function() {
		var pos = jQuery.fn.ptibox.getViewport();

		jQuery("#ptibox_outer").css('left', ((jQuery("#ptibox_outer").width()	+ 36) > pos[0] ? pos[2] : pos[2] + Math.round((pos[0] - jQuery("#ptibox_outer").width()	- 36)	/ 2)));
		jQuery("#ptibox_outer").css('top',  ((jQuery("#ptibox_outer").height()	+ 50) > pos[1] ? pos[3] : pos[3] + Math.round((pos[1] - jQuery("#ptibox_outer").height()	- 50)	/ 2)));
	};

	jQuery.fn.ptibox.getNumeric = function(el, prop) {
		return parseInt(jQuery.curCSS(el.jquery?el[0]:el,prop,true))||0;
	};

	jQuery.fn.ptibox.getPosition = function(el) {
		var pos = el.offset();

		pos.top	+= jQuery.fn.ptibox.getNumeric(el, 'paddingTop');
		pos.top	+= jQuery.fn.ptibox.getNumeric(el, 'borderTopWidth');

		pos.left += jQuery.fn.ptibox.getNumeric(el, 'paddingLeft');
		pos.left += jQuery.fn.ptibox.getNumeric(el, 'borderLeftWidth');

		return pos;
	};

	jQuery.fn.ptibox.showIframe = function() {
        jQuery.fn.ptibox.hideLoading();
		jQuery("#ptibox_frame").show();
	};

	jQuery.fn.ptibox.getViewport = function() {
		return [jQuery(window).width(), jQuery(window).height(), jQuery(document).scrollLeft(), jQuery(document).scrollTop() ];
	};

	jQuery.fn.ptibox.animateLoading = function() {
		if (!jQuery("#ptibox_loading").is(':visible')){
			clearInterval(loadingTimer);
			return;
		}

		jQuery("#ptibox_loading > div").css('top', (loadingFrame * -40) + 'px');

		loadingFrame = (loadingFrame + 1) % 12;
	};

	jQuery.fn.ptibox.showLoading = function() {
		clearInterval(loadingTimer);

		var pos = jQuery.fn.ptibox.getViewport();

		jQuery("#ptibox_loading").css({'left': ((pos[0] - 40) / 2 + pos[2]), 'top': ((pos[1] - 40) / 2 + pos[3])}).show();

		jQuery("#ptibox_loading").bind('click', jQuery.fn.ptibox.close);

		loadingTimer = setInterval(jQuery.fn.ptibox.animateLoading, 66);
	};

	jQuery.fn.ptibox.hideLoading = function() {
		jQuery(".ptibox_loading").hide();	
	}

	jQuery.fn.ptibox.close = function(pobjCallbackOnClose) {
		busy = true;


        if (iScrollScroller)
        {
			document.removeEventListener('touchmove', jQuery.fn.ptibox.preventDefault, false);            
            iScrollScroller.destroy(true);
            iScrollScroller = null;
        }


        if (pobjCallbackOnClose != null)
        {
            opts.callbackOnClose = pobjCallbackOnClose;
        }        

		jQuery(imagePreloader).unbind();

		jQuery("#ptibox_overlay, #ptibox_inner, #ptibox_close, #ptibox_info, #ptibox_play").unbind();

		if (opts.hideOnContentClick) {
			jQuery("#ptibox_wrap").unbind();
		}

        jQuery("#ptibox_close, #ptibox_info, #ptibox_play, .ptibox_loading, #ptibox_left, #ptibox_right, #ptibox_title").hide();

		if (opts.centerOnScroll) {
			jQuery(window).unbind("resize scroll");
		}

		__cleanup = function() {
			jQuery("#ptibox_overlay, #ptibox_outer").hide();

			if (opts.centerOnScroll) {
				jQuery(window).unbind("resize scroll");
			}

			if (isIE) {
				//jQuery('embed, object, select').css('visibility', 'visible');
				jQuery('select').css('visibility', 'visible');
			}

			if (jQuery.isFunction(opts.callbackOnClose)) {
				opts.callbackOnClose();
			}

			busy = false;
		};

		if (jQuery("#ptibox_outer").is(":visible") !== false) {
			if (opts.zoomSpeedOut > 0 && opts.itemArray[opts.itemCurrent].orig !== undefined) {
				var orig_item	= opts.itemArray[opts.itemCurrent].orig;
				var orig_pos	= jQuery.fn.ptibox.getPosition(orig_item);

				var itemOpts = {
					'left':		(orig_pos.left - 18) + 'px',
					'top': 		(orig_pos.top  - 18) + 'px',
					'width':	jQuery(orig_item).width(),
					'height':	jQuery(orig_item).height()
				};

				if (opts.zoomOpacity) {
					itemOpts.opacity = 'hide';
				}

				jQuery("#ptibox_outer").stop(false, true).animate(itemOpts, opts.zoomSpeedOut, opts.easingOut, __cleanup);

			} else {
				jQuery("#ptibox_outer").stop(false, true).fadeOut("slow", __cleanup);
			}

		} else {
			__cleanup();
		}

		return false;
	};
	
	
	jQuery.fn.ptibox.showItem = function(objItem) {
	    // Clear out the current items and show the one whish is passed.
	    opts.itemArray = new Array();
	    opts.itemArray.push(objItem);
	    
	    jQuery.fn.ptibox.changeItem();
	    
	    jQuery.fn.ptibox.hideLoading();
	}
	
	


	jQuery.fn.ptibox.build = function() {
		var html = '';

        html += '<div id="ptibox_overlay"></div>';
        html += '<div id="ptibox_wrap">';
        html += '<div class="ptibox_loading" id="ptibox_loading"><div></div></div>';
        html += '<div id="ptibox_outer">';
        html += '<div id="ptibox_inner">';
        html += '<div id="ptibox_close"></div>';
        html += '<div id="ptibox_info"></div>';
        html += '<div id="ptibox_play" class="ptibox_play"></div>';
        html += '<div id="ptibox_bg"><div class="ptibox_bg ptibox_bg_n"></div><div class="ptibox_bg ptibox_bg_ne"></div><div class="ptibox_bg ptibox_bg_e"></div><div class="ptibox_bg ptibox_bg_se"></div><div class="ptibox_bg ptibox_bg_s"></div><div class="ptibox_bg ptibox_bg_sw"></div><div class="ptibox_bg ptibox_bg_w"></div><div class="ptibox_bg ptibox_bg_nw"></div></div>';
        html += '<a href="javascript:;" id="ptibox_left"><span class="ptibox_ico" id="ptibox_left_ico"></span></a><a href="javascript:;" id="ptibox_right"><span class="ptibox_ico" id="ptibox_right_ico"></span></a>';
        html += '<div id="ptibox_content"></div>';
        html += '<div id="ptibox_caption"><div id="ptibox_caption_inner"></div></div>';
        html += '<div id="ptibox_title"></div>';
        html += '<div id="ptibox_button"></div>';
        html += '</div>';
        html += '</div>';
        html += '</div>';

        jQuery(html).appendTo("body");

        jQuery('<table cellspacing="0" cellpadding="0" border="0"><tr><td class="ptibox_title" id="ptibox_title_left"></td><td class="ptibox_title" id="ptibox_title_main"><div></div></td><td class="ptibox_title" id="ptibox_title_right"></td></tr></table>').appendTo('#ptibox_title');
        
		if (isIE) {
			jQuery("#ptibox_inner").prepend('<iframe class="ptibox_bigIframe" scrolling="no" frameborder="0"></iframe>');
            jQuery("#ptibox_close, #ptibox_info, #ptibox_play, .ptibox_bg, .ptibox_title, .ptibox_ico").fixPNG();
		}
	};

	jQuery.fn.ptibox.defaults = {
		padding				:	10,
		imageScale			:	true,
		zoomOpacity			:	false,
		zoomSpeedIn			:	0,
		zoomSpeedOut		:	0,
		zoomSpeedChange		:	300,
		easingIn			:	'swing',
		easingOut			:	'swing',
		easingChange		:	'swing',
		frameWidth			:	500,
		frameHeight			:	400,
		overlayShow			:	true,
		overlayOpacity		:	0.3,
		hideOnContentClick	:	false,
		centerOnScroll		:	true,
		itemArray			:	[],
		callbackOnStart		:	null,
		callbackOnShow		:	null,
		callbackOnClose		:	null,
		showInfoButton      :   true,
		showPlayButton      :   true,
		showCloseButton     :   true
	};

    jQuery.fn.ptibox.itemDefaults = function (){
        var obj = new Object();
        
        obj.htmlContent         = ""; 
        obj.href                = ""; 
        obj.title               = ""; 
        obj.orig                = null; 
        obj.frameWidth          = 500; 
        obj.frameHeight         = 400    
        
        return obj;
    };

    jQuery.fn.ptibox.generateItemObject = function(htmlContent, htmlButton, href, title, orig, frameWidth, frameHeight)
    {
        return {htmlContent: htmlContent, htmlButton: htmlButton, href: href, title: title, orig: orig, frameWidth: frameWidth, frameHeight: frameHeight};
    }

	jQuery(document).ready(function() {
		jQuery.fn.ptibox.build();
	});

})(jQuery);


