$(document).ready(function(){
    $("form").submit(function(event){
	
	return formValidate($(this));
    });
    bindValidate();
});
function formValidate(sform){
    var result=true;
    $(sform).find("input").each(function(event){
        if($(this).hasClass('required'))
            result=result && validateRequire($(this), event);
        if($(this).hasClass('numeric'))
            result=result && validateNumeric($(this), event);
        if($(this).hasClass('cfm_password'))
            result=result && validatePassword($(this), event);
        if($(this).hasClass('email'))
            result=result && validateEmail($(this), event);
        if($(this).hasClass('fax'))
            result=result && validateFax($(this), event);
        if($(this).hasClass('telephone'))
            result=result && validateTelephone($(this), event);
    });
    $(sform).find("textarea").each(function(event){
        if($(this).hasClass('required'))
            result=result && validateRequire($(this), event);
    });
    $(sform).find("checkbox.checked").each(function(event){
        result=result && $(this).is(":checked");
    });
    $(sform).find("select.required").each(function(event){
	result=result && validateSelect($(this), event);
    });
    return result;
}
function bindValidate(){
    $('input').blur(function(event){
	$(this).siblings('em').remove();
        if($(this).hasClass('unique_loginname'))
            validateLoginname($(this), event);
        if($(this).hasClass('unique_email'))
            validateUniqueEmail($(this), event);
        if($(this).hasClass('required'))
            validateRequire($(this), event);
        if($(this).hasClass('numeric'))
            validateNumeric($(this), event);
        if($(this).hasClass('cfm_password'))
            validatePassword($(this), event);
        if($(this).hasClass('email'))
            validateEmail($(this), event);
        if($(this).hasClass('fax'))
            validateFax($(this), event);
        if($(this).hasClass('telephone'))
            validateTelephone($(this), event);
        if($(this).hasClass('unique_username'))
            validateUsername($(this), event);
    });
    $('textarea').blur(function(event){
	$(this).siblings('em').remove();
        if($(this).hasClass('required'))
            validateRequire($(this), event);
    });
    $('select.required').blur(function(event){
	$(this).siblings('em').remove();
        validateSelect($(this), event);
    });
}
function bindInputValidation(form){
    $(form).find("input").blur(function(event){
        if($(this).hasClass('unique_loginname'))
            validateLoginname($(this), event);
        if($(this).hasClass('unique_email'))
            validateUniqueEmail($(this), event);
        if($(this).hasClass('required'))
            validateRequire($(this), event);
	if($(this).hasClass('numeric'))
            validateNumeric($(this), event);
        if($(this).hasClass('password'))
            validatePassword($(this), event);
        if($(this).hasClass('email'))
            validateEmail($(this), event);
        if($(this).hasClass('fax'))
            validateFax($(this), event);
        if($(this).hasClass('telephone'))
            validateTelephone($(this), event);
        if($(this).hasClass('unique_username'))
            validateUsername($(this), event);
    });
    $(form).find('textarea').blur(function(event){
        if($(this).hasClass('required'))
            validateRequire($(this), event);
    });
    $(form).find('select')
}
function validateNumeric(input, event){
    var str=$(input).val();
    if(!/\D/.test(str))
	 return clearError($(input))
    else
	if(/^\d+\.\d+$/.test(str))
	    return clearError($(input))//IF A DECIMAL NUMBER HAVING AN INTEGER ON EITHER SIDE OF THE DOT(.)
    else return toggleError($(input));
}
function validateRequire(input, event){
    $(input).siblings('em').remove();
    if($(input).val()=='')
        return toggleError($(input));
    else
        return clearError($(input));
}
function validateEmail(input, event){
    $(input).siblings('em').remove();
    if(!checkEmail($(input).val()))
        return toggleError($(input), "This email is not valid");
    else
        return clearError($(input))
}
function validateFax(input, event){
    $(input).siblings('em').remove();
    if($(input).val() != ""){
		if (!checkFax($(input).val()))
			return toggleError($(input), "This fax is not valid");
		else
			return clearError($(input))
	}
}
function validateTelephone(input, event){
    $(input).siblings('em').remove();
    if(!checkTelephone($(input).val()))
        return toggleError($(input), "This telephone is not valid");
    else
        return clearError($(input))
}
function validatePassword(input, event){
    var password=$(input).parent().prev().children("input.password");
    if($(input).val()!=$(password).val()){
        clearError($(input));
        return toggleError($(input), "The password does not match");
    }
    else{
        return clearError($(input));
    }
}
function checkEmail(str){
    var at="@";
    var dot=".";
    var lat=str.indexOf(at);
    var lstr=str.length;
    var ldot=str.indexOf(dot);
    if (str.indexOf(at)==-1)
       return false;
    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
       return false;
    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
        return false;
    if (str.indexOf(at,(lat+1))!=-1)
        return false;
    if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
        return false;
    if (str.indexOf(dot,(lat+2))==-1)
        return false;
    if (str.indexOf(" ")!=-1)
        return false;
    return true	;			
}
function checkTelephone(str){
	rePhoneNumber = new RegExp(/^\d{2}\-\d{7}$/);
	rePhoneNumber2 = new RegExp(/^\d{3}\-\d{6}$/);
	rePhoneNumber3 = new RegExp(/^\d{3}\-\d{8}$/);
	
     if (!rePhoneNumber.test(str) && !rePhoneNumber2.test(str) && !rePhoneNumber3.test(str)) {
          return false;
     }

	return true;
}
function checkFax(str){
	rePhoneNumber = new RegExp(/^\d{2}\-\d{7}$/);
	rePhoneNumber2 = new RegExp(/^\d{3}\-\d{6}$/);
	
     if (!rePhoneNumber.test(str) && !rePhoneNumber2.test(str) ) {
          return false;
     }

	return true;
}
function validateSelect(select){
    var selected=$(select).find('option:selected').length;
    if(selected>0){
        if ($(select).val() == "") return toggleError($(select));
	return clearError($(select));
    }else{
	return toggleError($(select));
    }
}
function toggleError(input, alt){
    if(!alt)
        $(input).after('<em></em>').siblings('em').html($(input).attr('title'));
    else
        $(input).after('<em></em>').siblings('em').html(alt);
    if($(input).hasClass('valid'))
        $(input).removeClass('valid');
    $(input).addClass('invalid')
    $(input).removeClass('valid');
    return false;
}
function clearError(input){
    $(input).siblings('em').remove();
    if($(input).hasClass('invalid'))
        $(input).removeClass('invalid');
    $(input).addClass('valid')
    $(input).removeClass('invalid');
    return true;
}
