
function frimb_form()
{
    this.form_name="form_name";
    this.language="en";
}

//fills in all values to the form field specified by the
//fieldvalues (-array [fieldname, fieldvalue])
frimb_form.prototype.fill_fields = function (field_values)   //fills in edit form when receiving data from ajax
{
    for(var i=0;i<field_values.length;i+=2)
    {
        var actField=field_values[i];
        var actValue=field_values[i+1];

        //if field exists
        if(document.forms[this.form_name].elements[actField])
        {
            if(document.forms[this.form_name].elements[actField].style && document.forms[this.form_name].elements[actField].style.border=="2px solid red")
                document.forms[this.form_name].elements[actField].style.border="";

            //if is array of fields
            if(document.forms[this.form_name].elements[actField].length)
            {
                //for each field in array
                for(var j=0;j<document.forms[this.form_name].elements[actField].length;j++)
                {
                    if(document.forms[this.form_name].elements[actField][j].tagName.toLowerCase()=="input" && (document.forms[this.form_name].elements[actField][j].type.toLowerCase()=="field" || document.forms[this.form_name].elements[actField][j].type.toLowerCase()=="hidden"))
                        document.forms[this.form_name].elements[actField][j].value=actValue;
                    if(document.forms[this.form_name].elements[actField][j].value==actValue)
                    {
                        switch(document.forms[this.form_name].elements[actField][j].tagName.toLowerCase())
                        {
                            case "input":
                                document.forms[this.form_name].elements[actField][j].checked=1;
                                break;
                            case "option":
                                document.forms[this.form_name].elements[actField][j].selected=1;
                                break;
                        }
                    }
                }
            }
            else
            {
                 if(document.forms[this.form_name].elements[actField].tagName.toLowerCase()=="input")
                {
                    switch(document.forms[this.form_name].elements[actField].type.toLowerCase())
                    {
                        case "checkbox":
                            if(actValue==document.forms[this.form_name].elements[actField].value)
                                document.forms[this.form_name].elements[actField].checked=1;
                            break;
                        default:
                            document.forms[this.form_name].elements[actField].value=actValue;
                    }
                }
                else
                    document.forms[this.form_name].elements[actField].value=actValue;
            }
        }
    }
}

//clears all form fields delivered by the fieldnames (-array [fieldname])
frimb_form.prototype.clear_fields = function (field_names)
{
    for(var i=0;i<field_names.length;i++)
    {
        var act_field=field_names[i];
        if(document.forms[this.form_name].elements[act_field])
        {
            if(document.forms[this.form_name].elements[act_field].style)
            {
                if(document.forms[this.form_name].elements[act_field].style.border=="2px solid red")
                    document.forms[this.form_name].elements[act_field].style.border="";
            }
            //if is array of fields
            if(document.forms[this.form_name].elements[act_field].length)
            {
                //for each field in array
                for(var j=0;j<document.forms[this.form_name].elements[act_field].length;j++)
                {
                    switch(document.forms[this.form_name].elements[act_field][j].tagName.toLowerCase())
                    {
                        case "input":
                            document.forms[this.form_name].elements[act_field][j].checked=0;
                            break;
                        case "option":
                            document.forms[this.form_name].elements[act_field][j].selected=0;
                            break;
                    }
                }
            }
            else
            {
                switch(document.forms[this.form_name].elements[act_field].type.toLowerCase())
                {
                    case "checkbox":
                        document.forms[this.form_name].elements[act_field].checked="";
                        break;
                    default:
                        document.forms[this.form_name].elements[act_field].value="";
                        break;
                }
            }
        }
    }
}


