/**
 * @desc Formats a number as currency ($x,xxx.xx)
 * @param Number to format
 * @return String
 */
function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

var merchantArray;
/**
 * @desc Sorts the global var merchantArray
 * @param String Column to sort ('merchant', 'cps', 'avgSale')
 */
function sortTable(sortOn){
	merchantArray.sort( function(a, b){
		if( sortOn != 'merchant' )
		{
			if( a[sortOn] - b[sortOn] != 0 )
				return  b[sortOn] - a[sortOn];
			return a.merchant > b.merchant ? 1 : -1;
		}
		else
		{
			if( a.merchant == b.merchant )
				return 0;
			return a.merchant > b.merchant ? 1 : -1;
		}
	});
	printTable(sortOn);
}

/**
 * @desc Outputs HTML for the Offer Table
 * @param String The column to hilight ('merchant', 'cps', 'avgSale')
 */
function printTable(sortOn){
    
    $('sortOn_merchant').style.color = '#000';
    $('sortOn_cps').style.color = '#000';
    $('sortOn_avgSale').style.color = '#000';
    $('sortOn_'+sortOn).style.color = '#497F31';
    
	var builder = '';
	merchantArray.each( function(s){
        builder +=
            '<table><tr><td><input type="checkbox" name="_offer[]" value="' + s.id + '" /></td>' +
            '<th' + (sortOn=='merchant'?' class="sortByRow"':'') + ' nowrap>' +
            '<img src="/media/images/iconArrowSmallRight.gif" width="20" height="20" onclick="loadOfferSummary(this, ' + s.id + ')" />' +
            '<img src="/media/images/merchantLogos/logo_' + s.id + '.jpg" alt="' + s.merchant + '" title="' + s.merchant + '" width="140" height="40" /></th>' +
			'<td' + (sortOn=='cps'?' class="sortByRow"':'') + '>' + (s.cps ? s.cps+'%' : 'TBD') + '</td>' +
			'<td' + (sortOn=='avgSale'?' class="sortByRow"':'') + '>' + (s.avgSale ? formatCurrency(s.avgSale) : 'TBD') + '</td>' +
			'<td><a href="/networks/detail/merchant/' + s.id + '">Details</a></td></tr></table>' + 
			'<div id="offerSummary_' + s.id + '"></div>';
	});
	$('offerTableBody').innerHTML = builder + '';
	$('offerTableBody').style.opacity = 0;
	$('offerTableBody').style.filter = 'alpha(opacity=0)';
	Effect.Appear('offerTableBody');
}

/**
 * @desc Ajax call to load Offer Summary from ajax.offerSummary.php
 * @param int ID of merchant
 */
function loadOfferSummary(el, id){
    var div = $('offerSummary_' + id);
    if( (el.src).substr(-9) == 'Right.gif') //endsWith("iconArrowSmallRight.gif") )
    {
        el.src = "/media/images/iconArrowSmallLoading.gif";
        el.disabled = true;
        div.style.display = 'none';
        if( div.innerHTML == '' )
        {
            new Ajax.Request('/publishers/ajax/offer_summary/merchant/' + id, {
                onSuccess: function(t){
                    div.innerHTML = t.responseText;
                },
                onFailure: function(t){
                    div.innerHTML = '<h4 align="center">An error occured while loading the Offer Summary.</h4>';
                },
                onComplete: function(t){
                    el.src = "/media/images/iconArrowSmallDown.gif";
                    el.disabled = false;
                    Effect.BlindDown(div, {duration: 0.5});
                }
            });
        }
        else
        {
            el.src = "/media/images/iconArrowSmallDown.gif";
            el.disabled = false;
            Effect.BlindDown(div, {duration: 0.5});
        }
    }
    else
    {
        el.src = "/media/images/iconArrowSmallRight.gif";
        Effect.BlindUp(div, {duration: 0.5});
    }
}

/**
 * @desc Ajax call to ajax.emailOffers.php send email of the page
 */
function sendOffersEmail(emailForm){
    //alert('Form:' + Form.serialize($('_formOffersSubmit_' + emailForm)) + '&' + Form.serialize($('_formOffersSubmit')));
    var form = $('_formOffersSubmit_' + emailForm);
    if( form['_firstName'].value == '' ){
        alert('Please enter a first name.');
        return;
    }
    if( form['_lastName'].value == '' ){
        alert('Please enter a last name.');
        return;
    }
    if( !(/^[^\s,;]+@([^\s.,;]+\.)+[\w-]{2,}$/.test(form['_email'].value)) ){
        alert('Please enter a valid email address.');
        return;
    }
    new Ajax.Updater('_emailResponse_' + emailForm,
        '/publishers/ajax/email_list.html?' + Form.serialize($('_formOffersSubmit_' + emailForm)) + '&' + Form.serialize($('_formOffersSubmit')) );
}

/**
 * @desc Ajax call to ajax.searchNetwork.php to search for Offers by Network. Loads on array of objects into JS merchantsArray.
 * @ int ID of network
 */
function searchNetworks(id, ppc, coupon, freebies, datafeed){
    //alert('/publishers/ajax/search_network/network/' + id + '/' + (ppc?1:0) + '/' + (coupon?1:0) + '/' + (freebies?1:0) + '/' + (datafeed?1:0));
    $('filterButton').disabled=true;
    $('filterButton').value='Searching...';
    new Ajax.Request('/publishers/ajax/search_network/network/' + id + '/' + (ppc?1:0) + '/' + (coupon?1:0) + '/' + (freebies?1:0) + '/' + (datafeed?1:0), {
        onSuccess: function(t) { eval(t.responseText); },
        onFailure: function() { alert('The Merchant List failed to load. Please try again.'); },
        onComplete: function() { $('filterButton').disabled=false; $('filterButton').value='Go'; }
    });
}

function openPopup(title, id)
{
    window.open('/networks/popup/info/' + title + '/' + id, 'popup_' + title, 'scrollbars=1,width=330,height=300');
}
