var campaignMemberDataTable = null;

function campaignMemberTabSelected() {

    YAHOO.fonroots.XHR_JSON = function() {

        if (campaignMemberDataTable != null) {
            return;
        }
        
        var formatUrl = function(elCell, oRecord, oColumn, sData) {
            elCell.innerHTML = "<a href='" + baseUrl + "/advertiser/remove?type=campaign_member&campaign_nicename=" + oRecord.getData("camp") + "&username=" +  oRecord.getData("user") + "' target='_blank'>Remove</a>";
        };

        var myFormatDate = function(elCell, oRecord, oColumn, oData) {
            var oDate = new Date(oData);
            elCell.innerHTML = YAHOO.util.Date.format(oDate, {format: "%b %d, %Y %l:%M%P"});
        };

       var campaignMemberColumnDefs = [
            {key:"user", label:"Phone Number", width: 155, sortable:true},
            {key:"ads_sent", label:"Ads Sent", sortable:true, width: 80},
            {key:"responses", label:"Responses", sortable:true, width: 80},
            {key:"last_date", label:"Last Received", formatter: myFormatDate, sortable:true, width: 160},
            {key:"remove", label:"Remove Member", width: 100, formatter:formatUrl}
        ];
        /* add , formatter:formatUrl to remove later */


        var srcUrl = location.href  + "?query=campaign-members&json&paginate&results=20&";
        // console.log(srcUrl);
        var campaignMemberDataSource = new YAHOO.util.DataSource( srcUrl );
        campaignMemberDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        campaignMemberDataSource.connXhrMode = "ignoreStaleResponses";
        campaignMemberDataSource.responseSchema = {
            resultsList: "records",
            fields: [
            {key:"user"},
            {key:"ads_sent", parser: "number"},
            {key:"responses", parser: "number"},
            {key:"last_date", parser: "date"},
            {key:"camp"}
            ],
            metaFields: {
                totalRecords: "totalRecords",
                paginationRecordOffset : "startIndex",
	            paginationRowsPerPage : "pageSize"
            }
       };

       // A custom function to translate the js paging request into a query
        // string sent to the XHR DataSource
        var buildQueryString = function (state, dt) {
              
            var search = '';
            var searchInput = new YAHOO.util.Element('campaign_search_input');


            if (searchInput.get('element').value != 'search members') {
                search = searchInput.get('element').value;
            }
            var dir = "asc";
            if (state.sortedBy.dir == "yui-dt-desc") {
                dir = "desc";
            }
            var request = "startIndex=" + state.pagination.recordOffset + "&results=" + state.pagination.rowsPerPage + "&sort=" + state.sortedBy.key + "&dir=" + dir + "&search=" + search;
            return request;
        };


        var campaignMemberConfig = {
            dynamicData: true,
            generateRequest : buildQueryString,
            paginator: new YAHOO.widget.Paginator({ rowsPerPage:20 }),
            sortedBy : {key: "last_date", dir:YAHOO.widget.DataTable.CLASS_DESC},
            initialRequest : "startIndex=0&sort=last_date&dir=desc"
        }


        campaignMemberDataTable = new YAHOO.widget.DataTable(
                "campaign_members_data_table_wrap",
                campaignMemberColumnDefs,
                campaignMemberDataSource,
                campaignMemberConfig);

        // Update payload data on the fly for tight integration with latest values from server
        campaignMemberDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
            if (oPayload == null) {
                oPayload = {};
            }
            oPayload.totalRecords = oResponse.meta.totalRecords;
            return oPayload;
        }


        // Override function for custom server-side sorting
        campaignMemberDataTable.sortColumn = function(oColumn) {

            // Default ascending
            var sDir = "asc"

            // If already sorted, sort in opposite direction
            if(oColumn.key === this.get("sortedBy").key) {
                sDir = (this.get("sortedBy").dir === YAHOO.widget.DataTable.CLASS_ASC) ?
                        "desc" : "asc";
            }


            var search = '';
            var searchInput = new YAHOO.util.Element('campaign_search_input');
            if (searchInput.get('element').value != 'search members') {
                search = searchInput.get('element').value;
            }
            
            //
            // Pass in sort & search values to server request
            var newRequest = "sort=" + oColumn.key + "&dir=" + sDir + "&search=" + search;


            // Create callback for data request
            var oCallback = {
                success: this.onDataReturnInitializeTable,
                failure: this.onDataReturnInitializeTable,
                scope: this,
                argument: {
                    // Pass in sort values so UI can be updated in callback function
                    sorting: {
                        key: oColumn.key,
                        dir: (sDir === "asc") ? YAHOO.widget.DataTable.CLASS_ASC : YAHOO.widget.DataTable.CLASS_DESC
                    }
                }
            }

            // Send the request
            this.getDataSource().sendRequest(newRequest, oCallback);
        };

        return {
            ds: campaignMemberDataSource,
            dt: campaignMemberDataTable
        }

    }();
}

sendAdsDataTable = null;

