﻿var __vDefaultClass = 'stage';   
var __vOverClass = 'stage hover';

window.onload = function()
{
    if (!document.getElementById('StageContainer'))
        return;

    var vContainer = document.getElementById('StageContainer');

    if (vContainer.tagName.toLowerCase() == 'div')
    {
        for(var i = 0; i < vContainer.childNodes.length; i++)
        {
            var child = vContainer.childNodes[i];

            if (child.className == __vDefaultClass)
            {
                vContainer.childNodes[i].onmouseover = function(){__vOver(this);}
                vContainer.childNodes[i].onmouseout = function(){__vOut(this);}
            }
        }
    }
    else if (vContainer.tagName.toLowerCase() == 'table')
    {
        
        for(var i = 0; i < vContainer.tBodies[0].rows.length; i++)
        {
            var child = vContainer.tBodies[0].rows[i];

            if (child.className == __vDefaultClass)
            {
                vContainer.tBodies[0].rows[i].onmouseover = function(){__vOver(this);}
                vContainer.tBodies[0].rows[i].onmouseout = function(){__vOut(this);}
            }
        }        
    }
    
    
}

function __vOver(e)
{
    e.className = __vOverClass;       
}

function __vOut(e)
{
    e.className = __vDefaultClass;   
}

var RequiredFieldHelper = 
{
    init: function(messageContainerID, messagePrefix, defaultBorderColor)
    {
        if (!this.InitComplete)
        {
            this.MessageContainerID = messageContainerID;
            this.Fields = [];
            this.MessagePrefix = messagePrefix;
            this.Message = "";
            //this.DefaultBorderStyle = borderStyle;
            //this.MessageBorderStyle = "1px solid red";
            this.DefaultBorderColor = defaultBorderColor;
            this.MessageBorderColor = "red";
        }
    },
        
    addField: function (elementID, elementText, validationType) {
        var field = [];
        field['id'] = elementID;
        field['text'] = elementText;
        field['type'] = validationType
        this.Fields.push(field);
    },
    
    submitForm: function()
    {
        if (RequiredFieldHelper.checkFields())
        {
            // submit form
            return true;
        }
        else
        {
            // message
            if (document.getElementById(this.MessageContainerID))
            {
                document.getElementById(this.MessageContainerID).style.display='block';
                document.getElementById(this.MessageContainerID).innerHTML = this.MessagePrefix + this.Message;
            }
            else
            {
                alert(this.MessagePrefix.replace(/<.*?>/g,'') + this.Message.replace(/<.*?>/g,''));
            }
            
            return false;
        }
    },
    
    checkFields: function()
    {
        var isOk = true;
    
        this.Message = "";
    
        for (var i = 0; i < this.Fields.length; i++)
        {
            var field = this.Fields[i];
        
            if (document.getElementById(field['id']))
            {
                var element = document.getElementById(field['id']);
                var value = element.value.replace(/ /g,''); // remove all spaces and check if there remains something, a space alone is not ok either

                if(value == "")
                {
                    isOk = false;
   
                    element.style.border = "2px solid " + this.MessageBorderColor;
                    
                    // append message
                    this.appendMessage(field['text'],i);
                }
                else if (field['type'] != undefined) {
                    switch (field['type']) {
                        case 'email':
                            if (!RequiredFieldHelper.validate_email(value)) {
                                isOk = false;
                                this.appendMessage(field['text'], i);
                            }
                            else {
                                element.style.border = "1px solid " + this.DefaultBorderColor;
                            }
                            break;
                        case 'password':
                            if (!RequiredFieldHelper.validate_password(value)) {
                                isOk = false;
                                this.appendMessage(field['text'], i);
                            }
                            else {
                                element.style.border = "1px solid " + this.DefaultBorderColor;
                            }
                            break;
                        case 'password_retype':
                            if (!RequiredFieldHelper.validate_password_retype(value)) {
                                isOk = false;
                                this.appendMessage(field['text'], i);
                            }
                            else {
                                element.style.border = "1px solid " + this.DefaultBorderColor;
                            }
                            break;
                    }

                }
                else
                {
                    element.style.border = "1px solid " + this.DefaultBorderColor;
                    
                }
                   
            }
            // field not found, developer mistake?
            else
            {
                // I, developer did something stupid
            }

        }
    
        return isOk;
    },

    appendMessage: function (message, currentItemIndex) {
        this.Message += message;

        if (currentItemIndex < this.Fields.length - 1)
            this.Message += ', ';
    },

    validate_email: function (value) {
        value = value.toLowerCase();
        return (value.search(/^([a-z]+)([a-z0-9\-\_\.]{1,100})([a-z0-9]+)\@([a-z0-9]+)([a-z0-9\-\.]*)([a-z0-9]+)\.([a-z]{2,6})$/) != -1);
    },

    validate_password: function (value) {
        if (value.length <= 4) 
            return false;

        this.value_validate_password = value;
        return true;
    },

    validate_password_retype: function (value) {
        if (value.length <= 4 || this.value_validate_password != value) 
            return false;

        return true;
    }
}
