var serverprefix = '';
var emailw = 326, emailh=655;
var smsw = 326, smsh=755;
var emailpopuperrorcodes = null;
var jspsessionid;
var feedItemIdPrefix = "m1/";
var gaJsPageTracker = null;
var templateprefix = '/mc/templates/macys/guide';

var opPdtInfo = 1;
var opVoteFor = 2;
var opShare = 3;
var opGetReviews =4;
var opDoRateReview = 5;

var socialactionCbkObject = null;

var SACAT_SHARE = "Share";
var SACAT_VOTE = "Vote";

var flashTest = 
{
    onOpCancelled: function() {document.getElementById(this.swfname).innerHTML = 'onOpCancelled called';},
    onOpCompleted: function(code, msg, opcode, retval1, retval2) {if(opcode == opGetReviews) retval1 = htmlEncode(retval1); document.getElementById(this.swfname).innerHTML = 'onOpCompleted called code=' + code + " msg=" + msg + " retval1=" + retval1 + " retval2=" + retval2;},
    PercentLoaded : function() {return 100;}
};

function showEmail(swfname, title, descriptiontext, iconUrl, webUrl)
{
    showEmailEx(swfname, title, descriptiontext, iconUrl, webUrl, maileridEmail[campaignidSA]);
}

function showEmailEx(swfname, title, description, iconUrl, webUrl, mailerId)
{
    webUrl = getCmWebUrl(webUrl, "email");
    sendMessage(swfname, title, description, iconUrl, webUrl, null, false, mailerId);
}

function showEmailSkipCm(swfname, title, description, iconUrl, webUrl)
{
    showEmailExSkipCm(swfname, title, description, iconUrl, webUrl, maileridEmail[campaignidSA]);   
}

function showEmailExSkipCm(swfname, title, description, iconUrl, webUrl, mailerId)
{
    webUrl = getCmWebUrl(webUrl, "email", true);
    sendMessage(swfname, title, description, iconUrl, webUrl, null, false, mailerId);
}

function sendtoPhone(swfname, entryId)
{
    sendMessage(swfname, null, null, null, null, entryId, true);
}

function registerPageViewEx(pageid, categoryid, isPdn)
{
    try
    {
        if(showAlerts)
        {
            alert("registerPageView: " + pageid + " category:" + categoryid);
        }

        if(isProduction || isPdn)
        {
            cmSetProduction();
        }
        cmCreatePageviewTag(pageid, categoryid, null, null);
    }
    catch(error)
    {
        if(showAlerts)
        {
            alert("registerPageView error: " + error);
        }
    }
}

function registerPageView(pageid)
{
    try
    {
        var category = (cmcategories && cmcategories[pageid] ?  cmcategories[pageid] : cmcategory);
        if(showAlerts)
        {
            alert("registerPageView: " + pageid + " category:" + category);
        }

        if(isProduction)
        {
            cmSetProduction();
        }
        cmCreatePageviewTag(cmcategory + "." + pageid, category, null, null);
    }
    catch(error)
    {
        if(showAlerts)
        {
            alert("registerPageView error: " + error);
        }
    }
}

function registerElementView(elementid, elementcategory)
{
    try
    {
        var category = elementcategory;
        if(showAlerts)
        {
            alert("registerElementView: " + elementid + " category:" + elementcategory);
        }

        // this will be done as part of page view
        //if(isProduction)
        //{
            //cmSetProduction();
        //}
        cmCreatePageElementTag(elementid, elementcategory);
    }
    catch(error)
    {
        if(showAlerts)
        {
            alert("registerElementView error: " + error);
        }
    }
}

function registerSubscription(custid, custemail, custcity, custstate, custzip, newslettername, subscribedflag)
{
    try
    {
        if(showAlerts)
        {
            alert("registerSubscription: " + custid + " custemail:" + custemail + " custcity:" + custcity + " custstate:" + custstate + " custzip: " + custzip + " newslettername: " + newslettername + " subscribedflag: " + subscribedflag);
        }

        cmCreateRegistrationTag(custid, custemail, custcity, custstate, custzip, newslettername, subscribedflag);
    }
    catch(error)
    {
        if(showAlerts)
        {
            alert("registerSubscription error: " + error);
        }
    }
}

