var active_class = null;
var inactive_class = null;
var current_active = null;
var debug = false;

var compose_x = null;
var compose_y = null;
var reader_panel = null;
var compose_panel = null;
var outboxTable = null;
var inboxTable  = null;

function popUp(URL) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,width=500,height=500');");
}

function toggleDisplay(div_id) {

	if (document.getElementById('div_' + div_id).style.display != 'none') return; 
	
	document.getElementById('div_' + div_id).style.display = '';
	document.getElementById('trig_' + div_id).className = active_class;
	
	document.getElementById('div_' + current_active).style.display = 'none';
	document.getElementById('trig_' + current_active).className = inactive_class;
	
	current_active = div_id;
}

function toggleConfig(active, inactive, current)
{
	active_class = active;
	inactive_class = inactive;
	current_active = current;
	
	if (debug) alert('configured');
}

function rateUp(comment_id)
{
	var rating = document.getElementById('rating_' + comment_id).value;
	rating++;
	rateComment(rating, comment_id);
}

function rateDown(comment_id)
{
	var rating = document.getElementById('rating_' + comment_id).value;
	rating--;
	rateComment(rating, comment_id);
}

function rateComment(rating, comment_id)
{
	document.getElementById('progress_' + comment_id).style.display = '';
	var url = '/Complaint/rank/comment_guid/' + comment_id + '/rank/' + rating;
	new Ajax.Request(url, {
	  method: 'get',
	  onFailure: function(transport) {
		  alert(transport.responseText);
	},
	  onSuccess: function(transport) {
	    document.getElementById('progress_' + comment_id).style.display = 'none';
	    document.getElementById('rating_' + comment_id).value = rating;
	    document.getElementById('span_rate_' + comment_id).innerHTML = rating;
	  }
	});


	return true;		
	
}

function replyPreviewSubmit()
{
	if (!document.getElementById('tosAgree').checked) {
		alert('You Must Check to Accept Terms of Services');
		return false;
	}
	
	var oReplyPreviewForm = document.getElementById('replyPreview');
	oReplyPreviewForm.submit();
}

function submitResolveReply(incident_guid, comment_guid)
{
	var callback = {
			success: function() {
				document.getElementById('div_sealed').style.display = 'block';
				document.getElementById('replyForm').submit();
			},
			failure: function() {
				alert('Please Try Again');
			}
		};
	
	var oTitle   = document.getElementsByName('comment_subject')[0];
	var oComment = document.getElementsByName('comment_text')[0];
	
	if (oTitle.value == '' || oComment.value == '') {
		alert('You must enter a comment as part of the resolution');
		return false;
	}
	
	var transaction = YAHOO.util.Connect.asyncRequest('GET', "/Complaint/accept/incident_guid/" + incident_guid + "/response_guid/" + comment_guid, callback, null);
	return false;
}


function submitReply()
{
	document.getElementById('replyForm').submit();
	return true;
}

function verifySubmission()
{
	var cs = document.getElementsByName('comment_subject')[0].value;
	var cc = document.getElementsByName('comment_text')[0].value;
	
	if (cs == '' || cc == '') {
		alert('You must enter text into both fields');
		return false;
	}
	
	var handleYes = function() {
		document.getElementById('comment_type_id').value = 2;
		dialogBox.hide();
		document.getElementById('replyForm').submit();
	};
	
	var handleNo  = function() {
		dialogBox.hide();
		document.getElementById('replyForm').submit();
	};
	
	var dialogBox = new YAHOO.widget.SimpleDialog("businessResponse", 
				 { width: "300px",
				   fixedcenter: true,
				   visible: false,
				   draggable: false,
				   close: true,
				   text: "Is this a business reply ? ",
				   icon: YAHOO.widget.SimpleDialog.ICON_HELP,
				   constraintoviewport: true,
				   buttons: [ { text:"Yes", handler:handleYes },
							  { text:"No",  handler:handleNo, isDefault:true } ]
				 } );

	dialogBox.setHeader("What Type of Response");
	
	// Render the Dialog
	dialogBox.render("replyContainer");

	dialogBox.show();

	return true;
}

/**
 * posting a message to the system, 
 * currently the default receiver is only the administrator
 */
