Valraiso.namespace('cfi');
cfi =
{
    resetFieldStyle : function(fieldid)
    {
    	var field = $('#' + fieldid);

        if (!field.hasClass('input-border'))
        {
            field.addClass('input-border');
        }
        if (field.hasClass('ui-state-error'))
        {
            field.removeClass('ui-state-error');
        }
    },

    checkField : function(fieldid)
    {
    	return this.checkFieldDefault(fieldid, 'check-error');
    },

    checkFieldPopup : function(fieldid)
    {
    	return this.checkFieldDefault(fieldid, 'check-error-popup');
    },

    checkFieldDefault : function(fieldid, errorField)
    {
    	var field = $('#' + fieldid);
    	var value = field.val();

        if (this.trim(value) == '')
        {
            field.removeClass('input-border');
            field.addClass('ui-state-error');
            $('#' + errorField).html(mandatoryError);
            field.attr('value', '');

            return false;
        }
        else
        {
            field.removeClass('ui-state-error');
            field.addClass('input-border');
        }

        return true;
    },

    checkFieldCheckedList : function(fieldid, labelid, errorField)
    {
    	var value   = $('#' + fieldid).val();
        var isError = (this.trim(value) == '');

        if (isError)
        {
            $('#' + errorField).html(mandatoryError);
        }

        this.setLabelInError(labelid, isError);

        return !isError;
    },

    checkListField : function(fieldid)
    {
    	var field = $('#' + fieldid);
    	var value = field.val();

        if (value == null || this.trim(value) == '' || this.trim(value) == '-1')
        {
            field.removeClass('input-border');
            field.addClass('ui-state-error');
            $('#check-error').html(mandatoryError);
            field.attr('value', '');

            return false;
        }
        else
        {
            field.removeClass('ui-state-error');
            field.addClass('input-border');
        }

        return true;
    },

    checkListFieldPopup : function(fieldid)
    {
    	var field = $('#' + fieldid);
    	var value = field.val();

        if (this.trim(value) == '' || this.trim(value) == '-1')
        {
            field.removeClass('input-border');
            field.addClass('ui-state-error');
            $('#check-error-popup').html(mandatoryError);
            field.attr('value', '');

            return false;
        }
        else
        {
            field.removeClass('ui-state-error');
            field.addClass('input-border');
        }

        return true;
    },

    checkIntField : function(fieldid)
    {
    	var field    = $('#' + fieldid);
    	var value    = field.val();
        var intValue = parseInt(value, 10);

        if (isNaN(intValue) || value != intValue)
        {
            field.removeClass('input-border');
            field.addClass('ui-state-error');

            if ($('#check-error').html().length == 0) {
                $('#check-error').html(valueIsIntegerError);
            }
            field.attr('value', '');

            return false;
        }
        else
        {
            field.removeClass('ui-state-error');
            field.addClass('input-border');
        }

        return true;
    },

    checkDate : function (fieldid)
    {
        if (this.checkField (fieldid))
        {
            var field = $('#' + fieldid);

            if (Valraiso.util.checkDate (field.val()))
            {
                return true;
            }
            else
            {
                field.removeClass ('input-border');
                field.addClass    ('ui-state-error');
                $('#check-error').html (dateFormatError);
            }
        }

        return false;
    },

    checkDatePopup : function (fieldid)
    {
        if (this.checkFieldPopup (fieldid))
        {
            var field = $('#' + fieldid);

            if (Valraiso.util.checkDate (field.val()))
            {
                return true;
            }
            else
            {
                field.removeClass ('input-border');
                field.addClass    ('ui-state-error');
                $('#check-error-popup').html (dateFormatError);
            }
        }

        return false;
    },

    checkEmail : function (fieldid)
    {
        return (this.checkField(fieldid) && this.checkEmailFormat (fieldid));
    },

    checkEmailFormat : function (fieldid)
    {
        var field = $('#' + fieldid);

        if (Valraiso.util.checkEmail (field.val()))
        {
            return true;
        }
        else
        {
            field.removeClass ('input-border');
            field.addClass    ('ui-state-error');
            $('#check-error').html (emailFormatError);
        }

        return false;
    },

    setLabelInError : function(labelid, isError)
    {
        var field = $('#' + labelid);

        if (isError)
        {
            field.addClass('error');
        }
        else
        {
            field.removeClass('error');
        }

        return false;
    },

    trim : function (chaine)
    {
        return chaine.replace(/^\s+/g,'').replace(/\s+$/g,'');
    },

    remove : function()
    {
        $('#confirm-delete').dialog("open");

        return false;
    },

    submitUrlAndMetas : function()
    {
        $('#url-and-metas-form').submit();

        return false;
    },

    datePicker : function(identifier, isCssClass, endIdentifier)
    {
        if (endIdentifier)
        {
            $((isCssClass ? '.' : '#') + identifier).datepicker
            ({
                dateFormat:'dd/mm/yy',
                onSelect : function()
                {
                    cfi.setDates(identifier, endIdentifier);
                }
            });
        }
        else
        {
            $((isCssClass ? '.' : '#') + identifier).datepicker
            ({
                dateFormat:'dd/mm/yy'
            });
        }
    },

    setDates : function(startCalendarid, stopCalendarid)
    {
        var startDate = $('#' + startCalendarid);
        var stopDate  = $('#' + stopCalendarid);

        if (startDate.attr ('value') != '')
        {
            stopDate.datepicker ('option',
                {
                    minDate:cfi.parseDate(startDate.attr ('value'))
                });
        }

        return false;
    },

    resetDate : function(calendarid, date)
    {
        $('#' + calendarid).datepicker ('option', {minDate:date});
    },

    setDate : function(calendarid, date)
    {
        $('#' + calendarid).datepicker ('option', {defaultDate:date});
    },

    parseDate : function(date)
    {
        var split = date.split ('/');

        return new Date(split[2], parseInt(split[1], 10)-1, parseInt(split[0], 10));
    },

    showWait : function()
    {
        $('#wait-popup').removeClass('hidden');
    },

    hideWait : function()
    {
        if (!$('#wait-popup').hasClass('hidden'))
        {
            $('#wait-popup').addClass('hidden');
        }
    },

    hideElement : function(elementid)
    {
        var element = $('#' + elementid);

        if (!element.hasClass('hidden'))
        {
            element.addClass('hidden');
        }
    },

    showElement : function(elementid)
    {
        var element = $('#' + elementid);

        if (element.hasClass('hidden'))
        {
            element.removeClass('hidden');
        }
    },

    numeric : function(identifier, isCssClass)
    {
        $((isCssClass ? '.' : '#') + identifier).keypress
        (
            function(event)
            {
                var identifier = $(this).attr('id');
                return cfi.numericKeyPress(event, identifier);
            }
        )
    },

    numericKeyPress : function(event, identifier)
    {
        var field       = $('#' + identifier);
        var value       = field.val();
        var input       = document.getElementById(identifier);
        var cursorStart = input.selectionStart;
        var cursorEnd   = input.selectionEnd;
        var length      = value.length;
        var startValue  = value.substr(0, cursorStart);
        var stopValue   = value.substr(cursorEnd, length);

        if (event.keyCode == '46' || event.keyCode == '44')
        {
            var dotIndex   = value.indexOf('.', 0);
            var commaIndex = value.indexOf(',', 0);

            if ((dotIndex + commaIndex) < 0)
            {
                value = startValue + '.' + stopValue;

                if (value == '.')
                {
                    value = '0.';
                }

                field.val(value);
            }

            return false;
        }
        else if (event.keyCode == '45')
        {
            var minusIndex = value.indexOf('-', 0);

            if (minusIndex < 0)
            {
                value = startValue + stopValue;
                field.val('-' + value);
            }

            return false;
        }

        return !(event.keyCode < '48' || event.keyCode > '57');
    },

    jGrowl : function(message, headerMessage)
    {
        $.jGrowl(message, {header: headerMessage});
    },

    showPanel : function(elementid)
    {
        $("#" + elementid).show('blind', {}, 500);

        return false;
    },

    hidePanel : function(elementid)
    {
        $("#" + elementid).hide('blind', {}, 500);

        return false;
    },

    startsWith : function(value, pattern)
    {
        return value.indexOf(pattern) === 0;
    },

    endsWith : function(value, pattern)
    {
        var d = value.length - pattern.length;

        return d >= 0 && value.lastIndexOf(pattern) === d;
    }
}
