var newMessage;

var myTabs = new YAHOO.widget.TabView();

function initMessages(user_id){
	my_user_id = user_id
		     
	var mySent = new YAHOO.widget.Tab({ 
		label: 'Sent', 
		content: '<div id="sent_tab"></div>'
	})
	
	var myReceived = new YAHOO.widget.Tab({ 
		label: 'Received', 
		content: '<div id="received_tab"></div>', 
		active: true 
	})
	 
	function handleClickSent(e) {
		document.getElementById('folder').value = 'sent'; 
		getNewMessages(user_id,'sent');
	} 
	
	function handleClickReceived(e) {  
		document.getElementById('folder').value = 'received'; 
		getNewMessages(user_id,'received');
	} 
	 
	mySent.addListener('click', handleClickSent);
	myReceived.addListener('click', handleClickReceived); 
	 
	myTabs.addTab(mySent ); 
	myTabs.addTab(myReceived );
	 
	myTabs.appendTo('message_table'); 
	
	getNewMessages(user_id);

}

// This function gets a list of messages given a user.  Data is returned as JSON and handled.

function getNewMessages(user_id){
	
	showLoading();
	var params = '&user_id='+user_id;

	switch (document.getElementById('folder').value){
		case 'sent': params += '&sender_status_id=1'; break;
		
		case 'received': params += '&recipient_status_id=1'; break;
	}

	var formObject = document.getElementById('filterForm'); 

	var callback = {
		success: function(o) {
			hideLoading();
			handleGetNewMessages(o);
		},
		failure: function(o) {
			hideLoading();
			alert('An error occured while retrieving messages. '+o.statusText);	  
		},
		argument: []
	}
	YAHOO.util.Connect.setForm(formObject); 
	var transaction = YAHOO.util.Connect.asyncRequest('POST', '/account/?action=custom&ricp=message_list' + params,  callback, null);
}

	
// This will be a callback function which will receive the results from the Perl
// creates a table of users.  THis function also handles errors returned from the perl code.
function handleGetNewMessages(o){
	
	var json_object = YAHOO.lang.JSON.parse(o.responseText);
	//alert ('dih!');
	if (json_object.errors != null){
		var errors = ''
		for (var error in json_object.errors){		
			errors += json_object.errors[error] + "\r\n";
		}
		alert(errors);
		
	} else if (json_object.messages != null){		
		//alert ('trying '+json_object.messages.length)
		var myResponse;	
		
		myResponse = json_object.messages;
		
		// Yahoo Line Chart	
		myDataSource = new YAHOO.util.DataSource(myResponse); 
		
		var myFormatAction = function(elCell, oRecord, oColumn, oData) { 
			elCell.innerHTML = '<a href="#" onclick="showMessage(' + oData  + ', \'Message\');">View</a> | <a href="#" onclick="deleteMessage(' + oData  + ');">Delete</a>'; 
		}; 
		
		// Yahoo Table
		var myColumnDefs = null
		
		if (json_object.folder == 'sent'){
			myColumnDefs = [ 
				{key:"created_date", label:"Date Sent", sortable:true}, 
				{key:"recipient", label:"To", sortable:true}, 
				{key:"subject", label:"Subject"},
				{key:"id", label:"Actions",formatter: myFormatAction}
			];
		} else if (json_object.folder == 'received') {
			myColumnDefs = [ 
				{key:"created_date", label:"Date Sent", sortable:true}, 
				{key:"sender", label:"From", sortable:true}, 
				{key:"subject", label:"Subject"},
				{key:"id", label:"Actions",formatter: myFormatAction}
			];
		}
		
		var myConfigs = null;
		
		if (json_object.messages.length > 11){
			myConfigs = { 
				paginator : new YAHOO.widget.Paginator({ 
					rowsPerPage    : 9 
				}) 
			};
		}
	
		// DataTable constructor syntax 
		var myDataTable = new YAHOO.widget.DataTable(json_object.folder+"_tab", myColumnDefs, myDataSource, myConfigs); 
				
	} else {
		alert("Unable to get list of messages.")	
	}
}

// This will be a callback function which will receive the results from the Perl
// creates a table of users.  THis function also handles errors returned from the perl code.




