
/**************************************************************

	Script		: Validate
	Version		: 2.1
	Authors		: Samuel Birch
	Desc		: Form validation
	Licence		: Open Source MIT Licence

**************************************************************/

var Validate = new Class({
	
	getOptions: function(){
		return {
			validateOnBlur: true,
			errorClass: 'error',
			errorMsgClass: 'errorMessage',
			dateFormat: 'dd/mm/yyyy',
			onFail: Class.empty,
			onSuccess: false,
			showErrorsInline: true,
			label: 'Please wait...'
		};
	},

	initialize: function(form, options){
		this.setOptions(this.getOptions(), options);
		
		this.form = $(form);
		this.elements = this.form.getElements('.required');
		//alert(this.elements[].name);
		this.list = [];
		
		this.elements.each(function(el,i){
			if(this.options.validateOnBlur){
				el.addEvent('blur', this.validate.bind(this, el));
			}
		}.bind(this));
		
		this.form.addEvent('submit', function(e){
		//alert("Test ");
			var event = new Event(e);
			var doSubmit = true;
			this.elements.each(function(el,i){
			//alert("dasd" +document.getElementById("enddate").value);
				if(! this.validate(el)){
					event.stop();
					doSubmit = false
					this.list.include(el);
				}else{
					this.list.remove(el);
				}
			}.bind(this));
			
			if(doSubmit){
				
				if(this.options.onSuccess){
					event.stop();
					this.options.onSuccess(this.form);
				}else{
					this.form.getElement('input[type=image]').setProperty('value',this.options.label);
				}
			}else{
				this.options.onFail(this.getList());
			}
			
		}.bind(this));
		
	},
	
	getList: function(){
		var list = new Element('ul');
		this.list.each(function(el,i){
			if(el.title != ''){
			var li = new Element('li').injectInside(list);
			new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li);
			}
		});
		return list;
	},
	
	validate: function(el){
		var valid = true;
		this.clearMsg(el);
		
		switch(el.type){
			case 'text':
			case 'password':
			case 'textarea':
			case 'select-one':
				if(el.value != ''){
					if(el.hasClass('email')){
						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
						if(el.value.toUpperCase().match(regEmail)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Please enter a valid email address');
						}
					}
					
					if(el.hasClass('numbers')){
						
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
					
							if(el.value.match(regNum) && (el.value.length==2) ){
							
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Please enter a valid number ');
							e1.focus();
						}
					}
					
					if(el.hasClass('number')){
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
					
					if (el.title!="Rent")
					{	
					if(el.value.length>=10 &&  el.value.length<=12){
						
							valid = true;
						}else{
							
							valid = true;
							
						}
					}	else{
							
							valid = true;
						
						}
					}
					
					
					if(el.hasClass('postcode')){
						//var regPC = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/
						var regNum =  /\d{4}/;;
						if(el.value.match(regNum) && el.value.length==4){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Please enter a valid postcode');
						}
					}
					
					if(el.hasClass('date')){
					
					var d = Date.parseExact(el.value, this.options.dateFormat);
						
					var currentTime = new Date();
					
					
					var gardate = el.value;
					//var dateStart;
					//var dateEnd;
					
					if (document.getElementById("startdate")!=null){
						var dateStart = document.getElementById("startdate").value;
						var dateEnd = document.getElementById("enddate").value;
						var startdt = dateStart.substring(0,2); 
						var startmon = dateStart.substring(3,5); 
						var startyear  = dateStart.substring(6,10);  
					
						var startDt = startmon + "/" + startdt + "/" + startyear;
					
						var enddt = dateEnd.substring(0,2); 
						var endmon = dateEnd.substring(3,5); 
						var endyear  = dateEnd.substring(6,10);
						var endDt = endmon + "/" + enddt + "/" + endyear;
						var date_start = new Date(startDt);
						var date_end = new Date(endDt);
						if (date_end<date_start)
						{
							valid = false;
							this.setMsg(el, 'End Date become the date on or after the starting date...');
						}
					}
					//alert("testing.1.");
					
					
					
					var gardt1 = gardate.substring(0,2); 
					var garmon = gardate.substring(3,5); 
					var garyear  = gardate.substring(6,10);  
					var gardatenew = garmon + "/" + gardt1 + "/" + garyear;
					
					var month = currentTime.getMonth()+1 ;
					var day = currentTime.getDate();
					var year = currentTime.getFullYear();
					var curdate = month + "/" + day + "/" + year;
					d1= new Date(curdate);
					d2= new Date(gardatenew);
					
					if (el.name!="endtimedate")
					{
						if (d2<d1) {
						valid = false;
						this.setMsg(el, 'Date should be greater than or equal to the current date');
					}
					}
			//alert("sdfsd "+d1[1]);		
					
					
						if(d != null){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Please enter a valid date in the format: '+this.options.dateFormat.toLowerCase());
						}
					}
					if(el.hasClass('cpassword')){
						if(el.value != document.getElementById("password").value){
							valid = false;
							this.setMsg(el, 'password is not confirmed');
						}
					}
					if(el.hasClass('duplicatecheck')){
						
						var response = callRequestObject('','duplicatecheck.php?' +'email=' + escape(el.value) + '&t=' + new Date().getTime(),"get");
						
						if(parseInt(response)== 0 ){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'email not available');
						}
					}
				}else{
					valid = false;
					this.setMsg(el);
				}
				break;
				
			case 'checkbox':
				if(!el.checked){
					valid = false;
					this.setMsg(el);
				}else{
					valid = true;
				}
				break;
				
			case 'radio':
				var rad = $A(this.form[el.name]);
				var ok = false;
				rad.each(function(e,i){
					if(e.checked){
						ok = true;
					}
				});
				if(!ok){
					valid = false;
					this.setMsg(rad.getLast(), 'Please select');
				}else{
					valid = true;
					this.clearMsg(rad.getLast());
				}
				break;
				
		}
		return valid;
	},
	
	setMsg: function(el, msg){
		if(msg == undefined){
			msg = el.title;
		}
		if(this.options.showErrorsInline){
			if(el.error == undefined){
				el.error = new Element('span').addClass(this.options.errorMsgClass).setText(msg).injectAfter(el);
			}else{
				el.error.setText(msg);
			}
			el.addClass(this.options.errorClass);
		}
	},
	
	clearMsg: function(el){
		el.removeClass(this.options.errorClass);
		if(el.error != undefined){
			el.error.remove();
			el.error = undefined;
		}
	}
	
});

Validate.implement(new Options);
Validate.implement(new Events);


/*************************************************************/


