var rebates = new Array();
var searchRebates = new Array();
var page = 1;
var pageSize = 10;
var sortDirection = 1;
var sortColumn = 1;

function documentReady() {
	loadAllRebates();
	
	// override submit functionality with ajax update
	$("#searchForms").submit(function() {
		var url = '';
		var searchString = '';
		if ($("#descSearch")[0].value.length > 0) {
			url = 'rebateDescSearch.ajx';
			searchString = $("#descSearch").attr('value');
		} else if($("#rebateSearch")[0].value.length > 0) {
			url = 'rebateNumberSearch.ajx';
			searchString = $("#rebateSearch").attr('value');
		} else if($("#skuSearch")[0].value.length > 0) {
			url = 'rebateSkuSearch.ajx';
			searchString = $("#skuSearch").attr('value');
		}
		$('#searchResults').show();
		
		//$('#searchResultsTable').attr('tBodies')[0].innerHTML = '<img src="store/20090519001/assets/js5/ajax-loader.gif"/>';
		//$('#searchResultsTableDiv').attr('innerHTML', '<img src="store/20090519001/assets/js5/ajax-loader.gif"/>');
		
		searchRebates = new Array();
		$.ajax({
			url: url + '?searchString=' + searchString,
			dataType: 'json',
			success: function(data) {
				if (data.length != 0 && data[0] != null) {
					for (var i = 0; i < data.length; i++) {
						searchRebates[i] = [data[i].description, 
						              padRebate(data[i].rebateNumber),
									  data[i].dept,
									  data[i].startDate,
									  data[i].stopDate];
					}
				}
			},
			complete: function() {
				updateSearchBody();
			}
		});
		return false;
	});
	
	$("#rebate_form").submit(function() {
		padAllRebates();
		$('#rebateInfo').hide();
		$('#printErrors').hide();
		// check accepted agreement
		if (!$('#legalAgreement').attr('checked')) {
			$('#printErrors').attr('innerHTML', 'You must accept the agreement below first.');
			$('#printErrors').show();
			return false;
		}
		var params = 'printRebates=';
		$.each($('#printRebates li input'), function(i, field) { 
			params += field.value + ','; 
		});
		$('#printRebates li input').removeClass('errorClass');
		$.ajax({
			url: 'printRebates.html',
			data: params,
			dataType: 'text',
			beforeSend:function(request) {
				if ($(window).height() > $('div.rebate_main_background').height()) {
					if ($(window).height() + $(window).scrollTop() < $('div.rebate_main_background').offset().top + $('div.rebate_main_background').height()) {
						$('html,body').scrollTop($('div.rebate_main_background').offset().top);
					}
				} else {
					$('html,body').scrollTop($('div.rebate_main_background').offset().top + $('div.rebate_main_background').height() - $(window).height());
				}
			},
			success: function(data) {
				if (data.indexOf('error') == 0) {
					if (data.length > 5) {
						$('#printErrors')[0].innerHTML = 'The number(s) you entered for the';
						var errors = data.substring(6, data.length - 1).split(',');
						for(error in errors) {
							$('#rebate' + errors[error]).addClass('errorClass');
							$('#printErrors').attr('innerHTML', $('#printErrors').attr('innerHTML') + ' #' + errors[error]);
						}
						$('#printErrors').attr('innerHTML', $('#printErrors').attr('innerHTML') + '  rebate(s) are not correct.  Please re-enter rebate numbers and submit again.');
					} else {
						$('#printErrors').attr('innerHTML', 'No valid rebate numbers entered');
					}
					$('#rebateInfo').hide();
					$('#printErrors').show();
				} else {
					$("#rebateLightbox-panel").show(function(){
						$("#rebateLightbox").fadeTo(300, .6);
						$("#rebateLightbox-panel").fadeIn(300);
						$("#rebateDownloadPopUp").show();
					});
					$("#rebateSkipTab").click(function(){
						$("#rebateLightbox, #rebateLightbox-panel").fadeOut(300);
					});
					$('#rebateDownloadBodyPopUp').attr('innerHTML', '<br/><b><u><a href="store/20090519001/assets/rebates/' + data + '" target="_blank">Click Here To Download & Print Your Rebate Coupons ></u></b></a><br/>&nbsp;');
				}
			},
			error: function(request, status, thrown) {
				$('#rebateInfo').attr('innerHTML', '');
				alert('error');
			}
		});
		return false;
	});
	$('#clearPrint').click(function() {
		$.each($('#printRebates li input'), function(i, field) { field.value = ''; });
		$('#rebateInfo').hide();
		$('#printErrors').hide();
	});
	$.each($('#searchResultsTable a[name=printRebateLink]'), function(i, field) {
		$(this).click(function() {
			return confirm('You must agree to the Rebate forms online policy to print rebates, click OK below to agree.\r\n\r\nI agree any alteration or use of rebate form shown in a manner other than as cited herein may result in federal prosecution under mail fraud statutes Title 18 United States Code, Sections 1341 and 1342.');
		});
	});
}

