
// EmailService
var EmailService = 
{
	proxy : RegServiceUtils.proxyURI + "EmailService",
	devURL : RegServiceUtils.serviceURI + "EmailService",
	
	add: function(email, callback, errorCallback)
	{
		var soapBody = RegServiceUtils.createRequestBody("email_add_request");
		
		if(email)
		{
			soapBody.appendChild(emailToSoap(email));
		}
		
		bam.soap.SOAPClient.Proxy = EmailService.proxy; 
		bam.soap.SOAPClient.SOAPServer = EmailService.devURL;
		
		var soapRequest = new bam.soap.SOAPRequest("http://services.bamnetworks.com/registration/email/add", soapBody);
		bam.soap.SOAPClient.SendRequest(soapRequest, function(data) 
		{
			if (data && data.Body && data.Body[0].email_add_response)
			{
				var responseBodyElement = data.Body[0].email_add_response[0];
				
				if (!RegServiceUtils.isErrorThrown(responseBodyElement))
				{
					if (callback)
					{
						callback(responseBodyElement.emailId[0].Text);
					}
				}
				else
				{
					errorCallback("Email.add", RegServiceUtils.getStatus(responseBodyElement));
				}
			}
			else
			{
				errorCallback("Email.add", {code:-100000, message:RegServiceUtils.getServiceErrorMessage(data)});
			}
		});
	},
	
	findAll: function(callback, errorCallback)
	{
		var soapBody = RegServiceUtils.createRequestBody("email_findAll_request");
		bam.soap.SOAPClient.Proxy = ProfileService.proxy; 
		bam.soap.SOAPClient.SOAPServer = ProfileService.devURL;
		
		var soapRequest = new bam.soap.SOAPRequest("http://services.bamnetworks.com/registration/email/findAll", soapBody);
		bam.soap.SOAPClient.SendRequest(soapRequest, function(data) 
		{
			if (data && data.Body && data.Body[0].email_findAll_response)
			{
				var responseBodyElement = data.Body[0].email_findAll_response[0];
				
				if (!RegServiceUtils.isErrorThrown(responseBodyElement))
				{
					if (responseBodyElement.email)
					{
						var emailList = new Array();
						for (var i = 0; i < responseBodyElement.email.length; i++)
						{
							emailList.push(EmailService.soapToEmail(responseBodyElement.email[i]));
						}
						callback(emailList);
					}
				}
				else
				{
					errorCallback("Email.findAll", RegServiceUtils.getStatus(responseBodyElement));
				}
			}
			else
			{
				errorCallback("Email.findAll", {code:-100000, message:RegServiceUtils.getServiceErrorMessage(data)});
			}
		});
	},
	
	findById: function(emailId, callback, errorCallback)
	{
		var soapBody = RegServiceUtils.createRequestBody("email_findById_request");
		
		soapBody.appendChild(new bam.soap.SOAPObject("emailId")).val(emailId);
		
		bam.soap.SOAPClient.Proxy = EmailService.proxy; 
		bam.soap.SOAPClient.SOAPServer = EmailService.devURL;
		
		var soapRequest = new bam.soap.SOAPRequest("http://services.bamnetworks.com/registration/email/findById", soapBody);
		bam.soap.SOAPClient.SendRequest(soapRequest, function(data) 
		{
			if (data && data.Body && data.Body[0].email_findById_response)
			{
				var responseBodyElement = data.Body[0].email_findById_response[0];
				
				if (!RegServiceUtils.isErrorThrown(responseBodyElement) && responseBodyElement.email)
				{
					callback(EmailService.soapToEmail(responseBodyElement.email[0]));
				}
				else
				{
					errorCallback("Email.findById", RegServiceUtils.getStatus(responseBodyElement));
				}
			}
			else
			{
				errorCallback("Email.findById", {code:-100000, message:RegServiceUtils.getServiceErrorMessage(data)});
			}	
		});
	},

	findPrimary : function(callback, errorCallback)
	{
		var soapBody = RegServiceUtils.createRequestBody("email_findPrimary_request");
		
		bam.soap.SOAPClient.Proxy = EmailService.proxy; 
		bam.soap.SOAPClient.SOAPServer = EmailService.devURL;
		
		var soapRequest = new bam.soap.SOAPRequest("http://services.bamnetworks.com/registration/email/findPrimary", soapBody);
		bam.soap.SOAPClient.SendRequest(soapRequest, function(data) 
		{
			if (data && data.Body && data.Body[0].email_findPrimary_response)
			{
				var responseBodyElement = data.Body[0].email_findPrimary_response[0];
				
				if (!RegServiceUtils.isErrorThrown(responseBodyElement) && responseBodyElement.email)
				{
					callback(EmailService.soapToEmail(responseBodyElement.email[0]));
				}
				else
				{
					errorCallback("Email.findPrimary", RegServiceUtils.getStatus(responseBodyElement));
				}
			}
			else
			{
				errorCallback("Email.findPrimary", {code:-100000, message:RegServiceUtils.getServiceErrorMessage(data)});
			}	
		});
	},

	setPrimary: function(emailId, callback, errorCallback)
	{
		var soapBody = RegServiceUtils.createRequestBody("email_setPrimary_request");
		
		soapBody.appendChild(new bam.soap.SOAPObject("emailId")).val(emailId);
		
		bam.soap.SOAPClient.Proxy = EmailService.proxy; 
		bam.soap.SOAPClient.SOAPServer = EmailService.devURL;
		
		var soapRequest = new bam.soap.SOAPRequest("http://services.bamnetworks.com/registration/email/setPrimary", soapBody);
		bam.soap.SOAPClient.SendRequest(soapRequest, function(data) 
		{
			if (data && data.Body && data.Body[0].email_setPrimary_response)
			{
				var responseBodyElement = data.Body[0].email_setPrimary_response[0];
				
				if (!RegServiceUtils.isErrorThrown(responseBodyElement))
				{
					if (callback)
					{
						callback();
					}
				}
				else
				{
					errorCallback("Email.setPrimary", RegServiceUtils.getStatus(responseBodyElement));
				}
			}
			else
			{
				errorCallback("Email.setPrimary", {code:-100000, message:RegServiceUtils.getServiceErrorMessage(data)});
			}
		});
	},
	
	update: function(email, persistNullValues, callback, errorCallback)
	{
		var soapBody = RegServiceUtils.createRequestBody("email_update_request");
		
		soapBody.attr("persistNullValues", persistNullValues==true ? true : false);
		
		if(email)
		{
			soapBody.appendChild(EmailService.emailToSoap(email));
		}
		
		bam.soap.SOAPClient.Proxy = EmailService.proxy; 
		bam.soap.SOAPClient.SOAPServer = EmailService.devURL;
		
		var soapRequest = new bam.soap.SOAPRequest("http://services.bamnetworks.com/registration/email/update", soapBody);
		bam.soap.SOAPClient.SendRequest(soapRequest, function(data) 
		{
			if (data && data.Body && data.Body[0].email_update_response)
			{
				var responseBodyElement = data.Body[0].email_update_response[0];
				
				if (!RegServiceUtils.isErrorThrown(responseBodyElement))
				{
					if (callback)
					{
						callback();
					}
				}
				else
				{
					errorCallback("Email.update", RegServiceUtils.getStatus(responseBodyElement));
				}
			}
			else
			{
				errorCallback("Email.update", {code:-100000, message:RegServiceUtils.getServiceErrorMessage(data)});
			}
		});
	},
	
	emailToSoap: function(email)
	{
		var emailElement = null;
		
		if(email)
		{
			emailElement = new bam.soap.SOAPObject("email");
		
			if(email.id) {emailElement.appendChild(new bam.soap.SOAPObject("id")).val(email.id);}
			if(email.address) {emailElement.appendChild(new bam.soap.SOAPObject("address")).val(email.address);}
			if(email.formatId) {emailElement.appendChild(new bam.soap.SOAPObject("formatId")).val(email.formatId);}
		}
		
		return emailElement;
	},
	
	soapToEmail: function(emailElement)
	{
		var email = null;
		
		if(emailElement)
		{
			var email = new Object();
			
			if(emailElement.id) {email.id = emailElement.id[0].Text};
			if(emailElement.address) {email.address = emailElement.address[0].Text};
			if(emailElement.formatId) {email.formatId = emailElement.formatId[0].Text};
		}
		
		return email;
	}

}
