if (!window['mart'])
    window['mart'] = {};

if (!window['mart']['informer']) {
    window['mart']['informer'] = {};

    mart.informer.Informer = function (l) {
        this.link = l;
        this.imgUrl = l.href + 'informer/informer-forecast.png';
        this.cursorUrl = l.href + 'informer/informer-cursor.png';

        var style = this.link.style;
        style.display = 'block';
        style.overflow = 'hidden';
        style.position = 'relative';
        style.width = '100px';
        style.height = '100px';
        style.outline = 'none';
        style.cursor = 'pointer';

        this.link.title = '';

        this.u = mart.informer.util;
        this.init();
        this.u.addEvents (this.link, this.moveEvents, this);
    };

    mart.informer.Informer.prototype = {
        init : function() {
            var body = this.u.createElement (
                'div', {
                    display: 'block',
                    overflow: 'hidden',
                    position: 'relative',
                    width: '100px',
                    height: '100px'
                }, this.link
            );

            var weather = this.u.createElement (
                'div', {
                    display: 'block',
                    overflow: 'hidden',
                    position: 'absolute',
                    top: '36px',
                    left: '0',
                    width: '100px',
                    height: '64px'
                }, body
            );
            weather.id = this.link.id + '-weather';
            var cursor = this.u.createElement (
                'div', {
                    display: 'block',
                    overflow: 'hidden',
                    position: 'absolute',
                    top: '24px',
                    left: '16px',
                    width: '17px',
                    height: '17px'
                }, body
            );
            cursor.id = this.link.id + '-cursor';

            if (this.u.ie && this.u.ieVersion() <= 6) {
                body.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.imgUrl + "', sizingMethod='crop')";
                weather.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.imgUrl + "', sizingMethod='crop')";
                cursor.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.cursorUrl + "', sizingMethod='crop')";
                weather.style.height = '228px';
            }
            else {
                body.style.backgroundImage = 'url(' + this.imgUrl + ')';
                weather.style.backgroundImage = 'url(' + this.imgUrl + ')';
                cursor.style.backgroundImage = 'url(' + this.cursorUrl + ')';
            }
            this.link.innerHTML  += '';
            this.weather = this.u.$(weather.id);
            this.cursor = this.u.$(cursor.id);
            this.setWeather (0);
        },

        setWeather: function (day) {
            var style = this.weather.style;
            var shift = day * 64;
            if (this.u.ie && this.u.ieVersion() <= 6) {
                style.top = - shift + 'px';
                style.clip = 'rect (' + (36 + shift) + 'px 100px ' + (100 + shift) + 'px 0)';
            }
            else {
                style.backgroundPosition = '0 ' + (192 - shift) + 'px';
            }
        },

        moveEvents: {
            mousemove : function (e) {
                var x = e.layerX;
                if (e.target == this.cursor) {
                    var l = this.cursor.style.left;
                    x += parseInt(l.substr(0, l.length - 2));
                }

                if (x < 12) {
                    x = 12;
                }
                if (x > 87) {
                    x = 87;
                }
                var day = Math.floor((x - 12) / 25);
                this.cursor.style.left = (x - 8) + "px";
                this.setWeather(day > 2 ? 2 : day);
            }
        }
    };

    mart.informer.util = {
        ie : (document.all && !window.opera),
        opera : window.opera,
        safari : /Safari/.test(navigator.userAgent),
        geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),

        ieVersion : function () {
            var arr = navigator.appVersion.split('MSIE');
            return arr[1] ? parseFloat (arr[1]) : null;
        },

        $ : function (id) {
            return document.getElementById(id);
        },

        createElement : function (tag, styles, parent) {
            try {
                var el = document.createElement (tag);
                this.setStyles (el, { padding: 0, border: 'none', margin: 0 });
                if (styles)
                    this.setStyles (el, styles);
                if (parent)
                    parent.appendChild (el);
                return el;
            } finally {
                el = null;
            }
        },

        setStyles : function (el, styles) {
            for (var x in styles)
                el.style[x] = styles[x];
        },

        addEvents : function (el, events, self) {
            var handler = this.getEventHandler (self, events);
            for (var event in events) {
                var func = events[event];
                if (typeof(func) != 'function')
                    continue;

                this.addEventListener (el, event, handler);
            }
            return handler;
        },

        removeEvents : function (el, events, handler) {
            for (var event in events) {
                var func = events[event];
                if (typeof(func) != 'function')
                    continue;

                this.removeEventListener (el, event, handler);
            }
        },

        getEventHandler : function (self, events) {
            return function (e) {
                e = e || window.event;
                if (e.target == null)
                    e.target = e.srcElement;
                if (e.layerX == null)
                    e.layerX = e.offsetX;

                var handler = events[e.type];
                if (handler) {
                    if (!handler.call (self, e)) {
                        if (e.preventDefault)
                            e.preventDefault();
                        else
                            e.returnValue = false;
                        return false;
                    }
                }
                return true;
            };
        },

        addEventListener : function (el, event, func) {
            try {
                el.addEventListener (event, func, false);
            } catch (e) {
                try {
                    el.detachEvent ('on'+ event, func);
                    el.attachEvent ('on'+ event, func);
                } catch (e) {
                    el['on'+ event] = func;
                }
            }
        },

        removeEventListener : function (el, event, func) {
            try {
                el.removeEventListener (event, func, false);
            } catch (e) {
                try {
                    el.detachEvent ('on'+ event, func);
                } catch (e) {
                    el['on'+ event] = null;
                }
            }
        }
    };
}

try {
    var infId = window.nuiInformerId ? window.nuiInformerId : 'nui-informer';
    var l = mart.informer.util.$ (infId);
    if (l)
        new mart.informer.Informer (l);
} catch (e) {}
