function wrap(s){
    return s.replace(' ', '&nbsp;');
}
// It's used as event handler for offer row and offer div 
// and realizes "click on white space" feature
function toggleOfferMode(evt) {
	var targetId; 
	var offerId;
	var offerDiv = null;
	
	if (evt['srcElement']) {
	// it's IE...
		targetId = evt['srcElement'].parentNode.id;	
	} else {
	// it's Mozilla, Netscape, Firefox...
		targetId = evt['target'].parentNode.id;
	}
	if (targetId.indexOf('offer-row-') != -1) {
	// it's offer row cells...
		offerId = targetId.substring(10);
	} else if (targetId.indexOf('offer-') != -1) {
	// it's offer div...
		offerId = targetId.substring(6);
	} else {
		return 0;			
	}
	offers[offerId]['_is_detailed'] = !(offers[offerId]['_is_detailed']);
	offerDiv = document.getElementById('offer-' + offerId);
	if (offerDiv) {
		offerDiv.innerHTML = getOfferHTML(offers[offerId]);
	}
}
function showErrorForm() {
	var reportForm = document.getElementById('report-form');	
	var reportFormLabel = document.getElementById('report-form-label');	
	var reportFormLabelMsg = document.getElementById('report-form-label-msg');	
	if (reportFormLabelMsg.style.display == '') {
		reportFormLabelMsg.style.display = 'none';
	}
	if (reportForm.style.display == 'none') {
		reportForm.style.display = '';
		if (reportFormLabel) {
			reportFormLabel.innerHTML = 'See an error with this offer? Tell us about it here.';
		}
	}
	document.report['error_msg'].value = '';
}
function hideErrorForm() {
	var reportForm = document.getElementById('report-form');	
	var reportFormLabel = document.getElementById('report-form-label');	
	if (reportForm.style.display == '') {
		reportForm.style.display = 'none';
		if (reportFormLabel) {
			reportFormLabel.innerHTML = 'See an error with this offer? Tell us about it <a href="javascript:showErrorForm();">here</a>.';
		}
	}
}
function submitErrorReport() {
    var req = new Subsys_JsHttpRequest_Js();
	var _offerid = document.report['offerid'].value;
	var _error_msg = document.report['error_msg'].value;
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
			reportFormLabelMsg = document.getElementById('report-form-label-msg');	
			if (reportFormLabelMsg) {
				if (reportFormLabelMsg.style.display == 'none') {
					reportFormLabelMsg.style.display = '';
				}
				if (req.responseText == 'ok') {
					reportFormLabelMsg.innerHTML = 'Your message has been sent. Thanks!';
					reportFormLabelMsg.style.color = '#7DD100';
					hideErrorForm();
				} else if (req.responseText == 'input error') {
					reportFormLabelMsg.style.color = '#ff0000';
					reportFormLabelMsg.innerHTML = 'Your message must have at least 10 characters';
				} else {
					reportFormLabelMsg.style.color = '#ff0000';
					reportFormLabelMsg.innerHTML = 'Unknown error.';
				}
			}
            
        }
    }
    req.caching = true;
    req.open('POST', scriptDir + '/memberoffererror', true);
    req.send({ offerid : _offerid, error_msg : _error_msg });
}

