//   validate.js
valid={
		
		//global variable for form errors
	errorCount:0,
	regexp:/(_ovr.gif)/,
	t:'',
	
		//initialize function observes all input fields
	init:function (){
		if(!document.getElementById || !document.createTextNode){return;}
		$('input,select').bind('keypress change', function(event){
			str=$(valid.getTarget(event)).attr('id');
			if(valid.t != '') clearTimeout(valid.t);
			event.type == 'keypress' ? valid.t = setTimeout("valid.testContent(str)", 1500) : valid.testContent(str);
		});
	},
	
		//id is pulled from element, sent to validation
	testContent:function(str){
			try{
				valid.callCakeAjax(str);
				}
			catch(err){};
	},

	getTarget:function(e){
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		while(target.nodeType!=1 && target.nodeName.toLowerCase()!='body'){
			target=target.parentNode;
		}//end if
		return target;
	},
	
		//element value is extracted and sent to same validation file server-side uses
	callCakeAjax:function(str){
		var params = {};
		if($('#'+str).attr('type') == 'checkbox' && $('#'+str).attr('checked') == false) {
			params[str] = $('#'+str+'_').val();
		} else {
			params[str] = $('#'+str).val();
		}
		new $.ajax({
			url:'/leads/validate_lead',
			type:'POST',
			data: params,
			success: function(something){
				var response = something;
				if(response.length > 0 ) {
					valid.isValid(str, response);
				}
			},
			error: function() {}
		});
	},
	
		//test response of ajax call
	isValid:function(str, response){
		var resptest = response;
		resptest = resptest.substr(0,1);
		if(resptest != true) {
			valid.addColor(str, response);
		} else {
			valid.removeColor(str);
		}
	},
		
		//adds errors to specific field as well as showing general error messages
	addColor:function(str, response){
		$('#'+str).parent().addClass('error');
		if(valid.errorCount <= 0 && valid.regexp.test($('#submitbutton').attr('src')) == false){
			var src = $('#submitbutton').attr('src').replace('.gif','_ovr.gif');
			$('#submitbutton').attr('src',src);
		}
			$(str).focus(function(event){
				$(str).focus(this.select());
			});
		if($('#'+str).attr('type') != 'checkbox' && $('#'+str).next(0).size()<=0){
			valid.createErrorMsg(str, response);
		} else if($('#'+str).attr('type') == 'checkbox' && $('#'+str).next(0).next(0).size()<=0){
			valid.createErrorMsg(str, response);
		}
		if(valid.errorCount<=1){
			valid.createFormError();}
	},
	
		//removes errors from specific field.  if no other errors present, removes general error messages
	removeColor:function(str){
		if($('#'+str).parent().hasClass('error')){
			$('#'+str).removeClass('form-error').parent().removeClass('error');
			valid.removeErrorMsg(str);
			$(str).unbind('focus');
		}
		if(valid.errorCount<=0){
			var src = $('#submitbutton').attr('src').replace('_ovr.gif','.gif');
			$('#submitbutton').attr('src',src);
			$('#submitbutton').attr('disabled',false);
			valid.removeFormError();
		}
	},//end addColor
	
		//creates error message for top and bottom of form
	createFormError:function(){
		if($('V3Form')){
			if($('#topErr').size()<=0){
				var topErr = $(document.createElement('h2')).attr('id', 'topErr').addClass('flashMessage').append('Please check the highlighted fields');
				$('#V3Form').prev('p').append(topErr);	
				
				if($('h2#botErr').length < 1) {
					var botErr = $(document.createElement('h2')).attr('id', 'botErr').addClass('flashMessage').append('Please check the highlighted fields');
					$('div.submit').prepend(botErr);
				}
			}
		}//end if V3Form
		else if($('V2Form')){
			if($('#topErr').size()<=0){
				var topErr = $(document.createElement('h2')).attr('id', 'topErr').addClass('flashMessage').append('Please check the highlighted fields');
				$('V2Form').prev('p').append(topErr);	
			}
		}//end if V2Form
	},
	
		//removes form error message
	removeFormError:function(){
		//$('#topErr').remove();
		$('#botErr[class!=flashMessage2]').remove();
	},	
	
		//creates field specific error message
	createErrorMsg:function(str, response){ 
		$('img.overlay').hide();
		if($('#'+str).hasClass('clearField') == false) {
			var element = $(document.createElement('div')).addClass('error-message').append(response);
			$('#'+str).parent().append(element);
		}
		valid.errorCount++;
	},
		//removes field specific error message
	removeErrorMsg:function(str){
		if($('#'+str).hasClass('clearField') == false) {
			$('#'+str).parent().children(':last').remove();
		}
			valid.errorCount--;
	},
	
	checkFields:function() {
		var flag = true;
		$('input[type!=hidden], select').each(function(){
			if($(this).val() == '' || $(this).val() == '0') {
				valid.callCakeAjax($(this).attr('id'));
				flag = false;
				return false;
			}
		});
		return flag;
	},
	
	beforeSubmit:function(){
		if (valid.checkFields() != true || valid.errorCount != 0) {
			return false;
		} else if (verify.verified != true) {
			return verify.submit();
		} else if (valid.checkFields() == true && verify.verified == true) {
			return true;
		}
	}
}