function sendAdvertisementTabSelected() {

    if (sendAdsDataTable != null) {
        return;
    }
    // custom parsers
    var sendAdsFormatSelect = function(elCell, oRecord, oColumn, sData ) {
        elCell.innerHTML = "<input class='memberCheck' type='checkbox' name='memberUsernames[]' value='" + oRecord.getData("user") +  "'/>"
    };

    var sendAdsFormatDate = function(elCell, oRecord, oColumn, oData) {
        var oDate = new Date(oData);
        elCell.innerHTML = YAHOO.util.Date.format(oDate, {format: "%b %d, %Y %l:%M%P"});
    };
    
    // Column definitions
    var sendAdsColumnDefs = [
        {key:"select", label:"Select", width: 50, formatter:sendAdsFormatSelect},
        {key:"user", label:"Phone Number", width: 84, sortable:true},
        {key:"last_date", label:"Last Received", formatter: sendAdsFormatDate, sortable:true, width: 150}
    ];

    // Create the DataSource instance
    var srcUrl = location.href  + "?query=campaign-members&json&paginate&results=20&";
    sendAdsDataSource = new YAHOO.util.DataSource(srcUrl);
    sendAdsDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
    sendAdsDataSource.responseSchema = {
        resultsList: "records",
        fields: [
        {key:"user"},
        {key:"last_date", parser: "date"}
        ],
        metaFields: {
            totalRecords: "totalRecords"
        }
    };

    // Datatable configuration
    var sendAdsConfig = {
        dynamicData: true,
        paginator: new YAHOO.widget.Paginator({ rowsPerPage:20 }),
        sortedBy : {key: "last_date", dir:YAHOO.widget.DataTable.CLASS_DESC},
        initialRequest : "startIndex=0&sort=last_date&dir=desc"
    };

    // Instantiate DataTable
    sendAdsDataTable = new YAHOO.widget.DataTable(
        "send_advertisements_table_wrap", // The dom element to contain the DataTable
        sendAdsColumnDefs,        // What columns will display
        sendAdsDataSource,        // The DataSource for our records
        sendAdsConfig             // Other configurations
    );

    sendAdsDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
        oPayload.totalRecords = oResponse.meta.totalRecords;
        return oPayload;
    }

    return {
        ds: sendAdsDataSource,
        dt: sendAdsDataTable
    }
}

function sendAdvertisementTabSelectedObsolete() {
    
    YAHOO.fonroots.XHR_JSON = function() {
        var formatSelect = function(elCell, oRecord, oColumn, sData) {
            elCell.innerHTML = "<input class='memberCheck' type='checkbox' name='memberUsernames[]' value='" + oRecord.getData("user") +  "'/>"
        };

        var myFormatDate = function(elCell, oRecord, oColumn, oData) {
            var oDate = new Date(oData);
            elCell.innerHTML = YAHOO.util.Date.format(oDate, {format: "%b %d, %Y %l:%M%P"});
        };

       var sendAdsColumnDefs = [
            {key:"select", label:"Select", width: 50, formatter:formatSelect},
            {key:"user", label:"Phone Number", width: 84, sortable:true},
            {key:"last_date", label:"Last Received", formatter: myFormatDate, sortable:true, width: 150}
        ];
        /* add , formatter:formatUrl to remove later */


        var srcUrl = location.href  + "?";
        // console.log(srcUrl);
        var sendAdsDataSource = new YAHOO.util.DataSource( srcUrl );
        sendAdsDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        sendAdsDataSource.connXhrMode = "ignoreStaleResponses";
        sendAdsDataSource.responseSchema = {
            resultsList: "ResultSet.Result",
            fields: [
            {key:"user"},
            {key:"last_date", parser: "date"}
            ]
       };

        var sendAdsSuccessHandler = function() {
            this.set("sortedBy", null);
            this.onDataReturnAppendRows.apply(this,arguments);
        };
        var sendAdsFailureHandler = function() {
            this.showTableMessage(YAHOO.widget.DataTable.MSG_ERROR, YAHOO.widget.DataTable.CLASS_ERROR);
            this.onDataReturnAppendRows.apply(this,arguments);
        };
        var callbackObj = {
            success : sendAdsSuccessHandler,
            failure : sendAdsFailureHandler,
            scope : sendAdsDataTable
        };


        var sendAdsDataTable = new YAHOO.widget.ScrollingDataTable("send_advertisements_table_wrap", sendAdsColumnDefs,
                sendAdsDataSource, { renderLoopSize: 100, initialRequest:"query=campaign-members&json"} );

        //sendAdsDataSource.sendRequest("query=campaign-members&json",
        //         callbackObj);

        return {
            oDS: sendAdsDataSource,
            oDT: sendAdsDataTable
        };
    }();
}


var memberDataTable = null;

