var SIGNUP = SIGNUP || {};
SIGNUP.Addons = new Class({
	Implements: [Options, Events],
	initialize: function(extraData, backupData){
	  this.extraData = extraData;
	  this.backupData = backupData;
	  this.selectEvents('extra');
	  this.selectEvents('backup');
	  this.currentPrice;
	  
	},
	
	/**
	 *  Return data based on element name
	 *  
	 *	@parms p_name
	 *  @return 
	 */
	getData : function(p_name){
		eval('var returnObject = this.'+p_name+'Data');
		return returnObject;
	},

	
	/**
	 *  Places events in place to trigger population of the dom
	 *  
	 *	@parms id of the grouped addon area eg extra
	 *  @return 
	 */
	selectEvents : function(id){
		var select = $(id+'_product');
		var visualPrice = $(id+'_product_price');
		var productVisual =  $(id+'_product_visual');
		var periodVisual = $(id+'_period_visual');
		var periodicy = $(id+'_period');
		
		
		
		select.addEvents({
			'change': function(){  
				if(periodicy.value){
					var value= select.value;
					visualPrice.innerHTML = select.options[select.selectedIndex].className;
					if(select.options[select.selectedIndex].className){
						productVisual.innerHTML = '&gt; '+select.options[select.selectedIndex].className+' &lt;';
					} else {
						productVisual.innerHTML = '';
					}
					periodVisual.innerHTML = '&gt; '+periodicy.value+' &lt;';
				}

		}.bind(this)	
		});	
		
		periodicy.addEvents({
			'change': function(){
				//repop reload
				this.populate(id);
				//lack of time...
				if(periodicy.value){
					var value= select.value;
					visualPrice.innerHTML = select.options[select.selectedIndex].className;
					if(select.options[select.selectedIndex].className){
						productVisual.innerHTML = '&gt; '+select.options[select.selectedIndex].className+' &lt;';
					} else {
						productVisual.innerHTML = '';
					}
					periodVisual.innerHTML = '&gt; '+periodicy.value+' &lt;';
				}

		}.bind(this)	
		});	
		
		
	
		
	},
	
	/**
	 *  Populate a given drop down with data
	 *  
	 *	@parms id of the grouped addon area eg extra
	 *  @return 
	 */
	populate : function(id){
		var data = this.getData(id);
		var select = $(id+'_product');
		var periodicy = $(id+'_period').value;
		var currentSelect = select.selectedIndex;
		
		select.options.length = 0;
		try
		{
			select.add(new Option('Please select', ''), null);
			
		}
		catch (err)
		{
			select.add(new Option('Please select', ''));
		}

		//console.log(data);
		
		var count = 1;
		data.each(function(item, index){	
			if(item.periodicy == periodicy){
				try
				{
					select.add(new Option(item.name, item.product_id), null);
					select.options[count].className = '$'+item.price;
				}
				catch (err)
				{
					select.add(new Option(item.name, item.product_id));
					select.options[count].className = '$'+item.price;
				}
				count++;
			}
		}); 
		
		
		if(currentSelect >= 1){
			select.options.selectedIndex = currentSelect;
		}
	}

	
});

