var myWebServer = window.location.host;

function decodeStringAndDefaultIfEmpty( anEncodedTitle, aDefaultString )
{
    if ( ( !anEncodedTitle || anEncodedTitle == "" ) && ( aDefaultString || aDefaultString.length > 0 ) )
    {
        return aDefaultString;
    }
    var theTitle = trim( fullyDecodeUriComponent( anEncodedTitle ) ) ;
    theTitle = theTitle ? theTitle : aDefaultString;

    return theTitle;
}

function fbs_click( aQueryString )
{
    var theDict = parseQueryString( aQueryString );

    var theTitle = decodeStringAndDefaultIfEmpty( theDict["title"], "I made a Smilebox" );
    postToFacebookOldWay( theTitle, theDict["sendevent"] );
    return false;
}

function createFacebookUrl( aTitle, aSendEvent)
{
    var theEncodedTitle = encodeURIComponent( aTitle );
    var theEncodedUrl = encodeURIComponent( "http://secure.smilebox.com/ecom/openTheBox?sendevent="
                                     + aSendEvent + "&blogview=true" );

    var theFacebookPostCall = 'http://www.facebook.com/sharer.php?'
        + '&u=' + theEncodedUrl
        + '&t=' + theEncodedTitle;			

    return theFacebookPostCall ;
}

function postToFacebookOldWay( aTitle, aSendEvent )
{
    return window.open( createFacebookUrl( aTitle, aSendEvent ),
                       'facebook',
                       'toolbar=0,status=0,width=626,height=436');

}

function createBlogPropertiesDictionary( aQueryString )
{
    var theDict = parseQueryString( aQueryString );
    var theTitle = decodeStringAndDefaultIfEmpty( theDict["title"], "I made a Smilebox!" );
    theDict["title"] = theTitle;
    theDict["webserver"] = myWebServer;
    return theDict;
}

function generateBlogSnippetFromQueryString( aQueryString, isSmallSnippetFlag, anEncodeQueryStringFlag )
{
    var theDict = parseQueryString( aQueryString );
    var theTitle = decodeStringAndDefaultIfEmpty( theDict["title"], "I made a Smilebox!" );

    theDict["webserver"] = myWebServer;
    if ( isSmallSnippetFlag )
    {
        getImageDataForSmallBlogSnippet( theDict );
    }
    else
    {
        getImageDataForLargeBlogSnippet( theDict );
    }

    return generateBlogSnippet( theDict, theTitle, anEncodeQueryStringFlag );
}

function generateTwitterLinkFromQueryString( aQueryString )
{
    var theDict = parseQueryString( aQueryString );

    var theTitle = decodeStringAndDefaultIfEmpty( theDict["title"], "I made a Smilebox!" );

    theDict["twitterLinkWebserver"] = myWebServer;
        theDict["twitterLinkTitle"] = theTitle;
        theDict["twitterLinkPath"] = "/play/" + theDict["sendevent"]
                                + buildBlogQueryString( false );


    return theDict;
}

function getImageDataForSmallBlogSnippet( aBlogData )
{
    aBlogData["projectIconWidth"] = 386;
    aBlogData["projectIconHeight"] = 303;
    aBlogData["logoWidth"] = 386;
    aBlogData["logoHeight"] = 46;
    aBlogData["logoImageSource"] = "http://www.smilebox.com/globalImages/blogInstructions/blogLogoSmileboxSmall.gif";
}

function getImageDataForLargeBlogSnippet( aBlogData )
{
    aBlogData["projectIconWidth"] = 420;
    aBlogData["projectIconHeight"] = 330;
    aBlogData["logoWidth"] = 420;
    aBlogData["logoHeight"] = 46;
    aBlogData["logoImageSource"] = "http://www.smilebox.com/globalImages/blogInstructions/blogLogoSmilebox.gif";
}

function getDesignPageUrl( aBlogData, aDesignType )
{
    var thePartner = aBlogData["partner"];
    var theDesignPageUrl = "http://www.smilebox.com/" + getLinkTarget( aDesignType );
    if ( thePartner == "hallmark" || thePartner == "bigfishgames" )
    {
        theDesignPageUrl += "/?partner=" + thePartner;
    }
    return theDesignPageUrl;
}

