﻿var RegistrationForm = new Class({

	Implements: [Options, Events],
		options: {
		},
	
	
	/*********************************************BCS Comments*********************************************/	
	/// <name>initialize</name>
	/// <summary>
	/// 1.Register validate of input.
	/// 2.Add Event of elements
	/// </summary>
	/// <param name="ele">current form object</param>
	/*****************************************************************************************************/
	initialize: function(ele){
		this.form = ele;
		this.exValidator = new fValidator(ele.get('id'), { onValid: this.OnValidCheck.bind(this) });
		this.exValidator.register($("ctl00_LeftContent_wineryName"),{type: "ctl00_LeftContent_wineryName", re: /.*[^ ].*/, msg: "Please enter the legal name of the winery." });
		this.exValidator.register($("ctl00_LeftContent_AddressName"),{type: "ctl00_LeftContent_AddressName", re: /.*[^ ].*/, msg: "Please enter the legal address for the winery." });
		this.exValidator.register($("ctl00_LeftContent_lbPostalCode"),{type: "ctl00_LeftContent_lbPostalCode", re: /^[a-zA-Z][0-9][a-zA-Z][ ]?[0-9][a-zA-Z][0-9]$/, msg: "Please enter a valid Postal Code. " });
		this.exValidator.register($("ctl00_LeftContent_contactFirstName"),{type: "ctl00_LeftContent_contactFirstName", re: /.*[^ ].*/, msg: "Please enter your First Name." });
		this.exValidator.register($("ctl00_LeftContent_contactLastName"),{type: "ctl00_LeftContent_contactLastName", re:/.*[^ ].*/, msg: "Please enter your Last Name." });
		this.exValidator.register($("ctl00_LeftContent_jobtitle"),{type: "ctl00_LeftContent_jobtitle", re: /.*[^ ].*/, msg: "Please enter your Job Title." });
		this.exValidator.register($("ctl00_LeftContent_Phone"), {type:"ctl00_LeftContent_Phone",re: /^[\(]\d{3}[\)][ ]\d{3}[-]\d{4}$/ , msg: "Please enter a Phone Number." });	
		this.exValidator.register($("ctl00_LeftContent_emailTextBox"), {type: "ctl00_LeftContent_emailTextBox",re: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, msg: "Please check your email address. Your email addresses should look like 'myname@yahoo.com'."});
		this.exValidator.register($("ctl00_LeftContent_cityDropDownList"),{type: "ctl00_LeftContent_cityDropDownList", re: /[^.*]/, msg: "Please select a city." });
		this.exValidator.register($("ctl00_LeftContent_countryDropDownList"),{type: "ctl00_LeftContent_countryDropDownList", re: /[^.*]/, msg: "" });
		this.exValidator.register($("ctl00_LeftContent_provinceDropDownList"),{type: "ctl00_LeftContent_provinceDropDownList", re: /[^.*]/, msg: "Please select a province or city" });
		this.exValidator.register($("ctl00_LeftContent_casesInYear"),{type: "ctl00_LeftContent_casesInYear", re: /[^.*]/, msg: "Please select a Production in cases." });
		var commitementTable = $('ctl00_LeftContent_WineryPricingByCase');
		var commitementTrs = $('ctl00_LeftContent_WineryPricingByCase').getElements('tr');
		if(commitementTrs.length>0)
		{
			for(var i = 0;i<commitementTrs.length ; i++)
			{
				
					var ele = commitementTrs[i].getElement('input');
					new Selected(ele); 
					
			}
		}
		
		$("lbnClearAll").addEvent('click', function(e){
			new Event(e).stop();
			this.form.reset();
		}.bind(this));
		
		$("lbnMainSubmit").addEvent('click', function(e){
			new Event(e).stop();
			var ele = $('ctl00_LeftContent_emailTextBox');
			var jsonRequest = new Request({
				url:"EmailAddressChange.aspx"+ "?eAddress=" + ele.value+"&contact=true",
				onComplete: function(responseText){
					if(this.exValidator._onSubmit(e))
					{
						if(responseText.toString()=='true')
						{
							//var lbLic = ele.nextSibling.nextSibling;
							//this.exValidator._msgInject( ele, {type: "", msg: "This Email Address has been registed." }, true);
						}
						else
						{
								$('ctl00_LeftContent_wineryRegisterDiv').setStyle('display','none');
								$('ctl00_LeftContent_lengthOfConmmitment').setStyle('display','');
								//$('ctl00_LeftContent_winerySignUpConfirm').setStyle('display','none');
						}
					}
				}.bind(this)
			
			}).get();
	
		}.bind(this));
		
		$("ctl00_LeftContent_HiddenLinkButton").addEvent('click', function(e){
			
			if(this.exValidator._onSubmit(e))
			{
//				$("ctl00_LeftContent_HiddenLinkButton").setProperty('disabled','disabled');
//				$("ctl00_LeftContent_HiddenLinkButton").addClass('disabled');
//				$("ctl00_LeftContent_HiddenLinkButton").removeEvents();
				return;
			
			}
			else
			{
				
			}
		}.bind(this));
		
		$("cancelButton").addEvent('click', function(e){
			new Event(e).stop();
			$('ctl00_LeftContent_wineryRegisterDiv').setStyle('display','');
			$('ctl00_LeftContent_lengthOfConmmitment').setStyle('display','none');
			//$('ctl00_LeftContent_winerySignUpConfirm').setStyle('display','none');
		}.bind(this));
		this.PostCodeViladation();
		
		$("ctl00_LeftContent_casesInYear").addEvent('change',function(e){
			var reqURL = 'GetWineryPricingByCaseID.aspx?CaseID='+ $("ctl00_LeftContent_casesInYear").get('value');
			var opeReq = new Request.JSON({url: reqURL,
											onComplete:function(Data){
//											var commitementTable = $('ctl00_LeftContent_WineryPricingByCase');
//											var commitementTrs = $('ctl00_LeftContent_WineryPricingByCase').getElements('tr');
											if(commitementTrs.length>0)
											{
												var selectedValueEle = $('ctl00_LeftContent_selectedvalue');
												for(var i = 0;i<Data.returnNum ; i++)
												{
													commitementTrs[i].getElement('input').set('value',eval("Data.returnID" + i));
													commitementTrs[i].getElement('label').set('text',eval("Data.returnText" + i));
												}
												commitementTrs[0].getElement('input').selected = true; 
												$('ctl00_LeftContent_selectedvalue').set('value',eval("Data.returnID" + 0));
												$('ctl00_LeftContent_selectedText').set('value',eval("Data.returnText" + 0));
											}
												
										}
									}).get();
		}.bind(this));
		
		$("ctl00_LeftContent_countryDropDownList").addEvent('change', function(e){
			new Event(e).stop();
			var selectCountryEle=	$("ctl00_LeftContent_countryDropDownList");
			this.CountryID = selectCountryEle.get('value');
			$('HiddenCountryValue').set('value',this.CountryID);
			var selectCityEle = $("ctl00_LeftContent_cityDropDownList");
			var selectProvinceEle = $("ctl00_LeftContent_provinceDropDownList");
			var reqURL = 'GetCityAndProvinceByCountry.aspx?CountryID='+ this.CountryID;
			var opeReq = new Request.JSON({url: reqURL,
										onComplete:function(Data){
										var num = parseInt(Data.numOfItems);
										selectProvinceEle.options.length=0;
										var stateTdEle = selectProvinceEle.getParent('td').getPrevious('td');
										var selectSentence = 'Select a Province/State';
										var imaskObj=new iMask();
										if(parseInt(this.CountryID) == 37)
										{
											
											stateTdEle.set('text','Province:');
											selectSentence= 'Select a Province';
											imaskObj.removeRestrict();
											imaskObj.addRestrict();
											$("ctl00_LeftContent_lbPostalCode").removeEvents();
											this.RegisteEleValidation($("ctl00_LeftContent_lbPostalCode"),"Please enter a valid Postal Code.",/^[a-zA-Z][0-9][a-zA-Z][ ]?[0-9][a-zA-Z][0-9]$/);
											this.RegisteEleValidation($('ctl00_LeftContent_Phone'),"Please enter a Valid Phone Number.", /^[\(]\d{3}[\)][ ]\d{3}[-]\d{4}$/);
											this.PostCodeViladation();
											
											
										}
										else if(parseInt(this.CountryID) == 235)
										{
											stateTdEle.set('text','State:');
											selectSentence= 'Select a State';
											imaskObj.removeRestrict();
											$("ctl00_LeftContent_lbPostalCode").removeEvents();
											this.RegisteEleValidation($("ctl00_LeftContent_lbPostalCode"),"Please enter your Postal Code.",/.*[^ ].*/);
											this.PostCodeViladation();
											this.RegisteEleValidation($('ctl00_LeftContent_Phone'),"Please enter your Phone Number.",/.*[^ ].*/);
										}
										else 
										{
											stateTdEle.set('text','Province/State:');
											imaskObj.removeRestrict();
											$("ctl00_LeftContent_lbPostalCode").removeEvents();
											this.RegisteEleValidation($("ctl00_LeftContent_lbPostalCode"),"Please enter your Postal Code.",/.*[^ ].*/);
											this.PostCodeViladation();
											this.RegisteEleValidation($('ctl00_LeftContent_Phone'),"Please enter your Phone Number.",/.*[^ ].*/);
										}
										var defaultobjOption1 = new Option(selectSentence, '');
										selectProvinceEle.options.add(defaultobjOption1);
										selectCityEle.options.length=0;
										var defaultobjOption2 = new Option('Select a City', '');
										selectCityEle.options.add(defaultobjOption2);
										var textBoxCity = selectCityEle.getNext('input');
										var textBoxProvince = selectProvinceEle.getNext('input');
										if( num>0 )
										{
											selectProvinceEle.setStyle('display','');
											selectCityEle.setStyle('display','none');
											textBoxCity.setStyle('display','');
											textBoxCity.getNext('input').set('value','Display');
											textBoxProvince.setStyle('display','none');
											textBoxProvince.getNext('input').set('value','NotDisplay');
								
											this.RemoveValidation(textBoxCity);
											this.RemoveValidation(textBoxProvince);
											var i = 0;
											for(;i<num;i++)
											{
												 var objOption = new Option(eval("Data.returnValue" + i),eval("Data.returnIDValue" + i));
												 selectProvinceEle.options.add(objOption);
												 
											}
											this.RegisteEleValidation(selectCityEle,"Please select a city.",/.*[^ ].*/);
											this.RegisteEleValidation(selectProvinceEle,"Please select a province or city." ,/.*[^ ].*/);
										}
										else
										{
											selectProvinceEle.setStyle('display','none');
											
											textBoxProvince.setStyle('display','');
											textBoxProvince.getNext('input').set('value','Display');
											
											selectCityEle.setStyle('display','none');
											textBoxCity.setStyle('display','');
											textBoxCity.getNext('input').set('value','Display');
											this.exValidator.register( textBoxCity, {type: textBoxCity.id, re: /.*[^ ].*/, msg: "Please enter your city." } ); 
											this.exValidator.register( textBoxProvince, {type: textBoxProvince.id, re:/.*[^ ].*/, msg: "Please enter your province." } );
											this.RemoveValidation(selectCityEle);
											this.RemoveValidation(selectProvinceEle);
											
											 
										}
									}.bind(this)
								}).get();
		    
		}.bind(this));
		
		
		$("ctl00_LeftContent_provinceDropDownList").addEvent('change', function(e){
			new Event(e).stop();
			var selectCityEle = $("ctl00_LeftContent_cityDropDownList");
			var selectProvinceEle=	$("ctl00_LeftContent_provinceDropDownList");
			this.ProvinceID = selectProvinceEle.get('value');
			$('ctl00_LeftContent_HiddenProvinceValue').set('value',this.ProvinceID);
			$('ctl00_LeftContent_HiddenProvinceText').set('value',selectProvinceEle.options[selectProvinceEle.selectedIndex].text);
			this.CheckIfAvailableArea();
			var reqURL = 'GetCityAndProvinceByCountry.aspx?ProvinceID='+ this.ProvinceID ;
			var opeReq = new Request.JSON({url: reqURL,
										onComplete:function(Data){
										var num = parseInt(Data.numOfItems);
										selectCityEle.options.length=0;
										var defaultobjOption = new Option('Select a City', '');
										selectCityEle.options.add(defaultobjOption);
										var textBoxCity = selectCityEle.getNext('input');
										if( num>0 )
										{	
											selectCityEle.setStyle('display','');
											textBoxCity.setStyle('display','none');
											textBoxCity.getNext('input').set('value','NotDisplay');
											//remove register
											this.RemoveValidation(textBoxCity);
											var i = 0;
											for(;i<num;i++)
											{
												 var objOption = new Option(eval("Data.returnValue" + i),eval("Data.returnIDValue" + i));
												 selectCityEle.options.add(objOption);
											}
											this.RegisteEleValidation(selectCityEle,"Please select a city.",/.*[^ ].*/);
											
										}
										else
										{
											selectCityEle.setStyle('display','none');
											textBoxCity.setStyle('display','');
											textBoxCity.getNext('input').set('value','Display');
											this.RemoveValidation(selectCityEle);
											this.RegisteEleValidation(textBoxCity,"Please enter your city.",/.*[^ ].*/);
										}
										
										
									}.bind(this)
								}).get();
		}.bind(this));
		
		$("ctl00_LeftContent_cityDropDownList").addEvent('blur', function(e){
			new Event(e).stop();	
			$('ctl00_LeftContent_HiddenCityValue').set('value',$("ctl00_LeftContent_cityDropDownList").get('value'));
			$('ctl00_LeftContent_HiddenCityText').set('value',$("ctl00_LeftContent_cityDropDownList").options[$("ctl00_LeftContent_cityDropDownList").selectedIndex].text);
			$("ctl00_LeftContent_provinceDropDownList").setStyle('background-color','#CCFFCC');
			$("ctl00_LeftContent_provinceDropDownList").setStyle('border-color','#00CC00');
			$("ctl00_LeftContent_countryDropDownList").setStyle('background-color','#CCFFCC');
			$("ctl00_LeftContent_countryDropDownList").setStyle('border-color','#00CC00');
		}.bind(this));
		
		$("ctl00_LeftContent_provinceDropDownList").addEvent('blur', function(e){			
		new Event(e).stop();						
		$("ctl00_LeftContent_countryDropDownList").setStyle('background-color','#CCFFCC');			
		$("ctl00_LeftContent_countryDropDownList").setStyle('border-color','#00CC00');		
		}.bind(this));		
	},
	OnValidCheck: function(field, options){
		if(field.id == "ctl00_LeftContent_emailTextBox")
		{
			
			var addressEles = $("ctl00_LeftContent_emailTextBox");
			var count = 0;
			for (var i=0;i<addressEles.length;i++)
			{
				if(addressEles[i].value == field.value)
				{
					count = count+1;
				}
			} 
			if(count > 1)
			{
				this.exValidator._msgInject( field, {type: options.type, msg: "This Email Address has been registed." }, true);
				return;
			}
			//judge has the unique entAddress
			//if unique
			//{
			//	this.exValidator._msgInject( ele, {type: strType.toString(), msg: "You can't input a unique emailAddress." }, true);
			//	return;
			//}
			//else
			//{
				this.EmailRealCheck(field,options.type);
			//}
		}
	},
	EmailRealCheck:function(ele,strType){ 
		//Get value from input
		//this.element.get('value');
		//Send AJAX request to Backend
		var jsonRequest = new Request({
			url:"EmailAddressChange.aspx"+ "?eAddress=" + ele.value+"&contact=true",
			onComplete: function(responseText){
				this.EmailResult(responseText,ele,strType);
			}.bind(this)
		}).get();


		//Show information for checking
		//this.inforEle.set('html','*span>Validating, please wait...</span>');
	},
	
	
	EmailResult:function(responseText,ele,strType){ 
		if(responseText.toString() == "true")
		{
			var lbLic = ele.nextSibling.nextSibling;
			this.exValidator._msgInject( ele, {type: strType.toString(), msg: "This Email Address has been registed." }, true);
		}
		else if(responseText.toString() == "false")
		{
			var lbLic = ele.nextSibling.nextSibling;
			lbLic.style.color = "#FF3300"
			lbLic.innerHTML = "*";
		}
		else if(responseText.toString() == "no")
		{
			var lbLic = ele.nextSibling.nextSibling;
			lbLic.style.color = "#FF3300"
			lbLic.innerHTML = "*";
		}
		else
		{
			//window.alert(responseText)
		}
	},
	PostCodeViladation : function()
	{
		$("ctl00_LeftContent_lbPostalCode").addEvent('keydown',function(e){
			$('ctl00_LeftContent_lbPostalCode').value = $('ctl00_LeftContent_lbPostalCode').value.toUpperCase();
		}.bind(this));
												
		$("ctl00_LeftContent_lbPostalCode").addEvent('keyup',function(e){
			$('ctl00_LeftContent_lbPostalCode').value = $('ctl00_LeftContent_lbPostalCode').value.toUpperCase();
		}.bind(this));
	},
	CheckIfAvailableArea:function()
	{
		var provinceID = $('ctl00_LeftContent_HiddenProvinceValue').get('value');
		var countryID = $('HiddenCountryValue').get('value');
		var request = new Request({
			url:"CheckIfTheAreaIsAvailavle.aspx?CountryId=" + countryID+"&ProvinceID="+provinceID,
			onComplete: function(responseText){
				if(responseText == 'True')
				{
					$("lbnMainSubmit").setStyle('display','');
					$('lbnMainSubmit').getParent('div').getNext('div').setStyle('display','none');
//					var countryEle = $('ctl00_LeftContent_countryDropDownList').getParent('td');
//					countryEle.getNext('td').setStyle('display','');
//					countryEle.getNext('td').getNext('td').setStyle('display','');
//					this.RegisteEleValidation( $('ctl00_LeftContent_casesInYear'),"Please select a Production in cases.",/.*[^ ].*/);
				}
				else
				{
//					this.RemoveValidation($('ctl00_LeftContent_casesInYear'));
//					var countryEle = $('ctl00_LeftContent_countryDropDownList').getParent('td');
//					countryEle.getNext('td').setStyle('display','none');
//					countryEle.getNext('td').getNext('td').setStyle('display','none');
					$("lbnMainSubmit").setStyle('display','none');
					$('lbnMainSubmit').getParent('div').getNext('div').setStyle('display','');
				}
			}.bind(this)
		}).get();
	},
	RegisteEleValidation: function(ele,msg,type)
	{
		this.exValidator._msgInject(ele, {type:ele.id, msg: "" }, true);
		this.exValidator.registerRemove(ele); 
		this.exValidator.register(ele,{type: ele.id, re:type, msg: msg });
	},
	RemoveValidation : function(ele)
	{
		this.exValidator._msgInject(ele, {type:ele.id, msg: "" }, true);
		this.exValidator.registerRemove(ele); 
	}
	
});

var Selected = new Class({

	Implements: [Options, Events],
		options: {
		},
	initialize: function(ele){
		ele.addEvent('click', function(e){
					$('ctl00_LeftContent_selectedvalue').set('value',ele.get('value'));
					$('ctl00_LeftContent_selectedText').set('value',ele.getNext('label').get('text'));
			})
	}
});
