function FormValidate ( NameOfForm, params ){
    if( document.forms[NameOfForm] == null ){
        throw "error";
    }
    this.oForm = document.forms[NameOfForm];
    this.elementsRequireMessages = {};
    this.elementsNotValidMessages = {};
    this.hidden = {}

    this.divHTML = '<div class="input_alert display_none"><a href="#" onclick="return close_tip(this);">x</a><p></p></div>';

    if ( params ) {
        if( params['reqMess']){
            for( i in params['reqMess'] ){
                this.addReqMessage(i, params['reqMess'][i]);
            }
        }
    }

}

FormValidate.prototype.addReqMessage = function ( elementName, message ){
    this.elementsRequireMessages[elementName] = message;
}

FormValidate.prototype.addNotValidMessage = function ( elementName, message ){
    this.elementsNotValidMessages[elementName] = message;
}
FormValidate.prototype.addHidden = function (hiddenName, realName ){
    this.hidden[hiddenName] = realName;
}

FormValidate.prototype.require = function (element, isvalid ){
    if( isvalid == '1' ){
        if( this.hidden[element]){
            element = this.hidden[element];
        }
        if( this.elementsRequireMessages[element] != null ){
            elem = this.oForm.elements[element];
            if( elem != null ){
                elem.focus();
                $(elem).addClass('in_require');
                $(elem).after( this.divHTML );
                layer = $(elem).parent().find('.input_alert');
                $(elem).parent().find('.input_alert p').html( this.elementsRequireMessages[element] );
                layer.show();
                pos = $(elem).position();
                layer.css('top', pos.top + 20 + 'px');
                layer.css('left', pos.left + 'px');
            } else {
                alert( this.elementsRequireMessages[element] );
            }
        }
    }
}

FormValidate.prototype.valid = function (element, isvalid ){
    if( isvalid == '1' ){
        if( this.hidden[element]){
            element = this.hidden[element];
        }
        if( this.elementsNotValidMessages[element] != null ){
            elem = this.oForm.elements[element];
            if( elem != null ){
                elem.focus();
                $(elem).addClass('in_notvalid');
                $(elem).after( this.divHTML );
                layer = $(elem).parent().find('.input_alert');
                $(elem).parent().find('.input_alert p').html( this.elementsNotValidMessages[element] );
                layer.show();
                pos = $(elem).position();
                layer.css('top', pos.top + 20 + 'px');
                layer.css('left', pos.left + 'px');
            } else {
                alert( this.elementsNotValidMessages[element] );
            }
        }
    }
}

FormValidate.prototype.setValue = function( element, value ){
    elem = this.oForm.elements[element];
    if( elem ){
        if( elem.tagName == "SELECT" ){
            for( i in elem.options ){
                if( elem.options[i].value == value){
                    elem.options[i].selected = 'selected';
                }
            }
        } else {
            if( elem.length == undefined){
                switch (elem.type.toLowerCase()) {
                    case 'checkbox':
                        elem.checked = ( elem.value == value )
                        break;
                    default:
                        elem.value = value;
                        break;
                }
            } else {
                var radioLength = elem.length;
                for(var i = 0; i < radioLength; i++) {
                    elem[i].checked = false;
                    if(elem[i].value == value) {
                        elem[i].checked = true;
                    }
                }
            }
        }
    }
}

function close_tip( obj ){
    $(obj).parent('div').remove();
    return false;
}