app.pvalid = {

	times : 0, 
	
	attachEvents : function(){
		
		var t = app.pvalid;	
				
		app.events.submitform = this.form.event('submit', function(e){ 
				sb.events.stopAndPrevent(e);				
				t.checkCaptcha(t.checkCurrentPass, e);			
		});		
	},
	
	checkFin : function(e){ 
		if(fin){t.form.submit();}
	},	
	
	checkCaptcha : function(keepGoing, e){
		var t = this;				
		var getter = new sb.ajax({ 
			format : 'json',
			data : 'c=check_captcha&captcha=' + this.form.captcha.value,			
			handler : function(data){ 				
							
				if(data.human == 1){
					app.errlog.remove('captcha_err');
					keepGoing.call(t, e);				
				}else{				
					
					app.captcha_img.src = (/(\d)$/.test(app.captcha_img.src))?app.captcha_img.src.replace(/(\d)$/, app.times++):app.captcha_img.src + "?x=1";							
					app.errlog.add({
							message : 'Please retype your validation text',
							targ : t.form.captcha,
							id : 'captcha_err'
					});
					
					t.form.captcha.select();
					t.form.captcha.focus();
				}
			}
		}).fetch();
		
		delete getter;
	},

	checkCurrentPass : function(e){
		var t = this;				
		var getter = new sb.ajax({ 
			format : 'json',
			data : 'c=check_password&opass=' + this.form.opass.value,
			handler : function(code){ 
			
					switch(code){
						case -1:
							//session expired
						break;
						
						case 1:	
							app.errlog.remove('opass_err');
							t.lastStep();
						break;	
						
						case 0:
							app.errlog.add({
									message : "Please check your Current Password",
									targ : t.form.opass,
									id : 'opass_err'
							});
							
						break;
						
						default:
							//session expired, logout
							//window.location = "../app/?f=o";						
						break;
					}
							
				}			
		}).fetch();
		
		delete getter;
	},
		
	init : function(){
			
		if(app.pform){
			this.form = app.pform;
			this.events = app.events;
			this.attachEvents();
		}
		
	},
	
	matchPasswords : function(e){
		var pass2 = this.form.pass2.value;
		var pass = this.form.pass.value;
		var args = {
			targ : this.form.pass,
			id : 'pass_err'
		}

		
		//not matching
		if(pass2 != pass){
			args.message = 'The values for "Password" and "Password Confirm" must match';			
			app.errlog.add(args);					
			return false;
		}
				
		app.errlog.remove('pass_err');
		return true;
	},
		
	noEmpties : function(e){
		var bAllFull = true;
		
		
		$(this.form, '.required').forEach(function(v,k,a){						
			if(v.nodeName != 'LABEL'){ 
								
				if(v.nodeName == 'SPAN'){
					switch(v.className.replace(/required/, '').trim()){
						case 'dategroup':
							var attr = (sb.browser.agent == 'ie')?'htmlFor':'for';
							var label = $(app.page, '@'+attr+'='+v.id)[0];	
							var dobbad = false;
							var tar = null;
															
								for(var i in v.childNodes){
									var item = v.childNodes[i];
									
									if(item.nodeName == 'SELECT'){
										if(item.value.trim() == ''){ 
											tar = item;
											dobbad = true;
										}	
									}
									
								}
								
								if(dobbad){
									bAllFull = false;
									app.errlog.add({
										message : label.innerHTML + ' is not complete.  Please select a DAY, MONTH, & YEAR',
										targ : tar,
										id : v.id + '_err'
									});
								}else{
									app.errlog.remove(v.id + '_err');
								}
						break;
					}					
				}else{
					
					if(v.value.trim() == ''){
						var attr = (sb.browser.agent == 'ie')?'htmlFor':'for';
						var label = $(app.page, '@'+attr+'='+v.id)[0];			
										
						app.errlog.add({
							message : label.innerHTML + ' requires a value',
							targ : v,
							id : v.id + '_err'
						});
						
						bAllFull = false;
					}else{
						app.errlog.remove(v.id + '_err');
					}					
				}
			}	
		});
			
		
		return bAllFull;
	},
	
	tries : 0,
	
	lastStep : function(e){		
				
		var bGood = true;	
				
		if(!this.noEmpties()){if(bGood){bGood = false};}	
		
		if(!this.matchPasswords()){if(bGood){bGood = false};}	
		//if(!this.securePassword()){if(bGood){bGood = false};}
		
		if(bGood){ 
			this.form.submit();
		}
		
	}, 
	
	securePassword : function(){ 
		var pass = this.form.pass.value;
		var args = {
			targ : this.form.pass,
			id : 'pass_err'
		}
		
		//too short
		if(pass.length < 6){
			args.message = 'Please use at least 6 charcaters. The password you choose is insecure.';			
			app.errlog.add(args);					
			return false;
		}		
		
		//no numbers
		if(!pass.match(/[0-9]/)){
			args.message = 'Please use at least one numeric charcter. The password you choose is insecure.';			
			app.errlog.add(args);					
			return false;
		}
		
		//no letters
		if(!pass.match(/[a-zA-Z]/)){
			args.message = 'Please use at least one letter. The password you choose is insecure.';			
			app.errlog.add(args);					
			return false;
		}		
		
		//no special charcters
		if(!pass.match(/\W/)){
			args.message = 'Please use at least special charcter (ex. *, & !, #). The password you choose is insecure.'	
			app.errlog.add(args);					
			return false;
		}
		
		return true;
	}

};