
var addedDelegates = false;	

function findByName(name){
	
	return JQ('form').find('[name='+name+']')
	
}

function isBlank(a){
	return !JQ.trim(a.val());
}
function isFilled(a){
	return !!JQ.trim(a.val());
}
function isunChecked(a){
	return !(a.checked);
}


function showTooltipError(targetEle, errorMsg) {
    var fade = JQ('#validationTooltip');  
	fade.find('p').text(errorMsg);
    if (fade.is(':visible')) {
      setupTooltip(targetEle,fade,{offsetX:116})
      //fade.stop().fadeTo(500, 1);
    } else {
      setupTooltip(targetEle,fade,{offsetX:116});
      fade.fadeIn();
 	  fade.find('p').fadeIn();     
    }
}


function hideTooltipError(targetEle, errorMsg) {
    var fade = JQ('#validationTooltip');  
    if (fade.is(':visible')) {
      fade.hide();
    }
}

//redefined for registration page
function findField(name){
	var obj = '';
	JQ(allFields).each(function(){
		if(this.id == name || this.group == name || 'inputfield-'+this.id == name ){
			obj = this;
			//return this;
		}
	});
	return obj;
}


//set up inline validation	
var validationHTML = '<div id="validationTooltip" style="display:none;">'
				+ '<div class="validationTooltip_top">'
				+ '<div class="validationTooltip_bottom">'
        		+ '<div id="validationTooltipContent" class="weak validationTooltip_content">'
            	+ '<p id="error"></p>'
        		+ '</div>'
				+ '</div>'
				+ '</div>'
				+ '</div>';



function clearError(field,id){
			if(field.group != undefined){
				JQ('#label-'+field.group).html(field.label);
				JQ('#label-'+field.group).removeClass('error');
				JQ('.'+field.group).removeClass("error");
			}
			else{
				JQ('#label-'+field.id).html(field.label);
				JQ('#label-'+field.id).removeClass('error');
			}
			JQ('#inputfield-'+field.id).removeClass("error");
			JQ(id).removeClass("error");
}



	function delegate(event) {
			var $target = JQ(event.target);
			var $name = $target.attr('name')
			var $id = $target.attr('id')
			var valid = true;
			var confirm = false;
			//console.log('validate this %o:', $name);
			SHOWLABELERROR_FALSE = false;
			SHOWLABELERROR_TRUE = true;

			var $field = findField($name);
			if ($field == ''){
				$field = findField($id);
			}
			console.log('this is the fieldObj: %o',$field)
			// check for blanks
//-->			if((JQ('#inputfield-'+this.id).val() == '' || JQ('#inputfield-'+this.id).val() == '-1') && this.required != "no"){
			
			if((isBlank($target)||$target.val() == '-1') && $field.required != "no"  && $field.validationType!="date"){
			//console.log('checking empty: %o', $field)
			showTooltipError($target,'Please fill this out.')
			showError($field, SHOWLABELERROR_FALSE, false, true);
			return;
			
			}
			if($field.validationType && $field.required != "no"){
				//console.log('method validation for: %o',$field);
				valid = validateField($field);	
			}

			//password
			if (JQ($target).is('input[@rel*=password]')){
				pwField =  findField('password')
				confirm =(JQ($target).val() == JQ('input[@rel*=password]').not(JQ($target)).val());
			if (confirm){
				JQ('#label-'+pwField.id).html(pwField.label);
				JQ('input[@rel*=password]').removeClass('error');
				hideTooltipError($target,'');
				JQ('label[@for=inputfield-password]').removeClass('error');
				return;
			}else{
				
				showError(pwField, SHOWLABELERROR_TRUE, false);
				showTooltipError($target,pwField.labelError);
				JQ('label[@for=inputfield-password]').addClass('error');
				JQ('input[@rel*=password]').addClass('error');
				return;
			}
			}			
			
			if (valid){
				hideTooltipError($target,'');
				clearError($field,$id);
			} else {
				if($field.group == undefined){
					showTooltipError($target,$field.labelError)
				}
				console.log('show error for: %o',$field);
				showError($field, showLabelError, false);
			}
	}
	
function inLineValidationSetup(submitMethod){
	
	JQ.aop.after( {target: window, method:submitMethod}, 
		function(result) {
			if (!result&&!addedDelegates){
				// remove password checker
				console.log('fired');
				JQ("#inputfield-password").unbind('focus').unbind('blur');
				JQ('form')			
					.delegate("focusin focusout keyup change", ":text, :password, select", delegate)
					.delegate("click", ":radio, :checkbox", delegate)	
					.find('select').change(delegate);								
				addedDelegates = true;
			} 
		}
	);
	JQ.aop.before( {target: window, method: submitMethod},
  	function() {
        JQ('#validationTooltip').fadeOut();
  	}
	);

}