// Show Message Popup
function showMessage(message_id, title){
	
	showLoading();	

	var params = '&ajax=1';

	if (message_id != null) params += '&message_id=' + message_id;	
	
	closeShowMessage = function() {
		this.cancel();
	}
	
	reply = function() {
		showNewMessage(message_id);
		this.cancel();
	}

	var callback = {
		success: function(o) {
			hideLoading();
			//subscriptionDetails = showPopup('subscriptionDetails','Subscription Details for '+s_id,o.responseText,'650px','340px',false,false,false,{text: "Close", handler: closeSubscriptionDetails, isDefault: false})
			
			message = showPopup('showMessage', title, o.responseText, '550px', '370px',false,false,false,[{text: "Reply", handler: reply, isDefault: false},{text: "Close", handler: closeShowMessage, isDefault: false}] ); //ok_callback, save_callback, show_cancel, extra_buttons
		},
		failure: function(o) {
			hideLoading();
			alert('An error occured while loading the message. '+o.statusText);
		},
		argument: []
	}
			
	var transaction = YAHOO.util.Connect.asyncRequest('POST', '/account/?action=custom&ricp=message_view'+params, callback, null); 
}


// Show Message Popup
function deleteMessage(message_id){
	
	showLoading();	

	var params = '&ajax=1';

	if (message_id != null) params += '&message_id=' + message_id;	
	
	var callback = {
		success: function(o) {
			hideLoading();
			var json_object = YAHOO.lang.JSON.parse(o.responseText);
			if (json_object.errors != null){
				var errors = ''
				for (var error in json_object.errors){		
					errors += json_object.errors[error] + "\r\n";
				}
				alert(errors);
			} else if (json_object.status != null){
				alert(json_object.status);
				
			} else {
				alert('Message deleted.');
			}
			getNewMessages(my_user_id);			
		},
		failure: function(o) {
			hideLoading();
			alert('An error occured while deleting the message. '+o.statusText);
		},
		argument: []
	}
			
	var transaction = YAHOO.util.Connect.asyncRequest('POST', '/account/?action=custom&ricp=message_delete'+params, callback, null); 
}

// Show Message Popup
function showNewMessage(last_message_id){
	
	showLoading();	

	var params = '&ajax=1';

	if (last_message_id != null) params += '&last_message_id=' + last_message_id;
	
	
	closeShowNewMessage = function() {
		this.cancel();
	}
	
	send = function() {		
		sendMessage();
		//reply(message_id);
	}

	var callback = {
		success: function(o) {
			hideLoading();
			//subscriptionDetails = showPopup('subscriptionDetails','Subscription Details for '+s_id,o.responseText,'650px','340px',false,false,false,{text: "Close", handler: closeSubscriptionDetails, isDefault: false})
			
			newMessage = showPopup('showMessage', 'New Message', o.responseText, '550px', '370px',false,false,false,[{text: "Send", handler: send, isDefault: false},{text: "Cancel", handler: closeShowNewMessage, isDefault: false}] ); //ok_callback, save_callback, show_cancel, extra_buttons
		},
		failure: function(o) {
			hideLoading();
			alert('An error occured while loading the new message popup. '+o.statusText);
		},
		argument: []
	}
			
	var transaction = YAHOO.util.Connect.asyncRequest('POST', '/account/?action=custom&ricp=message_new'+params, callback, null); 
}


// Show Message Popup
function sendMessage(){
	
	var formObject = document.getElementById('messageNew'); 
	
	//if (formObject.recipient_id.selectedIndex == null || formObject.recipient_id.selectedIndex < 1){
	//	alert('You must select a user to send this message to.');
	//
	//} else {
		showLoading();	

		var params = '&ajax=1';
	
		var callback = {
			upload: function(o) {
				//alert('upload called');
				//alert(o.responseText);
				
				/*upload handler code*/
				//var json_object = YAHOO.lang.JSON.parse(o.responseText);
		
				/*if (json_object.errors != null){
					var errors = ''
					for (var error in json_object.errors){		
						errors += json_object.errors[error] + "\r\n";
					}
					alert(errors);
				} else {*/
					hideLoading();
					if(document.getElementById('folder') != null){
						document.getElementById('folder').value = 'sent';
						getNewMessages(my_user_id);
					}
					myTabs.selectTab(0);
					newMessage.cancel();				
				//}			
			},
			failure: function(o) {
				hideLoading();
				alert('An error occured while sending the message. '+o.statusText);
			},
			argument: []
		}
		
		YAHOO.util.Connect.setForm(formObject, true); 
				
		var transaction = YAHOO.util.Connect.asyncRequest('POST', '/account/?action=custom&ricp=message_send'+params, callback, null); 
	//}
}

