﻿function Registration(){
	this.initialise.apply(this, arguments);
}
Registration.prototype = {
	initialise: function(){
	  this.containerId = arguments[0];	  
	},
	render: function () {
	  this.optinContainer = $$('#'+this.containerId + ' .optin-container')[0];	  
	  this.optionsContainer = $$('#'+this.containerId + ' .options-container')[0];	  
	  this.optinField = $$('#'+this.containerId + ' .optin-field')[0];
	  this.dobDay = $$('#'+this.containerId + ' .dob-day')[0];
	  this.dobMonth = $$('#'+this.containerId + ' .dob-month')[0];
	  this.dobYear = $$('#'+this.containerId + ' .dob-year')[0];	
		//
	  if(this.optinContainer) {
	    this.optinContainer._parent = this;
	    this.optinContainer.setStyle('display', 'none');     
	    //
	    this.optinField._parent = this;
	    
	    if(this.optionsContainer) {	      
	      var radios = $ES('INPUT', this.optinField);
	      var cnt = this.optionsContainer;
	      //cnt.setStyle('display', radios[0].checked ? 'block' : 'none');
	      
	      var optionsSlider = new Fx.Slide(cnt, {duration: 500});
        if(!radios[0].checked) {
          optionsSlider.hide();
        }
        
	      radios[0].addEvent('click', function(evt) {
	        //cnt.style.display = evt.target.checked ? 'block' : 'none';
	        optionsSlider.slideIn();
	      });
	      radios[1].addEvent('click', function(evt) {
	        //cnt.style.display = evt.target.checked ? 'none' : 'block';
	        optionsSlider.slideOut();
	      });	      
	    }
	    
	    this.dobDay._parent = this;	    
	    this.dobDay.addEvent('change',this.calculateAge);	    
	    if(this.dobDay.options.length <= 1) {this.fillListOptions(this.dobDay.options, 1, 31);}
	  
	    this.dobMonth._parent = this;	    
	    this.dobMonth.addEvent('change',this.calculateAge);
	    if(this.dobMonth.options.length <= 1) {this.fillListOptions(this.dobMonth.options, 1, 12);}
	  
	    this.dobYear._parent = this;	    
	    this.dobYear.addEvent('change',this.calculateAge);	  
	    if(this.dobYear.options.length <= 1) {this.fillListOptions(this.dobYear.options, 1900, new Date().getFullYear());}
	    
	    this.calculateAge();
	  }
	},
	
	calculateAge: function(event) {	  	  
	  var reg = this;
	  if(reg._parent) reg=reg._parent;	  
	  var dt = reg.convertToDate();
	  if(dt != "Invalid Date") {
	    var now = new Date();
	    var years = now.getFullYear() - dt.getFullYear();	    
	    if(now.getMonth() < dt.getMonth() || (now.getMonth() == dt.getMonth() && now.getDate() < dt.getDate())) {
	      years--;	      
	    }	    
	    if(years >= 18) {
	      reg.optinContainer.setStyle('display', 'block');	
	      if($('registerSlider') && $('registerSlider').hasChild(reg.optinContainer)) mySlider.show();      
	    }
	    else {
	      reg.optinContainer.setStyle('display', 'none');	      
	    }
	  }
	  else {
	    reg.optinContainer.setStyle('display', 'none');	      
	  }	  
	},
	
	convertToDate: function() {
	  var dd = parseInt(this.dobDay.options[this.dobDay.selectedIndex].value);
	  var mm = parseInt(this.dobMonth.options[this.dobMonth.selectedIndex].value) - 1;
	  var yy = parseInt(this.dobYear.options[this.dobYear.selectedIndex].value);
	  var dt = new Date(yy, mm, dd);	  
	  // Detection for bad dates (e.g. feb 31st)
	  if(dt.getDate() != dd || dt.getMonth() != mm  || dt.getFullYear() != yy)
	    dt = "Invalid Date";
	  return dt;
	},
	
	validate: function () {
	  var dt = this.convertToDate();
	  return dt != "Invalid Date";	  
	},
	
	shouldValidateOptin: function() {	
	  return this.optinContainer.getStyle('display') == 'block';
	},
	
	fillListOptions: function (options, from, to) {
		for(var i=from; i<=to; i++) {
			var opt = document.createElement("option");
			opt.text = i;
			opt.value = i;
			try{
				options.add(opt);
			}catch(e){
				try{
					options[options.length] = (opt);
				}catch(e){}
			}
		} 
	}
};


/* asp.net custom validators */

function validatePassword(source, args) {
  var pwd = String(args.Value);
  args.IsValid = pwd.length >= 6; 
}

function validateOptin(source, args) {
  
  if($(source.controltovalidate)._parent && $(source.controltovalidate)._parent.shouldValidateOptin()) {
    args.IsValid = !(args.Value == null || args.Value == '')   
  }  
  else {
    args.IsValid = true;
  }
}

function validateDob(source, args) {  
  args.IsValid = $(source.controltovalidate)._parent.validate();
}

function debug() {
  var s = '';
  for(var i=0; i<Page_Validators.length; i++) {
    s += Page_Validators[i].controltovalidate + ' = ' + Page_Validators[i].isvalid + "\n";    
  }
  alert(s);
}
