﻿var RegistrationDetailsDAO = (function() {
	function fnRegistrationDetailsDAOConstructor() {
		/****************************************************/
		/*                                                  */
		/*                                                  */
	    /*           Class Level Private Variables          */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		var sCookieName = "RegistrationDetails";
		var sExpirationDate;
		
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*          Class Level Priveleged Methods          */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		this.retrieveRegistrationDetails = function() {
			var oRegistrationDetails = new RegistrationDetails();
			
			var aCookies = document.cookie.split(";");
			var sCookie;
			for (var iCookie = 0; iCookie < aCookies.length; iCookie++) {
				sCookie = unescape(aCookies[iCookie]);
				if (sCookie.indexOf(sCookieName) != -1) {
					var oRegistrationXML = Utilities.loadXML(sCookie.split(sCookieName + "=").pop());
					var oName = $A(oRegistrationXML.getElementsByTagName("Name")).first();
					oRegistrationDetails.setFirstName(oName.getAttribute("first"));
					oRegistrationDetails.setLastName(oName.getAttribute("last"));
					oRegistrationDetails.setEmailAddress($A(oRegistrationXML.getElementsByTagName("Email")).first().getAttribute("address"));
					oRegistrationDetails.setCompany($A(oRegistrationXML.getElementsByTagName("Company")).first().getAttribute("name"));
					var oLocation = $A(oRegistrationXML.getElementsByTagName("Location")).first();
					var sCountry = oLocation.getAttribute("country");
					oRegistrationDetails.setCountry(sCountry);
					switch (sCountry) {
						case "United States":
							oRegistrationDetails.setState(oLocation.getAttribute("state"));
							oRegistrationDetails.setPostalCode(oLocation.getAttribute("postalcode"));
							break;
						case "Canada":
							oRegistrationDetails.setProvince(oLocation.getAttribute("province"));
							break;
					}
					oRegistrationDetails.setPhoneNumber($A(oRegistrationXML.getElementsByTagName("Phone")).first().getAttribute("number"));
					oRegistrationDetails.setOriginalSource($A(oRegistrationXML.getElementsByTagName("Source")).first().getAttribute("original"));
					sExpirationDate = $A(oRegistrationXML.getElementsByTagName("Date")).first().getAttribute("expiration");
					break;
				}
			}
			
			return oRegistrationDetails;
		}
		
		this.updateRegistrationDetails = function(oRegistrationDetails) {
			var sDomain = new String(window.location).match(/^\w+:[\/]+[^\/]+[\/]{1}|^[^\/]+[\/]{1}/).first();
			var sCookie = sCookieName + "=<" + sCookieName + ">";
			sCookie += "<Name first=\"" + oRegistrationDetails.getFirstName() + "\" last=\"" + oRegistrationDetails.getLastName() + "\"/>";
			sCookie += "<Email address=\"" + oRegistrationDetails.getEmailAddress() + "\"/>";
			sCookie += "<Company name=\"" + oRegistrationDetails.getCompany() + "\"/>";
			var sCountry = oRegistrationDetails.getCountry();
			sCookie += "<Location country=\"" + sCountry + "\"";
			switch (sCountry) {
				case "Canada":
					sCookie += "  province=\"" + oRegistrationDetails.getProvince() + "\"";
					break;
				case "United States":
					sCookie +=  " state=\"" + oRegistrationDetails.getState() + "\" postalcode=\"" + oRegistrationDetails.getPostalCode() + "\"";
					break;
			}
			sCookie += "/><Phone number=\"" + oRegistrationDetails.getPhoneNumber() + "\"/>";
			sCookie += "<Source original=\"" + oRegistrationDetails.getOriginalSource() + "\"/>";
			sCookie += "<Date session=\"" + (new Date()).toUTCString() + "\" expiration=\"" + sExpirationDate + "\"/>";
			sCookie += "</" + sCookieName + ">;";
			
			sCookie += escape(sCookie) + "domain=" + sDomain + ";path=/;expires=" + sExpirationDate + ";";
			
			document.cookie = sCookie;
		}
	}
	
	return fnRegistrationDetailsDAOConstructor;
})();