SIGNUP.Controls = new Class({
	Implements: [Options, Events],
	options: {
	
	},
	initialize: function(){


		//hide /  show au business details
		this.toggleAU($('domainstatus_id'));
		
		this.additionalContactValidate();
		this.toggleAdditionalContact();
		
		this.removeAUFieldsetError();
		//hide update button for js users
		
		this.checkCCExpiry();
		
		return this;
	},
	
	
	/**
	 *  Add  validataion class for field
	 *  
	 *	@parms p_field string - fieldid in dom
	 * 	@parms p_value string - required string as per feild validataion tool fieldcheck
	 *  @return 
	 */
	addValidataion : function(p_field, p_value) {
		var field = $(p_field);
		field.addClass(p_value);
		formChecker.register(field);
		
	},

	/**
	 *  Remove validataion class for field
	 *  
	 *	@parms p_field string - fieldid in dom
	 *  @return 
	 */
	removeValidataion : function(p_field){
		var field = $(p_field);
		field.erase('class');
		formChecker.removeError(field);
	},
	
	
	
	/**
	 *  
	 *	@parms 
	 *  @return 
	 */
	additionalContactValidate : function(){
		$('extra-contact').addEvents({
			'click': function(){  
				this.toggleAdditionalContact();
				//set validataion in place for fieldset - this is just hooked in place message
		}.bind(this)	
		});	
	},
	
	/**
	 *  
	 *	@parms 
	 *  @return 
	 */
	removeAUFieldsetError : function(){
		$('OrganizationName').addEvents({
			'click': function(){  
			formChecker.removeError($('fieldset-au-details'));
		}.bind(this)	
		});	
		
	},
	
	/**
	 *  
	 *	@parms 
	 *  @return 
	 */
	toggleAdditionalContact : function() {
		//class="validate['length[1,40]']"
		//validate['email']"
		//validate['length[1,20]', 'digit']

		
		var value = $('extra-contact').checked;
		var fieldSet = $('fieldset-additional-contact');

		
		if(value){
			$("fieldset-additional-contact").setStyle("display", "block");
			fieldSet.errors=new Array();
			fieldSet.errors[0] = "Please provide additional contact details";
			formChecker.addError(fieldSet);	
			
			this.addValidataion('contact2_first', "validate['length[1,40]','alpha']"); //text input
			this.addValidataion('contact2_surname', "validate['length[1,40]','alpha']"); //text input
			this.addValidataion('contact2_email', "validate['email']"); //text input
			this.addValidataion('contact2_ph', "validate['melbourneITPhone']"); //text
			
			
		} else {	
			this.removeValidataion('contact2_first');
			this.removeValidataion('contact2_surname');
			this.removeValidataion('contact2_email');
			this.removeValidataion('contact2_ph');
			
			formChecker.removeError(fieldSet);
			$("fieldset-additional-contact").setStyle("display", "none");
			
			
		}
	},
	
	
 
	/**
	 *  Toggle AU business details form fieldset
	 *	@parms p_data HTMLelement - select element
	 *  @return 
	 */
	toggleAU : function(p_data) {		
		//select string
		var selectString =  p_data[p_data.selectedIndex].text;
		var fieldSet = $('fieldset-au-details');
		
		
		//test to see if contain AU
		if(selectString.test('AU')){
		
			//display
			$("fieldset-au-details").setStyle("display", "block");
			
			if(!$('OrganizationName').value.length){
				//set validataion in place
				fieldSet.errors=new Array();
				fieldSet.errors[0] = "Please provide an Business Name or Company Name";
				formChecker.addError(fieldSet);
			}
			
			this.addValidataion('OrganizationName', "validate['required','length[1,40]']"); //text input
			this.addValidataion('OrganizationACN', "validate['required','length[8,80]','digit']"); //text input
			this.addValidataion('OrganizationEligibility', "validate['required']"); //select box
			
			
		} else {
			//remove field checks
			formChecker.removeError($('OrganizationName'));
			formChecker.removeError($('OrganizationACN'));
			formChecker.removeError($('OrganizationEligibility'));
			
			
			//hide notice for fieldset
			formChecker.removeError(fieldSet);
			$("fieldset-au-details").setStyle("display", "none");
			
		}	
	},
	/**
	 *  Check expiry date of card
	 *	@parms 
	 *  @return 
	 */
	checkCCExpiry : function() {		
		
		$('card_ccv').addEvents({
			'click': function(){  
			 this.displayCCError();
		}.bind(this)	
		});	
			
		
		$('card_exp_month').addEvents({
			'click': function(){  
			//single update check
			this.displayCCError();
			//check for update to year
			$('card_exp_year').addEvents({
				'click': function(){  
				 this.displayCCError();
			}.bind(this)	
			});	
			
		}.bind(this)	
		});	
		
		$('card_exp_year').addEvents({
			'click': function(){ 
			//single update check
			this.displayCCError();
			//check for update to month
			$('card_exp_month').addEvents({
				'click': function(){  
				 this.displayCCError();
			}.bind(this)	
			});	
			
		}.bind(this)	
		});	
	},
	
	/**
	 *  Display credit card error
	 *  if expired
	 *	@parms 
	 *  @return 
	 */
	displayCCError : function(){
		var today 	 = new Date();
		var selected = new Date();
		//this will be good untill the year 3000
		selected.setFullYear('20'+$('card_exp_year').value,$('card_exp_month').value-1,1);		
		//remove date component from 'today'
		today.setFullYear(today.getUTCFullYear(), today.getUTCMonth(), 1);
		if (selected<today){
			var year = $('card_exp_year');
			year.errors=new Array();
			year.errors[0] = "Your credit card has expired";
			formChecker.addError(year);
		} else {
			formChecker.removeError($('card_exp_year'));
		}
	}
});