function getHomePageUrl( aBlogData )
{
    var thePartner = aBlogData["partner"];
    var theHomePageUrl = "http://www.smilebox.com/?partner=" + thePartner + "&campaign=blog_snapshot";

    return theHomePageUrl;
}

function getDesignTypeName( aBlogData )
{
    var theName = aBlogData["designType"].toLowerCase();
    theName = theName.replace( /\+/gi, ' ' );
    return unescape(theName);
}

function generateMakeSmileboxLink( aBlogData, aDesignTypeName )
{
    var theAnchorText = getAnchorText( aDesignTypeName );
    var theAdjacentTextPhrase = pickRandomItemFromArray( myAdjacentText );
    var theFirstPart = getAdjacentTextFirstPart( theAdjacentTextPhrase, theAnchorText );
    if( theFirstPart.length == 0 )
    {
        theAnchorText = capitalize( theAnchorText );
    }
    return theFirstPart
        + getAnchorTag( aBlogData, theAnchorText, aDesignTypeName )
        + getAdjacentTextLastPart( theAdjacentTextPhrase );
}

function getAdjacentTextFirstPart( anAdjacentTextPhrase, anAnchorText )
{
    return replaceAandAnInPhraseForNextWords( anAdjacentTextPhrase[ 0 ], anAnchorText );
}

function getAdjacentTextLastPart( anAdjacentTextPhrase )
{
    return anAdjacentTextPhrase[ 1 ];
}

function capitalize( aStringToCapitalize )
{
    if ( aStringToCapitalize.length == 0 )
    {
        return "";
    }
    return aStringToCapitalize.charAt(0).toUpperCase()
            + aStringToCapitalize.substr( 1, aStringToCapitalize.length - 1);
}

function replaceAandAnInPhraseForNextWords( aPhraseToFixup, aNextWords )
{
    var theReplacement = ( startsWithAVowel( aNextWords ) ) ? "an" : "a";
    aPhraseToFixup = aPhraseToFixup.replace( /a\|an/i, theReplacement );
    aPhraseToFixup = capitalize( aPhraseToFixup );
    return aPhraseToFixup;
}

function startsWithAVowel( aString )
{
    if( aString.length == 0 )
    {
        return false;
    }

    return aString.charAt(0) == 'a'
            || aString.charAt(0) == 'e'
            || aString.charAt(0) == 'i'
            || aString.charAt(0) == 'o'
            || aString.charAt(0) == 'u';
}

function getAnchorTag( aBlogData, anAnchorText, aDesignType )
{
    if ( 0 == Math.floor( Math.random() * 4 ) )
    {
        return anAnchorText;
    }
    var theDesignPageUrl = getDesignPageUrl( aBlogData, aDesignType );
    return "<a href=\"" + theDesignPageUrl + "\" target=\"_blank\">"
                      + anAnchorText + "</a>";
}

var myAdjacentText = new Object();
myAdjacentText = [
                   [ "Create your own ", "" ],
                   [ "Personalize your own ", "" ],
                   [ "Make your own ", "" ],
                   [ "Customize your own ", "" ],
                   [ "This ", " made with Smilebox" ],
                   [ "This ", " created with Smilebox" ],
                   [ "This ", " personalized with Smilebox" ],
                   [ "This ", " generated with Smilebox" ],
                   [ "This ", " customized with Smilebox" ],
                   [ "", " made with Smilebox" ],
                   [ "", " created with Smilebox" ],
                   [ "", " personalized with Smilebox" ],
                   [ "", " generated with Smilebox" ],
                   [ "", " customized with Smilebox" ],
                   [ "Another ", " by Smilebox" ],
                   [ "A|An ", " by Smilebox" ],
                   [ "Create a|an ", "" ],
                   [ "Personalize a|an ", "" ],
                   [ "Make a|an ", "" ],
                   [ "Customize a|an ", "" ]
                 ];

var myAnchorTextArraysByDesignTypeName = new Object();
myAnchorTextArraysByDesignTypeName[ "invite" ] = [ "invite",
                                                    "invitation",
                                                    "digital invite",
                                                    "digital invitation",
                                                    "invite card",
                                                    "invitation card",
                                                    "free invite",
                                                    "free invitation",
                                                    "free invite card",
                                                    "free invitation card",
                                                    "free digital invite",
                                                    "free digital invitation"
                                                    ];
