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 oPhoneN = $A(oRegistrationXML.getElementsByTagName("Phone")).first().getAttribute("number");
				    oRegistrationDetails.setPhoneNumber(oPhoneN);
					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;
					    case "India":
							oRegistrationDetails.setIndiaState(oLocation.getAttribute("state"));
							if (oPhoneN.indexOf('-') !=-1){
							    oRegistrationDetails.setSTDCode(oPhoneN.substring(0,oPhoneN.indexOf('-')));
							    oRegistrationDetails.setPhoneNumber(oPhoneN.substring(oPhoneN.indexOf('-')+1, oPhoneN.length));
							}
							break;
						case "Australia":
							oRegistrationDetails.setAusState(oLocation.getAttribute("state"));
							break;
						case "Afghanistan" :
                case "American Samoa" :      
                case "Antarctica" :
                case "Bangladesh" :
                case "Bhutan" :
                case "Brunei Darussalam" :
                case "Cambodia" :
                case "China" :
                case "Christmas Island" :
                case "Cocos (Keeling) Islands" :                
                case "Cook Islands" :
                case "Fiji" :
                case "Guam" :
                case "Indonesia" :
                case "Japan" :
                case "Kazakhstan" :
                case "Kiribati" :
                case "Korea Democratic People's Republic" :
                case "Korea Republic of" :
                case "Kyrgyzstan" :                
                case "Lao People’s Democratic Republic" :
                case "Malaysia" :
                case "Maldives" :                       
                case "Marshall Islands" :
                case "Micronesia Federal State of" :
                case "Mongolia" :
                case "Myanmar" :
                case "Nauru" :
                case "Nepal" :
                case "New Caledonia" :                
                case "New Zealand" :
                case "Niue" :
                case "Norfolk Island" :
                case "Northern Mariana Islands" :
                case "Pakistan" :
                case "Palau" :
                case "Papua New Guinea" :
                case "Philippines" :
                case "Pitcairn Island" :
                case "Solomon Islands" :                
                case "South Georgia" :
                case "Sri Lanka" :
                case "Taiwan" :
                case "Tajikistan" :
                case "Thailand" :
                case "Tokelau" :
                case "Tonga" :
                case "Turkmenistan" :
                case "Tuvalu" :
                case "Uzbekistan" :                
                case "Vanuatu" :
                case "Vietnam" :
                case "Wallis and Futuna Islands" :
							oRegistrationDetails.setPostalCode(oLocation.getAttribute("postalcode"));
							break;
						case "United Kingdom":
							oRegistrationDetails.setCounty(oLocation.getAttribute("state"));					
							break;
					}
				
					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;
			    case "India":
					sCookie += " state=\"" + oRegistrationDetails.getIndiaState() + "\" areacode=\"" + oRegistrationDetails.getSTDCode() + "\"";
					break;
				case "Australia":
					sCookie += " state=\"" + oRegistrationDetails.getAusState() + "\"";		
					break;
				case "Afghanistan" :
                case "American Samoa" :      
                case "Antarctica" :
                case "Bangladesh" :
                case "Bhutan" :
                case "Brunei Darussalam" :
                case "Cambodia" :
                case "China" :
                case "Christmas Island" :
                case "Cocos (Keeling) Islands" :                
                case "Cook Islands" :
                case "Fiji" :
                case "Guam" :
                case "Indonesia" :
                case "Japan" :
                case "Kazakhstan" :
                case "Kiribati" :
                case "Korea Democratic People's Republic" :
                case "Korea Republic of" :
                case "Kyrgyzstan" :                
                case "Lao People’s Democratic Republic" :
                case "Malaysia" :
                case "Maldives" :                       
                case "Marshall Islands" :
                case "Micronesia Federal State of" :
                case "Mongolia" :
                case "Myanmar" :
                case "Nauru" :
                case "Nepal" :
                case "New Caledonia" :                
                case "New Zealand" :
                case "Niue" :
                case "Norfolk Island" :
                case "Northern Mariana Islands" :
                case "Pakistan" :
                case "Palau" :
                case "Papua New Guinea" :
                case "Philippines" :
                case "Pitcairn Island" :
                case "Solomon Islands" :                
                case "South Georgia" :
                case "Sri Lanka" :
                case "Taiwan" :
                case "Tajikistan" :
                case "Thailand" :
                case "Tokelau" :
                case "Tonga" :
                case "Turkmenistan" :
                case "Tuvalu" :
                case "Uzbekistan" :                
                case "Vanuatu" :
                case "Vietnam" :
                case "Wallis and Futuna Islands" :
					sCookie += " postalcode=\"" + oRegistrationDetails.getPostalCode() + "\"";	
					break;
				case "United Kingdom":
					sCookie += " state=\"" + oRegistrationDetails.getCounty() + "\"";			
					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;
})();