function rebateJson() {
	$.getJSON("rebateJson.ajx", function(rebate) {
		if (rebate) {
			alert('found rebate: ' + rebate + rebate[0].rebateNumber);
		} else {
			alert('error');
		}
	});
}

function loadAllRebates() {
	$.getJSON("loadAllRebates.ajx", function(data) {
		if (data) {
			rebates = data;
			if (rebates.length == 0) {$('#allRebatesTable')[0].tBodies[0].innerHTML="Error Retrieving Coupons";}
			else {
				for (var i = 0; i < rebates.length; i++) {
					rebates[i] = [rebates[i].description, 
					              padRebate(rebates[i].rebateNumber),
					              rebates[i].dept,
					              rebates[i].startDate,
					              rebates[i].stopDate];
				}
				updateTable();
			}
		} else {
			$('#allRebatesTable')[0].tBodies[0].innerHTML="Error Retrieving Coupons";
		}
	});
}

function changeColor(row) {
	var id = row.id;
	document.getElementById(id).className = 'rebatesRowColorHiLite';
}

function resetColor(row) {
	var id = row.id;
	var className = 'rebatesRowColor' + (id.substring(row.id.length - 1, row.id.length) % 2);
	document.getElementById(id).className = className;
}

function updateTable() {
	// ie is stoopid
	var divBody = new StringBuffer();
	divBody.append('<table id="allRebatesTable">');
	divBody.append('<thead>');
	divBody.append($('#allRebatesTable')[0].tHead.innerHTML);
	divBody.append('</thead>');
	divBody.append('<tbody>');
	divBody.append(createBody());
	divBody.append('</tbody>');
	divBody.append('</table>');
	$('#allRebatesTableDiv').attr('innerHTML', divBody.toString());
	
	//$('#pageInfo').attr('innerHTML', '' + ((page-1) * pageSize + 1) + '-' + (pageSize==0?rebates.length:page*pageSize <= rebates.length?page*pageSize:rebates.length) + ' of ' + rebates.length);
	updatePageNumbers();
	
	$.each($('#allRebatesTable a[name=printRebateLink]'), function(i, field) {
		$(this).click(function() {
			return confirm('You must agree to the Rebate forms online policy to print rebates, click OK below to agree.\r\n\r\nI agree any alteration or use of rebate form shown in a manner other than as cited herein may result in federal prosecution under mail fraud statutes Title 18 United States Code, Sections 1341 and 1342.');
		});
	});
}

function updateSearchBody() {
	// ie is stoopid
	var divBody = new StringBuffer();
	divBody.append('<table id="searchResultsTable">');
	divBody.append('<thead>');
	divBody.append($('#searchResultsTable').attr('tHead').innerHTML);
	divBody.append('</thead>');
	divBody.append('<tbody>');
	divBody.append(createSearchBody());
	divBody.append('</tbody>');
	divBody.append('</table>');
	$('#searchResultsTableDiv').attr('innerHTML', divBody.toString());
	
	$.each($('#searchResultsTable a[name=printRebateLink]'), function(i, field) {
		$(this).click(function() {
			return confirm('You must agree to the Rebate forms online policy to print rebates, click OK below to agree.\r\n\r\nI agree any alteration or use of rebate form shown in a manner other than as cited herein may result in federal prosecution under mail fraud statutes Title 18 United States Code, Sections 1341 and 1342.');
		});
	});
}