//  checks the fielddefaults (-array [fieldname, s=string/n=numeric/N=numeric not 0/sel=selection/Sel=selection id not 0/date not NULL/Date/time not Null/Time])
//  returns 1 if everything matches
//  throws a mb_confirm alert and returns 0 else
frimb_form.prototype.check_fields = function (field_defaults)
{
    var messages = {
        //name                  en                                          de
        "emptyField":           ['This field must not be empty!',           'Dieses Feld darf nicht leer sein!'],
        "numericField":         ['This field must contain a number!',       'Dieses Feld muss eine Zahl enthalten!'],
        "numericFieldNotNull":  ['This field must contain a not-0 number!', 'Dieses Feld muss eine Zahl enthalten und darf nicht 0 sein!'],
    	"noSelection":          ['You must select an entry!',               'Sie müssen einen Eintrag auswählen!'],
    	"noDate":               ['This is not a date! (e.g. 12.05.2000)',   'Das ist kein Datum! (z.B. 12.05.2000)'],
    	"noTime":               ['This is not a teim! (e.g. 13:15)',        'Das ist keine Zeit! (z.B. 13:15)']
    }

    var language_index=0;
    if(this.language=="de")
        language_index=1;

    var message="";
    for(var i=0;i<field_defaults.length;i+=2)
    {
        if(document.forms[this.form_name].elements[field_defaults[i]])
        {
            if(field_defaults[i+1]=="s" && document.forms[this.form_name].elements[field_defaults[i]].value=="")
                message=messages["emptyField"][language_index];
            if(field_defaults[i+1]=="n" && (isNaN(document.forms[this.form_name].elements[field_defaults[i]].value) || document.forms[this.form_name].elements[field_defaults[i]].value==""))
                message=messages["numericField"][language_index];
            if(field_defaults[i+1]=="N" && (isNaN(document.forms[this.form_name].elements[field_defaults[i]].value) || document.forms[this.form_name].elements[field_defaults[i]].value==0 || document.forms[this.form_name].elements[field_defaults[i]].value==""))
                message=messages["numericFieldNotNull"][language_index];
            if(field_defaults[i+1]=="sel" && document.forms[this.form_name].elements[field_defaults[i]].value=="")
                message=messages["noSelection"][language_index];
            if(field_defaults[i+1]=="Sel" && (document.forms[this.form_name].elements[field_defaults[i]].value=="" || document.forms[this.form_name].elements[field_defaults[i]].value==0))
                message=messages["noSelection"][language_index];
            if(field_defaults[i+1]=="date" && !this.is_date_value(document.forms[this.form_name].elements[field_defaults[i]].value,1))
                message=messages["noDate"][language_index];
            if(field_defaults[i+1]=="Date" && !this.is_date_value(document.forms[this.form_name].elements[field_defaults[i]].value,0))
                message=messages["noDate"][language_index];
            if(field_defaults[i+1]=="time" && !this.is_time_value(document.forms[this.form_name].elements[field_defaults[i]].value,1))
                message=messages["noTime"][language_index];
            if(field_defaults[i+1]=="Time" && !this.is_time_value(document.forms[this.form_name].elements[field_defaults[i]].value,0))
                message=messages["noTime"][language_index];
            if(message!="")
            {
                document.forms[this.form_name].elements[field_defaults[i]].style.border="2px solid red";
                document.forms[this.form_name].elements[field_defaults[i]].focus();
                alert("frimb::\n"+message);
                //mb_confirm("", message, new Array("OK", "document.forms['"+this.form_name+"'].elements['"+field_defaults[i]+"'].focus()"));
                return false;
            }
            else
            {
                if(document.forms[this.form_name].elements[field_defaults[i]].style.border=="2px solid red")
                    document.forms[this.form_name].elements[field_defaults[i]].style.border="";
            }
        }
    }
    return true;
}

//checks if given string is a date
frimb_form.prototype.is_date_value = function(date_string, not_null)
{
    var check=true;
    var remaining="";
    if(date_string=="" && not_null==1)
        check=false;
    else if(date_string=="" && not_null==0)
        check=true;
    else
    {
        if(date_string.indexOf(".")==-1)
            check=false;
        else
        {
            var day=date_string.slice(0, date_string.indexOf("."));
            if(day.indexOf("0")==0 && day.length==2)
                day=day.slice(1);
            remaining=date_string.slice(date_string.indexOf(".")+1);
            if(remaining.indexOf(".")==-1)
                check=false;
            else
            {
                var month=remaining.slice(0, remaining.indexOf("."));
                if(month.indexOf("0")==0 && month.length==2)
                    month=month.slice(1);
                var year=remaining.slice(remaining.indexOf(".")+1);
            }
            var check_date=new Date(year, parseInt(month)-1, parseInt(day));

            if(parseInt(day)==check_date.getDate() && parseInt(month)-1==check_date.getMonth() && parseInt(year)==check_date.getFullYear())
                check=true;
            else
                check=false;
        }
    }
    return check;
}

//checks if given string is a time
frimb_form.prototype.is_time_value = function(time_string, not_null)
{
    var check=true;
    var remaining="";
    if(time_string=="" && not_null==1)
        check=false;
    else if(time_string=="" && not_null==0)
        check=true;
    else
    {
        while(time_string.indexOf(".")!=-1)
            time_string=time_string.slice(0,time_string.indexOf("."))+":"+time_string.slice(time_string.indexOf(".")+1);
        if(time_string.indexOf(":")==-1)
            check=false;
        else
        {
            var hours=time_string.slice(0, time_string.indexOf(":"));
            var minutes=time_string.slice(time_string.indexOf(":")+1);
            if(hours!=parseInt(hours) || minutes!=parseInt(minutes))
                check=false;
            else
            {
                if(hours<0 || hours>24 || minutes<0 || minutes>60)
                    check=false;
            }
        }
    }
    return check;
}

