$(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").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);
    });
    $(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('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('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 validateUsername(input, event){
    var str=$(input).val();
    if((str!='') && (str.length>3)){
        $.post('/twintales/index.php/member/check_username/', {username:str},
        function(data){
            if(data==false)
                toggleError($(input), 'this username is already in used');
            else
                clearError($(input));
        },
        "html"
        )
    }
}
function validateLoginname(input, event){
    var str=$(input).val();
    if((str!='') && (str.length>3)){
        $.post('/twintales/index.php/member/check_loginname/', {loginname:str},
        function(data){
            if(data==false)
                toggleError($(input), 'this loginname is already in used');
            else
                clearError($(input));
        },
        "html"
        )
    }
}
function validateUniqueEmail(input, event){
    var str=$(input).val();
    if((str!='') && (str.length>3) && (checkEmail(str))){
        $.post('/twintales/index.php/member/check_email/', {email:str},
        function(data){
            if(data==false)
                toggleError($(input), 'this email is already in used');
            else
                clearError($(input));
        },
        "html"
        )
    }
}*/
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 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 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;
}
function toggleShow(input,input2){
    if ($("#"+input).attr('value') == "yes"){
        $("#"+input2).fadeOut();    
    }else{
        $("#"+input2).fadeIn();    
    }
}
