var age_verificator = new function() {

    var KEEP_AGE_DAYS   = 31;
    var AGE_LIMIT_YEARS = 21;
    var DAY_IN_MILLISECONDS = 1000 * 60 * 60 * 24;
    var REDIRECT_TIMEOUT_SECONDS = 5;
    var REDIRECT_URL_APPROVED = location.href; //"/index.html";
    var REDIRECT_URL_DECLINED = "http://www.centurycouncil.org/landing";

    var ageDay   = 0;
    var ageMonth = 0;
    var ageYear  = 0;
    var ageCountry = '';

    function initVerificator() {
        if (!readCookie('ageok')) {
            $.get('/js/age_verification/age_verification.html', function(data) {
                $("body").append($(data));

                /*
                $.browser.chrome = ($.browser.safari && /chrome/.test(navigator.userAgent.toLowerCase()) );
                // ||
                if (($.browser.msie && parseInt($.browser.version, 10) < 8) || $.browser.chrome ) {
                    $("#age_verification_form select").css({
                        color: '#000'
                    });
                }
            */

                ageDay   = parseInt(initAgePart('ageDay',   'age_day'), 10);
                ageMonth = parseInt(initAgePart('ageMonth', 'age_month'), 10);
                ageYear  = parseInt(initAgePart('ageYear',  'age_year'), 10);
                ageCountry  = initAgePart('ageCountry', 'age_country');

//                $("#remember_age").attr("checked", "checked");

                $("#age_verification_form").submit(function() {
                    return verifyAge();
                })
            });
        }
    }


    function initAgePart(cookieName, elementID) {
        var result = readCookie(cookieName);
        if (!result) {
            result = 0;
        } else {
            $("#" + elementID).val(result);
        }
        return result;
    }

    function markError(selector) {
        $(selector).fadeTo('fast', 0.5).fadeTo('fast', 1);
    }

    function verifyAge() {
        var result = true;

        ageDay   = parseInt($("#age_day").val(), 10);
        ageMonth = parseInt($("#age_month").val(), 10);
        ageYear  = parseInt($("#age_year").val(), 10);

        if (!ageDay) {
            result = false;
            markError("#age_day");
        }
        if (!ageMonth) {
            result = false;
            markError("#age_month");
        }
        if (!ageYear) {
            result = false;
            markError("#age_year");
        }
        if (!result) {
            $("#age_verification_message").text("Please enter your date of birth to view our website");
        }

        if (!result) {
            return result;
        }

        var dobDate = new Date(ageYear, ageMonth - 1, ageDay, 1, 1, 1);
        var now   = new Date();
        var today = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 1, 1, 1);
        var diffAge = (today.getTime() - dobDate.getTime())/DAY_IN_MILLISECONDS/365.25;

        if ($("#remember_age").is(":checked")) {
            createCookie('ageDay',   ageDay,   KEEP_AGE_DAYS);
            createCookie('ageMonth', ageMonth, KEEP_AGE_DAYS);
            createCookie('ageYear',  ageYear,  KEEP_AGE_DAYS);
            createCookie('ageCountry', ageCountry,  KEEP_AGE_DAYS);
        } else {
            eraseCookie('ageDay');
            eraseCookie('ageMonth');
            eraseCookie('ageYear');
            eraseCookie('ageCountry');
        }

        if (diffAge < AGE_LIMIT_YEARS) {
            $("#age_verification_message").text("We require all visitors to our website be of legal drinking age");
            markError("#age_year,#age_day,#age_month");

            $.timer(REDIRECT_TIMEOUT_SECONDS * 1000, function (timer) {
                timer.stop();
                window.location.href = REDIRECT_URL_DECLINED;
            });
        } else {
            createCookie('ageok', '1');
            window.location.href = REDIRECT_URL_APPROVED;
        }

        return false;
    }


    function createCookie(name,value,days) {
        var expires = "";
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        document.cookie = name+"="+value+expires+"; path=/";
    }

    function readCookie(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;
    }

    function eraseCookie(name) {
        createCookie(name, "", -1);
    }

    //timer support
    jQuery.timer = function (interval, callback) {
        var interval = interval || 100;
        if (!callback) return false;

        _timer = function (interval, callback) {
            this.stop = function () {
                clearInterval(self.id);
            };

            this.internalCallback = function () {
                callback(self);
            };

            this.reset = function (val) {
                if (self.id) clearInterval(self.id);
                var val = val || 100;
                this.id = setInterval(this.internalCallback, val);
            };

            this.interval = interval;
            this.id = setInterval(this.internalCallback, this.interval);

            var self = this;
        };

        return new _timer(interval, callback);
    };

    $(function() {
        initVerificator();
    });
}