function initMembersDataTable() {
    YAHOO.fonroots.XHR_JSON = function() {

        if (memberDataTable != null) {
            return;
        }
        var formatUrl = function(elCell, oRecord, oColumn, sData) {
            elCell.innerHTML = "<a href='" + baseUrl + "/advertiser/remove?type=advertiser_member&username=" + oRecord.getData("user") + "' target='_blank'>Remove</a>"
        };

        var myFormatDate = function(elCell, oRecord, oColumn, oData) {
            var oDate = new Date(oData);
            elCell.innerHTML = YAHOO.util.Date.format(oDate, {format: "%b %d, %Y %l:%M%P"});
        };

        var memberColumnDefs = [
            {key:"user", label:"Phone Number", width: 95, sortable:true},
            {key:"subs", label:"Subscriptions", width: 70, sortable:true},
            {key:"ads_sent", label:"Advertisements Sent", sortable:true, width: 120},
            {key:"responses", label:"Responses", sortable:true, width: 80},
            {key:"last_date", label:"Last Received", formatter: myFormatDate, sortable:true, width: 120},
            {key:"remove", label:"Remove", width: 60, formatter:formatUrl}
        ];
        /* add , formatter:formatUrl to remove later */


        var srcUrl = location.href  + "?query=advertiser-members&json&paginate&results=20&";
        var memberDataSource = new YAHOO.util.DataSource( srcUrl );
        memberDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        memberDataSource.connXhrMode = "ignoreStaleResponses";
        memberDataSource.responseSchema = {
            resultsList: "records",
            fields: [
            {key:"user"},
            {key:"subs", parser: "number"},
            {key:"ads_sent", parser: "number"},
            {key:"responses", parser: "number"},
            {key:"last_date", parser: "date"}
            ],
            metaFields: {
                totalRecords: "totalRecords",
                paginationRecordOffset : "startIndex",
	            paginationRowsPerPage : "pageSize"
            }
       };

             // A custom function to translate the js paging request into a query
        // string sent to the XHR DataSource
        var buildQueryString = function (state, dt) {

            var search = '';
            var searchInput = new YAHOO.util.Element('member_search_input');


            if (searchInput.get('element').value != 'search members') {
                search = searchInput.get('element').value;
            }
            var dir = "asc";
            if (state.sortedBy.dir == "yui-dt-desc") {
                dir = "desc";
            }
            var request = "startIndex=" + state.pagination.recordOffset + "&results=" + state.pagination.rowsPerPage + "&sort=" + state.sortedBy.key + "&dir=" + dir + "&search=" + search;
            return request;
        };

       // Datatable configuration
        var memberConfig = {
            dynamicData: true,
            generateRequest : buildQueryString,
            paginator: new YAHOO.widget.Paginator({ rowsPerPage:20 }),
            sortedBy : {key: "last_date", dir:YAHOO.widget.DataTable.CLASS_DESC},
            initialRequest : "startIndex=0&sort=last_date&dir=desc"
        };


        memberDataTable = new YAHOO.widget.ScrollingDataTable(
                "members_data_table_wrap",
                memberColumnDefs,
                memberDataSource,
                memberConfig
            );

        // memberDataSource.sendRequest("query=advertiser-members&json",
        //      callbackObj);

        
        memberDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
            if (oPayload == null) {
                oPayload = {};
            }
            oPayload.totalRecords = oResponse.meta.totalRecords;
            return oPayload;
        }

                // Override function for custom server-side sorting
        memberDataTable.sortColumn = function(oColumn) {

            // Default ascending
            var sDir = "asc"

            // If already sorted, sort in opposite direction
            if(oColumn.key === this.get("sortedBy").key) {
                sDir = (this.get("sortedBy").dir === YAHOO.widget.DataTable.CLASS_ASC) ?
                        "desc" : "asc";
            }

            var search = '';
            var searchInput = new YAHOO.util.Element('member_search_input');
            if (searchInput.get('element').value != 'search members') {
                search = searchInput.get('element').value;
            }

            //
            // Pass in sort & search values to server request
            var newRequest = "sort=" + oColumn.key + "&dir=" + sDir + "&search=" + search;


            // Create callback for data request
            var oCallback = {
                success: this.onDataReturnInitializeTable,
                failure: this.onDataReturnInitializeTable,
                scope: this,
                argument: {
                    // Pass in sort values so UI can be updated in callback function
                    sorting: {
                        key: oColumn.key,
                        dir: (sDir === "asc") ? YAHOO.widget.DataTable.CLASS_ASC : YAHOO.widget.DataTable.CLASS_DESC
                    }
                }
            }

            // Send the request
            this.getDataSource().sendRequest(newRequest, oCallback);
        };


        return {
            ds: memberDataSource,
            dt: memberDataTable
        }

    }();
}

var adsDataTable = null;

