/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
var SERVICE_OUT_OF_ORDER = -2;
var MULTIPLE_MATCHES = -1;
var SINGLE_MATCH_BY_USER_ID = 0;
var SINGLE_MATCH_BY_NAME = 1;
var NO_MATCHES = 2;

var request_table;
var request_datasource;
var resubmit_formatter;
var xml_formatter;
var date_formatter;
var parameters_formatter;

var column_defs;
var column_editors;
var pop;

function handle_submit(row_id){
	//make_selection_handler
	var form = document.getElementById("user_contact_form");
	var selected = false;
	var contact_id = -1;
	var user_id = -1;
	for(i=0; i < form.elements.length && !selected; i++)
	{
		if(form.elements[i].type=="radio" && form.elements[i].checked == true)
		{
			selected = true;
			contact_id = form.elements[i].value;
		}
		
		if(form.elements[i].name=="user_id")
		{
			user_id = form.elements[i].value;
		}
	}
	if(!selected)
	{
		alert("You must make a selection");
		return false;
	}

	//alert(user_id);//proper
	//alert(contact_id);//proper
	//return false;
	//proceed with the association
	var callback = {
		success:function(o){
			data = YAHOO.lang.JSON.parse(o.responseText);
			if(data.proceed == true)
			{
				var new_callback = {
					success:function(o){
						result_data = YAHOO.lang.JSON.parse(o.responseText);
						if(!result_data)
							alert("Re-Pushing of data failed please try again");
						
						alert(result_data);
					},failure:function(o){
					}
				};
				var url = base_url + "map.php/"+ "web_service_management/re_post";
				var re_post = YAHOO.util.Connect.asyncRequest("POST", url, callback, "row_id="+row_id);
			}
			else{
				//alert("test");
				//alert(data);
				alert(data.message);
				pop.hide();
			}
		},failure:function(o){
			//not an option
		}
	};
	var url = base_url + "map.php/"+ "web_service_management/re_post";
	var retVal = YAHOO.util.Connect.asyncRequest("POST", url, callback, "row_id="+row_id+"&contact_id=" + contact_id);
}

function getFooter(row_id, data_is_null)
{
	var html = "";
	if(data_is_null)
	{
		html = "<input type='button' id='make_selection' value='Close' name='make_selection' onclick='pop.hide();'/> &nbsp; &nbsp;";
	}
	else
	{
	//var html = "<input type='button' id='make_selection' value='Submit' name='make_selection' onclick='return handle_submit(\'" + id + "\');'/> &nbsp; &nbsp;";
	html = "<input type='button' id='make_selection' value='Submit' name='make_selection' onclick='return handle_submit(" + row_id + ");'/> &nbsp; &nbsp;";
	//html += "<input type='button' id='cancel_selection' value='Cancel' name='cancel_selection' />";
	}
	return html;
}

function getContactSelectOption(contactData)
{
	var option = "<input type='radio' name='user_contact' value='"+contactData.ID+"'>&nbsp;" + contactData.FirstName + " " + contactData.LastName + "</input>";
	option += "<br />";
	option += "&nbsp;&nbsp;&nbsp;&nbsp;Home Address 1: ";
	option += (contactData.HomeAddress1 != undefined && contactData.HomeAddress1 != null)?contactData.HomeAddress1:'';
	option += "<br />";
	option += "&nbsp;&nbsp;&nbsp;&nbsp;Home Address 2: ";
	option += (contactData.HomeAddress2 != undefined && contactData.HomeAddress2 != null)?contactData.HomeAddress2:'';
	option += "<br />";
	option += "&nbsp;&nbsp;&nbsp;&nbsp;Home City: ";// + contactData.HomeCity;
	option += (contactData.HomeCity != undefined && contactData.HomeCity != null)?contactData.HomeCity:'';
	option += "<br />";
	option += "&nbsp;&nbsp;&nbsp;&nbsp;Home State/Prov: ";// + contactData.HomeStateProv;
	option += (contactData.HomeStateProv != undefined && contactData.HomeStateProv != null)?contactData.HomeStateProv:'';
	option += "<br />";
	option += "&nbsp;&nbsp;&nbsp;&nbsp;Personal Email: ";// + contactData.PersonalEmail;
	option += (contactData.PersonalEmail != undefined && contactData.PersonalEmail != null)?contactData.PersonalEmail:'';
	option += "<br />";

	for(var i = 0; i < contactData.CustomFields.NameValuePair.length; i++)
	{
		//alert(contactData.FirstName);
		if(contactData.CustomFields.NameValuePair[i].Value != null && contactData.CustomFields.NameValuePair[i].Value != false && contactData.CustomFields.NameValuePair[i].Value != undefined)
		{
			option += "&nbsp;&nbsp;&nbsp;&nbsp;" + contactData.CustomFields.NameValuePair[i].Name + ": " + contactData.CustomFields.NameValuePair[i].Value + "<br />";
		}
	}
	//option += "Home City: " + contactData.HomeCity + "<br />";
	return option;
}