function sanitizeStr(str)
{
    // need for culinary council which calls this with single and double quotes and the double quotes interferes without this line.. convert to single quotes - it is ok.
    str = (str ? str.replace(/"/g, "'") : str);
    return (str ? str.replace(/'/g, "\\&#39;").replace(/"/g, '\\\\&#34;') : str);
    //return (str ? str.split("'").join("'") : str);
}

function sendMessage(swfname, title, descriptiontext, iconUrl, webUrl, entryId, isSms, paramMailerIdEmail)
{
    if(showAlerts)
    {
        alert("sendMessage=" + swfname + " title=" + title + " desc=" + descriptiontext + " iconUrl=" + iconUrl + " webUrl=" + webUrl + "entryId=" + entryId + " as_sms=" + isSms);
    }
    webUrl = getShareUrl(webUrl);
    //feedItemId = feedItemIdPrefix + feedItemId;
    
    // does not work when the desc text has single quotes, so we create json ourselves..
    //var mailerparamsstr = JSON.stringify({'ICONURL': sanitizeStr(iconUrl), 'WEBURL': sanitizeStr(webUrl), 'TITLE': sanitizeStr(title), 'DESC': sanitizeStr(descriptiontext), 'ENTRYID': sanitizeStr(entryId)});
    var mailerparamsstr = "{\"ICONURL\": \"" + sanitizeStr(iconUrl) + 
        "\", \"WEBURL\": \"" + sanitizeStr(webUrl)+ 
        "\", \"TITLE\": \"" + sanitizeStr(title)+ 
        "\", \"DESC\": \"" + sanitizeStr(descriptiontext)+ 
        "\", \"ENTRYID\": \"" + sanitizeStr(entryId)+ 
        "\"}";    

    if(showAlerts)
    {
        alert("mailerparamssent=" + mailerparamsstr + " mailerid = " + paramMailerIdEmail);
    }
        
    //alert(onModalClosed);
    var url = templateprefix + '/mobileform.jsp?swf=' + swfname + 
        "&op=" + (isSms ? "txt" : "mail") + (isSms ? "" : "&mailerid=" + paramMailerIdEmail) + 
        "&mailerparams=" + escape(mailerparamsstr);

    if(isCallbackFlash(swfname))
    {
        socialactionCbkObject = null;
    }
    else
    {
        // it is a json object - store it
        socialactionCbkObject = swfname;
    }
    
    //alert(url);
    var cbk = function(result, xmlhttp)
    {
        showPopWin(result, smsw, smsh, null, false);        
        jspsessionid = xmlhttp.getResponseHeader("X-Skava-Jsessionid");        
    };
    
    var errcbk = function(msg)
    {
        onCompleted(1, swfname, null, -1, msg, opShare, null, null, (isSms ? "sms" : "email"));
    };
    
    jx.load(url, cbk, "text/html", "GET", errcbk);
}


function sendSocial(toaddress, fromname, carriercode, terms, captcha, mailerparamsstr, swfname, mailerid, isSms, opcode)
{
    clearErrorInPopup();
    var afterUpload = function(result)
    {
        //alert(result);
        var response = parseResult(result);
        //alert(response["X-Skava-ResponseMessage"] + " " + urldecode(response["X-Skava-ResponseMessage"]));
        onCompleted(1, swfname, (isSms ? null : emailpopuperrorcodes), 
            response["X-Skava-ResponseCode"], urldecode(response["X-Skava-ResponseMessage"]), opcode, null, null, (isSms ? "sms" : "email"));
    }    

    var url = "/mc/social;jsessionid=" + jspsessionid + "?campaign_id=" + campaignidSA +
        "&X-Skava-Authorization=" + escape(auth[campaignidSA]) + 
        "&variableresponse=1" + 
        "&op=" + (isSms ? "txt" : "mail") +  
        "&mailer_id=" + mailerid+ 
        "&user_name=" + escape(fromname) + 
        "&eto=" + escape(toaddress) + 
        "&erto=" + escape(carriercode) + 
        "&terms=" + escape(terms) + 
        "&cv=" + escape(captcha) + 
        "&mailer_params="+escape(mailerparamsstr);
    
    //alert("3: " + mailerparams + " " + url);
    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", showErrorInPopup);    
}

function showAlertMessage(title, message)
{
    var alertw = 300;
    var alerth = emailh;
    var html = '<table cellspacing="0" cellpadding="4" style="border: 1px solid black;background-color:white;width:'+alertw+'px;">' + 
            '<tr>' + 
                '<td style="width:100%;text-align:center;" align="center">' +
                    '<div style="font-size:18px;font-family: verdana,tahoma,arial,helvetica,sans-serif; color:#000000; text-align:center;">'+
                    title +                     
                    '</div>' +
                '</td>' +
            '</tr>' +
            '<tr>' + 
                '<td style="width:100%;text-align:center;" align="center">' +
                    '<div style="font-size:10px;font-family: verdana,tahoma,arial,helvetica,sans-serif; color:#000000; text-align:center;">' +                
                    message +                     
                    '</div>' +
                '</td>' +
            '</tr>' +
            '<tr>' + 
                '<td style="width:100%;padding-top:5px;text-align:center;" align="center">' +
                    '<div>' +
                        '<a href="javascript:false" style="border:none;" onclick="hidePopWin();return false;"><img style="border:none;" src="http://d3pnveezgteiph.cloudfront.net/guide/images/ok.jpg"/></a>' +
                    '</div>' + 
                '</td>' +
            '</tr>' +
        '</table>';
    showPopWin(html, alertw, alerth, null, false);        
}

function showErrorInPopup(message, isSuccess)
{
    //alert(message + " " + isSuccess);
    var idCaptchaImage = document.getElementById('idCaptcha');

    if(idCaptchaImage)
    {
        loadCaptchaImage('idimgcaptcha', jspsessionid);
        idCaptchaImage.value = '';
    }

    var errorText = document.getElementById('errortext');
    if(errorText)
    {
        errorText.innerHTML= (isSuccess ? '' : 'Error: ') + message;
    }
}


function clearErrorInPopup()
{
    var errorText = document.getElementById('errortext');
    if(errorText)
    {
        errorText.innerHTML="&nbsp;";
    }
}

function onCompleted(attempt, swfname, popuperrcodes, respcode, respmessage, opcode, retval1, retval2, actionname)
{
    //alert("oncompleted: " + respcode  + " " + respmessage + " " + popuperrcodes + " " + (popuperrcodes == null) + " swf=" + swfname);
    if(respcode != 0 && (popuperrcodes == null || popuperrcodes[respcode] == 1))
    {
        showErrorInPopup(respmessage);
    }
    else
    {
        if(actionname)
        {
            var tracker = getGaJsTracker();
            //alert("tracker=" + tracker);
            if(tracker)
            {
                tracker._trackPageview("/socialactions/" + actionname); 
                //alert("tracked : " +"/socialactions/" + actionname);
            }
        }
        var flashObj = getCallBack(swfname);

        if (flashObj && attempt > 0 && flashObj.PercentLoaded() == 100)
        {
            try
            {
                // if it is test, we will show the error right there.
                hidePopWin();
                if(showAlerts)
                {
                    alert("Calling op completed: respcode=" + respcode + " respmsg=" + respmessage + " op=" + opcode + " retval1=" + retval1 + " retval2=" + retval2);
                }
                flashObj.onOpCompleted(respcode, respmessage, opcode, retval1, retval2);
            }
            catch(e)
            {
                // we have dismissed the popup
                showAlertMessage("Error", "Invalid Flash object. Please contact support. " + e);
                //showErrorInPopup("Invalid Flash object. Please contact support. " + e);
            }
        }        
        else if(attempt > 20) // dialup and slow connections...
        {
            showErrorInPopup("Invalid Flash object. Unable to load it.");
        }
        else
        {
            //alert("cagain");
            var fn = function()
            {
                onCompleted(attempt + 1, swfname, popuperrcodes, respcode, respmessage, opcode, retval1, retval2, actionname);
            }
            setTimeout(fn, 500);
        }    
    }
}

function onCancelled(attempt, swfname)
{
    var flashObj = getCallBack(swfname);
    if (flashObj && attempt > 0 && flashObj.PercentLoaded() == 100)
    {
        try
        {
            // if it is test, we will show the error right there.
            hidePopWin();
            if(showAlerts)
            {
                alert("calling op cancelled");
            }
            flashObj.onOpCancelled();
        }
        catch(e)
        {
            // we have dismissed the popup
            showAlertMessage("Error", "Invalid Flash object. Please contact support. " + e);
            //showErrorInPopup("Invalid Flash object. Please contact support. " + e);
        }
    }        
    else if(attempt > 20) // dialup and slow connections...
    {
        showErrorInPopup("Invalid Flash object. Unable to load it.");
    }
    else
    {
        setTimeout(createDelegate(onCancelled, this, [attempt + 1, swfname]), 500);
    }    
}

function parseResult(result)
{
    var qsParm = new Array();
    if(result)
    {
        var parms = result.split('&');
        for (var i=0; i<parms.length; i++) 
        {
            var pos = parms[i].indexOf('=');
            if (pos > 0) 
            {
                var key = parms[i].substring(0,pos);
                var val = parms[i].substring(pos+1);
                qsParm[key] = urldecode(val);
            }
        } 
    }
    return qsParm;
}

function isCallbackFlash(movieName)
{
    return (movieName && movieName.onOpCompleted ? false : true);
}

function getCallBack(movieName)
{
    //alert('gcb:' + movieName);
    var cbk = (socialactionCbkObject ? socialactionCbkObject : 
        (isCallbackFlash(movieName) ? getFlashObj(movieName) : /*this is a json*/movieName));
    socialactionCbkObject = null; //reset
    return cbk;
}

function getFlashObj(movieName)
{
    //alert('gfo:' + movieName + " isTestMode=" + isTestMode);
    var flashObj = null;
    if(isTestMode)
    {
        flashObj = flashTest;
        flashObj.swfname = movieName;
    }
    else
    {
        if (window.document[movieName]) 
        {
            flashObj = window.document[movieName];
        }
        else if (navigator.appName.indexOf("Microsoft Internet")==-1)
        {
            if (document.embeds && document.embeds[movieName])
                flashObj = document.embeds[movieName]; 
        }
        else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
        {
            flashObj = document.getElementById(movieName);
        }
    }
    return flashObj;
}

function urldecode(msg)
{
    // unescape does not unescape a string this : hello+world
    return (msg ? unescape(msg.replace(/\+/g, "%20")) : msg);
}

function doSendActionSMS(swfname, mailerparamsstr, idform)
{
    var form = document.getElementById(idform);
    var toaddress = form['idPhone1'].value + form['idPhone2'].value + form['idPhone3'].value;
    var fromname = form['idFrom'].value;
    
    var mailerparams = JSON.parse(mailerparamsstr);
    mailerparams['FROM'] = fromname;
    mailerparamsstr = JSON.stringify(mailerparams);
    
    //alert(campaignidSA + " " + maileridEmail[campaignidSA]);

    sendSocial(
        toaddress, 
        fromname, 
        form['idCarrier'].value, 
        (form['idTerms'].checked ? form['idTerms'].value : null), 
        form['idCaptcha'].value, 
        mailerparamsstr, 
        swfname,
        maileridSms[campaignidSA],
        true,
        opShare);
    
    return false;    
}

function doSendActionEmail(swfname, mailerparamsstr, idform, paramMailerId)
{
    var form = document.getElementById(idform);
    var fromaddress = form['idFromAddress'].value;
    var toaddress = form['idToAddress'].value;
    var fromname = form['idFrom'].value;
    var toname = form['idTo'].value;

    if(showAlerts)
    {
        alert("doSendActionEmail(): mailerparams=" + mailerparamsstr + " mailerid_email = " + paramMailerId);
    }
    
    var mailerparams = JSON.parse(mailerparamsstr);
    mailerparams['FROM'] = fromname;
    mailerparams['TO'] = toname;
    mailerparamsstr = JSON.stringify(mailerparams);
    
    //alert(campaignidSA + " " + maileridEmail[campaignidSA]);

    sendSocial(
        toaddress, 
        fromname, 
        fromaddress, 
        (form['idTerms'].checked ? form['idTerms'].value : null), 
        form['idCaptcha'].value, 
        mailerparamsstr, 
        swfname,
        paramMailerId,
        false,
        opShare);
    return false;
}

function doCancelAction(swfname)
{
    onCancelled(1, swfname);
    return false;
}

function loadCaptchaImage(elname, sessionid)
{
    //alert("l1: " + elname + " " + sessionid);
    var el = document.getElementById(elname);
    if(el)
    {
        //alert("l2");
        //<!-- require jsessionid here - otherwise captcha uses wrong session id with IE-->
        var url = '/mc/captcha;jsessionid='+sessionid+'?timeforreload="' + (new Date()).getTime() + '"';
        //alert(elname + " " + url + " " + document.getElementById(elname));
        //alert(document.getElementById(elname).src);
        el.src = url;
    }
}

function shareFb(swfname, title, descriptiontext, /*fileUrl,*/ iconUrl, webUrl)
{
    if(showAlerts)
    {
        alert("shareFb called: swf=" + swfname + " title=" + title + " desc=" + descriptiontext + " iconUrl=" + iconUrl + " webUrl=" + webUrl);
    }
    webUrl = getCmWebUrl(webUrl, "facebook");
    webUrl = getShareUrl(webUrl);

    title = title.replace(/&/g, "%2526");//escaping & - %26, escaping % - %2526
    descriptiontext = descriptiontext.replace(/&/g, "%2526");//escaping & - %26, escaping % - %2526

    webUrl = webUrl.replace(/#/g, "_hash_");
    var shareUrl = hostUrl[campaignidSA] + 
                "/mc/templates/common/fbshare.jsp?"  +
                'entry_label1=' + escape(htmlEncode(title)) +
                '&campaign_id=' + campaignidSA +  
                '&time=' + (new Date().getTime()) + 
                '&entry_comment=' + escape(htmlEncode(descriptiontext)) +
                //'&entry_fileurl=' + escape(fileUrl) +
                '&entry_itemurl1=' + escape(iconUrl) +
                '&entry_mediatype=' + 1/*MEDIATYPE_IMAGE*/ +
                //'&entry_mediacontenttype=' + escape("application/x-shockwave-flash") +
                '&webUrl=' + escape(webUrl);
    //alert(shareUrl);
    var url = "http://www.facebook.com/share.php?u=" + escape(shareUrl);
    //alert(url);
    var newwin = window.open(url, '_blank');
    if(newwin)
    {
        newwin.focus(); // openInNewTab
        onCompleted(1, swfname, [], 0, "Success", opShare, null, null, "facebook");
    }
    else
    {
        // send back the link to allow direct launching from flash - popup blocking happens in safari
        onCompleted(1, swfname, [], 1, "Failed to launch new page. Please disable your popup blocker and try again.", opShare, url, null, null);
    }
}

function getCmWebUrl(webUrl, actionname, skipCoreMetrics)
{
    switch(actionname)
    {
        case "myspace": actionname="my"; break;
        case "livejournal": actionname="lj"; break;
        case "googlebkmrk": actionname="gobk"; break;
        case "twitter": actionname="tw"; break;
        case "digg": actionname="dg"; break;
        case "delicious": actionname="del"; break;
        case "facebook": actionname="fb"; break;
        case "email": actionname="em"; break;
    }

    if(!skipCoreMetrics)
    {
        webUrl = (webUrl ? webUrl + (webUrl.indexOf("?") >= 0 ? "&" : "?") + "cm_mmc=FrPS-_-"+ actionname +"-_-n-_-n" : webUrl);   
    }
    return webUrl;
}

function shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, actionname)
{
    webUrl = getCmWebUrl(webUrl, actionname);    
    
    if(showAlerts)
    {
        alert("swfname=" + swfname + " link=" + link + " title=" + title + " desc=" + descriptiontext + " icon=" + iconUrl + " web=" + webUrl + " action=" + actionname);
    }
    webUrl = getShareUrl(webUrl);
    webUrl += ((webUrl.indexOf('?') == -1) ? "?" : "&") + "time=" + (new Date().getTime());
    var descriptiontextEncoded = htmlEncode(descriptiontext);
    var descriptionhtml = "<a href='" + webUrl  + "' style='border:none;'><img src='" + iconUrl + "' style='border:none;'></img></a><br>" + descriptiontextEncoded;
    var myspacedescription = descriptionhtml.replace('</img>', '');
    link = link.replace(/%description%/g, escape(descriptionhtml));
    link = link.replace(/%myspacedescription%/g, escape(myspacedescription));
    link = link.replace(/%simpleDesc%/g, escape(descriptiontextEncoded));
    link = link.replace(/%noEncodedDesc%/g, escape(descriptiontext));    
    link = link.replace(/%title%/g, escape(htmlEncode(title)));
    link = link.replace(/%noEncodedTitle%/g, escape(title));
    link = link.replace(/%webUrl%/g, escape(webUrl));

    var newwin = window.open(link, '_blank');
    if(newwin)
    {
        newwin.focus(); // openInNewTab
        onCompleted(1, swfname, [], 0, "Success", opShare, null, null, actionname);
    }
    else
    {
        // send back the link to allow direct launching from flash - popup blocking happens in safari
        onCompleted(1, swfname, [], 1, "Failed to launch new page. Please disable your popup blocker and try again.", opShare, link, null, null);
    }
}

function shareMs(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "http://www.myspace.com/index.cfm?fuseaction=postto&l=1&u=%webUrl%&t=%title%&c=%myspacedescription%";
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "myspace");
}

function shareLj(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "http://www.livejournal.com/update.bml?subject=%title%&event=%description%%20%3Ca%20href=%22%webUrl%%22%3Eread more%3C/a%3E";
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "livejournal");
}

function shareGoog(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "http://www.google.com/bookmarks/mark?op=edit&bkmk=%webUrl%&title=%noEncodedTitle%&annotation=%noEncodedDesc%";
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "googlebkmrk");
}

function shareTwitter(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "/mc/templates/common/skshare.jsp?shareTo=blog.twitter&entry_label1=%title%&entry_itemurl1=%webUrl%";    
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "twitter");
}