function advertisementsTabSelected() {

    YAHOO.fonroots.XHR_JSON = function() {

        if (adsDataTable != null) {
            return;
        }
        
        var formatConvRate = function(elCell, oRecord, oColumn, oData) {
            /* SLW, TODO Not yet converted */
            elCell.innerHTML =  oData.toFixed(1) + "%";
        };

        var formatDetails = function(elCell, oRecord, oColumn, oData) {
            elCell.innerHTML = "<a href='" + baseUrl  + "/advertiser/advertisement/" + oRecord.getData("id") + ">Details</a>";

        };

        var myFormatDate = function(elCell, oRecord, oColumn, oData) {
           var oDate = new Date(oData);
  
           elCell.innerHTML = YAHOO.util.Date.format(oDate, {format: "%D %l:%M%P"});
        };

        var adsColumnDefs = [
            {key:"title", label:"Title", width: 50, sortable:true },
            {key:"msg", label:"Message", width: 100, sortable:true },
            {key:"date_created", label:"Start Date", sortable:true, formatter: myFormatDate, width: 90},
            {key:"ads_sent", label:"Ads Sent", width: 55},
            {key:"ads_resp", label:"Responses", width: 55},
            {key:"conv", label:"Conversion", formatter:formatConvRate, width: 60},
            {key:"opt_out", label:"Opted Out", width: 40},
            {key:"id", label:"Details", width: 50, formatter:formatDetails}

        ];
        /* add , formatter:formatUrl to remove later */


        var srcUrl = location.href  + "?";
        var adsDataSource = new YAHOO.util.DataSource( srcUrl );
        adsDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        adsDataSource.connXhrMode = "ignoreStaleResponses";
        adsDataSource.responseSchema = {
            resultsList: "ResultSet.Result",
            fields: [
            {key:"id", parser: "number"},
            {key:"title"},
            {key:"msg"},
            {key:"date_created", parser: "date"},
            {key:"ads_sent", parser: "number"},
            {key:"ads_resp", parser: "number"},
            {key:"conv", parser: "number"},
            {key:"opt_out", parser: "number"},
            {key:"new_members", parser: "number"}
            ]
       };

        var adsSuccessHandler = function() {
            this.set("sortedBy", null);
            this.onDataReturnAppendRows.apply(this,arguments);
        };
        var adsFailureHandler = function() {
            this.showTableMessage(YAHOO.widget.DataTable.MSG_ERROR, YAHOO.widget.DataTable.CLASS_ERROR);
            this.onDataReturnAppendRows.apply(this,arguments);
        };
        var callbackObj = {
            success : adsSuccessHandler,
            failure : adsFailureHandler,
            scope : adsDataTable
        };

        var adsConfigs = {
            paginator : new YAHOO.widget.Paginator({
                rowsPerPage    : 10
            })
        };

        adsDataTable = new YAHOO.widget.DataTable("advertisements_table_wrap", adsColumnDefs,
                adsDataSource, 
                {
                    initialRequest:"query=advertisements-summary&json",
                    paginator : new YAHOO.widget.Paginator({rowsPerPage : 10, containers : ['paging_bottom']})
                }
         );

        //  adsDataSource.sendRequest("query=advertisements-summary&json",
        //  callbackObj);

        return {
            oDS: adsDataSource,
            oDT: adsDataTable
        };
    }();
}


function onSearchButtonClick(e)
{
    var searchInput = new YAHOO.util.Element('campaign_search_input');

    var newRequest = "startIndex=0&sort=user&dir=asc&search=" + searchInput.get('element').value;


    // Sends a request to the DataSource for more data
    var oCallback = {
        success : campaignMemberDataTable.onDataReturnInitializeTable,
        failure : campaignMemberDataTable.onDataReturnInitializeTable,
        scope : campaignMemberDataTable,        
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "user",
                dir: YAHOO.widget.DataTable.CLASS_ASC
            }
        }
  
    };
    campaignMemberDataTable.getDataSource().sendRequest(newRequest, oCallback);

}

function onResetButtonClick(e) {

     var searchInput = new YAHOO.util.Element('campaign_search_input');
     searchInput.get('element').value = '';


    var newRequest = "startIndex=0&sort=last_date&dir=desc&search=" + searchInput.get('element').value;

    // Sends a request to the DataSource for more data
    var oCallback = {
        success : campaignMemberDataTable.onDataReturnInitializeTable,
        failure : campaignMemberDataTable.onDataReturnInitializeTable,
        scope : campaignMemberDataTable,
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "last_date",
                dir: YAHOO.widget.DataTable.CLASS_DESC
            }
        }
    };
    campaignMemberDataTable.getDataSource().sendRequest(newRequest, oCallback);
}

function onSearchInputFocus(e) {

     var searchInput = new YAHOO.util.Element('campaign_search_input');
     if (searchInput.get('element').value == 'search members') {
        searchInput.get('element').value = '';
     }
}


function campaignMembersInit() {

   advertisementsTabSelected();

   var campaignTabs = new YAHOO.widget.TabView("campaign_detail_tabs",  { activeIndex: 0 });

   var advertisementsTab = campaignTabs.getTab(0);
   var sendAvertisementTab = campaignTabs.getTab(1);
   var campaignMemberTab = campaignTabs.getTab(3);

   advertisementsTab.addListener('click', advertisementsTabSelected);
   sendAvertisementTab.addListener('click', sendAdvertisementTabSelected);
   campaignMemberTab.addListener('click', campaignMemberTabSelected);


   YAHOO.util.Event.onContentReady("campaign_search_btn", function() {
                    var searchButton = new YAHOO.util.Element("campaign_search_btn");
                    searchButton.on("click", onSearchButtonClick); } );
   YAHOO.util.Event.onContentReady("campaign_reset_btn", function () {
                    var resetButton = new YAHOO.util.Element("campaign_reset_btn");
                    resetButton.on("click", onResetButtonClick); });
   YAHOO.util.Event.onContentReady("campaign_search_input", function() {
                    var searchInput = new YAHOO.util.Element("campaign_search_input");
                    searchInput.on("focus", onSearchInputFocus); } );


}