function sendMessage()
{
	var postData = "message_subject=" + escape(document.getElementById('compose_message_subject').value) + "&message_text=" + escape(document.getElementById('compose_message_text').value);
	
	if (document.getElementById('compose_message_to')) {
		postData += "&compose_message_to=" + document.getElementById('compose_message_to').value;
	}
	
	var sUrl     = "/User/messages/send/1/";

	var callback = {
		//TODO: add animation
		success: function(o) 
		{
			compose_panel.hide();
			var obj = document.getElementById('div_sent_message');
			var Y = YAHOO.util;
			var m_anim = new Y.ColorAnim(obj, { backgroundColor: { from: '#FF0000', to: '#FFFFFF' } }, 2, Y.Easing.easeOut);
			
			m_anim.onStart.subscribe(function() { 
				var obj = document.getElementById('div_sent_message');
				obj.style.display = 'block'; 
				});
			
			m_anim.onComplete.subscribe(function() { 
				var obj = document.getElementById('div_sent_message');
				obj.style.display = 'none'; 
				});
			
			m_anim.animate();
		}
	};
	
	var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); 
}

function animateClose(obj)
{
	var attributes = { width: { to: 0 }, height: { to: 0} }; 
	
	compose_x = obj.style.left;
	compose_y = obj.style.top;
	
	var animateClose = new YAHOO.widget.Overlay(obj, { xy:[compose_x, compose_y],
		  visible:false,
		  width:"821px",
		  effect:[{effect:YAHOO.widget.ContainerEffect.SLIDE,duration:0.5}]} );
	//var anim = new YAHOO.util.Anim(obj, attributes);
	animateClose.render();
	//anim.render();
}

/**
 * initialize the area to be used for compsoing a message
 */
function drawCompose()
{
	document.getElementById('dv_compose_title').innerHTML = "Compose Message";
	document.getElementById('dv_compose_footer').innerHTML = "You are only allowed to send messages(s) to Administrator at this time";
	document.getElementById('composepanel').style.display = 'block';
	
	var obj = document.getElementById('composepanel');
	drawPanel(obj);
}

function drawPanel(obj)
{
	compose_panel = new YAHOO.widget.Panel(obj, {
        draggable: true,
        width: "821px",
        height: "300px",
        fillheight: 30,
        constraintoviewport:true
    });


	compose_panel.render();
}

function ViewMessageById(message_id)
{
	var callbacks = {
		    // Successful XHR response handler
		    success : function (o) {
		        var message = null;

		        // Use the JSON Utility to parse the data returned from the server
		        try {
		            message = YAHOO.lang.JSON.parse(o.responseText);
		        }
		        catch (x) {
		            alert("JSON Parse failed!");
		            return;
		        }

		        document.getElementById('dv_message_title').innerHTML  = message.message_subject;
		        document.getElementById('dv_message_body').innerHTML   = message.message_text;
		        document.getElementById('dv_message_footer').innerHTML = message.created_date;
		        
		        drawPanel(document.getElementById('resizablepanel'));
		    }
		};

	YAHOO.util.Connect.asyncRequest('GET',"/User/messages/message_guid/" + message_id, callbacks);

}

function replyMessageById(message_id)
{
	var callbacks = {
		    // Successful XHR response handler
		    success : function (o) {
		        var message = null;

		        // Use the JSON Utility to parse the data returned from the server
		        try {
		        	YAHOO.log("received " + o.responseText);
		            message = YAHOO.lang.JSON.parse(o.responseText);
		        }
		        catch (x) {
		            alert("JSON Parse failed!");
		            return;
		        }

		        document.getElementById('dv_compose_title').innerHTML  = "RE: " + message.message_subject;
		        document.getElementById('compose_message_subject').value = "RE: " + message.message_subject;
		        document.getElementById('compose_message_text').value   = ">" + message.message_text.replace("\n", "\n>");
		        document.getElementById('dv_compose_footer').innerHTML = message.created_date;
		        
		        if (document.getElementById('compose_message_to')) {
		        	document.getElementById('compose_message_to').value = message.message_author_username;
		        }
		    
		        document.getElementById('composepanel').style.display = 'block';
		        
		        drawPanel(document.getElementById('composepanel'));
			}
		};
	// Make the call to the server for JSON data
	YAHOO.util.Connect.asyncRequest('GET',"/User/messages/message_guid/" + message_id, callbacks);
}

