$(document).ready(function(){
    $("form").submit(function(event){
	if (typeof($.fck)!=='undefined')
	    $.fck.update();
	return formValidate(this);
    });
    bindValidate();
});

function formValidate(sform){
    var result=true;
    $(sform).find("input:not(:button, :submit, :reset):visible").each(function(event){
	clearError(this);
        if($(this).hasClass('required')){
	    chk=validateRequire(this);
            result=result && chk;
        }
        if($(this).hasClass('numeric')){
	    chk=validateNumeric(this);
            result=result && chk;
        }
        if($(this).hasClass('cfm_password')){
	    chk=validatePassword(this);
            result=result && chk;
        }
        if($(this).hasClass('email')){
	    chk=validateEmail(this);
            result=result && chk;
        }
    });
    $(sform).find("textarea").each(function(event){
	clearError(this);
        if($(this).hasClass('required')){
	    chk=validateRequire(this);
            result=result && chk;
        }
    });
    $(sform).find("input[type=radio].checked, input[type=checkbox].checked").each(function(event){
	clearError(this);
        result=result && $(this).is(":checked");
    });
    $(sform).find("select.required").each(function(event){
	clearError(this);
	result=result && validateSelect(this);
    });
    return result;
}
function bindValidate(){
    // highlight on/off the current selected fields
    $("form div input, form div select, form div textarea").focus(function(){
	$(this).parent('div').addClass('focus');
    }).blur(function(){
	$(this).parent('div').removeClass('focus');
    });
    
    $('form input:not(:button, :submit, :reset)"').blur(function(event){
	clearError(this);
	//$(this).siblings('p.error').remove();
        if($(this).hasClass('required'))
            validateRequire(this);
        if($(this).hasClass('numeric'))
            validateNumeric(this);
        if($(this).hasClass('cfm_password'))
            validatePassword(this);
        if($(this).hasClass('email'))
            validateEmail(this);
    });
    $('form textarea').blur(function(event){
	clearError(this);
        if($(this).hasClass('required'))
            validateRequire(this);
    });
    $('form select.required').blur(function(event){
	clearError(this);
        validateSelect(this);
    });
}

function bindInputValidation(form){
    $(form).find("input:not(:button, :submit, :reset)").blur(function(event){
	clearError(this);
        if($(this).hasClass('unique_loginname'))
            validateLoginname(this);
        if($(this).hasClass('unique_email'))
            validateUniqueEmail(this);
        if($(this).hasClass('required'))
            validateRequire(this);
	if($(this).hasClass('numeric'))
            validateNumeric(this);
        if($(this).hasClass('password'))
            validatePassword(this);
        if($(this).hasClass('email'))
            validateEmail(this);
        if($(this).hasClass('unique_username'))
            validateUsername(this);
    });
    $(form).find('textarea').blur(function(event){
	clearError(this);
        if($(this).hasClass('required'))
            validateRequire(this, event);
    });
}

function validateNumeric(input){
    var str=$(input).val();
    if(!/\D/.test(str))
	return true;
    else
	if(/^\d+\.\d+$/.test(str))
	    return true;
    else return toggleError(input);
}

function validateRequire(input){
    if($(input).val()=='')
        return toggleError(input);
    else
        return true;
}

function validateEmail(input, event){
    if(!checkEmail($(input).val()))
        return toggleError(input, "This email is not valid");
    else
         return true;
}

function validatePassword(input, event){
    var password=$(input).parent().prev().children("input.password");
    if($(input).val()!=$(password).val()){
        clearError($(input));
	$(password).val('');
	$(input).val('');
        return toggleError(input, "The password does not match");
    }
    else{
        return true;
    }
}

function checkEmail(str){
    if(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	;	
    }
    else return true;
}

function validateSelect(select){
    var selected=$(select).find('option:selected').length;
    if(selected>0)
	return clearError(select);
    else
	return toggleError(select);
}

function toggleError(input, alt){
    var error;
    if(!alt)
	alt=$(input).attr('title');
    error=$('<p class="error"></p>').html(alt);
    $(input).removeClass('valid').addClass('invalid').parent().append(error);
    return false;
}

function clearError(input){
    $(input).siblings('.error').remove();
    if($(input).hasClass('invalid'))
        $(input).removeClass('invalid');
    $(input).addClass('valid').removeClass('invalid');
    return;
}

function toggleShow(input,input2){
    if ($("#"+input).attr('value') == "yes"){
        $("#"+input2).fadeOut();    
    }else{
        $("#"+input2).fadeIn();    
    }
}
