﻿
var SubmitForm = function(formid) {
    var formelement = document.getElementById(formid);
    if (!formelement || formelement._submitted) return;

    if (ValidateForm(formid)) {
        formelement._submitted = true;
        formelement.submit();
    }
}

var ValidateForm = function(formid) {
    var result = true;
    var i;
    
    if (!Validators[formid]) return true;
    else {
        for (i = 0; i < Validators[formid].length; ++i) {
            result = Validators[formid][i].Validate() && result;
        }
    }

    return result;
}

var ParentForm = function(node){
    var pnode = node.parentNode;
    
    while(pnode!=document && pnode.tagName!='FORM'){
        pnode = pnode.parentNode;
    }
    
    return pnode;
}

String.prototype.Trim = function(){
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

var HideTextHandler = function(element,defaulttext){
    return function(){
        if (element.value==defaulttext) element.value = '';
    }
}

var ShowTextHandler = function(element,defaulttext){
    return function(){
        if (!element.value.Trim()) element.value = defaulttext;
    }
}

var HideDefaultText = function(eid,defaulttext){

    var element = document.getElementById(eid);

    if (element){
        if (!element.value && defaulttext != '') element.value = defaulttext;

        if (element.addEventListener) {
            element.addEventListener('focus',HideTextHandler(element,defaulttext),false);
            element.addEventListener('blur',ShowTextHandler(element,defaulttext),false);
        }
        else if (element.attachEvent) {
            element.attachEvent('onfocus',HideTextHandler(element,defaulttext));
            element.attachEvent('onblur',ShowTextHandler(element,defaulttext));
        }
    }
}

function submitenter(myfield, e, action){
    var keycode;
    if (window.event) keycode = window.event.keyCode;
    else if (e) keycode = e.which;
    else return true;

    if (keycode == 13) {
        var form = ParentForm(myfield);
        if (action) form.action = action;
        SubmitForm(ParentForm(myfield).id);

        return false;
    }
    else return true;
}

var ErrorElement = function(id, display){
    this.element = document.getElementById(id);
    this.display = 'inline';

    if (this.element.style.display) this.display = this.element.style.display;

    if (!this.displaystyle) this.displaystyle = 'none';

    this.Error = function(emsg) {

        if (!emsg) {
            this.Hide();
            return;
        }

        this.element.innerHTML = emsg;

        if (this.element.style.visibility != 'visible') this.element.style.visibility = 'visible';
        if (this.element.style.display == 'none') this.element.style.display = this.display;
    }

    this.Hide = function() {
        this.element.value = '';
        this.element.style.visibility = 'hidden';
        this.element.style.display = 'none';
    }
}

var ErrorTest = function(){
    this.Error = function(emsg) {
        alert('Error: ' + emsg);
    }

    this.Hide = function() {
    }
}

var ElementVisible = function(element){
    return element.style.visibility != 'hidden' && element.style.display != 'none';
}

var ValidatorF = function(obj){
    this.obj = obj;

    this.Create = function(id, data, errorhandler){
        var element = document.getElementById(id);
        var parentform = ParentForm(element);
        var item = obj[data];

        var Data = function() {
            if (item.requiremodification && (item.defaultdisplay == element.value)) return '';
            else return element.value;
        }

        if (!Validators[parentform.id]) Validators[parentform.id] = [];
        if (item.value != "undefined") element.value = item.value;
        if (ElementVisible(element) && item.defaultdisplay) HideDefaultText(element.id, item.defaultdisplay);
        if (item.constraints && item.constraints.length > 0) Validators[parentform.id].push(new Validator(Data, item.constraints, errorhandler));
        if (item.error) errorhandler.Error(item.error);
    }
};