verify={
	fieldMap:'#LeadFirstName,#LeadLastName,#LeadAddress1,#LeadCity,#LeadState,#LeadZip,#LeadPhone1',
	highlightMap:{
		"phone":"#LeadPhone1",
		"name":"#LeadFirstName,#LeadLastName",
		"address":"#LeadAddress1",
		"city":"#LeadCity",
		"state":"#LeadState",
		"zip":"#LeadZip"
	},
	attempts:0,
	accept:false,
	submitclick:false,
	verified:false,
	
	init:function() {
		this.fieldData = new Array();
		if($('#V3Form > input[name="data[Lead][hidden3]"]').length == 0) {
			$('#V3Form').append('<input type="hidden" name="data[Lead][hidden3]" value="" />');
		} else if($('#V3Form > input[name="data[Lead][hidden3]"]').val() != "") {
			verify.attempts++;
			$(verify.fieldMap).each(function(){
				if($(this).val() != '' && $(this).val() != 0) {
					verify.fieldData[$(this).attr('id')] = $(this).val();
				}
			});
			if($('#V3Form > input[name="data[Lead][hidden3]"]').val().search('ACCEPT') != -1) {
				verify.accept = true;
			}
		}
	},
	
	check:function() {
		if(valid.errorCount == 0) {
			var complete = true;
			var changed = false;
			$(verify.fieldMap).each(function(){
				if($(this).val() == '' || $(this).val() == 0) {
					complete = false;
				} else {
					if($(this).attr('id') in verify.fieldData && verify.fieldData[$(this).attr('id')] != $(this).val()) {
						changed = true;
					}
					verify.fieldData[$(this).attr('id')] = $(this).val();
				}
			});
			if(complete === true && verify.accept === false && verify.attempts == 0) {
				//first attempt
				verify.run();
				verify.attempts++;
				return false;
			} else if(complete === true && verify.attempts < 5) {
				//re-attempts
				if(changed == true || verify.submitclick == true) {
					verify.run();
					verify.attempts++;
				} else if(verify.accept === false) {
					verify.bounce();
				}
				return false;
			} else if(complete === true && verify.accept === false && verify.attempts == 5) {
				//locked out
				return false;
			} else if(complete === false) {
				return false;
			} else {
				return true;
			}
		}
	},
	
	submit:function() {
		verify.submitclick = true;
		if($('input[name="data[Lead][hidden3]"]').val().search('ACCEPT') != -1) {
			return true;
		}
		return verify.check();
	},
	
	run:function() {
		var request = $(verify.fieldMap).serializeArray();
		$.ajax({
			url:'/leads/verify_lead.json',
			type:'POST',
			dataType:'json',
			data:request,
			success:function(res) {
				verify.process(res);
				if(verify.accept === true) {
					verify.verified = true;
				}
			},
			complete:function() {
				if(verify.submitclick == true && valid.checkFields() == true && verify.verified == true) {
					$('#V3Form').submit();
				}
			}
		});
	},
	
	process:function(res) {
		//add feeback message here.
		if(res.result.rule != undefined && res.result.rule_details.decision != undefined) {
			$('#V3Form > input[name="data[Lead][hidden3]"]').val(res.result.rule_details.decision + '-' + res.result.rule);
		}
		if(res.result.rule_details != undefined) {
			if (res.result.rule_details.decision == "REJECT") {
				if(res.result.rule_details.feedback != undefined) {
					verify.message(res.result.rule_details.feedback);
				}
				if(res.result.rule_details.fields != undefined) {
					verify.highlight(res.result.rule_details.fields);
				}
			} else {
				verify.clear();
				verify.accept = true;
			}
		} else {
			verify.clear();
			verify.accept = true;
		}
		if(res.result.std_address != undefined) {
			$('#LeadAddress1').val(res.result.std_address);
		}
		if(res.result.std_city != undefined) {
			$('#LeadCity').val(res.result.std_city);
		}
		if(res.result.std_state != undefined) {
			$('#LeadState').val(res.result.std_state);
		}
		if(res.result.std_zip != undefined) {
			$('#LeadZip').val(res.result.std_zip);
		}	
		if(res.result.alternate_available == true) {
			
		}
	},
	
	highlight:function(fields) {
		$(verify.fieldMap).removeClass('highlight');
		for(var i=0;i < fields.length;i++) {			
			if(verify.highlightMap[fields[i]] != undefined) {
				$(verify.highlightMap[fields[i]]).addClass('highlight');
			}
		}
	},
	
	message:function(feedback) {
		$('img.overlay').hide();
		// var topErr = $(document.createElement('h2')).attr('id', 'topErr').addClass('flashMessage2').append(feedback);
		// $('#V3Form').prev('p').append(topErr);	

		if($('h2#botErr').length < 1) {
			$('img.overlay').hide();
			var botErr = $(document.createElement('h2')).attr('id', 'botErr').addClass('flashMessage2').append(feedback);
			$('div.submit').prepend(botErr);
		}
		if(valid.regexp.test($('#submitbutton').attr('src')) == false) {
			var src = $('#submitbutton').attr('src').replace('.gif','_ovr.gif');
			$('#submitbutton').attr('src',src);
		}
		
		
	},
	
	clear:function() {
		$(verify.fieldMap).removeClass('highlight');
		$('#topErr, #botErr[class!=flashMessage]').remove();
	},
	
	bounce:function() {
		$('#topErr, #botErr').hide().delay(500).show();
	}
	
}

$(document).ready(function(){
	verify.init();
	valid.init();
	$('#V3Form').submit(function(){
		$('img.overlay').show();
		return valid.beforeSubmit();
	});
});