function onMemberSearchButtonClick(e)
{
    var searchInput = new YAHOO.util.Element('member_search_input');

    var newRequest = "startIndex=0&sort=user&dir=asc&search=" + searchInput.get('element').value;

    // Sends a request to the DataSource for more data
    var oCallback = {
        success : memberDataTable.onDataReturnInitializeTable,
        failure : memberDataTable.onDataReturnInitializeTable,
        scope : memberDataTable,
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "user",
                dir: YAHOO.widget.DataTable.CLASS_ASC
            }
        }

    };
    memberDataTable.getDataSource().sendRequest(newRequest, oCallback);

}

function onMemberResetButtonClick(e) {

     var searchInput = new YAHOO.util.Element('member_search_input');
     searchInput.get('element').value = '';


    var newRequest = "startIndex=0&sort=last_date&dir=desc&search=" + searchInput.get('element').value;

    // Sends a request to the DataSource for more data
    var oCallback = {
        success : memberDataTable.onDataReturnInitializeTable,
        failure : memberDataTable.onDataReturnInitializeTable,
        scope : memberDataTable,
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "last_date",
                dir: YAHOO.widget.DataTable.CLASS_DESC
            }
        }
    };
    memberDataTable.getDataSource().sendRequest(newRequest, oCallback);
}

function onMemberSearchInputFocus(e) {

     var searchInput = new YAHOO.util.Element('member_search_input');
     if (searchInput.get('element').value == 'search members') {
        searchInput.get('element').value = '';
     }
}


// Advertisement Receivers

var adReceiversDataTable = null;

function onAdReceiversSearchButtonClick(e)
{    
    var searchInput = new YAHOO.util.Element('ad_receivers_search_input');
    if (searchInput.get('element').value == 'search receivers') {
        searchInput.get('element').value = '';
    }
    var newRequest = "startIndex=0&sort=user&dir=asc&search=" + searchInput.get('element').value;


    // Sends a request to the DataSource for more data
    var oCallback = {
        success : adReceiversDataTable.onDataReturnInitializeTable,
        failure : adReceiversDataTable.onDataReturnInitializeTable,
        scope : adReceiversDataTable,
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "user",
                dir: YAHOO.widget.DataTable.CLASS_ASC
            }
        }

    };
    adReceiversDataTable.getDataSource().sendRequest(newRequest, oCallback);

}

function onAdReceiversResetButtonClick(e) {

     var searchInput = new YAHOO.util.Element('ad_receivers_search_input');
     searchInput.get('element').value = '';


    var newRequest = "startIndex=0&sort=user&dir=asc&search=" + searchInput.get('element').value;

    // Sends a request to the DataSource for more data
    var oCallback = {
        success : adReceiversDataTable.onDataReturnInitializeTable,
        failure : adReceiversDataTable.onDataReturnInitializeTable,
        scope : adReceiversDataTable,
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "user",
                dir: YAHOO.widget.DataTable.CLASS_ASC
            }
        }
    };
    adReceiversDataTable.getDataSource().sendRequest(newRequest, oCallback);
}

function onAdReceiversSearchInputFocus(e) {

     var searchInput = new YAHOO.util.Element('ad_receivers_search_input');
     if (searchInput.get('element').value == 'search receivers') {
        searchInput.get('element').value = '';
     }
}

function onAdReceiversCSVButtonClick(e) {

    var search = '';
    var searchInput = new YAHOO.util.Element('ad_receivers_search_input');

    if (searchInput.get('element').value != 'search receivers') {
        search = searchInput.get('element').value;
    }
    var dir = "asc";
    if ( adReceiversDataTable.getState().sortedBy.dir == "yui-dt-desc") {
        dir = "desc";
    }

    var handleSuccess = function(o) {
        return true;
    };
    
    var callback = {
        success: handleSuccess,
        failure: handleSuccess,
        argument: { foo:"foo", bar:"bar" }
    }
    // Note the use of csv instead of json
    var srcUrl = location.href  + "?query=received-members&csv&paginate&results=20&startIndex=" + adReceiversDataTable.getState().pagination.recordOffset + "&results=" + adReceiversDataTable.getState().pagination.rowsPerPage + "&sort=" + adReceiversDataTable.getState().sortedBy.key + "&dir=" + dir + "&search=" + search;
  	// console.log("onAdReceiversCSVButtonClick srcUrl=" . srcUrl);


    window.open(srcUrl, "Download");
    // var transaction = YAHOO.util.Connect.asyncRequest('GET', srcUrl, callback, null);

}



