function prep() 
{
	loadOrdersData();
}

var orders = {};
orders.ordersOnServer = {};
orders.ordersDataTable = [];

orders.handleGetOrdersFailure = function (o)
{
	alert(o);
}

orders.addOrder = function(o)
{
	//alert(o);
	this.ordersOnServer[o.id]=o;
	this.ordersDataTable.push({id:o.id, customerName:o.customerName, company: o.company, status:o.status, tracking: o.tracking, created: o.created});
};
 
orders.dateFormatter = function(elCell, oRecord, oColyoumn, oData)
{
	elCell.innerHTML = oData.substr(0, 10);
	elCell.title = oData;
};

orders.chopFormatter = function(elCell, oRecord, oColyoumn, oData)
{
	if(oData.length<30)
	{
		elCell.innerHTML = oData;
		elCell.title = "";
	}
	else
	{
		elCell.innerHTML = oData.substr(0, 27)+"...";
		elCell.title = oData;
	}
};

orders.proofFormatter = function(elCell, oRecord, oColumn, oData)
{
	elCell.innerHTML = "<button>Proof</button>";
};

orders.handleGetOrdersSuccess = function (o)
{
	var returnObj;
	var messages;
	try 
	{
		returnObj = YAHOO.lang.JSON.parse(o.responseText);
		messages = returnObj.data;
	}
	catch (x) 
	{
		alert("JSON Parse failed!"+x.message+": "+o.responseText);
		return;
	}
	
	this.ordersDataTable = [];
	
	for(var i = 0; i<messages.length; i++)
	{
		this.addOrder(messages[i]);
	}

	var selectorColumns = [ 
		/*{key:"id", sortable:true, resizeable:true}*/
		{key:"customerName", label:"Customer Name", formatter:orders.chopFormatter, sortable:true, resizeable:false},
		{key:"company", label:"Company", formatter:orders.chopFormatter, sortable:true, resizeable:false},
		{key:"status", label:"Status", formatter:orders.chopFormatter, sortable:true, resizeable:false},
		{key:"tracking", label:"Tracking", sortable:false, resizeable:false},
		{key:"created", label:"Created", formatter:orders.dateFormatter, sortable:true, resizeable:false}
	];
	
	ordersDataSource = new YAHOO.util.DataSource(this.ordersDataTable);
	ordersDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
	ordersDataSource.responseSchema = {
		fields: ["id", "customerName", "company", "status", "tracking", "created"]
		//fields: ["id", "title"]
	};
	ordersTable = new YAHOO.widget.DataTable("ordersContainer", selectorColumns, ordersDataSource, {caption:"Select a Book", selectionMode:"single", scrollable:true, height:"10em"});
	ordersTable.subscribe("rowMouseoverEvent", ordersTable.onEventHighlightRow); 
	ordersTable.subscribe("rowMouseoutEvent", ordersTable.onEventUnhighlightRow); 
	ordersTable.subscribe("rowClickEvent", ordersTable.onEventSelectRow); 
}
	
orders.handleGetOrderInfoSuccess = function (o)
{
	var returnObj;
	var message;
	try 
	{
		returnObj = YAHOO.lang.JSON.parse(o.responseText);
		message = returnObj.data;
	}
	catch (x) 
	{
		alert("JSON Parse failed!"+x.message+": "+o.responseText);
		return;
	}
	
	$("selectedOrderDisplay").style.display="block";
	$("orderId").innerHTML = message.printNoderderId;
	if(message.purchaseOrder)
	{
		$("poWrapper").style.display="block";
		$("purchaseOrder").innerHTML = message.purchaseOrder;
	}
	else
		$("poWrapper").style.display="none";
		
	var address = message.deliveryAddress;
	
	if(address.carrierService)
		$("carrierService").innerHTML = address.carrierService;
	else
		$("carrierService").innerHTML = "";
		
	$("name").innerHTML = address.firstName+" "+address.lastName;
	if(address.company)
	{
		$("company").innerHTML = address.company;
	}
	else{$("company").innerHTML = "";}
	
	var lines = "";
	if(address.line1)
	{
		lines+="<div>"+address.line1+"</div>";
	}
	if(address.line2)
	{
		lines+="<div>"+address.line2+"</div>";
	}
	if(address.line3)
	{
		lines+="<div>"+address.line3+"</div>";
	}
	if(address.line4)
	{
		lines+="<div>"+address.line4+"</div>";
	}
	$("addressLines").innerHTML = lines;
	
	$("city").innerHTML = address.city;
	if(address.state)
	{
		$("state").innerHTML = address.state;
	}else{$("state").innerHTML =""}
	$("postalCode").innerHTML = address.postalCode;
	$("country").innerHTML = address.country;
	var packages = message.packages;
	var packagesHTML = "";
	for(var i = 0; i<packages.length; i++)
	{
		var box = packages[i];
		if(box && box.tracking)
			packagesHTML += "\n<div>"+box.tracking+" -- ";
		if(box && box.shippedTime)
			packagesHTML += box.shippedTime.substr(0, 10)+"</div>";
	}
	if(packagesHTML!="")
		packagesHTML = "<h3>Packages</h3>\n"+packagesHTML;
	$("packages").innerHTML = packagesHTML;
	
	var items = message.items;
	var itemsHTML = "<table cellpadding=\"2\"><thead><tr><th>Book ID</th><th>Title</th><th>Cost</th><th>Quantity</th></tr></thead><tbody>";
	for(var i = 0; i<items.length; i++)
	{
		var item = items[i];
		itemsHTML += "<tr><td>"+item.book_ID+"</td><td>"+item.itemName+"</td><td>"+item.price+"</td><td style=\"text-align:right;\">"+item.quantity+"</td></tr>";
	}
	itemsHTML +="</tbody></table>";
	$("items").innerHTML = itemsHTML;
	
	var chargesHTML = "<table cellpadding=\"2\"><thead><tr><th>Description</th><th>Cost</th><th>Tax</th></tr></thead><tbody>";
	
	for(var i = 0; i<message.charges.length; i++)
	{
		var charge = message.charges[i];
		chargesHTML += "<tr><td>"+charge.description+"</td><td>"+charge.cost+"</td><td>"+charge.tax+"</td></tr>";
	}
	chargesHTML += "</tobdy></table>";
	$("charges").innerHTML = chargesHTML;
	
	if(message.debitEntry)
	{
		var debitEntry = message.debitEntry;
		
		$("payment").innerHTML = "<div>"+debitEntry.billingService+" "+debitEntry.amount+" "+debitEntry.status+"</div>";
	}
}

var getOrderInfoRequestCallback =
{
	success: orders.handleGetOrderInfoSuccess,
	failure: orders.handleGetOrdersFailure,
	scope: orders
};


orders.selectOrder = function()
{
	var record = ordersTable.getRecord(ordersTable.getSelectedRows()[0])
	if(record!=null)
	{
		var data = record.getData();
		//alert("got record.");
		YAHOO.util.Connect.asyncRequest('POST', '/users/getOrderInfo.jsp', getOrderInfoRequestCallback, "orderId="+data.id);
	}
};

orders.filter = function()
{
	alert(new Date($("startDateFilter").value).toUTCString());
};

var getOrdersRequestCallback =
{
	success: orders.handleGetOrdersSuccess,
	failure: orders.handleGetOrdersFailure,
	scope: orders
};
	
function loadOrdersData()
{
	YAHOO.util.Connect.asyncRequest('POST', '/users/getOrders.jsp', getOrdersRequestCallback, null);
}

YAHOO.util.Event.onDOMReady(prep);