function validateUser(id)
{
	//alert(id);//45
	//list possible matches
	var callback = {
		success:function(o){
			var data = YAHOO.lang.JSON.parse(o.responseText);

			/*
			var SERVICE_OUT_OF_ORDER = -2;
			var MULTIPLE_MATCHES = -1;
			var SINGLE_MATCH_BY_USER_ID = 0;
			var SINGLE_MATCH_BY_NAME = 1;
			var NO_MATCHES = 2;
			*/
		   //alert(data.status);
		   if(data.status == "UserClarification")
		   {
			   //alert("should be here");
			   //multiple matches so we gotta go through each one
			   var html = "<form id='user_contact_form' >";
			   html += "<input type='hidden' name='user_id' value='" + data.user_id + "' />";
			   var option = "";
			   var data_is_null = (data.matches == null);
			   if(!data_is_null){
			   html += "<table>";
			   //alert(data.matches.length);

			   for(var i = 0; i < data.matches.length; i++)
			   {
				   if(i%3 == 0)
				   {
					   html += "<tr>";
				   }
				   html += "<td>";
				   //for each match create an option
				   option = getContactSelectOption(data.matches[i]);
				   //add the option to the select box
				   html += option;
				   option = "";
				   html += "<td>";
				   if(i%3 == 2)
				   {
						html += "</tr>";
				   }
			   }
			   html += "</tr></table>";
			   }
			   else
			   {
				   html += "No Matches, please create a contact in act.";
			   }
			   //alert(html);
			   pop = new YAHOO.widget.Panel("user_contact_panel",{
				   width:"500px",
				   fixedcenter:true,
				   constraintoviewport:false,
				   underlay:"shadow",
				   close:true,
				   draggable:false,
				   modal:true
			   });
			   pop.setHeader("Select Contact");
			   pop.setBody(html);
			   pop.setFooter(getFooter(id, data_is_null));
			   pop.render();
			   pop.show();
		   }
		   else if(data.status == "Successful")
		   {
			   alert(data.message);
			   location.reload();//need to reload the page to refresh the pushed/not-pushed data
		   }
		   else if(data.status == "Unsuccessful")
		   {
				alert(data.message);
				//location.reload();
		   }
		   return false;
		},failure:function(o){
			//unsuccessful call
		}
	};
	var url = base_url + "map.php/"+ "web_service_management/re_post";
	var retVal = YAHOO.util.Connect.asyncRequest("POST", url, callback, "row_id="+id);
	return false;
}

function resend(id)
{
	//confirm if we want to go through with the update
	if(confirm("Are you sure you want to re-submit this entry?")){
		//double check the user_id
		if(validateUser(id)){
		}
	}
}

function_formatter = function(elCell, oRecord, oColumn, oData)
{
	elCell.innerHTML = oData;
	var a = 2;
}

parameters_formatter = function(elCell, oRecord, oColumn, oData)
{
	var out = "";
	for(key in oData)
	{
		out += key + " = " + oData[key];
		out += "\n";
	}
	elCell.innerHTML = "<pre>"+ out +"</pre>";
	var a = 1;
}

date_formatter = function(elCell, oRecord, oColumn, oData)
{
	data = oRecord.getData();
	elCell.innerHTML = oData;
}

contact_id_formatter = function(elCell, oRecord, oColumn, oData)
{
	data = oRecord.getData();
	if(data.contact_id != "" && data.contact_id != null)
	{
		elCell.innerHTML = "<img src='" + base_url + "images/aim/accept.png' style='height:15px;' />";
	}
	else
	{
		//elCell.innerHTML = "NOT YET";
		elCell.innerHTML = "<img src='" + base_url + "images/aim/cancel.png' style='height:15px;'>";
	}
}

resubmit_formatter = function(elCell, oRecord, oColumn, oData){
	//specifics for the resubmit formatter button
	data = oRecord.getData();
	elCell.style.textAlign = 'center';
	/*if(data.id == 19)
	{
		alert(data.function);
		alert("GetContactByCustomerID");
		alert(data.function == "GetContactByCustomerID");
	}*/
	//alert(data.date_pushed);

	
	if(data.date_pushed == null){//} && data.function != "GetContactByCustomerID"){
		elCell.innerHTML = "<img onclick='resend("+ data.id + ");' src='" + base_url + "images/aim/accept.png' style='height:15px; cursor:pointer;'>";
	}
	else{
		//elCell.innerHTML = "<img src='" + base_url + "images/aim/cancel.png' style='height:15px;'>";
	}
	

   //elCell.innerHTML = "<span onclick='resend_handler(\"" + data.id + "\", \"" + data.function + "\")'>Resend</span>";
   //elCell.subscribe("click", function(){alert("you clicked me")});
   //YAHOO.util.Event.addListener(elCell, "click", resend_handler);
};