function adReceiversTabSelected()
{
    YAHOO.fonroots.XHR_JSON = function() {

        if (adReceiversDataTable != null) {
            return;
        }

        var formatConvRate = function(elCell, oRecord, oColumn, oData) {
            /* SLW, TODO Not yet converted */
            elCell.innerHTML =  oData.toFixed(1) + "%";
        };

        var formatMembers = function(elCell, oRecord, oColumn, oData) {
            elCell.innerHTML = "<a href='" + baseUrl + "advertiser/print-members?id=" + oRecord.getData("id") + "' target='_blank'>Members</a>";

        };

        var myFormatDate = function(elCell, oRecord, oColumn, oData) {
           var oDate = new Date(oData);

           elCell.innerHTML = YAHOO.util.Date.format(oDate, {format: "%D %l:%M%P"});
        };

        var adReceiversColumnDefs = [
            {key:"user", label:"User", width: 100, sortable:true },
            {key:"date_created", label:"Start Date", sortable:true, formatter: myFormatDate, width: 100}
        ];
        /* add , formatter:formatUrl to remove later */


        var srcUrl = location.href  + "?query=received-members&json&paginate&results=20&";
        var adReceiversDataSource = new YAHOO.util.DataSource( srcUrl );
        adReceiversDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        adReceiversDataSource.connXhrMode = "ignoreStaleResponses";
        adReceiversDataSource.responseSchema = {
            resultsList: "records",
            fields: [
            {key:"user"},
            {key:"msisdn"},
            {key:"date_created", parser: "date"},
            {key:"ads_sent", parser: "number"},
            {key:"responses", parser: "number"},
            {key:"last_date", parser: "date"}
            ],
            metaFields: {
                totalRecords: "totalRecords",
                paginationRecordOffset : "startIndex",
	            paginationRowsPerPage : "pageSize"
            }
       };

        // A custom function to translate the js paging request into a query
        // string sent to the XHR DataSource
        var buildQueryString = function (state, dt) {

            var search = '';
            var searchInput = new YAHOO.util.Element('ad_receivers_search_input');


            if (searchInput.get('element').value != 'search receivers') {
                search = searchInput.get('element').value;
            }
            var dir = "asc";
            if (state.sortedBy.dir == "yui-dt-desc") {
                dir = "desc";
            }
            var request = "startIndex=" + state.pagination.recordOffset + "&results=" + state.pagination.rowsPerPage + "&sort=" + state.sortedBy.key + "&dir=" + dir + "&search=" + search;
            return request;
        };

       // Datatable configuration
        var adReceiversConfig = {
            dynamicData: true,
            generateRequest : buildQueryString,
            paginator: new YAHOO.widget.Paginator({ rowsPerPage:20 }),
            sortedBy : {key: "user", dir:YAHOO.widget.DataTable.CLASS_DESC},
            initialRequest : "startIndex=0&sort=user&dir=asc"
        };

         adReceiversDataTable = new YAHOO.widget.DataTable("ad_receivers_members_data_table_wrap", adReceiversColumnDefs,
                adReceiversDataSource, adReceiversConfig);
        
        //  adsDataSource.sendRequest("query=advertisements-summary&json",
        //  callbackObj);

        adReceiversDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
            if (oPayload == null) {
                oPayload = {};
            }
            oPayload.totalRecords = oResponse.meta.totalRecords;
            return oPayload;
        }


                        // Override function for custom server-side sorting
        adReceiversDataTable.sortColumn = function(oColumn) {

            // Default ascending
            var sDir = "asc"

            // If already sorted, sort in opposite direction
            if(oColumn.key === this.get("sortedBy").key) {
                sDir = (this.get("sortedBy").dir === YAHOO.widget.DataTable.CLASS_ASC) ?
                        "desc" : "asc";
            }

            var search = '';
            var searchInput = new YAHOO.util.Element('ad_receivers_search_input');
            if (searchInput.get('element').value != 'search receivers') {
                search = searchInput.get('element').value;
            }

            //
            // Pass in sort & search values to server request
            var newRequest = "sort=" + oColumn.key + "&dir=" + sDir + "&search=" + search;


            // Create callback for data request
            var oCallback = {
                success: this.onDataReturnInitializeTable,
                failure: this.onDataReturnInitializeTable,
                scope: this,
                argument: {
                    // Pass in sort values so UI can be updated in callback function
                    sorting: {
                        key: oColumn.key,
                        dir: (sDir === "asc") ? YAHOO.widget.DataTable.CLASS_ASC : YAHOO.widget.DataTable.CLASS_DESC
                    }
                }
            }

            // Send the request
            this.getDataSource().sendRequest(newRequest, oCallback);
        };


        return {
            oDS: adReceiversDataSource,
            oDT: adReceiversDataTable
        };
    }();
}


// Advertisement Responders

var adRespondersDataTable = null;

function onAdRespondersSearchButtonClick(e)
{
    var searchInput = new YAHOO.util.Element('ad_responders_search_input');
    if (searchInput.get('element').value == 'search responders') {
        searchInput.get('element').value = '';
    }
    var newRequest = "startIndex=0&sort=user&dir=asc&search=" + searchInput.get('element').value;


    // Sends a request to the DataSource for more data
    var oCallback = {
        success : adRespondersDataTable.onDataReturnInitializeTable,
        failure : adRespondersDataTable.onDataReturnInitializeTable,
        scope : adRespondersDataTable,
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "user",
                dir: YAHOO.widget.DataTable.CLASS_ASC
            }
        }

    };
    adRespondersDataTable.getDataSource().sendRequest(newRequest, oCallback);

}

