/*
 * Sign Up
 */

$(document).ready(function(){
	try{            
		var oForm = null;
		var oTerms = null;
		var oCountry = null;
		var oPostalCode = null;
		var oStates = null;
		var oStatet = null;
		var oCity = null;
		var oEmail = null;
		var oRetypeEmail = null;
		var oPassword = null;
		var oRetypePassword = null;
		var oFields = {};
		var iFields = 0;
		var bValidateOnBlur = true;
		var bValidatingForm = false;
		var bLoadingStates = false;
		var bLoadingStateAndCity = false;
		var oCategories = null;
		
		function _continue(){
			return (!bValidatingForm && !bLoadingStates && !bLoadingStateAndCity);
		}
		
		function _validateForm(form){
			if (_continue()){
				bValidatingForm = true;
				
				try{
					if ((iFields > 0) && $.Utils.isobject(oFields)){
						var bResult = true;
						
						for (var key in oFields){                                                                                                            
							if (!_validateBy(oFields[key], true)){
								bResult = false;
							}
						}
						
						if (!_validateGroupBy(null, "email")){
							bResult = false;
						}
						
						if (!_validateGroupBy(null, "password")){
							bResult = false;
						}
						
						bValidatingForm = false;
						
						if (bResult && $.Utils.isjqueryelement(form)){
							form.prepend("<input type=\"hidden\" name=\"signup\" />");
							return bResult;
						}
					}
				}catch(e){}
				
				bValidatingForm = false;
			}
			
			return false;
		}
		
		function _validateBy(element, empty){
			var bResult = true;
			var sToggleText = "";
			
			element = $.Utils.isjqueryelement(element) ? element : null;
			
			try{
				if (element != null){
					sToggleText = (element.attr("toggletext") != null) ? $.Utils.trim(element.attr("toggletext")) : "";
					
					switch(element.attr("name")){
						case "_password":
							if ((sToggleText != "") && (sToggleText == $.Utils.trim(element.val()))){
								element.get(0).message.show("* This field is required");
								element.get(0).valid = bResult = false;
							} else {
								element.get(0).valid = bResult = _validateField(element, empty, true, 6, 16);
							}
							break;
							
						case "_retpassword":
							if ((sToggleText != "") && (sToggleText == $.Utils.trim(element.val()))){
								element.get(0).message.show("* This field is required");
								element.get(0).valid = bResult = false;
							} else {
								element.get(0).valid = bResult = _validateField(element, empty, true, 6, 16);
							}
							break;
						
						case "_email":
							element.get(0).valid = bResult = _validateEmail(element, empty, true, null, 255);
							break;
						case "_retemail":
							element.get(0).valid = bResult = _validateEmail(element, empty, true, null, 255);
							break;
							
						case "_firstname":                                                        
							bResult = _validateField(element, empty, true, 2, 255);
							break;
						
						case "_lastname":
							bResult = _validateField(element, empty, true, 2, 255);
							break;
						
						case "_company":
							bResult = _validateField(element, empty, true, 2, 255);
							break;
						
						case "_contactphone":
							bResult = _validateField(element, empty, true, 2, null);
							break;
						
						case "_comments":
						case "_alternatephone":
						case "_cellphone":
							element.val($.Utils.trim(element.val()));
							
							if ((element.val() == "") || (element.val() == sToggleText)){
								element.removeClass("show-Active-input");
							} else {
								element.addClass("show-Active-input");
							}
							break;
						
						case "_address":
							bResult = _validateField(element, empty, true, 2, 255);
							break;
						
						case "_city":
							bResult = _validateField(element, empty, true, 2, 150);
							break;
						
						case "_states":
							if (element.get(0).styleselect.visible()){
								bResult = _validateSelect(element, true);
							}
							break;
						
						case "_statet":
							if (element.is(":visible")){
								bResult = _validateField(element, empty, true, 2, 150);
							}
							break;
						
						case "_country":
							bResult = _validateSelect(element, true);
							break;
						
						case "_postalcode":
							bResult = _validateField(element, empty, true, 2, 20);                                                        
							break;
						
						case "_interested":
							element.val($.Utils.trim(element.val()));
							
							if ((element.val() == "") || (element.val() == sToggleText)){
								element.removeClass("show-Active-input");
							} else {
								element.addClass("show-Active-input");
							}
							break;
						
						case "_securitycode":
							element.val($.Utils.trim(element.val()));
							
							if (element.val() == ""){
								element.removeClass("show-Active-input");
								element.get(0).message.show("* The security code is required");
								bResult = false;
							} else {
								element.addClass("show-Active-input");
								if (element.get(0).securitycode != element.val()){
									element.get(0).message.show("* The security code do not match");
									bResult = false;
								}
							}
							break;
						
						case "_readterms":
							if (!element.get(0).checked){
								element.get(0).message.show("* This option is required");
								bResult = false;
							}
							break;
							
						case "_categories":
							var bSelected = false;
							
							if ((oCategories != null) && (oCategories.length > 0)){
								oCategories.each(function(){
									if (this.checked) bSelected = true;
								});
							}
							
							if (!bSelected){
								element.get(0).message.show("* You must select at least one category");
								bResult = false;
							}
							break;
					}
				}
			}catch(e){}
			
			if (bResult && (element != null)){
				element.get(0).message.hide();
			}
			
			return bResult;
		}
		
		function _validateGroupBy(element, name){
			var bResult = true;
			
			try{
				if ($.Utils.isstring(name) && ((name = $.Utils.trim(name)) != "")){
					switch(name){
						case "password":
							element = $.Utils.isjqueryelement(element) ? element : ($.Utils.isjqueryelement(oRetypePassword) ? oRetypePassword : null);
							
							if ((oPassword != null) && (oRetypePassword != null) && oPassword.get(0).valid && oRetypePassword.get(0).valid){
								if (!(bResult = ($.Utils.trim(oPassword.val()) == $.Utils.trim(oRetypePassword.val())))){
									if (element.get(0) == oPassword.get(0)) oRetypePassword.get(0).message.hide();
									if (element.get(0) == oRetypePassword.get(0)) oPassword.get(0).message.hide();
									if (element != null) element.get(0).message.show("* The password do not match");
								} else {
									if (oPassword != null) oPassword.get(0).message.hide();
									if (oRetypePassword != null) oRetypePassword.get(0).message.hide();
								}
							}
							break;
							
						case "email":
							element = $.Utils.isjqueryelement(element) ? element : ($.Utils.isjqueryelement(oRetypeEmail) ? oRetypeEmail : null);
							
							if ((oEmail != null) && (oRetypeEmail != null) && oEmail.get(0).valid && oRetypeEmail.get(0).valid){
								if (!(bResult = ($.Utils.trim(oEmail.val()) == $.Utils.trim(oRetypeEmail.val())))){
									if (element.get(0) == oEmail.get(0)) oRetypeEmail.get(0).message.hide();
									if (element.get(0) == oRetypeEmail.get(0)) oEmail.get(0).message.hide();
									if (element != null) element.get(0).message.show("* The email do not match");
								} else {
									if (oEmail != null) oEmail.get(0).message.hide();
									if (oRetypeEmail != null) oRetypeEmail.get(0).message.hide();
								}
							}
							break;
					}
				}
			}catch(e){}
			
			return bResult;
		}
		
		function _validateField(element, empty, trim, min, max){
			try{
				if ($.Utils.isjqueryelement(element)){
					var sValue = ($.Utils.isboolean(trim) && trim) ? $.Utils.trim(element.val()) : element.val();
                    
                    if (_activeField(element)) sValue = "";
                    
					if ($.Utils.isboolean(empty) && empty && (sValue == "")){
						element.get(0).message.show("* This field is required");
						return false;
					} else {
						if (sValue != ""){
							if ($.Utils.isrealnumber(min) && (sValue.length < min)){
								element.get(0).message.show("* Are required minimum " + min + " characters");
								return false;
							} else if ($.Utils.isrealnumber(max) && (sValue.length > max)){
								element.get(0).message.show("* Are required maximum " + max + " characters");
								return false;
							}
						}
					}
				}
			}catch(e){}
			
			return true;
		}

		function _validateEmail(element, empty, trim, min, max){
			try{
				if ($.Utils.isjqueryelement(element)){
					if (_validateField(element, empty, trim, min, max)){
						if (!$.Utils.isemail(($.Utils.isboolean(trim) && trim) ? $.Utils.trim(element.val()) : element.val())){
							element.get(0).message.show("* The email is invalid");
							return false;
						}
					} else {
						return false;
					}
				}
			}catch(e){}
			
			return true;
		}

		function _validateSelect(element, trim){
			try{
				if ($.Utils.isjqueryelement(element)){
					if ((($.Utils.isboolean(trim) && trim) ? $.Utils.trim(element.val()) : element.val()) == ""){
						element.get(0).message.show("* This field is required");
						return false;
					}
				}
			}catch(e){}
			
			return true;
		}
		
		function _activeField(element){
			try{
				if ($.Utils.isjqueryelement(element)){
					var sToggleText = (element.attr("toggletext") != null) ? $.Utils.trim(element.attr("toggletext")) : "";
					var sValue = element.val();
					var bInactive = false;
					
					switch(element.attr("name")){
						case "_statet":
							if (element.is(":visible")){
								if (sValue == sToggleText){
									bInactive = true;
									element.removeClass("show-Active-input");
								} else {
									element.addClass("show-Active-input");
								}
							}
							break;
							
						default:
							if (sValue == sToggleText){
								bInactive = true;
								element.removeClass("show-Active-input");
							} else {
								element.addClass("show-Active-input");
							}
							break;
					}
					
					return bActive;
				}
			}catch(e){}
			
			return false;
		}
		
		$(window).bind("resize", function(){
			try{
				if (iFields > 0){
					for(var key in oFields){
						oFields[key].get(0).message.hide(null, null, null, true);
					}
				}
			}catch(e){}
		});
		
		(oForm = $("body > .main-content .generic-rectangle-content .signup-form").eq(0)).bind("submit", function(){
			return _validateForm($(this));
		}).find("[ltype='field']").each(function(index, element){
			var oElement = $(this);
			var sFieldName = $.Utils.trim(oElement.attr("name"));
			
			if (sFieldName != ""){
				
				element.valid = false;
				
				/* Create Element Message */
				element.message = new $.Controls.BalloonMessage();
				element.message.theme("error");
				element.message.hideOnClick(true);
				element.message.opacity(0.95);
				element.message.arrow((sFieldName == "_readterms") ? $.Controls.BalloonMessage.Setting.Arrow.LEFT : $.Controls.BalloonMessage.Setting.Arrow.LEFT);
				element.message.persistenceOpening(true);
				element.message.disableSelection(true);
				element.message.onbeforeopening = function(args){
					args.cancel = ((sFieldName == "_country") || (sFieldName == "_states")) ? !element.styleselect.visible() : !oElement.is(":visible");
				}
				element.message.onopening = function(args){
					var oPosition = (((sFieldName == "_country") || (sFieldName == "_states")) ? element.styleselect.target(true) : oElement).offset();
					var iElementHeight = oElement.outerHeight(true);
					var oTooltip = this.target(true);
					var iTooltipHeight = oTooltip.outerHeight();
					
					args.position.left = oPosition.left + ((sFieldName == "_securitycode") ? oElement.outerWidth(true) - 86 : oElement.outerWidth(true)); //-oTooltip.outerWidth()-3 : oElement.outerWidth(true));
					args.position.top = oPosition.top - (iTooltipHeight/2) + (iElementHeight/2) - ((sFieldName == "_readterms") ? 3 : 2);
				}
				
				switch(sFieldName){
					case "_email":
					case "_password":
					case "_retemail":
					case "_retpassword":
						oElement.bind("keypress", function(ev){
							return !(ev.keyCode == 32);
						}).bind("keydown", function(ev){
							return !(ev.keyCode == 32);
						});
						
						if (sFieldName == "_email"){
							oEmail =  oElement;
						} else if(sFieldName == "_password"){
							oPassword = oElement;
						} else if(sFieldName == "_retemail"){
							oRetypeEmail = oElement;
						} else if(sFieldName == "_retpassword"){
							oRetypePassword = oElement;
						}
						break;
					
					case "_country":
						(oCountry = oElement).prev().remove();
						if ($.browser.msie && (parseInt($.browser.version, 10) <= 7)) oCountry.css("height", "29px"); /* Cross Browser Fix */
						element.styleselect = new $.Controls.StyleSelect(oElement, {
							visible: !(oElement.attr("noshow") != null)
						});
						if ($.browser.msie && (parseInt($.browser.version, 10) <= 7)) oCountry.css("height", ""); /* Cross Browser Fix */
						
						/* PIE HTC Fix */
						if ($.browser.msie && (parseInt($.browser.version, 10) <= 8)){
							oElement.parent().parent().find("div").eq(0).remove();
						}
						
						element.styleselect.theme("signup_select");
						element.styleselect.target(true).addClass("small-shadow-very-light");
						element.styleselect.onchange = function(){
							if (_continue()){
								bLoadingStates = true;
								
								var bLoading = false;
								
								try{
									if (oCountry != null){
										oCountry.get(0).styleselect.disabled(true);
										oCountry.get(0).styleselect.target(true).addClass("element-waiting");
									}
									
									if (oStates != null) oStates.get(0).styleselect.disabled(true);
									if (oStatet != null) oStatet.get(0).disabled = true;
									if (oPostalCode != null) oPostalCode.get(0).disabled = true;
									
									if (oCountry != null){
										if (oCountry.val() == ""){
											element.styleselect.target(true).removeClass("show-Active-select").css({
												"background-color": "",
												"border": ""
											});
											
											if (oStatet != null) {
												oStatet.hide();
												oStatet.removeClass("show-Active-input");
												oStatet.val(oStatet.attr("toggletext"));
												oStatet.get(0).message.hide(null, null, null, true);
											}
											
											if (oStates != null){
												oStates.get(0).styleselect.disabled(false);
												oStates.get(0).styleselect.target(true).removeClass("show-Active-select").css({
													"background-color": "",
													"border": ""
												});
												oStates.get(0).styleselect.show();
												oStates.get(0).message.hide(null, null, null, true);
												oStates.get(0).styleselect.html("<option value=\"\">Select one</option>");
											}
										} else {
											element.styleselect.target(true).addClass("show-Active-select").css({
												"background-color": "white",
												"border": "1px solid #A0A0A0"
											});
											
											$.ajax({
												type: "get",
												async: true,
												data: {},
												url: "/ws/getLocation.php?cmd=sgstates&ci=" + oCountry.val(),
												success: function(data){
													try{
														if ($.Utils.isstring(data) && ((data = $.Utils.trim(data)) != "")){
															if (oStatet != null) {
																oStatet.hide();
																oStatet.removeClass("show-Active-input");
																oStatet.val(oStatet.attr("toggletext"));
																oStatet.get(0).message.hide(null, null, null, true);
															}
															
															if (oStates != null){
																oStates.get(0).styleselect.disabled(false);
																oStates.get(0).styleselect.target(true).removeClass("show-Active-select").css({
																	"background-color": "",
																	"border": ""
																});
																oStates.get(0).styleselect.show();
																oStates.get(0).message.hide(null, null, null, true);
																oStates.get(0).styleselect.html("<option value=\"\">Select one</option>" + data);
															}
														}
														else
														{
															if (oStates != null){
																oStates.get(0).styleselect.disabled(false);
																oStates.get(0).styleselect.html("");
																oStates.get(0).message.hide(null, null, null, true);
																oStates.get(0).styleselect.hide();
																oStates.get(0).styleselect.target(true).removeClass("show-Active-select").css({
																	"background-color": "",
																	"border": ""
																});
															}
															
															if (oStatet != null) {
																oStatet.removeClass("show-Active-input");
																oStatet.val(oStatet.attr("toggletext"));
																oStatet.get(0).message.hide(null, null, null, true);
																oStatet.show();
															}
														}
													}catch(e){}
													
													try{
														if (oCountry != null){
															oCountry.get(0).styleselect.target(true).removeClass("element-waiting");
															oCountry.get(0).styleselect.disabled(false);
														}
														if (oStates != null) oStates.get(0).styleselect.disabled(false);
														if (oStatet != null) oStatet.get(0).disabled = false;
														if (oPostalCode != null){
															oPostalCode.get(0).disabled = false;
															oPostalCode.focus();
														}
													}catch(e){}
													
													bLoadingStates = false;
												},
												error: function(){
													try{
														if (oStates != null){
															oStates.get(0).styleselect.disabled(false);
															oStates.get(0).styleselect.html("");
															oStates.get(0).message.hide(null, null, null, true);
															oStates.get(0).styleselect.hide();
															oStates.get(0).styleselect.target(true).removeClass("show-Active-select").css({
																"background-color": "",
																"border": ""
															});
														}
														
														if (oStatet != null) {
															oStatet.removeClass("show-Active-input");
															oStatet.val(oStatet.attr("toggletext"));
															oStatet.get(0).message.hide(null, null, null, true);
															oStatet.show();
														}
													}catch(e){}
													
													try{
														if (oCountry != null){
															oCountry.get(0).styleselect.target(true).removeClass("element-waiting");
															oCountry.get(0).styleselect.disabled(false);
														}
														if (oStates != null) oStates.get(0).styleselect.disabled(false);
														if (oStatet != null) oStatet.get(0).disabled = false;
														if (oPostalCode != null){
															oPostalCode.get(0).disabled = false;
															oPostalCode.focus();
														}
													}catch(e){}
													
													bLoadingStates = false;
												}
											});
											
											bLoading = true;
										}
									}
								}catch(e){}
								
								if (bLoading == false){
									try{
										if (oCountry != null){
											oCountry.get(0).styleselect.target(true).removeClass("element-waiting");
											oCountry.get(0).styleselect.disabled(false);
										}
										if (oStates != null) oStates.get(0).styleselect.disabled(false);
										if (oStatet != null) oStatet.get(0).disabled = false;
										if (oPostalCode != null){
											oPostalCode.get(0).disabled = false;
											if ((oCountry != null) && (oCountry.val() != "")) oPostalCode.focus();
										}
									}catch(e){}
									
									bLoadingStates = false;
								}
							}
						};
						element.styleselect.onmousedown = function(){
							element.message.hide();
						}
						break;
					
					case "_postalcode":
						oPostalCode = oElement;
						oElement.mask("?****************", {placeholder: ""});
						oElement.bind("blur", function(){
							var bResult = false;
							var sToggleText = (oElement.attr("toggletext") != null) ? $.Utils.trim(oElement.attr("toggletext")) : "";
							
							if ((sToggleText != "") && (sToggleText == oElement.val())){
								/* No Validate and Load Information */
								oElement.removeClass("show-Active-input");
								return;
							}
							
							try{
								if (bValidateOnBlur && (oPostalCode != null)) bResult = _validateBy(oPostalCode, false);
							}catch(e){}
							
							if (_continue() && bResult){
								bLoadingStateAndCity = true;
								
								var bLoading = false;
								var bCompleted = false;
								var oData = null;
								
								try{
									if ((oPostalCode != null) && (oPostalCode.val() != "") && (oCountry != null) && (oCountry.val() != "")){
										
										if (oCountry != null){
											oCountry.get(0).styleselect.disabled(true);
											oCountry.get(0).styleselect.target(true).addClass("element-waiting");
										}
										
										if (oStates != null){
											oStates.get(0).styleselect.disabled(true);
											if (oStates.get(0).styleselect.visible()) oStates.get(0).styleselect.target(true).addClass("element-waiting");
										}
										if (oStatet != null) oStatet.get(0).disabled = true;
										if (oPostalCode != null) oPostalCode.get(0).disabled = true;
										if (oCity != null) oCity.get(0).disabled = true;
										
										try{
											$.ajax({
												type: "get",
												dataType: "jsonp",
												async: true,
												data: {},
												url: "/ws/getLocation.php?cmd=sgzipcode&zc=" + oPostalCode.val() + "&ci=" + oCountry.val() + "&jsoncallback=?",
												complete: function(data){
													if (!bCompleted){
														bCompleted = true;		
														
														try{
															if ($.Utils.isobject(oData)){
																if ((oStates != null) && oStates.get(0).styleselect.visible()){
																	if (("State_Id" in oData) &&  $.Utils.isstring(oData.State_Id) && ((oData.State_Id = $.Utils.trim(oData.State_Id)) != "")){
																		oStates.get(0).styleselect.disabled(false);
																		oStates.get(0).styleselect.selectByValue(oData.State_Id);
																	}
																} else {
																	if (("State_Name" in oData) && $.Utils.isstring(oData.State_Name) && ((oData.State_Name = $.Utils.trim(oData.State_Name)) != "")){
																		if (oStatet != null) oStatet.val(oData.State_Name);
																	}
																}
																
																if (oCity != null){
																	oCity.val(("City" in oData) && $.Utils.isstring(oData.City) ? oData.City : oCity.attr("toggletext"));
																	if (oCity.val() == oCity.attr("toggletext")){
																		oCity.removeClass("show-Active-input");
																	} else if (oCity.val() != ""){
																		oCity.addClass("show-Active-input");
																	}
																}
															} else {
																if ((oStates != null) && oStates.get(0).styleselect.visible()){
																	oStates.get(0).styleselect.disabled(false);
																	oStates.get(0).styleselect.selectByValue("");
																	oStates.get(0).styleselect.target(true).removeClass("show-Active-select");
																}
																
																if (oCity != null){
																	oCity.val(oCity.attr("toggletext"));
																	oCity.removeClass("show-Active-input");
																}
															}
														}catch(e){}
														
														try{
															if (oCountry != null){
																oCountry.get(0).styleselect.target(true).removeClass("element-waiting");
																oCountry.get(0).styleselect.disabled(false);
															}
															if (oStates != null){
																oStates.get(0).styleselect.target(true).removeClass("element-waiting");
																oStates.get(0).styleselect.disabled(false);
															}
															if (oStatet != null) oStatet.get(0).disabled = false;
															if (oPostalCode != null) oPostalCode.get(0).disabled = false;
															if (oCity != null) oCity.get(0).disabled = false;
														}catch(e){}
														
														bLoadingStateAndCity = false;
													}	
												},
												success: function(data){
													try{
														oData = data;
														
														if ($.Utils.isobject(data)){
															if ((oStates != null) && oStates.get(0).styleselect.visible()){
																if (("State_Id" in data) && $.Utils.isstring(data.State_Id) && ((data.State_Id = $.Utils.trim(data.State_Id)) != "")){
																	oStates.get(0).styleselect.disabled(false);
																	oStates.get(0).styleselect.selectByValue(data.State_Id);
																}
															} else {
																if (("State_Name" in data) && $.Utils.isstring(data.State_Name) && ((data.State_Name = $.Utils.trim(data.State_Name)) != "")){
																	if (oStatet != null) oStatet.val(data.State_Name);
																}
															}
															
															if (oCity != null){
																oCity.val(("City" in data) && $.Utils.isstring(data.City) ? data.City : oCity.attr("toggletext"));
																if (oCity.val() == oCity.attr("toggletext")){
																	oCity.removeClass("show-Active-input");
																} else if (oCity.val() != ""){
																	oCity.addClass("show-Active-input");
																}
															}
														} else {
															if ((oStates != null) && oStates.get(0).styleselect.visible()){
																oStates.get(0).styleselect.disabled(false);
																oStates.get(0).styleselect.selectByValue("");
																oStates.get(0).styleselect.target(true).removeClass("show-Active-select");
															}
															
															if (oCity != null){
																oCity.val(oCity.attr("toggletext"));
																oCity.removeClass("show-Active-input");
															}
														}
													}catch(e){}
													
													try{
														if (oCountry != null){
															oCountry.get(0).styleselect.target(true).removeClass("element-waiting");
															oCountry.get(0).styleselect.disabled(false);
														}
														if (oStates != null){
															oStates.get(0).styleselect.target(true).removeClass("element-waiting");
															oStates.get(0).styleselect.disabled(false);
														}
														if (oStatet != null) oStatet.get(0).disabled = false;
														if (oPostalCode != null) oPostalCode.get(0).disabled = false;
														if (oCity != null) oCity.get(0).disabled = false;
													}catch(e){}
													
													bCompleted = true;
													bLoadingStateAndCity = false;
												},
												error: function(){
													try{
														if (oCountry != null){
															oCountry.get(0).styleselect.target(true).removeClass("element-waiting");
															oCountry.get(0).styleselect.disabled(false);
														}
														if (oStates != null){
															oStates.get(0).styleselect.target(true).removeClass("element-waiting");
															oStates.get(0).styleselect.disabled(false);
															if (oStates.get(0).styleselect.visible()) oStates.get(0).styleselect.selectByValue("");
														}
														if (oStatet != null) oStatet.get(0).disabled = false;
														if (oPostalCode != null) oPostalCode.get(0).disabled = false;
														if (oCity != null){
															oCity.val(oCity.attr("toggletext"));
															oCity.removeClass("show-Active-input");
															oCity.get(0).disabled = false;
														}
													}catch(e){}
													
													bCompleted = true;
													bLoadingStateAndCity = false;
												}
											});
											
											bLoading = true;
										}catch(e){}
										
										if (!bLoading){
											try{
												if (oCountry != null){
													oCountry.get(0).styleselect.target(true).removeClass("element-waiting");
													oCountry.get(0).styleselect.disabled(false);
												}
												if (oStates != null){
													oStates.get(0).styleselect.target(true).removeClass("element-waiting");
													oStates.get(0).styleselect.disabled(false);
												}
												if (oStatet != null) oStatet.get(0).disabled = false;
												if (oPostalCode != null) oPostalCode.get(0).disabled = false;
												if (oCity != null) oCity.get(0).disabled = false;
											}catch(e){}
										}
									}
								}catch(e){}
								
								if (!bLoading){
									bLoadingStateAndCity = false;
								}
							}
						});
						break;
					
					case "_states":
						(oStates = oElement).prev().remove();
						if ($.browser.msie && (parseInt($.browser.version, 10) <= 7)) oStates.css("height", "29px"); /* Cross Browser Fix */
						element.styleselect = new $.Controls.StyleSelect(oElement, {
							visible: !(oElement.attr("noshow") != null)
						});
						if ($.browser.msie && (parseInt($.browser.version, 10) <= 7)) oStates.css("height", ""); /* Cross Browser Fix */
						
						/* PIE HTC Fix */
						if ($.browser.msie && (parseInt($.browser.version, 10) <= 8)){
							oElement.parent().parent().find("div").eq(0).remove();
						}
						
						element.styleselect.theme("signup_select");
						element.styleselect.target(true).addClass("small-shadow-very-light");
						element.styleselect.onchange = function(){
							try{
								if ((oStates != null) && (oStates.val() != "")){
									element.styleselect.target(true).addClass("show-Active-select").css({
										"background-color": "white",
										"border": "1px solid #A0A0A0"
									});
									if (oCity != null) oCity.focus();
								} else {
									element.styleselect.target(true).removeClass("show-Active-select").css({
										"background-color": "",
										"border": ""
									});
								}
							}catch(e){}
						}
						element.styleselect.onmousedown = function(){
							element.message.hide();
						}
						break;
						
					case "_statet":
						oStatet = oElement;
						break;
						
					case "_city":
						oCity = oElement;
						break;
					
					case "_contactphone":
					case "_alternatephone":
					case "_cellphone":
						oElement.mask("(999) 999-9999", {placeholder: " "});
						oElement.get(0).value = (oElement.attr("value") == "") ? oElement.attr("toggletext") : oElement.get(0).value;                                                
						break;
					
					case "_readterms":
						oTerms = oElement;
						break;
						
					case "_securitycode":
						element.securitycode = oElement.attr("code");
						oElement.mask("?******", {placeholder: ""});
						oElement.bind("keypress", function(ev){
							return !(ev.keyCode == 32);
						}).bind("keydown", function(ev){
							return !(ev.keyCode == 32);
						}).removeAttr("code");
						break;
						
					case "_categories":
						(oCategories = $("INPUT[ltype='category']")).bind("click", function(){
							element.message.hide();
						});
						
						$("LABEL[ltype='categorytitle']").bind("click", function(){
							element.message.hide();
						});
						break;
				}
				
				if ((sFieldName != "_country") && (sFieldName != "_states") && (sFieldName != "_categories")){
					oElement.bind("focus", function(){
						element.message.hide();
					});
				}
				
				if ((sFieldName != "_postalcode") && (sFieldName != "_country") && (sFieldName != "_states") && (sFieldName != "_categories")){
					if ((sFieldName == "_password") || (sFieldName == "_retpassword")){
						var sToggleText = (oElement.attr("toggletext") != null) ? $.Utils.trim(oElement.attr("toggletext")) : "";
						
						oElement.bind("blur", function(){
							if (bValidateOnBlur){
								if ((sToggleText == "") || (sToggleText != oElement.val())){
									_validateBy(oElement, false);
									_validateGroupBy(oElement, "password");
								} else {
									oElement.get(0).valid = false;
									oElement.removeClass("show-Active-input");
								}
							}
						});
						
						oElement.get(0).onbeforetogglebeforechange = function(){
							oElement.get(0).type = "password";
						}
						
						oElement.get(0).onaftertogglebeforechange = function(){
							oElement.get(0).type = "text";
						}
					} else {
						var sToggleText = (oElement.attr("toggletext") != null) ? $.Utils.trim(oElement.attr("toggletext")) : "";
						
						oElement.bind("blur", function(){
							if (bValidateOnBlur){
								if ((sFieldName == "_email") || (sFieldName == "_retemail")){
									if ((sToggleText == "") || (sToggleText != oElement.val())){
										_validateBy(oElement, false);
										_validateGroupBy(oElement, "email");
									} else {
										oElement.get(0).valid = false;
										oElement.removeClass("show-Active-input");
									}
								} else {
									_validateBy(oElement, false);
								}
							}
						});
					}
				}
				
				/* Activate the elements */
				if (sFieldName != "_categories"){
					var sToggleText = (oElement.attr("toggletext") != null) ? $.Utils.trim(oElement.attr("toggletext")) : "";
					if ((sFieldName != "_country") && (sFieldName != "_states")){
						if ((oElement.get(0).tagName.toLowerCase() == "input") || (oElement.get(0).tagName.toLowerCase() == "textarea")){
							if ((sFieldName == "_password") || (sFieldName == "_retpassword")){
								if ((sToggleText != oElement.val()) && (oElement.val() != "")){
									try{
										oElement.get(0).type = "password";
									}catch(e){}
								}
							}
							
							if ((sFieldName != "_readterms") && (sToggleText != oElement.val()) && (oElement.val() != "")){
								oElement.addClass("show-Active-input");
							}
						}
					} else {
						if ((sToggleText != oElement.val()) && (oElement.val() != "")){
							oElement.parent().addClass("show-Active-select").css({
								"background-color": "white",
								"border": "1px solid #A0A0A0"
							});
						}
					}
				}
				
				oFields[iFields++] = oElement;
				
				/* Show Error */
				if (oElement.attr("error") != null){
					if (!$.Utils.empty_string(oElement.attr("error"))) element.message.show(oElement.attr("error"))
					oElement.removeAttr("error");
				}
			}
		});
		
		oForm.find("[ltype='button']").each(function(index, element){
			var oElement = $(this);
			
			switch(oElement.attr("name")){
				case "signup":
					oElement.bind("mouseover", function(){
						bValidateOnBlur = false;
					}).bind("mouseout", function(){
						bValidateOnBlur = true;
					}).removeAttr("disabled");
					
					oElement.click(function(){
						oForm.submit();
					});
					break;
			}
		});
	}catch(e){}
});