function updateTable(){
    var table = document.getElementById('offer-table');
    var rowsNum = table.rows.length;
    var html;
    for (var i = 1; i < rowsNum; i++) {
        table.deleteRow(1);
    }
    selectedOffers = [];
    for (var id in offers) {
        if (!inArray('0', selection[0]) && !inArray(selection[0][0], offers[id]['cats'])) {
            continue;
        }
        if (!inArray('0', selection[1])) {
            if (inArray('1', selection[1]) && offers[id]['cc_required'] == 1) {
                continue;
            }
            if (inArray('3', selection[1]) && offers[id]['is_new'] == 0) {
                continue;
            }
            if (inArray('4', selection[1]) && offers[id]['is_featured'] == 0) {
                continue;
            }
        }
        selectedOffers.push(offers[id]);
    }
    selectedOffers.sort(sortOffers);
    var offset = (curPage - 1) * offersPerPage;
    for (var i = offset; i < Math.min(selectedOffers.length, offset + offersPerPage); i++) {
        var row = table.insertRow(i+1-offset);
		row.id = 'offer-row-' + selectedOffers[i]['id'];
		if(window.addEventListener){ // Mozilla, Netscape, Firefox
			row.addEventListener('click', toggleOfferMode, false);
		} else { // IE
			row.attachEvent('onclick', toggleOfferMode);
		}        
		if (i % 2 == 0) {
            row.className = 'row-even';
        }
        var cell = row.insertCell(0);
        cell.innerHTML = getOfferHTML(selectedOffers[i]);
        cell.className = "offer-cell";
        cell = row.insertCell(1);
        cell.className = "offer-cell offer-cell-details";
        html = '<a href="' + selectedOffers[i]['url'] + '" target="_blank"';
        if (showHelp == 1) {
            html += ' onclick="javascript:window.open(\'' + selectedOffers[i]['url'] + '\'); showOfferHelp(\'' + scriptDir + '\', ' + selectedOffers[i]['id'] + '); event.cancelBubble = true; return false;"';
        }
        html += ' onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage(\'get_started\',\'\',\'' + imgDir + '/get_started_on.gif\',1)"><img src="' + imgDir + '/get_started_off.gif" alt="Get Started" width="96" height="19" border="0" name="get_started" id="get_started" /></a>';
        cell.innerHTML = html;
        cell = row.insertCell(2);
        cell.className = "offer-cell offer-cell-details";
        html = '<table width="51" border="0" cellspacing="0" cellpadding="0"><tr><td width="50" background="' + imgDir + '/earnings.gif" align="center" valign="bottom" style="padding-bottom: 3px;"><a href="' + selectedOffers[i]['url'] + '" target="_blank"';
        if (showHelp == 1) {
            html += ' onclick="javascript:window.open(\'' + selectedOffers[i]['url'] + '\'); showOfferHelp(\'' + scriptDir + '\', ' + selectedOffers[i]['id'] + '); event.cancelBubble = true;  return false;"';
        }
        html += '><span class="white_earn">' + formCurrency(selectedOffers[i]['we_pay']) + '</span></a></td><td width="1"><img src="' + imgDir + '/spacer.gif" width="1" height="33" /></td></tr><tr><td><img src="' + imgDir + '/spacer.gif" width="50" height="1" /></td><td></td></tr></table>';
        cell.innerHTML = html;
        cell = row.insertCell(3);
        if (memberIsLoggedIn) {
			cell.className = "offer-cell offer-cell-details";
			cell.innerHTML = formCurrency(selectedOffers[i]['payment_required']);
			cell = row.insertCell(4);
		} 
        cell.className = "offer-cell offer-cell-details";
        cell.innerHTML = selectedOffers[i]['report_time'] == 0 ? 'Instant!' : selectedOffers[i]['report_time'] + ' day';
        if (selectedOffers[i]['report_time'] > 1) {
            cell.innerHTML += 's';
        }
    }
    sortSelect = '<select id="sort-select" name="sort-select" onchange="javascript: clickSort(this.value);">';
    for (var key in sortOptions) {
        sortSelect += '<option value="' + key + '"';
        if (sortOrder + '#' + sortDir == key) {
            sortSelect += ' selected="selected"';
        }
        sortSelect += '>' + sortOptions[key] + '</option>';
    }
    sortSelect += '</select>';
    document.getElementById('panel-table').innerHTML = '<table border="0" cellspacing="0" width="100%" cellpadding="0"><tr><td>Number of offers: ' + selectedOffers.length + '</td><td align="center">Sorted By: ' + sortSelect + '</td><td align="right">View: <span class="action" onclick="javascript:setBrief(true);">Brief</span> | <span class="action" onclick="javascript:setBrief(false);">Detailed</span></td></tr></table>';
    var col = 0, header = table.rows[0];
    for (var id in sortCols) {
        var html = '<nobr><span class="sort-header" style="cursor:pointer;" onclick="javascript:clickSort(\'' + id + '\')">' + sortCols[id] + '</span>';
        if (sortOrder == id) {
            html += '<span class="sort-sign">' + (sortDir == 'asc' ? '&#x25B2;' : '&#x25BC;') + '</span>';
        }
        html += '</nobr>';
        header.cells[col].innerHTML = html;
        col++;
    }
    updatePagers();
}
function getOfferHTML(offer){
    var html = '<div id="offer-' + offer['id'] + '" onclick="javascript:toggleOfferMode(event); event.cancelBubble = true; ">';
    html += '<table border="0" cellspacing="0" width="100%" cellpadding="3"><tr onclick="javascript:toggleMode(' + offer['id'] + ');"><td width="100%" background="' + imgDir + '/offer_name_bg.gif"><span class="action" onclick="javascript:toggleMode(' + offer['id'] + ');"><img src="' + imgDir + '/' + (offer['_is_detailed'] ? 'minus' : 'plus') + '.gif" alt="Earn Money by trying ' + offer['name'] + '" width="9" height="9" border="0" align="absmiddle" style="padding-right: 5px;" /></span><a href="' + offer['url'] + '" target="_blank" class="white_link"';
    if (showHelp == 1) {
        html += ' onclick="javascript:window.open(\'' + offer['url'] + '\'); showOfferHelp(\'' + scriptDir + '\', ' + offer['id'] + '); return false;"';
    }
    html += '>';
	
	if (offer['is_featured'] == '1' || offer['is_new']) {
        html += '<b>';
    }
	
	html += offer['name'];

	if (offer['is_featured'] == '1' || offer['is_new']) {
        html += '</b>';
    }

	if (offer['is_featured'] == '1') {
        html += '</td><td background="' + imgDir + '/offer_name_bg.gif"><img src="' + imgDir + '/spacer.gif" width="1" height="17" /></td><td background="' + imgDir + '/offer_name_bg.gif"><img alt="Special Offer!" src="' + imgDir + '/offer_name_special.gif" class="offer-icon" /></td>';
    } else if (offer['is_new']) {
        html += '</td><td background="' + imgDir + '/offer_name_bg.gif"><img src="' + imgDir + '/spacer.gif" width="1" height="17" /></td><td background="' + imgDir + '/offer_name_bg.gif"><img alt="New Offer!" src="' + imgDir + '/offer_name_new.gif" class="offer-icon" /></td>';
    }
	html += '</td></tr></table>';  
	if (offer['banner']) {
        html += '<div><a href="' + offer['url'] + '" target="_blank"';
        if (showHelp == 1) {
            html += ' onclick="javascript:window.open(\'' + offer['url'] + '\'); showOfferHelp(\'' + scriptDir + '\', ' + offer['id'] + '); event.cancelBubble = true;  return false;"';
        }
        html += '><img src="' + offer['banner'] + '" alt="Offer Ad" align="left" style="padding: 3px;" border="0" /></a></div>';
    }
    if (offer['_is_detailed']) {
        html += '<div onclick="javascript:toggleMode(' + offer['id'] + ');"><span style="font-size:12px; color: #555555;">' + offer['description'] + '</span></div><br />';
        if (memberIsLoggedIn) {
			html += '<input type="button" value="Click Here to Start!" onclick="javascript:window.open(\'' + offer['url'] + '\'); showOfferHelp(\'' + scriptDir + '\', ' + offer['id'] + '); return false;"><br /><br />'
				  + '<form name="report" action="' + scriptDir + '/memberoffers" method="post">'
				  + '<table border="0" cellspacing="3" cellpadding="0">'
				  + '<tr><td colspan="2"><sub id="report-form-label">See an error with this offer? Tell us about it <a href="javascript:showErrorForm();">here</a>.</sub></td></tr>'
				  + '<tr><td colspan="2"><sub id="report-form-label-msg" style="display: none; color: #7DD100"></sub></td></tr>'
				  + '<tr id="report-form" style="display: none;"><td><textarea name="error_msg" rows="3" cols="35" style="overflow: auto; font-size: 11px"></textarea><br/>'
				  + '<input type="button" value="Report Error" style="height: 20px; font-size: 10px" onclick="javascript:submitErrorReport();"/></td></tr></table>' 
				  + '<input type="hidden" name="offerid" value="' + offer['id'] + '"/>'
				  + '</form>';
		}
    }
    html += '</div>';
	var offerDiv = document.getElementById('offer-' + offer['id']);
	if (offerDiv) {
		if(window.addEventListener){ // Mozilla, Netscape, Firefox
			offerDiv.addEventListener('click', toggleOfferMode, false);
		} else { // IE
			offerDiv.attachEvent('onclick', toggleOfferMode);
		}        
	}
    return html;
}
function clickSort(sortBy){
	delimPos = sortBy.indexOf('#');
	if (delimPos > 0) {
		sortDir = sortBy.substring(delimPos + 1);
		sortOrder = sortBy.substring(0, delimPos);
	} else {	
		if (sortBy == sortOrder) {
			sortDir = sortDir == 'asc' ? 'desc' : 'asc';
		} else {
			sortDir = 'asc';
		}
		sortOrder = sortBy;
	}
    updateTable();
}
function sortOffers(a, b){
    var fa = a[sortOrder], fb = b[sortOrder];
    if (typeof(fa) == "string") {
        fa = fa.toLowerCase();
    }
    if (typeof(fb) == "string") {
        fb = fb.toLowerCase();
    }
    if (fa == fb) {
        return 0;
    }
    if (fa < fb) {
        return sortDir == 'asc' ? -1 : 1;
    } else {
        return sortDir == 'asc' ? 1 : -1;
    }
}
function formCurrency(n){
    return '$' + n.toFixed(2);
}
function inArray(e, arr){
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] == e) return true;
    }
    return false;
}
function delElem(e, arr){
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] != e) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
function clickCat(catId){
    metaCats[catId]['opened'] = !metaCats[catId]['opened'];
    showPanel();
}
function clickSubcat(cat, subcat){
    selection[cat] = [subcat];
    curPage = 1;
    showPanel();
    updateTable();
}
function setBrief(brief){
    for (id in offers) {
        offers[id]['_is_detailed'] = !brief;
    }
    updateTable();
}
function toggleMode(id) {
    offers[id]['_is_detailed'] = !(offers[id]['_is_detailed']);
    var offerDiv = document.getElementById('offer-' + id);
    if (offerDiv) {
        offerDiv.innerHTML = getOfferHTML(offers[id]);
    }
}
function dump(obj){
    var res = '';
    for (var key in obj) {
        res += key + ' ';
    }
    return res;
}
function updatePagers()
{
    var pages = Math.ceil(selectedOffers.length / offersPerPage);
    for (var id in {'pager-top': '', 'pager-bottom': ''}) {
        var pager = document.getElementById(id);
        var html = '';
        if (curPage > 1) {
            html += '<span class="action" onclick="javascript:setPage(' + (curPage - 1) + ');">Previous</span> ';
        } else {
            html += '<span class="current-link">Previous</span> ';
        }
        html += '&bull; ';
        for (var i = 1; i <= pages; i++) {
            if (curPage != i) {
                html += '<span class="action" onclick="javascript:setPage(' + i + ');">' + i + '</span> &bull; ';
            } else {
                html += '<span class="current-link">' + i + '</span> &bull; ';
            }
        }
        if (curPage < pages) {
            html += '<span class="action" onclick="javascript:setPage(' + (curPage + 1) + ');">Next</span>';
        } else {
            html += '<span class="current-link">Next</span>';
        }
        html += '<span class="indent"><label for="_offers_per_page">Offers per Page</label> <select name="_opp" id="_offers_per_page" onchange="javascript:setPageOffers(this.value);">';
        for (var i in {10: '', 25: '', 50: '', 100: '', 1000: ''}) {
            html += '<option value="' + i + '"';
            if (i == offersPerPage) {
                html += ' selected="selected"';
            }
            html += '>' + i + '</option>';
        }
        html += '</select></span>';
        pager.innerHTML = html;
    }
}
function setPage(p)
{
    curPage = p;
    updateTable();
}
function setPageOffers(value)
{
    offersPerPage = value;
    updateTable();
}
function showOfferHelp(prefix, offerId)
{
    var wnd = window.open(prefix + '/memberofferhelp?offerid=' + offerId, '_blank', 'width=350,height=450,resizable=1,scrollbars=1');
}
function showReportErrorWindow(prefix, offerId)
{
  		
	var width = 440;
	var height = 385;
	var left = (screen.availWidth / 2) - (width / 2);
	var top = (screen.availHeight / 2) - (height / 2);
    var wnd = window.open(prefix + '/memberoffererror?offerid=' + offerId, '_blank', 'width=' + width + ', height=' + height + ', resizable=1, scrollbars=0, left=' + left + ', top=' + top);
}