function onAdRespondersResetButtonClick(e) {

     var searchInput = new YAHOO.util.Element('ad_responders_search_input');
     searchInput.get('element').value = '';


    var newRequest = "startIndex=0&sort=user&dir=asc&search=" + searchInput.get('element').value;

    // Sends a request to the DataSource for more data
    var oCallback = {
        success : adRespondersDataTable.onDataReturnInitializeTable,
        failure : adRespondersDataTable.onDataReturnInitializeTable,
        scope : adRespondersDataTable,
        argument: {
            // Pass in sort values so UI can be updated in callback function
            sortedBy: {
                key: "user",
                dir: YAHOO.widget.DataTable.CLASS_ASC
            }
        }
    };
    adRespondersDataTable.getDataSource().sendRequest(newRequest, oCallback);
}

function onAdRespondersSearchInputFocus(e) {

     var searchInput = new YAHOO.util.Element('ad_responders_search_input');
     if (searchInput.get('element').value == 'search responders') {
        searchInput.get('element').value = '';
     }
}

function onAdRespondersCSVButtonClick(e) {

    var search = '';
    var searchInput = new YAHOO.util.Element('ad_responders_search_input');

    if (searchInput.get('element').value != 'search responders') {
        search = searchInput.get('element').value;
    }
    var dir = "asc";
    if ( adRespondersDataTable.getState().sortedBy.dir == "yui-dt-desc") {
        dir = "desc";
    }

    var handleSuccess = function(o) {
        return true;
    };

    var callback = {
        success: handleSuccess,
        failure: handleSuccess,
        argument: { foo:"foo", bar:"bar" }
    }
    // Note the use of csv instead of json
    var srcUrl = location.href  + "?query=responders&csv&paginate&results=20&startIndex=" + adRespondersDataTable.getState().pagination.recordOffset + "&results=" + adRespondersDataTable.getState().pagination.rowsPerPage + "&sort=" + adRespondersDataTable.getState().sortedBy.key + "&dir=" + dir + "&search=" + search;
  	// console.log("onAdRespondersCSVButtonClick srcUrl=" . srcUrl);


    window.open(srcUrl, "Download");
    // var transaction = YAHOO.util.Connect.asyncRequest('GET', srcUrl, callback, null);

}



function adRespondersTabSelected()
{
    YAHOO.fonroots.XHR_JSON = function() {

        if (adRespondersDataTable != null) {
            return;
        }

        var formatConvRate = function(elCell, oRecord, oColumn, oData) {
            /* SLW, TODO Not yet converted */
            elCell.innerHTML =  oData.toFixed(1) + "%";
        };

        var formatMembers = function(elCell, oRecord, oColumn, oData) {
            elCell.innerHTML = "<a href='" + baseUrl + "advertiser/print-members?id=" + oRecord.getData("id") + "' target='_blank'>Members</a>";

        };

        var myFormatDate = function(elCell, oRecord, oColumn, oData) {
           var oDate = new Date(oData);

           elCell.innerHTML = YAHOO.util.Date.format(oDate, {format: "%D %l:%M%P"});
        };

        var adRespondersColumnDefs = [
            {key:"user", label:"User", width: 100, sortable:true },
            {key:"date_created", label:"Start Date", sortable:true, formatter: myFormatDate, width: 100}
        ];
        /* add , formatter:formatUrl to remove later */


        var srcUrl = location.href  + "?query=responders&json&paginate&results=20&";
        var adRespondersDataSource = new YAHOO.util.DataSource( srcUrl );
        adRespondersDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        adRespondersDataSource.connXhrMode = "ignoreStaleResponses";
        adRespondersDataSource.responseSchema = {
            resultsList: "records",
            fields: [
            {key:"user"},
            {key:"msisdn"},
            {key:"date_created", parser: "date"},
            {key:"ads_sent", parser: "number"},
            {key:"responses", parser: "number"},
            {key:"last_date", parser: "date"}
            ],
            metaFields: {
                totalRecords: "totalRecords",
                paginationRecordOffset : "startIndex",
	            paginationRowsPerPage : "pageSize"
            }
       };

        // A custom function to translate the js paging request into a query
        // string sent to the XHR DataSource
        var buildQueryString = function (state, dt) {

            var search = '';
            var searchInput = new YAHOO.util.Element('ad_responders_search_input');


            if (searchInput.get('element').value != 'search responders') {
                search = searchInput.get('element').value;
            }
            var dir = "asc";
            if (state.sortedBy.dir == "yui-dt-desc") {
                dir = "desc";
            }
            var request = "startIndex=" + state.pagination.recordOffset + "&results=" + state.pagination.rowsPerPage + "&sort=" + state.sortedBy.key + "&dir=" + dir + "&search=" + search;
            return request;
        };

       // Datatable configuration
        var adRespondersConfig = {
            dynamicData: true,
            generateRequest : buildQueryString,
            paginator: new YAHOO.widget.Paginator({ rowsPerPage:20 }),
            sortedBy : {key: "user", dir:YAHOO.widget.DataTable.CLASS_DESC},
            initialRequest : "startIndex=0&sort=user&dir=asc"
        };

         adRespondersDataTable = new YAHOO.widget.DataTable("ad_responders_members_data_table_wrap", adRespondersColumnDefs,
                adRespondersDataSource, adRespondersConfig);

        //  adsDataSource.sendRequest("query=advertisements-summary&json",
        //  callbackObj);

        adRespondersDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
            if (oPayload == null) {
                oPayload = {};
            }
            oPayload.totalRecords = oResponse.meta.totalRecords;
            return oPayload;
        }


                        // Override function for custom server-side sorting
        adRespondersDataTable.sortColumn = function(oColumn) {

            // Default ascending
            var sDir = "asc"

            // If already sorted, sort in opposite direction
            if(oColumn.key === this.get("sortedBy").key) {
                sDir = (this.get("sortedBy").dir === YAHOO.widget.DataTable.CLASS_ASC) ?
                        "desc" : "asc";
            }

            var search = '';
            var searchInput = new YAHOO.util.Element('ad_responders_search_input');
            if (searchInput.get('element').value != 'search receivers') {
                search = searchInput.get('element').value;
            }

            //
            // Pass in sort & search values to server request
            var newRequest = "sort=" + oColumn.key + "&dir=" + sDir + "&search=" + search;


            // Create callback for data request
            var oCallback = {
                success: this.onDataReturnInitializeTable,
                failure: this.onDataReturnInitializeTable,
                scope: this,
                argument: {
                    // Pass in sort values so UI can be updated in callback function
                    sorting: {
                        key: oColumn.key,
                        dir: (sDir === "asc") ? YAHOO.widget.DataTable.CLASS_ASC : YAHOO.widget.DataTable.CLASS_DESC
                    }
                }
            }

            // Send the request
            this.getDataSource().sendRequest(newRequest, oCallback);
        };


        return {
            oDS: adRespondersDataSource,
            oDT: adRespondersDataTable
        };
    }();
}