function setupDataSource(mbox) 
{
	var datecol = "ReceivedDate";
	var namecol = "From";
	var ucol	= "SenderName";
	
	if (mbox == 'outbox') {
		datecol = "SentDate";
		namecol = "To";
		ucol    = "ReceiverName";
	}

	var datasource = new YAHOO.util.DataSource("/User/messages/get/" + mbox +"/");
		datasource.responseType = YAHOO.util.DataSource.TYPE_JSON;
		datasource.connXhrMode = "queueRequests";
		datasource.responseSchema = {
			resultsList: "Messages." + mbox,
			fields: ["MessageID", "Title", datecol, namecol, ucol],
			metaFields: {
            	totalRecords: "totalRecords" // Access to value in the server response
        	}
			
		};

	return datasource;
}

function displayComments() 
{
	var renderComments = function(oRequest, oParsedResponse, oPayload) {
		alert(oParsedResponse.results.length);
	};
	
	var handleError = function() {
		alert("Error Occured");
	};
	
	var comments = new YAHOO.util.XHRDataSource();
	comments.responseType = YAHOO.util.DataSource.TYPE_JSON;
	comments.connXhrMode = "queueRequests";
	
	comments.responseSchema = {
		resultsList: "Comments",
		fields: ["comment_subject", "created_date", "incident_guid", "business_name", "business_guid"]
	};
	
	var oCallback = {
			success : renderComments,
			faliure : handleError,
			scope: this
		};
	
	comments.sendRequest("/User/comments/", oCallback);
}

function getTableCol(mbox)
{
	 var replyMessage = function(cell, record, column, data)
	 {
		cell.innerHTML = "<a href='javascript:replyMessageById(" + record.getData("MessageID") + ")'><img src='/images/icons/reply.png' class='micon' /></a>"; 	 
	 }; 
	 
	 var deleteMessage = function(elCell, oRecord, oColumn, sData) {
          elCell.innerHTML = "<a href='javascript:DeleteMessageById(" + oRecord.getData("MessageID") + ")'><img src='/images/icons/reject.jpg' class='micon' /></a>";
     };

     var viewMessage = function(elCell, oRecord, oColumn, sData) {
          elCell.innerHTML = "<a href='javascript:ViewMessageById(" + oRecord.getData("MessageID") + ")'>" +  oRecord.getData("Title") +"</a>";
     };
	

	if (mbox == "outbox") {
		var outboxCols = [
			{key:"Title", label:"Title", sortable:true, width: 300, formatter: viewMessage},
		    {key:"ReceiverName", label:"Recepient", sortable: true, width: 150},
		    {key:"SentDate", label:"Sent Date", sortable: true, width: 200},
		    {label: "Del", formatter: deleteMessage}
		];

		return outboxCols;
	}
	
	var inboxCols = [
		{label: "Reply", formatter: replyMessage},	             	
		{key:"Title", label:"Title", sortable:true, width: 300, formatter: viewMessage},
		{key:"SenderName", label:"Sender", sortable: true, width: 150},
		{key:"ReceivedDate", label:"Received Date", sortable: true, width: 200},
		{label: "Del", formatter: deleteMessage}
	];

	return inboxCols;
}

function getCommentTableColumns()
{
	var commentUrl = function(cell, record, column, data)
	{
		cell.innerHTML = "<a href='/Complaint/view/incident_guid/" + record.getData("incident_guid") + "/'>" + record.getData("comment_subject") + "</a>";
	};
	
	var businessUrl = function(cell, record, column, data)
	{
		cell.innerHTML = "<a href='/Business/view/business_guid/" + record.getData("incident_guid") + "/'>" + record.getData("business_name") + "</a>";
	};
	
	var cols = [
	    {key: "comment_subject", label: "Title", formatter: commentUrl},
	    {key: "business_name", label: "Business Name", formatter: businessUrl},
	    {key: "created_date", label: "Comment Date"}
	];
}

function DeleteMessageById(message_id, obj)
{
	var callback = {
			success : function() { drawInbox(); } ,
			failure : function() { alert('Unable To Delete File'); },
			scope: this
		};
	
	if(confirm("Are you sure ?")) {
		var transaction = YAHOO.util.Connect.asyncRequest('GET', "/User/messages/delete/" + message_id, callback, null); 
	}
			
}

