function getAlertSelector(selector){
    return $.data(document.body, 'alertSelector');
}
function setAlertSelector(selector){
    $.data(document.body, 'alertSelector', selector);
}
//setAlertSelector(null);
function alertErrField(selector, field_id, onClose){
    var text='The field "'+$(selector+' label[for='+field_id+']').text()+'" is empty or invalid.';
    var alertSelector=getAlertSelector();
    if (!alertSelector){
        alert(text);
        if (onClose)
            onClose();
    } else $(alertSelector).data('dlgText', text).data('onClose', onClose).dialog('option', {title: 'Error'}).dialog('open');
}
function alertErrField2(selector, field){
    alertErrField(selector, field.attr('id'), function(){ field.focus(); });
}
function isEmail(email){
    return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email);
}
function bindForm(selector, focus_first, onCheck){
    $(selector).submit(function(){
        var isValid=true;
        $(selector+' :input:visible:not(.optional):not([type=radio]):not([type=submit])').each(function(){
            var field=$(this);
            var value=field.is('select') ? field.val() : $.trim(field.val());
            if (!value || (field.hasClass('email') && !isEmail(value))){
                alertErrField2(selector, field);
                isValid=false;
            }
            return isValid;
        });
        if (isValid){
            $(selector+' input.email.optional:visible').each(function(){
                var field=$(this);
                var value=$.trim(field.val());
                if (value && !isEmail(value)){
                    alertErrField2(selector, field);
                    field.focus();
                    isValid=false;
                }
                return isValid;
            });
        }
        if (onCheck)
            isValid = onCheck(isValid);
        return isValid;
    });
    if (focus_first)
        $(selector+' :input:visible:first').focus();
}