function advertisementInit()
{
   var advertisementTab = new YAHOO.widget.TabView("advertisement_detail_tabs",  { activeIndex: 0 });

   var receiversTab = advertisementTab.getTab(1);
   var respondersTab = advertisementTab.getTab(2);


   receiversTab.addListener('click', adReceiversTabSelected);
   respondersTab.addListener('click', adRespondersTabSelected);


   YAHOO.util.Event.onContentReady("ad_receivers_search_btn", function() {
                    var adReceiversSearchButton = new YAHOO.util.Element("ad_receivers_search_btn");
                    adReceiversSearchButton.on("click", onAdReceiversSearchButtonClick); } );
   YAHOO.util.Event.onContentReady("ad_receivers_reset_btn", function () {
                    var adReceiversResetButton = new YAHOO.util.Element("ad_receivers_reset_btn");
                    adReceiversResetButton.on("click", onAdReceiversResetButtonClick); });
   YAHOO.util.Event.onContentReady("ad_receivers_search_input", function() {
                    var adReceiversSearchInput = new YAHOO.util.Element("ad_receivers_search_input");
                    adReceiversSearchInput.on("focus", onAdReceiversSearchInputFocus); } );

    YAHOO.util.Event.onContentReady("ad_receivers_csv_btn", function() {
                    var adReceiversCSVButton = new YAHOO.util.Element("ad_receivers_csv_btn");
                    adReceiversCSVButton.on("click", onAdReceiversCSVButtonClick); } );


   YAHOO.util.Event.onContentReady("ad_responders_search_btn", function() {
                    var adRespondersSearchButton = new YAHOO.util.Element("ad_responders_search_btn");
                    adRespondersSearchButton.on("click", onAdRespondersSearchButtonClick); } );
   YAHOO.util.Event.onContentReady("ad_receivers_reset_btn", function () {
                    var adRespondersResetButton = new YAHOO.util.Element("ad_responders_reset_btn");
                    adRespondersResetButton.on("click", onAdRespondersResetButtonClick); });
   YAHOO.util.Event.onContentReady("ad_receivers_search_input", function() {
                    var adRespondersSearchInput = new YAHOO.util.Element("ad_responders_search_input");
                    adRespondersSearchInput.on("focus", onAdRespondersSearchInputFocus); } );

    YAHOO.util.Event.onContentReady("ad_responders_csv_btn", function() {
                    var adRespondersCSVButton = new YAHOO.util.Element("ad_responders_csv_btn");
                    adRespondersCSVButton.on("click", onAdRespondersCSVButtonClick); } );

}



YAHOO.util.Event.onAvailable("campaign_detail_tabs", campaignMembersInit);
YAHOO.util.Event.onAvailable("members_data_table_wrap", initMembersDataTable);
YAHOO.util.Event.onAvailable("advertisement_detail_tabs", advertisementInit);

YAHOO.util.Event.onContentReady("member_search_btn", function() {
                    var searchButton = new YAHOO.util.Element("member_search_btn");
                    searchButton.on("click", onMemberSearchButtonClick); } );
YAHOO.util.Event.onContentReady("member_reset_btn", function () {
                    var resetButton = new YAHOO.util.Element("member_reset_btn");
                    resetButton.on("click", onMemberResetButtonClick); });
YAHOO.util.Event.onContentReady("member_search_input", function() {
                    var searchInput = new YAHOO.util.Element("member_search_input");
                    searchInput.on("focus", onMemberSearchInputFocus); } );

