function send_to(object) //posts a mailto link with the innerHtml of the calling object
{
    document.location.href="mailto:"+object.innerHTML;
}

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

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

//clears all form fields delivered by the fieldnames (-array [fieldname])
function clear_form_fields(formname, fieldnames)
{
    fieldnames=fieldnames.split(";");
    for(var i=0;i<fieldnames.length;i++)
    {
        var actField=fieldnames[i];
        if(document.forms[formname].elements[actField])
        {
            if(document.forms[formname].elements[actField].style.border=="2px solid red")
                document.forms[formname].elements[actField].style.border="";
            //if is array of fields
            if(document.forms[formname].elements[actField].length)
            {
                //for each field in array
                for(var j=0;j<document.forms[formname].elements[actField].length;j++)
                {
                    switch(document.forms[formname].elements[actField][j].tagName.toLowerCase())
                    {
                        case "input":
                            document.forms[formname].elements[actField][j].checked=0;
                            break;
                        case "option":
                            document.forms[formname].elements[actField][j].selected=0;
                            break;
                    }
                }
            }
            else
            {
                switch(document.forms[formname].elements[actField].type.toLowerCase())
                {
                    case "checkbox":
                        document.forms[formname].elements[actField].checked="";
                        break;
                    default:
                        document.forms[formname].elements[actField].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
function check_form_fields(formname, fielddefaults, language)
{
    var messages = {
        //name                     eng                                         ger
        "msgEmptyField":           ['This field must not be empty!',           'Dieses Feld darf nicht leer sein!'],
        "msgNumericField":         ['This field must contain a number!',       'Dieses Feld muss eine Zahl enthalten!'],
        "msgNumericFieldNotNull":  ['This field must contain a not-0 number!', 'Dieses Feld muss eine Zahl enthalten und darf nicht 0 sein!'],
    	"msgNoSelection":          ['You must select an entry!',               'Sie müssen einen Eintrag auswählen!'],
    	"msgNoDate":               ['This is not a date! (e.g. 12.05.2000)',   'Das ist kein Datum! (z.B. 12.05.2000)'],
    	"msgNoTime":               ['This is not a teim! (e.g. 13:15)',        'Das ist keine Zeit! (z.B. 13:15)']
    }
    
    var language_index=0;
    if(language=="ger")
        language_index=1;
        
    var fielddefaults=fielddefaults.split(";");
    var message="";
    for(var i=0;i<fielddefaults.length;i+=2)
    {
        if(document.forms[formname].elements[fielddefaults[i]])
        {
            if(fielddefaults[i+1]=="s" && document.forms[formname].elements[fielddefaults[i]].value=="")
                message=messages["msgEmptyField"][language_index];
            if(fielddefaults[i+1]=="n" && (isNaN(document.forms[formname].elements[fielddefaults[i]].value) || document.forms[formname].elements[fielddefaults[i]].value==""))
                message=messages["msgNumericField"][language_index];
            if(fielddefaults[i+1]=="N" && (isNaN(document.forms[formname].elements[fielddefaults[i]].value) || document.forms[formname].elements[fielddefaults[i]].value==0 || document.forms[formname].elements[fielddefaults[i]].value==""))
                message=messages["msgNumericFieldNotNull"][language_index];
            if(fielddefaults[i+1]=="sel" && document.forms[formname].elements[fielddefaults[i]].value=="")
                message=messages["msgNoSelection"][language_index];
            if(fielddefaults[i+1]=="Sel" && (document.forms[formname].elements[fielddefaults[i]].value=="" || document.forms[formname].elements[fielddefaults[i]].value==0))
                message=messages["msgNoSelection"][language_index];
            if(fielddefaults[i+1]=="date" && check_date_value(document.forms[formname].elements[fielddefaults[i]].value,1)==0)
                message=messages["msgNoDate"][language_index];
            if(fielddefaults[i+1]=="Date" && check_date_value(document.forms[formname].elements[fielddefaults[i]].value,0)==0)
                message=messages["msgNoDate"][language_index];
            if(fielddefaults[i+1]=="time" && check_time_value(document.forms[formname].elements[fielddefaults[i]].value,1)==0)
                message=messages["msgNoTime"][language_index];
            if(fielddefaults[i+1]=="Time" && check_time_value(document.forms[formname].elements[fielddefaults[i]].value,0)==0)
                message=messages["msgNoTime"][language_index];
            if(message!="")
            {
                document.forms[formname].elements[fielddefaults[i]].style.border="2px solid red";
                mb_confirm("", message, new Array("OK", "document.forms['"+formname+"'].elements['"+fielddefaults[i]+"'].focus()"));
                return 0;
            }
            else
            {
                if(document.forms[formname].elements[fielddefaults[i]].style.border=="2px solid red")
                    document.forms[formname].elements[fielddefaults[i]].style.border="";
            }
        }
    }
    return 1;
}

//checks if given string is a date
function check_date_value(date_string, not_null)
{
    var check=1;
    var remaining="";
    if(date_string=="" && not_null==1)
        check=0;
    else if(date_string=="" && not_null==0)
        check=1;
    else
    {
        if(date_string.indexOf(".")==-1)
            check=0;
        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=0;
            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=1;
            else
                check=0;
        }
    }
    return check;
}

//checks if given string is a time
function check_time_value(time_string, not_null)
{
    var check=1;
    var remaining="";
    if(time_string=="" && not_null==1)
        check=0;
    else if(time_string=="" && not_null==0)
        check=1;
    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=0;
        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=0;
            else
            {
                if(hours<0 || hours>24 || minutes<0 || minutes>60)
                    check=0;
            }
        }
    }
    return check;
}


//array string functions

function array_string_get_array(elements_string, spacer)
{
    elements=new Array();
    if(elements_string!="")
        elements=elements_string.split(spacer);
    return elements;
}

function array_string_get_element(elements_string, element_id, element_length, spacer)
{
    elements=new Array();
    if(elements_string!="")
        elements=elements_string.split(spacer);

    var element=new Array();
    for(var i=0;i<elements.length;i+=element_length)
    {
        if(elements[i]==element_id)
        {
            for(var j=0;j<element_length;j++)
                element.push(elements[i+j]);
        }
    }
    return element;
}

function array_string_update_element(elements_string, element, spacer)
{
    elements=new Array();
    if(elements_string!="")
        elements=elements_string.split(spacer);

    for(var i=0;i<elements.length;i+=element.length)
    {
        if(elements[i]==element[0])
        {
            for(var j=0;j<element.length;j++)
                elements[i+j]=element[j];
        }
    }
    return elements.join(spacer);
}

function array_string_add_element(elements_string, element, spacer)
{
    elements=new Array();
    if(elements_string!="")
        elements=elements_string.split(spacer);

    for(var i=0;i<element.length;i++)
        elements.push(element[i]);
        
    return elements.join(spacer);
}

function array_string_remove_element(elements_string, element_id, element_length, spacer)
{
    elements=new Array();
    if(elements_string!="")
        elements=elements_string.split(spacer);

    for(var i=0;i<elements.length;i+=element_length)
        if(elements[i]==element_id)
            elements.splice(i, element_length);

    return elements.join(spacer);
}

function array_string_get_max_id(elements_string, element_length, spacer)
{
    elements=new Array();
    if(elements_string!="")
        elements=elements_string.split(spacer);

    var max_id=0;
    for(var i=0;i<elements.length;i+=element_length)
        if(elements[i]>max_id)
            max_id=elements[i];

    return max_id;
}

var loading_initialized=0;
function init_loading()
{
    if(!document.getElementById("loading_screen"))
    {
        var overlay=document.createElement("div");
        overlay.id="loading_screen";
        document.body.appendChild(overlay);
    }
    var page_size=get_page_size();
    document.getElementById("loading_screen").style.height=page_size[1]+"px";
    document.getElementById("loading_screen").style.display="block";
    loading_initialized=1;
    setTimeout("loading_initialized=0", 500);
}

function end_loading()
{
    if(document.getElementById("loading_screen"))
    {
        if(loading_initialized==0)
            document.getElementById("loading_screen").style.display="none";
        else
            setTimeout("document.getElementById('loading_screen').style.display='none'", 200);
    }
}

function get_page_size()
{
	var xScroll, yScroll, windowWidth, windowHeight;
	if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.scrollWidth;
		yScroll = (this.isFrame ? parent.innerHeight : self.innerHeight) + (this.isFrame ? parent.scrollMaxY : self.scrollMaxY);
	} else if (document.body.scrollHeight > document.body.offsetHeight){
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else {
		xScroll = document.getElementsByTagName("html").item(0).offsetWidth;
		yScroll = document.getElementsByTagName("html").item(0).offsetHeight;
		xScroll = (xScroll < document.body.offsetWidth) ? document.body.offsetWidth : xScroll;
		yScroll = (yScroll < document.body.offsetHeight) ? document.body.offsetHeight : yScroll;
	}
	if (self.innerHeight) {
		windowWidth = (this.isFrame) ? parent.innerWidth : self.innerWidth;
		windowHeight = (this.isFrame) ? parent.innerHeight : self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		windowWidth = document.getElementsByTagName("html").item(0).clientWidth;
		windowHeight = document.getElementsByTagName("html").item(0).clientHeight;
		windowWidth = (windowWidth == 0) ? document.body.clientWidth : windowWidth;
		windowHeight = (windowHeight == 0) ? document.body.clientHeight : windowHeight;
	}
	var pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
	var pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;
	return new Array(pageWidth, pageHeight, windowWidth, windowHeight);
}


