(function(window, undefined) {

    var document  = window.document;
    var navigator = window.navigator;
    var location  = window.location;

    var _private = {

        checkBoletinEmail : function(o, n) {
            var check;

            $.ajax({
                async: false,
                type: 'POST',
                url: ebs.getFullURL() + 'contains/',
                data: 'boletin_contains=' + o.val() + '&boletin_ajax=true',
                success: function(data) {
                    check = data;
                }
            });

            if (check != 'false') {
                o.addClass('ui-state-error');
                o.focus();
                _private.updateTips(n);
                return false;
            }
            else {
                return true;
            }
        },

        checkDiff : function(o, compare, n) {
            if (!(o.val() != compare)) {
                o.addClass('ui-state-error');
                o.focus();
                _private.updateTips(n);
                return false;
            }
            else {
                return true;
            }
        },

        checkEqual : function(o, compare, n) {
            if (o.val() != compare) {
                o.addClass('ui-state-error');
                o.focus();
                _private.updateTips(n);
                return false;
            }
            else {
                return true;
            }
        },

        checkLength : function(o, n, min, max) {
            if (o.val().length > max || o.val().length < min) {
                o.addClass('ui-state-error');
                o.focus();
                _private.updateTips(n);
                return false;
            }
            else {
                return true;
            }
        },

        checkRegexp : function(o, regexp, n) {
            if (!(regexp.test(o.val()))) {
                o.addClass('ui-state-error');
                o.focus();
                _private.updateTips(n);
                return false;
            }
            else {
                return true;
            }
        },

        updateTips : function(t) {
            $('#form_info_icon').attr('class', 'ui-icon ui-icon-alert');
            $('#form_info_msg').text(t);
        }

    }

    var ebs = (function() {

        var api = {

            cookieCreate : function(name, value, days, path) {
                var _name = name;
                var _value = '=' + value;
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                var _expires = '; expires=' + date.toGMTString();
                var _path = '; path=' + path;

                document.cookie = _name + _value + _expires + _path;
            },

            cookieErase : function(name) {
                cookieCreate(name, '', -1, '/');
            },

            cookieRead : function(name) {
                var nameEQ = name + '=';
                var ca = document.cookie.split(';');

                for (var i=0; i < ca.length; i++) {
                    var c = ca[i];
                    while (c.charAt(0) == ' ') {
                        c = c.substring(1,c.length);
                    }
                    if (c.indexOf(nameEQ) == 0) {
                        return c.substring(nameEQ.length,c.length);
                    }
                }

                return null;
            },

            /// TODO Comprobar correcto funcionamiento getLocationPathname y getFullURL

            getLocationPathname : function() {
                var pathname = location.pathname;

                if (pathname.lastIndexOf('/') != (pathname.length - 1)) {
                    pathname += '/';
                }

                return pathname;
            },

            getFullURL : function() {
                return 'http://' + location.hostname + api.getLocationPathname();
            },

            fauxColumns: function () {
                var contenidoPagHeight = $('#web-contenido-paginacion').height();

                $('#web-lateral-paginacion').css('height', contenidoPagHeight);

                var contenidoHeight = $('#web-contenido-body').height();
                var lateralHeight = $('#web-lateral-body').height();

                if (contenidoHeight < lateralHeight) {
                    $('#web-contenido-body').css('height', lateralHeight);
                }
                else {
                    $('#web-lateral-body').css('height', contenidoHeight);
                }
            },

            scrollTo : function (id) {
                $.scrollTo(id, 800);
            },

            validarBoletin : function(form) {
                var bValid = true;
                var email = $('#email'), abot = $('#abot');
                var allFields = $([]).add(email).add(abot);
                allFields.removeClass('ui-state-error');

                bValid = bValid && _private.checkLength(email, 'La dirección de correo electrónica no es válida.', 6, 320);
                // From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
                bValid = bValid && _private.checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, 'La dirección de correo electrónica no es válida.');
                bValid = bValid && _private.checkBoletinEmail(email, 'La dirección de correo electrónico ya está suscrita al boletín.');
                bValid = bValid && _private.checkEqual(abot, 'roja', 'La respuesta AntiSpam es: roja.');

                if (!bValid) {
                    api.scrollTo('#web-contenido');
                }

                return bValid;
            },

            validarContacto : function(form) {
                var bValid = true;
                var nombre = $('#nombre'), email = $('#email'), asunto = $('#asunto'), mensaje = $('#mensaje'), abot = $('#abot');
                var allFields = $([]).add(nombre).add(email).add(asunto).add(mensaje).add(abot);
                allFields.removeClass('ui-state-error');

                bValid = bValid && _private.checkLength(nombre, 'El nombre es demasiado largo.', 0, 96);
                bValid = bValid && _private.checkLength(nombre, 'El nombre debe tener al menos 3 caracteres.', 3, 96);
                bValid = bValid && _private.checkLength(email, 'La dirección de correo electrónica no es válida.', 6, 320);
                // From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
                bValid = bValid && _private.checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, 'La dirección de correo electrónica no es válida.');
                bValid = bValid && _private.checkLength(asunto, 'Rellene el campo asunto con un resumen breve del contenido del mensaje.', 5, 64);
                bValid = bValid && _private.checkDiff(asunto, nombre.val(), 'El asunto no puede ser su nombre.');
                bValid = bValid && _private.checkLength(mensaje, 'El mensaje es demasiado largo.', 0, 2048);
                bValid = bValid && _private.checkLength(mensaje, 'El mensaje es demasiado corto.', 15, 2048);
                bValid = bValid && _private.checkEqual(abot, 'roja', 'La respuesta AntiSpam es: roja.');

                if (!bValid) {
                    api.scrollTo('#web-contenido');
                }

                return bValid;
            },

            validarQuieresJugar : function(form) {
                var bValid = true;
                var nombre = $('#nombre'), fecha = $('#fecha_nacimiento'), email = $('#email'), telefono = $('#telefono'), observaciones = $('#observaciones'), abot = $('#abot');
                var allFields = $([]).add(nombre).add(fecha).add(email).add(telefono).add(observaciones).add(abot);
                allFields.removeClass('ui-state-error');

                bValid = bValid && _private.checkLength(nombre, 'El nombre es demasiado largo.', 0, 96);
                bValid = bValid && _private.checkLength(nombre, 'El nombre debe tener al menos 3 caracteres.', 3, 96);
                bValid = bValid && _private.checkRegexp(fecha, /^([\d]{2})\/([\d]{2})\/([\d]{4})$/, 'La fecha de nacimiento debe seguir el formato de este ejemplo: 01/05/2001 (dd/mm/aaaa).');
                bValid = bValid && _private.checkLength(email, 'La dirección de correo electrónica no es válida.', 6, 320);
                // From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
                bValid = bValid && _private.checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, 'La dirección de correo electrónica no es válida.');
                bValid = bValid && _private.checkRegexp(telefono, /^([\d]{9})$/, 'El número de teléfono debe seguir el formato de este ejemplo: 968511150.');
                bValid = bValid && _private.checkLength(observaciones, 'Demasiado contenido en observaciones, abrevie.', 0, 2048);
                bValid = bValid && _private.checkLength(observaciones, 'Extiéndase un poco más con las observaciones.', 15, 2048);
                bValid = bValid && _private.checkEqual(abot, 'roja', 'La respuesta AntiSpam es: roja.');

                if (!bValid) {
                    api.scrollTo('#web-contenido');
                }

                return bValid;
            }

        };

        return api;

    })();

    window.ebs = ebs;

})(window);

$(document).ready(function() {

    $('#noscript').css({
        display: 'none'
    });

    ebs.fauxColumns();

    if (navigator.appName == 'Microsoft Internet Explorer') {
        var appVersion = navigator.appVersion;
        if (appVersion.indexOf('MSIE 7.0') != -1
            || appVersion.indexOf('MSIE 6.0') != -1) {
            $('#oldbrowser').css({
                display: 'block'
            });
        }
    }

    ebs.cookieCreate('ebs_0ba5e79377323f3027bda6a4390c5540', 'true', 1, '/');

    if (ebs.cookieRead('ebs_0ba5e79377323f3027bda6a4390c5540')
        && ebs.cookieRead('ebs_06ed4983d343bd5613acd2d60fafecc4') == null) {

        ebs.cookieCreate('ebs_06ed4983d343bd5613acd2d60fafecc4', 'true', 1, '/');
        ebs.cookieCreate('ebs_d26bd8ab423e1425f716baf5ea51cde5', 'true', 1, '/');
        window.location = window.location.href;
    }

    $('.send').button();
    //$('#compartir').css('display', 'none').delay(1000).fadeIn(3000);

});