function updatePageNumbers() {
	var pageNumbers = rebates.length + ' Rebates';
	if (pageSize > 0) {
		pageNumbers += ' >>';	
	}
	// rebates.length
	if (page > 1) {
		pageNumbers += ' <a href="" onclick="page = ' + (page - 1) + ';updateTable();return false;">previous</a> ';
	}
	for (var i = 1; i < (pageSize == 0?1:rebates.length / pageSize + 1); i++) {
		pageNumbers += ' <a href="" onclick="page = ' + i + ';updateTable();return false;">' + i + '</a> '; 
	}
	if (pageSize != 0 && page * pageSize < rebates.length) {
		pageNumbers += ' <a href="" onclick="page = ' + (page + 1) + ';updateTable();return false;">next</a> ';
		pageNumbers += ' <a href="" onclick="page = ' + (Math.ceil(rebates.length / pageSize)) + ';updateTable();return false;">last</a> ';
	}
	$('#pageNumbers').attr('innerHTML', pageNumbers);

}

function createBody() {
	var tableBody = new StringBuffer();
	for (var i = (page - 1) * pageSize, stop = pageSize==0?rebates.length:page*pageSize <= rebates.length?page*pageSize:rebates.length; i < stop; i++ ) {
		tableBody.append(createRow(rebates, i));
	}
	return tableBody.toString();
}

function createSearchBody() {
	var tableBody = new StringBuffer();
	if (searchRebates.length == 0) {
		tableBody.append('No results found.');
	} else {
		for (var i = 0; i < searchRebates.length; i++) {
			tableBody.append(createRow(searchRebates, i));
		}
	}
	return tableBody.toString();
}

function createRow(rebateArray, index) {
	var buffer = new StringBuffer();
	if ( index%2 == 0) {
		buffer.append('<tr class="rebatesRowColor0" id="row' + index + 	'"onmouseover="changeColor(this)"onmouseout="resetColor(this)">');
	} else {
		buffer.append('<tr class="rebatesRowColor1" id="row' + index + '"onmouseover="changeColor(this)"onmouseout="resetColor(this)">');
	}
	buffer.append('<td>' + rebateArray[index][0] + '</td>');
	buffer.append('<td>' + rebateArray[index][1] + '</td>');
	buffer.append('<td>' + rebateArray[index][3] + '</td>');
	buffer.append('<td>' + rebateArray[index][4] + '</td>');
	buffer.append('<td> <a name="printRebateLink" href="store/20090519001/assets/rebates/' + rebateArray[index][1] + '.pdf" target="_blank">Print</a> </td>');
	buffer.append('</tr>');
	return buffer.toString();
}

// StringBuffer to build table
function StringBuffer() {
    this.__strings__ = new Array;
}
StringBuffer.prototype.append = function (str) {
    this.__strings__.push(str);
};
StringBuffer.prototype.toString = function () {
    return this.__strings__.join("");
};

function sortUp(column, search) {
	sortDirection = -1;
	sortColumn = column - 1;
	if (search) {
		searchRebates.sort(sortFunction);
		updateSearchBody();
	} else {
		rebates.sort(sortFunction);
		updateTable();
	}
}
function sortDown(column, search) {
	sortDirection = 1;
	sortColumn = column - 1;
	if (search) {
		searchRebates.sort(sortFunction);
		updateSearchBody();
	} else {
		rebates.sort(sortFunction);
		updateTable();
	}
}
function sortFunction(a, b) {
	return ((a[sortColumn] < b[sortColumn]) ? sortDirection : ((a[sortColumn] > b[sortColumn]) ? -1 * sortDirection : 0));
}

function padAllRebates() {
    for (i = 1; i < 9; i++) {
          if (document.getElementById("rebate" + i) != null && document.getElementById("rebate" + i).value != '') {
                document.getElementById("rebate" + i).value = padRebate(document.getElementById("rebate" + i).value);
          }
    }
}

function padRebate(rebateNum) {
    if (rebateNum.length < 4) {
          return padRebate("0" + rebateNum);
    }
    
    return rebateNum;
}