function shareDigg(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "http://digg.com/submit?phase=2&url=%webUrl%&title=%title%&bodytext=%simpleDesc%";
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "digg");
}

function shareDelicious(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "http://del.icio.us/post?url=%webUrl%&title=%noEncodedTitle%&notes=%noEncodedDesc%";
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "delicious");
}
function shareStumbleupon(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "http://www.stumbleupon.com/submit.php?url=%webUrl%";
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "stumbleupon");
}

function shareReddit(swfname, title, descriptiontext, iconUrl, webUrl)
{
    var link = "http://reddit.com/submit?url=%webUrl%&amp;title=%title%";
    shareSocial(swfname, link, title, descriptiontext, iconUrl, webUrl, "reddit");
}

function includeJavaScript(jsFile)
{
    document.write('<script type="text/javascript" src="' + jsFile + '"></scr' + 'ipt>'); 
}

function includeCss(cssFile)
{
    document.write('<link rel="stylesheet" type="text/css" href="'+cssFile+'" />'); 
}

function getShareUrl(webUrl)
{
    var orig = webUrl;
    if(webUrl && ((typeof(preserveFlashWebUrls) == "undefined") || !preserveFlashWebUrls))
    {
        var idx = webUrl.indexOf('#');
        if(idx >= 0)
        {
            var prefix = webUrl.substring(0, idx);
            var suffix = (webUrl.length > (idx + 1) ? webUrl.substring(idx + 1) : "");
            var mainpage = siteUrl[campaignidSA] + '?channel_id=1&campaign_id=' + campaignidSA + 
                (suffix.length > 0 ? "&bundle_entryPath=" + escape(suffix) : "");
            prefix = prefix.replace(/.*\/.*guide\/index.html/g, mainpage);
            prefix = prefix.replace(/.*\/.*guide\//g, mainpage);
            webUrl = prefix;
        }
    }
    if(showAlerts)
    {
        alert("shareUrl = before = " + orig + " now=" + webUrl);
    }
    
    return webUrl;
}

function triggerParent(ctrUrl) 
{ 
    var parentLocation = ctrUrl;
    var toRet = true;
    if (parentLocation && top.location == self.location) 
    { 
        //if page is not in its frameset 
        //show container or reload page with container (or redirect to appropriate macys url) using top.location.href = somePage; 
        top.location.href = parentLocation;
        toRet = false;
    }  
    return toRet;
} 

function getGaJsTracker()
{
    // we init it in a separate function from includeDependencies in order to give it some time to load
    if(!gaJsPageTracker && _gat)
    {
        gaJsPageTracker = _gat._getTracker(gaId);
    }
    return gaJsPageTracker;
}

function includeDependencies()
{
    //includeCss("/mc/static/submodal/subModal.css");

    if(typeof(skipDependencies) == "undefined" || !skipDependencies)
    {
        includeJavaScript(serverprefix + "/mc/json2.js");
        includeJavaScript(serverprefix + "/mc/http.js");
        includeJavaScript(serverprefix + "/mc/mediaplayer.js");
        includeJavaScript(serverprefix + "/mc/static/submodal/common.js");
        includeJavaScript(serverprefix + "/mc/static/submodal/subModal.js");    
    }

    //var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    //document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
}

includeDependencies();

function showRateAndReview(swfname)
{
    showRateAndReviewForProduct(swfname, defaultProductId)
}

function showRateAndReviewForProduct(swfname, productId)
{
    if(showAlerts)
    {
        alert("showDoRating=" + swfname + " productId=" + productId );
    }
        
    var url = templateprefix + '/rating.jsp?swf=' + swfname + 
        "&pid="+productId +
        "&t1="+ escape(ratingTitle) +
        "&t2="+ escape(ratingSubTitle);
    
        
    var cbk = function(result, xmlhttp)
    {
        showPopWin(result, smsw, smsh, null, false);        
        jspsessionid = xmlhttp.getResponseHeader("X-Skava-Jsessionid");        
    };
    
    var errcbk = function(msg)
    {
        onCompleted(1, swfname, null, -1, msg, opDoRateReview, null, null, "dorateandreview");
    };
    
    jx.load(url, cbk, "text/html", "GET", errcbk);
}

function getRatingsByUser(swfname, entry_id, startIdx, numratings)
{
    var entryIds = new Array(1);
    entryIds [0] = entry_id;
    var popuperrorcodes = [];
    
    var afterUpload = function(result)
    { 
        var response = parseResult(result);
        if(showAlerts)
        {
            alert("getRatingsByUser Response: " + response["X-Skava-ResponseCode"] + " " + urldecode(response["X-Skava-ResponseMessage"]));
        }
        
        var responseXML = "";
        var responseCode = response["X-Skava-ResponseCode"];
        var responseMessage = urldecode(response["X-Skava-ResponseMessage"]);
        if(responseCode == 0 || responseCode == "0")
        {
            var length = parseInt(response["X-Skava-RateMaxLength_" + entry_id] ? response["X-Skava-RateMaxLength_" + entry_id] : 0);
            var totalLength = parseInt(response["X-Skava-RateTotalLength_" + entry_id] ? response["X-Skava-RateTotalLength_" + entry_id] : 0);   

            var startIndexIntValue = parseInt(startIdx);

            var startIndex = (startIndexIntValue >= totalLength ? totalLength : startIndexIntValue);
            var endIndex = ((startIndex + length) >= totalLength ? ((startIndex >= totalLength) ? totalLength : (totalLength - 1)): (startIndex + length - 1));

            if(showAlerts)
            {
                alert("getRatingsByUser Response: start = " + startIndex + " end = " + endIndex + " total = " + totalLength);
            }

            responseXML += ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");     

            responseXML += ("<ratings totalonserver = \""+totalLength+"\" start = \""+startIndex+"\" end = \""+endIndex+"\">");                                       

            for(var i = 0;  i < length; i++)
            {

                responseXML +=("<rating>");    
                responseXML +=("<id>"+response["X-Skava-RateId_" + entry_id + "_" + i]+"</id>");
                responseXML +=("<userid>"+response["X-Skava-UserId_" + entry_id + "_" + i]+"</userid>");                                          
                responseXML +=("<username>"+response["X-Skava-UserName_" + entry_id + "_" + i]+"</username>");                               
                responseXML +=("<rating>"+response["X-Skava-Rating_" + entry_id + "_" + i]+"</rating>");                           
                responseXML +=("<review>"+response["X-Skava-Review_" + entry_id + "_" + i]+"</review>");                       
                responseXML +=("</rating>");                            
            }

            responseXML+=("</ratings>");
           
        }  
        onCompleted(1, 
                swfname, 
                popuperrorcodes, 
                responseCode, 
                responseMessage, 
                opGetReviews, 
                responseXML, null, "getratingsbyuser");        
        
    }    

    var errcbk = function(msg)
    {
        //alert("error"+msg);
        onCompleted(1, swfname, popuperrorcodes, -1, msg, opDoRateReview, null, null, "getratingsbyuser");
    }

    
    var url = "/mc/social?campaign_id=" + campaignidSA +
        "&channel_id=1" +
        "&X-Skava-Authorization=" + escape(auth[campaignidSA]) + 
        "&variableresponse=1" +
        "&getuserratings=true" +
        "&ratestartidx="+startIdx +
        "&ratemaxentries="+numratings +        
        "&bundle_entryPath=" + entry_id +
        "&entryproperties_name=rating_id,rating_userid,rating_username,rating_review,rating_rating" +
        "&op=getentrystats";
    
    //alert("3: " + mailerparams + " " + url);
    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", errcbk);        

}

function getReviews(swfname)
{
    getReviewsForProduct(swfname, defaultProductId);
}

function getReviewsForProduct(swfname, productId)
{
    if(showAlerts)
    {
        alert("get reviews for product: " + swfname + " " + productId);
    }
    var afterUpload = function(result, xmlhttp)
    {
        var responseCode = xmlhttp.getResponseHeader("X-Skava-ResponseCode");
        var responseMessage = xmlhttp.getResponseHeader("X-Skava-ResponseMessage");        
        
        //if(showAlerts)
        //{
            //alert("result:" + result + " code=" + responseCode + " msg=" + responseMessage);
        //}
        onCompleted(1, 
            swfname, 
            null, 
            responseCode, 
            responseMessage, 
            opGetReviews, 
            result, null, null, "getreviews");
    }    

    var errcbk = function(msg)
    {
        //alert("error"+msg);
        onCompleted(1, swfname, null, -1, msg, opGetReviews, null, null, "getreviews");
    };

    var url = "/mc/bazaar?" +
        "pid=" + productId +
        "&mt=2";

    //if(showAlerts)
    //{
        //alert("url:" + url);
    //}
    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", errcbk);   
}

function doSkRateAndReview(swfname, entryid, userId, rating, review)
{
    var afterUpload = function(result, xmlhttp)
    {
        var responseCode = xmlhttp.getResponseHeader("X-Skava-ResponseCode");
        var responseMessage = xmlhttp.getResponseHeader("X-Skava-ResponseMessage");
        var avgRating = 0;
        var popuperrorcodes = [];
        
        if(showAlerts)
        {
            alert("doSkRateAndReview result=" + result);
        }
        if(responseCode == 0)
        {
            var response = JSON.parse(result);
            for(var idx = 0; idx < response.jsonvalue.length; idx++)
            {
                if(response.jsonvalue[idx][0] == "X-Skava-AvgRate_")
                {
                    avgRating = response.jsonvalue[idx][1];            
                    break;
                }
            }            
        }    
        onCompleted(1, 
                swfname, 
                popuperrorcodes, 
                responseCode, 
                responseMessage, 
                opDoRateReview, 
                avgRating, null, "doskrateandreview");
    }    

    var errcbk = function(msg)
    {
        //alert("error"+msg);
        onCompleted(1, swfname, popuperrorcodes, -1, msg, opDoRateReview, null, null, "doskrateandreview");
    };

    var url = "/mc/social?campaign_id=" + campaignidSA +
        "&channel_id=1" +
        "&X-Skava-Authorization=" + escape(auth[campaignidSA]) + 
        "&rating_rating=" + rating +
        "&rating_review=" + review +
        "&entry_id=" + entryid +
        "&user_id=" + userId +
        "&jsonresponse=1" +         
        "&op=" + (userId <= 0 ? "rateanon" : "rate");
    
    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", errcbk);    
}



function doRateandReview(swfname, productId, userName, rating, review)
{
    var afterUpload = function(result, xmlhttp)
    {
        var responseCode = xmlhttp.getResponseHeader("X-Skava-ResponseCode");
        var responseMessage = xmlhttp.getResponseHeader("X-Skava-ResponseMessage");

        if(showAlerts)
        {
            alert("doRateandReview: respcode=" + responseCode + " msg=" + responseMessage);
        }
        if(responseCode == 0)
        {
            var response = JSON.parse(result);
            responseCode = response.responsecode;
            
            if(responseCode == 0) //success
            {
                responseMessage = response.lastSuccessMsg;
            }
            else //error from bazaar voice
            {
                responseMessage = response.lastErrorMsg;
            }
            if(showAlerts)
            {
                alert("doRateandReview 1: respcode=" + responseCode + " msg=" + responseMessage);
            }
        }

        onCompleted(1, 
            swfname, 
            null, 
            responseCode, 
            responseMessage, 
            opDoRateReview, 
            null, null, "dorateandreview");
    }    

    var errcbk = function(msg)
    {
        //alert("error"+msg);
        onCompleted(1, swfname, null, -1, msg, opDoRateReview, null, null, "dorateandreview");
    };

    var url = "/mc/bazaar?" +
        "uname=" + userName +
        "&rating=" + rating +
        "&review=" + review +
        "&pid=" + productId +
        "&mt=1";

    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", showErrorInPopup);    
}

function doSendRateAndReview(swfname, productId, idratingactionform)
{
    var form = document.getElementById(idratingactionform);    

    doRateandReview(
        swfname,
        productId,
        form['idUserName'].value, 
        form['idRating'].value, 
        form['idReview'].value);
    
    return false;    
}

function setRatingStars(numstars, idratingactionform, ratingtext)
{
    var form = document.getElementById(idratingactionform);
    form['idRating'].value = numstars;
    var ratingText = document.getElementById(ratingtext);
    ratingText.innerHTML = "&nbsp;" + numstars + ((numstars == 1)?" star" : " stars");

    for(var i=1; i<=5; i++)
    {
        form['rating'+i].src = ((i <= numstars)?"http://d3pnveezgteiph.cloudfront.net/guide/images/star_sel.png":"http://d3pnveezgteiph.cloudfront.net/guide/images/star_desel.png");
    }
}

function voteFor(swfname, entryId)
{
    if(showAlerts)
    {
        alert("voteFor swf=" + swfname + " entryId=" + entryId);
    }
    var actionname = "rate";
    var popuperrorcodes = [];

    var afterUpload = function(result)
    {
        //alert(result);
        var response = parseResult(result);
        var rating = response["X-Skava-AvgRate_"];
        if(!rating)
        {
            rating = "";
        }
        
        onCompleted(1, swfname, popuperrorcodes, response["X-Skava-ResponseCode"], 
            urldecode(response["X-Skava-ResponseMessage"]), 
            opVoteFor,
            rating, 
            null,
            actionname);
    }    

    var afterHttpErr = function(message)
    {
        onCompleted(1, swfname, popuperrorcodes, -1, message, opVoteFor, null, null, actionname)
    }

    var url = "/mc/social?campaign_id=" + campaignidSA +
        "&channel_id=1" +
        "&entry_id=" + escape(entryId) +
        "&X-Skava-Authorization=" + escape(auth[campaignidSA]) + 
        "&variableresponse=1" + 
        "&op=ratepdtanon";
    
    //alert("vote: " + url);
    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", afterHttpErr);        
}

function getVotesFor(swfname, entryIds)
{
    if(showAlerts)
    {
        alert("getpdt info: swfname=" + swfname + " feedItemsIn=" + entryIds);
    }
    var actionname = null;//"pdtinfo"; - dont track this - too many
    var popuperrorcodes = [];   
    
    if(showAlerts)
    {
        alert("getVotesFor: entryIds=" + entryIds);
    }
    var afterUpload = function(result)
    {
        //alert(result);
        var response = parseResult(result);
        var ratings = [];        
        //alert(response["X-Skava-ResponseMessage"] + " " + urldecode(response["X-Skava-ResponseMessage"]));
        if(response["X-Skava-ResponseCode"] == 0 || response["X-Skava-ResponseCode"] == "0")
        {
            for(var i= 0; i < entryIds.length; i++)
            {
                var key = entryIds[i];
                //alert(key);
                ratings[i] = response["X-Skava-VoteCount_" + key];
                if(!ratings[i])
                {
                    ratings[i] = "";
                }                
                if(showAlerts)
                {
                    alert(i + " itemid=" + entryIds[i] + " vote=" + ratings[i])
                }
            }
        }        
        
        onCompleted(1, swfname, popuperrorcodes, response["X-Skava-ResponseCode"], 
            urldecode(response["X-Skava-ResponseMessage"]), 
            opPdtInfo,
            ratings,
            null,
            actionname);
    }    

    var afterHttpErr = function(message)
    {
        onCompleted(1, swfname, popuperrorcodes, -1, message, opPdtInfo, null, null, actionname)
    }

    
    var url = "/mc/social?campaign_id=" + campaignidSA +
        "&channel_id=1" +
        "&X-Skava-Authorization=" + escape(auth[campaignidSA]) + 
        "&variableresponse=1" +         
        "&entryproperties_name=votecount" +
        "&op=getentrystats";
    
    var body = escape("bundle_entryPath") + "=" + escape(entryIds);    
    
    //alert("3: " + mailerparams + " " + url);
    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", afterHttpErr, body);        
}

function getVotesPercentage(swfname, entryIds)
{
    if(showAlerts)
    {
        alert("getpdt info: swfname=" + swfname + " feedItemsIn=" + entryIds);
    }
    var actionname = null;//"pdtinfo"; - dont track this - too many
    var popuperrorcodes = [];   
    
    if(showAlerts)
    {
        alert("getVotesFor: entryIds=" + entryIds);
    }
    var afterUpload = function(result)
    {
        //alert(result);
        var response = parseResult(result);
        var ratings = [];        
        //alert(response["X-Skava-ResponseMessage"] + " " + urldecode(response["X-Skava-ResponseMessage"]));
        if(response["X-Skava-ResponseCode"] == 0 || response["X-Skava-ResponseCode"] == "0")
        {
            var totalRatings = 0;
            for(var i= 0; i < entryIds.length; i++)
            {
                var key = entryIds[i];
                //alert(key);
                ratings[i] = response["X-Skava-AvgRate_" + key];                
                if(!ratings[i])
                {
                    ratings[i] = "";
                }         
                totalRatings += parseInt(ratings[i]);
            }
            
            if(totalRatings > 0)
            {
                for(var i= 0; i < entryIds.length; i++)
                {
                    var vote = ratings[i];
                    ratings[i] = ((parseInt(ratings[i]) * 100) / totalRatings).toFixed(1);
                    if(showAlerts)
                    {
                        alert(" itemid=" + entryIds[i] + " vote = " + vote + " percentage=" + ratings[i] + " total ratings = " + totalRatings);
                    }
                }
            }
        }        
        
        onCompleted(1, swfname, popuperrorcodes, response["X-Skava-ResponseCode"], 
            urldecode(response["X-Skava-ResponseMessage"]), 
            opPdtInfo,
            ratings,
            null,
            actionname);
    }    

    var afterHttpErr = function(message)
    {
        onCompleted(1, swfname, popuperrorcodes, -1, message, opPdtInfo, null, null, actionname)
    }

    
    var url = "/mc/social?campaign_id=" + campaignidSA +
        "&channel_id=1" +
        "&X-Skava-Authorization=" + escape(auth[campaignidSA]) + 
        "&variableresponse=1" +         
        "&entryproperties_name=entrystats_avgrating" +
        "&op=getentrystats";
    
    var body = escape("bundle_entryPath") + "=" + escape(entryIds);    
    
    //alert("3: " + mailerparams + " " + url);
    jx.load(url, afterUpload, "application/x-www-form-urlencoded", "POST", afterHttpErr, body);        
}

function gaJsTrackEvent(category, action, optional_label, optional_value)
{
    try
    {
        var tracker = getGaJsTracker();
        if(tracker)
        {
            tracker._trackEvent(category, action, (optional_label ? optional_label : null), (optional_value ? optional_value : null));
        }
    }
    catch(err)
    {
        if(showAlerts)
        {
            alert("Error in gaJsTrackEvent: " + err);
        }
    }
}

function gaJsTrackPageView(opt_pageURL)
{
    try
    {
        var tracker = getGaJsTracker();
        if(tracker)
        {
            if(opt_pageURL)
            {
                // flash uses # for deeplinks and google ignores everything after # thinking it is page section 
                // and wont register the rest of the page url
                opt_pageURL = opt_pageURL.replace(/\#/g, "");
            }
            tracker._trackPageview(opt_pageURL);
        }
    }
    catch(err)
    {
        if(showAlerts)
        {
            alert("Error in gaJsTrackPageView: " + err);
        }
    }
}

function shareFbAnal(swfname, title, descriptiontext, iconUrl, webUrl, entryid)
{
    gaJsTrackEvent(SACAT_SHARE, "Share on Facebook", "" + entryid);
    shareFb(swfname, title, descriptiontext, iconUrl, webUrl);
}

function shareMsAnal(swfname, title, description, iconUrl, webUrl, entryid)
{
    gaJsTrackEvent(SACAT_SHARE, "Share on MySpace", "" + entryid);
    shareMs(swfname, title, description, iconUrl, webUrl);
}

function shareLjAnal(swfname, title, description, iconUrl, webUrl, entryid)
{
    gaJsTrackEvent(SACAT_SHARE, "Share on LiveJournal", "" + entryid);
    shareLj(swfname, title, description, iconUrl, webUrl);    
}

function shareGoogAnal(swfname, title, description, iconUrl, webUrl, entryid)
{
    gaJsTrackEvent(SACAT_SHARE, "Share on Google", "" + entryid);
    shareGoog(swfname, title, description, iconUrl, webUrl);    
}


function shareTwitterAnal(swfname, title, description, iconUrl, webUrl, entryid)
{
    gaJsTrackEvent(SACAT_SHARE, "Share on Twitter", "" + entryid);
    shareTwitter(swfname, title, description, iconUrl, webUrl);    
}

function shareDiggAnal(swfname, title, description, iconUrl, webUrl, entryid)
{
    gaJsTrackEvent(SACAT_SHARE, "Share on Digg", "" + entryid);
    shareDigg(swfname, title, description, iconUrl, webUrl);    
}

function shareDeliciousAnal(swfname, title, description, iconUrl, webUrl, entryid)
{
    gaJsTrackEvent(SACAT_SHARE, "Share on Delicious", "" + entryid);
    shareDelicious(swfname, title, description, iconUrl, webUrl);    
}

function showEmailExAnal(swfname, title, description, iconUrl, webUrl, mailerId, entryid, 
    elementid, elementcategory, deepLinkToPage)
{
    if(showAlerts)
    {
        alert("showEmailExAnal: " + swfname + " title:" + title + " desc: " + description + " iconurl: " 
            + iconUrl + " webUrl: " + webUrl + " mailerid: " + mailerId + " entryid: " + entryid
            + " elementid: " + elementid + " elementcategory: " + elementcategory + " deeplinkToPage: " + deepLinkToPage);
    }
    if(!mailerId)
    {
        mailerId = maileridEmail[campaignidSA];
    }
    if(deepLinkToPage)
    {
        webUrl = deepLinkToPage;
    }
    gaJsTrackEvent(SACAT_SHARE, "Share on Email", "" + entryid);
    showEmailEx(swfname, title, description, iconUrl, webUrl, mailerId);    

}

function sendtoPhoneAnal(swfname, entryid)
{
    if(showAlerts)
    {
        alert("sendtoPhoneAnal: " + swfname + " entryid:" + entryid);
    }
    gaJsTrackEvent(SACAT_SHARE, "Share on Phone", "" + entryid);
    sendtoPhone(swfname, entryid);    
}

function voteForAnal(swfname, entryid)
{
    if(showAlerts)
    {
        alert("voteForAnal: " + swfname + " entryid:" + entryid);
    }
    gaJsTrackEvent(SACAT_VOTE, "Vote for Item", "" + entryid);
    voteFor(swfname, entryid);    
}

function registerPageViewAnal(pageid, categoryid, deepLinkToPage)
{
    if(showAlerts)
    {
        alert("registerPageViewAnal: " + pageid + " category:" + categoryid + " deeplink: " + deepLinkToPage);
    }
    gaJsTrackPageView(deepLinkToPage);
    registerPageViewEx(pageid, categoryid);    
}

function registerElementViewAnal(elementid, elementcategory, deepLinkToPage)
{
    if(showAlerts)
    {
        alert("registerElementViewAnal: " + elementid + " category:" + elementcategory + " deeplink: " + deepLinkToPage);
    }
    gaJsTrackEvent(elementcategory, elementid, deepLinkToPage);
    registerElementView(elementid, elementcategory);    
}

function doRateandReviewAnal(swfname, entryid, userId, rating, review, elementid, elementcategory, deepLinkToPage)
{
    if(showAlerts)
    {
        alert("doRateandReviewAnal: " + elementid + " category:" + elementcategory + " deeplink: " + deepLinkToPage);
    }
    gaJsTrackEvent(elementcategory, elementid, deepLinkToPage);
    doSkRateAndReview(swfname, entryid, userId, rating, review);
}

function doFetchRateandReviewAnal(swfname, entryid, numratings, startindex, elementid, elementcategory, deepLinkToPage)
{
    if(showAlerts)
    {
        alert("doFetchRateandReviewAnal: " + elementid + " category:" + elementcategory + " deeplink: " + deepLinkToPage);
    }
    gaJsTrackEvent(elementcategory, elementid, deepLinkToPage);
    getRatingsByUser(swfname, entryid, startindex, numratings);
}

function emailAbuseReport(entryid, comment)
{ 
    var email = "abuse@skava.net"; 
    var errorMsg = (entryid > 0 ? entryid : "Unknown entry; please provide the title for this entry in your report"); 
    var subject = "Abuse Report"; 
    var body_message = "%0D%0D%0D%0DThank you for submitting this to us. Please tell us in the space above your thoughts about this entry.%0D%0DEntry Id: " + entryid +
        ".  Campaign Id: " + campaignidSA + ".  Comment text: " + comment; 

    var mailto_link = 'mailto:' + email + '?subject=' + subject + '&body=' + body_message; 

    var newwin = window.open(mailto_link,'_blank');  
    if(newwin && newwin.open &&!newwin.closed) 
    {
        newwin.close(); 
    }
}
