function isNumeric(value) {
  return typeof value === 'number' && isFinite(value);
}

var Form = (function(){
        function checkObligatory(field)
        {
            return {"success" : (field.val()!="")};
        }
        function getLabelFieldForField(field)
        {
            var fieldname = field.attr("name");
            var name = field.parent('.row').find('label[for="' + fieldname + '"]');
            if(name)
                return name;
            
            return false;
        }
        function getLabelForField(field)
        {
            var fieldname = field.attr("name");
            var name = field.parent('.row').find('label[for="' + fieldname + '"]').text();
            var outfield = $.trim(name || fieldname);
            if(outfield.charAt(outfield.length-1) == ":")
                outfield = outfield.substr(0, outfield.length-1);
                
            return outfield;
        }
        function checkMatch(field, form)
        {                        
            var matchField = form.find('[name="' + field.attr("match") + '"]');
            return {"success" : (field.val() === matchField.val()),
                    "field" : matchField};
        }
        
        function checkEmail(field)
        {
        //TODO    
            return true;
        }
        
        function checkNumeric(field)
        {
            return isNumeric(field.val() * 1);
        }
        
        return {
            validate : function(form)
            {
                var result = {"success" : true, "message" : ""}
                
                form.find('.valueField').each(function(){
                    var obligatory = checkObligatory($(this));
                    if($(this).hasClass('obligatory') && !obligatory.success){
                        result.success = false;
                        result.message += "Das Feld '" + getLabelForField($(this)) + "' wurde nicht ausgefüllt.'\n";
                    }
                    
                    var match = checkMatch($(this), form);
                    if($(this).hasClass('val_match') && !match.success)
                    {
                        result.success = false;
                        result.message += "Die Werte in den Feldern '" + getLabelForField(match.field) + "' und '" + getLabelForField($(this)) + "' stimmen nicht überein.'\n";
                    }
                    
                    if($(this).hasClass('val_email') && !checkEmail($(this)))
                    {
                        result.success = false;
                        result.message += "Das Feld '" + getLabelForField($(this)) + "' erwartet eine gültige Emailadresse.'\n";
                    }
                    
                    if($(this).hasClass('val_numeric') && !checkNumeric($(this)))
                    {
                        result.success = false;
                        result.message += "Das Feld '" + getLabelForField($(this)) + "' erwartet eine numerische Eingabe.'\n";
                    }
                });
               
                
                if(!result.success)
                {
                    alert(result.message)
                    return false;
                }
                
                return true;
            },
            collect : function(form)
            {
                var data = "";
                form.find('.valueField').each(function(){
                    data += "&" + $(this).attr("name") + "=" + $(this).val();    
                })
                return data;
            },
            markupObligatory : function(form)
            {
                form.find('.obligatory').each(function(){
                    var label = getLabelFieldForField($(this));
                    if(label && label.text().charAt(label.text().length-1) != "*")
                        label.text(label.text() + "*")
                })
            }
        }
    })()
var BildSchild = (function(){
        var $_userbox = "";
        //constructor
        
        function setContent(container, content)
        {
            if(container=="")
            {
                throw ("Container not found")
                return;
            }
            
            container.html(content);                        
        }
        
        function setContentAjax(container, page, data, callback)
        {
            $.ajax({
                    url : page,
                    type : "POST",
                    dataType : "html",
                    data : data,
                    success : function(msg)
                    {
                        setContent(container, msg);
                        if(callback)
                          callback(container);
                    }
                }) 
        }
        return {
            setLoginbox : function(box)
            {
                $_userbox = box;
            },
            lostPassword : function(event)
            {
                event.preventDefault();
                event.stopPropagation();
                
                setContentAjax($_userbox, "lostPw.php", "");
            },
            requestNewPassword : function(event)
            {
                event.preventDefault();
                event.stopPropagation();
                
                var email = $_userbox.find("#mail").val();
                if(email == "")
                {
                    alert("Bitte geben Sie eine Emailadresse angeben");
                    return;
                }
                
                $_userbox.find("#mail").add("button").attr("disabled", "disabled");
                var data = "email=" + email;
                
                setContentAjax($_userbox, "newPw.php", data);
            },
            register : function(event)
            {
                event.preventDefault();
                event.stopPropagation();
                
                setContentAjax($_userbox, "registerForm.php", {}, function(f)
                                {
                                  BildSchild.zebra(f);
                                  Form.markupObligatory(f);
                                });
            },
            sendRegistration : function(event)
            {
                event.preventDefault();
                event.stopPropagation();
                
                var form = $_userbox.find(".registrationForm");
                if(!Form.validate(form))
                    return;
                
                var data = Form.collect(form);
                setContentAjax($_userbox, "register.php", data);
            },
            loginUser : function(event){
                var form = $(this);
                if(!Form.validate(form))
                    return false;
                
                return true;                            
            },
            zebra : function(container)
            {
              $(container).find('.row:odd').addClass('odd');          
            },
            toggleContrast : function()
            {
              $('body').toggleClass('bright');
            },
            toggleFontsize : function()
            {
              $('body').toggleClass('large');
            }
        }
    })();