function drawOutbox() {
	YAHOO.example.XHR_JSON = function() {
	var outboxDS = setupDataSource("outbox");
	var outboxCol = getTableCol("outbox");
	
	var buildQueryString = function (state, dt) {
		return "startindex/" + state.pagination.recordOffset + "/sort/" + state.sortedBy.key + "/dir/" + ((YAHOO.widget.DataTable.CLASS_DESC === state.sortedBy.dir) ? "DESC" : "ASC");
	};
	
	outboxTable = new YAHOO.widget.DataTable("messagebox", outboxCol,
            outboxDS, {
			initialRequest:"/sort/Title/dir/asc/startIndex/0/results/10", 
			dynamicData: true, 
			generateRequest: buildQueryString,
			paginator: new YAHOO.widget.Paginator({ rowsPerPage: 10, containers: "div_paging" })});

	outboxTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
        oPayload.totalRecords = oResponse.meta.totalRecords;
        return oPayload;
    };
    

	var mySuccessHandler = function() {
        this.set("sortedBy", null);
        this.onDataReturnAppendRows.apply(this,arguments);
    };
    var myFailureHandler = function() {
        this.showTableMessage(YAHOO.widget.DataTable.MSG_ERROR, YAHOO.widget.DataTable.CLASS_ERROR);
        this.onDataReturnAppendRows.apply(this,arguments);
    };
    
    var callbackObj = {
        success : mySuccessHandler,
        failure : myFailureHandler,
        scope : outboxTable
    };
                    
    return {
        oDS: outboxDS,
        oDT: outboxTable
    };
	}();
}

function drawInbox() {
    YAHOO.example.XHR_JSON = function() {

    	var inboxData = setupDataSource("inbox");
    	var inboxCols = getTableCol("inbox");

    	var buildQueryString = function (state, dt) {
    		return "startindex/" + state.pagination.recordOffset + "/sort/" + state.sortedBy.key + "/dir/" + ((YAHOO.widget.DataTable.CLASS_DESC === state.sortedBy.dir) ? "DESC" : "ASC");
    	};
    	
        inboxTable = new YAHOO.widget.DataTable("messagebox", inboxCols,
                inboxData, {
        		initialRequest:"/sort/Title/dir/asc/startIndex/0/results/10", 
        		dynamicData: true, 
        		generateRequest: buildQueryString,
        		paginator: new YAHOO.widget.Paginator({ rowsPerPage:10, containers: "div_paging" })});

        inboxTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
            oPayload.totalRecords = oResponse.meta.totalRecords;
            return oPayload;
        };
            

        var mySuccessHandler = function() {
            this.set("sortedBy", null);
            this.onDataReturnAppendRows.apply(this,arguments);
        };
        
        var myFailureHandler = function() {
            this.showTableMessage(YAHOO.widget.DataTable.MSG_ERROR, YAHOO.widget.DataTable.CLASS_ERROR);
            this.onDataReturnAppendRows.apply(this,arguments);
        };
        
        var callbackObj = {
            success : mySuccessHandler,
            failure : myFailureHandler,
            scope : inboxTable
        };
                        
        return {
            oDS: inboxData,
            oDT: inboxTable
        };
    }();
};

function acceptResponse(incident_guid, response_guid)
{
	var callback = {
		success: function() {
			document.getElementById('div_acceptance_' + response_guid).style.display = 'none';
			//document.getElementById('div_sealed').style.display = 'block';
			document.getElementById('div_accepted_' + response_guid).style.display = 'block';
		},
		failure: function() {
			alert('Please Try Again');
		}
	};
	
	var transaction = YAHOO.util.Connect.asyncRequest('GET', "/Complaint/accept/incident_guid/" + incident_guid + "/response_guid/" + response_guid, callback, null); 
}

function declineResponse(incident_guid, response_id)
{
	var callback = {
			success: function() {
				document.getElementById('div_acceptance_' + response_guid).style.display = 'none';
				document.getElementById('div_rejected_' + response_guid).style.display = 'block';
			},
			failure: function() {
				alert('Please Try Again');
			},
			scope:	this
		};
		
		var transaction = YAHOO.util.Connect.asyncRequest('GET', "/Complaint/decline/incident_guid/" + incident_guid + "/response_guid/" + response_guid, callback, null); 
}

function rateComplaint()
{
}