function resend_handler(row_id, function_name){
	var a = data;
	//alert(function_name);
	//alert(row_id);
	//alert(row_data);
	if(function_name == "ScheduleContactForActivity")
	{
		//list possible matches
		var callback = {
			success:function(o){
				var data = TERRACOR.util.jsonToString(o, data);

				/*
				var SERVICE_OUT_OF_ORDER = -2;
				var MULTIPLE_MATCHES = -1;
				var SINGLE_MATCH_BY_USER_ID = 0;
				var SINGLE_MATCH_BY_NAME = 1;
				var NO_MATCHES = 2;
				*/
			   var proceed = false;
			   var multiple = true;
			   
				if(data == MULTIPLE_MATCHES)
				{
					//need to clarify which contact we want to use
					proceed = false;
					multiple = true;
				}
				else if (data == SINGLE_MATCH_BY_USER_ID)
				{
					//contact already created
					//proceed
					proceed = true;
				}
				else if(data == SINGLE_MATCH_BY_NAME || data == NO_MATCHES)
				{
					//contact created
					//proceed
					proceed = true;
				}
				else if(data == SERVICE_OUT_OF_ORDER)
				{
					//do nothing as soap server is down
				}

				if(!proceed)
				{
					return;
				}

				var callback = {
					success:function(o)
					{
						
					},
					failure:function(o)
					{
						
					}
				};
				method = "POST";
				uri = "";
				postData = "";
				var call = YAHOO.util.Connect.asyncRequest(method, uri, callback, postData);

			},failure:function(){
				//unsuccessful call
			}
		};
		var url = base_url + "map.php/"+ "web_service_management/is_single_contact";
		var retVal = YAHOO.util.Connect.asyncRequest("POST", url, callback, "row_id="+row_id);
	}
}

xml_formatter = function(elCell, oRecord, oColumn, oData){
	//specifics for the resubmit formatter button
	if(oData != null){
	data = oData.replace(/&/g, '&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;\n');
	elCell.innerHTML = "<pre>" + data + "</pre>";
	}
};

column_defs = [
	{key:"id", label:"ID", resizeable:true},
	{key:"re_submit", label:"Resend Response", formatter:resubmit_formatter},
	{key:"user_id", label:"User ID"},
	{key:"contact_id", label:"Contact ID", formatter:contact_id_formatter},
	{key:"date", label:"Date", formatter:date_formatter},
	{key:"date_pushed", label:"Sent On"},
	/*{key:"params", label:"Parameters", resizeable:true, formatter:parameters_formatter},*/
	{key:"key", label:"Key", resizeable:true},
	{key:"value", label:"Value", resizeable:true},
	{key:"function", label:"Function", resizeable:true, formatter:function_formatter}
];


function initialize()
{
}

YAHOO.util.Event.onDOMReady(function(){
	var callback = {
		success:function(o){
			data = YAHOO.lang.JSON.parse(o.responseText);
			
			request_datasource = new YAHOO.util.DataSource(data);
			request_datasource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
			request_datasource.responseSchema = {
					/*fields: ["id", "user_id", "date", "date_pushed", "params", "function"]*/
					fields: ["id", "user_id", "contact_id", "date", "date_pushed", "key", "value", "function"]
				};


			request_table = new YAHOO.widget.DataTable("soap_requests", column_defs, request_datasource, {
				paginator: new YAHOO.widget.Paginator({rowsPerPage:10})
			});

			// Set up editing flow
			var highlightEditableCell = function(oArgs) {
				var elCell = oArgs.target;
				if(YAHOO.util.Dom.hasClass(elCell, "yui-dt-editable")) {
					this.highlightCell(elCell);
				}
			};
			request_table.subscribe("cellMouseoverEvent", highlightEditableCell);
			request_table.subscribe("cellMouseoutEvent", request_table.onEventUnhighlightCell);
			request_table.subscribe("cellClickEvent", request_table.onEventShowCellEditor);
		},
		failure:function(o){
			//request failed
		}
	}
	var init = YAHOO.util.Connect.asyncRequest('POST', baseIndexURL+"web_service_management/initialize",
		 callback, "");
});