myAnchorTextArraysByDesignTypeName[ "scrapbook" ] = [ "scrapbook",
                                                        "scrapbooking design",
                                                        "scrapbook design",
                                                        "digital scrapbook",
                                                        "digital scrapbooking design",
                                                        "free scrapbook",
                                                        "free scrapbooking design",
                                                        "free scrapbook design",
                                                        "free digital scrapbook",
                                                        "free digital scrapbooking design"
                                                    ];
myAnchorTextArraysByDesignTypeName[ "slideshow" ] = [ "slideshow",
                                                        "digital slideshow",
                                                        "free slideshow",
                                                        "free digital slideshow",
                                                        "slideshow design",
                                                        "free slideshow design",
                                                        "photo slideshow",
                                                        "free photo slideshow",
                                                        "picture slideshow",
                                                        "free picture slideshow"
                                                    ];
myAnchorTextArraysByDesignTypeName[ "greeting" ] = [ "greeting",
                                                    "free greeting",
                                                    "digital greeting",
                                                    "free digital greeting",
                                                    "greeting card",
                                                    "free greeting card",
                                                    "digital greeting card",
                                                    "free digital greeting card",
                                                    "ecard",
                                                    "free ecard",
                                                    "digital ecard",
                                                    "free digital ecard"
                                                    ];
myAnchorTextArraysByDesignTypeName[ "photobook" ] = [ "photobook",
                                                        "free photobook",
                                                        "photo book",
                                                        "free photo book",
                                                        "photobook design",
                                                        "free photobook design",
                                                        "photo book design",
                                                        "free photo book design",
                                                        "digital photobook",
                                                        "free digital photobook",
                                                        "digital photo book",
                                                        "free digital photo book",
                                                        "photo album",
                                                        "free photo album",
                                                        "digital photo album",
                                                        "free digital photo album"
                                                    ];
myAnchorTextArraysByDesignTypeName[ "collage" ] = [ "collage",
                                                    "free collage",
                                                    "digital collage",
                                                    "free digital collage",
                                                    "picture collage",
                                                    "free picture collage",
                                                    "photo collage",
                                                    "free photo collage",
                                                    "picture collage",
                                                    "free picture collage"
                                                    ];
myAnchorTextArraysByDesignTypeName[ "recipe" ] = [ "recipe card",
                                                    "free recipe card",
                                                    "recipe card design",
                                                    "free recipe card design",
                                                    "digital recipe card",
                                                    "free digital recipe card",
                                                    "recipe page",
                                                    "free recipe page",
                                                    "digital recipe page",
                                                    "free digital recipe page",
                                                    "printable recipe card",
                                                    "free printable recipe card"
                                                    ];
myAnchorTextArraysByDesignTypeName[ "calendar" ] = [ "calendar",
                                                        "free calendar",
                                                        "calendar design",
                                                        "free calendar design",
                                                        "printable calendar",
                                                        "free printable calendar"
                                                    ];

myAnchorTextArraysByDesignTypeName[ "newsletter" ] = [ "newsletter",
                                                        "free newsletter",
                                                        "newsletter design",
                                                        "free newsletter design"
                                                    ];

myAnchorTextArraysByDesignTypeName[ "scrap pages" ] = [ "scrap page",
                                                        "free scrap page",
                                                        "scrap page design",
                                                        "free scrap page design",
                                                        "digital scrap page",
                                                        "free digital scrap page"
                                                    ];

myAnchorTextArraysByDesignTypeName[ "postcard" ] = [ "postcard",
                                                     "free postcard",
                                                     "digital postcard",
                                                     "free digital postcard",
                                                     "postcard design",
                                                     "free postcard design"
                                                     ];

// Link target substitution tables by design type.
var myLinkTargetArraysByDesignTypeName = new Object();
myLinkTargetArraysByDesignTypeName[ "invite" ] = [ "",
                                                       "invitations.html",
													   "anytime-invitations.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "scrapbook" ] = [ "",
                                                      "scrapbooks.html",
													  "photo-albums.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "slideshow" ] = [ "",
                                                      "slideshows.html",
													  "anytime-slideshows.html"
                                                    ];

myLinkTargetArraysByDesignTypeName[ "greeting" ] = [ "",
                                                      "greetings.html",
													  "ecards.html"
                                                    ];

