﻿/* ---------------------------------------------------------------------

AdServer WebPart JavaScript Library
Written by SusQtech
www.susqtech.com

* requires jQuery 1.3.2 or later
* http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js
* or 
* http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js

--------------------------------------------------------------------- */

/*Vars not configurable*/

//WebService URL to save the click
var sqtAdSaveClickURL = "/_layouts/SqtAdServer/WebServices/AdManagerWS.asmx/SaveAdClick";

//WebService URL to save the impression
var sqtAdSaveImpressionURL = "/_layouts/SqtAdServer/WebServices/AdManagerWS.asmx/SaveAdImpression";

//WebService URL to get the ad
var sqtAdGetAdURL = "/_layouts/SqtAdServer/WebServices/AdManagerWS.asmx/GetAdHtml";

//RequestID global variable.
var sqtAdPageRequestId = "";

/*End vars not configurable*/

$(document).ready(function() {
    sqtAdPageRequestId = Math.floor(Math.random() * 99999999999);
    sqtAdShowAds();
    //StartRotation(10000);
});

//Start the banner automatically banner rotation after x seconds.
function StartRotation(ms) {
    $(document).everyTime(ms, function() {
        sqtAdShowAds();
    });
}

//Populate all Ad WebParts with a banner.
function sqtAdShowAds() {
    if (sqtAdPageRequestId != "") {
        $(".sqtAdContainer").each(function(i) {
            sqtAdShowAd($(this), $(this).attr("sqtAdZone"), 'true');
        });
    }
}

//Check if the banner is already in the page
function sqtAdCheckBannerIsInThePage(html) {
    var p1 = html.toString().indexOf("sqtAdBannerID", 0) + 15;
    var p2 = html.toString().indexOf("\"", p1);
    var bannerId = html.toString().substring(p1, p2);
    var retVal = false;

    $(".sqtAdContainer").each(function(i) {
        if ($(this).find('a') != null) {
            if ($(this).find('a').attr("sqtAdBannerID") == bannerId) {
                retVal = true;
            }
        }
    });
    return retVal;
}

//Populate a div with a banner.
function sqtAdShowAd(div, zoneId, allowRunOfSite) {
    if (sqtAdPageRequestId != "") {
        $.ajax({
            url: sqtAdGetAdURL,
            type: "POST",
            data: JSON.stringify({ instanceId:sqtAdPageRequestId, strZoneId:zoneId, strAllowRunOfSite:allowRunOfSite, currURL:window.location.href}),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function(response) {
                if (sqtAdCheckBannerIsInThePage(response.d) == false) {
                    div.html(response.d);
                }
                else {
			sqtAdShowAd(div, zoneId, allowRunOfSite);
                }
		
		////DEBUG - prints HTML of ad
		//var respText = response.d.replace('/_layouts/SqtAdServer/TrackAd.aspx','/_layouts/NACS.Core/SPAdServerTrackAd.aspx');
		//var respText2 = respText.replace('/_layouts/SqtAdServer/TrackAd.aspx','/_layouts/NACS.Core/SPAdServerTrackAd.aspx');
		//$(div).text(respText2);
		//$(div).append(sqtAdPageRequestId);

		//add styles for rich media ads
		if (zoneId=="6" || zoneId=="7" || zoneId=="8")
		{	
			if ($(div).find('a').attr("sqtAdCampaignID")=="27")
			{
				$(div).html(response.d.replace('/_layouts/SqtAdServer/TrackAd.aspx','/_layouts/NACS.Core/SPAdServerTrackAd.aspx'));

				//works for IE
				$(div).find('object').css('width','300px');
				$(div).find('object').find('embed').css('width','300px');
				$(div).css('z-index','500');
				$(div).css('position','absolute');
				$(div).css('top','0px');
				$(div).css('right','0px');

				fix_flash();

				
				$(div).html($(div).html().replace('/_layouts/SqtAdServer/TrackAd.aspx','/_layouts/NACS.Core/SPAdServerTrackAd.aspx'));
				$(div).html($(div).html().replace('/_layouts/SqtAdServer/TrackAd.aspx','/_layouts/NACS.Core/SPAdServerTrackAd.aspx'));
			}
		}
		
            },
            complete: function() {
                sqtAdSaveImpression($(div).find('a').attr("sqtAdBannerID"), $(div).find('a').attr("sqtAdCampaignID"));
            }
        });
    }
}