myLinkTargetArraysByDesignTypeName[ "photobook" ] = [ "",
                                                      "scrapbooks.html",
													  "photo-albums.html"
                                                    ];

myLinkTargetArraysByDesignTypeName[ "collage" ] = [ "",
                                                       "collages.html",
													   "anytime-collages.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "recipe" ] = [ "",
                                                       "recipes.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "calendar" ] = [ "",
                                                       "calendars.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "newsletter" ] = [ "",
                                                       "newsletter-designs.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "scrap pages" ] = [ "",
                                                      "scrapbooks.html",
													  "photo-albums.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "postcard" ] = [ "",
                                                       "collages.html",
													   "anytime-collages.html"
                                                     ];

myLinkTargetArraysByDesignTypeName[ "unknown" ] = [ "",
                                                    "http://www.smilebox.com/"
                                                  ];

function pickRandomItemFromArray( anArray )
{
    var theItemIndex = Math.floor( Math.random() * anArray.length );
    return anArray[ theItemIndex ];
}

function getAnchorText( aDesignTypeName )
{
    return getRandomItemFromTwoDimensionalArray( aDesignTypeName,
                                                 myAnchorTextArraysByDesignTypeName,
                                                 aDesignTypeName
                                                );

}

function getLinkTarget( aDesignTypeName )
{
    return getRandomItemFromTwoDimensionalArray( aDesignTypeName,
                                                 myLinkTargetArraysByDesignTypeName,
                                                 pickRandomItemFromArray( myLinkTargetArraysByDesignTypeName[ "unknown" ] )
                                                );
}

function getRandomItemFromTwoDimensionalArray( aKeyInOuterArrayToMatch, anOuterArray, aDefaultValue )
{
    for ( theKey in anOuterArray )
    {
        if( aKeyInOuterArrayToMatch.toLowerCase() == theKey.toLowerCase() )
        {
            return pickRandomItemFromArray( anOuterArray[ theKey ] );
        }
    }
    return aDefaultValue;
}

function generateBlogSnippet( aBlogData, aBlogTitle, anEncodeQueryStringFlag )
{
    var theDesignTypeName = getDesignTypeName( aBlogData );
    var theHomePageUrl = getHomePageUrl( aBlogData );

    var theSnippet = "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" bgcolor=\"#ffffff\">"
                      + "<tr><td><a href=\"http://"  + aBlogData["webserver"] + "/play/" + aBlogData["sendevent"]
                      + buildBlogQueryString( anEncodeQueryStringFlag )
                      + "\" target=\"_blank\">"
                      + "<img width=\"" +  aBlogData["projectIconWidth"]
                      + "\" height=\"" + aBlogData["projectIconHeight"] + "\" alt=\"Click to play this Smilebox " + theDesignTypeName
                      + "\" src=\"http://"  + aBlogData["webserver"] + "/snap/" + aBlogData["sendevent"] + ".jpg\" style=\"border: medium none ;\"/></a>"
                      + "</td></tr>"
                      + "<tr><td><a href=\"" + theHomePageUrl + "\" target=\"_blank\">"
                      + "<img width=\"" + aBlogData["logoWidth"]
                      + "\" height=\"" + aBlogData["logoHeight"] + "\" alt=\"Create your own " + theDesignTypeName + " - Powered by Smilebox\""
                      + " src=\"" + aBlogData["logoImageSource"] + "\" style=\"border: medium none ;\"/></a></td>"
                      + "</tr>"
                      + "<tr><td align=\"center\">" + generateMakeSmileboxLink( aBlogData, theDesignTypeName ) + "</td>"
                      + "</tr></table>";
    return theSnippet;
}

function buildBlogQueryString( anEncodeFlag )
{
    var theBlogQueryString = "&blogview=true&campaign=blog_playback_link";
    if( anEncodeFlag )
    {
        return encodeURI( theBlogQueryString );
    }
    else
    {
        return theBlogQueryString;
    }
}

function generateBlogLink( aQueryString )
{
    var theDict = parseQueryString( aQueryString );
    return "http://" + myWebServer + "/playBlog/" + theDict["sendevent"]  + "&blogview=true";
}

function isMac()
{
    return navigator.userAgent.toLowerCase().match(/macintosh/);
}

function navToBlogPage( aBlogName )
{
    window.location.href = aBlogName + ".html" + window.location.search;
}