//Save the click
function sqtAdSaveClick(a) {
    $.ajax({
        url: sqtAdSaveClickURL,
        type: "POST",
        data: JSON.stringify({ bannerID: $(a).attr("sqtAdBannerID"), campaignID: $(a).attr("sqtAdCampaignID"), url: window.location.href }),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function() {
        }
    });
}

//Save the impression
function sqtAdSaveImpression(bannerId, CampaignId) {
    if ((bannerId != "") && (CampaignId != "")) {
        $.ajax({
            url: sqtAdSaveImpressionURL,
            type: "POST",
            data: JSON.stringify({ bannerID: bannerId, campaignID: CampaignId, url: window.location.href }),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function() {
            }
        });
    }
}

var SQTAdServer = SQTAdServer || (function() {
    // top level private functions and variables

    // public functions
    return {
        // start of charting namespace
        Charting: (function() {
            //WebService URL to get the Clicks Report
            var svcURL = "/_layouts/SqtAdServer/WebServices/ReportingWS.ashx";
            /* need to work on this to preserve timezone */
            function _convDate(dt) {
                return new Date(+dt.replace(/\/Date\((\d+)-.*\)\//, '$1'));
            };
            function _getReport(advertID, callback) {
                $.post(svcURL, {
                    advertiserID: advertID,
                    cmd: "rpt"
                }, callback);
            }
            function _getAdvertisers(callback) {
                $.post(svcURL, {
                    cmd: "advertisers"
                }, callback);
            }
            function _createChart(container, data, opts) {
                var o = { impressions: true, clicks: true };
                $.extend(o, opts);

                var charts = [];
                if (o.impressions)
                    charts.push({ label: "Campaign Impressions", data: [] });
                if (o.clicks)
                    charts.push({ label: "Campaign Clicks", data: [] });

                var tmpDate = null;
                for (var row in data) {
                    if (tmpDate !== data[row].Date) {
                        tmpDate = data[row].Date;
                        var cDate = _convDate(tmpDate);
                        for (chart in charts) {
                            charts[chart].data.push([cDate, data[row][charts[chart].label]]);
                        }
                    }
                }
                return $.plot($("<div style='width:600px; height:300px'></div>").appendTo(container), charts, {
                    xaxis: {
                        mode: "time", timeformat: "%m/%d/%y"
                    }, series: {
                        lines: {
                            show: true
                        }, points: {
                            show: true
                        }
                    }
                });
            }

            return {
                init: function(selector) {
                    var sqtChart = $(selector).get(0);

                    _getAdvertisers(function(advs) {
                        var menu = $("<select></select>");
                        $(sqtChart).append(menu);
                        for (var adv in advs) {
                            $("<option/>")
                                .attr("value", advs[adv].ID)
                                .html(advs[adv].Name)
                                .appendTo(menu);
                        }
                        $(sqtChart).append("<br/><input type='checkbox' name='impressions' checked />Impressions&nbsp;&nbsp;<input type='checkbox' name='clicks' checked />Clicks");
                        $("input[name=impressions], input[name=clicks]", $(sqtChart)).change(function() { menu.change(); });
                        menu.change(function() {
                            $(".advertiser-chart", $(sqtChart)).remove();
                            _getReport(this.options[this.selectedIndex].value, function(data) {
                                var opts = { impressions: $("input[name=impressions]", $(sqtChart)).get(0).checked,
                                    clicks: $("input[name=clicks]", $(sqtChart)).get(0).checked
                                };
                                var chDest = $("<div class='advertiser-chart'/>");
                                $(sqtChart).append(chDest);
                                _createChart(chDest, data, opts);
                            });
                        });
                        menu.change();
                    });
                }
            };
        })(),
        Misc: {}
    };
})();
