Overview

URLhttp://www.mp3crank.com/t-i/no-mercy.htm
IP176.56.231.77
ASNAS198203 RouteLabel V.O.F.
Location Netherlands
Report completed2012-11-03 16:26:03 CET
StatusLoading report..
urlQuery Alerts No alerts detected


Settings

UserAgentMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Referer
Adobe Reader8.0
Java1.6.0_26


Intrusion Detection Systems

Suricata /w Emerging Threats Pro
Timestamp Source IP Destination IP Severity Alert
2012-11-03 16:25:36 195.159.219.8 urlQuery Client3FILEMAGIC Macromedia Flash data (compressed),
Snort /w Sourcefire VRT
Timestamp Source IP Destination IP Severity Alert
2012-11-03 16:25:32 174.132.176.106 urlQuery Client1BROWSER-IE Microsoft Internet Explorer getElementById object corruption


Recent reports on same IP/ASN/Domain

Last 6 reports on IP: 176.56.231.77

Date Alerts / IDS URL IP
2013-02-14 05:13:370 / 7http://www.mp3crank.com/download/album/66513176.56.231.77
2013-01-02 04:24:440 / 8http://www.mp3crank.com/download/album/37574176.56.231.77
2012-12-29 20:07:000 / 2http://www.mp3crank.com/we-are-trees/boyfriend-ep.htm176.56.231.77
2012-11-27 07:04:240 / 7http://www.mp3crank.com/download/album/47424176.56.231.77
2012-11-21 22:39:460 / 5http://www.mp3crank.com/download/album/36425176.56.231.77
2012-11-03 16:56:510 / 2http://www.mp3crank.com/t-i/no-mercy.htm176.56.231.77

Last 6 reports on ASN: AS198203 RouteLabel V.O.F.

Date Alerts / IDS URL IP
2013-03-04 19:10:070 / 1http://www.keepvid.com/kv.30.jar176.56.229.150
2013-02-27 00:30:380 / 0http://176.56.230.13176.56.230.13
2013-02-26 20:55:410 / 0http://176.56.230.13176.56.230.13
2013-02-26 20:29:040 / 0http://176.56.228.110176.56.228.110
2013-02-26 19:39:510 / 0http://176.56.228.187176.56.228.187
2013-02-26 19:36:560 / 0http://176.56.228.110176.56.228.110

Last 6 reports on domain: www.mp3crank.com

Date Alerts / IDS URL IP
2013-02-14 05:13:370 / 7http://www.mp3crank.com/download/album/66513176.56.231.77
2013-01-02 04:24:440 / 8http://www.mp3crank.com/download/album/37574176.56.231.77
2012-12-29 20:07:000 / 2http://www.mp3crank.com/we-are-trees/boyfriend-ep.htm176.56.231.77
2012-11-27 07:04:240 / 7http://www.mp3crank.com/download/album/47424176.56.231.77
2012-11-21 22:39:460 / 5http://www.mp3crank.com/download/album/36425176.56.231.77
2012-11-03 16:56:510 / 2http://www.mp3crank.com/t-i/no-mercy.htm176.56.231.77



JavaScript

Executed Scripts (39)


Executed Evals (3)

#1 JavaScript::Eval (size: 221775, repeated: 1)

(function() {
    try {
        var appNamespace = "$ice";
        if (window[appNamespace]) {
            if (window[appNamespace].logger && window[appNamespace].logger.error) {
                window[appNamespace].logger.error("Global namespace already defined. Aborting.", this)
            }
            return
        }
        var what = function(obj) {
                return typeof obj == "undefined" || obj === null ? "undefined" : ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()
            };
        var $extend = function(source) {
                if (this.$root.what(source) != "object") {
                    this.$root.logger.warn("source is not an object", this);
                    return
                }
                var key;
                for (key in source) {
                    this[key] = source[key]
                }
                return this
            };
        var $fn = function(key, fn) {
                if (!this || this == window) {
                    return
                }
                if (this.$root.what(fn) != "function") {
                    this.$root.logger.warn(key + " is not a function", this);
                    return
                }
                this[key] = fn;
                fn.$id = key;
                fn.$parent = this;
                fn.$root = this.$root
            };
        var $create = function(id, source, extension, bindable) {
                var wsource = what(source),
                    parent = this || window,
                    node, key;
                if (!/object|function/.test(wsource)) {
                    return null
                }
                if (parent[id]) {
                    node = parent[id]
                } else {
                    var maker = function() {
                            var node = function() {};
                            node.prototype.$id = id;
                            node.prototype.$parent = parent;
                            node.prototype.$root = parent == window ? null : parent.$root;
                            node.prototype.$create = $create;
                            node.prototype.$extend = $extend;
                            node.prototype.$fn = $fn;
                            if (bindable && parent != window && parent.$root.event) {
                                node.prototype.bind = parent.$root.event.bind;
                                node.prototype.unbind = parent.$root.event.unbind;
                                node.prototype.fire = parent.$root.event.fire
                            }
                            return node
                        };
                    node = parent[id] = new(new maker())
                }
                if (what(extension) == "object") {
                    node.$extend(extension)
                }
                for (key in source) {
                    switch (what(source[key])) {
                    case "function":
                        node.$fn(key, source[key]);
                        break;
                    case "object":
                        node.$create(key, source[key]);
                        break;
                    default:
                        node[key] = source[key]
                    }
                }
                return node
            };
        var NodesArray = function() {
                this.nodes = []
            };
        NodesArray.prototype = {
            toString: function(separator) {
                var result = [],
                    i, len;
                for (i = 0, len = this.nodes.length; i < len; i++) {
                    result.unshift(this.nodes[i].$id)
                }
                return result.join(separator || ".")
            }
        };
        var $root = $create(appNamespace, {}, null, false);
        $root.what = what;
        $root.$root = $root;
        $root.$extend({
            NodesArray: NodesArray,
            $fn: $fn
        });
        $root.$create("plugins", {}, {}, true);
        var versionFile = "ice";
        var event = $root.$create("event", {
            bind: function(o) {
                var rt = this.$root,
                    ev = rt.event,
                    ls, key, clone, prop, err = null;
                if (!o.event) {
                    err = ev.msgs.me
                } else {
                    if (!o.listener) {
                        err = ev.msgs.ml
                    }
                }
                if (err) {
                    rt.logger.error(err, this);
                    return false
                }
                o.$root = rt;
                if (!ev._listeners[o.event]) {
                    ev._listeners[o.event] = []
                }
                ls = ev._listeners[o.event];
                var listenerType = rt.what(o.listener);
                if (listenerType == "function") {
                    ls[ls.length] = o
                } else {
                    if (listenerType == "object") {
                        for (key in o.listener) {
                            if (this != ev) {
                                this.$fn(key, o.listener[key])
                            }
                            clone = {};
                            for (prop in o) {
                                clone[prop] = o[prop]
                            }
                            clone.listener = o.listener[key];
                            ls[ls.length] = clone
                        }
                    }
                }
                return true
            },
            unbind: function(event, listener) {
                var rt = this.$root,
                    ev = rt.event,
                    i, len, ls = ev._listeners[event];
                if (rt.what(ls) != "array") {
                    return false
                }
                if (!listener) {
                    delete ev._listeners[event]
                } else {
                    for (i = 0, len = ls.length; i < len; i++) {
                        if (ls[i].listener === listener) {
                            ls.splice(i--, 1)
                        }
                    }
                }
                return true
            },
            fire: function(event, data, delay) {
                var rt = this.$root,
                    ls = rt.event._listeners[event],
                    func, context, o, hasData = rt.what(data) != "undefined",
                    time, msg;
                if (!event || rt.event.disabled || (ls && ls.disabled) || rt.what(ls) != "array") {
                    return false
                }
                for (var i = 0, len = ls.length; i < len; i++) {
                    o = ls[i];
                    if (hasData) {
                        o.data = data
                    }
                    func = o.listener;
                    context = func.$parent || window;
                    if (context == window) {
                        rt.logger.error("Probable Error: Context is window object. event: " + event, this.fire)
                    }
                    if (rt.event.log) {
                        msg = ['Fire "', func.$id || "Anonymous", '" on "', event, '".', data && data.hookId ? " hookId:" + data.hookId : ""].join("")
                    }
                    time = delay && rt.what(delay) == "number" ? delay : o.delay;
                    if (time) {
                        return setTimeout((function() {
                            var clone = rt.utils.object.clone(o);
                            return function() {
                                if (msg) {
                                    rt.logger.log(msg, func)
                                }
                                func.call(context, clone)
                            }
                        }()), time)
                    } else {
                        if (msg) {
                            rt.logger.log(msg, func)
                        }
                        func.call(context, o)
                    }
                }
            },
            repeat: function(event, interval, data, delay) {
                var rt = this.$root,
                    ls = rt.event._listeners[event],
                    func, context, o, hasData = rt.what(data) != "undefined",
                    msg, wrapper;
                if (!event || rt.event.disabled || (ls && ls.disabled) || rt.what(ls) != "array" || !interval || rt.what(interval) != "number") {
                    return false
                }
                if (!delay || rt.what(delay) != "number") {
                    delay = null
                }
                for (var i = 0, len = ls.length; i < len; i++) {
                    o = ls[i];
                    if (o.repeat || o.delay) {
                        return
                    }
                    if (hasData) {
                        o.data = data
                    }
                    func = o.listener;
                    context = func.$parent || window;
                    if (rt.event.log) {
                        msg = ['Repeat "', func.$id || "Anonymous", '" on "', event, '".'].join("")
                    }
                    o.interval = interval;
                    o.counter = 0;
                    wrapper = function() {
                        if (msg && !o.counter) {
                            rt.logger.log(msg, func)
                        }
                        o.counter++;
                        func.call(context, o)
                    };
                    if (delay) {
                        o.delay = setTimeout(function() {
                            o.repeat = setInterval(wrapper, interval)
                        }, delay)
                    } else {
                        o.repeat = setInterval(wrapper, interval)
                    }
                }
            },
            stop: function(event) {
                var rt = this.$root,
                    ls = rt.event._listeners[event],
                    func, o;
                if (!event || !ls) {
                    return false
                }
                for (var i = 0, len = ls.length; i < len; i++) {
                    o = ls[i];
                    clearInterval(o.repeat);
                    clearTimeout(o.delay);
                    delete o.repeat;
                    delete o.delay;
                    func = o.listener;
                    if (rt.event.log) {
                        rt.logger.log(['Stop "', func.$id || "Anonymous", '" on "', event, '" after ', o.counter, " repetitions."].join(""), func)
                    }
                    o.counter = 0
                }
            },
            disable: function(event) {
                this.$root.event.able(event, true)
            },
            enable: function(event) {
                this.$root.event.able(event, false)
            },
            able: function(event, disabled) {
                var rt = this.$root,
                    i;
                if (event) {
                    if (rt.what(event) == "string") {
                        event = [event]
                    }
                    for (i = 0; i < event.length; i++) {
                        rt.event._listeners[event].disabled = disabled
                    }
                } else {
                    rt.event.disabled = disabled
                }
            }
        }, {
            _listeners: {},
            log: true,
            msgs: {
                me: "Error: Missing event.",
                ml: "Error: Misssing listener."
            }
        }, false);
        event.$create("dom", {
            bind: function(element, o) {
                var rt = this.$root,
                    nt = rt.settings.nodeTypes,
                    key, clone, prop, err = null,
                    func;

                function isAChildOf(parent, child) {
                    if (parent === child) {
                        return false
                    }
                    while (child && child !== parent) {
                        child = child.parentNode
                    }
                    return child === parent
                }
                if (!element || !(element.nodeType == nt.ELEMENT || element.nodeType == nt.DOCUMENT || element == window)) {
                    err = this.msgs.mbe
                } else {
                    if (!o.event) {
                        err = this.$parent.msgs.me
                    } else {
                        if (!o.listener) {
                            err = this.$parent.msgs.ml
                        }
                    }
                }
                if (err) {
                    rt.logger.error(err, this);
                    return false
                }
                if (!element.$iceId) {
                    element.$iceId = ++this.elementBinder
                }
                o.element = element;
                o.$root = rt;
                if (rt.what(o.listener) == "function") {
                    o.listener = {
                        a: o.listener
                    }
                } else {
                    if (rt.what(o.listener) != "object") {
                        return
                    }
                }
                for (key in o.listener) {
                    clone = {};
                    for (prop in o) {
                        clone[prop] = o[prop]
                    }
                    clone.listener = o.listener[key];
                    if (element.addEventListener) {
                        if (/mouseenter|mouseleave/.test(clone.event)) {
                            clone.simEvent = clone.event;
                            clone.event = clone.event.replace(/enter/, "over").replace(/leave/, "out")
                        }
                    }
                    func = (function() {
                        var reclone = rt.utils.object.clone(clone);
                        return function(domEvt) {
                            if (!domEvt) {
                                domEvt = window.event
                            }
                            if (/mouseenter|mouseleave/.test(reclone.simEvent) && domEvt.relatedTarget && this == domEvt.relatedTarget || (isAChildOf(this, domEvt.relatedTarget))) {
                                return
                            }
                            reclone.domEvent = domEvt;
                            rt.event.dom.fire(reclone)
                        }
                    })();
                    if (element.addEventListener) {
                        element.addEventListener(clone.event, func, false)
                    } else {
                        if (element.attachEvent) {
                            element.attachEvent("on" + clone.event, func)
                        }
                    }
                    var eID = element.$iceId;
                    var eL = this._listeners;
                    if (!eL[eID]) {
                        eL[eID] = {}
                    }
                    if (!eL[eID][clone.event]) {
                        eL[eID][clone.event] = []
                    }
                    rt.utils.array.push(eL[eID][clone.event], {
                        listener: func,
                        original: clone.listener
                    })
                }
                return true
            },
            unbind: function(element, event, listener) {
                var rt = this.$root,
                    nt = rt.settings.nodeTypes,
                    i;
                if (!element || !element.$iceId || !(element.nodeType == nt.ELEMENT || element.nodeType == nt.DOCUMENT || element == window)) {
                    rt.logger.error(this.msgs.mbe, this);
                    return
                }
                var eID = element.$iceId;
                var ls = rt.event.dom._listeners[eID];
                if (!ls || !ls[event]) {
                    return
                }
                for (i = 0; i < ls[event].length; i++) {
                    if (ls[event][i].original == listener) {
                        if (element.removeEventListener) {
                            element.removeEventListener(event, ls[event][i].listener, false)
                        } else {
                            if (element.detachEvent) {
                                element.detachEvent("on" + event, ls[event][i].listener)
                            }
                        }
                        ls[event].splice(--i, 1)
                    }
                }
                if (ls[event].length == 0) {
                    delete ls[event]
                }
                return true
            },
            fire: function(o) {
                var rt = this.$root,
                    func = o.listener,
                    context = func.$parent || window,
                    msg;
                if (rt.event.log) {
                    msg = ['Fire "', func.$id || "Anonymous", '" on "', o.event, '".', o.data && o.data.hookId ? " hookId:" + o.data.hookId : ""].join("")
                }
                if (o.delay && rt.what(o.delay) == "number") {
                    setTimeout(function() {
                        if (msg) {
                            rt.logger.log(msg, func)
                        }
                        func.call(context, o)
                    }, o.delay)
                } else {
                    if (msg) {
                        rt.logger.log(msg, func)
                    }
                    func.call(context, o)
                }
            }
        }, {
            _listeners: {},
            elementBinder: 0,
            msgs: {
                mbe: "Error: Missing or bad element."
            }
        }, false);
        $root.$create("logger", {
            log: function(message, context, type) {
                if (!type) {
                    type = "log"
                }
                this.history[this.history.length] = {
                    message: message,
                    type: type,
                    time: (new Date()).getTime(),
                    context: context
                };
                if (this.output == "console" && this.$root.what(window.console) != "undefined") {
                    console[type](message, this.descent(context))
                }
            },
            info: function(message, context) {
                this.log(message, context, "info")
            },
            warn: function(message, context) {
                this.log(message, context, "warn")
            },
            error: function(message, context, kill) {
                this.log(message, context, "error");
                if (kill) {
                    this.$root.event.disable()
                }
                if (this.errorReporting >= Math.ceil(Math.random() * 100)) {
                    this.$root.event.fire("sendErrorReport", {
                        msg: message
                    })
                }
            },
            descent: function(context) {
                var result = new this.$root.NodesArray;
                while (context && context.$root && context != window) {
                    result.nodes[result.nodes.length] = context;
                    context = context.$parent
                }
                return result
            }
        }, {
            history: [],
            output: "none",
            errorReporting: -1
        });
        $root.$create("browser", new function() {
            var ua = this.ua = navigator.userAgent;
            var uac = function(str) {
                    return ua.indexOf(str) != -1
                };
            var _found = false;
            var ver = function(browser) {
                    if (_found) {
                        return false
                    }
                    var match = ua.match(new RegExp(browser + ".?([0-9][0-9\\.]+)"));
                    if (match != null) {
                        _found = true;
                        return match[1]
                    }
                    return false
                };
            this.IE = ver("MSIE");
            if (this.IE == "7.0" && $root.what(Array.isArray) == "function") {
                this.IE = "9.0"
            }
            this.Firefox = ver("Firefox");
            this.Chrome = ver("Chrome");
            this.Safari = this.Chrome ? false : uac("Safari") && ver("Version");
            this.MobileSafari = this.Safari && uac("Mobile") ? this.Safari : false;
            this.Opera = uac("Opera") && uac("Presto") ? ver("Version") || ver("Opera") : false;
            this.OperaMini = this.Opera && uac("Opera Mini");
            this.ucweb = ver("UCWEB") || (uac("UCWEB") ? ver("Browser") : false);
            _found = false;
            this.AppleWebKit = ver("AppleWebKit");
            this.Gecko = ver("Gecko");
            this.Mozilla = !this.Gecko && !this.AppleWebKit && uac("Mozilla/");
            _found = false;
            this.WindowsMobile = uac("Windows Phone OS");
            this.Windows = uac("Windows ");
            this.Linux = !this.Windows && (uac("Linux ") || uac("Linux;"));
            this.Mac = !this.Windows && !this.Linux && uac("Mac ");
            this.iPhone = !this.Windows && !this.Linux && uac("iPhone");
            this.iPad = !this.Windows && !this.Linux && uac("iPad");
            this.Android = (!this.Windows && uac("Android")) ? ver("Android") : false;
            this.Nokia = uac("Nokia");
            this.getOS = function() {
                var os = ["WindowsMobile", "Windows", "iPhone", "Mac", "iPad", "Android", "Nokia", "Linux"],
                    i, leni = os.length;
                for (i = 0; i < leni; i++) {
                    if (this[os[i]]) {
                        return os[i]
                    }
                }
                return "unknown"
            };
            this.isMobile = function() {
                return !!(this.iPhone || this.iPad || this.Android || this.WindowsMobile || this.OperaMini || this.ucweb)
            };
            this.getName = function() {
                var names = ["IE", "Firefox", "Chrome", "MobileSafari", "Safari", "Opera", "ucweb", "Gecko", "AppleWebKit", "Mozilla"];
                for (var i = 0, leni = names.length; i < leni; i++) {
                    if (this[names[i]]) {
                        return names[i]
                    }
                }
                return "unknown"
            };
            this.getVersion = function(asFloat) {
                var ver = this.IE || this.Firefox || this.Chrome || this.MobileSafari || this.Safari || this.Opera || this.AppleWebKit || this.ucweb || "unknown";
                return asFloat ? parseFloat(ver) || -1 : ver
            };
            this.toString = this.getValue = function() {
                return [this.getName(), this.getVersion(), this.getOS()].join(" ")
            }
        });
        var utils = $root.$create("utils", {
            VeST: function(template, data, name) {
                var fn, v = this.VeST,
                    c;
                if (!(c = v.cache)) {
                    c = v.cache = {};
                    v.encQ = function(m) {
                        return m.split("'").join("\t")
                    };
                    v.decQ = function(m) {
                        return m.split("\t").join("'")
                    }
                }
                if (name && c[name]) {
                    fn = c[name]
                } else {
                    template = template.replace(/<%\-\-[\s\S]*?\-\-%>/g, "");
                    var tjs = template.replace(/[\r\t\n]/g, " ").replace(/<%.*?%>/g, v.encQ).replace(/'/g, "\\'").replace(/<%.*?%>/g, v.decQ).replace(/<%=(.*?)%>/g, "',$1,'").split("<%").join("');").split("%>").join("p.push('");
                    tjs = ["var p=[];with(obj||{}){p.push('", tjs, "');}return p.join('');"].join("");
                    fn = new Function("obj", tjs);
                    if (name) {
                        c[name] = fn
                    }
                }
                return fn(data)
            },
            doRectsOverlap: function(r1, r2) {
                var temp;
                if (r2[0] < r1[0]) {
                    temp = r1;
                    r1 = r2;
                    r2 = temp
                }
                if (r1[2] < r2[0] || r1[0] > r2[2]) {
                    return false
                }
                if (r2[1] < r1[1]) {
                    temp = r1;
                    r1 = r2;
                    r2 = temp
                }
                if (r1[3] < r2[1] || r1[1] > r2[3]) {
                    return false
                }
                return true
            }
        });
        utils.$create("number", {
            get: function(counter) {
                return this.counters[counter]
            },
            next: function(counter, start) {
                if (this.$root.what(this.counters[counter]) == "undefined") {
                    this.counters[counter] = this.$root.what(start) == "number" ? start : 0
                } else {
                    this.counters[counter]++
                }
                return this.counters[counter]
            }
        }, {
            counters: {}
        });
        utils.$create("string", {
            capitalize: function(str) {
                var arr = str.split(/\s+/);
                if (arr.length > 2) {
                    arr[0] = arr[0].charAt(0).toUpperCase() + arr[0].slice(1)
                } else {
                    for (var i = 0, len = arr.length; i < len; ++i) {
                        arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1)
                    }
                }
                return arr.join(" ")
            },
            qw: function(str) {
                return this.trim(str).split(/\s+/)
            },
            toObject: function(str, key, decode) {
                if (str.indexOf("=") == -1) {
                    return null
                }
                if (str.indexOf("?") == 0) {
                    str = str.substring(1)
                }
                var obj = {},
                    pairs = str.split("&"),
                    kv;
                for (var i = 0, leni = pairs.length; i < leni; i++) {
                    kv = pairs[i].split("=");
                    if (kv.length != 2) {
                        continue
                    }
                    if (decode) {
                        kv[0] = decodeURIComponent(kv[0]);
                        kv[1] = decodeURIComponent(kv[1])
                    }
                    obj[kv[0]] = kv[1]
                }
                return this.$root.what(key) != "undefined" ? obj[key] : obj
            },
            trim: function(str) {
                return str.replace(/^\s+|\s+$/g, "")
            },
            truncate: function(str, len, suffix) {
                return str.length <= len ? str : str.substring(0, len) + (suffix || "")
            },
            truncateToChar: function(str, len, sep, suffix) {
                var str2 = str.length <= len ? str : str.substring(0, len);
                if (str2.length < str.length) {
                    str2 = str2.substr(0, str2.lastIndexOf(sep)) + (suffix || "")
                }
                return str2
            }
        });
        utils.$create("array", {
            clone: function(origin, deep) {
                var clone = [],
                    i, leni, rt = this.$root;
                for (i = 0, leni = origin.length; i < leni; i++) {
                    if (deep && /object|array/.test(rt.what(origin[i])) && (!this.cloneDepth || this.cloneDepth < 10)) {
                        if (!this.cloneDepth) {
                            this.cloneDepth = 0
                        }
                        this.cloneDepth++;
                        clone[i] = rt.what(origin[i]) == "object" ? this.$parent.object.clone(origin[i], deep) : this.clone(origin[i], deep)
                    } else {
                        clone[i] = origin[i]
                    }
                }
                delete this.cloneDepth;
                return clone
            },
            concat: function() {
                var arr = [];
                for (var i = 0, leni = arguments.length; i < leni; i++) {
                    for (var j = 0, lenj = arguments[i].length; j < lenj; j++) {
                        arr[arr.length] = arguments[i][j]
                    }
                }
                return arr
            },
            discard: function(arr, item) {
                for (var i = arr.length - 1; i >= 0; i--) {
                    if (arr[i] == item) {
                        arr.splice(i, 1)
                    }
                }
                return arr
            },
            indexOf: function(arr, item) {
                for (var i = 0, leni = arr.length; i < leni; i++) {
                    if (arr[i] == item) {
                        return i
                    }
                }
                return -1
            },
            insertionSort: function(arr, prop, asc) {
                var i, j, value;
                for (i = 1; i < arr.length; i++) {
                    value = arr[i];
                    j = i - 1;
                    while (j >= 0 && (asc ? arr[j][prop] > value[prop] : arr[j][prop] < value[prop])) {
                        arr[j + 1] = arr[j];
                        j--
                    }
                    arr[j + 1] = value
                }
            },
            map: function(arr, mapper) {
                for (var i = 0, leni = arr.length, res = []; i < leni; i++) {
                    res[i] = mapper(arr[i])
                }
                return res
            },
            push: function() {
                if (arguments.length < 2) {
                    return
                }
                var arr = arguments[0];
                for (var i = 1; i < arguments.length; i++) {
                    arr[arr.length] = arguments[i]
                }
            },
            range: function(start, end) {
                var arr = [],
                    i, what = this.$root.what;
                if (what(start) == "number" && what(end) == "number" && start <= end) {
                    for (i = start; i <= end; i++) {
                        arr[arr.length] = i
                    }
                }
                return arr
            },
            sum: function(arr) {
                var sum = 0,
                    i, len, what = this.$root.what;
                for (i = 0, len = arr.length; i < len; i++) {
                    if (what(arr[i]) == "number") {
                        sum += arr[i]
                    }
                }
                return sum
            },
            toObject: function(arr, object, value) {
                if (!arr) {
                    return object
                }
                var what = this.$root.what;
                if (what(arr) != "array") {
                    arr = [arr]
                }
                if (!object) {
                    object = {}
                }
                var item, key, val;
                for (var i = 0, leni = arr.length; i < leni; i++) {
                    item = arr[i];
                    key = what(item) == "string" ? item : item != null && what(item.toString) == "function" ? item.toString() : null;
                    if (key) {
                        val = (what(value) == "undefined") ? key : (what(value) == "function") ? value(key) : value;
                        object[key] = val
                    }
                }
                return object
            },
            uniq: function(arr) {
                var i, j;
                for (i = 0; i < arr.length - 1; i++) {
                    for (j = i + 1; j < arr.length; j++) {
                        if (arr[i] === arr[j]) {
                            arr.splice(j, 1);
                            j--
                        }
                    }
                }
                return arr
            }
        });
        utils.$create("object", {
            clean: function(obj) {
                var res = {},
                    key, val, what = this.$root.what;
                for (key in obj) {
                    val = obj[key];
                    if (what(val) == "undefined" || val === "" || val === null) {
                        continue
                    }
                    res[key] = obj[key]
                }
                return res
            },
            clone: function(origin, deep) {
                var clone = {},
                    key, rt = this.$root;
                for (key in origin) {
                    if (deep && /object|array/.test(rt.what(origin[key])) && (!this.cloneDepth || this.cloneDepth < 10)) {
                        if (!this.cloneDepth) {
                            this.cloneDepth = 0
                        }
                        this.cloneDepth++;
                        clone[key] = rt.what(origin[key]) == "object" ? this.clone(origin[key], deep) : this.$parent.array.clone(origin[key], deep)
                    } else {
                        clone[key] = origin[key]
                    }
                }
                delete this.cloneDepth;
                return clone
            },
            extend: function() {
                if (arguments.length < 2) {
                    return arguments.length ? arguments[0] : {}
                }
                var key, rt = this.$root,
                    i, leni, dest = arguments[0],
                    source;
                if (rt.what(dest) != "object") {
                    return dest
                }
                for (i = 1, leni = arguments.length; i < leni; i++) {
                    source = arguments[i];
                    if (rt.what(source) == "object") {
                        for (key in source) {
                            dest[key] = source[key]
                        }
                    }
                }
                return dest
            },
            hasKey: function(obj, keys) {
                if (!(keys instanceof Array)) {
                    keys = [keys]
                }
                for (var i = 0, leni = keys.length, what = this.$root.what; i < leni; i++) {
                    if (what(obj[keys[i]]) != "undefined") {
                        return true
                    }
                }
                return false
            },
            keys: function(obj) {
                var arr = [];
                for (var key in obj) {
                    arr[arr.length] = key
                }
                return arr
            },
            renamePorpery: function(o, oldName, newName) {
                var rt = this.$root;
                if (rt.what(o[oldName]) == "undefined") {
                    return
                }
                o[newName] = o[oldName];
                delete o[oldName]
            },
            stringify: function(json, depth) {
                var res, rt = this.$root,
                    type = rt.what(json),
                    push = rt.utils.array.push,
                    i, leni, key, sgf = this.stringify;
                if (!depth) {
                    depth = 1
                }
                if (depth > 10) {
                    res = '"Exceeded max depth of 10 levels."'
                } else {
                    if (type == "undefined") {
                        res = "undefined"
                    } else {
                        if (type == "number" || type == "boolean") {
                            res = json
                        } else {
                            if (type == "string") {
                                res = ['"', json.replace(/"/g, '\\"'), '"'].join("")
                            } else {
                                if (type == "function") {
                                    res = '"[Function]"'
                                } else {
                                    if (type == "array") {
                                        res = ["["];
                                        for (i = 0, leni = json.length; i < leni; i++) {
                                            push(res, sgf.call(this, json[i], depth + 1), ",")
                                        }
                                        if (res.length > 1) {
                                            res.pop()
                                        }
                                        push(res, "]");
                                        res = res.join("")
                                    } else {
                                        if (json === null) {
                                            res = "null"
                                        } else {
                                            if (type == "object") {
                                                res = ["{"];
                                                for (key in json) {
                                                    push(res, '"', key.replace(/"/g, '\\"'), '":', sgf.call(this, json[key], depth + 1), ",")
                                                }
                                                if (res.length > 1) {
                                                    res.pop()
                                                }
                                                push(res, "}");
                                                res = res.join("")
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                return res
            },
            toQueryString: function(obj, useEncoding) {
                var res = [],
                    key, value, push = this.$parent.array.push;
                for (key in obj) {
                    if (useEncoding) {
                        key = encodeURIComponent(key);
                        value = encodeURIComponent(obj[key])
                    } else {
                        value = obj[key]
                    }
                    push(res, res.length ? "&" : "?", key, "=", value)
                }
                return res.join("")
            },
            values: function(obj) {
                var arr = [];
                for (var key in obj) {
                    arr[arr.length] = obj[key]
                }
                return arr
            }
        });
        utils.$create("date", {
            now: function() {
                return new Date().getTime()
            }
        });
        utils.$create("timer", {
            start: function(id) {
                var time = this.$root.utils.date.now();
                this.times[id] = {
                    start: time
                };
                return time
            },
            stop: function(id) {
                var rt = this.$root,
                    o = this.times[id];
                if (!o || !o.start) {
                    rt.logger.warn(['Trying to stop timer "', id, '" which does not exist.'].join(""), this.stop);
                    return 0
                }
                o.stop = rt.utils.date.now();
                o.delta = o.stop - o.start;
                return o.delta
            },
            delta: function(id) {
                var o = this.times[id];
                return o && o.delta ? o.delta : 0
            },
            poll: function(id) {
                var o = this.times[id];
                if (!o || !o.start) {
                    return 0
                }
                return (o.stop || this.$root.utils.date.now()) - o.start
            },
            clear: function(id) {
                delete this.times[id]
            }
        }, {
            times: {}
        });
        utils.$create("cookie", {
            set: function(name, value, expiration) {
                expiration = expiration ? ("; expires=" + (this.$root.what(expiration) == "date" ? expiration.toUTCString() : new Date((new Date()).getTime() + expiration * 1000).toUTCString())) : "";
                var parts = location.hostname.split(".");
                var domain = "; domain=" + [parts[parts.length - 2], parts[parts.length - 1]].join(".");
                document.cookie = [name, "=", encodeURIComponent(value), expiration, domain, "; path=/"].join("");
                return true
            },
            has: function(name) {
                return this.$parent.array.indexOf(this.$parent.array.map(document.cookie.split(/;\s*/), function(item) {
                    return item.split("=")[0]
                }), name) > -1
            },
            remove: function(name) {
                var parts = location.hostname.split(".");
                var domain = "; domain=" + [parts[parts.length - 2], parts[parts.length - 1]].join(".");
                document.cookie = [name, "=;expires=", new Date((new Date()).getTime() - 60000).toUTCString(), domain, "; path=/"].join("");
                return true
            },
            get: function(name) {
                var cookies = {};
                this.$parent.array.map(document.cookie.split(/;\s*/), function(cookie) {
                    var p = cookie.split("=");
                    cookies[p[0]] = p[1];
                    return null
                });
                return decodeURIComponent(cookies[name]) || null
            }
        });
        utils.$create("base64", {
            init: function(str) {
                if (!this.reverseBase64Chars) {
                    this.reverseBase64Chars = {};
                    for (var i = 0, leni = this.base64Chars.length; i < leni; i++) {
                        this.reverseBase64Chars[this.base64Chars[i]] = i
                    }
                }
                this.base64Str = str;
                this.base64Count = 0
            },
            readBase64: function() {
                if (!this.base64Str) {
                    return this.EOI
                }
                if (this.base64Count >= this.base64Str.length) {
                    return this.EOI
                }
                var c = this.base64Str.charCodeAt(this.base64Count) & 255;
                this.base64Count++;
                return c
            },
            encodeBase64: function(str) {
                this.init(str);
                var result = "";
                var inBuffer = new Array(3);
                var lineCount = 0;
                var done = false;
                while (!done && (inBuffer[0] = this.readBase64()) != this.EOI) {
                    inBuffer[1] = this.readBase64();
                    inBuffer[2] = this.readBase64();
                    result += (this.base64Chars[inBuffer[0] >> 2]);
                    if (inBuffer[1] != this.EOI) {
                        result += (this.base64Chars[((inBuffer[0] << 4) & 48) | (inBuffer[1] >> 4)]);
                        if (inBuffer[2] != this.EOI) {
                            result += (this.base64Chars[((inBuffer[1] << 2) & 60) | (inBuffer[2] >> 6)]);
                            result += (this.base64Chars[inBuffer[2] & 63])
                        } else {
                            result += (this.base64Chars[((inBuffer[1] << 2) & 60)]);
                            result += ("=");
                            done = true
                        }
                    } else {
                        result += (this.base64Chars[((inBuffer[0] << 4) & 48)]);
                        result += ("=");
                        result += ("=");
                        done = true
                    }
                    lineCount += 4;
                    if (lineCount >= 76) {
                        result += ("\n");
                        lineCount = 0
                    }
                }
                return result
            },
            readReverseBase64: function() {
                if (!this.base64Str) {
                    return this.EOI
                }
                while (true) {
                    if (this.base64Count >= this.base64Str.length) {
                        return this.EOI
                    }
                    var nextCharacter = this.base64Str.charAt(this.base64Count);
                    this.base64Count++;
                    if (this.reverseBase64Chars[nextCharacter]) {
                        return this.reverseBase64Chars[nextCharacter]
                    }
                    if (nextCharacter == "A") {
                        return 0
                    }
                }
            },
            ntos: function(n) {
                n = n.toString(16);
                if (n.length == 1) {
                    n = "0" + n
                }
                n = "%" + n;
                return unescape(n)
            },
            decodeBase64: function(str) {
                this.init(str);
                var result = "";
                var inBuffer = new Array(4);
                var done = false;
                while (!done && (inBuffer[0] = this.readReverseBase64()) != this.EOI && (inBuffer[1] = this.readReverseBase64()) != this.EOI) {
                    inBuffer[2] = this.readReverseBase64();
                    inBuffer[3] = this.readReverseBase64();
                    result += this.ntos((((inBuffer[0] << 2) & 255) | inBuffer[1] >> 4));
                    if (inBuffer[2] != this.EOI) {
                        result += this.ntos((((inBuffer[1] << 4) & 255) | inBuffer[2] >> 2));
                        if (inBuffer[3] != this.EOI) {
                            result += this.ntos((((inBuffer[2] << 6) & 255) | inBuffer[3]))
                        } else {
                            done = true
                        }
                    } else {
                        done = true
                    }
                }
                return result
            }
        }, {
            EOI: -1,
            base64Chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),
            reverseBase64Chars: null,
            base64Str: "",
            base64Count: 0
        });
        utils.$create("dom", {
            createDOMFragment: function(o) {
                var el, rt = this.$root,
                    key, i, leni, child;
                if (o.tag) {
                    var tag = o.tag.toLowerCase();
                    el = document.createElement(tag);
                    if (tag == "input") {
                        el.type = o.type || "text"
                    }
                    if (o.id) {
                        el.id = o.id
                    }
                    if (o.cls) {
                        el.className = o.cls
                    }
                    if (o.style) {
                        this.element.setStyle(el, o.style)
                    }
                    if (o.attributes) {
                        for (key in o.attributes) {
                            el.setAttribute(key, o.attributes[key])
                        }
                    }
                    if (rt.what(o.value) != "undefined") {
                        el.value = o.value
                    }
                    if (rt.what(o.innerHTML) != "undefined") {
                        el.innerHTML = o.innerHTML
                    }
                    if (o.events) {
                        for (key in o.events) {
                            rt.event.dom.bind(el, {
                                event: key,
                                listener: o.events[key]
                            })
                        }
                    }
                } else {
                    if (o.isTextNode && rt.what(o.value) != "undefined") {
                        el = document.createTextNode(o.value)
                    } else {
                        return null
                    }
                }
                if (o.isChild) {
                    el = o.parent.appendChild(el)
                }
                if (o.tag && o.children) {
                    if (rt.what(o.children) != "array") {
                        o.children = [o.children]
                    }
                    for (i = 0, leni = o.children.length; i < leni; i++) {
                        child = o.children[i];
                        rt.utils.object.extend(child, {
                            isChild: true,
                            parent: el
                        });
                        this.createDOMFragment(child)
                    }
                } else {
                    if (o.tag && o.childNodes) {
                        for (i = 0, leni = o.childNodes.length; i < leni; i++) {
                            el.appendChild(o.childNodes[i])
                        }
                    }
                }
                if (!o.isChild && o.parent) {
                    var parent = rt.what(o.parent) == "string" ? this.element.$(o.parent) : o.parent;
                    if (o.overwrite) {
                        parent.innerHTML = ""
                    }
                    o.before ? parent.insertBefore(el, o.before) : o.after ? this.element.insertAfter(el, o.after) : parent.appendChild(el)
                }
                return el
            },
            filterByClass: function(cls, tag, elm) {
                if (!this._filterByClass) {
                    if (document.getElementsByClassName) {
                        this._filterByClass = function(cls, tag, elm) {
                            var elements = (elm ? (elm.getElementsByClassName ? elm : document) : document).getElementsByClassName(cls),
                                els = [];
                            tag = tag ? tag.toLowerCase() : null;
                            for (var i = 0, leni = elements.length; i < leni; i++) {
                                if (!tag || elements[i].tagName.toLowerCase() == tag) {
                                    els[els.length] = elements[i]
                                }
                            }
                            return els
                        }
                    } else {
                        if (document.evaluate) {
                            this._filterByClass = function(cls, tag, elm) {
                                tag = tag || "*";
                                elm = elm || document;
                                var classes = cls.split(" "),
                                    classesToCheck = "",
                                    xhtmlNamespace = "http://www.w3.org/1999/xhtml",
                                    namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace : null,
                                    els = [],
                                    elements, node;
                                for (var j = 0, jl = classes.length; j < jl; j++) {
                                    classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"
                                }
                                try {
                                    elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null)
                                } catch (e) {
                                    elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null)
                                }
                                while ((node = elements.iterateNext())) {
                                    els[els.length] = node
                                }
                                return els
                            }
                        } else {
                            this._filterByClass = function(cls, tag, elm) {
                                tag = tag || "*";
                                elm = elm || document;
                                var classes = cls.split(" "),
                                    classesToCheck = [],
                                    elements = (tag === "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag),
                                    current, els = [],
                                    match;
                                for (var k = 0, kl = classes.length; k < kl; k++) {
                                    classesToCheck[classesToCheck.length] = new RegExp("(^|\\s)" + classes[k] + "(\\s|$)")
                                }
                                for (var l = 0, ll = elements.length; l < ll; l++) {
                                    current = elements[l];
                                    match = false;
                                    for (var m = 0, ml = classesToCheck.length; m < ml; m++) {
                                        match = classesToCheck[m].test(current.className);
                                        if (!match) {
                                            break
                                        }
                                    }
                                    if (match) {
                                        els[els.length] = current
                                    }
                                }
                                return els
                            }
                        }
                    }
                }
                return this._filterByClass(cls, tag, elm)
            },
            findWidestNode: function() {
                var bd = document.body,
                    i, leni, rt = this.$root,
                    dm = rt.utils.dom,
                    dmel = dm.element,
                    node, widestNode, width, maxWidth = 0,
                    height, minHeight = 50,
                    widest = null;
                for (i = 0, leni = bd.childNodes.length; i < leni; i++) {
                    node = bd.childNodes[i];
                    if (node.nodeType != rt.settings.nodeTypes.ELEMENT || !dmel.isVisible(node)) {
                        continue
                    }
                    width = dmel.getActualWidth(node);
                    height = dmel.getActualHeight(node);
                    if (width > maxWidth && height > minHeight) {
                        maxWidth = width;
                        widest = {
                            node: node,
                            width: width,
                            height: height
                        }
                    }
                }
                if (!widest) {
                    widestNode = bd;
                    widest = {
                        node: bd,
                        width: dm.document.getWidth(),
                        height: dm.document.getHeight()
                    }
                }
                return widest
            }
        });
        utils.dom.$create("element", {
            $: function(id) {
                return document.getElementById(id)
            },
            getActualWidth: function(el) {
                var cssWidth = this.getStyle(el, "width");
                var width = parseInt(cssWidth, 10);
                return !isNaN(width) && (width > 0) && (cssWidth.match(/px/)) ? width : el.clientWidth || el.offsetWidth
            },
            getActualHeight: function(el) {
                var cssHeight = this.getStyle(el, "height");
                var height = parseInt(cssHeight, 10);
                return !isNaN(height) && (height > 0) && (cssHeight.match(/px/)) ? height : el.clientHeight || el.offsetHeight
            },
            getStyle: function(node, prop) {
                var dfv = document.defaultView,
                    style = node.currentStyle || (dfv && dfv.getComputedStyle ? dfv.getComputedStyle(node, null) : null) || node.style;
                return prop && style ? style[prop] : style
            },
            inHierarchy: function(low, high) {
                do {
                    if (low == high) {
                        return true
                    }
                    low = low.parentNode
                } while (low);
                return false
            },
            insertAfter: function(newNode, refNode) {
                var parent = refNode.parentNode;
                return refNode.nextSibling ? parent.insertBefore(newNode, refNode.nextSibling) : parent.appendChild(newNode)
            },
            isOnViewport: function(node) {
                if (!this.isVisible(node)) {
                    return false
                }
                return (this.offset(node).top < this.$parent.viewport.getHeight())
            },
            isVisible: function(node) {
                if (!node) {
                    return false
                }
                while (node && node.tagName && node.tagName.toLowerCase() != "body") {
                    var cs = this.getStyle(node);
                    if (cs["display"] == "none" || cs["visibility"] == "hidden") {
                        return false
                    }
                    node = node.parentNode
                }
                return true
            },
            offset: function(node, ancestor) {
                var x = 0,
                    y = 0,
                    rt = this.$root,
                    dm = rt.utils.dom,
                    dmel = dm.element,
                    b = rt.browser,
                    parent, body = document.body || document.documentElement;
                var pos = "position",
                    abs = "absolute",
                    blw = "borderLeftWidth",
                    btw = "borderTopWidth";
                if (!ancestor) {
                    ancestor = body
                }
                if (node == ancestor) {
                    return {
                        left: 0,
                        top: 0
                    }
                }
                if (node.getBoundingClientRect && !ancestor) {
                    var box = node.getBoundingClientRect();
                    var scrollTop = dm.document.getScrollTop();
                    var scrollLeft = dm.document.getScrollLeft();
                    return {
                        left: parseInt(box.left + scrollLeft, 10),
                        top: parseInt(box.top + scrollTop, 10)
                    }
                }
                var hasAbsolute = dmel.getStyle(node, pos) == abs;
                parent = node;
                while (parent && parent != ancestor) {
                    x += parent.offsetLeft;
                    y += parent.offsetTop;
                    if (!hasAbsolute && dmel.getStyle(parent, pos) == abs) {
                        hasAbsolute = true
                    }
                    if (b.Firefox) {
                        var bl = parseInt(dmel.getStyle(parent, blw), 10) || 0;
                        var bt = parseInt(dmel.getStyle(parent, btw), 10) || 0;
                        x += bl;
                        y += bt;
                        if (parent != node && dmel.getStyle(parent, "overflow") != "visible") {
                            x += bl;
                            y += bt
                        }
                    }
                    parent = parent.offsetParent
                }
                if (b.Safari && hasAbsolute) {
                    x -= body.offsetLeft;
                    y -= body.offsetTop
                }
                if (b.Firefox && !hasAbsolute) {
                    x += parseInt(dmel.getStyle(body, blw), 10) || 0;
                    y += parseInt(dmel.getStyle(body, btw), 10) || 0
                }
                parent = node.parentNode;
                while (parent && parent != ancestor) {
                    if (!b.Opera || (parent.tagName.toLowerCase() != "tr" && dmel.getStyle(parent, "display") != "inline")) {
                        x -= parent.scrollLeft;
                        y -= parent.scrollTop
                    }
                    parent = parent.parentNode
                }
                var bs = dmel.getStyle(body);
                if (ancestor == body && bs.position == abs && bs.left) {
                    x -= parseInt(bs.left, 10) || 0
                }
                return {
                    left: parseInt(x, 10),
                    top: parseInt(y, 10)
                }
            },
            setStyle: function(node, styles) {
                var b = this.$root.browser,
                    key;
                if (!node) {
                    return null
                }
                if (!styles) {
                    styles = {}
                }
                for (key in styles) {
                    if (styles[key] != null) {
                        if ((key == "opacity" || key == "cssFloat") && b.IE) {
                            if (key == "opacity") {
                                node.style["filter"] = "alpha(opacity=" + Math.ceil(parseFloat(styles[key]) * 100) + ")"
                            }
                            if (key == "cssFloat") {
                                node.style["styleFloat"] = styles[key]
                            }
                        } else {
                            node.style[key] = styles[key]
                        }
                    }
                }
                return node
            },
            getData: function(node, dataId) {
                return node.dataset ? node.dataset[dataId] : node.getAttribute("data-" + dataId)
            },
            setData: function(node, dataId, val) {
                node.dataset ? (node.dataset[dataId] = val) : node.setAttribute("data-" + dataId, val)
            }
        });
        utils.dom.$create("document", {
            getHeight: function() {
                var body = document.body,
                    html = document.documentElement;
                return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight)
            },
            getWidth: function() {
                var d = document,
                    m = "clientWidth";
                return Math.max(d.documentElement[m], d.body[m]) || 0
            },
            getScrollTop: function() {
                var d = document,
                    m = "scrollTop";
                return window.pageYOffset || d.documentElement[m] || d.body[m] || 0
            },
            getScrollLeft: function() {
                var d = document,
                    m = "scrollLeft";
                return window.pageXOffset || d.documentElement[m] || d.body[m] || 0
            }
        });
        utils.dom.$create("viewport", {
            getHeight: function() {
                var d = document,
                    de = d.documentElement,
                    m = "clientHeight";
                return window.innerHeight || (de ? (de[m] || d.body[m] || 0) : 0)
            },
            getWidth: function() {
                var d = document,
                    de = d.documentElement,
                    m = "clientWidth";
                return window.innerWidth || (de ? (de[m] || d.body[m] || 0) : 0)
            }
        });
        utils.dom.$create("style", {
            getStylesheet: function() {
                var st = this.$root.settings;
                if (st.stylesheet) {
                    return st.stylesheet
                }
                var cont = document.getElementsByTagName("head");
                cont = cont.length ? cont[0] : document.body;
                var style = document.createElement("style");
                style.type = "text/css";
                return (st.stylesheet = cont.appendChild(style))
            },
            addRule: function(selector, css) {
                var stylesheet = this.getStylesheet();
                if (stylesheet.styleSheet && stylesheet.styleSheet.addRule) {
                    stylesheet.styleSheet.addRule(selector, css)
                } else {
                    if (stylesheet.sheet && stylesheet.sheet.insertRule) {
                        stylesheet.sheet.insertRule([selector, "{", css, "}"].join(""), stylesheet.sheet.cssRules ? stylesheet.sheet.cssRules.length : 0)
                    }
                }
            },
            addClass: function(el, cls) {
                var uta = this.$root.utils.array,
                    classes = el.className.split(/\s+/);
                if (uta.indexOf(classes, cls) == -1) {
                    uta.push(classes, cls)
                }
                el.className = classes.join(" ")
            },
            removeClass: function(el, cls) {
                var classes = el.className.split(/\s+/);
                this.$root.utils.array.discard(classes, cls);
                el.className = classes.join(" ")
            },
            buildHookUnderlineCSS: function(type, color, imp) {
                var bb = "border-bottom:",
                    td = "text-decoration:",
                    n = "none",
                    u = "underline",
                    i = imp ? " !important;" : ";";
                switch (type) {
                case "single":
                    return [bb, "0 ", n, i, td, u, i].join("");
                case "dotted":
                    return [bb, "1px dotted ", color, i, td, n, i].join("");
                case "dashed":
                    return [bb, "1px dashed ", color, i, td, n, i].join("");
                case "none":
                    return [bb, "0 ", n, i, td, n, i].join("");
                default:
                    return [bb, "1px solid ", color, i, td, u, i].join("")
                }
            },
            buildBorderRadius: function(val) {
                var what = this.$root.what,
                    dbs = document.body.style,
                    css = "border-radius:" + val + ";";
                if (what(dbs.borderRadius) == "string") {
                    return css
                } else {
                    if (what(dbs.MozBorderRadius) == "string") {
                        return "-moz-" + css
                    } else {
                        if (what(dbs.WebkitBorderRadius) == "string") {
                            return "-webkit-" + css
                        } else {
                            return ""
                        }
                    }
                }
            },
            buildBoxShadow: function(val) {
                var rt = this.$root,
                    what = rt.what,
                    b = rt.browser,
                    dbs = document.body.style,
                    css = "box-shadow:" + val + ";";
                if (what(dbs.boxShadow) == "string") {
                    return css
                } else {
                    if (what(dbs.MozBoxShadow) == "string") {
                        return "-moz-" + css
                    } else {
                        if (what(dbs.WebkitBoxShadow) == "string" && (!b.Safari || parseFloat(b.AppleWebKit >= 533))) {
                            return "-webkit-" + css
                        } else {
                            return ""
                        }
                    }
                }
            },
            buildTextShadow: function(val) {
                var what = this.$root.what,
                    dbs = document.body.style,
                    css = "text-shadow:" + val + ";";
                if (what(dbs.textShadow) == "string") {
                    return css
                } else {
                    if (what(dbs.MozTextShadow) == "string") {
                        return "-moz-" + css
                    } else {
                        if (what(dbs.WebkitTextShadow) == "string") {
                            return "-webkit-" + css
                        } else {
                            return ""
                        }
                    }
                }
            },
            buildLinearGradient: function(start, end, startColor, endColor) {
                var b = this.$root.browser,
                    css = "background-image:";
                if (parseFloat(b.Firefox) >= 3.6) {
                    return [css, "-moz-linear-gradient(", start, ", ", startColor, ", ", endColor, " ", end, "px);"].join("")
                } else {
                    if (parseFloat(b.AppleWebKit) >= 530) {
                        return [css, "-webkit-gradient(linear, left ", start, ", left ", end, ", from(", startColor, "), to(", endColor, "));"].join("")
                    } else {
                        return ""
                    }
                }
            },
            supports: function(prop) {
                var wh = this.$root.what,
                    dbs = document.body.style,
                    b = this.$root.browser,
                    s = "string",
                    M = "Moz",
                    W = "Webkit",
                    cprop = prop.charAt(0).toUpperCase() + prop.substr(1);
                switch (prop) {
                case "borderRadius":
                case "textShadow":
                    return wh(dbs[prop]) == s ? prop : (wh(dbs[M + cprop]) == s ? M + cprop : (wh(dbs[W + cprop]) == s ? W + cprop : false));
                case "boxShadow":
                    return wh(dbs[prop]) == s ? prop : (wh(dbs[M + cprop]) == s ? M + cprop : ((wh(dbs[W + cprop]) == s && (!b.Safari || parseFloat(b.AppleWebKit >= 533))) ? W + cprop : false));
                case "linearGradient":
                    return (parseFloat(b.Firefox) >= 3.6 || parseFloat(b.AppleWebKit) >= 530) ? prop : false;
                default:
                    return false
                }
            }
        });
        utils.dom.$create("event", {
            disableEventBubbling: function(element, event) {
                if (element.addEventListener) {
                    element.addEventListener(event, this.stop, false)
                } else {
                    if (element.attachEvent) {
                        element.attachEvent("on" + event, this.stop)
                    }
                }
            },
            stop: function(domEvt) {
                domEvt.cancelBubble = true;
                domEvt.returnValue = false;
                if (domEvt.preventDefault) {
                    domEvt.preventDefault()
                }
                if (domEvt.stopPropagation) {
                    domEvt.stopPropagation()
                }
            }
        });
        $root.$create("helpers", {
            getVar: function(v, context) {
                var wl = this.$root.settings.white_label,
                    s1 = "infolink",
                    s2 = s1 + "s",
                    undef = "undefined",
                    what = this.$root.what;
                s1 += "_";
                s2 += "_";
                var val = wl && what(window[wl + "_" + v]) != undef ? window[wl + "_" + v] : what(window[s2 + v]) != undef ? window[s2 + v] : what(window[s1 + v]) != undef ? window[s1 + v] : null;
                if (context) {
                    context[v] = val
                }
                return val
            },
            chanceIntegration: function() {
                var percentage = this.getVar("percentage");
                if (percentage) {
                    percentage = percentage > 100 ? 100 : percentage < 0 ? 0 : percentage;
                    var rnd = Math.random() * 100;
                    if (rnd > percentage) {
                        var integrationNode;
                        try {
                            integrationNode = this.searchForIntegrationComment(document.body)
                        } catch (ex) {
                            integrationNode = null
                        }
                        if (integrationNode) {
                            var js = integrationNode.data;
                            if (document.readyState != "complete" && !this.getVar("ddw")) {
                                document.write(js.substring(14, js.length))
                            }
                        }
                        this.$root.logger.log("Stopping on unlucky chance integration.", this.chanceIntegration);
                        return true
                    }
                }
                return false
            },
            searchForIntegrationComment: function(node) {
                switch (node.nodeType) {
                case 1:
                case 9:
                    for (var i = 0, leni = node.childNodes.length; i < leni; i++) {
                        var resultNode = this.searchForIntegrationComment(node.childNodes[i]);
                        if (resultNode) {
                            return resultNode
                        }
                    }
                    return null;
                case 8:
                    return node.data.length > 15 && node.data.substr(0, 14) == "IL_INTEGRATION" ? node : null;
                default:
                    return null
                }
            },
            isSupportedClient: function() {
                var rt = this.$root,
                    b = rt.browser,
                    sv = rt.settings.supportedClients[b.getName()];
                return sv && b.getVersion(true) >= sv
            },
            setHosts: function() {
                var rt = this.$root,
                    host, url, ver, path = "",
                    re, st = rt.settings,
                    hosts = st.hosts;
                var scripts = document.getElementsByTagName("script"),
                    resources = rt.helpers.getVar("resources");
                if (window.INFOLINKS && window.INFOLINKS._boot) {
                    st.boot = window.INFOLINKS._boot;
                    ver = rt.version = st.boot.version;
                    re = /\/infolinks_main\.js$/
                } else {
                    if (window.$iceboot) {
                        st.boot = window.$iceboot;
                        ver = rt.version = st.boot.version;
                        re = /\/infolinks_main\.js$/
                    } else {
                        re = new RegExp(versionFile + ".js$")
                    }
                }
                if (resources) {
                    resources = resources.replace(/^\w+:\/\//, "");
                    host = resources.substring(0, resources.indexOf("/"));
                    path = resources.substring(resources.indexOf("/")) + "/"
                } else {
                    for (var i = 0, leni = scripts.length; i < leni; i++) {
                        if (scripts[i].src.match(re) != null) {
                            url = scripts[i].src.replace(/^\w+:\/\//, "");
                            host = url.replace(/\/.*/, "");
                            path = url.substring(url.indexOf("/"), url.lastIndexOf("/") + 1);
                            if (!ver) {
                                var parts = path.split("/");
                                rt.version = parts[parts.length - 2]
                            }
                            break
                        }
                    }
                }
                if (host) {
                    hosts.resources = host
                } else {
                    hosts.resources = hosts.resourcesDefault;
                    path = hosts.scriptDefaultPath
                }
                hosts.router = rt.utils.string.toObject(location.search, "il.mt") || rt.helpers.getVar("metro_server") || hosts.resources.replace(/\bresources\b/, "router");
                hosts.thumbnails = hosts.resources.replace(/\bresources\b/, "thumbnails");
                if (ver) {
                    path += ver
                }
                if (path && path.charAt(path.length - 1) != "/") {
                    path += "/"
                }
                hosts.scriptPath = path;
                if (path.indexOf("/src/") != -1) {
                    hosts.src = true
                }
            },
            getCustomerId: function() {
                var rt = this.$root,
                    hp = rt.helpers;
                rt.settings.$extend({
                    customerId: hp.getVar("cid") || hp.getVar("pid") || "null",
                    websiteId: hp.getVar("wsid") || 0,
                    customerUrl: document.location.href
                })
            },
            setDefaultWebsiteDirectives: function(data) {
                var rt = this.$root,
                    key, dwd = {
                        ht: true,
                        qmin: 1,
                        ha: null,
                        hd: null
                    };
                if (!data.wd) {
                    data.wd = {}
                }
                for (key in dwd) {
                    if (rt.what(data.wd[key]) == "undefined") {
                        data.wd[key] = dwd[key]
                    }
                }
            },
            getReferrer: function() {
                var rt = this.$root,
                    docRef = document.referrer,
                    res = {
                        ref: "",
                        refq: ""
                    },
                    refqIndex, ut = rt.utils,
                    uts = ut.string,
                    hasRefc = ut.cookie.has("refc"),
                    simQuery = ut.string.toObject(location.search, "il.sq");
                if (simQuery) {
                    res = {
                        refq: decodeURIComponent(simQuery),
                        ref: ut.base64.decodeBase64("d3d3Lmdvb2dsZS5jb20=")
                    };
                    ut.object.extend(rt.settings, res);
                    return res
                }
                if (docRef) {
                    refqIndex = docRef.indexOf("?");
                    if (refqIndex != -1) {
                        try {
                            var queryObj = uts.toObject(docRef.substring(refqIndex + 1));
                            res.refq = uts.truncate(uts.trim(decodeURIComponent((queryObj.q || queryObj.p || "").replace(/\+/g, " "))), 100, "");
                            res.ref = docRef.substring(0, refqIndex)
                        } catch (ex) {
                            rt.logger.error("Error reading referrer.", this.getReferrer)
                        }
                    } else {
                        if (!hasRefc) {
                            res.ref = docRef
                        }
                    }
                    res.ref = uts.truncate(res.ref.replace(/^\w+:\/\//, ""), 100, "");
                    if (res.refq && !hasRefc) {
                        ut.cookie.set("refc", ut.object.toQueryString(res), 60)
                    }
                }
                if (!res.refq && hasRefc) {
                    ut.object.extend(res, uts.toObject(ut.cookie.get("refc") || ""))
                }
                ut.object.extend(rt.settings, res);
                return res
            },
            normalizeText: function(text) {
                var delimiter = "|";
                text = text.replace(/\.|:|;|<|>|=|\?|\(|\)|\[|\]|\{|\}|,|"|\x201C|\x201D|\x96|\x97|\\|\//g, delimiter);
                text = text.replace(/['`\-]\W/g, delimiter).replace(/\W['`\-]/g, delimiter);
                var re1 = new RegExp("\\s*\\" + delimiter + "+\\s*", "g");
                var re2 = new RegExp("\\" + delimiter + "{2,}", "g");
                text = text.replace(re1, delimiter).replace(re2, delimiter);
                text = text.toLowerCase().replace(/\|/g, "P").replace(/\s/g, "S").replace(/\./g, "D").replace(/'/g, "Q").replace(/\$/g, "M").replace(/\+/g, "A");
                return text
            },
            countWords: function(text) {
                var re = new RegExp("P|S", "g");
                var matched = text.match(re);
                return (matched != null) ? matched.length + 1 : 0
            },
            getMetaContent: function(name, limit) {
                var metas = document.getElementsByTagName("meta");
                for (var i = 0, leni = metas.length; i < leni; i++) {
                    if (metas[i].name && metas[i].name.toLowerCase() == name && metas[i].content) {
                        return this.normalizeText(this.$root.utils.string.truncateToChar(metas[i].content, limit * 1024, " "))
                    }
                }
                return ""
            },
            getSilverlightVersion: function() {
                var plugin = navigator.plugins["Silverlight Plug-In"],
                    version = -1;
                if (plugin) {
                    version = plugin.description
                } else {
                    try {
                        var control = new ActiveXObject("AgControl.AgControl");
                        var checkVersion = 2;
                        while (control.IsVersionSupported(checkVersion + ".0")) {
                            checkVersion++
                        }
                        checkVersion--;
                        version = (checkVersion == 1) ? -1 : checkVersion
                    } catch (ex) {}
                }
                return version
            },
            getTagTexts: function(tags, prop, param) {
                var rt = this.$root,
                    ut = rt.utils,
                    uts = ut.string,
                    uta = ut.array,
                    nodes, res = [],
                    i, leni, j, lenj, val, end = false,
                    charCount = 0,
                    tlm = rt.settings.textLimits.merged,
                    nodesCount = 0,
                    maxNodes = 20;
                if (rt.what(tags) != "array") {
                    tags = [tags]
                }
                for (i = 0, leni = tags.length; i < leni; i++) {
                    nodes = document.getElementsByTagName(tags[i]);
                    for (j = 0, lenj = nodes.length; j < lenj; j++) {
                        val = prop == "text" ? (nodes[j].textContent || nodes[j].innerText || "") : prop == "alt" ? nodes[j].alt : "";
                        if (!val) {
                            continue
                        }
                        val = uts.truncateToChar(val, tlm[param].i, " ");
                        nodesCount++;
                        if (charCount + val.length > tlm[param].t * 1024 || nodesCount >= maxNodes) {
                            end = true;
                            break
                        }
                        uta.push(res, val);
                        charCount += val.length
                    }
                    if (end) {
                        break
                    }
                }
                return this.normalizeText(res.join("|"))
            },
            processImpressionResponse: function(response) {
                var rt = this.$root,
                    hp = rt.helpers,
                    component;
                if (rt.what(response) != "object") {
                    return null
                }
                if (response.components) {
                    response.prs = {};
                    for (component in response.components) {
                        response.prs[component.charAt(0)] = response.components[component]
                    }
                    delete response.components
                }
                hp.normalizeSentenceLists(response);
                if (response.messages) {
                    hp.findMaxBidCount(response)
                }
                return response
            },
            findMaxBidCount: function(response) {
                var prod, msg, i, maxBDC = 0;
                for (prod in response.prs) {
                    msg = response.prs[prod].messages;
                    if (!msg) {
                        continue
                    }
                    for (i in msg) {
                        if (msg[i].bdc > maxBDC) {
                            maxBDC = msg[i].bdc
                        }
                    }
                }
                this.$root.settings.bdc = maxBDC
            },
            normalizeSentenceLists: function(response) {
                var prs = response.prs,
                    prod, ut = this.$root.utils,
                    numOfSentences = ut.object.keys(response.sentences).length;
                for (prod in prs) {
                    if (numOfSentences && prs[prod].sentences.length == 1 && prs[prod].sentences[0] == "ALL") {
                        prs[prod].sentences = ut.array.range(0, numOfSentences - 1)
                    }
                }
            },
            getCustomerBehavior: function(str) {
                var rt = this.$root,
                    v, key, i, leni, res = {};

                function uc() {
                    return arguments[1].toUpperCase()
                }
                var arr = rt.utils.string.qw(str);
                for (i = 0, leni = arr.length; i < leni; i++) {
                    v = rt.helpers.getVar(arr[i]);
                    if (v != null) {
                        key = arr[i].replace(/_(\w)/g, uc);
                        res[key] = v
                    }
                }
                return res
            },
            getImpressionBehavior: function() {
                var rt = this.$root,
                    st = rt.settings,
                    uto = rt.utils.object,
                    bi = rt.comm.settings.responses.impression.behavior_imp || {};
                uto.renamePorpery(bi, "lc", "linkColor");
                uto.renamePorpery(bi, "st", "bubbleShowDelay");
                uto.renamePorpery(bi, "rw", "adsReuseWindow");
                uto.renamePorpery(bi, "bd", "bubbleDirection");
                st.behavior.impression = bi
            },
            renameBehaviorProperties: function(o) {
                var rt = this.$root,
                    uto = rt.utils.object;
                uto.renamePorpery(o, "hc", "highlightCount");
                uto.renamePorpery(o, "lc", "linkColor");
                uto.renamePorpery(o, "du", "doubleUnderline");
                uto.renamePorpery(o, "st", "bubbleShowDelay");
                uto.renamePorpery(o, "rw", "adsReuseWindow");
                uto.renamePorpery(o, "si", "simanitIcon");
                uto.renamePorpery(o, "bd", "bubbleDirection");
                uto.renamePorpery(o, "t", "theme");
                uto.renamePorpery(o, "ln", "lines");
                return o
            },
            sanitize: function(data, sanitizer, strict) {
                var rt = this.$root;
                for (var key in data) {
                    if (strict && rt.what(sanitizer[key]) == "undefined") {
                        delete data[key];
                        continue
                    }
                    switch (sanitizer[key]) {
                    case "int":
                        data[key] = parseInt(data[key], 10) || 0;
                        break;
                    case "bool":
                        data[key] = data[key] == "false" ? false : !! data[key];
                        break;
                    case "color":
                        data[key] = this.validateColorValue(data[key] || "");
                        break;
                    case "multiColor":
                        data[key] = this.validateMultiColorValue(data[key] || "");
                        break;
                    case "str":
                        data[key] = data[key] && data[key].toString ? data[key].toString() : data[key];
                        break;
                    case "node":
                        data[key] = data[key] && data[key].tagName ? data[key] : null;
                        break;
                    default:
                        if (rt.what(sanitizer[key]) == "array") {
                            if (rt.utils.array.indexOf(sanitizer[key], data[key]) == -1) {
                                data[key] = sanitizer[key][0]
                            }
                        }
                    }
                }
                return data
            },
            validateColorValue: function(color) {
                return (color && color.match(/^#?[0-9a-fA-F]{6}$/) != null) ? color.charAt(0) == "#" ? color : "#" + color : "#000000"
            },
            validateMultiColorValue: function(colorsStr) {
                var rt = this.$root,
                    colors = colorsStr.split(","),
                    newColors = [],
                    i, leni;
                for (i = 0, leni = colors.length; i < leni; i++) {
                    if (rt.what(colors[i]) == "string") {
                        rt.utils.array.push(newColors, this.validateColorValue(colors[i]))
                    }
                }
                return (newColors.join(","))
            },
            createBaseClasses: function() {
                var rt = this.$root,
                    dmst = rt.utils.dom.style,
                    baseClass = rt.settings.baseClass;
                var baseCSS = "margin:0;padding:0;border:0;outline:0;font:normal normal normal 13px trebuchet MS,Arial,sans-serif;vertical-align:baseline;background:transparent;list-style:none;text-decoration:none;text-align:left;float:none;";
                dmst.addRule("." + baseClass, baseCSS);
                dmst.addRule("." + baseClass + " *", baseCSS);
                dmst.addRule("a." + baseClass + ":hover", "background-color:transparent !important;")
            },
            getHookData: function(hookId) {
                var data = this.$root.comm.settings.responses.getads;
                return data ? data[hookId] || null : null
            },
            setHookData: function(hookId, data) {
                var res = this.$root.comm.settings.responses;
                if (!res.getads) {
                    res.getads = {}
                }
                res.getads[hookId] = data
            },
            clearHookData: function(hookId) {
                var data = this.$root.comm.settings.responses.getads;
                if (data && data[hookId]) {
                    data[hookId] = null
                }
            },
            createHook: function(hookId, sentence, node, fontSize, context, prodCode, prodName, hasBubble, instance) {
                var rt = this.$root,
                    st = rt.settings,
                    sn = context.settings.sentences;
                var hook = {
                    id: hookId,
                    fontSize: fontSize,
                    node: node,
                    parentNode: node.parentNode,
                    rendered: true,
                    sentence: sentence,
                    prod: prodCode,
                    type: prodName,
                    hovered: false,
                    currentAdIndex: 0,
                    instance: instance
                };
                st.hooksMap[hook.id] = hook;
                if (!sn[sentence]) {
                    sn[sentence] = {
                        hooks: [],
                        rendered: 0
                    }
                }
                rt.utils.array.push(sn[sentence].hooks, hook);
                sn[sentence].rendered++;
                if (hasBubble) {
                    hook.bubble = rt.utils.object.clone(rt.bubble.settings.base);
                    rt.helpers.bindHookEvents(hook)
                }
                return hook
            },
            getHookBehavior: function(hookId) {
                var rt = this.$root,
                    st = rt.settings,
                    hook = st.hooksMap[hookId],
                    prods = rt.products;
                switch (hook.prod) {
                case "i":
                    return prods.intext.settings.behavior.merged;
                case "t":
                    return prods.intag.settings.behavior.merged;
                case "s":
                case "o":
                    return hook.instance.behavior;
                case "f":
                    return prods.inframe.settings.behavior.merged;
                default:
                    return {}
                }
            },
            bindHookEvents: function(hook) {
                var rt = this.$root,
                    ed = rt.event.dom,
                    rtb = rt.bubble,
                    node = hook.node,
                    data = {
                        hookId: hook.id
                    };
                ed.bind(node, {
                    event: "dblclick",
                    listener: rtb.hookDblClick
                });
                ed.bind(node, {
                    event: "mouseenter",
                    data: data,
                    listener: rtb.hookMouseover
                });
                ed.bind(node, {
                    event: "mouseleave",
                    data: data,
                    listener: rtb.hookMouseout
                });
                ed.bind(node, {
                    event: "click",
                    data: data,
                    listener: rtb.hookClick
                })
            },
            getHookSD: function(hookId) {
                var rt = this.$root,
                    st = rt.settings,
                    hook = st.hooksMap[hookId],
                    imp;
                if (!hook) {
                    return {}
                }
                imp = hook.updater ? hook.updater.impression : rt.comm.settings.responses.impression;
                return rt.utils.object.extend({
                    sdata: hook.sentence,
                    scs: imp.sentences[hook.sentence]
                }, imp.rauth)
            },
            setAdThumbnail: function(ad) {
                if (ad.template == "text" && !ad.thumbURL) {
                    ad.thumbURL = ["http://", this.$root.settings.hosts.thumbnails, "/thumbnail.jpg?domain=", ad.displayedURL].join("")
                }
            },
            hitTrackerURL: function(trackerURL) {
                var rt = this.$root;
                if (rt.what(trackerURL) != "array") {
                    trackerURL = [trackerURL]
                }
                for (var i = 0; i < trackerURL.length; i++) {
                    rt.utils.dom.createDOMFragment({
                        tag: "img",
                        parent: document.body,
                        attributes: {
                            src: trackerURL[i]
                        },
                        style: {
                            display: "none"
                        }
                    })
                }
            },
            mapUnhoverableAreas: function() {
                var rt = this.$root,
                    st = rt.settings,
                    ut = rt.utils,
                    dmel = ut.dom.element,
                    b = rt.browser;
                var embeds = document.getElementsByTagName("embed");
                var objects = document.getElementsByTagName("object");
                var arr = ut.array.concat(embeds, objects);
                st.unhoverableAreas = [];
                for (var i = 0; i < arr.length; i++) {
                    if (!dmel.isVisible(arr[i])) {
                        continue
                    }
                    if (arr[i].tagName.toLowerCase() == "embed") {
                        if ((arr[i].getAttribute("wmode") || "").toLowerCase() == "transparent") {
                            continue
                        }
                    } else {
                        var params = arr[i].getElementsByTagName("param"),
                            hasWmode = false;
                        for (var j = 0, lenj = params.length; j < lenj; j++) {
                            if (params[j].name == "wmode" && params[j].value.toLowerCase() == "transparent") {
                                hasWmode = true;
                                break
                            }
                        }
                        if (hasWmode) {
                            continue
                        }
                    }
                    if (arr[i].tagName.toLowerCase() == "embed" && arr[i].parentNode.tagName.toLowerCase() == "object") {
                        if (b.IE) {
                            continue
                        } else {
                            ut.array.discard(arr, arr[i].parentNode)
                        }
                    }
                    var width = parseInt(arr[i].width, 10) || arr[i].offsetWidth || 0;
                    var height = parseInt(arr[i].height, 10) || arr[i].offsetHeight || 0;
                    if (!width || !height) {
                        continue
                    }
                    var pos = dmel.offset(arr[i]);
                    ut.array.push(st.unhoverableAreas, [pos.left, pos.top, pos.left + width, pos.top + height])
                }
            },
            hasSpecialTags: function(content, tags) {
                content = content.toLowerCase();
                if ((tags == "all" || tags == "script") && (content.indexOf("<scr") != -1 || content.indexOf("document.write") != -1)) {
                    return true
                }
                return (tags == "all" || tags == "iframe") && content.indexOf("<ifr") != -1
            },
            parseTokens: function(hook, content) {
                var rt = this.$root,
                    data = this.getHookData(hook.id),
                    ad = data.ads[hook.currentAdIndex];
                if (!content) {
                    content = ad.content
                }
                if (ad.template == "html" || ad.template == "external") {
                    var re = /@start@.*?@end@/,
                        match, matchUrl, url, redirectUrl, encoded;
                    while ((match = content.match(re)) != null) {
                        matchUrl = match[0];
                        url = matchUrl.substring(7, matchUrl.length - 5);
                        redirectUrl = rt.comm.getRedirectUrl(hook, url, "onWin");
                        content = content.replace(re, redirectUrl)
                    }
                    re = /@encode@.*?@encode@/;
                    while ((match = content.match(re)) != null) {
                        encoded = encodeURIComponent(match[0].substring(8, match[0].length - 8));
                        content = content.replace(re, encoded)
                    }
                }
                if (ad.contentType == "javascript") {
                    content = ['<script type="text/javascript">', content, "<\/script>"].join("")
                }
                return content
            },
            setActualTemplate: function(ad) {
                ad.actualTemplate = (ad.echo || (ad.template == "html" || ad.template == "external") && ad.content && this.hasSpecialTags(ad.content, "script")) ? "iframe" : ad.template
            },
            getPlatform: function() {
                var rt = this.$root,
                    gen = document.getElementsByName("generator"),
                    i, leni, val, undef = "undefined";
                for (i = 0, leni = gen.length; i < leni; i++) {
                    val = gen[i].getAttribute("content");
                    if (!val) {
                        continue
                    }
                    if (val.indexOf("WordPress") > -1) {
                        return "wdp"
                    }
                    if (val.indexOf("Joomla") > -1) {
                        return "jml"
                    }
                    if (val.indexOf("blogger") > -1) {
                        return "bsp"
                    }
                    if (val.indexOf("vBulletin") > -1) {
                        return "vbt"
                    }
                    if (val.indexOf("phpBB") > -1) {
                        return "pbb"
                    }
                    if (val.indexOf("weebly") > -1) {
                        return "wbl"
                    }
                    if (val.indexOf("tumblr") > -1) {
                        return "tbr"
                    }
                }
                if (rt.what(window["Drupal"]) != undef) {
                    return "drl"
                }
                if (rt.what(window["Joomla"]) != undef) {
                    return "jml"
                }
                if (rt.what(window["blogger"]) != undef) {
                    return "jml"
                }
                if (rt.what(window["blogger_blog_id"]) != undef) {
                    return "jml"
                }
                if (rt.utils.dom.filterByClass("contentpaneopen").length) {
                    return "jml"
                }
                if (rt.what(window["vBulletin"]) != undef) {
                    return "vbt"
                }
                if (rt.what(window["phpbb"]) != undef) {
                    return "pbb"
                }
                if (rt.what(window["positionWeeblyFooter"]) != undef) {
                    return "wbl"
                }
                if (rt.what(window["Tumblr"]) != undef) {
                    return "tbr"
                }
                if (rt.what(window["ipb"]) != undef) {
                    return "ipb"
                }
                var links = document.getElementsByTagName("link"),
                    href;
                for (i = 0, leni = links.length; i < leni; i++) {
                    href = links[i].getAttribute("href");
                    if (!href) {
                        continue
                    }
                    if (href.indexOf("wp-content") > -1) {
                        return "wdp"
                    }
                    if (href.indexOf("support-files") > -1) {
                        return "sbi"
                    }
                }
                return ""
            },
            getSiteLanguage: function() {
                if (this.getSiteLanguage.lang) {
                    return this.getSiteLanguage.lang
                }
                var lang = "en";
                return this.getSiteLanguage.lang = lang
            },
            translate: function(key) {
                var tr = this.$root.settings.translations;
                return tr[key] ? tr[key][this.getSiteLanguage()] : key
            },
            getEchoForm: function(content, iframeName, formId, formCls) {
                var rt = this.$root,
                    st = rt.settings,
                    echo = "http://" + st.hosts.router + "/echo.htm";
                var html = '<form 			<% if (formId){ %>id="<%= formId %>"<% } %> <% if (formCls){ %>class="<%= formCls %>"<% } %> method="post" action="<%= echo %>" target="<%= iframeName %>" accept-charset="utf-8" style="display:none;">				<input type="hidden" name="echo" value="<%= encodeURIComponent(content.split(\'\').reverse().join(\'\')) %>" />				<input type="hidden" name="pid" value="<%= cid %>" />				<input type="hidden" name="wsid" value="<%= wsid %>" />				<input type="hidden" name="jsv" value="<%= jsv %>" />			</form>';
                return rt.utils.VeST(html, {
                    echo: echo,
                    content: content,
                    iframeName: iframeName,
                    formId: formId,
                    formCls: formCls,
                    cid: st.customerId,
                    wsid: st.websiteId,
                    jsv: rt.version,
                    nocache: rt.utils.number.next("echo")
                })
            }
        });
        var comm = $root.$create("comm", {
            loadScript: function(url, params, event, data) {
                var $comm = this,
                    rt = this.$root,
                    qstr = "",
                    qarr = [],
                    cbfunc;
                if (rt.what(params) == "object") {
                    for (var key in params) {
                        rt.utils.array.push(qarr, (qarr.length || url.indexOf("?") != -1) ? "&" : "?", encodeURIComponent(key), "=", encodeURIComponent(params[key]))
                    }
                    qstr = qarr.join("")
                } else {
                    if (rt.what(params) == "string") {
                        qstr = params
                    }
                }
                url += qstr;
                if (url.match(/^\w+:\/\//) == null) {
                    url = "http://" + url
                }
                if (event) {
                    cbfunc = function(url) {
                        var rt = $comm.$root,
                            ls = $comm.loadedScripts;
                        if (ls[url]) {
                            return true
                        }
                        ls[url] = true;
                        if (rt.what(data) == "undefined") {
                            rt.event.fire(event)
                        } else {
                            rt.event.fire(event, data)
                        }
                    }
                } else {
                    cbfunc = function() {
                        $comm.loadedScripts[url] = true
                    }
                }
                if (this.loadedScripts[url]) {
                    cbfunc()
                } else {
                    this.loadedScripts[url] = false;
                    var script = document.createElement("script");
                    script.type = "text/javascript";
                    script.charset = "UTF-8";
                    script.onreadystatechange = function() {
                        if (/complete|loaded/.test(this.readyState) && !$comm.loadedScripts[url]) {
                            cbfunc(url)
                        }
                    };
                    script.onload = function() {
                        cbfunc(url)
                    };
                    script.src = url;
                    var container = document.getElementsByTagName("head");
                    container = container[0] || document.body;
                    script = container.appendChild(script);
                    return true
                }
            },
            supportsCORS: function() {
                var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : null;
                return this.settings.cors = (xhr && "withCredentials" in xhr)
            },
            sendRequest: function(options, beforeSend) {
                var rt = this.$root,
                    b = rt.browser,
                    st = rt.settings,
                    cst = this.settings,
                    uta = rt.utils.array,
                    hasBeforeSend = rt.what(beforeSend) == "function",
                    ptxt, removeParams, totalLength, ptxtMaxLength, i, leni;
                var urlCharLimit = {
                    IE: 2048,
                    Other: 8192
                };
                if (b.iPhone || b.iPad) {
                    var inputs = [],
                        formContainer;
                    if (hasBeforeSend) {
                        beforeSend.call(rt, "i")
                    }
                    for (var key in options.params) {
                        uta.push(inputs, {
                            tag: "input",
                            type: "hidden",
                            attributes: {
                                name: key
                            },
                            value: options.params[key]
                        })
                    }
                    formContainer = document.getElementById("IL_FORM_CONT");
                    if (formContainer) {
                        var parent = formContainer.parentNode;
                        parent.removeChild(formContainer)
                    }
                    formContainer = rt.utils.dom.createDOMFragment({
                        tag: "div",
                        parent: document.body,
                        id: "IL_FORM_CONT",
                        style: {
                            display: "none"
                        },
                        children: [{
                            tag: "form",
                            id: "IL_FORM",
                            children: inputs,
                            attributes: {
                                method: options.method,
                                action: options.url,
                                target: "IL_FRAME"
                            }
                        }, {
                            tag: "div",
                            id: "IL_FRAME_CONT",
                            innerHTML: '<iframe id="IL_FRAME" name="IL_FRAME" src="' + st.blankURL + '" width="1" height="1" frameborder="0" scrolling="no"></iframe>'
                        }]
                    });
                    if (formContainer) {
                        document.getElementById("IL_FORM").submit()
                    }
                } else {
                    if (cst.mode == "cors") {
                        if (hasBeforeSend) {
                            beforeSend.call(rt, "a")
                        }
                        this.sendAjaxRequest(options)
                    } else {
                        if (cst.mode == "messaging") {
                            if (cst.messagingReady) {
                                if (hasBeforeSend) {
                                    beforeSend.call(rt, "a")
                                }
                                var message = rt.utils.object.stringify({
                                    action: "ajax",
                                    data: options
                                });
                                this.sendMessage(message)
                            } else {
                                rt.utils.array.push(this.pendingRequests, [options, beforeSend])
                            }
                        } else {
                            if (cst.mode == "flash") {
                                if (b.IE) {
                                    if (hasBeforeSend) {
                                        beforeSend.call(rt, "f")
                                    }
                                    this.flash.embedIE(options)
                                } else {
                                    if (this.flash.flashLoadAmount == 10 && this.flash.flashElement) {
                                        if (hasBeforeSend) {
                                            beforeSend.call(rt, "f")
                                        }
                                        this.flash.sendURLRequest(options.url, options.method, options.params, options.onSuccess, options.onSuccess, 1)
                                    } else {
                                        rt.utils.array.push(this.pendingRequests, [options, beforeSend])
                                    }
                                }
                            } else {
                                if (hasBeforeSend) {
                                    beforeSend.call(rt, "s")
                                }
                                ptxt = options.params.ptxt;
                                removeParams = rt.utils.string.qw("ptxt plinks pimgs phdrs pdesc page_keyw ptitle"), i, leni = removeParams.length;
                                for (i = 0, leni = removeParams.length; i < leni; i++) {
                                    options.params[removeParams[i]] = ""
                                }
                                rt.utils.object.clean(options.params);
                                totalLength = rt.utils.object.toQueryString(options.params).length + options.url.length + document.location.href.length + navigator.userAgent.length + document.cookie.length + 400;
                                ptxtMaxLength = urlCharLimit[b.IE ? "IE" : "Other"] - totalLength;
                                if (ptxtMaxLength < 0) {
                                    rt.logger.error("Request too long for GET.", this.sendRequest);
                                    return
                                }
                                options.params.ptxt = (ptxtMaxLength > 0) ? ptxt.substring(0, ptxtMaxLength) : "";
                                options.params.twnum = rt.helpers.countWords(options.params.ptxt);
                                this.loadScript(options.url, options.params)
                            }
                        }
                    }
                }
            },
            sendMessage: function(message) {
                var rt = this.$root,
                    commFrame = rt.utils.dom.element.$("iceCommFrame");
                if (commFrame && commFrame.contentWindow) {
                    commFrame.contentWindow.postMessage(message, "*")
                } else {
                    rt.logger.error("Could not get comm frame.", this.sendMessage)
                }
            },
            receiveMessage: function(event) {
                var de = event.domEvent,
                    message = de.data,
                    data, rt = this.$root,
                    lg = rt.logger;
                var origin = (de.origin || de.domain).replace("http://", "");
                if (origin.indexOf(this.settings.responses.gsd.rs) != 0) {
                    return
                }
                if (message.charAt(0) == "(" && message.charAt(message.length - 1) == ")") {
                    message = message.substring(1, message.length - 1)
                }
                try {
                    data = rt.what(window.JSON) != "undefined" && window.JSON.parse ? window.JSON.parse(message) : eval("(" + message + ")")
                } catch (ex) {
                    lg.error("Data parsing failed: " + ex.message + ". message:" + message + " ", this.receiveMessage);
                    return
                }
                if (data.action == "error") {
                    lg.error(data.data, this.receiveMessage)
                } else {
                    if (data.action == "event") {
                        rt.event.fire(data.type, data.data)
                    } else {
                        if (!data.action) {
                            rt.event.fire("afterImpression", data)
                        }
                    }
                }
            },
            sendAjaxRequest: function(o) {
                var rt = this.$root,
                    xhr, xdr, xhrc = window.XMLHttpRequest ? new XMLHttpRequest() : null;
                if (rt.what(o) != "object") {
                    return null
                }
                if (xhrc && "withCredentials" in xhrc) {
                    xhr = xhrc
                } else {
                    if (window.XDomainRequest) {
                        xdr = new XDomainRequest()
                    }
                }
                if (!xhr && !xdr) {
                    return null
                }
                if (xhr) {
                    xhr.onreadystatechange = function() {
                        if (!req || !req.xhr) {
                            return
                        }
                        if (req.xhr.readyState == 4) {
                            reqComplete(req)
                        }
                    }
                } else {
                    xdr.onload = function() {
                        reqComplete(req)
                    }
                }
                function reqComplete(req) {
                    if (req.done || req.aborted) {
                        return
                    }
                    var o = req.xhr || req.xdr;
                    req.done = true;
                    if (req.xdr || req.xhr.status == 200) {
                        if (req.onSuccess) {
                            rt.comm.handleAjaxResponse({
                                action: "event",
                                type: req.onSuccess,
                                data: o.responseText
                            })
                        }
                    } else {
                        if (req.xdr || req.xhr.status != 0) {
                            rt.comm.handleAjaxResponse({
                                action: "error",
                                data: "Ajax request failed."
                            })
                        }
                    }
                }
                function reqTimeout() {
                    if (!req || req.done) {
                        return
                    }
                    var o = req.xhr || req.xdr;
                    req.aborted = true;
                    o.abort();
                    rt.comm.handleAjaxResponse({
                        action: "error",
                        data: "Ajax request timed out."
                    });
                    if (req.xhr) {
                        delete req.xhr["onreadystatechange"]
                    }
                }
                function process() {
                    var o = req.xhr || req.xdr,
                        params = req.params || {},
                        method = req.method || "GET",
                        url = req.url || window.location.href;
                    req.queryString = (req.queryString ? req.queryString + "&" : "") + rt.utils.object.toQueryString(params, true).substr(1);
                    if (req.method == "GET" && req.queryString) {
                        req.url += ((req.url.indexOf("?") > -1) ? "&" : "?") + req.queryString
                    }
                    if (req.timeout > 0) {
                        setTimeout(reqTimeout, req.timeout)
                    }
                    if (req.xhr) {
                        req.xhr.open(method, url, true)
                    } else {
                        req.xdr.open(method, url)
                    }
                    if (method == "POST") {
                        if (req.xhr && rt.what(req.xhr.setRequestHeader) == "function") {
                            req.xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
                        }
                        o.send(req.queryString)
                    } else {
                        o.send()
                    }
                }
                var req = rt.utils.object.extend({
                    xhr: xhr,
                    xdr: xdr,
                    process: process
                }, o);
                req.process();
                return req
            },
            handleAjaxResponse: function(response) {
                var rt = this.$root,
                    data;
                if (response.action == "error") {
                    rt.logger.error(response.data, this.handleAjaxResponse)
                } else {
                    if (response.action == "event") {
                        try {
                            data = rt.what(window.JSON) != "undefined" && window.JSON.parse ? window.JSON.parse(response.data) : eval("(" + response.data + ")")
                        } catch (ex) {
                            rt.logger.error("Data parsing failed: " + ex.message, this.handleAjaxResponse);
                            return
                        }
                        rt.event.fire(response.type, data)
                    }
                }
            },
            getRedirectUrl: function(hook, url, clickedOn) {
                var rt = this.$root,
                    st = rt.settings,
                    ut = rt.utils,
                    uto = ut.object,
                    data = rt.helpers.getHookData(hook.id),
                    ad = data.ads[hook.currentAdIndex];
                if (ad.noClickPrefix) {
                    return url || ad.redirectURL
                }
                var now = ut.date.now();
                var params = uto.clean(uto.extend({
                    rid: this.settings.responses.gsd.rid,
                    bdc: hook.bdc,
                    midx: hook.midx || hook.currentAdIndex,
                    rts: now,
                    vt: ut.timer.poll("adView" + hook.id),
                    clk_t: clickedOn,
                    jsv: rt.version,
                    prod_t: hook.prod || "",
                    tcln: hook.tcln || "",
                    pst: hook.pst || "",
                    cv: hook.viewed ? 1 : 0,
                    refq: st.impression.params.refq || "",
                    ifip: st.ifip || ""
                }, rt.helpers.getHookSD(hook.id)));
                params.rurl = url || ad.redirectURL || "";
                var serverClickUrl = ["http://", this.settings.responses.gsd.rs, "/action/clk.htm"].join("");
                return serverClickUrl + uto.toQueryString(params, true)
            }
        }, {
            settings: {
                responses: {},
                errorReportingUrl: "http://cel.infolinks.com/"
            },
            loadedScripts: {},
            pendingRequests: []
        }, true);
        comm.$create("flash", {
            getSwfUrl: function() {
                return ["http://", this.$root.settings.hosts.resources, "/flash/ic5.swf"].join("")
            },
            embed: function() {
                var rt = this.$root,
                    swf = this.getSwfUrl();
                rt.utils.timer.start("tmr_fsh");
                rt.utils.dom.createDOMFragment({
                    tag: "div",
                    parent: document.body,
                    style: {
                        display: "block",
                        position: "absolute",
                        top: "1px",
                        left: "1px",
                        width: "1px",
                        height: "1px"
                    },
                    innerHTML: ['<embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="', swf, '" width="1" height="1" wmode="transparent" name="ilfc" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>'].join("")
                })
            },
            embedIE: function(options) {
                var rt = this.$root,
                    st = rt.settings,
                    ut = rt.utils,
                    swf = this.getSwfUrl(),
                    id = "ilfc" + rt.utils.number.next("flashEmbedConter");
                this.requests[options.url] = {
                    request: ut.object.extend(options, {
                        open: false,
                        complete: false
                    })
                };
                var flashVars = ut.object.toQueryString({
                    url: options.url,
                    method: options.method,
                    success: options.onSuccess,
                    error: options.onSuccess
                }, true).substr(1);
                if (options.params) {
                    flashVars += ["&", ut.object.toQueryString(options.params, true).substr(1)].join("")
                }
                window[id + "_DoFSCommand"] = function(command, args) {
                    var response, func;
                    try {
                        func = eval(command);
                        response = eval(decodeURIComponent(args))
                    } catch (ex) {
                        rt.logger.error("Error evaluating response.", this);
                        return
                    }
                    func.call(func.$parent, response)
                };
                rt.utils.timer.start("tmr_fsh");
                ut.dom.createDOMFragment({
                    tag: "div",
                    parent: document.body,
                    style: {
                        display: "block",
                        position: "absolute",
                        top: "1px",
                        left: "1px",
                        width: "1px",
                        height: "1px"
                    },
                    innerHTML: ['<object id="', id, '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" width="1" height="1" align="middle">', '<param name="movie" value="', swf, '" />', '<param name="quality" value="high" />', '<param name="allowScriptAccess" value="always" />', '<param name="wmode" value="transparent" />', '<param name="flashvars" value="environment=IE&pcode=', st.impression.pcode, "&", flashVars, '" />', "</object>", "<sc", "ript event=FSCommand(command,args) for=", id, ">\n ", id, "_DoFSCommand(command, args)</sc", "ript>"].join("")
                });
                this.flashLoadComplete()
            },
            flashLoadUpdate: function(loaded) {
                this.flashLoadAmount = loaded
            },
            flashLoadComplete: function() {
                var rt = this.$root;
                this.flashLoadAmount = 10;
                this.flashElement = window["ilfc" + rt.utils.number.get("flashEmbedConter")] || document["ilfc"];
                rt.utils.timer.stop("tmr_fsh");
                while (this.$parent.pendingRequests.length) {
                    this.$parent.sendRequest.apply(this.$parent, rt.comm.pendingRequests.shift())
                }
            },
            sendURLRequest: function(url, method, params, success, error, contextReferenceKey) {
                this.requests[url] = {
                    request: {
                        url: url,
                        method: method,
                        params: params,
                        success: success,
                        error: error,
                        contextReferenceKey: contextReferenceKey,
                        open: false,
                        complete: false
                    }
                };
                this.flashElement.sendURLRequest(url, method, params, success, error, contextReferenceKey)
            },
            requestOpenHandler: function(responseObj) {
                this.requests[responseObj.url].request.open = true
            },
            requestCompleteHandler: function(response) {
                var rt = this.$root,
                    data, request = this.requests[response.url];
                if (!request) {
                    rt.logger.error("Missing Request Object");
                    return
                }
                request.request.complete = true;
                request.response = response;
                if (response.success) {
                    var event = response.success;
                    try {
                        data = eval(response.data.replace(/^data=/, ""))
                    } catch (e) {
                        rt.logger.error("Error Evaluating Response.");
                        return
                    }
                    rt.event.fire(event, data)
                }
            },
            requestError: function(response) {
                this.requests[response.url].response = response;
                if (response.error) {
                    var event = response.error;
                    this.$root.event.fire(event, response)
                }
            },
            getFlashVersion: function() {
                var flashVer = -1,
                    swStr = "Shockwave Flash",
                    np = navigator.plugins,
                    swp, b = this.$root.browser;
                if (np && np.length) {
                    swp = np[swStr + " 2.0"] || np[swStr];
                    if (swp) {
                        flashVer = parseFloat(swp.description.replace(/[a-z ]+([0-9\.]+)[a-z ]+/i, "$1."))
                    }
                }
                if (flashVer == -1 && b.IE && b.Windows) {
                    var axo, vnum = [".9", ".7", ".6", ".3", ".3", ""],
                        vstr = [null, null, "WIN 6,0,21,0", null, "WIN 3,0,18,0", "WIN 2,0,0,11"];
                    for (var i = 0, leni = vnum.length; i < leni; i++) {
                        try {
                            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash" + vnum[i]);
                            flashVer = vstr[i] ? vstr[i] : axo.GetVariable("$version")
                        } catch (e) {}
                        if (flashVer != -1) {
                            break
                        }
                    }
                    if (flashVer != -1) {
                        flashVer = parseFloat(flashVer.replace(/^[a-z ]+/i, "").replace(/,/g, "."))
                    }
                }
                return flashVer
            }
        }, {
            requests: {}
        }, false);
        comm.bind({
            event: "initComm",
            listener: {
                init: function() {
                    var rt = this.$root,
                        cst = this.settings,
                        b = rt.browser;
                    cst.flashVersion = this.flash.getFlashVersion();
                    if ((b.iPhone || b.iPad) && window.postMessage) {
                        cst.mode = "formsubmit";
                        rt.event.dom.bind(window, {
                            event: "message",
                            listener: this.receiveMessage
                        })
                    } else {
                        if (this.supportsCORS()) {
                            cst.mode = "cors"
                        } else {
                            if (window.postMessage) {
                                cst.mode = "messaging";
                                cst.messagingReady = false;
                                rt.event.dom.bind(window, {
                                    event: "message",
                                    listener: this.receiveMessage
                                });
                                rt.utils.dom.createDOMFragment({
                                    tag: "div",
                                    style: {
                                        display: "none"
                                    },
                                    parent: document.body,
                                    innerHTML: ['<iframe id="iceCommFrame" src="http://', cst.responses.gsd.rs, '/comm2.htm" width="1" height="1" frameborder="0" scrolling="no"></iframe>'].join("")
                                })
                            } else {
                                if (cst.flashVersion >= 9) {
                                    cst.mode = "flash";
                                    if (!rt.browser.IE) {
                                        this.flash.embed()
                                    }
                                } else {
                                    cst.mode = "unsupported";
                                    rt.logger.error("Unsupported comm mode", this.init)
                                }
                            }
                        }
                    }
                }
            }
        });
        comm.bind({
            event: "getAds",
            listener: {
                getAds: function(event) {
                    var rt = this.$root,
                        uto = rt.utils.object,
                        et = rt.externalTags,
                        hook = rt.settings.hooksMap[event.data.hookId];
                    if (et.settings.oldAPI && /s|o/.test(hook.prod)) {
                        rt.event.fire("sendGetAds", event.data);
                        return
                    }
                    if (et.settings.oldAPI && uto.keys(et.settings.tags).length) {
                        var emds = uto.keys(et.settings.tags);
                        var tag = et.settings.tags[emds[0]];
                        var doExternal = Math.ceil(Math.random() * 100) <= 33;
                        if (tag.ads[0].prs[hook.prod] && doExternal && !et.settings.didExternal) {
                            et.settings.didExternal = true;
                            delete et.settings.tags[emds[0]];
                            tag.lid = hook.id;
                            tag.sentence = hook.sentence;
                            tag.ads[0].template = "external";
                            hook.externalTag = true;
                            var imp = this.settings.responses.impression;
                            hook.bdc = imp.prs[hook.prod] && imp.prs[hook.prod].messages && imp.prs[hook.prod].messages[tag.msg] ? imp.prs[hook.prod].messages[tag.msg].bdc : 0;
                            rt.event.fire(event.data.callback || "getadsResponse", tag);
                            return
                        } else {
                            et.settings.didExternal = false
                        }
                    }
                    if (uto.keys(et.settings.tags).length) {
                        hook.externalBidsTimeout = rt.event.fire("sendGetAds", uto.extend({
                            timeout: true
                        }, event.data), event.data.bidRequestTimeout || et.settings.bidRequestTimeout);
                        rt.event.fire("sendBids", event.data)
                    } else {
                        rt.event.fire("sendGetAds", event.data)
                    }
                }
            }
        });
        comm.bind({
            event: "sendGetAds",
            listener: {
                sendGetAds: function(event) {
                    var rt = this.$root,
                        hookId = event.data.hookId,
                        st = rt.settings,
                        ut = rt.utils,
                        hook = st.hooksMap[hookId],
                        gsd = rt.comm.settings.responses.gsd;
                    if (event.data.timeout) {
                        hook.killBids = true
                    } else {
                        clearTimeout(hook.externalBidsTimeout)
                    }
                    if (!rt.helpers.getHookData(hookId)) {
                        rt.helpers.setHookData(hookId, "pending")
                    }
                    hook.bdc = ++st.bdc;
                    var params = ut.object.clean(ut.object.extend({
                        lid: hookId,
                        rid: gsd.rid,
                        jsv: rt.version,
                        rts: ut.date.now(),
                        bdc: hook.bdc,
                        prod_t: hook.prod,
                        cfv: rt.comm.settings.flashVersion,
                        ifip: st.ifip,
                        cb: event.data.callback || "getadsResponse",
                        tcln: hook.tcln,
                        pst: hook.pst,
                        purl: st.customerUrl,
                        ref: st.impression.params.ref,
                        refq: st.impression.params.refq
                    }, event.data.params || {}, rt.helpers.getHookSD(hookId), rt.externalTags.getBidData(hook.externalTag), rt.externalTags.getViewedTagsParam()));
                    if ("irt".indexOf(hook.prod) == -1) {
                        if (hook.prod == "s" || hook.prod == "o") {
                            params.as = "728*90"
                        }
                    }
                    if (rt.what(window["x1"]) != "undefined" && rt.what(window["x2"]) != "undefined") {
                        params[window["x1"]] = window["x2"]
                    }
                    rt.comm.loadScript(gsd.rs + "/action/getads.htm", params)
                }
            }
        });
        comm.bind({
            event: "sendAdView",
            listener: {
                sendAdView: function(event) {
                    var rt = this.$root,
                        gsd = this.settings.responses.gsd,
                        uto = rt.utils.object;
                    var params = uto.extend({
                        rid: gsd.rid,
                        midx: 0,
                        rts: rt.utils.date.now(),
                        prod_t: "unknown",
                        jsv: rt.version
                    }, rt.helpers.getHookSD(event.data.hookId), event.data.params);
                    this.loadScript([gsd.rs, "/action/adview.htm"].join(""), params, "adViewed", event.data)
                }
            }
        });
        comm.bind({
            event: "adViewed",
            listener: {
                adViewed: function(event) {
                    var rt = this.$root,
                        hook = rt.settings.hooksMap[event.data.hookId];
                    hook.viewed = true
                }
            }
        });
        comm.bind({
            event: "doRedirect",
            listener: {
                doRedirect: function(event) {
                    var result = event.data;
                    var rt = this.$root,
                        st = rt.settings,
                        b = rt.browser,
                        ut = rt.utils,
                        hook = result.hook,
                        reuseWindow = rt.helpers.getHookBehavior(hook.id).adsReuseWindow,
                        winName;
                    if (st.clickStatus == "complete") {
                        return
                    }
                    if (!result.maxLength) {
                        result.maxLength = b.IE ? 2048 : 8192
                    }
                    var data = rt.helpers.getHookData(hook.id);
                    var url = result.url || data.ads[hook.currentAdIndex].redirectURL;
                    rt.event.fire(hook.type + "HookMouseout", {
                        hookId: hook.id
                    });
                    var hookNodeId = hook.node.id;
                    st.clickStatus = "complete";
                    if (hook.bubble) {
                        rt.event.fire("hideBubble", {
                            hookId: hook.id
                        })
                    }
                    hook = null;
                    if (url.length < result.maxLength) {
                        winName = hookNodeId;
                        try {
                            winName = st.adWin.name
                        } catch (ex) {}
                        if (b.IE && b.getVersion(true) < 9) {
                            var anchor = rt.utils.dom.createDOMFragment({
                                tag: "a",
                                parent: document.body,
                                attributes: {
                                    href: url
                                },
                                style: {
                                    display: "none"
                                }
                            });
                            if (!reuseWindow && st.adWin && winName == hookNodeId) {
                                anchor.target = winName
                            }
                            anchor.click()
                        } else {
                            if (!reuseWindow && st.adWin && winName == hookNodeId) {
                                try {
                                    st.adWin.location = url
                                } catch (ex) {
                                    window.location = url;
                                    st.adWin.close();
                                    st.adWin = null
                                }
                            } else {
                                window.location = url
                            }
                        }
                    } else {
                        var action = url,
                            inputs = null,
                            urlParamsIndex = url.indexOf("?");
                        if (urlParamsIndex != -1) {
                            action = url.substring(0, urlParamsIndex);
                            var params = ut.string.toObject(url.substring(urlParamsIndex + 1), null, true);
                            inputs = [];
                            for (var key in params) {
                                ut.array.push(inputs, {
                                    tag: "input",
                                    type: "hidden",
                                    value: params[key],
                                    attributes: {
                                        name: key
                                    }
                                })
                            }
                        }
                        var redirectForm = ut.dom.createDOMFragment({
                            tag: "form",
                            parent: document.body,
                            style: {
                                display: "none"
                            },
                            children: inputs,
                            attributes: ut.object.extend({
                                action: action,
                                method: "post"
                            }, reuseWindow ? {} : {
                                target: hookNodeId
                            })
                        });
                        redirectForm.submit()
                    }
                }
            }
        });
        comm.bind({
            event: "productClick",
            listener: {
                productClick: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId],
                        data = rt.helpers.getHookData(hookId),
                        clickType = event.data.clickType || hook.clickType;
                    if (st.clickStatus == "complete") {
                        return
                    }
                    if ((clickType == "onLink" || clickType == "onLinkAfterWinOpen") && data && data.ads[hook.currentAdIndex].redirectURL == "") {
                        st.clickStatus = "none";
                        if (st.adWin) {
                            rt.event.fire("hideBubble", {
                                hookId: hookId
                            });
                            st.adWin.close();
                            st.adWin = null
                        }
                        return
                    }
                    var url = this.getRedirectUrl(hook, event.data.url || null, clickType);
                    rt.event.fire("startClick", {
                        url: url,
                        hook: hook
                    })
                }
            }
        });
        comm.bind({
            event: "startClick",
            listener: {
                updateClickCookie: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        ut = rt.utils,
                        uto = ut.object,
                        now = rt.utils.date.now(),
                        data = event.data,
                        hook = data.hook;
                    var params = uto.clean(uto.extend({
                        rid: this.settings.responses.gsd.rid,
                        bdc: hook.bdc,
                        midx: hook.midx || hook.currentAdIndex,
                        rts: now,
                        vt: ut.timer.poll("adView" + hook.id),
                        clk_t: hook.clickType,
                        jsv: rt.version,
                        prod_t: hook.prod || "",
                        tcln: hook.tcln || "",
                        pst: hook.pst || "",
                        ifip: st.ifip || ""
                    }, rt.helpers.getHookSD(hook.id)));
                    var url = ["http://", this.settings.responses.gsd.rs, "/", now, "/ck.js"].join("");
                    this.loadScript(url, params, "doRedirect", data)
                }
            }
        });
        comm.bind({
            event: "commRemoteReady",
            listener: {
                commRemoteReady: function() {
                    var rt = this.$root,
                        uto = rt.utils.object,
                        st = this.settings,
                        key, data = [];
                    st.messagingReady = true;
                    var gsd = st.responses.gsd;
                    if (gsd.cks) {
                        for (key in gsd.cks) {
                            rt.utils.array.push(data, {
                                name: key,
                                value: gsd.cks[key],
                                expiration: "2y"
                            })
                        }
                        var message = uto.stringify({
                            action: "setcookie",
                            data: data
                        });
                        this.sendMessage(message)
                    }
                    while (this.pendingRequests.length) {
                        this.sendRequest.apply(this, this.pendingRequests.shift())
                    }
                }
            }
        });
        comm.bind({
            event: "sendErrorReport",
            listener: {
                sendErrorReport: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        gsd = rt.comm.settings.responses.gsd,
                        evt = null,
                        cbdata = null;
                    if (event.data.cbdata) {
                        evt = event.data.cbdata.evt;
                        cbdata = event.data.cbdata.data;
                        delete event.data.cbdata
                    }
                    this.loadScript(this.settings.errorReportingUrl, rt.utils.object.extend({
                        pid: st.customerId,
                        wsid: st.websiteId,
                        jsv: rt.version,
                        rid: gsd ? gsd.rid : ""
                    }, event.data || {}), evt, cbdata)
                }
            }
        });
        $root.$create("settings", {}, {
            svntest: "yes",
            supportedClients: {
                IE: 6,
                Firefox: 1.5,
                Safari: 3,
                MobileSafari: 4,
                Opera: 10,
                Chrome: 1,
                AppleWebKit: 533,
                ucweb: 7
            },
            hosts: {
                resourcesDefault: "resources.infolinks.com",
                scriptDefaultPath: "/js/"
            },
            productCodes: {
                i: "intext",
                t: "intag",
                s: "insearch",
                o: "insearch",
                f: "inframe"
            },
            nodeTypes: {
                ELEMENT: 1,
                DOCUMENT: 9,
                TEXT: 3,
                COMMENT: 8
            },
            baseZIndex: 9999999,
            bdc: 0,
            behavior: {
                def: {
                    linkColor: "009900",
                    bubbleShowDelay: 200,
                    bubbleHideDelay: 1000,
                    adsReuseWindow: true,
                    hoverRequestDelay: 20
                },
                sanitizer: {
                    linkColor: "color",
                    linkHoverColor: "color",
                    linkHoverBgColor: "color",
                    bubbleShowDelay: "int",
                    bubbleHideDelay: "int",
                    adsReuseWindow: "bool",
                    hoverRequestDelay: "int"
                }
            },
            hooksMap: {},
            hooksCount: 0,
            baseClass: "IL_BASE",
            clickStatus: "none",
            defaultLabel: "infolinks",
            defaultHomeUrl: "http://www.infolinks.com/?kid=bb&trackerid=101",
            defaultHelpUrl: "http://www.infolinks.com/opt-out.html?pid=<%= cid %>&wsid=<%= wsid %>",
            yourAdHereUrl: "http://www.infolinks.com/ads",
            white_labelLoaded: false,
            textLimits: {
                def: {
                    plinks: {
                        t: 2,
                        i: 100
                    },
                    pimgs: {
                        t: 2,
                        i: 100
                    },
                    phdrs: {
                        t: 2,
                        i: 100
                    },
                    pdesc: 1,
                    page_keyw: 2
                }
            },
            translations: {
                advertisement: {
                    en: "Advertisement",
                    es: "Aviso Publicitario"
                },
                yourAdHere: {
                    en: "Your Ad Here",
                    es: "Publique Aqu??"
                },
                clickHere: {
                    en: "Click here",
                    es: "Presione Aqu??"
                },
                searchingFor: {
                    en: "Searching for",
                    es: "Buscando"
                },
                nextSearchResultFor: {
                    en: "Next search result for",
                    es: "Nueva b??squeda para"
                },
                learnMore: {
                    en: "Learn More",
                    es: "Saber m??s"
                },
                adsBy: {
                    en: "Ads by",
                    es: "Anuncios"
                }
            }
        });
        $root.$create("harvest", {
            createInstance: function() {
                var o = {};
                o.texts = [];
                o.nodes = [];
                o.stopped = false;
                o.harvesting = false;
                o.firstNode = null;
                o.charCount = 0;
                o.insideAllowedNode = null;
                o.useAllowSettings = false;
                return o
            },
            setConditionalTags: function() {
                var rt = this.$root,
                    st = rt.settings,
                    hs = this.settings,
                    label = (st.white_label || st.defaultLabel).toUpperCase();
                hs.tagGenericOff = "INTEXT_OFF";
                hs.tagGenericOn = "INTEXT_ON";
                hs.tagGenericStop = "INTEXT_STOP";
                hs.tagGenericToggle = "INTEXT_TOGGLE";
                hs.tagOff = label + "_OFF";
                hs.tagOn = label + "_ON";
                hs.tagStop = label + "_STOP";
                hs.tagToggle = label + "_TOGGLE"
            },
            setHarvestEnabled: function() {
                var hs = this.settings;
                var bodyHtml = document.body.innerHTML;
                var indexOfCommentTag = function(tag) {
                        return bodyHtml.indexOf(["<!--", tag, "-->"].join(""))
                    };
                var onIndexGeneric = indexOfCommentTag(hs.tagGenericOn);
                var onIndexWL = indexOfCommentTag(hs.tagOn);
                var onIndex = (onIndexGeneric == -1 || onIndexWL == -1) ? Math.max(onIndexGeneric, onIndexWL) : Math.min(onIndexGeneric, onIndexWL);
                var offIndexGeneric = indexOfCommentTag(hs.tagGenericOff);
                var offIndexWL = indexOfCommentTag(hs.tagOff);
                var offIndex = (offIndexGeneric == -1 || offIndexWL == -1) ? Math.max(offIndexGeneric, offIndexWL) : Math.min(offIndexGeneric, offIndexWL);
                hs.enabled = (onIndex == -1 || (offIndex != -1 && onIndex > offIndex))
            },
            getHarvestedText: function(container) {
                var rt = this.$root,
                    st = rt.settings,
                    hs = this.settings,
                    hp = rt.helpers,
                    ut = rt.utils,
                    uta = ut.array,
                    hd = st.highlightDeny,
                    ha = st.highlightAllow,
                    instance = this.createInstance();
                hs.instances[hs.instances.length] = instance;
                if (hs.instances.length == 1) {
                    ut.timer.start("tmr_har")
                }
                if (ha) {
                    hs.allowedTags = uta.toObject(ha.tags, {}, 1);
                    hs.allowedIds = uta.toObject(ha.ids, {}, 1);
                    hs.allowedCls = uta.toObject(ha.cls, {}, 1);
                    for (var key in hs.allowedTags) {
                        if (hs.deniedTags[key]) {
                            delete hs.deniedTags[key]
                        }
                    }
                    if (!ha.min) {
                        ha.min = 1
                    }
                    instance.useAllowSettings = true
                }
                if (hd) {
                    hs.deniedTags = uta.toObject(hd.tags, hs.deniedTags, 1);
                    hs.deniedIds = uta.toObject(hd.ids, hs.deniedIds, 1);
                    hs.deniedCls = uta.toObject(hd.cls, hs.deniedCls, 1)
                }
                this.setConditionalTags();
                this.setHarvestEnabled();
                hs.allowOnclick = hp.getVar("allow_onclick");
                this.harvestText(container || document.body);
                var text = instance.texts.join("|");
                text = hp.normalizeText(text);
                var twnum = hp.countWords(text);
                if (instance.useAllowSettings && twnum < ha.min) {
                    instance.useAllowSettings = false;
                    this.harvestText(container || document.body);
                    text = instance.texts.join("|");
                    text = hp.normalizeText(text);
                    twnum = hp.countWords(text)
                }
                if (hs.instances.length == 1) {
                    ut.timer.stop("tmr_har")
                }
                instance.text = text;
                return instance
            },
            isHarvestableNode: function(node) {
                var hs = this.settings,
                    ut = this.$root.utils;
                return !((node.getAttribute("onclick") != null && node != document.body && !hs.allowOnclick) || hs.deniedTags[node.tagName.toLowerCase()] || (node.id && hs.deniedIds[node.id]) || (node.className && ut.object.hasKey(hs.deniedCls, node.className.split(/\s+/))) || (!this.$root.comm.settings.responses.gsd.wd.ht && !ut.dom.element.isVisible(node)))
            },
            harvestText: function(node) {
                var rt = this.$root,
                    hs = this.settings,
                    nodeType = null,
                    ut = rt.utils,
                    uto = ut.object,
                    tm = ut.timer,
                    nt = rt.settings.nodeTypes,
                    i, leni, text, instanceNum = hs.instances.length - 1,
                    instance = hs.instances[instanceNum];
                if (!instance.harvesting) {
                    instance.harvesting = true;
                    instance.stopped = false;
                    tm.start("harvest" + instanceNum);
                    instance.nodes = [];
                    instance.texts = [];
                    instance.charCount = 0;
                    instance.firstNode = node;
                    if (!instance.useAllowSettings) {
                        instance.insideAllowedNode = node
                    }
                }
                if (instance.stopped || hs.timeLimit != -1 && tm.poll("harvest" + instanceNum) >= hs.timeLimit) {
                    instance.stopped = true
                } else {
                    nodeType = node.nodeType
                }
                var hasAllowedIds = uto.keys(hs.allowedIds).length > 0,
                    hasAllowedCls = uto.keys(hs.allowedCls).length > 0;
                switch (nodeType) {
                case nt.DOCUMENT:
                case nt.ELEMENT:
                    if (this.isHarvestableNode(node)) {
                        if (instance.useAllowSettings && !instance.insideAllowedNode && !hs.deniedTags[node.tagName.toLowerCase()] && ((!hasAllowedIds && !hasAllowedCls) || (hasAllowedIds && node.id && hs.allowedIds[node.id]) || (hasAllowedCls && node.className && uto.hasKey(hs.allowedCls, node.className.split(/\s+/))))) {
                            instance.insideAllowedNode = node
                        }
                        for (i = 0, leni = node.childNodes.length; i < leni; i++) {
                            if (instance.stopped) {
                                break
                            }
                            this.harvestText(node.childNodes[i])
                        }
                        if (instance.insideAllowedNode == node) {
                            instance.insideAllowedNode = null
                        }
                    }
                    break;
                case nt.TEXT:
                    if (hs.enabled && instance.insideAllowedNode) {
                        text = ut.string.trim(node.data).replace(/\s+/g, " ");
                        if (text.length > 3) {
                            if (hs.charLimit != -1 && instance.charCount + text.length > hs.charLimit) {
                                instance.stopped = true;
                                text = text.substring(0, hs.charLimit - instance.charCount).replace(/\S+$/, "")
                            }
                            ut.array.push(instance.nodes, node);
                            ut.array.push(instance.texts, text);
                            instance.charCount += text.length
                        }
                    }
                    break;
                case nt.COMMENT:
                    this.checkConditionalTags(ut.string.trim(node.data), hs)
                }
                if (instance.firstNode == node) {
                    instance.harvesting = false;
                    tm.stop("harvest" + instanceNum)
                }
            },
            checkConditionalTags: function(value, st) {
                var c = this.settings;
                switch (value) {
                case c.tagOff:
                case c.tagGenericOff:
                    st.enabled = false;
                    break;
                case c.tagOn:
                case c.tagGenericOn:
                    st.enabled = true;
                    break;
                case c.tagToggle:
                case c.tagGenericToggle:
                    st.enabled = !st.enabled;
                    break;
                case c.tagStop:
                case c.tagGenericStop:
                    st.stopped = true
                }
            }
        }, {
            settings: {
                allowedCls: null,
                allowedIds: null,
                charLimit: 8000,
                deniedCls: {
                    footer: 1,
                    wibiyaToolbar_window: 1
                },
                deniedIds: {
                    footer: 1,
                    wibiyaToolbar: 1,
                    wibiyaToolbar_window_template: 1
                },
                deniedTags: {
                    a: 1,
                    acronym: 1,
                    address: 1,
                    br: 1,
                    dd: 1,
                    dl: 1,
                    dt: 1,
                    embed: 1,
                    fieldset: 1,
                    h1: 1,
                    h2: 1,
                    h3: 1,
                    h4: 1,
                    h5: 1,
                    h6: 1,
                    iframe: 1,
                    input: 1,
                    label: 1,
                    legend: 1,
                    noscript: 1,
                    object: 1,
                    param: 1,
                    script: 1,
                    select: 1,
                    style: 1,
                    textarea: 1,
                    th: 1,
                    title: 1,
                    m: 1
                },
                enabled: true,
                timeLimit: 1000,
                instances: []
            }
        });
        var shared = $root.$create("shared", {}, null, true);
        shared.bind({
            event: "main",
            listener: {
                main: function() {
                    var rt = this.$root,
                        ut = rt.utils,
                        st = rt.settings;
                    st.cconf = ut.string.toObject(ut.cookie.get("$ice-conf")) || {};
                    if (st.cconf.logto) {
                        rt.logger.output = st.cconf.logto
                    }
                    if (st.cconf.er) {
                        rt.logger.errorReporting = parseInt(st.cconf.er, 10)
                    }
                    rt.utils.timer.start("tmr_wait");
                    rt.settings.boot = (window["INFOLINKS"] && window["INFOLINKS"]._boot) ? window["INFOLINKS"]._boot : window.$iceboot ? window.$iceboot : null;
                    var $this = this;
                    rt.helpers.getVar("white_label", rt.settings);
                    if (rt.helpers.chanceIntegration()) {
                        return
                    }
                    if (document.readyState && /complete|interactive/i.test(document.readyState)) {
                        $this.$root.event.fire("domready");
                        return
                    }
                    if (this.$root.what(document.addEventListener) == "function") {
                        document.addEventListener("DOMContentLoaded", function() {
                            $this.$root.event.fire("domready")
                        }, false)
                    } else {
                        document.onreadystatechange = function() {
                            if (/complete|interactive/i.test(document.readyState)) {
                                document.onreadystatechange = null;
                                $this.$root.event.fire("domready")
                            }
                        }
                    }
                }
            }
        });
        shared.bind({
            event: "domready",
            listener: {
                domready: function() {
                    var rt = this.$root,
                        hp = rt.helpers,
                        msg, i, leni, pluginUrl, src;
                    rt.utils.timer.stop("tmr_wait");
                    rt.utils.timer.start("tmr_all");
                    if (rt.settings._initialized) {
                        msg = "Trying to re-run an application that has already been initialized."
                    } else {
                        if (!hp.isSupportedClient()) {
                            msg = "Client is not supported: " + rt.browser.toString()
                        }
                    }
                    if (msg) {
                        rt.logger.error(msg, this.domready);
                        return
                    }
                    rt.settings._initialized = true;
                    hp.setHosts();
                    if (rt.demo.isDemo()) {
                        rt.event.fire("demo");
                        return
                    }
                    rt.event.fire("loadPlugins")
                }
            }
        });
        shared.bind({
            event: "loadPlugins",
            listener: {
                loadPlugins: function() {
                    var rt = this.$root,
                        st = rt.settings,
                        hs = st.hosts,
                        src, i, leni, pluginUrl;
                    if (rt.settings.white_label && !rt.settings.white_labelLoaded) {
                        rt.settings.white_labelLoaded = true;
                        rt.comm.loadScript([hs.resources, hs.scriptDefaultPath, "0/wl/", st.white_label, ".js"].join(""), null, "loadPlugins");
                        return
                    }
                    var plugins = rt.helpers.getVar("plugins");
                    if (plugins) {
                        src = rt.settings.hosts.src ? "/src" : "";
                        if (rt.what(plugins) == "string") {
                            plugins = [plugins]
                        }
                        rt.settings.plugins = {};
                        for (i = 0, leni = plugins.length; i < leni; i++) {
                            pluginUrl = (plugins[i].match(/https?:\/\//)) ? plugins[i] : [rt.settings.hosts.resources, "/js", src, "/0/plugins/", plugins[i], ".js"].join("");
                            rt.settings.plugins[pluginUrl] = false;
                            rt.comm.loadScript(pluginUrl, null, "pluginLoaded", {
                                plugin: pluginUrl
                            })
                        }
                    } else {
                        rt.event.fire("beforeGSD")
                    }
                }
            }
        });
        shared.bind({
            event: "pluginLoaded",
            listener: {
                pluginLoaded: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        key;
                    st.plugins[event.data.plugin] = true;
                    if (rt.utils.array.indexOf(rt.utils.object.values(st.plugins), false) == -1) {
                        for (key in rt.plugins) {
                            if (rt.plugins[key] && rt.what(rt.plugins[key].init) == "function") {
                                rt.plugins[key].init()
                            }
                        }
                        rt.event.fire("beforeGSD")
                    }
                }
            }
        });
        shared.bind({
            event: "beforeGSD",
            listener: {
                prepareGSD: function() {
                    var rt = this.$root,
                        st = rt.settings,
                        hp = rt.helpers;
                    hp.getCustomerId();
                    var docRef = hp.getReferrer();
                    var params = {
                        evt: "afterGSD",
                        pid: st.customerId,
                        wsid: st.websiteId,
                        pdom: location.hostname,
                        purl: st.customerUrl,
                        jsv: rt.version
                    };
                    if (docRef.ref.length) {
                        params.ref = docRef.ref
                    }
                    if (docRef.refq.length) {
                        params.refq = docRef.refq
                    }
                    rt.utils.timer.start("tmr_gsd");
                    rt.comm.loadScript([st.hosts.router, "/gsd/", rt.utils.date.now(), rt.utils.number.next("nocache")].join(""), params)
                }
            }
        });
        shared.bind({
            event: "afterGSD",
            listener: {
                gsdCallback: function(evt) {
                    var rt = this.$root,
                        data = evt.data,
                        tl = rt.settings.textLimits;
                    rt.utils.timer.stop("tmr_gsd");
                    data.rs = rt.utils.string.toObject(location.search, "il.rt") || rt.helpers.getVar("runtime_server") || data.rs || null;
                    var msg = "";
                    if (!data.rs) {
                        msg = "GSD Response is missing `rs`."
                    }
                    if (!data.prs) {
                        msg = "GSD Response is missing `prs`."
                    }
                    if (msg) {
                        rt.logger.error(msg, this.gsdCallback, true);
                        return
                    }
                    data.rs = data.rs.toLowerCase();
                    if (!data.makey) {
                        data.makey = ""
                    }
                    rt.helpers.setDefaultWebsiteDirectives(data);
                    tl.merged = rt.utils.object.extend(tl.def, data.wd || {});
                    if (data.prs.indexOf("r") != -1) {
                        if (data.prs.indexOf("t") == -1) {
                            data.prs += ",t"
                        } else {
                            data.wd.rtm = "b"
                        }
                    }
                    rt.comm.settings.responses.gsd = data;
                    rt.event.fire("initComm");
                    if (/i|t/.test(data.prs)) {
                        rt.event.fire("beforeHarvest")
                    } else {
                        rt.event.fire("beforeImpression")
                    }
                }
            }
        });
        shared.bind({
            event: "beforeHarvest",
            listener: {
                prepareHarvest: function() {
                    var rt = this.$root,
                        hp = rt.helpers,
                        st = rt.settings,
                        hd = null,
                        gsd = rt.comm.settings.responses.gsd;
                    hd = hp.getVar("highlight_deny") || gsd.wd.hd || {};
                    if (rt.what(window["vBulletin"]) != "undefined") {
                        if (!hd.cls) {
                            hd.cls = []
                        }
                        rt.utils.array.push(hd.cls, "thead", "tcat", "navbar", "tfoot", "alt2")
                    }
                    st.$extend({
                        highlightDeny: hd,
                        highlightAllow: hp.getVar("highlight_allow") || gsd.wd.ha
                    });
                    rt.updater.settings.className = rt.what(window["blogger"]) != "undefined" ? "hentry" : (hp.getVar("updater_class") || hp.getVar("refreshed_container"));
                    var harvested = rt.harvest.getHarvestedText();
                    rt.event.fire("beforeImpression", {
                        ptxt: harvested.text
                    })
                }
            }
        });
        shared.bind({
            event: "beforeImpression",
            listener: {
                prepareImpression: function(event) {
                    var rt = this.$root,
                        ut = rt.utils,
                        hp = rt.helpers,
                        st = rt.settings,
                        prs, prods = rt.products,
                        cm = rt.comm,
                        gsd = cm.settings.responses.gsd,
                        tgst = prods.intag.settings,
                        crt = document.getElementsByName(tgst.relatedTags).length || "",
                        ctc = document.getElementsByName(tgst.prodId).length || "";
                    if (!st.impression) {
                        st.impression = {
                            params: {}
                        }
                    }
                    var imp = st.impression;
                    var impp = imp.params;
                    prs = ut.array.toObject(gsd.prs.split(","), {}, true);
                    if (event.data && event.data.updater) {
                        prs = {
                            i: true
                        }
                    }
                    impp.ptxt = event.data && gsd.prs != "s" ? event.data.ptxt : "";
                    impp.twnum = hp.countWords(impp.ptxt);
                    if (prs["i"] && impp.twnum < gsd.wd.qmin) {
                        delete prs["i"]
                    }
                    if (prs["t"] && gsd.wd.rtm == "m" && !crt && !ctc) {
                        delete prs["t"]
                    }
                    if (rt.helpers.getVar("inframe_disable") === true) {
                        delete prs["f"]
                    }
                    if (prs["f"]) {
                        var gpmp = prods.inframe.buildImpPageMarginsParam();
                        if (gpmp) {
                            impp.ifs = gpmp
                        } else {
                            delete prs["f"]
                        }
                    }
                    impp.prs = ut.object.keys(prs).join(",");
                    if (impp.prs == "") {
                        impp.prs = ".";
                        impp.ptxt = ""
                    }
                    if (!event.data || !event.data.updater) {
                        impp.pid = st.customerId;
                        impp.wsid = st.websiteId;
                        impp.makey = gsd.makey;
                        impp.anow = hp.getVar("anow") || "";
                        impp.rid = gsd.rid || "";
                        impp.purl = st.customerUrl;
                        impp.jsv = rt.version;
                        impp.ms = gsd.ms || "";
                        impp.gid = gsd.wd.gid || "";
                        impp.rh = hp.getVar("require_highlight") || "";
                        impp.by = "u";
                        impp.crt = crt;
                        impp.ctc = ctc;
                        impp.cfv = cm.settings.flashVersion;
                        st.ifip = hp.getVar("ifip") || "";
                        st.blankURL = ["http://", st.hosts.resources, "/static/blank.html"].join("");
                        impp.ifip = st.ifip;
                        impp.pf = hp.getPlatform();
                        impp.ptitle = hp.normalizeText(document.title);
                        impp.ref = st.ref;
                        impp.refq = st.refq;
                        impp.csilv = hp.getSilverlightVersion();
                        if (impp.prs.match(/[^so,\.]/) != null) {
                            impp.plinks = hp.getTagTexts("a", "text", "plinks");
                            impp.pimgs = hp.getTagTexts("img", "alt", "pimgs");
                            impp.phdrs = hp.getTagTexts(ut.string.qw("h1 h2 h3 h4 h5 h6"), "text", "phdrs");
                            impp.pdesc = hp.getMetaContent("description", st.textLimits.merged.pdesc);
                            impp.page_keyw = hp.getMetaContent("keywords", st.textLimits.merged.page_keyw)
                        }
                        imp.pcode = (hp.getVar("encoding") || document.characterSet || document.charset || "").toLowerCase();
                        imp.url = ["http://", gsd.rs, "/action/doq.htm", "?pcode=", imp.pcode, "&r=", ut.date.now(), ut.number.next("nocache")].join("");
                        if (rt.browser.IE && cm.settings.mode == "cors") {
                            imp.url += "&oct=1"
                        }
                        imp.method = "POST";
                        imp.onSuccess = "afterImpression"
                    }
                    ut.object.extend(impp, gsd.cks || {});
                    impp.rts = ut.date.now();
                    imp.params = ut.object.clean(impp);
                    cm.sendRequest(imp, function(sendBy) {
                        imp.params.by = sendBy;
                        if (!ut.timer.poll("tmr_imp")) {
                            ut.timer.start("tmr_imp")
                        }
                    })
                }
            }
        });
        shared.bind({
            event: "afterImpression",
            listener: {
                handleImpressionResponse: function(event) {
                    var rt = this.$root,
                        utt = rt.utils.timer,
                        response, prs;
                    if (!utt.delta("tmr_imp")) {
                        utt.stop("tmr_imp")
                    }
                    response = rt.helpers.processImpressionResponse(event.data);
                    if (rt.what(response) != "object") {
                        rt.logger.error("Bad Impression response.", true);
                        return
                    }
                    prs = response.prs;
                    if (prs.r) {
                        if (prs.t) {
                            prs.t.sentences = rt.utils.array.uniq(rt.utils.array.concat(prs.t.sentences, prs.r.sentences));
                            rt.utils.object.extend(prs.t.behavior, prs.r.behavior)
                        } else {
                            prs.t = prs.r;
                            delete prs.r
                        }
                    }
                    rt.comm.settings.responses.impression = response;
                    rt.externalTags.init();
                    rt.event.fire("preRenderProducts")
                }
            }
        });
        shared.bind({
            event: "preRenderProducts",
            listener: {
                preRenderProducts: function() {
                    var rt = this.$root,
                        hp = rt.helpers,
                        st = rt.settings,
                        bh = st.behavior,
                        ut = rt.utils;
                    bh.customer = hp.getCustomerBehavior("link_color link_hover_color link_hover_bg_color ads_reuse_window bubble_direction bubble_logo_url bubble_logo_url_downgrade bubble_logo_width bubble_logo_height bubble_logo_link bubble_help_link");
                    bh.impression = hp.renameBehaviorProperties(rt.comm.settings.responses.impression.behavior_imp || {});
                    hp.createBaseClasses();
                    st.homeUrl = bh.customer.bubbleLogoLink || st.defaultHomeUrl;
                    st.helpUrl = rt.utils.VeST(bh.customer.bubbleHelpLink || bh.customer.bubbleLogoLink || st.defaultHelpUrl, {
                        cid: st.customerId,
                        wsid: st.websiteId
                    });
                    st.productRenderStatus = ut.array.toObject(ut.object.keys(st.productCodes), {}, "before");
                    this.$root.event.fire("renderProduct")
                }
            }
        });
        shared.bind({
            event: "productRenderStatus",
            listener: {
                productRenderStatus: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        ut = rt.utils,
                        ps = st.productRenderStatus,
                        data = event.data;
                    ps[data.prod] = data.status;
                    if (data.status == "failed") {
                        rt.logger.error([st.productCodes[data.prod], " failed. reason: ", data.reason].join(""), this.productRenderStatus)
                    }
                    if (!/before|during/.test(ut.object.values(ps).join(","))) {
                        this.$root.event.fire("afterRenderProducts")
                    }
                }
            }
        });
        shared.bind({
            event: "afterRenderProducts",
            listener: {
                productsRendedred: function() {
                    var rt = this.$root,
                        st = rt.settings,
                        gsd = rt.comm.settings.responses.gsd,
                        i, len, cb, src = st.hosts.src ? "/src" : "";
                    if (/i|r|t/.test(gsd.prs)) {
                        rt.helpers.mapUnhoverableAreas()
                    }
                    if (rt.what(gsd.incs) != "undefined") {
                        for (i = 0, len = gsd.incs.length; i < len; ++i) {
                            var func = function(name, params) {
                                    return function() {
                                        if (rt.plugins[name] && rt.what(rt.plugins[name].init) == "function") {
                                            rt.plugins[name].init(params)
                                        }
                                    }
                                };
                            cb = func(gsd.incs[i].s, gsd.incs[i].p);
                            rt.comm.loadScript([st.hosts.resources, "/js", src, "/0/plugins/", gsd.incs[i].s, ".js"].join(""), null, cb)
                        }
                    }
                    if (rt.updater.settings.className) {
                        rt.event.fire("initUpdater")
                    }
                    rt.utils.timer.stop("tmr_all");
                    rt.event.fire("sendImpressionLog")
                }
            }
        });
        shared.bind({
            event: "sendImpressionLog",
            listener: {
                sendImpressionLog: function() {
                    var rt = this.$root,
                        st = rt.settings,
                        ut = rt.utils,
                        uta = ut.array,
                        tmr = ut.timer,
                        res = rt.comm.settings.responses,
                        gsd = res.gsd;
                    st.sendClientLog = rt.helpers.getVar("send_client_log") || gsd.scl || false;
                    if (!st.sendClientLog) {
                        return
                    }
                    var prods = rt.products,
                        ist = prods.intext.settings,
                        tst = prods.intag.settings,
                        sentence, i, leni, hook, intxt_sen = [];
                    var params = {
                        rid: gsd.rid,
                        makey: gsd.makey,
                        tmr_scr: st.boot && st.boot.tmr_scr ? ut.date.now() - st.boot.tmr_scr : -1,
                        tmr_wait: tmr.delta("tmr_wait") || -1,
                        tmr_gsd: tmr.delta("tmr_gsd") || -1,
                        tmr_har: tmr.delta("tmr_har") || -1,
                        tmr_imp: tmr.delta("tmr_imp") || -1,
                        tmr_dwq: tmr.delta("tmr_imp") || -1,
                        tmr_hi: tmr.delta("tmr_hi") || -1,
                        tmr_fsh: tmr.delta("tmr_fsh") || -1,
                        tmr_all: tmr.delta("tmr_all") || -1
                    };
                    if (gsd.prs.indexOf(ist.prodCode) != -1) {
                        params.intxt_num = [ist.rendered, ut.object.keys(ist.sentences).length].join("*");
                        for (sentence in ist.sentences) {
                            for (i = 0, leni = ist.sentences[sentence].hooks.length; i < leni; i++) {
                                hook = ist.sentences[sentence].hooks[i];
                                uta.push(intxt_sen, [sentence, hook.visible ? 1 : 0, hook.pos.left, hook.pos.top].join("_"))
                            }
                        }
                        params.intxt_sen = intxt_sen.join("*")
                    }
                    if (gsd.prs.indexOf(tst.prodCode) != -1) {
                        var tCldSent = (res.impression.prs[tst.prodCode] || {
                            sentences: []
                        }).sentences.length;
                        params.tCld_num = [uta.sum(uta.map(tst.instances, function(instance) {
                            return instance.hooksCount
                        })), tCldSent].join("*");
                        if (tst.instances.length) {
                            params.tCld_pos = [tst.instances[0].pos.left, tst.instances[0].pos.top].join("*")
                        }
                    }
                    rt.comm.loadScript(gsd.rs + "/action/dcil.htm", params)
                }
            }
        });
        $root.event.dom.bind(document, {
            event: "keyup",
            listener: {
                keyboardShortcuts: function(event) {
                    var evt = event.domEvent,
                        rt = event.$root,
                        logger = rt.logger;
                    if (evt.keyCode == 76 && evt.ctrlKey && evt.altKey) {
                        logger.output = logger.output == "console" ? "none" : "console";
                        if (rt.what(window.console) != "undefined") {
                            console.info("Logging to console turned " + (logger.output == "console" ? "on." : "off."))
                        }
                    } else {
                        if (evt.keyCode == 67 && evt.ctrlKey && evt.altKey) {
                            if (rt.what(window.console) != "undefined") {
                                console.clear()
                            }
                        }
                    }
                }
            }
        });
        var products = $root.$create("products", {}, null, true);
        var intext = products.$create("intext", {
            createCandidate: function(node, parentNode, sentence) {
                var rt = this.$root,
                    ut = rt.utils,
                    dm = ut.dom,
                    o = {};
                o.sentence = sentence;
                o.node = node;
                o.parentNode = parentNode;
                o.rendered = false;
                o.type = "intext";
                o.prod = "i";
                o.bubble = ut.object.clone(rt.bubble.settings.base);
                o.fontSize = (node.nodeType == 1 ? parseInt(dm.element.getStyle(node, "lineHeight"), 10) : parseInt(dm.element.getStyle(parentNode, "fontSize"), 10)) || 0;
                o.visible = dm.element.isVisible(parentNode);
                o.onViewPort = dm.element.isOnViewport(parentNode);
                o.wordCount = (parentNode.innerText || parentNode.textContent).replace(/\s+/g, " ").length;
                o.importance = parentNode.offsetWidth / dm.viewport.getWidth();
                return o
            },
            estimateCandidatesFontSizeIE: function(candidates) {
                var rt = this.$root,
                    b = rt.browser,
                    c;
                if (!b.IE || b.getVersion(true) >= 9) {
                    return
                }
                for (var i = 0, leni = candidates.length; i < leni; i++) {
                    c = candidates[i];
                    c.fontSize = c.node.firstChild.offsetHeight || 0
                }
            },
            scoreFactorsCalc: {
                fontSize: function(v) {
                    return !v || v > 16 || v < 10 ? 0 : 1
                },
                wordCount: function(v) {
                    return v < 10 ? 0 : v < 20 ? 0.3 : v < 30 ? 0.6 : 1
                },
                importance: function(v) {
                    return v > 0.4 ? 1 : v > 0.2 ? 0.5 : v
                }
            },
            scoreCandidates: function(candidates) {
                var sf = this.settings.scoreFactors,
                    calc = this.scoreFactorsCalc,
                    c, i, leni;
                for (i = 0, leni = candidates.length; i < leni; i++) {
                    c = candidates[i];
                    c.score = calc.fontSize(c.fontSize) * sf.fontSize + (c.visible ? 1 : 0) * sf.visible + (c.onViewPort ? 1 : 0) * sf.onViewPort + calc.wordCount(c.wordCount) * sf.wordCount + calc.importance(c.importance) * sf.importance
                }
            },
            createStyleSheet: function() {
                var rt = this.$root,
                    ist = this.settings,
                    bh = ist.behavior.merged,
                    b = rt.browser,
                    dm = rt.utils.dom,
                    dmst = dm.style;
                var cs = dm.element.getStyle(document.body);
                if (cs && cs.position == "relative" && cs.width && parseInt(cs.width, 10) < dm.document.getWidth()) {
                    document.body.style.position = "static"
                }
                var underline = dmst.buildHookUnderlineCSS(bh.underline, bh.linkColor, true);
                dmst.addRule("." + ist.hookClass, [underline, "color:", bh.linkColor, " !important; background:transparent none repeat scroll 0% !important;cursor:pointer !important;position:static;display:inline !important;padding:0 0 1px 0 !important;float:none !important;"].join(""));
                if (bh.linkHoverColor) {
                    dmst.addRule("." + ist.hookClass + "_HOVER", ["color:", bh.linkHoverColor, " !important;border-bottom-color:", bh.linkHoverColor, " !important;"].join(""))
                }
                if (bh.simanitIcon) {
                    if (b.IE && b.getVersion(true) <= 7) {
                        dmst.addRule("." + ist.hookClass + "_ICON", ["display:inline-block !important; position:static !important;cursor:pointer !important;margin:0 !important;padding:0 !important;background:transparent url(", bh.simanitIcon, ") no-repeat scroll ", bh.simanitPosition, " center; width:", bh.simanitWidth, "px !important;float:none !important;"].join(""))
                    } else {
                        dmst.addRule("." + ist.hookClass + "_ICON", ["display:inline !important;position:static !important;cursor:pointer !important;margin:0 !important;padding:0 !important;background:transparent url(", bh.simanitIcon, ") no-repeat scroll ", bh.simanitPosition, " center;padding-", bh.simanitPosition, ":", bh.simanitWidth, "px !important; float:none !important;", b.IE ? "height:1%;" : ""].join(""))
                    }
                    if (bh.simanitOver) {
                        dmst.addRule("." + ist.hookClass + "_ICON_OVER", ["background-image:url(", bh.simanitOver, ");"].join(""))
                    }
                }
            },
            createHook: function(hook, textNode, updater) {
                var rt = this.$root,
                    ist = this.settings,
                    st = rt.settings,
                    bh = ist.behavior.merged,
                    b = rt.browser,
                    node;
                node = hook.node = document.createElement("span");
                hook.id = ++st.hooksCount;
                ist.hooksCount++;
                node.id = ist.hookClass + hook.id;
                if (updater) {
                    hook.updater = updater
                }
                st.hooksMap[hook.id] = hook;
                node.className = ist.hookClass;
                var text = textNode.data || textNode.innerHTML.replace(/<\/?span>/ig, "");
                if (bh.simanitIcon) {
                    var simanitTag = ['<span class="', ist.hookClass, '_ICON"></span>'].join("");
                    node.innerHTML = bh.simanitPosition == "left" ? simanitTag + text : text + simanitTag
                } else {
                    node.innerHTML = text
                }
                var ps = rt.utils.dom.element.getStyle(hook.parentNode),
                    css = [],
                    push = rt.utils.array.push;
                if (ps["fontFamily"]) {
                    push(css, "font-family:", ps["fontFamily"], " !important;")
                }
                if (ps["fontWeight"]) {
                    push(css, "font-weight:", ps["fontWeight"], " !important;")
                }
                if (ps["fontStyle"]) {
                    push(css, "font-style:", ps["fontStyle"], " !important;")
                }
                if ((!b.IE || (b.getVersion(true) > 8)) && !b.Opera && ps["fontSize"] && ps["fontSize"].match(/px$/) != null) {
                    push(css, "font-size:", ps["fontSize"], " !important;")
                }
                if (textNode.nodeType == 1 || b.IE) {
                    push(css, this.fixIEAdNodeStyle(textNode))
                }
                rt.utils.dom.style.addRule("#" + node.id, css.join(""));
                hook.currentAdIndex = 0;
                rt.helpers.bindHookEvents(hook);
                return node
            },
            fixIEAdNodeStyle: function(node) {
                var rt = this.$root,
                    bh = this.settings.behavior.merged,
                    b = rt.browser,
                    ut = rt.utils,
                    dmel = ut.dom.element,
                    push = ut.array.push,
                    css = [];
                if (node.nodeType != 1) {
                    node = node.parentNode
                }
                if (b.getVersion() >= 7 && bh.underline == "double") {
                    push(css, "border:1px solid transparent; border-bottom:1px solid ", bh.linkColor, ";")
                }
                if (bh.underline != "single" && bh.underline != "none") {
                    push(css, "padding-bottom:2px;")
                }
                var parent = node.offsetParent,
                    nodePos = dmel.offset(node);
                if (parent && parent.tagName.toLowerCase().match(/^(?:li|td)$/) != null) {
                    if (nodePos.top + node.offsetHeight >= dmel.offset(parent).top + parent.offsetHeight) {
                        dmel.setStyle(parent, {
                            paddingBottom: "3px"
                        })
                    }
                }
                if (nodePos.top + node.offsetHeight > document.body.clientHeight) {
                    dmel.setStyle(document.body, {
                        paddingBottom: "3px"
                    })
                }
                parent = node.parentNode;
                if (bh.underline == "double" && dmel.getStyle(parent, "styleFloat") && parseInt(dmel.getStyle(parent, "paddingBottom")) < 2 && parent.offsetHeight < 18) {
                    dmel.setStyle(parent, {
                        paddingBottom: "2px"
                    })
                }
                return css.join("")
            },
            revertCandidateNodesIE: function(updater) {
                var rt = this.$root,
                    candidates, sentence, i, leni, textNode, node, parentNode;
                var sentenceObjects;
                if (!rt.browser.IE) {
                    return
                }
                if (updater) {
                    sentenceObjects = updater.impression.sentences
                } else {
                    sentenceObjects = rt.comm.settings.responses.impression.sentences
                }
                for (sentence in sentenceObjects) {
                    candidates = sentenceObjects[sentence].candidates;
                    if (!candidates) {
                        continue
                    }
                    for (i = 0, leni = candidates.length; i < leni; i++) {
                        node = candidates[i].node;
                        textNode = document.createTextNode(node.innerText);
                        parentNode = node.parentNode;
                        parentNode.insertBefore(textNode, node);
                        parentNode.removeChild(node);
                        candidates[i].node = textNode
                    }
                }
            }
        }, {
            settings: {
                prodCode: "i",
                prodName: "intext",
                behavior: {
                    def: {
                        skin: "brand",
                        theme: "def",
                        highlightCount: 1,
                        underline: "double",
                        favicon: false,
                        simanitIcon: null,
                        simanitOver: null,
                        simanitWidth: 16,
                        simanitPosition: "right"
                    },
                    sanitizer: {
                        highlightCount: "int",
                        underline: ["double", "single", "dotted", "dashed", "none"],
                        favicon: "bool",
                        simanitIcon: "str",
                        simanitOver: "str",
                        simanitWidth: "int",
                        simanitPosition: ["right", "left"]
                    }
                },
                themes: {
                    color: {
                        def: "#003366",
                        lightBlue: "#1b8ede",
                        green: "#67b045",
                        orange: "#f3933b",
                        red: "#dd3c42",
                        pink: "#d84189",
                        purple: "#5939aa"
                    }
                },
                hookClass: "IL_AD",
                hooksCount: 0,
                maxCandidates: 50,
                scoreFactors: {
                    fontSize: 10,
                    visible: 10,
                    onViewPort: 50,
                    wordCount: 30,
                    importance: 0
                },
                rendered: 0
            }
        }, true);
        intext.bind({
            event: "renderProduct",
            listener: {
                renderIntext: function() {
                    var rt = this.$root,
                        prod = "i";
                    if (!rt.comm.settings.responses.impression.prs[prod]) {
                        rt.event.fire("productRenderStatus", {
                            prod: prod,
                            status: "none"
                        });
                        return
                    }
                    rt.event.fire("productRenderStatus", {
                        prod: prod,
                        status: "during"
                    });
                    rt.utils.timer.start("tmr_hi");
                    rt.event.fire("initIntext")
                }
            }
        });
        intext.bind({
            event: "initIntext",
            listener: {
                init: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        bh = st.behavior,
                        bhi = this.settings.behavior,
                        prod = "i",
                        imp = rt.comm.settings.responses.impression,
                        prodImp = imp.prs[prod],
                        uto = rt.utils.object;

                    function convertDoubleUnderline() {
                        for (var i = 0; i < arguments.length; i++) {
                            if (rt.what(arguments[i].underline) == "undefined" && rt.what(arguments[i].doubleUnderline) != "undefined") {
                                arguments[i].underline = arguments[i].doubleUnderline.toString() == "false" ? "dotted" : "double"
                            }
                        }
                    }
                    bhi.customer = rt.helpers.getCustomerBehavior("link_color highlight_count underline simanit_icon simanit_over simanit_width simanit_position");
                    bhi.impression = rt.helpers.renameBehaviorProperties(prodImp.behavior || {});
                    convertDoubleUnderline(bh.impression, bhi.impression, bhi.customer);
                    bhi.merged = rt.utils.object.extend({}, bh.def, bhi.def, bh.impression, bhi.impression, bh.customer, bhi.customer);
                    rt.helpers.sanitize(bhi.merged, uto.extend({}, bh.sanitizer, bhi.sanitizer));
                    if (!rt.bubble.initialized) {
                        rt.event.fire("initBubble", this.settings.prodName)
                    }
                    rt.event.fire("setIntextMarkers", event.data)
                }
            }
        });
        intext.bind({
            event: "setIntextMarkers",
            listener: {
                setCandidates: function(event) {
                    var rt = this.$root,
                        hs = rt.harvest.settings,
                        ist = this.settings,
                        updater = event.data && event.data.updater ? event.data.updater : null,
                        nodes, context, sentencesKeys, sentenceIndexes, sentences, sentenceObjects, sentence, normalizedSentence, re, k, lenk, i, leni, node, text, sentenceObj, match, newNode, parentNode, harvested = hs.instances[hs.instances.length - 1],
                        matchText, textNode, candidateNode, hadMatches, textFollowingMatch, allCandidates = [];
                    if (updater) {
                        context = updater;
                        sentenceObjects = context.sentences = {}
                    } else {
                        context = rt.comm.settings.responses;
                        sentenceObjects = ist.sentences = {}
                    }
                    nodes = harvested.nodes;
                    sentences = context.impression.sentences;
                    sentenceIndexes = context.impression.prs.i.sentences || [];
                    sentencesKeys = rt.utils.object.keys(sentences);
                    for (k = 0, lenk = sentenceIndexes.length; k < lenk; k++) {
                        sentence = sentencesKeys[sentenceIndexes[k]];
                        normalizedSentence = sentence.replace(/([\+\.\?\(\)\[\]\*])/g, "\\$1").replace(/(\w+)/g, "\\b$1\\b").replace(/\s+/g, "\\s+");
                        re = new RegExp(normalizedSentence, "i");
                        sentenceObj = sentenceObjects[sentence] = {
                            candidates: [],
                            hooks: [],
                            rendered: 0
                        };
                        for (i = 0, leni = nodes.length; i < leni; i++) {
                            if (sentenceObj.candidates.length >= ist.maxCandidates) {
                                break
                            }
                            node = nodes[i];
                            if (!node.parentNode || rt.what(node.data) == "undefined" || rt.utils.array.indexOf(allCandidates, node) != -1) {
                                continue
                            }
                            text = node.data;
                            match = re.exec(text);
                            if (!match || node.parentNode.className == ist.hookClass) {
                                continue
                            }
                            textFollowingMatch = text.substr(match.index + match[0].length);
                            if (textFollowingMatch.match(/^[\u2019']s/) != null) {
                                continue
                            }
                            hadMatches = false;
                            newNode = document.createDocumentFragment();
                            parentNode = node.parentNode;
                            nodes.splice(i, 1);
                            while (match && sentenceObj.candidates.length < ist.maxCandidates) {
                                matchText = match[0];
                                if ((match.index == 0 || text.charAt(match.index - 1).match(/\w/) == null) && (text.length <= match.index + matchText.length || text.charAt(match.index + matchText.length).match(/\w/) == null)) {
                                    hadMatches = true;
                                    if (match.index > 0) {
                                        textNode = document.createTextNode(text.substr(0, match.index));
                                        newNode.appendChild(textNode);
                                        nodes.splice(i++, 0, textNode)
                                    }
                                    if (rt.browser.IE && rt.browser.getVersion(true) < 9) {
                                        candidateNode = document.createElement("span");
                                        candidateNode.innerHTML = ["<span>", matchText.charAt(0), "</span>", matchText.substring(1)].join("")
                                    } else {
                                        candidateNode = document.createTextNode(matchText)
                                    }
                                    rt.utils.array.push(allCandidates, candidateNode);
                                    candidateNode = newNode.appendChild(candidateNode);
                                    rt.utils.array.push(sentenceObj.candidates, this.createCandidate(candidateNode, parentNode, sentence))
                                }
                                text = text.substr(match.index + matchText.length);
                                match = re.exec(text)
                            }
                            if (!hadMatches) {
                                continue
                            }
                            if (text != "") {
                                textNode = document.createTextNode(text);
                                newNode.appendChild(textNode);
                                nodes.splice(i, 0, textNode)
                            }
                            parentNode.insertBefore(newNode, node);
                            parentNode.removeChild(node);
                            node.data = "";
                            leni = nodes.length
                        }
                        this.estimateCandidatesFontSizeIE(sentenceObj.candidates);
                        this.scoreCandidates(sentenceObj.candidates);
                        rt.utils.array.insertionSort(sentenceObj.candidates, "score", false);
                        for (i = ist.behavior.merged.highlightCount, leni = sentenceObj.candidates.length; i < leni; i++) {
                            rt.utils.array.push(nodes, sentenceObj.candidates[i].node)
                        }
                    }
                    rt.event.fire("createIntextHooks", {
                        updater: updater
                    })
                }
            }
        });
        intext.bind({
            event: "createIntextHooks",
            listener: {
                createIntextHooks: function(event) {
                    var rt = this.$root,
                        ist = this.settings,
                        bh = ist.behavior.merged,
                        updater = event.data && event.data.updater ? event.data.updater : null,
                        context, sentences, sentenceIndexes, sentencesKeys, sentenceObjects, sentence, sentenceObj, candidate, textNode, parentNode, hook, k, lenk;
                    if (updater) {
                        context = updater;
                        sentenceObjects = context.sentences
                    } else {
                        context = rt.comm.settings.responses;
                        sentenceObjects = ist.sentences;
                        this.createStyleSheet()
                    }
                    sentences = context.impression.sentences;
                    sentenceIndexes = context.impression.prs.i.sentences;
                    sentencesKeys = rt.utils.object.keys(sentences);
                    for (k = 0, lenk = sentenceIndexes.length; k < lenk; k++) {
                        sentence = sentencesKeys[sentenceIndexes[k]];
                        sentenceObj = sentenceObjects[sentence];
                        while (sentenceObj.candidates.length && sentenceObj.rendered < bh.highlightCount) {
                            candidate = sentenceObj.candidates[0];
                            textNode = candidate.node;
                            parentNode = textNode.parentNode || candidate.parentNode;
                            if (!parentNode) {
                                continue
                            }
                            hook = this.createHook(candidate, textNode, updater);
                            parentNode.insertBefore(hook, textNode);
                            parentNode.removeChild(textNode);
                            candidate.rendered = true;
                            sentenceObj.rendered++;
                            if (sentenceObj.hooks.length == 0 && !updater) {
                                ist.rendered++
                            }
                            rt.utils.array.push(sentenceObj.hooks, sentenceObj.candidates.shift());
                            candidate.pos = rt.utils.dom.element.offset(hook)
                        }
                    }
                    this.revertCandidateNodesIE(updater);
                    rt.utils.timer.stop("tmr_hi");
                    if (!updater) {
                        rt.event.fire("productRenderStatus", {
                            prod: "i",
                            status: "after"
                        })
                    }
                }
            }
        });
        intext.bind({
            event: "intextHookMouseover",
            listener: {
                intextHookMouseover: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        bh = this.settings.behavior.merged,
                        hook = st.hooksMap[event.data.hookId];
                    if (st.clickStatus != "none") {
                        return
                    }
                    var cls = this.settings.hookClass;
                    if (bh.linkHoverColor) {
                        hook.node.className = [cls, " ", cls, "_HOVER"].join("")
                    }
                    if (bh.simanitIcon && bh.simanitOver) {
                        var iconSpan = hook.node.getElementsByTagName("span");
                        if (iconSpan.length) {
                            iconSpan[0].className = [cls, "_ICON ", cls, "_ICON_OVER"].join("")
                        }
                    }
                }
            }
        });
        intext.bind({
            event: "intextHookMouseout",
            listener: {
                hookMouseout: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        ist = this.settings,
                        bh = ist.behavior.merged,
                        hook = st.hooksMap[event.data.hookId],
                        cls = this.settings.hookClass;
                    if (bh.linkHoverColor) {
                        hook.node.className = cls
                    }
                    if (bh.simanitIcon && bh.simanitOver) {
                        var iconSpan = hook.node.getElementsByTagName("span");
                        if (iconSpan.length) {
                            iconSpan[0].className = cls + "_ICON "
                        }
                    }
                }
            }
        });
        var autoPlacement = $root.$create("autoPlacement", {
            createMarker: function(prodId, val) {
                var rt = this.$root,
                    apst = this.settings,
                    dmel = rt.utils.dom.element,
                    resNodeHeight, node, result;
                if (rt.what(prodId) == "array") {
                    prodId = prodId[0]
                }
                node = rt.utils.dom.createDOMFragment({
                    tag: "input",
                    type: "hidden",
                    attributes: {
                        name: prodId,
                        value: val
                    }
                });
                if (apst.result) {
                    result = apst.result
                } else {
                    apst.result = result = this.findPlacement()
                }
                if (result.placement != "before" && (resNodeHeight = dmel.getStyle(result.node, "height"))) {
                    if (resNodeHeight.indexOf("px") != -1) {
                        dmel.setStyle(result.node, {
                            minHeight: parseInt(resNodeHeight, 10) + 45 + "px"
                        })
                    }
                }
                if (result.placement == "append") {
                    result.node.appendChild(node)
                } else {
                    if (result.placement == "prepend") {
                        result.node.insertBefore(node, result.node.firstChild)
                    } else {
                        result.node.parentNode.insertBefore(node, result.node)
                    }
                }
                return [node]
            },
            findPlacement: function() {
                var rt = this.$root,
                    ut = rt.utils,
                    dmel = ut.dom.element,
                    el, i, leni;
                var ids = ut.string.qw("pageContent content_body contentBody contentWrapper main_content_section main-content bodyarea content-wrap Blog1 content");
                var commentsId = ut.string.qw("commentlist comments respond commentpost commentform disqus_thread idc-container-parent");
                for (i = 0, leni = commentsId.length; i < leni; i++) {
                    if (el = dmel.$(commentsId[i])) {
                        if (dmel.isVisible(el)) {
                            return {
                                node: el,
                                placement: (/respond|commentform|disqus_thread/.test(commentsId[i])) ? "before" : "prepend"
                            }
                        }
                    }
                }
                for (i = 0, leni = ids.length; i < leni; i++) {
                    if (el = dmel.$(ids[i])) {
                        if (dmel.isVisible(el)) {
                            return {
                                node: el,
                                placement: "append"
                            }
                        }
                    }
                }
                return {
                    node: this.findBestContainer(),
                    placement: "append"
                }
            },
            findBestContainer: function() {
                var rt = this.$root,
                    hs = this.settings,
                    ut = rt.utils,
                    i, leni, candidate, winner = null,
                    maxScore = -1000,
                    score, node, dm = ut.dom,
                    dmel = dm.element,
                    docHeight, docWidth, iceapw;
                var forbiddenTags = ut.array.toObject(ut.string.qw("body tbody table tr ul dl ol p span embed marquee"), {}, 1);
                var wrapper = dm.findWidestNode();
                if (wrapper.node == document.body) {
                    docWidth = dm.document.getWidth();
                    docHeight = dm.document.getHeight()
                } else {
                    docWidth = wrapper.width;
                    docHeight = wrapper.height
                }
                this.harvest(document.body);
                for (i = 0, leni = hs.candidates.length; i < leni; i++) {
                    candidate = hs.candidates[i];
                    node = candidate.node;
                    if (forbiddenTags[node.tagName.toLowerCase()]) {
                        continue
                    }
                    candidate.wordsCount = parseInt(dmel.getData(node, "iceapw"), 10) || 0;
                    candidate.childrenCount = parseInt(dmel.getData(node, "iceapc"), 10) || 0;
                    if (!candidate.wordsCount || !candidate.childrenCount) {
                        continue
                    }
                    score = candidate.score = (candidate.width / (docWidth || 1) + candidate.height / (docHeight || 1)) / 4 + candidate.wordsCount / (hs.totalWordsCount || 1) - candidate.childrenCount / (hs.totalValidNodes || 1);
                    if (rt.what(score) == "number" && score > maxScore) {
                        maxScore = score;
                        winner = candidate
                    }
                }
                if (winner) {
                    for (i = 0, leni = hs.candidates.length; i < leni; i++) {
                        candidate = hs.candidates[i];
                        if (candidate.wordsCount == winner.wordsCount && candidate.node != winner.node && dmel.inHierarchy(candidate.node, winner.node)) {
                            winner = candidate
                        }
                    }
                }
                hs.winner = winner;
                return winner ? winner.node : document.body
            },
            harvest: function(node) {
                var rt = this.$root,
                    hs = this.settings,
                    nodeType, ut = rt.utils,
                    dmel = ut.dom.element,
                    tm = ut.timer,
                    nt = rt.settings.nodeTypes,
                    i, leni, wordsCount, text, parent, iceapw, iceapc;
                if (!hs.harvesting) {
                    hs.harvesting = true;
                    hs.stopped = false;
                    tm.start("apHarvest");
                    hs.candidates = [];
                    hs.firstNode = node;
                    hs.enabled = true;
                    hs.timeLimit = 1000;
                    hs.totalWordsCount = 0;
                    hs.totalValidNodes = 0
                }
                if (hs.stopped || hs.timeLimit != -1 && tm.poll("apHarvest") >= hs.timeLimit) {
                    hs.stopped = true
                } else {
                    nodeType = node.nodeType
                }
                switch (nodeType) {
                case nt.DOCUMENT:
                case nt.ELEMENT:
                    if (node.className.indexOf(rt.settings.baseClass) == -1 && node.className.indexOf(rt.products.intext.settings.hookClass) == -1 && dmel.isVisible(node) && rt.harvest.isHarvestableNode(node)) {
                        for (i = 0, leni = node.childNodes.length; i < leni; i++) {
                            if (hs.stopped) {
                                break
                            }
                            this.harvest(node.childNodes[i])
                        }
                        hs.totalValidNodes++;
                        parent = node.parentNode;
                        while (parent && parent != document && parent.tagName.toLowerCase() != "html") {
                            iceapc = (parseInt(dmel.getData(parent, "iceapc"), 10) || 0) + 1;
                            dmel.setData(parent, "iceapc", iceapc);
                            parent = parent.parentNode
                        }
                        ut.array.push(hs.candidates, {
                            node: node,
                            parent: node.parentNode,
                            width: dmel.getActualWidth(node),
                            height: dmel.getActualHeight(node)
                        })
                    }
                    break;
                case nt.TEXT:
                    if (hs.enabled) {
                        text = ut.string.trim(node.data).replace(/\s+/g, " ");
                        if (text.match(/\S/)) {
                            wordsCount = text.split(/\s+/).length;
                            hs.totalWordsCount += wordsCount;
                            parent = node.parentNode;
                            while (parent && parent != document && parent.tagName.toLowerCase() != "html") {
                                iceapw = (parseInt(dmel.getData(parent, "iceapw"), 10) || 0) + wordsCount;
                                dmel.setData(parent, "iceapw", iceapw);
                                parent = parent.parentNode
                            }
                        }
                    }
                    break;
                case nt.COMMENT:
                    rt.harvest.checkConditionalTags(ut.string.trim(node.data), hs)
                }
                if (hs.firstNode == node) {
                    hs.harvesting = false;
                    tm.stop("apHarvest")
                }
            }
        }, {
            settings: {}
        }, false);
        var intag = products.$create("intag", {
            locateMarkers: function(prodId, lines) {
                var rt = this.$root,
                    b = rt.browser,
                    i, leni, markers, autoMarker = [];
                if (rt.what(prodId) != "array") {
                    prodId = [prodId]
                }
                for (i = 0, leni = prodId.length; i < leni; i++) {
                    markers = document.getElementsByName(prodId[i]);
                    if (markers.length) {
                        break
                    }
                }
                if ((rt.comm.settings.responses.gsd.wd.rtm == "b" || !markers.length) && (!b.IE || b.getVersion(true) > 6)) {
                    autoMarker = rt.autoPlacement.createMarker(prodId, lines);
                    if (autoMarker.length) {
                        this.settings.autoPlacement = true
                    }
                }
                return rt.utils.array.concat([], markers, autoMarker)
            },
            renderUnit: function(instanceIndex) {
                var rt = this.$root,
                    st = rt.settings,
                    stit = this.settings,
                    instance = stit.instances[instanceIndex],
                    i, leni, html = "";
                for (i = 0, leni = instance.lines; i < leni; i++) {
                    html += this.renderUnitLine(instanceIndex, i, i == leni - 1)
                }
                return rt.utils.dom.createDOMFragment({
                    tag: "div",
                    parent: instance.container,
                    after: instance.marker,
                    cls: st.baseClass,
                    style: {
                        margin: "0 auto",
                        padding: "10px 0",
                        width: instance.width + "px"
                    },
                    innerHTML: html
                })
            },
            renderUnitLine: function(instanceIndex, line, withLogo) {
                var rt = this.$root,
                    st = rt.settings,
                    stit = this.settings,
                    b = rt.browser,
                    instance = stit.instances[instanceIndex],
                    bh = stit.behavior.merged,
                    skinPath = this.getSkinPath();
                var tpl = '<% if (withLogo){ %><div 				id="<%= prodId %>_LOGO_<%= instanceIndex %>" class="<%= baseCls %>" style="float:right; margin-right:15px; margin-top:8px; width:53px; height:12px; cursor:pointer; font-size:1px; <% if (oldIE || oldFF){ %>background:url(<%= skinPath %>logo<%= bh.darkBg ? \'-gray\' : \'\' %>.png) no-repeat scroll 0 0 transparent;<% } %>">				<% if (!(oldIE || oldFF)){ %>					<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="53px" height="12px" viewBox="0 0 636 144" enable-background="new 0 0 636 144" xml:space="preserve">					<g>						<%-- dot (first) --%>						<path id="<%= prodId %>_LOGO_<%= instanceIndex %>_DOT1" fill="<%= bh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M16.918,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.722-10.57-10.57-10.57 S6.334,8.434,6.334,14.282S11.07,24.865,16.918,24.865"/>						<%-- in --%>						<path fill="<%= logoColor %>" d="M88.085,43.784H77.024c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.027,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.467c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.015V45.889v-0.025c0-1.124-0.885-2.033-2.01-2.08h-11.49c-1.09,0.047-1.949,0.907-1.986,1.996v46.828h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.511,25.512h1.151c14.031,0,25.511-11.48,25.511-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.159-17.948,18.031-17.948h6.366c9.871,0,17.948,8.076,18.042,17.948v28.89v4.62v28.873 c0.013,0.023,0.013,0.034,0.013,0.048c0,1.111,0.883,2.008,1.983,2.057h11.505c1.077-0.036,1.936-0.887,1.985-1.973v-27.966v-5.659 V74.966C119.267,57.815,105.234,43.784,88.085,43.784"/>						<%-- f (part) --%>						<path fill="<%= logoColor %>" d="M155.069,56.972v82.643c-0.072,0.992-0.886,1.78-1.903,1.818h-11.014 c-1.062-0.038-1.912-0.897-1.912-1.962c0-0.024,0-0.048-0.023-0.073V34.456c0.716-17.064,14.923-30.744,32.179-30.744h8.536 c0.025,0,0.038,0.011,0.06,0.011c1.053,0,1.915,0.849,1.974,1.901v11.037c-0.035,1.016-0.85,1.844-1.878,1.889h-8.692 c-9.509,0-17.327,7.75-17.327,17.268v6.301V56.972z"/>						<%-- f (part) --%>						<path fill="<%= logoColor %>" d="M151.99,59.104h28.873c0.023-0.012,0.034-0.012,0.047-0.012 c1.111,0,2.008-0.884,2.057-1.984V45.604c-0.036-1.078-0.887-1.938-1.973-1.986h-27.965"/>						<%-- o --%>						<path fill="<%= logoColor %>" d="M276.24,107.925h0.158V76.608c-0.37-18.164-15.248-32.825-33.494-32.825 h-16.756v0.022c-17.875,0.431-32.322,14.924-32.679,32.803h-0.026v31.316c0,18.213,14.601,33.064,32.705,33.496v0.012h16.589h0.021 h0.146C261.304,141.349,276.24,126.354,276.24,107.925 M208.93,107.925L208.93,107.925V77.289c0-9.914,8.096-18.02,18.021-18.02 h15.953c9.946,0,18.02,8.106,18.02,18.02v30.636h-0.167c0,9.949-8.074,18.021-17.999,18.021h-15.807 C217.026,125.946,208.93,117.874,208.93,107.925"/>						<%-- l --%>						<path fill="<%= logoColor %>" d="M312.844,139.376L312.844,139.376c0,1.064-0.798,1.938-1.829,2.045h-11.816 c-1.027-0.107-1.837-0.98-1.837-2.045h-0.013V5.769h0.013c0-1.135,0.908-2.033,2.031-2.057h11.432 c1.124,0.024,2.019,0.922,2.019,2.057V139.376z"/>						<%-- dot (second) --%>						<path id="<%= prodId %>_LOGO_<%= instanceIndex %>_DOT2" fill="<%= bh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M341.662,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.723-10.57-10.57-10.57 s-10.584,4.722-10.584,10.57S335.814,24.865,341.662,24.865"/>						<%-- in (second) --%>						<path fill="<%= logoColor %>" d="M412.829,43.784h-11.061c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.026,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.468c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.016V45.723v-0.025c0-1.123-0.885-2.033-2.01-2.08h-11.49c-1.091,0.047-1.949,0.908-1.986,1.996v46.994h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.512,25.512h1.15c14.031,0,25.512-11.48,25.512-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.158-17.948,18.029-17.948h6.367c9.871,0,17.947,8.076,18.041,17.948v28.89v4.62v28.873 c0.014,0.023,0.014,0.034,0.014,0.048c0,1.111,0.883,2.008,1.982,2.057h11.506c1.076-0.036,1.936-0.887,1.984-1.973v-27.966v-5.659 V74.966C444.01,57.815,429.979,43.784,412.829,43.784"/>						<%-- k --%>						<path fill="<%= logoColor %>" d="M480.277,139.376L480.277,139.376V91.735h0.146h9.255l40.656,48.766 c0.599,0.549,1.15,0.906,1.841,0.932h16.073c0.882-0.025,2.869-0.322,1.794-2.056l-0.013-0.024l-47.58-56.777l44.599-36.815 c0.015-0.049,0.015-0.049,0.036-0.073c1.066-1.734-0.886-2.032-1.78-2.069H527.08c-0.621,0.024-1.15,0.324-1.666,0.791 l-36.812,31.075h-8.325V5.769c0-1.135-0.896-2.033-2.02-2.057h-11.422c-1.124,0.024-2.033,0.922-2.033,2.057v133.607 c0,1.064,0.803,1.938,1.844,2.045h11.802C479.476,141.313,480.277,140.44,480.277,139.376"/>						<%-- s --%>						<path fill="<%= logoColor %>" d="M603.208,84.782H577.99c-6.91-0.114-12.508-5.785-12.508-12.783 c0-6.996,5.598-12.895,12.508-12.895h39.271c1.146,0,2.08-0.959,2.08-2.111v0.191V45.752v-0.037c0-1.164-0.935-2.097-2.08-2.097 H577.99c-15.451,0-28.008,12.73-28.008,28.381c0,15.651,12.557,28.381,28.008,28.27h24.252c6.911,0.111,12.508,5.812,12.508,12.795 c0,6.996-5.597,12.896-12.508,12.896H591.56l0.001-0.014h-28.874c-0.022,0.014-0.034,0.014-0.047,0.014 c-1.11,0-2.007,0.896-2.056,2.01v11.449c0.035,1.092,0.886,1.963,1.973,2.014h0.225h27.74h12.224 c15.209-0.279,27.491-12.9,27.491-28.369C630.236,97.737,618.191,85.202,603.208,84.782"/>					</g>					</svg>				<% } %>			</div><% } %>			<ul id="<%= prodId %>_LIST_<%= instanceIndex %>_<%= line %>" class="<%= baseCls %>" style="display:block; width:<%= instance.width - bh.logoWidth -30 %>px; height:<%= bh.tagHeight %>px; text-align:center; padding:0; margin:6px 0 0 0; font-size:0; overflow:hidden;"></ul>';
                return rt.utils.VeST(tpl, {
                    prodId: stit.prodId,
                    baseCls: st.baseClass,
                    st: st,
                    bh: bh,
                    themeColor: stit.themes.color[bh.theme],
                    instance: instance,
                    instanceIndex: instanceIndex,
                    oldIE: stit.oldIE,
                    oldFF: b.Firefox && b.getVersion(true) < 4,
                    skinPath: skinPath,
                    line: line,
                    withLogo: withLogo,
                    logoColor: bh.darkBg ? "#888888" : "#003366"
                })
            },
            getSkinPath: function() {
                var stit = this.settings;
                return ["http:/", this.$root.settings.hosts.resources, "static", "skins", stit.behavior.merged.skin, stit.prodName, stit.rv, ""].join("/")
            },
            hookMouseStateChange: function(event) {
                var el = event.element,
                    key;
                for (key in event.data) {
                    el.style[key] = event.data[key]
                }
            }
        }, {
            settings: {
                prodId: "IL_IN_TAG",
                tagCloud: "IL_TAG_CLOUD",
                relatedTags: "IL_RELATED_TAGS",
                prodCode: "t",
                prodName: "intag",
                rv: 1,
                instances: [],
                containerMinWidth: 200,
                sentences: {},
                oldIE: (function() {
                    var b = $root.browser;
                    return (b.IE && (document.compatMode == "BackCompat" || b.getVersion(true) < 9))
                }()),
                behavior: {
                    def: {
                        skin: "brand",
                        theme: "def",
                        fontFamily: "Arial,sans-serif",
                        fontWeight: "normal",
                        fontSize: 13,
                        underline: "single",
                        logoHeight: 11,
                        logoWidth: 48,
                        height: 60,
                        hookMargin: 15,
                        lines: 1,
                        darkBg: false
                    },
                    sanitizer: {
                        fontFamily: "str",
                        fontWeight: ["normal", "bold"],
                        fontSize: "int",
                        underline: ["double", "single", "dotted", "dashed", "none"],
                        logoHeight: "int",
                        logoWidth: "int",
                        height: "int",
                        hookMargin: "int",
                        lines: "int",
                        darkBg: "bool"
                    }
                },
                themes: {
                    color: {
                        def: "#003366",
                        lightBlue: "#1b8ede",
                        green: "#67b045",
                        orange: "#f3933b",
                        red: "#dd3c42",
                        pink: "#d84189",
                        purple: "#5939aa"
                    }
                }
            }
        }, true);
        intag.bind({
            event: "renderProduct",
            listener: {
                renderIntag: function() {
                    var rt = this.$root,
                        prod = this.settings.prodCode;
                    if (!rt.comm.settings.responses.impression.prs[prod]) {
                        rt.event.fire("productRenderStatus", {
                            prod: prod,
                            status: "none"
                        });
                        return
                    }
                    rt.event.fire("productRenderStatus", {
                        prod: prod,
                        status: "during"
                    });
                    rt.event.fire("initIntag")
                }
            }
        });
        intag.bind({
            event: "initIntag",
            listener: {
                init: function() {
                    var rt = this.$root,
                        st = rt.settings,
                        bh = st.behavior,
                        stit = this.settings,
                        prod = stit.prodCode,
                        uto = rt.utils.object,
                        prodImp = rt.comm.settings.responses.impression.prs[prod],
                        bhr = stit.behavior,
                        i, leni;
                    var cbh = rt.helpers.getVar("related_tags") || {};
                    bhr.impression = rt.helpers.renameBehaviorProperties(prodImp.behavior || {});
                    bhr.merged = uto.extend({}, bh.def, bhr.def, bh.impression, bhr.impression, bh.customer, cbh);
                    bhr.merged.tagHeight = Math.max(Math.ceil(bhr.merged.fontSize * 1.3) + 2, 17);
                    rt.helpers.sanitize(bhr.merged, uto.extend({}, bh.sanitizer, bhr.sanitizer));
                    if (!stit.themes.color[bhr.merged.theme]) {
                        bhr.merged.theme = "def"
                    }
                    if (!rt.bubble.initialized) {
                        rt.event.fire("initBubble", stit.prodName)
                    }
                    var markers = this.locateMarkers([stit.prodId, stit.relatedTags], bhr.merged.lines);
                    if (markers.length) {
                        for (i = 0, leni = markers.length; i < leni; i++) {
                            var o = {
                                marker: markers[i],
                                container: markers[i].parentNode,
                                lines: parseInt(markers[i].value, 10) || 1,
                                hooksCount: 0
                            };
                            o.width = rt.utils.dom.element.getActualWidth(o.container);
                            if (o.width < stit.containerMinWidth) {
                                rt.logger.warn("Warning: In-Tag instance does not have minimum required width.", this.init);
                                continue
                            }
                            rt.utils.array.push(stit.instances, o)
                        }
                    }
                    rt.event.fire("createIntagUnits")
                }
            }
        });
        intag.bind({
            event: "createIntagUnits",
            listener: {
                createIntagUnits: function() {
                    var rt = this.$root,
                        st = rt.settings,
                        stit = this.settings,
                        bh = stit.behavior.merged,
                        ut = rt.utils,
                        dm = ut.dom,
                        dmel = dm.element,
                        i, leni, k, lenk, instance, sentence, liNode, hook, baseCls = st.baseClass,
                        hookId, j, lenj, lines, currentLine, logo, adNode, ps, b = rt.browser;
                    var underline = dm.style.buildHookUnderlineCSS(bh.underline, bh.linkColor, true);
                    dm.style.addRule("." + stit.prodId + "_AD", [underline, "display:inline; color:", bh.linkColor, " !important; cursor:pointer !important; font-family:", bh.fontFamily, "; font-weight:", bh.fontWeight, "; font-size:", bh.fontSize, "px !important; white-space:nowrap !important; float:none !important;"].join(""));
                    var liStyle = {
                        display: "inline",
                        margin: 0,
                        padding: 0,
                        background: "none"
                    };
                    var currentSentenceIndex = 0,
                        imp = rt.comm.settings.responses.impression,
                        sentenceIndexes = imp.prs[stit.prodCode].sentences,
                        el, ul, computedWidth, availWidth, sentenceLoopCount, sentencesKeys = ut.object.keys(imp.sentences);
                    for (i = 0, leni = stit.instances.length; i < leni; i++) {
                        instance = stit.instances[i];
                        currentLine = 0;
                        el = instance.node = this.renderUnit(i);
                        ps = el.previousSibling;
                        while (ps) {
                            if (ps.nodeType == st.nodeTypes.ELEMENT && ps.tagName.toLowerCase() != "input") {
                                if (/left|right/.test(dmel.getStyle(ps, b.IE ? "styleFloat" : "cssFloat"))) {
                                    dmel.setStyle(el, {
                                        clear: "left"
                                    })
                                }
                                break
                            }
                            ps = ps.previousSibling
                        }
                        instance.pos = dmel.offset(el);
                        lines = [];
                        for (j = 0, lenj = instance.lines; j < lenj; j++) {
                            ul = dmel.$([stit.prodId, "LIST", i, j].join("_"));
                            if (ul) {
                                ut.array.push(lines, ul)
                            }
                        }
                        if (!lines.length) {
                            rt.logger.warn("Error: In-Tag UL element not found.", this.createIntagUnits);
                            rt.event.fire("productRenderStatus", {
                                prod: stit.prodCode,
                                status: "none"
                            });
                            return
                        }
                        logo = dmel.$([stit.prodId, "LOGO", i].join("_"));
                        if (logo) {
                            rt.event.dom.bind(logo, {
                                event: "click",
                                listener: function(event) {
                                    rt.utils.dom.event.stop(event.domEvent);
                                    if (st.homeUrl) {
                                        window.open(st.homeUrl, "_blank")
                                    }
                                }
                            })
                        }
                        computedWidth = 0;
                        availWidth = instance.width - bh.logoWidth - 30;
                        sentenceLoopCount = 0;
                        for (k = currentSentenceIndex, lenk = sentenceIndexes.length; k < lenk; k++) {
                            sentence = sentencesKeys[sentenceIndexes[k]];
                            hookId = ++st.hooksCount;
                            liNode = dm.createDOMFragment({
                                tag: "li",
                                parent: lines[currentLine],
                                cls: baseCls,
                                style: liStyle,
                                children: {
                                    tag: "span",
                                    cls: [baseCls, " ", stit.prodId, "_AD"].join(""),
                                    style: {
                                        padding: ["0 ", bh.hookMargin, "px"].join(""),
                                        fontWeight: "normal"
                                    },
                                    id: [stit.prodId, "_AD", hookId].join(""),
                                    innerHTML: ut.string.capitalize(sentence)
                                }
                            });
                            adNode = liNode.getElementsByTagName("span")[0];
                            rt.event.dom.bind(adNode, {
                                event: "mouseover",
                                data: {
                                    fontWeight: "bold",
                                    padding: ["0 ", bh.hookMargin - 2, "px"].join("")
                                },
                                listener: this.hookMouseStateChange
                            });
                            rt.event.dom.bind(adNode, {
                                event: "mouseout",
                                data: {
                                    fontWeight: "normal",
                                    padding: ["0 ", bh.hookMargin, "px"].join("")
                                },
                                listener: this.hookMouseStateChange
                            });
                            computedWidth += liNode.offsetWidth;
                            if ((computedWidth > availWidth) || (sentenceLoopCount >= 3 && currentLine >= lines.length - 1)) {
                                if (currentLine < lines.length - 1) {
                                    lines[++currentLine].appendChild(liNode);
                                    computedWidth = bh.hookMargin * 2 + liNode.offsetWidth
                                } else {
                                    lines[currentLine].removeChild(liNode);
                                    currentSentenceIndex = k;
                                    st.hooksCount--;
                                    break
                                }
                            }
                            instance.hooksCount++;
                            hook = rt.helpers.createHook(hookId, sentence, liNode.firstChild, bh.fontSize, this, stit.prodCode, stit.prodName, true, instance);
                            if (stit.autoPlacement) {
                                hook.pst = "auto"
                            }
                            dm.createDOMFragment({
                                isTextNode: true,
                                value: "\n",
                                parent: lines[currentLine]
                            });
                            if (k == lenk - 1) {
                                k = -1;
                                ++sentenceLoopCount
                            }
                        }
                    }
                    this.$root.event.fire("productRenderStatus", {
                        prod: stit.prodCode,
                        status: "after"
                    })
                }
            }
        });
        var insearch = products.$create("insearch", {
            renderUnit: function(hookId) {
                var rt = this.$root,
                    b = rt.browser,
                    ut = rt.utils,
                    dm = ut.dom,
                    dms = dm.style,
                    st = rt.settings,
                    stsr = this.settings,
                    data = rt.helpers.getHookData(hookId),
                    instance = stsr.instance,
                    hdrCls = "IL_SR_BG",
                    srPos = "",
                    srIEStyle = {},
                    hdrCss, btnCss, skinPath = this.getSkinPath(),
                    sentence, content, tpl, html, nodeStyle, so = window.orientation,
                    ibh = instance.behavior,
                    hook = st.hooksMap[hookId],
                    themeColor;
                var ad = data.ads[0];
                rt.helpers.setActualTemplate(ad);
                if (ad.template == "text") {
                    var textLength = (ad.thumbURL && ad.thumbURL != "no-image") ? 145 : 180;
                    var pos = ad.displayedURL.indexOf("/");
                    if (pos != -1) {
                        ad.displayedURL = ad.displayedURL.substr(0, pos)
                    }
                    ad.title = ut.string.truncateToChar(ad.title, 52, " ", "...");
                    ad.text = ut.string.truncateToChar(ad.text, textLength, " ", "...");
                    ad.thumbURL = (ad.thumbURL != "no-image") ? ad.thumbURL : false
                }
                if (ad.contentUrl) {
                    content = rt.bubble.templates.external(hook, 0)
                } else {
                    content = rt.helpers.parseTokens(hook)
                }
                if (b.IE && b.getVersion(true) < 8) {
                    hdrCss = skinPath + "hdr-btns.png";
                    btnCss = skinPath + "btn.png"
                } else {
                    hdrCss = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB+hJREFUeNrEV3tMm9cVP7Y/29gY/MBvg3klgFJGAnFeBUpok03NOhJeaVcSdVvGEu2fbdqmNm23bkmqRk1bbVm0PiKtTaVtSkLTh9SQlLY0CWSDpkugy8MmCY+AwRiwzbDBYJudc+FzP0e0+W+70pG/ex733Hvuub9zLPr9/gPAj/n5edDr9TA2NmbG6fJF9i3kuZEHIpEorvvbZ59hv7y9WCyGWCwGJpMJPB5PBrKykWJITp1O652Y8DE9fg0OEscGpIOl999fbjQaUEMEXq8Xbjid7ch/Guk8fPP4DtKBB8rLHXp9Gm5knjYRc7qcnyD/KaR/8YpCx3vWrllzZN26tRIJ7p4fmfYMKCkuLv380qXWf3Z0/AxZR77G6TMPlJftL161SiSMTFamXby6pGRz+8WLFZevXPkRsv4qdFyBix9ZuXKlZGYmzBh+v5+FXqvVsnlhYaE4Eo0cvnTpCydOW+5yWrdhw/oD+fkFEJqeWXJXDodDFolE/vLvq1ev08m55ORkkMvkLxcUFEimF40+bvkYOjo62HdJSQk8vOVh9p2fly/q6+v/QzAYvE+wpsRisbycnZUDZD/q8YA8SQ5qtYYJMdSQtDgvLPyWrH9g4EWplNtEMc2z2qyrZ2dnIRyewcTyQmdnJzz51K9h794nobu7G0ZGRpgsHA6D1WpdgTZFvFeZTFaabrPZF+Qz4Ha74bXXXofhYTc4nTfg6BtHYXJykskikTmyfxDNzFw0EimkU/Mhlkg42LZtKwSD00CbofuibOXlqmQV8Urws3vBsdQhtF+etxzm5ubg2Ftvo6MI7NjRwE7Ly1FX1NMTyOPkSUkKUiAn/DAYjeByuqC19VNYsWIFyOXyuBzvGRQKhSoeZwknj0SicTn9yBVJbJ6UlASRWJRFih9R1MWDiLg0ne5OIDAJKSkpCckQDE1BUVERONY4YCb8VcIEAgFIVipd/BxP0OsP+EEqk7I5hfps81loaHic8ABOHj8J1TXVkJK6sH4Aw45ZPinChy1veueUJzc3Vy10HJ5ZcIYRSdjQzVs3p6q3VlkMBsMUzZ0ul+n8hbaB3JxcGXM8NIQRM4AMo8ThtY16RhAOxOx1zKP89q2b7sYf78qg5Aqr1al/HB4exjBG4xSbj7GwCnkjuAjqvoo2U4K9eJRKxTEvno50bOnpIEaHc3MRmMbNa7Q6JC2TDQ4OEjK+RIgmordKBzt+sukTVC4lyFxqjI+PI6bGOhoe/34lTqd5/sxCZNRo34a5UKjRaJe0p2elUinP1lZXf5eumnfMEvZ085lXh9zuBsw3kVKpBAKgUCjEFjebTccf2bJlN12TcMFFx5Tp+rMftbzpGR19hGwVCiUCUAxfRwgTLRyzZ6Qf/fbmzT8nk7shk8K389H6ukNd3d31Pp+/gJho4EIYbDp34cLle+D0GNL36mtr1l3p6qqZnPxPLpaOWG5O1tXiVcXH29rbbgiVhSf+nw4x/J8Gt+/A8wn1eHEzhEz5FBF6MUhfUCbyNZfGc795NqEecxzHkIowBWkt0jJKIqRrSF20/DfV49qUlNRDaWm6bEoQGqHQNExMjPcj3u7F6d/vcZBdGo1mn1arsyoQvegcWFDI3jk1NfULlDcvVY9/l5WV9ZzRaEpYSaVKAaPRmInF4299fX1UHPYu4ZCO8edly5bv0el0CQJCRLPZnI848eGdOwO/QtYrwjveSk7NZgtrYYgI7sa8Y/E5bSg7O5u6iMeWcLwbkW8PYQCvfzfZbDaR3W4n8KhkJ0bAB6lU9qLVaouvcrG9HaFulBmkYQtTWlbG+LSx8fGJF/x+34nFfoqBT1qafr9eb2ATQkCZVMbsaAwhWimxehFkpqdniHw+30EspevoxEWIu3lSTA6iWawkg3cG4Qc/fAJ27twBHqzFM9Mh4OXYi2WhoYPfJKJVhclk1PPyZKUCmk+fhglEut7bt+H8ufNYSpOZTCaVgj5NT4mXyeHl5KtTU+PVRSvTwqOP1cMs1lRKDCpvKrwnXq7B2orO6K47aS6VSldiQsXlVpsNtm+vgxMnmjDTJdDYuCseGnbnWKX6B/qzOKwiHMd2I4sL1WotuFwuONN8BjZteghSMMF4oCFddBxXxrlEykkT7Cd8fqzTEpZz3rFxwNYIBPpMJraYzX2hUJAVeyHRm9y4cSOsdjiovYnzg6ir0aivfZW1KmdQYN/X18t6tp/sboR6PPmpd06xGs7LQxhF7GbHCDIlb751bKi0tNQkbEspuQgszBZzAsBgm+rbVlVl0Wo1rK3o7x/QII67N6xfr6B5b28vqFPVoEvTMbCg+sxhRKhGx6IxaP9H+217hj2XkiuKz+BgT08PKLDo84QlDFiVEfBoUa1Gc4hquODa/Cg7TLWWdKhVstms7DsJT5iTkwP2TDubX8fmz2K27KeejC8S4nffe78J25hqbEsS/qrwJ73cdYV67Q/qampqFqFQOOQnTjY149+XysLC+/BmE+0pch2fd0I0Gn0b8+GJu6sT99m5c/uwk/glprwMn8hCAR8dBe+odxb/kvzpwcpK+hsz+zVwqfyopeUlfyDQaDaZOYNBzxyOYAMwMT4xjfX8+fKyshf49y+ETEL4p+traw9fvXatyu0ezqONWSzmm5UVFe9/2trqvgdOh5B+ur2u7mD3l19WDQ25cygyGRnp1x+qrPzgQlvbmFD5vwIMAAZsT2nNzBrxAAAAAElFTkSuQmCC";
                    btnCss = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAABICAYAAACUavnrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4JJREFUeNrsnL9u01AUxs+xbxOS1LQVBQkGJBgQMPUNGCshMiB1zgqoOwMViBfoxMYGqjqwMIBgYqC8AQsStAyVaAmllDZN4j+xL/fGdsgD9J4I8X1SFDvZfv70+dxzj60eP3119vXGx9V6rXLzdP2U0gSdtNh8umEct/ePXn7ebt9nutZ6dvHyhdZsUKcsA3JX8n2mvV/HtLN38ET5Qb1prgJ1+xHIuHS7sXuSZvagqcy5l//IIOMYOudB4ivSpG2seGDuVgZ4kd5a2TOtNSHO3d9MM51DHlYrWZYRjC5gdp3l0K3t7QWA0SWgF06nwumQ80inEvMwXlINn0soG3e6xl1UyO3j8QKnyzrdhvsgRaaLBfsoXuB0UXlAAOiADgE6oEOA/s9B94FBVL6p03mLmBfAQmqBpDcVZ/EKJ701s0CaAxHHseJxW081HilD/c1sw1vu9JMl4/qGbREAz8nzZtKdoF5Z/51kGyqhynxXBYtXrp+7MV2rKrQETl52U7obJtGX7fbPOI7e2UxfNb+3dvcO0YNxCt5uiOq75iBR7FEzihMKowRkBBxvZOde2GNDHmMvAtDNJ6XUloykAVy2aFTlFYDkpP6GPCSSLyV0DzN1MrlScFcMp8tSHzkd0OWYs4XOebxgWSRBvRjBGMaLgc6gLpQubOOFTbyYxRG2MwSMXk54FfGCWBdLlzxefEOcUTYKOt3Gi4/ei6jT82hntALkynRMA0xCgA7o/w90zL3Iylea9JapFxfQCnCr4WPq8cAebqo0Dh909neeK6XmCRvTTqn3++Gu1pWHitL47XHv6B771dvmn4Aw9+IoxvWhTsMXVJ35oGiqMR/MnLl19dL5xelaBe97cWJytm8ZiT993e12euF7uzhaNaBb334c5I/cgbob8Pk98445ipU5afbjhHphDDIC4M3SP597sQ0v7aMR4Bw62bkXKude0HsRlMYIhiTt4luVhTskFzFw+gSsnm9MI9FFrZ47Hb1GWadb8ogXWeqj7TpILl+KWUagkBRKxslA5+Gd1EOjSyDRxzLdQwUzieoFETOBTEf9Ig+dMEAqCr18/AXQ3cc5jznd57wBg4hxuiQa7fj7SmvaYs/OvaB8cQ3dzr2YsnFTZYNopXfwfc1An8OutFtFcdJmXbXve0nfVDlZPu4NlgxyvO/FjTyPdSeoVdbTRG/8EWAAta8y0OqpUAcAAAAASUVORK5CYII="
                }
                dms.addRule("." + hdrCls, ['background-image : url("', hdrCss, '")'].join(""));
                dms.addRule("#IL_SR_BTN", ['background-image : url("', btnCss, '")'].join(""));
                instance.height = ibh.heightClose;
                if (ad.template == "text") {
                    instance.fullWidth = 722
                } else {
                    instance.fullWidth = data.width > 0 ? data.width : 722;
                    ibh.heightOpen = (data.height > 0 ? data.height : 90) + 55
                }
                instance.left = Math.ceil((dm.viewport.getWidth() - instance.fullWidth) / 2);
                if (stsr.prodCode == "o") {
                    sentence = data.sentence
                } else {
                    sentence = st.impression.params.refq
                }
                sentence = ut.string.truncateToChar(sentence, 38, " ", "...").replace(/</g, "&lt;");
                if (stsr.oldIE) {
                    srPos = "absolute";
                    srIEStyle = {
                        top: (dm.viewport.getHeight() + dm.document.getScrollTop() - ibh.heightClose) + "px"
                    }
                } else {
                    srPos = "fixed"
                }
                themeColor = stsr.themes.color[ibh.theme];
                tpl = '<% if (oldIE || oldFF){ %>			<img src="<%= skinPath %>in-search-shadow.png" alt="" width="<%= instance.fullWidth+20 %>" height="<%= ibh.heightOpen+10 %>" style="position:absolute; top:-10px; left:-10px; width:<%= instance.fullWidth+20 %>px; height=<%= ibh.heightOpen+10 %>px; overflow:hidden;" />			<% } %>			<%-- Header --%>			<div class="<%= baseCls %>" style="position:absolute; top:0; left:0; width:<%= instance.fullWidth %>px; <%= titleBase %>; cursor: pointer;">				<% if (ibh.favicon){ %><div class="<%= baseCls %>" style="position:absolute; left:15px; width:16px; height:16px; top:12px; background:url(<%= ibh.favicon %>) no-repeat scroll 0 0 transparent;"></div><% } %>				<div class="<%= baseCls %>" style="position:absolute; width:<%= instance.fullWidth - 181 %>px; height:24px; left:<%= ibh.favicon ? 35 : 15 %>px; top:10px; color:<%= ibh.titlePrefixColor %>; font-family: Trebuchet MS,Arial,sans-serif; font-size:15pt; font-weight:normal; font-style:normal;"><%= titlePrefix %> <span class="<%= baseCls %>" style="color:<%= ibh.titleTermColor %>; font-weight: bold; font-size:15pt;"><%= sentence %></span>?</div>				<div id="IL_SR_LOGO" class="<%= baseCls %>" style="position:absolute; top:10px; right:47px; width:48px; height:11px; cursor:pointer; font-size:1px; <% if (oldIE || oldFF){ %>background:url(<%= skinPath %>logo11.png) no-repeat scroll 0 0 transparent;<% } %>">					<% if (!(oldIE || oldFF)){ %>						<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="48px" height="11px" viewBox="0 0 636 144" enable-background="new 0 0 636 144" xml:space="preserve">						<g>							<%-- dot (first) --%>							<path id="IL_SR_LOGO_DOT1" fill="<%= ibh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M16.918,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.722-10.57-10.57-10.57 S6.334,8.434,6.334,14.282S11.07,24.865,16.918,24.865"/>							<%-- in --%>							<path fill="#003366" d="M88.085,43.784H77.024c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.027,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.467c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.015V45.889v-0.025c0-1.124-0.885-2.033-2.01-2.08h-11.49c-1.09,0.047-1.949,0.907-1.986,1.996v46.828h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.511,25.512h1.151c14.031,0,25.511-11.48,25.511-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.159-17.948,18.031-17.948h6.366c9.871,0,17.948,8.076,18.042,17.948v28.89v4.62v28.873 c0.013,0.023,0.013,0.034,0.013,0.048c0,1.111,0.883,2.008,1.983,2.057h11.505c1.077-0.036,1.936-0.887,1.985-1.973v-27.966v-5.659 V74.966C119.267,57.815,105.234,43.784,88.085,43.784"/>							<%-- f (part) --%>							<path fill="#003366" d="M155.069,56.972v82.643c-0.072,0.992-0.886,1.78-1.903,1.818h-11.014 c-1.062-0.038-1.912-0.897-1.912-1.962c0-0.024,0-0.048-0.023-0.073V34.456c0.716-17.064,14.923-30.744,32.179-30.744h8.536 c0.025,0,0.038,0.011,0.06,0.011c1.053,0,1.915,0.849,1.974,1.901v11.037c-0.035,1.016-0.85,1.844-1.878,1.889h-8.692 c-9.509,0-17.327,7.75-17.327,17.268v6.301V56.972z"/>							<%-- f (part) --%>							<path fill="#003366" d="M151.99,59.104h28.873c0.023-0.012,0.034-0.012,0.047-0.012 c1.111,0,2.008-0.884,2.057-1.984V45.604c-0.036-1.078-0.887-1.938-1.973-1.986h-27.965"/>							<%-- o --%>							<path fill="#003366" d="M276.24,107.925h0.158V76.608c-0.37-18.164-15.248-32.825-33.494-32.825 h-16.756v0.022c-17.875,0.431-32.322,14.924-32.679,32.803h-0.026v31.316c0,18.213,14.601,33.064,32.705,33.496v0.012h16.589h0.021 h0.146C261.304,141.349,276.24,126.354,276.24,107.925 M208.93,107.925L208.93,107.925V77.289c0-9.914,8.096-18.02,18.021-18.02 h15.953c9.946,0,18.02,8.106,18.02,18.02v30.636h-0.167c0,9.949-8.074,18.021-17.999,18.021h-15.807 C217.026,125.946,208.93,117.874,208.93,107.925"/>							<%-- l --%>							<path fill="#003366" d="M312.844,139.376L312.844,139.376c0,1.064-0.798,1.938-1.829,2.045h-11.816 c-1.027-0.107-1.837-0.98-1.837-2.045h-0.013V5.769h0.013c0-1.135,0.908-2.033,2.031-2.057h11.432 c1.124,0.024,2.019,0.922,2.019,2.057V139.376z"/>							<%-- dot (second) --%>							<path id="IL_SR_LOGO_DOT2" fill="<%= ibh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M341.662,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.723-10.57-10.57-10.57 s-10.584,4.722-10.584,10.57S335.814,24.865,341.662,24.865"/>							<%-- in (second) --%>							<path fill="#003366" d="M412.829,43.784h-11.061c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.026,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.468c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.016V45.723v-0.025c0-1.123-0.885-2.033-2.01-2.08h-11.49c-1.091,0.047-1.949,0.908-1.986,1.996v46.994h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.512,25.512h1.15c14.031,0,25.512-11.48,25.512-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.158-17.948,18.029-17.948h6.367c9.871,0,17.947,8.076,18.041,17.948v28.89v4.62v28.873 c0.014,0.023,0.014,0.034,0.014,0.048c0,1.111,0.883,2.008,1.982,2.057h11.506c1.076-0.036,1.936-0.887,1.984-1.973v-27.966v-5.659 V74.966C444.01,57.815,429.979,43.784,412.829,43.784"/>							<%-- k --%>							<path fill="#003366" d="M480.277,139.376L480.277,139.376V91.735h0.146h9.255l40.656,48.766 c0.599,0.549,1.15,0.906,1.841,0.932h16.073c0.882-0.025,2.869-0.322,1.794-2.056l-0.013-0.024l-47.58-56.777l44.599-36.815 c0.015-0.049,0.015-0.049,0.036-0.073c1.066-1.734-0.886-2.032-1.78-2.069H527.08c-0.621,0.024-1.15,0.324-1.666,0.791 l-36.812,31.075h-8.325V5.769c0-1.135-0.896-2.033-2.02-2.057h-11.422c-1.124,0.024-2.033,0.922-2.033,2.057v133.607 c0,1.064,0.803,1.938,1.844,2.045h11.802C479.476,141.313,480.277,140.44,480.277,139.376"/>							<%-- s --%>							<path fill="#003366" d="M603.208,84.782H577.99c-6.91-0.114-12.508-5.785-12.508-12.783 c0-6.996,5.598-12.895,12.508-12.895h39.271c1.146,0,2.08-0.959,2.08-2.111v0.191V45.752v-0.037c0-1.164-0.935-2.097-2.08-2.097 H577.99c-15.451,0-28.008,12.73-28.008,28.381c0,15.651,12.557,28.381,28.008,28.27h24.252c6.911,0.111,12.508,5.812,12.508,12.795 c0,6.996-5.597,12.896-12.508,12.896H591.56l0.001-0.014h-28.874c-0.022,0.014-0.034,0.014-0.047,0.014 c-1.11,0-2.007,0.896-2.056,2.01v11.449c0.035,1.092,0.886,1.963,1.973,2.014h0.225h27.74h12.224 c15.209-0.279,27.491-12.9,27.491-28.369C630.236,97.737,618.191,85.202,603.208,84.782"/>						</g>						</svg>					<% } %>				</div>				<div class="<%= baseCls %> <%= hdrCls %>" id="IL_SR_HELP" style="position:absolute; right:26px; top:9px; width:15px; height:15px; background-position:0 0; cursor:pointer; font-size:1px;"></div>				<div class="<%= baseCls %> <%= hdrCls %>" id="IL_SR_X" style="position:absolute; right:10px; top:9px; width:15px; height:15px; background-position:-15px 0; cursor:pointer; font-size:1px;"></div>			</div>			<%-- Body --%>			<div id="IL_SR_AD_AREA" class="<%= baseCls %>" style="position:absolute; top:55px; left:0; width:<%= instance.fullWidth %>px; height:<%= ad.template == \'text\' ? 125 : data.height %>px; background-color:#ffffff; cursor: pointer;">				<% if (ad.template == \'text\'){ %>					<% if (ibh.thumb && ad.thumbURL){ %>						<div class="<%= baseCls %>" style="margin-left:15px; float:left; width:110px; background-color:#e8e8e8; -moz-box-shadow:2px 2px 5px #888; -webkit-box-shadow:2px 2px 5px #888; box-shadow:2px 2px 5px #888;">							<img class="<%= baseCls %>" src="<%= ad.thumbURL %>" width="110" height="82">						</div>					<% } %>					<div class="<%= baseCls %>" style="width:<%= instance.fullWidth - (ibh.thumb && ad.thumbURL ? 307 : 182) %>px; float:left; margin-left:30px;">						<div class="<%= baseCls %>" style="color:#1122CC; font-family:Trebuchet MS,Arial,sans-serif; font-size:12pt; font-weight:normal; text-decoration:none;"><%= ad.title %></div>						<div class="<%= baseCls %>" style="color:#222222; font-family:Trebuchet MS,Arial,sans-serif; font-size:10pt; font-weight:normal; padding-top:4px;"><%= ad.text %></div>						<div class="<%= baseCls %>" style="color:#009933; font-family:Trebuchet MS,Arial,sans-serif; font-size:10pt; font-weight:normal; padding-top:4px; overflow:hidden;"><%= ad.displayedURL %></div>					</div>					<div id="IL_SR_BTN" class="<%= baseCls %>" style="position:absolute; right:24px; font-family:Trebuchet MS,Arial,sans-serif; font-size:10pt; font-weight:bold; cursor:pointer; text-align:center; width:93px; height:24px; top:59px; line-height:24px; color:#ffffff;"><%= btnText %></div>				<% } else { %>					<% if (ad.actualTemplate == "iframe"){ %>						<iframe name="IL_SR_FRAME" class="<%= baseCls %>" src="<%= st.blankURL %>" width="<%= data.width %>" height="<%= data.height %>" frameborder="0" scrolling="no"></iframe>						<%= rt.helpers.getEchoForm(content, "IL_SR_FRAME", "IL_SR_FORM") %>					<% } else { %>						<%= content %>					<% } %>				<% } %>			</div>';
                html = ut.VeST(tpl, {
                    rt: rt,
                    st: st,
                    baseCls: st.baseClass,
                    hdrCls: hdrCls,
                    ibh: ibh,
                    instance: instance,
                    data: data,
                    ad: ad,
                    content: content,
                    sentence: sentence,
                    skinPath: skinPath,
                    oldIE: stsr.oldIE,
                    oldFF: b.Firefox && b.getVersion(true) < 4,
                    themeColor: themeColor,
                    titleBase: stsr.themes.tb[ibh.tb],
                    titlePrefix: rt.helpers.translate(data.tp || ibh.tp),
                    btnText: rt.helpers.translate(data.bt || ibh.bt)
                });
                var boxShadow = "0 2px 6px 2px rgba(0, 0, 0, 0.5)";
                nodeStyle = ut.object.extend({
                    position: srPos,
                    bottom: 0,
                    zIndex: st.baseZIndex,
                    width: instance.fullWidth + "px",
                    height: instance.height + "px",
                    left: instance.left + "px",
                    borderTop: "2px solid " + themeColor,
                    borderLeft: "1px solid #a7a9ab",
                    borderRight: "1px solid #a7a9ab",
                    boxShadow: boxShadow,
                    MozBoxShadow: boxShadow,
                    WebkitBoxShadow: boxShadow,
                    oBoxShadow: boxShadow,
                    msBoxShadow: boxShadow
                }, (stsr.oldIE || (b.Firefox && b.getVersion(true) < 4)) ? {} : {
                    overflow: "hidden"
                }, srIEStyle);
                dm.element.setStyle(hook.node, nodeStyle);
                hook.node.innerHTML = html;
                if (ad.actualTemplate == "iframe") {
                    var form = dm.element.$("IL_SR_FORM");
                    if (form) {
                        form.submit()
                    }
                }
            },
            getSkinPath: function() {
                var stsr = this.settings;
                return ["http:/", this.$root.settings.hosts.resources, "static", "skins", stsr.skin, stsr.prodName, stsr.rv, ""].join("/")
            },
            setEventHandlers: function(hook) {
                var rt = this.$root,
                    b = rt.browser,
                    st = rt.settings,
                    ut = rt.utils,
                    node = hook.node,
                    stsr = this.settings,
                    dm = ut.dom,
                    dmel = dm.element,
                    evdm = rt.event.dom,
                    sr = this,
                    ns = "IL_SR_",
                    xBtn = dmel.$(ns + "X"),
                    helpBtn = dmel.$(ns + "HELP"),
                    clickBtn = dmel.$(ns + "BTN"),
                    srLogo = dmel.$(ns + "LOGO"),
                    adArea = dmel.$("AD_AREA"),
                    data = rt.helpers.getHookData(hook.id),
                    ad = data.ads[0];
                if (b.IE) {
                    stsr.initialBannerShowTime = 20
                }
                this.closeBanner(stsr.initialBannerShowTime);
                evdm.bind(window, {
                    event: "resize",
                    listener: function() {
                        var left = Math.ceil((dm.viewport.getWidth() / 2) - (parseInt(node.style.width) / 2));
                        stsr.instance.left = left;
                        node.style.left = left + "px"
                    }
                });
                if (stsr.oldIE) {
                    evdm.bind(window, {
                        event: "scroll",
                        listener: this.updateTopPosition
                    });
                    evdm.bind(window, {
                        event: "resize",
                        listener: this.updateTopPosition
                    })
                }
                evdm.bind(window, {
                    event: "scroll",
                    listener: this.scrollHandler
                });
                if (xBtn) {
                    evdm.bind(xBtn, {
                        event: "click",
                        listener: function(event) {
                            rt.utils.dom.event.stop(event.domEvent);
                            rt.event.stop("SRAnimateUp");
                            rt.event.disable("SRAnimateUp");
                            rt.event.stop("SRAnimateDown");
                            rt.event.disable("SRAnimateDown");
                            rt.event.dom.unbind(window, "scroll", sr.scrollHandler);
                            node.parentNode.removeChild(node)
                        }
                    });
                    evdm.bind(xBtn, {
                        event: "mouseover",
                        data: {
                            el: xBtn,
                            pos: "-15px -15px"
                        },
                        listener: this.setBackgroundPosition
                    });
                    evdm.bind(xBtn, {
                        event: "mouseout",
                        data: {
                            el: xBtn,
                            pos: "-15px 0"
                        },
                        listener: this.setBackgroundPosition
                    })
                }
                if (srLogo) {
                    evdm.bind(srLogo, {
                        event: "click",
                        listener: function(event) {
                            rt.utils.dom.event.stop(event.domEvent);
                            if (st.homeUrl) {
                                window.open(st.homeUrl, "_blank")
                            }
                        }
                    })
                }
                if (clickBtn) {
                    evdm.bind(clickBtn, {
                        event: "mouseover",
                        data: {
                            el: clickBtn
                        },
                        listener: function(event) {
                            event.data.el.style.backgroundPosition = "0 -24px"
                        }
                    });
                    evdm.bind(clickBtn, {
                        event: "mouseout",
                        data: {
                            el: clickBtn
                        },
                        listener: function(event) {
                            event.data.el.style.backgroundPosition = "0 0"
                        }
                    })
                }
                if (helpBtn) {
                    evdm.bind(helpBtn, {
                        event: "click",
                        listener: function(event) {
                            rt.utils.dom.event.stop(event.domEvent);
                            if (st.helpUrl) {
                                window.open(st.helpUrl, "_blank")
                            }
                        }
                    });
                    evdm.bind(helpBtn, {
                        event: "mouseover",
                        data: {
                            el: helpBtn,
                            pos: "0 -15px"
                        },
                        listener: this.setBackgroundPosition
                    });
                    evdm.bind(helpBtn, {
                        event: "mouseout",
                        data: {
                            el: helpBtn,
                            pos: "0 0"
                        },
                        listener: this.setBackgroundPosition
                    })
                }
                evdm.bind(node, {
                    event: "click",
                    listener: function(event) {
                        if (ad.template != "text" && adArea && dmel.inHierarchy(event.element, adArea) && ad.content && ad.content.match(/<object |<embed /i) && ad.content.match(/clicktag/i)) {
                            return
                        }
                        if (ad.template == "external") {
                            return
                        }
                        rt.event.stop("SRAnimateUp");
                        rt.event.disable("SRAnimateUp");
                        rt.event.stop("SRAnimateDown");
                        rt.event.disable("SRAnimateDown");
                        rt.event.dom.unbind(window, "scroll", sr.scrollHandler);
                        var cx = event.domEvent.layerX || event.domEvent.offsetX;
                        var cy = event.domEvent.layerY || event.domEvent.offsetY;
                        var target = event.domEvent.target || event.domEvent.srcElement;
                        if (target != event.element) {
                            var offset = rt.utils.dom.element.offset(target, event.element);
                            cx += offset.left;
                            cy += offset.top
                        }
                        rt.event.fire("sendErrorReport", {
                            ua: rt.browser.getValue(),
                            rt: rt.comm.settings.responses.gsd.rs,
                            cx: cx,
                            cy: cy,
                            an: stsr.animating.up,
                            tm: rt.utils.timer.delta("inSearchAnimateUp"),
                            cbdata: {
                                evt: "insearchClick",
                                data: hook.id
                            }
                        });
                        var parent = node.parentNode;
                        parent.removeChild(node)
                    }
                });
                evdm.bind(node, {
                    event: "mouseenter",
                    listener: function() {
                        stsr.animating.mouseover = true;
                        stsr.animating.mouseout = false;
                        if (!stsr.animating.up) {
                            rt.event.repeat("SRAnimateUp", stsr.animationInterval)
                        }
                    }
                });
                evdm.bind(node, {
                    event: "mouseleave",
                    listener: function() {
                        stsr.animating.mouseover = false;
                        stsr.animating.mouseout = true;
                        sr.closeBanner(stsr.oldIE ? 5 : 2)
                    }
                })
            },
            setBackgroundPosition: function(event) {
                event.data.el.style.backgroundPosition = event.data.pos
            },
            updateTopPosition: function() {
                var rt = window[appNamespace],
                    dm = rt.utils.dom,
                    stsr = rt.products.insearch.settings,
                    node = stsr.instance.hook.node;
                var currentHeight = parseInt(rt.utils.dom.element.getStyle(node, "height"));
                node.style.top = (dm.viewport.getHeight() + dm.document.getScrollTop() - currentHeight) + "px"
            },
            scrollHandler: function() {
                var rt = this.$root,
                    dm = rt.utils.dom,
                    docHeight = dm.document.getHeight(),
                    currentScroll = dm.document.getScrollTop() + dm.viewport.getHeight(),
                    stsr = this.settings;
                if (currentScroll == 0) {
                    currentScroll = window.pageYOffset || (document.body.parentElement ? document.body.parentElement.scrollTop : 0)
                }
                if (docHeight <= currentScroll) {
                    if (stsr.state == "open") {
                        return
                    }
                    this.closeBanner(stsr.oldIE ? 5 : 4);
                    if (!stsr.animating.up) {
                        rt.event.repeat("SRAnimateUp", stsr.animationInterval)
                    }
                }
            },
            closeBanner: function(delay) {
                this.$root.event.repeat("SRAnimateDown", this.settings.animationInterval, null, delay * 1000)
            }
        }, {
            settings: {
                prodId: "IL_INSEARCH",
                prodCode: "s",
                prodName: "insearch",
                instance: null,
                sentences: {},
                oldIE: (function() {
                    var b = $root.browser;
                    return (b.IE && (document.compatMode == "BackCompat" || b.getVersion(true) < 9))
                }()),
                animationInterval: $root.browser.IE ? 7 : 10,
                initialBannerShowTime: 15,
                skin: "brand",
                theme: "def",
                rv: "1",
                bannerTimeoutClose: null,
                state: "closed",
                animating: {
                    down: false,
                    up: false,
                    mouseover: false,
                    mouseout: false
                },
                behavior: {
                    def: {
                        heightOpen: 155,
                        heightClose: 55,
                        tb: "white",
                        theme: "def",
                        tp: "searchingFor",
                        bt: "clickHere",
                        thumb: false,
                        favicon: false,
                        titlePrefixColor: "#4E4E4E",
                        titleTermColor: "#4E4E4E"
                    }
                },
                themes: {
                    color: {
                        def: "#003366",
                        lightBlue: "#1b8ede",
                        green: "#67b045",
                        orange: "#f3933b",
                        red: "#dd3c42",
                        pink: "#d84189",
                        purple: "#5939aa"
                    },
                    tb: {
                        gray: "height:55px; background-color:#F1F1F2;",
                        white: "height:55px; background-color:#FFFFFF;",
                        grayLine: "height:53px; border-bottom:2px solid #F1F1F2; background-color:#FFFFFF;"
                    }
                }
            }
        }, true);
        insearch.bind({
            event: "renderProduct",
            listener: {
                renderInsearch: function() {
                    var rt = this.$root,
                        imp = rt.comm.settings.responses.impression,
                        srst = this.settings,
                        prodCode;
                    if (imp.prs["s"]) {
                        delete imp.prs["o"];
                        delete rt.settings.productRenderStatus["o"];
                        prodCode = srst.prodCode
                    } else {
                        if (imp.prs["o"]) {
                            prodCode = srst.prodCode = "o";
                            delete rt.settings.productRenderStatus["s"]
                        }
                    }
                    var prod = imp.prs[prodCode];
                    if (!prod || !prod.sentences || !prod.sentences.length) {
                        rt.event.fire("productRenderStatus", {
                            prod: "s",
                            status: "none"
                        });
                        rt.event.fire("productRenderStatus", {
                            prod: "o",
                            status: "none"
                        });
                        return
                    }
                    rt.event.fire("productRenderStatus", {
                        prod: prodCode,
                        status: "during"
                    });
                    rt.event.fire("initInsearch")
                }
            }
        });
        insearch.bind({
            event: "initInsearch",
            listener: {
                init: function() {
                    var rt = this.$root,
                        ut = rt.utils,
                        stsr = this.settings,
                        instance, resImp = rt.comm.settings.responses.impression,
                        bh = rt.settings.behavior,
                        senteceIndex = resImp.prs[stsr.prodCode].sentences[0],
                        bhsr = stsr.behavior,
                        getadsDelay = 0;
                    bhsr.impression = rt.helpers.renameBehaviorProperties(resImp.prs[stsr.prodCode].behavior || {});
                    instance = stsr.instance = {
                        behavior: rt.helpers.sanitize(ut.object.extend({}, bh.def, bhsr.def, bh.impression, bhsr.impression, bh.customer), bh.sanitizer),
                        sentence: ut.object.keys(resImp.sentences)[senteceIndex],
                        node: ut.dom.createDOMFragment({
                            tag: "div",
                            id: stsr.prodId,
                            cls: rt.settings.baseClass,
                            parent: document.body
                        })
                    };
                    var hook = instance.hook = rt.helpers.createHook(stsr.prodId, instance.sentence, instance.node, 0, this, stsr.prodCode, stsr.prodName, false, instance);
                    rt.event.fire("getAds", {
                        hookId: hook.id,
                        callback: "getadsResponseInsearch"
                    }, getadsDelay)
                }
            }
        });
        insearch.bind({
            event: "getadsResponseInsearch",
            listener: {
                setAdData: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        data = event.data,
                        hookId = data.lid,
                        hook = st.hooksMap[hookId],
                        ad;
                    if (!hook) {
                        rt.logger.error("Error: Misssing hook.", this.setAdData);
                        return false
                    }
                    ad = data.ads[hook.currentAdIndex];
                    if (ad && ad.template == "external") {
                        data = rt.externalTags.setExternalTagData(hook, data)
                    }
                    if (data.ads.length) {
                        ad = data.ads[0];
                        rt.helpers.setAdThumbnail(ad);
                        if (ad.trackerURL) {
                            rt.helpers.hitTrackerURL(ad.trackerURL)
                        }
                    }
                    rt.helpers.setHookData(hookId, data);
                    if (hook.externalTag) {
                        rt.externalTags.updateViewedTags(hook.id)
                    }
                    rt.event.fire("createInsearchUnit", {
                        hookId: hookId
                    })
                }
            }
        });
        insearch.bind({
            event: "createInsearchUnit",
            listener: {
                createInsearchUnit: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId],
                        msg = "",
                        stsr = this.settings,
                        data = rt.helpers.getHookData(hookId);
                    if (!data.ads.length) {
                        msg = "received no ad."
                    }
                    if (msg) {
                        rt.event.fire("productRenderStatus", {
                            prod: stsr.prodCode,
                            status: "failed",
                            reason: msg
                        });
                        return
                    }
                    this.renderUnit(hookId);
                    this.setEventHandlers(hook);
                    rt.event.repeat("SRAnimateUp", stsr.animationInterval);
                    rt.event.fire("productRenderStatus", {
                        prod: stsr.prodCode,
                        status: "after"
                    })
                }
            }
        });
        insearch.bind({
            event: "insearchClick",
            listener: {
                insearchClick: function(event) {
                    var rt = this.$root,
                        hookId = event.data;
                    rt.utils.timer.stop("adView" + hookId);
                    var reuseWindow = rt.helpers.getHookBehavior(hookId).adsReuseWindow;
                    if (!reuseWindow) {
                        try {
                            rt.settings.adWin = window.open("", hookId)
                        } catch (ex) {
                            rt.settings.adWin = null;
                            rt.logger.error("insearch click: Unable to open new window", this.insearchClick)
                        }
                    }
                    rt.event.fire("productClick", {
                        hookId: hookId,
                        clickType: "onWin"
                    })
                }
            }
        });
        insearch.bind({
            event: "SRAnimateUp",
            listener: {
                animateUp: function() {
                    var rt = this.$root,
                        stsr = this.settings,
                        ut = rt.utils,
                        dmel = ut.dom.element,
                        hook = stsr.instance.hook,
                        node = hook.node,
                        anim = stsr.animating,
                        b = rt.browser;
                    var heightOpen = stsr.instance.behavior.heightOpen;
                    if (stsr.state == "open") {
                        rt.event.stop("SRAnimateUp");
                        return
                    }
                    var currentHeight = parseInt(dmel.getStyle(node, "height"));
                    if (currentHeight >= heightOpen) {
                        rt.event.stop("SRAnimateUp");
                        rt.utils.timer.stop("inSearchAnimateUp");
                        rt.utils.timer.start("adView" + hook.id);
                        stsr.state = "open";
                        anim.up = false;
                        rt.utils.cookie.remove("refc");
                        if (stsr.oldIE) {
                            this.updateTopPosition()
                        }
                        var data = rt.helpers.getHookData(hook.id);
                        rt.event.fire("sendAdView", {
                            hookId: hook.id,
                            params: {
                                bdc: hook.bdc,
                                prod_t: hook.prod,
                                emd: data.ads[hook.currentAdIndex].emd || ""
                            }
                        });
                        return
                    }
                    if (!anim.up) {
                        anim.up = true;
                        stsr.state = "animating";
                        rt.utils.timer.start("inSearchAnimateUp")
                    }
                    var newHeight, newTop, step, utd = ut.dom.document,
                        vpHeight = ut.dom.viewport.getHeight(),
                        docScroll = utd.getScrollTop();
                    newTop = vpHeight + docScroll - currentHeight;
                    if (b.IE && b.getVersion(true) > 6) {
                        step = 3;
                        if (b.getVersion() >= 9) {
                            newTop = false
                        }
                    } else {
                        if (stsr.oldIE) {
                            step = null;
                            newHeight = heightOpen;
                            newTop = vpHeight + docScroll - heightOpen
                        } else {
                            step = 2;
                            newTop = false
                        }
                    }
                    if (step) {
                        newHeight = Math.min(currentHeight + step, heightOpen)
                    }
                    if (newTop) {
                        dmel.setStyle(node, {
                            top: newTop + "px"
                        })
                    }
                    dmel.setStyle(node, {
                        height: newHeight + "px"
                    })
                }
            }
        });
        insearch.bind({
            event: "SRAnimateDown",
            listener: {
                animateDown: function() {
                    var rt = this.$root,
                        dmel = rt.utils.dom.element,
                        stsr = this.settings,
                        hook = stsr.instance.hook,
                        node = hook.node,
                        anim = stsr.animating,
                        b = rt.browser;
                    var heightClose = stsr.instance.behavior.heightClose;
                    if (stsr.state == "closed") {
                        rt.event.stop("SRAnimateDown");
                        return
                    }
                    var currentHeight = parseInt(dmel.getStyle(node, "height"));
                    if (currentHeight <= heightClose || anim.up || anim.mouseover) {
                        anim.down = false;
                        rt.event.stop("SRAnimateDown");
                        stsr.state = currentHeight <= heightClose ? "closed" : "animating";
                        rt.utils.timer.clear("adView" + hook.id);
                        return
                    }
                    if (!anim.down) {
                        anim.down = true;
                        stsr.state = "animating"
                    }
                    var dm = rt.utils.dom,
                        vpHeight = dm.viewport.getHeight(),
                        docScroll = dm.document.getScrollTop(),
                        newHeight, currentTop = parseInt(dmel.getStyle(node, "top")),
                        step = 1,
                        newTop;
                    if (!stsr.oldIE) {
                        newTop = false
                    } else {
                        if (b.IE && b.getVersion(true) > 6 && b.getVersion(true) < 9) {
                            step = 2;
                            newTop = currentTop + step
                        } else {
                            if (stsr.oldIE) {
                                step = false;
                                newHeight = heightClose;
                                newTop = vpHeight + docScroll - heightClose
                            }
                        }
                    }
                    if (step) {
                        newHeight = Math.max(currentHeight - step, heightClose)
                    }
                    dmel.setStyle(node, {
                        height: newHeight + "px"
                    });
                    if (newTop) {
                        dmel.setStyle(node, {
                            top: newTop + "px"
                        })
                    }
                }
            }
        });
        var inframe = products.$create("inframe", {
            getPageMargins: function() {
                var rt = this.$root,
                    stif = this.settings,
                    dm = rt.utils.dom,
                    wrapper = dm.findWidestNode(),
                    result = {
                        left: 0,
                        right: 0
                    };
                if (wrapper && wrapper.node != document.body) {
                    var offset = dm.element.offset(wrapper.node);
                    var width = dm.element.getActualWidth(wrapper.node);
                    var docWidth = dm.document.getWidth();
                    result = {
                        left: offset.left - stif.buffer,
                        right: docWidth - width - offset.left - 2 * stif.buffer
                    }
                }
                return result
            },
            buildImpPageMarginsParam: function() {
                var stif = this.settings,
                    stifw = stif.width,
                    margins = stif.margins = this.getPageMargins();
                return [margins.left > stifw.thin ? margins.left > stifw.wide ? "w" : "t" : "", margins.right > stifw.thin ? margins.right > stifw.wide ? "w" : "t" : ""].join("*").replace(/^\*$/, "")
            },
            buildGetadsPageMarginsParam: function(bs) {
                var uta = this.$root.utils.array,
                    stif = this.settings,
                    instance = stif.instance,
                    arr = [];
                if (/THIN|AUTO/.test(bs)) {
                    uta.push(arr, stif.width.thin, "*", stif.height)
                }
                if ((instance.left || instance.right).width >= stif.width.wide && /WIDE|AUTO/.test(bs)) {
                    uta.push(arr, arr.length ? "~" : "", stif.width.wide, "*", stif.height)
                }
                return arr.join("")
            },
            renderUnit: function(side) {
                var rt = this.$root,
                    ut = rt.utils,
                    dm = ut.dom,
                    dms = dm.style,
                    dmel = dm.element,
                    st = rt.settings,
                    stif = this.settings,
                    b = rt.browser,
                    instance = stif.instance,
                    html, bh = stif.behavior.merged,
                    skinPath = this.getSkinPath(),
                    bgCss, bgCls = "IL_IF_BG",
                    hook = instance[side].hook,
                    hookId = hook.id,
                    data = rt.helpers.getHookData(hookId),
                    ad, content, node = dmel.$("IL_IF_" + side.toUpperCase());
                ad = data.ads[hook.currentAdIndex];
                rt.helpers.setActualTemplate(ad);
                if (ad.contentUrl) {
                    content = rt.bubble.templates.external(hook, hook.currentAdIndex)
                } else {
                    content = rt.helpers.parseTokens(hook)
                }
                if (b.IE && b.getVersion(true) < 8) {
                    bgCss = skinPath + "hdr-btns.png"
                } else {
                    bgCss = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB+hJREFUeNrEV3tMm9cVP7Y/29gY/MBvg3klgFJGAnFeBUpok03NOhJeaVcSdVvGEu2fbdqmNm23bkmqRk1bbVm0PiKtTaVtSkLTh9SQlLY0CWSDpkugy8MmCY+AwRiwzbDBYJudc+FzP0e0+W+70pG/ex733Hvuub9zLPr9/gPAj/n5edDr9TA2NmbG6fJF9i3kuZEHIpEorvvbZ59hv7y9WCyGWCwGJpMJPB5PBrKykWJITp1O652Y8DE9fg0OEscGpIOl999fbjQaUEMEXq8Xbjid7ch/Guk8fPP4DtKBB8rLHXp9Gm5knjYRc7qcnyD/KaR/8YpCx3vWrllzZN26tRIJ7p4fmfYMKCkuLv380qXWf3Z0/AxZR77G6TMPlJftL161SiSMTFamXby6pGRz+8WLFZevXPkRsv4qdFyBix9ZuXKlZGYmzBh+v5+FXqvVsnlhYaE4Eo0cvnTpCydOW+5yWrdhw/oD+fkFEJqeWXJXDodDFolE/vLvq1ev08m55ORkkMvkLxcUFEimF40+bvkYOjo62HdJSQk8vOVh9p2fly/q6+v/QzAYvE+wpsRisbycnZUDZD/q8YA8SQ5qtYYJMdSQtDgvLPyWrH9g4EWplNtEMc2z2qyrZ2dnIRyewcTyQmdnJzz51K9h794nobu7G0ZGRpgsHA6D1WpdgTZFvFeZTFaabrPZF+Qz4Ha74bXXXofhYTc4nTfg6BtHYXJykskikTmyfxDNzFw0EimkU/Mhlkg42LZtKwSD00CbofuibOXlqmQV8Urws3vBsdQhtF+etxzm5ubg2Ftvo6MI7NjRwE7Ly1FX1NMTyOPkSUkKUiAn/DAYjeByuqC19VNYsWIFyOXyuBzvGRQKhSoeZwknj0SicTn9yBVJbJ6UlASRWJRFih9R1MWDiLg0ne5OIDAJKSkpCckQDE1BUVERONY4YCb8VcIEAgFIVipd/BxP0OsP+EEqk7I5hfps81loaHic8ABOHj8J1TXVkJK6sH4Aw45ZPinChy1veueUJzc3Vy10HJ5ZcIYRSdjQzVs3p6q3VlkMBsMUzZ0ul+n8hbaB3JxcGXM8NIQRM4AMo8ThtY16RhAOxOx1zKP89q2b7sYf78qg5Aqr1al/HB4exjBG4xSbj7GwCnkjuAjqvoo2U4K9eJRKxTEvno50bOnpIEaHc3MRmMbNa7Q6JC2TDQ4OEjK+RIgmordKBzt+sukTVC4lyFxqjI+PI6bGOhoe/34lTqd5/sxCZNRo34a5UKjRaJe0p2elUinP1lZXf5eumnfMEvZ085lXh9zuBsw3kVKpBAKgUCjEFjebTccf2bJlN12TcMFFx5Tp+rMftbzpGR19hGwVCiUCUAxfRwgTLRyzZ6Qf/fbmzT8nk7shk8K389H6ukNd3d31Pp+/gJho4EIYbDp34cLle+D0GNL36mtr1l3p6qqZnPxPLpaOWG5O1tXiVcXH29rbbgiVhSf+nw4x/J8Gt+/A8wn1eHEzhEz5FBF6MUhfUCbyNZfGc795NqEecxzHkIowBWkt0jJKIqRrSF20/DfV49qUlNRDaWm6bEoQGqHQNExMjPcj3u7F6d/vcZBdGo1mn1arsyoQvegcWFDI3jk1NfULlDcvVY9/l5WV9ZzRaEpYSaVKAaPRmInF4299fX1UHPYu4ZCO8edly5bv0el0CQJCRLPZnI848eGdOwO/QtYrwjveSk7NZgtrYYgI7sa8Y/E5bSg7O5u6iMeWcLwbkW8PYQCvfzfZbDaR3W4n8KhkJ0bAB6lU9qLVaouvcrG9HaFulBmkYQtTWlbG+LSx8fGJF/x+34nFfoqBT1qafr9eb2ATQkCZVMbsaAwhWimxehFkpqdniHw+30EspevoxEWIu3lSTA6iWawkg3cG4Qc/fAJ27twBHqzFM9Mh4OXYi2WhoYPfJKJVhclk1PPyZKUCmk+fhglEut7bt+H8ufNYSpOZTCaVgj5NT4mXyeHl5KtTU+PVRSvTwqOP1cMs1lRKDCpvKrwnXq7B2orO6K47aS6VSldiQsXlVpsNtm+vgxMnmjDTJdDYuCseGnbnWKX6B/qzOKwiHMd2I4sL1WotuFwuONN8BjZteghSMMF4oCFddBxXxrlEykkT7Cd8fqzTEpZz3rFxwNYIBPpMJraYzX2hUJAVeyHRm9y4cSOsdjiovYnzg6ir0aivfZW1KmdQYN/X18t6tp/sboR6PPmpd06xGs7LQxhF7GbHCDIlb751bKi0tNQkbEspuQgszBZzAsBgm+rbVlVl0Wo1rK3o7x/QII67N6xfr6B5b28vqFPVoEvTMbCg+sxhRKhGx6IxaP9H+217hj2XkiuKz+BgT08PKLDo84QlDFiVEfBoUa1Gc4hquODa/Cg7TLWWdKhVstms7DsJT5iTkwP2TDubX8fmz2K27KeejC8S4nffe78J25hqbEsS/qrwJ73cdYV67Q/qampqFqFQOOQnTjY149+XysLC+/BmE+0pch2fd0I0Gn0b8+GJu6sT99m5c/uwk/glprwMn8hCAR8dBe+odxb/kvzpwcpK+hsz+zVwqfyopeUlfyDQaDaZOYNBzxyOYAMwMT4xjfX8+fKyshf49y+ETEL4p+traw9fvXatyu0ezqONWSzmm5UVFe9/2trqvgdOh5B+ur2u7mD3l19WDQ25cygyGRnp1x+qrPzgQlvbmFD5vwIMAAZsT2nNzBrxAAAAAElFTkSuQmCC"
                }
                dms.addRule("." + bgCls, ['background-image : url("', bgCss, '")'].join(""));
                var otherSide = (side == "left") ? "right" : "left";
                var themeColor = stif.themes.color[bh.theme];
                var tpl = '<div 				 class="<%= baseCls %>" style="position:absolute; top:0; <%= otherSide %>: 0; width:<%= width %>; height:632px; border-bottom: 2px solid <%= themeColor %>;">				<%-- unit --%>				<div class="<%= baseCls %> IL_IF_AD_AREA" style="position:absolute; top:0; left:0; width:<%= width %>; height:600px; text-align:center;">					<% if (ad.actualTemplate == "iframe"){ %>						<iframe name="IL_IF_FRAME_<%= sideUpper %>" class="<%= baseCls %>" src="<%= st.blankURL %>" width="<%= width %>" height="<%= height %>" frameborder="0" scrolling="no"></iframe>						<%= rt.helpers.getEchoForm(content, "IL_IF_FRAME_" + sideUpper, "IL_IF_FORM_" + sideUpper) %>					<% } else { %>						<%= content %>					<% } %>				</div>				<%-- footer --%>				<div class="<%= baseCls %> IL_IF_FOOTER" style="position:absolute; bottom:0; left:0; width:<%= width %>; height:32px; cursor: pointer; background-color:#f1f1f2;">					<div id="IL_IF_LOGO_<%= sideUpper %>" class="<%= baseCls %>" style="position:absolute; width:53px; height:12px; top:9px; <%= side %>:10px; cursor:pointer; font-size:1px; <% if (oldIE || oldFF){ %>background:url(<%= skinPath %>logo.png) no-repeat scroll 0 0 transparent;<% } %>">						<% if (!oldIE && !oldFF){ %>							<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"								 width="53px" height="12px" viewBox="0 0 636 144" enable-background="new 0 0 636 144" xml:space="preserve">								<g>									<!-- dot (first) -->									<path id="IL_IF_LOGO_<%= sideUpper %>_LOGO_DOT_1" fill="<%= bh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M16.918,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.722-10.57-10.57-10.57 S6.334,8.434,6.334,14.282S11.07,24.865,16.918,24.865"/>									<!-- in -->									<path fill="#003366" d="M88.085,43.784H77.024c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.027,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.467c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.015V45.889v-0.025c0-1.124-0.885-2.033-2.01-2.08h-11.49c-1.09,0.047-1.949,0.907-1.986,1.996v46.828h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.511,25.512h1.151c14.031,0,25.511-11.48,25.511-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.159-17.948,18.031-17.948h6.366c9.871,0,17.948,8.076,18.042,17.948v28.89v4.62v28.873 c0.013,0.023,0.013,0.034,0.013,0.048c0,1.111,0.883,2.008,1.983,2.057h11.505c1.077-0.036,1.936-0.887,1.985-1.973v-27.966v-5.659 V74.966C119.267,57.815,105.234,43.784,88.085,43.784"/>									<!-- f (part) -->									<path fill="#003366" d="M155.069,56.972v82.643c-0.072,0.992-0.886,1.78-1.903,1.818h-11.014 c-1.062-0.038-1.912-0.897-1.912-1.962c0-0.024,0-0.048-0.023-0.073V34.456c0.716-17.064,14.923-30.744,32.179-30.744h8.536 c0.025,0,0.038,0.011,0.06,0.011c1.053,0,1.915,0.849,1.974,1.901v11.037c-0.035,1.016-0.85,1.844-1.878,1.889h-8.692 c-9.509,0-17.327,7.75-17.327,17.268v6.301V56.972z"/>									<!-- f (part) -->									<path fill="#003366" d="M151.99,59.104h28.873c0.023-0.012,0.034-0.012,0.047-0.012 c1.111,0,2.008-0.884,2.057-1.984V45.604c-0.036-1.078-0.887-1.938-1.973-1.986h-27.965"/>									<!-- o -->									<path fill="#003366" d="M276.24,107.925h0.158V76.608c-0.37-18.164-15.248-32.825-33.494-32.825 h-16.756v0.022c-17.875,0.431-32.322,14.924-32.679,32.803h-0.026v31.316c0,18.213,14.601,33.064,32.705,33.496v0.012h16.589h0.021 h0.146C261.304,141.349,276.24,126.354,276.24,107.925 M208.93,107.925L208.93,107.925V77.289c0-9.914,8.096-18.02,18.021-18.02 h15.953c9.946,0,18.02,8.106,18.02,18.02v30.636h-0.167c0,9.949-8.074,18.021-17.999,18.021h-15.807 C217.026,125.946,208.93,117.874,208.93,107.925"/>									<!-- l -->									<path fill="#003366" d="M312.844,139.376L312.844,139.376c0,1.064-0.798,1.938-1.829,2.045h-11.816 c-1.027-0.107-1.837-0.98-1.837-2.045h-0.013V5.769h0.013c0-1.135,0.908-2.033,2.031-2.057h11.432 c1.124,0.024,2.019,0.922,2.019,2.057V139.376z"/>									<!-- dot (second) -->									<path id="IL_IF_LOGO_<%= sideUpper %>_LOGO_DOT_2" fill="<%= bh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M341.662,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.723-10.57-10.57-10.57 s-10.584,4.722-10.584,10.57S335.814,24.865,341.662,24.865"/>									<!-- in (second) -->									<path fill="#003366" d="M412.829,43.784h-11.061c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.026,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.468c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.016V45.723v-0.025c0-1.123-0.885-2.033-2.01-2.08h-11.49c-1.091,0.047-1.949,0.908-1.986,1.996v46.994h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.512,25.512h1.15c14.031,0,25.512-11.48,25.512-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.158-17.948,18.029-17.948h6.367c9.871,0,17.947,8.076,18.041,17.948v28.89v4.62v28.873 c0.014,0.023,0.014,0.034,0.014,0.048c0,1.111,0.883,2.008,1.982,2.057h11.506c1.076-0.036,1.936-0.887,1.984-1.973v-27.966v-5.659 V74.966C444.01,57.815,429.979,43.784,412.829,43.784"/>									<!-- k -->									<path fill="#003366" d="M480.277,139.376L480.277,139.376V91.735h0.146h9.255l40.656,48.766 c0.599,0.549,1.15,0.906,1.841,0.932h16.073c0.882-0.025,2.869-0.322,1.794-2.056l-0.013-0.024l-47.58-56.777l44.599-36.815 c0.015-0.049,0.015-0.049,0.036-0.073c1.066-1.734-0.886-2.032-1.78-2.069H527.08c-0.621,0.024-1.15,0.324-1.666,0.791 l-36.812,31.075h-8.325V5.769c0-1.135-0.896-2.033-2.02-2.057h-11.422c-1.124,0.024-2.033,0.922-2.033,2.057v133.607 c0,1.064,0.803,1.938,1.844,2.045h11.802C479.476,141.313,480.277,140.44,480.277,139.376"/>									<!-- s -->									<path fill="#003366" d="M603.208,84.782H577.99c-6.91-0.114-12.508-5.785-12.508-12.783 c0-6.996,5.598-12.895,12.508-12.895h39.271c1.146,0,2.08-0.959,2.08-2.111v0.191V45.752v-0.037c0-1.164-0.935-2.097-2.08-2.097 H577.99c-15.451,0-28.008,12.73-28.008,28.381c0,15.651,12.557,28.381,28.008,28.27h24.252c6.911,0.111,12.508,5.812,12.508,12.795 c0,6.996-5.597,12.896-12.508,12.896H591.56l0.001-0.014h-28.874c-0.022,0.014-0.034,0.014-0.047,0.014 c-1.11,0-2.007,0.896-2.056,2.01v11.449c0.035,1.092,0.886,1.963,1.973,2.014h0.225h27.74h12.224 c15.209-0.279,27.491-12.9,27.491-28.369C630.236,97.737,618.191,85.202,603.208,84.782"/>								</g>							</svg>						<% } %>					</div>					<div id="IL_IF_HELP_<%= sideUpper %>" class="<%= baseCls %> <%= cls %>" style="width:15px; height:15px; position:absolute; top:9px; <%= otherSide %>:27px; background-position:0 0; cursor:pointer; font-size:1px;"></div>					<div id="IL_IF_X_<%= sideUpper %>" class="<%= baseCls %> <%= cls %>" style="width:15px; height:15px; position:absolute; top:9px; <%= otherSide %>:9px; background-position:-15px 0; cursor:pointer; font-size:1px;"></div>				</div>			</div>';
                html = ut.VeST(tpl, {
                    side: side,
                    sideUpper: side.toUpperCase(),
                    rt: rt,
                    st: st,
                    bh: bh,
                    baseCls: st.baseClass,
                    cls: bgCls,
                    otherSide: otherSide,
                    width: instance[side].width + "px",
                    height: stif.height,
                    ad: ad,
                    content: content,
                    themeColor: themeColor,
                    oldIE: stif.oldIE,
                    oldFF: b.Firefox && b.getVersion(true) < 4,
                    skinPath: skinPath
                });
                var nodeStyle = {
                    position: stif.oldIE ? "absolute" : "fixed",
                    top: stif.oldIE ? dm.document.getScrollTop() : 0,
                    width: 0,
                    height: stif.height + 34 + "px",
                    overflow: "hidden",
                    display: (stif.margins[side] < instance[side].width) ? "none" : "block",
                    cursor: "pointer"
                };
                nodeStyle[side] = 0;
                dmel.setStyle(node, nodeStyle);
                node.innerHTML = html;
                if (ad.actualTemplate == "iframe") {
                    var form = dm.element.$("IL_IF_FORM_" + side.toUpperCase());
                    if (form) {
                        form.submit()
                    }
                }
                this.setUnitEventHandlers(side)
            },
            getSkinPath: function() {
                var stif = this.settings;
                return ["http:/", this.$root.settings.hosts.resources, "static", "skins", stif.skin, stif.prodName, stif.rv, ""].join("/")
            },
            setGeneralEventHandlers: function() {
                var evdm = this.$root.event.dom;
                evdm.bind(window, {
                    event: "scroll",
                    listener: this.scrollHandler
                });
                evdm.bind(window, {
                    event: "resize",
                    listener: this.resizeHandler
                })
            },
            setUnitEventHandlers: function(side) {
                var rt = this.$root,
                    st = rt.settings,
                    ut = rt.utils,
                    stif = this.settings,
                    dm = ut.dom,
                    dmel = dm.element,
                    evdm = rt.event.dom,
                    node = stif.instance[side].hook.node;
                var xBtn = dmel.$(stif.prodId + "_X_" + side.toUpperCase());
                if (xBtn) {
                    evdm.bind(xBtn, {
                        event: "click",
                        data: {
                            side: side
                        },
                        listener: function(event) {
                            rt.event.repeat("effectSlideClose", stif.animationInterval, event.data)
                        }
                    });
                    evdm.bind(xBtn, {
                        event: "mouseover",
                        data: {
                            el: xBtn,
                            pos: "-15px -15px"
                        },
                        listener: this.setBackgroundPosition
                    });
                    evdm.bind(xBtn, {
                        event: "mouseout",
                        data: {
                            el: xBtn,
                            pos: "-15px 0"
                        },
                        listener: this.setBackgroundPosition
                    })
                }
                var ifLogo = dmel.$(stif.prodId + "_LOGO_" + side.toUpperCase());
                if (ifLogo) {
                    evdm.bind(ifLogo, {
                        event: "click",
                        listener: function(event) {
                            rt.utils.dom.event.stop(event.domEvent);
                            if (st.homeUrl) {
                                window.open(st.homeUrl, "_blank")
                            }
                        }
                    })
                }
                var helpBtn = dmel.$(stif.prodId + "_HELP_" + side.toUpperCase());
                if (helpBtn) {
                    evdm.bind(helpBtn, {
                        event: "click",
                        listener: function(event) {
                            rt.utils.dom.event.stop(event.domEvent);
                            if (st.helpUrl) {
                                window.open(st.helpUrl, "_blank")
                            }
                        }
                    });
                    evdm.bind(helpBtn, {
                        event: "mouseover",
                        data: {
                            el: helpBtn,
                            pos: "0 -15px"
                        },
                        listener: this.setBackgroundPosition
                    });
                    evdm.bind(helpBtn, {
                        event: "mouseout",
                        data: {
                            el: helpBtn,
                            pos: "0 0"
                        },
                        listener: this.setBackgroundPosition
                    })
                }
                var adArea = ut.dom.filterByClass("IL_IF_AD_AREA", null, node);
                evdm.bind(adArea.length ? adArea[0] : node, {
                    event: "click",
                    data: {
                        hookId: stif.instance[side].hook.id
                    },
                    listener: function(event) {
                        rt.event.stop("effectSlideOpen");
                        rt.event.disable("effectSlideOpen");
                        rt.event.stop("effectSlideClose");
                        rt.event.disable("effectSlideClose");
                        rt.event.dom.unbind(window, "scroll", this.scrollHandler);
                        rt.event.dom.unbind(window, "resize", this.resizeHandler);
                        var parent, side, node;
                        for (side in stif.instance) {
                            node = stif.instance[side].hook.node;
                            parent = node.parentNode;
                            parent.removeChild(node)
                        }
                        var hookId = event.data.hookId,
                            hook = st.hooksMap[hookId],
                            data = rt.helpers.getHookData(hookId),
                            ad = data.ads[hook.currentAdIndex];
                        if (ad.template != "text" && ad.content.match(/<object |<embed /i) && ad.content.match(/clicktag/i)) {
                            return
                        }
                        event.$root.products.inframe.bannerClick(hookId)
                    }
                })
            },
            scrollHandler: function() {
                var stif = this.settings,
                    dm = this.$root.utils.dom,
                    side, node;
                var viewport = dm.viewport.getHeight();
                var height = stif.height + 34;
                var scroll = dm.document.getScrollTop();
                for (side in stif.instance) {
                    node = stif.instance[side].hook.node;
                    if (viewport > height) {
                        if (stif.oldIE) {
                            node.style.position = "absolute";
                            node.style.top = scroll + "px"
                        } else {
                            node.style.position = "fixed";
                            node.style.top = 0
                        }
                    } else {
                        node.style.position = "absolute";
                        if (scroll == 0) {
                            node.style.top = "0"
                        } else {
                            if (scroll >= height - viewport) {
                                node.style.top = (scroll - height + viewport) + "px"
                            }
                        }
                    }
                }
            },
            resizeHandler: function() {
                var side, margins = this.getPageMargins(),
                    instance = this.settings.instance;
                for (side in instance) {
                    instance[side].hook.node.style.display = margins[side] > instance[side].width ? "block" : "none"
                }
            },
            setBackgroundPosition: function(event) {
                event.data.el.style.backgroundPosition = event.data.pos
            },
            bannerClick: function(hookId) {
                var rt = this.$root;
                rt.utils.timer.stop("adView" + hookId);
                var reuseWindow = rt.helpers.getHookBehavior(hookId).adsReuseWindow;
                if (!reuseWindow) {
                    try {
                        rt.settings.adWin = window.open("", hookId)
                    } catch (ex) {
                        rt.settings.adWin = null
                    }
                }
                rt.event.fire("productClick", {
                    hookId: hookId,
                    clickType: "onWin"
                })
            }
        }, {
            settings: {
                prodId: "IL_IF",
                prodCode: "f",
                prodName: "inframe",
                width: {
                    thin: 120,
                    wide: 160
                },
                height: 600,
                effect: "slide",
                buffer: 15,
                instance: {},
                behavior: {
                    def: {
                        ifp: "DOUBLE",
                        bs: "AUTO",
                        theme: "def"
                    }
                },
                themes: {
                    color: {
                        def: "#003366",
                        lightBlue: "#1b8ede",
                        green: "#67b045",
                        orange: "#f3933b",
                        red: "#dd3c42",
                        pink: "#d84189",
                        purple: "#5939aa"
                    }
                },
                sentences: {},
                oldIE: (function() {
                    var b = $root.browser;
                    return (b.IE && (document.compatMode == "BackCompat" || b.getVersion(true) < 9))
                }()),
                skin: "brand",
                rv: "1",
                animationInterval: $root.browser.IE ? 7 : 10,
                bidRequestTimeout: 750
            }
        }, true);
        inframe.bind({
            event: "renderProduct",
            listener: {
                renderInframe: function() {
                    var rt = this.$root,
                        st = rt.settings,
                        imp = rt.comm.settings.responses.impression,
                        stif = this.settings,
                        stifw = stif.width,
                        bh = stif.behavior,
                        instance = stif.instance,
                        prodCode = stif.prodCode,
                        prod = imp.prs[prodCode];
                    if (!prod || !prod.sentences || !prod.sentences.length) {
                        rt.event.fire("productRenderStatus", {
                            prod: prodCode,
                            status: "none"
                        });
                        return
                    }
                    var margins = stif.margins,
                        side, result = {
                            left: 0,
                            right: 0
                        },
                        bhm = bh.merged = rt.utils.object.extend({}, st.behavior.def, bh.def, st.behavior.impression, imp.prs[prodCode].behavior, st.behavior.customer, {
                            adsReuseWindow: true
                        });
                    for (side in result) {
                        if ((new RegExp(side.toUpperCase() + "|DOUBLE")).test(bhm.ifp)) {
                            result[side] = /WIDE|AUTO/.test(bhm.bs) && margins[side] >= stifw.wide ? stifw.wide : /THIN|AUTO/.test(bhm.bs) && margins[side] >= stifw.thin ? stifw.thin : 0
                        }
                    }
                    if (bhm.ifp == "SINGLE") {
                        var sizes = {
                            thin: 1,
                            wide: 1
                        },
                            size;
                        for (size in sizes) {
                            if ((new RegExp(size.toUpperCase() + "|AUTO")).test(bhm.bs)) {
                                side = margins.left >= stifw[size] && margins.right >= stifw[size] ? ["left", "right"][Math.floor(Math.random() * 2)] : margins.left > stifw[size] ? "left" : margins.right > stifw[size] ? "right" : null;
                                if (side) {
                                    result[side] = stifw[size]
                                }
                            }
                        }
                        if (result.left && result.right) {
                            if (result.left < result.right) {
                                result.left = 0
                            } else {
                                result.right = 0
                            }
                        }
                    }
                    if (Math.min(result.left, result.right) > 0 && result.left != result.right) {
                        result.left = result.right = Math.min(result.left, result.right)
                    }
                    for (side in result) {
                        if (result[side]) {
                            instance[side] = {
                                width: result[side]
                            }
                        }
                    }
                    if (!(instance.left || instance.right)) {
                        rt.event.fire("productRenderStatus", {
                            prod: prodCode,
                            status: "none"
                        })
                    } else {
                        rt.event.fire("productRenderStatus", {
                            prod: prodCode,
                            status: "during"
                        });
                        rt.event.fire("initInframe")
                    }
                }
            }
        });
        inframe.bind({
            event: "initInframe",
            listener: {
                init: function() {
                    var rt = this.$root,
                        ut = rt.utils,
                        stif = this.settings,
                        resImp = rt.comm.settings.responses.impression,
                        sentenceIndex = resImp.prs[stif.prodCode].sentences[0],
                        instance = stif.instance,
                        side, node, id;
                    stif.sentence = ut.object.keys(resImp.sentences)[sentenceIndex];
                    for (side in instance) {
                        id = [stif.prodId, side.toUpperCase()].join("_");
                        node = ut.dom.createDOMFragment({
                            tag: "div",
                            id: id,
                            cls: [rt.settings.baseClass, stif.prodId].join(" "),
                            parent: document.body
                        });
                        instance[side].hook = rt.helpers.createHook(id, stif.sentence, node, 0, this, stif.prodCode, stif.prodName, false, instance[side])
                    }
                    rt.event.fire("getAds", {
                        hookId: (instance.left || instance.right).hook.id,
                        params: {
                            as: this.buildGetadsPageMarginsParam(stif.behavior.merged.bs),
                            nm: (instance.left && instance.right) ? 2 : 1
                        },
                        bidRequestTimeout: stif.bidRequestTimeout,
                        callback: "getadsResponseInframe"
                    })
                }
            }
        });
        inframe.bind({
            event: "getadsResponseInframe",
            listener: {
                setAdData: function(event) {
                    var rt = this.$root,
                        response = event.data,
                        data = {},
                        hook, ad, stif = this.settings,
                        instance = stif.instance,
                        side, i, leni;
                    if (!response.ads.length) {
                        rt.event.fire("productRenderStatus", {
                            prod: stif.prodCode,
                            status: "failed",
                            reason: "received no ads."
                        });
                        return false
                    } else {
                        for (i = 0, leni = response.ads.length; i < leni; i++) {
                            ad = response.ads[i];
                            if (ad.trackerURL) {
                                rt.helpers.hitTrackerURL(ad.trackerURL)
                            }
                        }
                    }
                    if (instance.left && instance.right) {
                        if (response.ads.length == 1) {
                            var selected = Math.floor(Math.random() * 2),
                                sides = ["left", "right"];
                            delete instance[sides[selected ^ 1]];
                            data[sides[selected]] = response
                        } else {
                            instance.right.hook.bdc = instance.left.hook.bdc;
                            instance.left.hook.midx = 0;
                            instance.right.hook.midx = 1;
                            if (instance.left.hook.externalTag) {
                                instance.right.hook.externalTag = instance.left.hook.externalTag
                            }
                            data.left = response;
                            data.right = rt.utils.object.clone(response, true);
                            data.left.ads = [data.left.ads[0]];
                            data.right.ads = [data.right.ads[1]]
                        }
                    } else {
                        for (side in instance) {
                            data[side] = response
                        }
                    }
                    for (side in instance) {
                        hook = instance[side].hook;
                        ad = data[side].ads[hook.currentAdIndex];
                        if (ad && ad.template == "external") {
                            data[side] = rt.externalTags.setExternalTagData(hook, data[side])
                        }
                        rt.helpers.setHookData(hook.id, data[side]);
                        if (hook.externalTag) {
                            rt.externalTags.updateViewedTags(hook.id)
                        }
                    }
                    rt.event.fire("createInframe")
                }
            }
        });
        inframe.bind({
            event: "createInframe",
            listener: {
                createInframe: function() {
                    var rt = this.$root,
                        stif = this.settings,
                        side;
                    for (side in stif.instance) {
                        this.renderUnit(side)
                    }
                    this.setGeneralEventHandlers();
                    rt.event.repeat("effectSlideOpen", stif.animationInterval);
                    rt.event.fire("productRenderStatus", {
                        prod: stif.prodCode,
                        status: "after"
                    })
                }
            }
        });
        inframe.bind({
            event: "effectSlideOpen",
            listener: {
                effectSlideOpen: function() {
                    var rt = this.$root,
                        stif = this.settings,
                        ut = rt.utils,
                        dmel = ut.dom.element,
                        b = rt.browser,
                        instance = stif.instance,
                        newWidth, side, hook;
                    var currentWidth = parseInt(dmel.getStyle((instance.left || instance.right).hook.node, "width"));
                    var endWidth = (instance.left || instance.right).width;
                    if (currentWidth >= endWidth) {
                        rt.event.stop("effectSlideOpen");
                        for (side in instance) {
                            hook = instance[side].hook;
                            rt.utils.timer.start("adView" + hook.id);
                            var data = rt.helpers.getHookData(hook.id);
                            rt.event.fire("sendAdView", {
                                hookId: hook.id,
                                params: {
                                    bdc: hook.bdc,
                                    midx: hook.midx || 0,
                                    prod_t: hook.prod,
                                    emd: data.ads[hook.currentAdIndex].emd || ""
                                }
                            })
                        }
                        return
                    }
                    newWidth = b.IE && b.getVersion(true) < 7 ? endWidth : Math.min(currentWidth + 2, endWidth);
                    for (side in instance) {
                        dmel.setStyle(instance[side].hook.node, {
                            width: newWidth + "px"
                        })
                    }
                }
            }
        });
        inframe.bind({
            event: "effectSlideClose",
            listener: {
                effectSlideClose: function(event) {
                    var rt = this.$root,
                        stif = this.settings,
                        dmel = rt.utils.dom.element,
                        b = rt.browser,
                        side = event.data.side,
                        node = stif.instance[side].hook.node;
                    var current = parseInt(dmel.getStyle(node, "width"));
                    if (current <= 0) {
                        rt.event.stop("effectSlideClose");
                        node.parentNode.removeChild(node);
                        delete stif.instance[side];
                        return
                    }
                    var width = b.IE && b.getVersion(true) < 7 ? 0 : Math.max(current - 2, 0);
                    dmel.setStyle(node, {
                        width: width + "px"
                    })
                }
            }
        });
        var externalTags = $root.$create("externalTags", {
            init: function() {
                var rt = this.$root,
                    imp = rt.comm.settings.responses.impression,
                    i, leni, ut = rt.utils,
                    uta = ut.array,
                    uto = ut.object,
                    ad, etst = this.settings;
                if (!imp.messages) {
                    return
                }
                if (rt.browser.isMobile()) {
                    delete imp.messages;
                    return
                }
                etst.bidCallbackVar = (rt.settings.white_label || "infolinks") + "_etag";
                etst.oldAPI = uta.indexOf(uta.map(uto.values(imp.prs), function(item) {
                    return !!item.messages
                }), true) > -1;
                for (i = 0, leni = imp.messages.length; i < leni; i++) {
                    ad = imp.messages[i].ads[0];
                    ad.prs = uta.toObject(ad.prs ? ad.prs.split(",") : uta.discard(uta.discard(uto.keys(imp.prs), "s"), "o"), {}, true);
                    imp.messages[i].msg = i;
                    if (ad.emd) {
                        etst.tags[ad.emd] = imp.messages[i]
                    }
                }
            },
            getProductAdSizes: function(prod, hook) {
                switch (prod) {
                case "i":
                    return [{
                        w: 300,
                        h: 250
                    }];
                case "r":
                    return [{
                        w: 300,
                        h: 250
                    }];
                case "t":
                    return [{
                        w: 300,
                        h: 250
                    }];
                case "s":
                    return [{
                        w: 728,
                        h: 90
                    }];
                case "o":
                    return [{
                        w: 728,
                        h: 90
                    }];
                case "f":
                    return [{
                        w: hook.instance.width || 160,
                        h: 600
                    }]
                }
            },
            setExternalTagData: function(hook, data) {
                var uto = this.$root.utils.object,
                    ad = data.ads[0];
                if (ad.content) {
                    ad.content = this.$root.utils.base64.decodeBase64(ad.content);
                    hook.externalTag = true
                } else {
                    if (ad.url || ad.contentUrl) {
                        if (ad.url) {
                            ad.contentUrl = ad.url
                        }
                        hook.externalTag = true
                    } else {
                        var bidInvocation = hook.externalTag,
                            etst = this.settings,
                            emd = data.ads[0].emd,
                            tag = etst.tags[emd],
                            i, leni, responses = etst.bidResponses[bidInvocation];
                        for (i = 0, leni = responses.length; i < leni; i++) {
                            if (responses[i].emd == emd) {
                                data.width = responses[i].size.w;
                                data.height = responses[i].size.h;
                                data.ads[0].contentUrl = responses[i].result[tag.ads[0].jat];
                                uto.extend(data.ads[0], tag.ads[0])
                            }
                        }
                    }
                }
                data.cacheOverride = true;
                return data
            },
            getBidData: function(bidInvocation) {
                var rt = this.$root,
                    etst = this.settings;
                if (rt.what(bidInvocation) != "number") {
                    return {}
                }
                var bids = etst.bidResponses[bidInvocation];
                var emd = rt.utils.array.map(bids, function(bid) {
                    return bid.emd || ""
                });
                var nj = rt.utils.array.map(bids, function(bid) {
                    var p = bid.result[etst.tags[bid.emd].ads[0].jpt];
                    return rt.utils.base64.encodeBase64((rt.what(p) == "number" ? p : -1).toString()).split("").reverse().join("") || ""
                });
                var jsd = rt.utils.array.map(bids, function(bid) {
                    return [bid.size.w, bid.size.h].join("*") || ""
                });
                return {
                    emd: emd.join("~"),
                    nj: nj.join("~"),
                    jsd: jsd.join("~")
                }
            },
            updateViewedTags: function(hookId) {
                var rt = this.$root,
                    hook = rt.settings.hooksMap[hookId],
                    data = rt.helpers.getHookData(hookId);
                var emd = data.ads[hook.currentAdIndex].emd,
                    etst = rt.externalTags.settings;
                if (emd) {
                    if (!etst.uemd[emd]) {
                        etst.uemd[emd] = {}
                    }
                    if (!etst.uemd[emd][hook.prod]) {
                        etst.uemd[emd][hook.prod] = 0
                    }
                    etst.uemd[emd][hook.prod]++
                }
            },
            getViewedTagsParam: function() {
                var rt = this.$root,
                    etst = this.settings,
                    uto = rt.utils.object,
                    emd, val = [],
                    prod;
                if (!uto.keys(etst.uemd).length) {
                    return {}
                }
                for (emd in etst.uemd) {
                    for (prod in etst.uemd[emd]) {
                        rt.utils.array.push(val, [emd, prod, etst.uemd[emd][prod]].join("!"))
                    }
                }
                return {
                    uemd: val.join("~")
                }
            }
        }, {
            settings: {
                bidInvocation: 0,
                bidResponses: {},
                bidCount: 0,
                tags: {},
                bidRequestTimeout: 300,
                uemd: {}
            }
        }, true);
        externalTags.bind({
            event: "sendBids",
            listener: {
                sendBids: function(event) {
                    var rt = this.$root,
                        etst = this.settings,
                        emd, tag, ad, jsonUrl, i, leni, hook = rt.settings.hooksMap[event.data.hookId],
                        sizes = this.getProductAdSizes(hook.prod, hook);
                    rt.utils.timer.start("externalBid" + (++etst.bidInvocation));
                    etst.bidResponses[etst.bidInvocation] = [];
                    etst.bidResponses[etst.bidInvocation].bids = 0;
                    etst.bidResponses[etst.bidInvocation].responses = 0;
                    for (emd in etst.tags) {
                        tag = etst.tags[emd];
                        ad = tag.ads[0];
                        if (ad.prs && !ad.prs[hook.prod]) {
                            continue
                        }
                        if (!ad.jsonUrl) {
                            continue
                        }
                        if (!ad.jat) {
                            ad.jat = "ad"
                        }
                        if (!ad.jat) {
                            ad.jpt = "cpm"
                        }
                        for (i = 0, leni = sizes.length; i < leni; i++) {
                            jsonUrl = ad.jsonUrl.replace(/\{WIDTH\}/g, sizes[i].w).replace(/\{HEIGHT\}/g, sizes[i].h);
                            etst.bidCount++;
                            etst.bidResponses[etst.bidInvocation].bids++;
                            rt.comm.loadScript([jsonUrl, "&callback=", etst.bidCallbackVar, etst.bidCount].join(""), null, "setExternalBidResponse", rt.utils.object.extend({
                                emd: emd,
                                bidInvocation: etst.bidInvocation,
                                bidCount: etst.bidCount,
                                hookId: hook.id,
                                size: sizes[i]
                            }, event.data))
                        }
                    }
                }
            }
        });
        externalTags.bind({
            event: "setExternalBidResponse",
            listener: {
                setExternalBidResponse: function(event) {
                    var rt = this.$root,
                        etst = this.settings,
                        bidCount = event.data.bidCount,
                        bidInvocation = event.data.bidInvocation,
                        tag = etst.tags[event.data.emd],
                        ad = tag.ads[0],
                        jct, response = window[etst.bidCallbackVar + bidCount],
                        hook = rt.settings.hooksMap[event.data.hookId],
                        bidResponses = etst.bidResponses[bidInvocation];
                    response.emd = event.data.emd;
                    response.size = event.data.size;
                    if (ad.jct) {
                        jct = new RegExp(ad.jct.replace(/([\[\]])/g, "\\$1"), "g");
                        response.result[ad.jat] = response.result[ad.jat].replace(jct, "@encode@@start@@end@@encode@")
                    }
                    rt.utils.array.push(bidResponses, response);
                    bidResponses.responses++;
                    if (bidResponses.responses >= bidResponses.bids) {
                        if (hook.killBids) {
                            delete hook.killBids
                        } else {
                            hook.externalTag = bidInvocation;
                            rt.event.fire("sendGetAds", event.data)
                        }
                    }
                }
            }
        });
        var updater = $root.$create("updater", {
            handleUpdaterImpression: function(event) {
                var rt = this.$root,
                    response, ust = this.settings,
                    instance = ust.instances[ust.instances.length - 1];
                instance.complete = true;
                response = rt.helpers.processImpressionResponse(event.data);
                if (rt.what(response) != "object") {
                    rt.logger.error("Bad Impression response.", true);
                    return
                }
                instance.impression = response;
                if (!instance.impression.prs[rt.products.intext.settings.prodCode]) {
                    return
                }
                rt.event.fire("initIntext", {
                    updater: instance
                })
            }
        }, {
            settings: {
                def: {
                    interval: 10,
                    container: null,
                    tag: null
                },
                counter: 0,
                instances: []
            }
        }, true);
        updater.bind({
            event: "initUpdater",
            listener: {
                init: function() {
                    var rt = this.$root,
                        ust = this.settings,
                        hp = rt.helpers,
                        cont = hp.getVar("updater_container");
                    ust.interval = hp.getVar("updater_interval") || ust.def.interval;
                    ust.container = cont ? rt.utils.dom.element.$(cont) : ust.def.container;
                    ust.tag = hp.getVar("updater_tag") || ust.def.tag;
                    rt.event.repeat("updaterContentChange", ust.interval * 1000)
                }
            }
        });
        updater.bind({
            event: "updaterContentChange",
            listener: {
                updaterContentChange: function() {
                    var rt = this.$root,
                        ut = rt.utils,
                        ust = this.settings,
                        harvested, instance, i, leni, text = [],
                        nodes = [];
                    if (ust.instances.length && !ust.instances[ust.counter - 1].complete) {
                        return
                    }
                    var containers = rt.utils.dom.filterByClass(ust.className, ust.tag, ust.container);
                    for (i = 0, leni = containers.length; i < leni; i++) {
                        if (containers[i].getAttribute("iceupdated") == "true") {
                            continue
                        }
                        rt.harvest.settings.enabled = true;
                        harvested = rt.harvest.getHarvestedText(containers[i]);
                        if (harvested.text.length > 0) {
                            containers[i].setAttribute("iceupdated", "true");
                            ut.array.push(text, harvested.text);
                            nodes = ut.array.concat(nodes, harvested.nodes)
                        }
                    }
                    if (!text.length) {
                        return
                    }
                    instance = ust.instances[ust.counter++] = {
                        nodes: nodes,
                        text: text.join("P"),
                        complete: false
                    };
                    rt.event.unbind("afterImpression");
                    rt.event.bind({
                        event: "afterImpression",
                        listener: this.handleUpdaterImpression
                    });
                    rt.event.fire("beforeImpression", {
                        ptxt: instance.text,
                        updater: ust.counter
                    })
                }
            }
        });
        var demo = $root.$create("demo", {
            isDemo: function() {
                var rt = this.$root,
                    hp = rt.helpers,
                    std = this.settings;
                std.demo = hp.getVar("demo");
                std.custom = hp.getVar("custom");
                return (std.demo || std.custom)
            },
            convertCustom: function(custom) {
                var rt = this.$root,
                    uto = rt.utils.object,
                    prods = ["intext", "tagcloud"],
                    prod, i, leni, prs = {},
                    prodCode;
                if (custom.related) {
                    if (!custom.tagcloud) {
                        custom.tagcloud = custom.related
                    }
                    delete custom.related
                }
                for (i = 0, leni = prods.length; i < leni; i++) {
                    prod = prods[i];
                    if (custom[prod]) {
                        prodCode = prod.charAt(0);
                        if (custom[prod] === true) {
                            prs[prodCode] = {
                                behavior: {},
                                sentences: ["ALL"]
                            }
                        } else {
                            if ((custom[prod].sentences && custom[prod].sentences.length) || custom[prod].marker) {
                                prs[prodCode] = uto.extend({}, custom[prod])
                            }
                        }
                    }
                }
                var data = {
                    containers: custom.hooks && custom.hooks.containers ? custom.hooks.containers : null,
                    responses: {
                        gsd: uto.extend(custom.verification ? custom.verification.response : {}, {
                            prs: uto.keys(prs).join(",")
                        }),
                        impression: {
                            rauth: {
                                rsd: "1",
                                rsk: "1",
                                rcs: "1"
                            },
                            sentences: custom.hooks && custom.hooks.sentences ? rt.utils.array.toObject(custom.hooks.sentences, {}, "1") : null,
                            prs: prs
                        },
                        getads: {
                            catchall: rt.what(custom.hover.response) == "array" ? custom.hover.response[0] : custom.hover.response[rt.utils.object.keys(custom.hover.response)[0]]
                        }
                    }
                };
                rt.event.fire("setDemoData", data)
            },
            reRouteEvents: function() {
                var rt = this.$root,
                    ev = rt.event;
                ev.unbind("beforeGSD");
                ev.bind({
                    event: "beforeGSD",
                    listener: this.beforeGSD
                });
                ev.unbind("afterGSD");
                ev.bind({
                    event: "afterGSD",
                    listener: this.afterGSD
                });
                ev.unbind("beforeImpression");
                ev.bind({
                    event: "beforeImpression",
                    listener: this.beforeImpression
                });
                ev.unbind("afterImpression");
                ev.unbind("getAds");
                ev.bind({
                    event: "getAds",
                    listener: this.getAds
                });
                ev.unbind("sendAdView");
                ev.unbind("sendImpressionLog");
                ev.unbind("startClick");
                ev.bind({
                    event: "startClick",
                    listener: rt.comm.doRedirect
                })
            },
            beforeGSD: function() {
                this.$root.event.fire("afterGSD")
            },
            afterGSD: function() {
                var rt = this.$root;
                if (/i|r|t/.test(rt.comm.settings.responses.gsd.prs)) {
                    rt.event.fire("beforeHarvest")
                } else {
                    rt.event.fire("beforeImpression")
                }
            },
            beforeImpression: function() {
                var rt = this.$root,
                    prs = rt.utils.array.toObject(rt.comm.settings.responses.gsd.prs.split(","), {}, true);
                if (rt.helpers.getVar("inframe_disable") === true) {
                    delete prs["f"]
                }
                if (prs["f"]) {
                    var gpmp = rt.products.inframe.buildImpPageMarginsParam();
                    if (!gpmp) {
                        delete prs["f"]
                    }
                }
                rt.event.fire("preRenderProducts")
            },
            getAds: function(event) {
                var rt = this.$root,
                    hookId = event.data.hookId,
                    st = rt.settings,
                    hook = st.hooksMap[hookId],
                    getads = rt.comm.settings.responses.getads,
                    s2cm = this.settings.sentences2ContainersMap,
                    i, j, ad, cb;
                var data = rt.helpers.getHookData(hookId);
                if (!data) {
                    if (getads.sentences && getads.sentences[hook.sentence]) {
                        data = getads.sentences[hook.sentence]
                    } else {
                        if (getads.containers && getads.containers[s2cm[hook.sentence]]) {
                            data = getads.containers[s2cm[hook.sentence]]
                        } else {
                            if (getads.catchall) {
                                data = getads.catchall
                            }
                        }
                    }
                }
                data = data ? rt.utils.object.clone(data, true) : "pending";
                data.lid = hook.id;
                data.sentence = hook.sentence;
                var props = ["redirectUrl", "title", "text"];
                for (i = 0; i < data.ads.length; i++) {
                    ad = data.ads[0];
                    for (j = 0; j < props.length; j++) {
                        if (ad[props[j]]) {
                            ad[props[j]] = ad[props[j]].replace("@sentence@", hook.sentence)
                        }
                    }
                }
                hook.bdc = ++st.bdc;
                switch (hook.prod) {
                case "s":
                    cb = "getadsResponseInsearch";
                    break;
                case "f":
                    cb = "getadsResponseInframe";
                    break;
                default:
                    cb = "getadsResponse"
                }
                rt.event.fire(cb, data)
            }
        }, {
            settings: {
                custom: false,
                demo: false,
                sentences2ContainersMap: {}
            }
        }, true);
        demo.bind({
            event: "demo",
            listener: {
                init: function() {
                    var rt = this.$root,
                        std = this.settings;
                    this.reRouteEvents();
                    if (std.custom) {
                        this.convertCustom(std.custom)
                    } else {
                        if (std.demo) {
                            rt.comm.loadScript(std.demo)
                        }
                    }
                }
            }
        });
        demo.bind({
            event: "setDemoData",
            listener: {
                setDemoData: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        data = event.data,
                        imp, i, leni, dmel = rt.utils.dom.element,
                        el, sentence, dst = this.settings,
                        hp = rt.helpers;
                    rt.helpers.getCustomerId();
                    dst.data = data;
                    imp = st.impression = {
                        params: {}
                    };
                    if (data.ref) {
                        st.ref = imp.params.ref = data.ref
                    }
                    if (data.refq) {
                        st.refq = imp.params.refq = data.refq
                    }
                    hp.setDefaultWebsiteDirectives(data.responses.gsd);
                    if (!data.responses.impression.sentences) {
                        data.responses.impression.sentences = {}
                    }
                    if (data.containers) {
                        for (i = 0, leni = data.containers.length; i < leni; i++) {
                            el = dmel.$(data.containers[i]);
                            if (!el || !el.firstChild || el.firstChild.nodeType != st.nodeTypes.TEXT) {
                                continue
                            }
                            sentence = rt.utils.string.trim(el.firstChild.nodeValue.toLowerCase().replace(/\s+/g, ""));
                            data.responses.impression.sentences[sentence] = "1";
                            dst.sentences2ContainersMap[sentence] = data.containers[i]
                        }
                    }
                    hp.normalizeSentenceLists(data.responses.impression);
                    rt.comm.settings.responses = data.responses;
                    rt.event.fire("loadPlugins")
                }
            }
        });
        var bubble = $root.$create("bubble", {
            hookDblClick: function(event) {
                this.$root.utils.dom.event.stop(event.domEvent)
            },
            hookClick: function(event) {
                var rt = this.$root,
                    st = rt.settings,
                    domEvt = event.domEvent,
                    sender = domEvt.target || domEvt.srcElement,
                    ut = rt.utils,
                    hookId = event.data.hookId,
                    hook = st.hooksMap[hookId],
                    bst = this.settings,
                    ad;
                ut.dom.event.stop(domEvt);
                if (st.clickStatus == "complete") {
                    return
                }
                if (hook.externalTag) {
                    st.clickStatus = "complete";
                    return
                }
                hook.clickType = (sender.className.indexOf(bst.cls + "_simlink") != -1 || ut.dom.element.inHierarchy(sender, hook.node)) ? hook.bubble.status == "open" ? "onLinkAfterWinOpen" : "onLink" : "onWin";
                st.clickStatus = "pending";
                ut.timer.stop("adView" + hookId);
                var reuseWindow = rt.helpers.getHookBehavior(hookId).adsReuseWindow;
                var data = rt.helpers.getHookData(hookId);
                if (hook.bubble.status != "open" && (bst.dcbbs || (data && data.dcbbs))) {
                    st.clickStatus = "none";
                    delete hook.clickType;
                    return
                }
                if (rt.what(data) == "object") {
                    ad = data.ads[hook.currentAdIndex];
                    if (hook.clickType == "onWin" && ad.template == "html" && ad.content.match(/<object |<embed /i) && ad.content.match(/clicktag/i)) {
                        st.clickStatus = "complete";
                        return
                    }
                    if ((hook.clickType == "onLink" || hook.clickType == "onLinkAfterWinOpen") && ad.redirectURL == "") {
                        st.clickStatus = "none";
                        delete hook.clickType
                    } else {
                        if (hook.bubble.status == "open" || hook.clickType == "onWin" || !data.dcbbs) {
                            if (!reuseWindow) {
                                st.adWin = window.open("", hook.node.id)
                            }
                            rt.event.fire("productClick", {
                                hookId: hookId
                            })
                        }
                    }
                } else {
                    if (!reuseWindow) {
                        st.adWin = window.open("", hook.node.id)
                    }
                }
            },
            getSkinPath: function(skin) {
                var rt = this.$root,
                    sk = this.skins,
                    rv = skin && sk[skin] && sk[skin].settings.rv ? sk[skin].settings.rv + "/" : "";
                return ["http://", rt.settings.hosts.resources, "/static/skins/", skin ? skin + "/intext/" : "", rv].join("")
            },
            preloadImages: function(path, images) {
                var loaderPath = this.getSkinPath(false);
                var loaderImages = ["loader.gif", "loader-bg.png"];
                for (i = 0, leni = loaderImages.length; i < leni; i++) {
                    img = new Image();
                    img.src = loaderPath + loaderImages[i]
                }
                if (!images) {
                    return
                }
                var rt = this.$root,
                    b = rt.browser,
                    img, i, leni;
                images = rt.utils.string.qw(images);
                for (i = 0, leni = images.length; i < leni; i++) {
                    img = new Image();
                    img.src = [path, images[i], ".png"].join("")
                }
            },
            adjustBubblePosition: function(hook, dimensions) {
                var rt = this.$root,
                    st = rt.settings,
                    ut = rt.utils,
                    dm = ut.dom,
                    dmel = dm.element,
                    b = rt.browser,
                    pos = hook.pos;
                var node = hook.node;
                var nodeHeight = node.offsetHeight;
                hook.isMultiline = (hook.fontSize * 2 < nodeHeight);
                var right, left, top, bottom, scrollTop = dm.document.getScrollTop(),
                    scrollLeft = dm.document.getScrollLeft();
                var width = dimensions.width,
                    height = dimensions.height;
                var bbldir = rt.helpers.getHookBehavior(hook.id).bubbleDirection;
                if (hook.isMultiline) {
                    var linesCount = Math.floor(nodeHeight / (parseInt(dmel.getStyle(node, "lineHeight"), 10) || hook.fontSize + 2));
                    if (linesCount < 2) {
                        linesCount = 2
                    }
                    var lineHeight = Math.floor(nodeHeight / linesCount);
                    var mouseX = hook.domEvent.pageX || hook.domEvent.clientX + scrollLeft;
                    var mouseY = hook.domEvent.pageY || hook.domEvent.clientY + scrollTop;
                    right = mouseX > (pos.left + pos.left + node.offsetWidth) / 2 ? pos.left + node.offsetWidth - 20 : pos.left;
                    left = right + 20 - width;
                    top = pos.top - height;
                    if (mouseY - pos.top > lineHeight) {
                        top += lineHeight
                    }
                    bottom = top + lineHeight + height
                } else {
                    right = pos.left;
                    left = pos.left - width + ((!b.IE || !node.offsetWidth) ? 20 : node.offsetWidth);
                    top = pos.top - height;
                    bottom = pos.top + (node.offsetHeight || 18)
                }
                var allpos = {
                    TR: {
                        rect: [right, top, right + width, top + height],
                        clear: true,
                        inBounds: true
                    },
                    TL: {
                        rect: [left, top, left + width, top + height],
                        clear: true,
                        inBounds: true
                    },
                    BR: {
                        rect: [right, bottom, right + width, bottom + height],
                        clear: true,
                        inBounds: true
                    },
                    BL: {
                        rect: [left, bottom, left + width, bottom + height],
                        clear: true,
                        inBounds: true
                    }
                };
                if ((right + width > dm.document.getWidth() + scrollLeft) || (bbldir && bbldir.indexOf("L") != -1)) {
                    allpos.TR.inBounds = allpos.BR.inBounds = false
                }
                if (left < 0 || (bbldir && bbldir.indexOf("R") != -1)) {
                    allpos.TL.inBounds = allpos.BL.inBounds = false
                }
                if ((bottom + height > dm.document.getHeight() + scrollTop) || (bbldir && bbldir.indexOf("T") != -1)) {
                    allpos.BR.inBounds = allpos.BL.inBounds = false
                }
                if (top < scrollTop || (bbldir && bbldir.indexOf("B") != -1)) {
                    allpos.TR.inBounds = allpos.TL.inBounds = false
                }
                if (st.unhoverableAreas) {
                    for (var key in allpos) {
                        if (!allpos[key].inBounds) {
                            continue
                        }
                        for (var i = 0, leni = st.unhoverableAreas.length; i < leni; i++) {
                            if (ut.doRectsOverlap(allpos[key].rect, st.unhoverableAreas[i])) {
                                allpos[key].clear = false;
                                break
                            }
                        }
                    }
                }
                for (key in allpos) {
                    if (!allpos[key].inBounds) {
                        continue
                    }
                    if (allpos[key].clear) {
                        hook.orientationY = key.charAt(0);
                        hook.orientationX = key.charAt(1);
                        return {
                            left: allpos[key].rect[0],
                            top: allpos[key].rect[1]
                        }
                    }
                }
                for (key in allpos) {
                    if (allpos[key].inBounds) {
                        hook.orientationY = key.charAt(0);
                        hook.orientationX = key.charAt(1);
                        return {
                            left: allpos[key].rect[0],
                            top: allpos[key].rect[1]
                        }
                    }
                }
                hook.orientationY = "T";
                hook.orientationX = "R";
                if (bbldir) {
                    if (bbldir.length == 2) {
                        hook.orientationY = bbldir.charAt(0);
                        hook.orientationX = bbldir.charAt(1)
                    } else {
                        if (bbldir == "T" || bbldir == "B") {
                            hook.orientationY = bbldir
                        }
                        if (bbldir == "R" || bbldir == "L") {
                            hook.orientationX = bbldir
                        }
                    }
                }
                return {
                    left: allpos[hook.orientationY + hook.orientationX].rect[0],
                    top: allpos[hook.orientationY + hook.orientationX].rect[1]
                }
            },
            getPreloaderPosition: function(hook, dimensions) {
                var pos = this.adjustBubblePosition(hook, dimensions);
                if (hook.orientationY == "T") {
                    pos.top = pos.top + dimensions.height - 31
                }
                if (hook.orientationX == "L") {
                    pos.left = pos.left + dimensions.width - 31
                }
                return pos
            },
            renderAdsContent: function(hook, data) {
                var rt = this.$root,
                    adsHTML = "",
                    ad;
                for (var i = 0, leni = data.ads.length; i < leni; i++) {
                    ad = data.ads[i];
                    rt.helpers.setActualTemplate(ad);
                    adsHTML += this.templates[ad.actualTemplate](hook, i)
                }
                return adsHTML
            },
            afterBubbleRendered: function(container, data, hook) {
                var rt = this.$root,
                    i, leni, form;
                for (i = 0, leni = data.ads.length; i < leni; i++) {
                    if (data.ads[i].actualTemplate == "iframe") {
                        form = container.getElementsByTagName("form");
                        if (form.length && form[0].className.indexOf(this.settings.cls + "_ad_form") != -1) {
                            form[0].submit()
                        }
                    }
                }
                var anchors = container.getElementsByTagName("a"),
                    href;
                for (i = 0, leni = anchors.length; i < leni; i++) {
                    if (anchors[i].href) {
                        href = anchors[i].href;
                        anchors[i].removeAttribute("href");
                        rt.event.dom.bind(anchors[i], {
                            event: "click",
                            listener: (function() {
                                return function(domEvt) {
                                    rt.utils.dom.event.stop(domEvt.domEvent);
                                    rt.event.fire("productClick", {
                                        hookId: hook.id,
                                        url: href,
                                        clickType: "onWin"
                                    })
                                }
                            })()
                        })
                    }
                }
                var objects = container.getElementsByTagName("object");
                for (i = 0; i < objects.length; i++) {
                    rt.utils.dom.event.disableEventBubbling("click", objects[i])
                }
                var embeds = container.getElementsByTagName("embed");
                for (i = 0; i < embeds.length; i++) {
                    rt.utils.dom.event.disableEventBubbling("click", embeds[i])
                }
            }
        }, {
            settings: {
                initialized: false,
                activeHook: null,
                base: {
                    status: "closed",
                    node: null,
                    pos: null
                },
                def: {
                    width: 316,
                    height: 176
                },
                cls: "ice_it",
                oldIE: (function() {
                    var b = $root.browser;
                    return b.IE && b.getVersion(true) < 9
                })(),
                oldFF: (function() {
                    var b = $root.browser;
                    return b.Firefox && b.getVersion(true) < 4
                })()
            }
        }, true);
        bubble.bind({
            event: "initBubble",
            listener: {
                initBubble: function(event) {
                    var rt = this.$root,
                        hp = rt.helpers,
                        bst = rt.bubble.settings;
                    bst.initialized = true;
                    bst.dcbbs = hp.getVar("deny_click_before_bubble_show") || false;
                    this.skins[rt.products[event.data].settings.behavior.merged.skin].init()
                }
            }
        });
        bubble.bind({
            event: "hookMouseover",
            listener: {
                hookMouseover: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        bh = rt.helpers.getHookBehavior(hookId),
                        hook = st.hooksMap[hookId],
                        hrd = bh.hoverRequestDelay;
                    delete hook.killHoverStart;
                    if (st.clickStatus != "none") {
                        return
                    }
                    if (hook.bubble.status.indexOf("open") == 0) {
                        hrd = 0
                    }
                    var de = event.data.domEvent || event.domEvent;
                    hook.domEvent = {
                        pageX: de.pageX,
                        pageY: de.pageY,
                        clientX: de.clientX,
                        clientY: de.clientY
                    };
                    rt.event.fire(hook.type + "HookMouseover", {
                        hookId: hookId
                    });
                    rt.event.fire("hookHoverStart", {
                        hookId: hookId
                    }, hrd)
                }
            }
        });
        bubble.bind({
            event: "hookMouseout",
            listener: {
                hookMouseout: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId];
                    hook.killHoverStart = true;
                    rt.event.fire(hook.type + "HookMouseout", {
                        hookId: hook.id
                    });
                    rt.event.fire("hideBubble", {
                        hookId: hook.id
                    })
                }
            }
        });
        bubble.bind({
            event: "hookHoverStart",
            listener: {
                hookHoverStart: function(event) {
                    var rt = this.$root,
                        bst = this.settings,
                        hookId = event.data.hookId,
                        hook = rt.settings.hooksMap[hookId],
                        activeHook;
                    if (hook.killHoverStart) {
                        delete hook.killHoverStart;
                        return
                    }
                    hook.hovered = true;
                    if (bst.activeHook && bst.activeHook != hookId) {
                        activeHook = bst.activeHook;
                        bst.activeHook = null;
                        rt.event.fire("closeBubble", {
                            hookId: activeHook
                        })
                    }
                    bst.activeHook = hookId;
                    if (hook.bubble.status.indexOf("open") != -1) {
                        return
                    }
                    hook.bubble.status = "opening";
                    var bubbleShowDelay = rt.helpers.getHookBehavior(hookId).bubbleShowDelay;
                    var data = rt.helpers.getHookData(hookId);
                    if (!data) {
                        rt.event.fire("getAds", event.data)
                    }
                    rt.event.fire("showBubble", event.data, bubbleShowDelay)
                }
            }
        });
        bubble.bind({
            event: "getadsResponse",
            listener: {
                setAdData: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        data = event.data,
                        hookId = data.lid,
                        bst = this.settings,
                        i, leni, ad, hook = st.hooksMap[hookId];
                    if (!hook) {
                        rt.logger.error("Error: Misssing hook.", this.setAdData);
                        return false
                    }
                    if (bst.activeHook == hookId && hook.bubble.status == "open") {
                        return
                    }
                    data.sentence = decodeURIComponent(data.sentence);
                    ad = data.ads[hook.currentAdIndex];
                    if (ad.template == "external") {
                        data = rt.externalTags.setExternalTagData(hook, data)
                    } else {
                        if (hook.externalTag) {
                            delete hook.externalTag
                        }
                        if (!data.width || data.width < 200) {
                            data.width = bst.def.width
                        }
                        if (!data.height || data.height < 60) {
                            data.height = bst.def.height
                        }
                        if (bst.dcbbs) {
                            data.dcbbs = bst.dcbbs
                        }
                        if (data.dcbbs && !rt.helpers.getHookBehavior(hookId).adsReuseWindow) {
                            data.dcbbs = false
                        }
                        if (data.dcbbs && st.clickStatus == "pending") {
                            st.clickStatus = "none";
                            st.hookClicked = null
                        }
                    }
                    rt.helpers.setHookData(hookId, data);
                    for (i = 0, leni = data.ads.length; i < leni; i++) {
                        ad = data.ads[i];
                        rt.helpers.setAdThumbnail(ad);
                        if (ad.trackerURL) {
                            rt.helpers.hitTrackerURL(ad.trackerURL)
                        }
                    }
                    if (bst.activeHook != hookId) {
                        rt.event.fire("closeBubble", {
                            hookId: hookId
                        });
                        return
                    }
                    rt.event.fire("showBubble", {
                        hookId: hookId
                    })
                }
            }
        });
        bubble.bind({
            event: "showBubble",
            listener: {
                showBubble: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId],
                        dm = rt.utils.dom,
                        rtb = rt.bubble,
                        bst = rtb.settings;
                    if (hook.bubble.status == "open") {
                        return
                    }
                    var data = rt.helpers.getHookData(hookId);
                    hook.pos = dm.element.offset(hook.node);
                    var preloader = hook.bubble.preloader;
                    if (data && data != "pending") {
                        if (preloader) {
                            preloader.style.display = "none"
                        }
                        var skin = data.ads[hook.currentAdIndex].skin || rt.helpers.getHookBehavior(hookId).skin;
                        rtb.skins[skin].showBubble(hookId)
                    } else {
                        if (data == "pending") {
                            var pos = rtb.getPreloaderPosition(hook, {
                                width: bst.def.width,
                                height: bst.def.height
                            });
                            if (!preloader) {
                                var path = rtb.getSkinPath();
                                preloader = hook.bubble.preloader = dm.createDOMFragment({
                                    tag: "div",
                                    cls: st.baseClass,
                                    parent: document.body,
                                    style: {
                                        position: "absolute",
                                        display: "none",
                                        width: "30px",
                                        height: "30px",
                                        top: "0px",
                                        left: "0px",
                                        zIndex: st.baseZIndex + 101,
                                        background: ['transparent url("', path, 'loader-bg.png") no-repeat scroll 0 0'].join("")
                                    },
                                    children: {
                                        tag: "img",
                                        cls: st.baseClass,
                                        attributes: {
                                            width: 30,
                                            height: 30,
                                            alt: "",
                                            src: path + "loader.gif"
                                        }
                                    }
                                })
                            }
                            dm.element.setStyle(preloader, {
                                top: pos.top + "px",
                                left: pos.left + "px",
                                display: "block"
                            })
                        }
                    }
                }
            }
        });
        bubble.bind({
            event: "bubbleShowing",
            listener: {
                bubbleShowing: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId],
                        bh = rt.helpers.getHookBehavior(hookId),
                        time = bh.bubbleHideDelay,
                        data = rt.helpers.getHookData(hookId);
                    hook.bubble.status = "open";
                    if (hook.externalTag) {
                        rt.externalTags.updateViewedTags(hookId)
                    }
                    var params = {
                        bdc: hook.bdc,
                        midx: hook.currentAdIndex,
                        prod_t: hook.prod,
                        emd: data.ads[hook.currentAdIndex].emd || ""
                    };
                    rt.event.fire("sendAdView", {
                        hookId: hookId,
                        params: params
                    });
                    if (st.clickStatus == "pending") {
                        rt.event.fire("productClick", {
                            hookId: hookId
                        }, time);
                        return
                    }
                    rt.utils.timer.start("adView" + hookId);
                    if (!hook.hovered) {
                        rt.event.fire("hideBubble", {
                            hookId: hookId
                        })
                    }
                }
            }
        });
        bubble.bind({
            event: "hideBubble",
            listener: {
                hideBubble: function(event) {
                    var rt = this.$root,
                        hookId = event.data.hookId,
                        hook = rt.settings.hooksMap[hookId],
                        viewTime = null;
                    hook.hovered = false;
                    if (hook.bubble.status == "closed") {
                        return
                    }
                    var data = rt.helpers.getHookData(hookId);
                    if (hook.externalTag && data) {
                        viewTime = data.ads[hook.currentAdIndex].vt
                    }
                    var delay = parseInt(event.data.xBtn ? 0 : (viewTime || rt.helpers.getHookBehavior(hookId).bubbleHideDelay));
                    rt.event.fire("closeBubble", event.data, delay)
                }
            }
        });
        bubble.bind({
            event: "closeBubble",
            listener: {
                closeBubble: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        bst = this.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId],
                        data = rt.helpers.getHookData(hookId);
                    if (bst.activeHook == hookId) {
                        bst.activeHook = null
                    }
                    if (hook.hovered) {
                        return
                    }
                    if (hook.bubble.node) {
                        hook.bubble.node.style.display = "none"
                    }
                    if (hook.bubble.preloader) {
                        hook.bubble.preloader.style.display = "none"
                    }
                    if (st.clickStatus != "pending") {
                        if (data && data.cacheOverride) {
                            rt.helpers.clearHookData(hookId);
                            if (hook.externalTag) {
                                delete hook.externalTag
                            }
                        }
                    }
                    if (st.clickStatus == "none") {
                        rt.utils.timer.clear("adView" + hookId)
                    }
                    hook.bubble.status = "closed";
                    if (data && data != "pending" && data.ads[0].template == "html") {
                        rt.event.fire("clearBubbleDOM", {
                            hookId: hookId
                        }, 1000)
                    }
                }
            }
        });
        bubble.bind({
            event: "clearBubbleDOM",
            listener: {
                clearBubbleDOM: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId],
                        el;
                    if (hook.bubble.status == "open") {
                        return
                    }
                    el = rt.utils.dom.filterByClass(this.settings.cls + "_bodyMain", null, hook.bubble.node);
                    if (el.length) {
                        el[0].innerHTML = ""
                    }
                }
            }
        });
        bubble.bind({
            event: "bubbleMouseover",
            listener: {
                bubbleMouseover: function(event) {
                    var rt = this.$root,
                        hookId = event.data.hookId,
                        hook = rt.settings.hooksMap[hookId],
                        data = rt.helpers.getHookData(hook.id);
                    hook.hovered = true;
                    rt.event.fire((data.ads[hook.currentAdIndex].skin || rt.helpers.getHookBehavior(hookId).skin) + "BubbleMouseover", event.data)
                }
            }
        });
        bubble.bind({
            event: "bubbleMouseout",
            listener: {
                bubbleMouseout: function(event) {
                    var rt = this.$root,
                        st = rt.settings,
                        hookId = event.data.hookId,
                        hook = st.hooksMap[hookId],
                        data = rt.helpers.getHookData(hook.id);
                    hook.hovered = false;
                    rt.event.fire((data.ads[hook.currentAdIndex].skin || rt.helpers.getHookBehavior(hookId).skin) + "BubbleMouseout", event.data);
                    if (st.clickStatus == "pending") {
                        return
                    }
                    rt.event.fire("hideBubble", event.data)
                }
            }
        });
        bubble.$create("templates", {
            text: function(hook, adIndex) {
                var rt = this.$root,
                    pr = this.$parent,
                    st = rt.settings,
                    b = rt.browser,
                    data = rt.helpers.getHookData(hook.id),
                    ad = data.ads[hook.currentAdIndex],
                    thumbURL = "",
                    hasThumb = false,
                    bst = pr.settings;
                var skinPath = pr.getSkinPath(data.skin || rt.helpers.getHookBehavior(hook.id).skin);
                if (ad.thumbURL != "no-image") {
                    thumbURL = ad.thumbURL;
                    hasThumb = true
                }
                var html = '<div 			class="<%= cls %>" style="color:#003366; font-family: Arial,sans-serif; font-size:11pt; font-weight:bold; line-height:11pt; margin-left:15px; margin-top:10px; margin-bottom:10px; margin-right:5px; max-height:22pt; overflow:hidden;"><%= ad.title %></div>			<div class="<%= cls %>" style="position:absolute; height:88px; width:<%= data.width %>px;">				<%if (hasThumb){ %>					<img class="<%= cls %>" width="110" height="82" style="position:absolute; top:0; left:15px; width:110px; height:82px; background-color:#e8e8e8; box-shadow:2px 2px 5px #888; -moz-box-shadow:2px 2px 5px #888; -webkit-box-shadow:2px 2px 5px #888;" src="<%= thumbURL %>">				<% } %>				<div class="<%= cls %>" style="position:absolute; top:0; left:<%= hasThumb ? 140 : 15 %>px; width:168px; height:51px; overflow:hidden; color:#666666; font-family: Arial,sans-serif; font-size:10pt; font-weight:normal; line-height:17px;"><%= ad.text %></div>				<div id="<%= intextCls %>_btn_<%= hookId %>" class="<%= cls %> <%= intextCls %>_btn" style="position:absolute; display:block; bottom:0px; right:13px; width:93px; height:24px; font-family:Arial,sans-serif; font-size:9pt; font-weight:bold; cursor:pointer; text-align:center; line-height:24px; color:#ffffff;"><%= rt.helpers.translate("clickHere") %></div>			</div>			<div class="<%= cls %>" style="position:absolute; bottom:12px; left:15px; width:280px; height:15px; color:#003366; font-family: Arial,sans-serif; font-size:9pt; font-weight:normal; text-decoration:underline; overflow:hidden;"><%= ad.displayedURL %></div>';
                return rt.utils.VeST(html, {
                    rt: rt,
                    intextCls: bst.cls,
                    cls: st.baseClass,
                    btnCls: [st.baseClass, " ", bst.cls, "_bg ", bst.cls, "_btn"].join(""),
                    hookId: hook.id,
                    data: data,
                    ad: ad,
                    thumbURL: thumbURL,
                    hasThumb: hasThumb,
                    display: adIndex != hook.currentAdIndex ? "none" : "block",
                    skinPath: skinPath
                })
            },
            html: function(hook, adIndex) {
                var rt = this.$root,
                    st = rt.settings;
                return rt.utils.VeST('<div 			class="<%= cls %>" style="height:<%= data.height %>px; position:relative; display:<%= display %>;"><%= content %></div>', {
                    cls: st.baseClass,
                    adIndex: adIndex,
                    data: rt.helpers.getHookData(hook.id),
                    display: adIndex != hook.currentAdIndex ? "none" : "block",
                    content: rt.helpers.parseTokens(hook)
                })
            },
            iframe: function(hook, adIndex) {
                var rt = this.$root,
                    st = rt.settings,
                    bst = this.$parent.settings;
                var html = '<div 			class="<%= cls %>" style="display:<%= display %>;"><div cls="<%= cls %>" style="width:<%= data.width %>px; height:<%= data.height %>px;">	<iframe name="<%= iframeName %>" src="<%= st.blankURL %>" width="<%= data.width %>" height="<%= data.height %>" frameborder="0" scrolling="no"></iframe></div><%= rt.helpers.getEchoForm(content, iframeName, null, formCls) %></div>';
                return rt.utils.VeST(html, {
                    rt: rt,
                    version: rt.version,
                    cls: st.baseClass,
                    adIndex: adIndex,
                    data: rt.helpers.getHookData(hook.id),
                    display: adIndex != hook.currentAdIndex ? "none" : "block",
                    content: rt.helpers.parseTokens(hook),
                    iframeName: bst.cls + "_ad_frame" + adIndex,
                    formCls: bst.cls + "_ad_form",
                    st: st
                })
            },
            external: function(hook, adIndex) {
                var rt = this.$root,
                    st = rt.settings,
                    data = rt.helpers.getHookData(hook.id);
                var html = '<div 			class="<%= cls %>" style="display:<%= display %>; width:<%= data.width %>px; height:<%= data.height %>px;">	<iframe src="<%= contentUrl %>" width="<%= data.width %>" height="<%= data.height %>" frameborder="0" scrolling="no"	allowtransparency="true" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"></iframe></div>';
                return rt.utils.VeST(html, {
                    cls: st.baseClass,
                    data: data,
                    display: adIndex != hook.currentAdIndex ? "none" : "block",
                    contentUrl: rt.helpers.parseTokens(hook, data.ads[adIndex].contentUrl)
                })
            }
        }, null, false);
        var skins = bubble.$create("skins", {}, null, false);
        skins.$create("brand", {
            init: function() {
                var rt = this.$root,
                    dms = rt.utils.dom.style,
                    bbl = rt.bubble,
                    bst = bbl.settings,
                    intextCls = bst.cls,
                    skinPath = bbl.getSkinPath(this.$id),
                    images = "";
                if (rt.browser.IE || bst.oldFF) {
                    dms.addRule("." + intextCls + "_btn", ["background:url(", skinPath, "btn.png) no-repeat scroll 0 0 !important;"].join(""));
                    dms.addRule("." + intextCls + "_bg", ["background:url(", skinPath, "hdr-btns.png) no-repeat scroll 0 0;"].join(""));
                    images = "btn.png hdr-btns.png loading.gif"
                } else {
                    dms.addRule("." + intextCls + "_btn", ["background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAABICAYAAACUavnrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4JJREFUeNrsnL9u01AUxs+xbxOS1LQVBQkGJBgQMPUNGCshMiB1zgqoOwMViBfoxMYGqjqwMIBgYqC8AQsStAyVaAmllDZN4j+xL/fGdsgD9J4I8X1SFDvZfv70+dxzj60eP3119vXGx9V6rXLzdP2U0gSdtNh8umEct/ePXn7ebt9nutZ6dvHyhdZsUKcsA3JX8n2mvV/HtLN38ET5Qb1prgJ1+xHIuHS7sXuSZvagqcy5l//IIOMYOudB4ivSpG2seGDuVgZ4kd5a2TOtNSHO3d9MM51DHlYrWZYRjC5gdp3l0K3t7QWA0SWgF06nwumQ80inEvMwXlINn0soG3e6xl1UyO3j8QKnyzrdhvsgRaaLBfsoXuB0UXlAAOiADgE6oEOA/s9B94FBVL6p03mLmBfAQmqBpDcVZ/EKJ701s0CaAxHHseJxW081HilD/c1sw1vu9JMl4/qGbREAz8nzZtKdoF5Z/51kGyqhynxXBYtXrp+7MV2rKrQETl52U7obJtGX7fbPOI7e2UxfNb+3dvcO0YNxCt5uiOq75iBR7FEzihMKowRkBBxvZOde2GNDHmMvAtDNJ6XUloykAVy2aFTlFYDkpP6GPCSSLyV0DzN1MrlScFcMp8tSHzkd0OWYs4XOebxgWSRBvRjBGMaLgc6gLpQubOOFTbyYxRG2MwSMXk54FfGCWBdLlzxefEOcUTYKOt3Gi4/ei6jT82hntALkynRMA0xCgA7o/w90zL3Iylea9JapFxfQCnCr4WPq8cAebqo0Dh909neeK6XmCRvTTqn3++Gu1pWHitL47XHv6B771dvmn4Aw9+IoxvWhTsMXVJ35oGiqMR/MnLl19dL5xelaBe97cWJytm8ZiT993e12euF7uzhaNaBb334c5I/cgbob8Pk98445ipU5afbjhHphDDIC4M3SP597sQ0v7aMR4Bw62bkXKude0HsRlMYIhiTt4luVhTskFzFw+gSsnm9MI9FFrZ47Hb1GWadb8ogXWeqj7TpILl+KWUagkBRKxslA5+Gd1EOjSyDRxzLdQwUzieoFETOBTEf9Ig+dMEAqCr18/AXQ3cc5jznd57wBg4hxuiQa7fj7SmvaYs/OvaB8cQ3dzr2YsnFTZYNopXfwfc1An8OutFtFcdJmXbXve0nfVDlZPu4NlgxyvO/FjTyPdSeoVdbTRG/8EWAAta8y0OqpUAcAAAAASUVORK5CYII=) no-repeat scroll 0 0 !important;"].join(""));
                    dms.addRule("." + intextCls + "_bg", ["background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB+hJREFUeNrEV3tMm9cVP7Y/29gY/MBvg3klgFJGAnFeBUpok03NOhJeaVcSdVvGEu2fbdqmNm23bkmqRk1bbVm0PiKtTaVtSkLTh9SQlLY0CWSDpkugy8MmCY+AwRiwzbDBYJudc+FzP0e0+W+70pG/ex733Hvuub9zLPr9/gPAj/n5edDr9TA2NmbG6fJF9i3kuZEHIpEorvvbZ59hv7y9WCyGWCwGJpMJPB5PBrKykWJITp1O652Y8DE9fg0OEscGpIOl999fbjQaUEMEXq8Xbjid7ch/Guk8fPP4DtKBB8rLHXp9Gm5knjYRc7qcnyD/KaR/8YpCx3vWrllzZN26tRIJ7p4fmfYMKCkuLv380qXWf3Z0/AxZR77G6TMPlJftL161SiSMTFamXby6pGRz+8WLFZevXPkRsv4qdFyBix9ZuXKlZGYmzBh+v5+FXqvVsnlhYaE4Eo0cvnTpCydOW+5yWrdhw/oD+fkFEJqeWXJXDodDFolE/vLvq1ev08m55ORkkMvkLxcUFEimF40+bvkYOjo62HdJSQk8vOVh9p2fly/q6+v/QzAYvE+wpsRisbycnZUDZD/q8YA8SQ5qtYYJMdSQtDgvLPyWrH9g4EWplNtEMc2z2qyrZ2dnIRyewcTyQmdnJzz51K9h794nobu7G0ZGRpgsHA6D1WpdgTZFvFeZTFaabrPZF+Qz4Ha74bXXXofhYTc4nTfg6BtHYXJykskikTmyfxDNzFw0EimkU/Mhlkg42LZtKwSD00CbofuibOXlqmQV8Urws3vBsdQhtF+etxzm5ubg2Ftvo6MI7NjRwE7Ly1FX1NMTyOPkSUkKUiAn/DAYjeByuqC19VNYsWIFyOXyuBzvGRQKhSoeZwknj0SicTn9yBVJbJ6UlASRWJRFih9R1MWDiLg0ne5OIDAJKSkpCckQDE1BUVERONY4YCb8VcIEAgFIVipd/BxP0OsP+EEqk7I5hfps81loaHic8ABOHj8J1TXVkJK6sH4Aw45ZPinChy1veueUJzc3Vy10HJ5ZcIYRSdjQzVs3p6q3VlkMBsMUzZ0ul+n8hbaB3JxcGXM8NIQRM4AMo8ThtY16RhAOxOx1zKP89q2b7sYf78qg5Aqr1al/HB4exjBG4xSbj7GwCnkjuAjqvoo2U4K9eJRKxTEvno50bOnpIEaHc3MRmMbNa7Q6JC2TDQ4OEjK+RIgmordKBzt+sukTVC4lyFxqjI+PI6bGOhoe/34lTqd5/sxCZNRo34a5UKjRaJe0p2elUinP1lZXf5eumnfMEvZ085lXh9zuBsw3kVKpBAKgUCjEFjebTccf2bJlN12TcMFFx5Tp+rMftbzpGR19hGwVCiUCUAxfRwgTLRyzZ6Qf/fbmzT8nk7shk8K389H6ukNd3d31Pp+/gJho4EIYbDp34cLle+D0GNL36mtr1l3p6qqZnPxPLpaOWG5O1tXiVcXH29rbbgiVhSf+nw4x/J8Gt+/A8wn1eHEzhEz5FBF6MUhfUCbyNZfGc795NqEecxzHkIowBWkt0jJKIqRrSF20/DfV49qUlNRDaWm6bEoQGqHQNExMjPcj3u7F6d/vcZBdGo1mn1arsyoQvegcWFDI3jk1NfULlDcvVY9/l5WV9ZzRaEpYSaVKAaPRmInF4299fX1UHPYu4ZCO8edly5bv0el0CQJCRLPZnI848eGdOwO/QtYrwjveSk7NZgtrYYgI7sa8Y/E5bSg7O5u6iMeWcLwbkW8PYQCvfzfZbDaR3W4n8KhkJ0bAB6lU9qLVaouvcrG9HaFulBmkYQtTWlbG+LSx8fGJF/x+34nFfoqBT1qafr9eb2ATQkCZVMbsaAwhWimxehFkpqdniHw+30EspevoxEWIu3lSTA6iWawkg3cG4Qc/fAJ27twBHqzFM9Mh4OXYi2WhoYPfJKJVhclk1PPyZKUCmk+fhglEut7bt+H8ufNYSpOZTCaVgj5NT4mXyeHl5KtTU+PVRSvTwqOP1cMs1lRKDCpvKrwnXq7B2orO6K47aS6VSldiQsXlVpsNtm+vgxMnmjDTJdDYuCseGnbnWKX6B/qzOKwiHMd2I4sL1WotuFwuONN8BjZteghSMMF4oCFddBxXxrlEykkT7Cd8fqzTEpZz3rFxwNYIBPpMJraYzX2hUJAVeyHRm9y4cSOsdjiovYnzg6ir0aivfZW1KmdQYN/X18t6tp/sboR6PPmpd06xGs7LQxhF7GbHCDIlb751bKi0tNQkbEspuQgszBZzAsBgm+rbVlVl0Wo1rK3o7x/QII67N6xfr6B5b28vqFPVoEvTMbCg+sxhRKhGx6IxaP9H+217hj2XkiuKz+BgT08PKLDo84QlDFiVEfBoUa1Gc4hquODa/Cg7TLWWdKhVstms7DsJT5iTkwP2TDubX8fmz2K27KeejC8S4nffe78J25hqbEsS/qrwJ73cdYV67Q/qampqFqFQOOQnTjY149+XysLC+/BmE+0pch2fd0I0Gn0b8+GJu6sT99m5c/uwk/glprwMn8hCAR8dBe+odxb/kvzpwcpK+hsz+zVwqfyopeUlfyDQaDaZOYNBzxyOYAMwMT4xjfX8+fKyshf49y+ETEL4p+traw9fvXatyu0ezqONWSzmm5UVFe9/2trqvgdOh5B+ur2u7mD3l19WDQ25cygyGRnp1x+qrPzgQlvbmFD5vwIMAAZsT2nNzBrxAAAAAElFTkSuQmCC) no-repeat scroll 0 0;"].join(""))
                }
                dms.addRule("." + intextCls + "_btn_over", "background-position:0 -24px !important;");
                bbl.preloadImages(skinPath, images)
            },
            showBubble: function(hookId) {
                var rt = this.$root,
                    st = rt.settings,
                    hook = st.hooksMap[hookId],
                    hp = rt.helpers,
                    ed = rt.event.dom,
                    ut = rt.utils,
                    dmel = ut.dom.element,
                    node, rtb = rt.bubble,
                    cls = rtb.settings.cls,
                    b = rt.browser;
                var data = hp.getHookData(hookId);
                var pos = hook.bubble.pos = rt.bubble.adjustBubblePosition(hook, {
                    width: data.width + 2,
                    height: data.height + 41
                });
                if (hook.externalTag) {
                    pos.top += hook.orientationY == "T" ? 80 : -80;
                    var hookWidth = dmel.getActualWidth(hook.node);
                    pos.left += hook.orientationX == "L" ? hookWidth + 20 : -20
                } else {
                    pos.top += hook.orientationY == "T" ? -5 : 5;
                    pos.left += hook.orientationX == "L" ? 30 : 0
                }
                if (hook.bubble.node && hook.bubble.node.parentNode) {
                    var parent = hook.bubble.node.parentNode;
                    parent.removeChild(hook.bubble.node)
                }
                node = hook.bubble.node = ut.dom.createDOMFragment({
                    tag: "div",
                    cls: st.baseClass,
                    parent: document.body,
                    style: {
                        display: "none"
                    },
                    innerHTML: this.renderBubble(data.width, data.height, hook)
                });
                var contentNode = dmel.$([cls, "content", hookId].join("_"));
                if (contentNode) {
                    ed.bind(contentNode, {
                        event: "mouseenter",
                        data: {
                            hookId: hookId
                        },
                        listener: function(event) {
                            rt.event.fire("bubbleMouseover", {
                                hookId: hookId,
                                sender: event.domEvent.currentTarget || event.domEvent.srcElement
                            })
                        }
                    });
                    ed.bind(contentNode, {
                        event: "mouseleave",
                        data: {
                            hookId: hookId
                        },
                        listener: function(event) {
                            rt.event.fire("bubbleMouseout", {
                                hookId: hookId,
                                sender: event.domEvent.currentTarget || event.domEvent.srcElement
                            })
                        }
                    })
                }
                var bodyMain = dmel.$([cls, "body", hookId].join("_"));
                if (bodyMain) {
                    ed.bind(bodyMain, {
                        event: "click",
                        data: {
                            hookId: hookId
                        },
                        listener: rtb.hookClick
                    })
                }
                var logoNode = dmel.$([cls, "logo", hookId].join("_"));
                if (logoNode) {
                    ed.bind(logoNode, {
                        event: "click",
                        data: {
                            hookId: hookId
                        },
                        listener: function(event) {
                            rt.utils.dom.event.stop(event.domEvent);
                            if (st.homeUrl) {
                                window.open(st.homeUrl, "_blank")
                            }
                        }
                    })
                }
                var xBtn = dmel.$([cls, "x", hookId].join("_"));
                if (xBtn) {
                    ed.bind(xBtn, {
                        event: "click",
                        data: {
                            hookId: hookId
                        },
                        listener: function() {
                            rt.event.fire("hideBubble", {
                                hookId: hookId,
                                xBtn: true
                            })
                        }
                    });
                    ed.bind(xBtn, {
                        event: "mouseover",
                        data: {
                            el: xBtn,
                            pos: "-15px -15px"
                        },
                        listener: this.setBackgroundPosition
                    });
                    ed.bind(xBtn, {
                        event: "mouseout",
                        data: {
                            el: xBtn,
                            pos: "-15px 0"
                        },
                        listener: this.setBackgroundPosition
                    })
                }
                var helpBtn = dmel.$([cls, "help", hookId].join("_"));
                if (helpBtn) {
                    ed.bind(helpBtn, {
                        event: "click",
                        listener: function(event) {
                            rt.utils.dom.event.stop(event.domEvent);
                            if (st.helpUrl) {
                                window.open(st.helpUrl, "_blank")
                            }
                        }
                    });
                    ed.bind(helpBtn, {
                        event: "mouseover",
                        data: {
                            el: helpBtn,
                            pos: "0 -15px"
                        },
                        listener: this.setBackgroundPosition
                    });
                    ed.bind(helpBtn, {
                        event: "mouseout",
                        data: {
                            el: helpBtn,
                            pos: "0 0"
                        },
                        listener: this.setBackgroundPosition
                    })
                }
                var btnNode = dmel.$([cls, "btn", hookId].join("_"));
                if (btnNode) {
                    ed.bind(btnNode, {
                        event: "mouseover",
                        listener: function(event) {
                            event.element.className = [st.baseClass, " ", cls, "_btn ", cls, "_btn_over"].join("")
                        }
                    });
                    ed.bind(btnNode, {
                        event: "mouseout",
                        listener: function(event) {
                            event.element.className = [st.baseClass, " ", cls, "_btn "].join("")
                        }
                    })
                }
                rt.bubble.afterBubbleRendered(bodyMain, data, hook);
                hook.bubble.node.style.display = "block";
                rt.event.fire("bubbleShowing", {
                    hookId: hookId
                })
            },
            renderBubble: function(width, height, hook) {
                var rt = this.$root,
                    hookId = hook.id,
                    st = rt.settings,
                    bh = rt.helpers.getHookBehavior(hookId),
                    data = rt.helpers.getHookData(hookId),
                    bst = rt.bubble.settings,
                    skst = this.settings;
                var logo = {
                    url: bh.bubbleLogoUrl || false,
                    width: Math.min(bh.bubbleLogoWidth || 53, 120),
                    height: Math.min(bh.bubbleLogoHeight || 12, 25)
                };
                var html = '<div 	id="<%= intextCls %>_<%= hookId %>" class="<%= cls %>" style="position:absolute; top:<%= hook.bubble.pos.top %>px; left:<%= hook.bubble.pos.left %>px; width:<%= width+2 %>px; height:<%= height+41 %>px; z-index:<%= zIndex+3 %>;">	<%-- Box --%>	<div id="<%= intextCls %>_content_<%= hookId %>" class="<%= cls %>" style="position:absolute; top:<%= oY == \'T\' ? 0 : 8 %>px; left:0; width:<%= width+2 %>px; height:<%= height+33 %>px; box-shadow:0 0 8px 0 rgba(0, 0, 0, 0.25); -moz-box-shadow:0 0 8px 0 rgba(0, 0, 0, 0.25); -webkit-box-shadow:0 0 8px 0 rgba(0, 0, 0, 0.25);">		<%-- Header --%>		<div class="<%= cls %>" style="position:absolute; width:<%= width %>px; height:33px; left:0; <%= oY == \'T\' ? \'bottom\' : \'top\' %>:0; z-index:1; background-color:#f1f1f2; border-<%= oY == \'T\' ? \'bottom\' : \'top\' %>:2px solid <%= themeColor %>; border-left:1px solid #a7a9ab; border-right:1px solid #a7a9ab;">			<% if (bh.favicon){ %><div class="<%= cls %>" style="position:absolute; width:16px; height:16px; left:14px; <%= oY == \'T\' ? \'bottom\' : \'top\' %>:8px; background:url(<%= bh.favicon %>) no-repeat scroll 0 0 transparent;"></div><% } %>			<% if (bh.bubbleLogoUrl){ %>				<div id="<%= intextCls %>_logo_<%= hookId %>" class="<%= cls %>" style="position:absolute; width:<%= bh.bubbleLogoWidth %>px; height:<%= bh.bubbleLogoHeight %>px; right:56px; top:<%= parseInt((33 - bh.bubbleLogoHeight) / 2) %>px; cursor:pointer; font-size:1px; background-image:url(<%= bh.bubbleLogoUrl %>)"></div>			<% } else { %>				<div id="<%= intextCls %>_logo_<%= hookId %>" class="<%= cls %>" style="position:absolute; width:53px; height:12px; right:56px; <%= oY == \'T\' ? \'bottom\' : \'top\' %>:9px; cursor:pointer; font-size:1px; <% if (b.IE || bst.oldFF){ %>background:url(<%= skinPath %>logo.png) no-repeat scroll 0 0 transparent;<% } %>">					<% if (!b.IE && !bst.oldFF){ %>						<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"								 width="53px" height="12px" viewBox="0 0 636 144" enable-background="new 0 0 636 144" xml:space="preserve">							<g>								<!-- dot (first) -->								<path id="<%= intextCls %>_logo_dot_<%= hookId %>_1" fill="<%= bh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M16.918,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.722-10.57-10.57-10.57 S6.334,8.434,6.334,14.282S11.07,24.865,16.918,24.865"/>								<!-- in -->								<path fill="#003366" d="M88.085,43.784H77.024c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.027,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.467c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.015V45.889v-0.025c0-1.124-0.885-2.033-2.01-2.08h-11.49c-1.09,0.047-1.949,0.907-1.986,1.996v46.828h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.511,25.512h1.151c14.031,0,25.511-11.48,25.511-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.159-17.948,18.031-17.948h6.366c9.871,0,17.948,8.076,18.042,17.948v28.89v4.62v28.873 c0.013,0.023,0.013,0.034,0.013,0.048c0,1.111,0.883,2.008,1.983,2.057h11.505c1.077-0.036,1.936-0.887,1.985-1.973v-27.966v-5.659 V74.966C119.267,57.815,105.234,43.784,88.085,43.784"/>								<!-- f (part) -->								<path fill="#003366" d="M155.069,56.972v82.643c-0.072,0.992-0.886,1.78-1.903,1.818h-11.014 c-1.062-0.038-1.912-0.897-1.912-1.962c0-0.024,0-0.048-0.023-0.073V34.456c0.716-17.064,14.923-30.744,32.179-30.744h8.536 c0.025,0,0.038,0.011,0.06,0.011c1.053,0,1.915,0.849,1.974,1.901v11.037c-0.035,1.016-0.85,1.844-1.878,1.889h-8.692 c-9.509,0-17.327,7.75-17.327,17.268v6.301V56.972z"/>								<!-- f (part) -->								<path fill="#003366" d="M151.99,59.104h28.873c0.023-0.012,0.034-0.012,0.047-0.012 c1.111,0,2.008-0.884,2.057-1.984V45.604c-0.036-1.078-0.887-1.938-1.973-1.986h-27.965"/>								<!-- o -->								<path fill="#003366" d="M276.24,107.925h0.158V76.608c-0.37-18.164-15.248-32.825-33.494-32.825 h-16.756v0.022c-17.875,0.431-32.322,14.924-32.679,32.803h-0.026v31.316c0,18.213,14.601,33.064,32.705,33.496v0.012h16.589h0.021 h0.146C261.304,141.349,276.24,126.354,276.24,107.925 M208.93,107.925L208.93,107.925V77.289c0-9.914,8.096-18.02,18.021-18.02 h15.953c9.946,0,18.02,8.106,18.02,18.02v30.636h-0.167c0,9.949-8.074,18.021-17.999,18.021h-15.807 C217.026,125.946,208.93,117.874,208.93,107.925"/>								<!-- l -->								<path fill="#003366" d="M312.844,139.376L312.844,139.376c0,1.064-0.798,1.938-1.829,2.045h-11.816 c-1.027-0.107-1.837-0.98-1.837-2.045h-0.013V5.769h0.013c0-1.135,0.908-2.033,2.031-2.057h11.432 c1.124,0.024,2.019,0.922,2.019,2.057V139.376z"/>								<!-- dot (second) -->								<path id="<%= intextCls %>_logo_dot_<%= hookId %>_2" fill="<%= bh.theme == \'def\' ? \'#208CE5\' : themeColor %>" d="M341.662,24.865c5.848,0,10.57-4.735,10.57-10.583s-4.723-10.57-10.57-10.57 s-10.584,4.722-10.584,10.57S335.814,24.865,341.662,24.865"/>								<!-- in (second) -->								<path fill="#003366" d="M412.829,43.784h-11.061c-17.149,0-31.181,14.031-31.181,31.182v34.796 c0,0.218,0.016,0.415,0.026,0.618v5.185c0,5.71-4.672,10.382-10.382,10.382h-0.468c-5.71,0-10.382-4.672-10.382-10.382V92.608 h0.016V45.723v-0.025c0-1.123-0.885-2.033-2.01-2.08h-11.49c-1.091,0.047-1.949,0.908-1.986,1.996v46.994h0.04 c-0.015,0.355-0.04,0.707-0.04,1.066v22.246c0,14.031,11.479,25.512,25.512,25.512h1.15c14.031,0,25.512-11.48,25.512-25.512 v-5.466v-4.62v-28.89c0.082-9.872,8.158-17.948,18.029-17.948h6.367c9.871,0,17.947,8.076,18.041,17.948v28.89v4.62v28.873 c0.014,0.023,0.014,0.034,0.014,0.048c0,1.111,0.883,2.008,1.982,2.057h11.506c1.076-0.036,1.936-0.887,1.984-1.973v-27.966v-5.659 V74.966C444.01,57.815,429.979,43.784,412.829,43.784"/>								<!-- k -->								<path fill="#003366" d="M480.277,139.376L480.277,139.376V91.735h0.146h9.255l40.656,48.766 c0.599,0.549,1.15,0.906,1.841,0.932h16.073c0.882-0.025,2.869-0.322,1.794-2.056l-0.013-0.024l-47.58-56.777l44.599-36.815 c0.015-0.049,0.015-0.049,0.036-0.073c1.066-1.734-0.886-2.032-1.78-2.069H527.08c-0.621,0.024-1.15,0.324-1.666,0.791 l-36.812,31.075h-8.325V5.769c0-1.135-0.896-2.033-2.02-2.057h-11.422c-1.124,0.024-2.033,0.922-2.033,2.057v133.607 c0,1.064,0.803,1.938,1.844,2.045h11.802C479.476,141.313,480.277,140.44,480.277,139.376"/>								<!-- s -->								<path fill="#003366" d="M603.208,84.782H577.99c-6.91-0.114-12.508-5.785-12.508-12.783 c0-6.996,5.598-12.895,12.508-12.895h39.271c1.146,0,2.08-0.959,2.08-2.111v0.191V45.752v-0.037c0-1.164-0.935-2.097-2.08-2.097 H577.99c-15.451,0-28.008,12.73-28.008,28.381c0,15.651,12.557,28.381,28.008,28.27h24.252c6.911,0.111,12.508,5.812,12.508,12.795 c0,6.996-5.597,12.896-12.508,12.896H591.56l0.001-0.014h-28.874c-0.022,0.014-0.034,0.014-0.047,0.014 c-1.11,0-2.007,0.896-2.056,2.01v11.449c0.035,1.092,0.886,1.963,1.973,2.014h0.225h27.74h12.224 c15.209-0.279,27.491-12.9,27.491-28.369C630.236,97.737,618.191,85.202,603.208,84.782"/>							</g>						</svg>					<% } %>				</div>			<% } %>			<div class="<%= cls %> <%= intextCls %>_bg" id="<%= intextCls %>_help_<%= hookId %>" style="position:absolute; width:15px; height:15px; right:29px; <%= oY == \'T\' ? \'bottom\' : \'top\' %>:7px; display:block; background-position:0 0; cursor:pointer; font-size:1px;"></div>			<div class="<%= cls %> <%= intextCls %>_bg" id="<%= intextCls %>_x_<%= hookId %>" style="position:absolute; width:15px; height:15px; right:13px; <%= oY == \'T\' ? \'bottom\' : \'top\' %>:7px; background-position:-15px 0; cursor:pointer; font-size:1px;"></div>		</div>		<%-- Body --%>		<div id="<%= intextCls %>_body_<%= hookId %>" class="<%= cls %> <%= intextCls %>_bodyMain" style="position:absolute; <%= oY == \'T\' ? \'top\' : \'bottom\' %>:0px; left:0; width:<%= width %>px; height:<%= height %>px; z-index:2; background-color:#ffffff; cursor: pointer; border-<%= oY == \'T\' ? \'top\' : \'bottom\' %>:1px solid #a7a9ab; border-left:1px solid #a7a9ab; border-right:1px solid #a7a9ab;">			<%= rt.bubble.renderAdsContent(hook, data) %>		</div>	</div>	<% if (!hook.externalTag){ %>		<%-- Tail --%>		<div class="<%= cls %>" style="position:absolute; <%= oY == \'T\' ? \'bottom\' : \'top\' %>:0; <%= oX == \'L\' ? \'right\' : \'left\' %>:15px; width:15px; height:8px; font-size:1px; <% if (b.IE || bst.oldFF){ %>background:url(<%= skinPath %>tail.png) no-repeat scroll <%= tailBgLeft %>px <%= tailBgTop %>px transparent;<% } %>">			<% if (!b.IE && !bst.oldFF){ %>				<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="15px" height="8px" viewBox="0 0 30 16" preserveAspectRatio="xMidYMid meet" style="position:absolute; font-size:1px;">					<g transform="translate(0,16) scale(0.1,-0.1)" fill="<%= themeColor %>" stroke="none">						<% if (oY == \'T\'){ %>							<path d="M37 138 c11 -13 30 -42 42 -65 22 -44 54 -73 81 -73 20 0 52 34 75 80 10 19 27 45 38 57 l20 23 -138 0 -138 0 20 -22z"/>						<% } else { %>							<path d="M109 143 c-9 -10 -31 -43 -49 -73 -18 -30 -38 -58 -44 -62 -6 -4 51 -8 126 -8 l137 0 -22 36 c-73 118 -114 147 -148 107z"/>						<% } %>					</g>				</svg>			<% } %>		</div>	<% } %></div>';
                return rt.utils.VeST(html, {
                    rt: rt,
                    st: st,
                    bh: bh,
                    b: rt.browser,
                    hookId: hookId,
                    hook: hook,
                    data: data,
                    intextCls: bst.cls,
                    cls: st.baseClass,
                    bst: bst,
                    width: width,
                    height: height,
                    oX: hook.orientationX,
                    oY: hook.orientationY,
                    zIndex: st.baseZIndex + 100,
                    logo: logo,
                    themeColor: rt.products[hook.type].settings.themes.color[bh.theme],
                    skinPath: rt.bubble.getSkinPath(this.$id),
                    tailBgLeft: skst.tailMap[bh.theme],
                    tailBgTop: hook.orientationY == "T" ? -8 : 0
                }, hookId + "brand", true)
            },
            setBackgroundPosition: function(event) {
                event.data.el.style.backgroundPosition = event.data.pos
            }
        }, {
            settings: {
                rv: 1,
                tailMap: {
                    def: 0,
                    lightBlue: -15,
                    green: -30,
                    orange: -45,
                    red: -60,
                    pink: -75,
                    purple: -90
                }
            }
        }, true);
        skins.brand.bind({
            event: "brandBubbleMouseover",
            listener: {
                bubleMouseover: function(event) {
                    var boxShadow = this.$root.utils.dom.style.supports("boxShadow");
                    if (boxShadow) {
                        event.data.sender.style[boxShadow] = "0 0 8px 0 rgba(0, 0, 0, 0.5)"
                    }
                }
            }
        });
        skins.brand.bind({
            event: "brandBubbleMouseout",
            listener: {
                bubleMouseout: function(event) {
                    var boxShadow = this.$root.utils.dom.style.supports("boxShadow");
                    if (boxShadow) {
                        event.data.sender.style[boxShadow] = "0 0 8px 0 rgba(0, 0, 0, 0.25)"
                    }
                }
            }
        });
        skins.$create("less", {
            init: function() {
                var rtb = this.$root.bubble,
                    skinPath = rtb.getSkinPath(this.$id);
                rtb.preloadImages(skinPath, "x")
            },
            showBubble: function(hookId) {
                var rt = this.$root,
                    ut = rt.utils,
                    dmel = ut.dom.element,
                    st = rt.settings,
                    hook = st.hooksMap[hookId],
                    data = rt.helpers.getHookData(hookId),
                    cls = rt.bubble.settings.cls,
                    ed = rt.event.dom;
                var pos = hook.bubble.pos = rt.bubble.adjustBubblePosition(hook, {
                    width: data.width + 11,
                    height: data.height + 22
                });
                if (hook.externalTag) {
                    pos.top += hook.orientationY == "T" ? 60 : -60;
                    var hookWidth = dmel.getActualWidth(hook.node);
                    pos.left += hook.orientationX == "L" ? hookWidth + 20 : -20
                }
                if (hook.bubble.node && hook.bubble.node.parentNode) {
                    var parent = hook.bubble.node.parentNode;
                    parent.removeChild(hook.bubble.node)
                }
                hook.bubble.node = ut.dom.createDOMFragment({
                    tag: "div",
                    cls: st.baseClass,
                    parent: document.body,
                    style: {
                        display: "none"
                    },
                    innerHTML: this.renderBubble(data.width, data.height, hook)
                });
                var bubbleNode = ut.dom.element.$([cls, "content", hookId].join("_"));
                if (bubbleNode) {
                    ed.bind(bubbleNode, {
                        event: "mouseenter",
                        data: {
                            hookId: hookId
                        },
                        listener: function(event) {
                            rt.event.fire("bubbleMouseover", {
                                hookId: hookId,
                                sender: event.domEvent.currentTarget || event.domEvent.srcElement
                            })
                        }
                    });
                    ed.bind(bubbleNode, {
                        event: "mouseleave",
                        data: {
                            hookId: hookId
                        },
                        listener: function(event) {
                            rt.event.fire("bubbleMouseout", {
                                hookId: hookId,
                                sender: event.domEvent.currentTarget || event.domEvent.srcElement
                            })
                        }
                    })
                }
                var bodyMain = ut.dom.element.$([cls, "body", hookId].join("_"));
                if (bodyMain) {
                    ed.bind(bodyMain, {
                        event: "click",
                        data: {
                            hookId: hookId
                        },
                        listener: rt.bubble.hookClick
                    })
                }
                var xNode = ut.dom.element.$([cls, "x", hookId].join("_"));
                if (xNode) {
                    ed.bind(xNode, {
                        event: "click",
                        data: {
                            hookId: hookId
                        },
                        listener: function() {
                            rt.event.fire("hideBubble", {
                                hookId: hookId,
                                xBtn: true
                            })
                        }
                    })
                }
                rt.bubble.afterBubbleRendered(bodyMain, data, hook);
                hook.bubble.node.style.display = "block";
                rt.event.fire("bubbleShowing", {
                    hookId: hookId
                })
            },
            renderBubble: function(width, height, hook) {
                var rt = this.$root,
                    st = rt.settings,
                    bst = rt.bubble.settings,
                    cls = st.baseClass,
                    hookId = hook.id,
                    b = rt.browser,
                    skinPath = rt.bubble.getSkinPath(this.$id),
                    data = rt.helpers.getHookData(hookId);
                var html = '<div 			id="<%= intextCls %>_<%= hookId %>" class="<%= cls %>" style="<%= abs %> width:<%= width+11 %>px; height:<%= height+22 %>px; top:<%= hook.bubble.pos.top %>px; left:<%= hook.bubble.pos.left %>px; z-index:<%= zIndex+3 %>;">				<% if (!hook.externalTag){ %>				<div class="<%= cls %> <%= intextCls %>_head" style="width:100%; height:22px; <%= abs %> left:0; z-index:<%= zIndex+4 %>; <%= (oY == \'T\') ? \'bottom:0;\' : \'top:0;\' %>" >					<div id="<%= intextCls %>_x_<%= hookId %>" class="<%= cls %> <%= intextCls %>_x" style="<%= abs %> width:22px; height:22px; background:transparent url(<%= skinPath %>x.png) no-repeat scroll 0 0; cursor:pointer; top:<%= (oY == \'T\') ? \'2px\' : 0 %>; <%= (oX == \'L\') ? \'right:0\' : \'left:0\' %>;"></div>				</div>				<% } %>				<div id="<%= intextCls %>_content_<%= hookId %>" class="<%= cls %> <%= intextCls %>_body" style="<%= abs%> width:<%= width %>px; height:<%= height %>px; zindex:<%= zIndex+3 %>; top:<%= (oY == \'T\') ? 0 : \'22px\' %>; <%= (oX == \'L\') ?  \'left:0\' : \'left:11px;\' %>; ">					<div id="<%= intextCls %>_body_<%= hookId %>" class="<%= cls %> <%= intextCls %>_bodyMain" style="<%= abs %> top:0; left:0; width:<%= width %>px; height:<%= height %>px; cursor:pointer; color:#000000;">						<%= rt.bubble.renderAdsContent(hook, data) %>					</div>				</div>			</div>';
                return rt.utils.VeST(html, {
                    rt: rt,
                    hookId: hookId,
                    hook: hook,
                    data: data,
                    intextCls: bst.cls,
                    cls: st.baseClass,
                    width: width,
                    height: height,
                    oX: hook.orientationX,
                    oY: hook.orientationY,
                    abs: "position:absolute;",
                    zIndex: st.baseZIndex + 100,
                    skinPath: skinPath
                }, hookId + "less", true)
            }
        }, {
            settings: {}
        }, true);
        event.fire("main")
    } catch (ex) {
        if (typeof $root == "object" && $root.logger && $root.logger.error) {
            $root.logger.error("CatchAll. Exception: " + ex.message, window)
        }
    }
})()

#2 JavaScript::Eval (size: 1597, repeated: 1)

(function() {
    var T = navigator.userAgent,
        P = function(a) {
            for (var b = 0, Z = a.length; b < Z; b++) {
                if (T.indexOf(a[b]) != -1) {
                    return true
                }
            }
            return false
        },
        C = P(["iPhone", "iPad", "Android", "Windows Phone OS", "Opera Mini", "UCWEB"]) ? "mobile" : "",
        O = "ice" + C + ".js",
        E = window["infolinks_white_label"];

    function J(Z) {
        return window[E + "_" + Z] || window["infolinks_" + Z] || window["infolink_" + Z] || null
    }
    var W = window["$iceboot"] = {};
    window["INFOLINKS"] = {
        _boot: W
    };
    var L = W.versions = {
        "311.0.9": 50,
        "310.3.1e": 50
    };
    var A = W.siteVersions = {};
    var B = 0,
        K, F, M, N = location.hostname;
    K = location.search.match(/[\?&]il\.sv=([^&]+)/);
    if (K) {
        W.version = K[1]
    } else {
        for (F in L) {
            M = L[F];
            L[F] = {
                weight: M,
                from: B,
                to: B + M
            };
            B += M
        }
        W.rand = Math.ceil((Math.random() * B));
        for (F in L) {
            if (W.rand > L[F].from && W.rand <= L[F].to) {
                W.version = F;
                break
            }
        }
    }
    for (F in A) {
        for (S = 0, D = A[F].length; S < D; S++) {
            if (N.indexOf(A[F][S]) > -1) {
                W.version = F;
                break
            }
        }
    }
    var Y = ["/", W.version, "/", O].join("");
    var U = J("resources");
    K = location.search.match(/[\?&]il\.su=([^&]+)/);
    if (K) {
        W.url = K[1] + Y
    } else {
        if (U) {
            if (!/^http:\/\//.test(U)) {
                U = "http://" + U
            }
            W.url = U + Y
        } else {
            var Q = document.getElementsByTagName("script"),
                G, S, D;
            var R = /\/infolinks_main\.js$/;
            for (S = 0, D = Q.length; S < D; S++) {
                G = Q[S].src;
                if (G && G.match(R) != null) {
                    W.url = G.replace(R, Y);
                    break
                }
            }
        }
    }
    W.tmr_scr = new Date().getTime();
    if (W.url) {
        var V = J("ddw"),
            I = J("async");
        if (V || I) {
            var X = document.createElement("script");
            X.type = "text/javascript";
            X.charset = "UTF-8";
            X.src = W.url;
            if (I) {
                X.async = "async";
                X.defer = "defer"
            }
            var H = document.getElementsByTagName("head");
            if (H && H.length) {
                H[0].appendChild(X)
            }
        } else {
            document.write(['<script type="text/javascript" src="', W.url, '"><\/script>'].join(""))
        }
    }
})()

#3 JavaScript::Eval (size: 45922, repeated: 1)

(function() {
    var w = window.jQuery,
        _$ = window.$;
    var D = window.jQuery = window.$ = function(a, b) {
            return new D.fn.init(a, b)
        };
    var u = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
        isSimple = /^.[^:#\[\.]*$/,
        undefined;
    D.fn = D.prototype = {
        init: function(d, b) {
            d = d || document;
            if (d.nodeType) {
                this[0] = d;
                this.length = 1;
                return this
            }
            if (typeof d == "string") {
                var c = u.exec(d);
                if (c && (c[1] || !b)) {
                    if (c[1]) d = D.clean([c[1]], b);
                    else {
                        var a = document.getElementById(c[3]);
                        if (a) {
                            if (a.id != c[3]) return D().find(d);
                            return D(a)
                        }
                        d = []
                    }
                } else return D(b).find(d)
            } else if (D.isFunction(d)) return D(document)[D.fn.ready ? "ready" : "load"](d);
            return this.setArray(D.makeArray(d))
        },
        jquery: "1.2.6",
        size: function() {
            return this.length
        },
        length: 0,
        get: function(a) {
            return a == undefined ? D.makeArray(this) : this[a]
        },
        pushStack: function(b) {
            var a = D(b);
            a.prevObject = this;
            return a
        },
        setArray: function(a) {
            this.length = 0;
            Array.prototype.push.apply(this, a);
            return this
        },
        each: function(a, b) {
            return D.each(this, a, b)
        },
        index: function(b) {
            var a = -1;
            return D.inArray(b && b.jquery ? b[0] : b, this)
        },
        attr: function(c, a, b) {
            var d = c;
            if (c.constructor == String) if (a === undefined) return this[0] && D[b || "attr"](this[0], c);
            else {
                d = {};
                d[c] = a
            }
            return this.each(function(i) {
                for (c in d) D.attr(b ? this.style : this, c, D.prop(this, d[c], b, i, c))
            })
        },
        css: function(b, a) {
            if ((b == 'width' || b == 'height') && parseFloat(a) < 0) a = undefined;
            return this.attr(b, a, "curCSS")
        },
        text: function(b) {
            if (typeof b != "object" && b != null) return this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(b));
            var a = "";
            D.each(b || this, function() {
                D.each(this.childNodes, function() {
                    if (this.nodeType != 8) a += this.nodeType != 1 ? this.nodeValue : D.fn.text([this])
                })
            });
            return a
        },
        wrapAll: function(b) {
            if (this[0]) D(b, this[0].ownerDocument).clone().insertBefore(this[0]).map(function() {
                var a = this;
                while (a.firstChild) a = a.firstChild;
                return a
            }).append(this);
            return this
        },
        wrapInner: function(a) {
            return this.each(function() {
                D(this).contents().wrapAll(a)
            })
        },
        wrap: function(a) {
            return this.each(function() {
                D(this).wrapAll(a)
            })
        },
        append: function() {
            return this.domManip(arguments, true, false, function(a) {
                if (this.nodeType == 1) this.appendChild(a)
            })
        },
        prepend: function() {
            return this.domManip(arguments, true, true, function(a) {
                if (this.nodeType == 1) this.insertBefore(a, this.firstChild)
            })
        },
        before: function() {
            return this.domManip(arguments, false, false, function(a) {
                this.parentNode.insertBefore(a, this)
            })
        },
        after: function() {
            return this.domManip(arguments, false, true, function(a) {
                this.parentNode.insertBefore(a, this.nextSibling)
            })
        },
        end: function() {
            return this.prevObject || D([])
        },
        find: function(b) {
            var c = D.map(this, function(a) {
                return D.find(b, a)
            });
            return this.pushStack(/[^+>] [^+>]/.test(b) || b.indexOf("..") > -1 ? D.unique(c) : c)
        },
        clone: function(e) {
            var f = this.map(function() {
                if (D.browser.msie && !D.isXMLDoc(this)) {
                    var a = this.cloneNode(true),
                        container = document.createElement("div");
                    container.appendChild(a);
                    return D.clean([container.innerHTML])[0]
                } else return this.cloneNode(true)
            });
            var d = f.find("*").andSelf().each(function() {
                if (this[E] != undefined) this[E] = null
            });
            if (e === true) this.find("*").andSelf().each(function(i) {
                if (this.nodeType == 3) return;
                var c = D.data(this, "events");
                for (var a in c) for (var b in c[a]) D.event.add(d[i], a, c[a][b], c[a][b].data)
            });
            return f
        },
        filter: function(b) {
            return this.pushStack(D.isFunction(b) && D.grep(this, function(a, i) {
                return b.call(a, i)
            }) || D.multiFilter(b, this))
        },
        not: function(b) {
            if (b.constructor == String) if (isSimple.test(b)) return this.pushStack(D.multiFilter(b, this, true));
            else b = D.multiFilter(b, this);
            var a = b.length && b[b.length - 1] !== undefined && !b.nodeType;
            return this.filter(function() {
                return a ? D.inArray(this, b) < 0 : this != b
            })
        },
        add: function(a) {
            return this.pushStack(D.unique(D.merge(this.get(), typeof a == 'string' ? D(a) : D.makeArray(a))))
        },
        is: function(a) {
            return !!a && D.multiFilter(a, this).length > 0
        },
        hasClass: function(a) {
            return this.is("." + a)
        },
        val: function(b) {
            if (b == undefined) {
                if (this.length) {
                    var c = this[0];
                    if (D.nodeName(c, "select")) {
                        var e = c.selectedIndex,
                            values = [],
                            options = c.options,
                            one = c.type == "select-one";
                        if (e < 0) return null;
                        for (var i = one ? e : 0, max = one ? e + 1 : options.length; i < max; i++) {
                            var d = options[i];
                            if (d.selected) {
                                b = D.browser.msie && !d.attributes.value.specified ? d.text : d.value;
                                if (one) return b;
                                values.push(b)
                            }
                        }
                        return values
                    } else return (this[0].value || "").replace(/\r/g, "")
                }
                return undefined
            }
            if (b.constructor == Number) b += '';
            return this.each(function() {
                if (this.nodeType != 1) return;
                if (b.constructor == Array && /radio|checkbox/.test(this.type)) this.checked = (D.inArray(this.value, b) >= 0 || D.inArray(this.name, b) >= 0);
                else if (D.nodeName(this, "select")) {
                    var a = D.makeArray(b);
                    D("option", this).each(function() {
                        this.selected = (D.inArray(this.value, a) >= 0 || D.inArray(this.text, a) >= 0)
                    });
                    if (!a.length) this.selectedIndex = -1
                } else this.value = b
            })
        },
        html: function(a) {
            return a == undefined ? (this[0] ? this[0].innerHTML : null) : this.empty().append(a)
        },
        replaceWith: function(a) {
            return this.after(a).remove()
        },
        eq: function(i) {
            return this.slice(i, i + 1)
        },
        slice: function() {
            return this.pushStack(Array.prototype.slice.apply(this, arguments))
        },
        map: function(b) {
            return this.pushStack(D.map(this, function(a, i) {
                return b.call(a, i, a)
            }))
        },
        andSelf: function() {
            return this.add(this.prevObject)
        },
        data: function(d, b) {
            var a = d.split(".");
            a[1] = a[1] ? "." + a[1] : "";
            if (b === undefined) {
                var c = this.triggerHandler("getData" + a[1] + "!", [a[0]]);
                if (c === undefined && this.length) c = D.data(this[0], d);
                return c === undefined && a[1] ? this.data(a[0]) : c
            } else return this.trigger("setData" + a[1] + "!", [a[0], b]).each(function() {
                D.data(this, d, b)
            })
        },
        removeData: function(a) {
            return this.each(function() {
                D.removeData(this, a)
            })
        },
        domManip: function(g, f, h, d) {
            var e = this.length > 1,
                elems;
            return this.each(function() {
                if (!elems) {
                    elems = D.clean(g, this.ownerDocument);
                    if (h) elems.reverse()
                }
                var b = this;
                if (f && D.nodeName(this, "table") && D.nodeName(elems[0], "tr")) b = this.getElementsByTagName("tbody")[0] || this.appendChild(this.ownerDocument.createElement("tbody"));
                var c = D([]);
                D.each(elems, function() {
                    var a = e ? D(this).clone(true)[0] : this;
                    if (D.nodeName(a, "script")) c = c.add(a);
                    else {
                        if (a.nodeType == 1) c = c.add(D("script", a).remove());
                        d.call(b, a)
                    }
                });
                c.each(evalScript)
            })
        }
    };
    D.fn.init.prototype = D.fn;

    function evalScript(i, a) {
        if (a.src) D.ajax({
            url: a.src,
            async: false,
            dataType: "script"
        });
        else D.globalEval(a.text || a.textContent || a.innerHTML || "");
        if (a.parentNode) a.parentNode.removeChild(a)
    }
    function now() {
        return +new Date
    }
    D.extend = D.fn.extend = function() {
        var b = arguments[0] || {},
            i = 1,
            length = arguments.length,
            deep = false,
            options;
        if (b.constructor == Boolean) {
            deep = b;
            b = arguments[1] || {};
            i = 2
        }
        if (typeof b != "object" && typeof b != "function") b = {};
        if (length == i) {
            b = this;
            --i
        }
        for (; i < length; i++) if ((options = arguments[i]) != null) for (var c in options) {
            var a = b[c],
                copy = options[c];
            if (b === copy) continue;
            if (deep && copy && typeof copy == "object" && !copy.nodeType) b[c] = D.extend(deep, a || (copy.length != null ? [] : {}), copy);
            else if (copy !== undefined) b[c] = copy
        }
        return b
    };
    var E = "jQuery" + now(),
        uuid = 0,
        windowData = {},
        exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
        defaultView = document.defaultView || {};
    D.extend({
        noConflict: function(a) {
            window.$ = _$;
            if (a) window.jQuery = w;
            return D
        },
        isFunction: function(a) {
            return !!a && typeof a != "string" && !a.nodeName && a.constructor != Array && /^[\s[]?function/.test(a + "")
        },
        isXMLDoc: function(a) {
            return a.documentElement && !a.body || a.tagName && a.ownerDocument && !a.ownerDocument.body
        },
        globalEval: function(a) {
            a = D.trim(a);
            if (a) {
                var b = document.getElementsByTagName("head")[0] || document.documentElement,
                    script = document.createElement("script");
                script.type = "text/javascript";
                if (D.browser.msie) script.text = a;
                else script.appendChild(document.createTextNode(a));
                b.insertBefore(script, b.firstChild);
                b.removeChild(script)
            }
        },
        nodeName: function(b, a) {
            return b.nodeName && b.nodeName.toUpperCase() == a.toUpperCase()
        },
        cache: {},
        data: function(c, d, b) {
            c = c == window ? windowData : c;
            var a = c[E];
            if (!a) a = c[E] = ++uuid;
            if (d && !D.cache[a]) D.cache[a] = {};
            if (b !== undefined) D.cache[a][d] = b;
            return d ? D.cache[a][d] : a
        },
        removeData: function(c, b) {
            c = c == window ? windowData : c;
            var a = c[E];
            if (b) {
                if (D.cache[a]) {
                    delete D.cache[a][b];
                    b = "";
                    for (b in D.cache[a]) break;
                    if (!b) D.removeData(c)
                }
            } else {
                try {
                    delete c[E]
                } catch (e) {
                    if (c.removeAttribute) c.removeAttribute(E)
                }
                delete D.cache[a]
            }
        },
        each: function(d, a, c) {
            var e, i = 0,
                length = d.length;
            if (c) {
                if (length == undefined) {
                    for (e in d) if (a.apply(d[e], c) === false) break
                } else for (; i < length;) if (a.apply(d[i++], c) === false) break
            } else {
                if (length == undefined) {
                    for (e in d) if (a.call(d[e], e, d[e]) === false) break
                } else for (var b = d[0]; i < length && a.call(b, i, b) !== false; b = d[++i]) {}
            }
            return d
        },
        prop: function(b, a, c, i, d) {
            if (D.isFunction(a)) a = a.call(b, i);
            return a && a.constructor == Number && c == "curCSS" && !exclude.test(d) ? a + "px" : a
        },
        className: {
            add: function(c, b) {
                D.each((b || "").split(/\s+/), function(i, a) {
                    if (c.nodeType == 1 && !D.className.has(c.className, a)) c.className += (c.className ? " " : "") + a
                })
            },
            remove: function(c, b) {
                if (c.nodeType == 1) c.className = b != undefined ? D.grep(c.className.split(/\s+/), function(a) {
                    return !D.className.has(b, a)
                }).join(" ") : ""
            },
            has: function(b, a) {
                return D.inArray(a, (b.className || b).toString().split(/\s+/)) > -1
            }
        },
        swap: function(b, c, a) {
            var e = {};
            for (var d in c) {
                e[d] = b.style[d];
                b.style[d] = c[d]
            }
            a.call(b);
            for (var d in c) b.style[d] = e[d]
        },
        css: function(d, e, c) {
            if (e == "width" || e == "height") {
                var b, props = {
                    position: "absolute",
                    visibility: "hidden",
                    display: "block"
                },
                    which = e == "width" ? ["Left", "Right"] : ["Top", "Bottom"];

                function getWH() {
                    b = e == "width" ? d.offsetWidth : d.offsetHeight;
                    var a = 0,
                        border = 0;
                    D.each(which, function() {
                        a += parseFloat(D.curCSS(d, "padding" + this, true)) || 0;
                        border += parseFloat(D.curCSS(d, "border" + this + "Width", true)) || 0
                    });
                    b -= Math.round(a + border)
                }
                if (D(d).is(":visible")) getWH();
                else D.swap(d, props, getWH);
                return Math.max(0, b)
            }
            return D.curCSS(d, e, c)
        },
        curCSS: function(f, l, k) {
            var e, style = f.style;

            function color(b) {
                if (!D.browser.safari) return false;
                var a = defaultView.getComputedStyle(b, null);
                return !a || a.getPropertyValue("color") == ""
            }
            if (l == "opacity" && D.browser.msie) {
                e = D.attr(style, "opacity");
                return e == "" ? "1" : e
            }
            if (D.browser.opera && l == "display") {
                var d = style.outline;
                style.outline = "0 solid black";
                style.outline = d
            }
            if (l.match(/float/i)) l = y;
            if (!k && style && style[l]) e = style[l];
            else if (defaultView.getComputedStyle) {
                if (l.match(/float/i)) l = "float";
                l = l.replace(/([A-Z])/g, "-$1").toLowerCase();
                var c = defaultView.getComputedStyle(f, null);
                if (c && !color(f)) e = c.getPropertyValue(l);
                else {
                    var g = [],
                        stack = [],
                        a = f,
                        i = 0;
                    for (; a && color(a); a = a.parentNode) stack.unshift(a);
                    for (; i < stack.length; i++) if (color(stack[i])) {
                        g[i] = stack[i].style.display;
                        stack[i].style.display = "block"
                    }
                    e = l == "display" && g[stack.length - 1] != null ? "none" : (c && c.getPropertyValue(l)) || "";
                    for (i = 0; i < g.length; i++) if (g[i] != null) stack[i].style.display = g[i]
                }
                if (l == "opacity" && e == "") e = "1"
            } else if (f.currentStyle) {
                var h = l.replace(/\-(\w)/g, function(a, b) {
                    return b.toUpperCase()
                });
                e = f.currentStyle[l] || f.currentStyle[h];
                if (!/^\d+(px)?$/i.test(e) && /^\d/.test(e)) {
                    var j = style.left,
                        rsLeft = f.runtimeStyle.left;
                    f.runtimeStyle.left = f.currentStyle.left;
                    style.left = e || 0;
                    e = style.pixelLeft + "px";
                    style.left = j;
                    f.runtimeStyle.left = rsLeft
                }
            }
            return e
        },
        clean: function(l, h) {
            var k = [];
            h = h || document;
            if (typeof h.createElement == 'undefined') h = h.ownerDocument || h[0] && h[0].ownerDocument || document;
            D.each(l, function(i, d) {
                if (!d) return;
                if (d.constructor == Number) d += '';
                if (typeof d == "string") {
                    d = d.replace(/(<(\w+)[^>]*?)\/>/g, function(b, a, c) {
                        return c.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? b : a + "></" + c + ">"
                    });
                    var f = D.trim(d).toLowerCase(),
                        div = h.createElement("div");
                    var e = !f.indexOf("<opt") && [1, "<select multiple='multiple'>", "</select>"] || !f.indexOf("<leg") && [1, "<fieldset>", "</fieldset>"] || f.match(/^<(thead|tbody|tfoot|colg|cap)/) && [1, "<table>", "</table>"] || !f.indexOf("<tr") && [2, "<table><tbody>", "</tbody></table>"] || (!f.indexOf("<td") || !f.indexOf("<th")) && [3, "<table><tbody><tr>", "</tr></tbody></table>"] || !f.indexOf("<col") && [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"] || D.browser.msie && [1, "div<div>", "</div>"] || [0, "", ""];
                    div.innerHTML = e[1] + d + e[2];
                    while (e[0]--) div = div.lastChild;
                    if (D.browser.msie) {
                        var g = !f.indexOf("<table") && f.indexOf("<tbody") < 0 ? div.firstChild && div.firstChild.childNodes : e[1] == "<table>" && f.indexOf("<tbody") < 0 ? div.childNodes : [];
                        for (var j = g.length - 1; j >= 0; --j) if (D.nodeName(g[j], "tbody") && !g[j].childNodes.length) g[j].parentNode.removeChild(g[j]);
                        if (/^\s/.test(d)) div.insertBefore(h.createTextNode(d.match(/^\s*/)[0]), div.firstChild)
                    }
                    d = D.makeArray(div.childNodes)
                }
                if (d.length === 0 && (!D.nodeName(d, "form") && !D.nodeName(d, "select"))) return;
                if (d[0] == undefined || D.nodeName(d, "form") || d.options) k.push(d);
                else k = D.merge(k, d)
            });
            return k
        },
        attr: function(d, f, c) {
            if (!d || d.nodeType == 3 || d.nodeType == 8) return undefined;
            var e = !D.isXMLDoc(d),
                set = c !== undefined,
                msie = D.browser.msie;
            f = e && D.props[f] || f;
            if (d.tagName) {
                var g = /href|src|style/.test(f);
                if (f == "selected" && D.browser.safari) d.parentNode.selectedIndex;
                if (f in d && e && !g) {
                    if (set) {
                        if (f == "type" && D.nodeName(d, "input") && d.parentNode) throw "type property can't be changed";
                        d[f] = c
                    }
                    if (D.nodeName(d, "form") && d.getAttributeNode(f)) return d.getAttributeNode(f).nodeValue;
                    return d[f]
                }
                if (msie && e && f == "style") return D.attr(d.style, "cssText", c);
                if (set) d.setAttribute(f, "" + c);
                var h = msie && e && g ? d.getAttribute(f, 2) : d.getAttribute(f);
                return h === null ? undefined : h
            }
            if (msie && f == "opacity") {
                if (set) {
                    d.zoom = 1;
                    d.filter = (d.filter || "").replace(/alpha\([^)]*\)/, "") + (parseInt(c) + '' == "NaN" ? "" : "alpha(opacity=" + c * 100 + ")")
                }
                return d.filter && d.filter.indexOf("opacity=") >= 0 ? (parseFloat(d.filter.match(/opacity=([^)]*)/)[1]) / 100) + '' : ""
            }
            f = f.replace(/-([a-z])/ig, function(a, b) {
                return b.toUpperCase()
            });
            if (set) d[f] = c;
            return d[f]
        },
        trim: function(a) {
            return (a || "").replace(/^\s+|\s+$/g, "")
        },
        makeArray: function(b) {
            var a = [];
            if (b != null) {
                var i = b.length;
                if (i == null || b.split || b.setInterval || b.call) a[0] = b;
                else while (i) a[--i] = b[i]
            }
            return a
        },
        inArray: function(b, a) {
            for (var i = 0, length = a.length; i < length; i++) if (a[i] === b) return i;
            return -1
        },
        merge: function(a, b) {
            var i = 0,
                elem, pos = a.length;
            if (D.browser.msie) {
                while (elem = b[i++]) if (elem.nodeType != 8) a[pos++] = elem
            } else while (elem = b[i++]) a[pos++] = elem;
            return a
        },
        unique: function(a) {
            var c = [],
                done = {};
            try {
                for (var i = 0, length = a.length; i < length; i++) {
                    var b = D.data(a[i]);
                    if (!done[b]) {
                        done[b] = true;
                        c.push(a[i])
                    }
                }
            } catch (e) {
                c = a
            }
            return c
        },
        grep: function(c, a, d) {
            var b = [];
            for (var i = 0, length = c.length; i < length; i++) if (!d != !a(c[i], i)) b.push(c[i]);
            return b
        },
        map: function(d, a) {
            var c = [];
            for (var i = 0, length = d.length; i < length; i++) {
                var b = a(d[i], i);
                if (b != null) c[c.length] = b
            }
            return c.concat.apply([], c)
        }
    });
    var v = navigator.userAgent.toLowerCase();
    D.browser = {
        version: (v.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
        safari: /webkit/.test(v),
        opera: /opera/.test(v),
        msie: /msie/.test(v) && !/opera/.test(v),
        mozilla: /mozilla/.test(v) && !/(compatible|webkit)/.test(v)
    };
    var y = D.browser.msie ? "styleFloat" : "cssFloat";
    D.extend({
        boxModel: !D.browser.msie || document.compatMode == "CSS1Compat",
        props: {
            "for": "htmlFor",
            "class": "className",
            "float": y,
            cssFloat: y,
            styleFloat: y,
            readonly: "readOnly",
            maxlength: "maxLength",
            cellspacing: "cellSpacing"
        }
    });
    D.each({
        parent: function(a) {
            return a.parentNode
        },
        parents: function(a) {
            return D.dir(a, "parentNode")
        },
        next: function(a) {
            return D.nth(a, 2, "nextSibling")
        },
        prev: function(a) {
            return D.nth(a, 2, "previousSibling")
        },
        nextAll: function(a) {
            return D.dir(a, "nextSibling")
        },
        prevAll: function(a) {
            return D.dir(a, "previousSibling")
        },
        siblings: function(a) {
            return D.sibling(a.parentNode.firstChild, a)
        },
        children: function(a) {
            return D.sibling(a.firstChild)
        },
        contents: function(a) {
            return D.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : D.makeArray(a.childNodes)
        }
    }, function(c, d) {
        D.fn[c] = function(b) {
            var a = D.map(this, d);
            if (b && typeof b == "string") a = D.multiFilter(b, a);
            return this.pushStack(D.unique(a))
        }
    });
    D.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    }, function(c, b) {
        D.fn[c] = function() {
            var a = arguments;
            return this.each(function() {
                for (var i = 0, length = a.length; i < length; i++) D(a[i])[b](this)
            })
        }
    });
    D.each({
        removeAttr: function(a) {
            D.attr(this, a, "");
            if (this.nodeType == 1) this.removeAttribute(a)
        },
        addClass: function(a) {
            D.className.add(this, a)
        },
        removeClass: function(a) {
            D.className.remove(this, a)
        },
        toggleClass: function(a) {
            D.className[D.className.has(this, a) ? "remove" : "add"](this, a)
        },
        remove: function(a) {
            if (!a || D.filter(a, [this]).r.length) {
                D("*", this).add(this).each(function() {
                    D.event.remove(this);
                    D.removeData(this)
                });
                if (this.parentNode) this.parentNode.removeChild(this)
            }
        },
        empty: function() {
            D(">*", this).remove();
            while (this.firstChild) this.removeChild(this.firstChild)
        }
    }, function(a, b) {
        D.fn[a] = function() {
            return this.each(b, arguments)
        }
    });
    D.each(["Height", "Width"], function(i, c) {
        var b = c.toLowerCase();
        D.fn[b] = function(a) {
            return this[0] == window ? D.browser.opera && document.body["client" + c] || D.browser.safari && window["inner" + c] || document.compatMode == "CSS1Compat" && document.documentElement["client" + c] || document.body["client" + c] : this[0] == document ? Math.max(Math.max(document.body["scroll" + c], document.documentElement["scroll" + c]), Math.max(document.body["offset" + c], document.documentElement["offset" + c])) : a == undefined ? (this.length ? D.css(this[0], b) : null) : this.css(b, a.constructor == String ? a : a + "px")
        }
    });

    function num(a, b) {
        return a[0] && parseInt(D.curCSS(a[0], b, true), 10) || 0
    }
    var C = D.browser.safari && parseInt(D.browser.version) < 417 ? "(?:[\\w*_-]|\\\\.)" : "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
        quickChild = new RegExp("^>\\s*(" + C + "+)"),
        quickID = new RegExp("^(" + C + "+)(#)(" + C + "+)"),
        quickClass = new RegExp("^([#.]?)(" + C + "*)");
    D.extend({
        expr: {
            "": function(a, i, m) {
                return m[2] == "*" || D.nodeName(a, m[2])
            },
            "#": function(a, i, m) {
                return a.getAttribute("id") == m[2]
            },
            ":": {
                lt: function(a, i, m) {
                    return i < m[3] - 0
                },
                gt: function(a, i, m) {
                    return i > m[3] - 0
                },
                nth: function(a, i, m) {
                    return m[3] - 0 == i
                },
                eq: function(a, i, m) {
                    return m[3] - 0 == i
                },
                first: function(a, i) {
                    return i == 0
                },
                last: function(a, i, m, r) {
                    return i == r.length - 1
                },
                even: function(a, i) {
                    return i % 2 == 0
                },
                odd: function(a, i) {
                    return i % 2
                },
                "first-child": function(a) {
                    return a.parentNode.getElementsByTagName("*")[0] == a
                },
                "last-child": function(a) {
                    return D.nth(a.parentNode.lastChild, 1, "previousSibling") == a
                },
                "only-child": function(a) {
                    return !D.nth(a.parentNode.lastChild, 2, "previousSibling")
                },
                parent: function(a) {
                    return a.firstChild
                },
                empty: function(a) {
                    return !a.firstChild
                },
                contains: function(a, i, m) {
                    return (a.textContent || a.innerText || D(a).text() || "").indexOf(m[3]) >= 0
                },
                visible: function(a) {
                    return "hidden" != a.type && D.css(a, "display") != "none" && D.css(a, "visibility") != "hidden"
                },
                hidden: function(a) {
                    return "hidden" == a.type || D.css(a, "display") == "none" || D.css(a, "visibility") == "hidden"
                },
                enabled: function(a) {
                    return !a.disabled
                },
                disabled: function(a) {
                    return a.disabled
                },
                checked: function(a) {
                    return a.checked
                },
                selected: function(a) {
                    return a.selected || D.attr(a, "selected")
                },
                text: function(a) {
                    return "text" == a.type
                },
                radio: function(a) {
                    return "radio" == a.type
                },
                checkbox: function(a) {
                    return "checkbox" == a.type
                },
                file: function(a) {
                    return "file" == a.type
                },
                password: function(a) {
                    return "password" == a.type
                },
                submit: function(a) {
                    return "submit" == a.type
                },
                image: function(a) {
                    return "image" == a.type
                },
                reset: function(a) {
                    return "reset" == a.type
                },
                button: function(a) {
                    return "button" == a.type || D.nodeName(a, "button")
                },
                input: function(a) {
                    return /input|select|textarea|button/i.test(a.nodeName)
                },
                has: function(a, i, m) {
                    return D.find(m[3], a).length
                },
                header: function(a) {
                    return /h\d/i.test(a.nodeName)
                },
                animated: function(a) {
                    return D.grep(D.timers, function(b) {
                        return a == b.elem
                    }).length
                }
            }
        },
        parse: [/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/, /^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/, new RegExp("^([:.#]*)(" + C + "+)")],
        multiFilter: function(a, c, b) {
            var d, cur = [];
            while (a && a != d) {
                d = a;
                var f = D.filter(a, c, b);
                a = f.t.replace(/^\s*,\s*/, "");
                cur = b ? c = f.r : D.merge(cur, f.r)
            }
            return cur
        },
        find: function(t, o) {
            if (typeof t != "string") return [t];
            if (o && o.nodeType != 1 && o.nodeType != 9) return [];
            o = o || document;
            var d = [o],
                done = [],
                last, nodeName;
            while (t && last != t) {
                var r = [];
                last = t;
                t = D.trim(t);
                var l = false,
                    re = quickChild,
                    m = re.exec(t);
                if (m) {
                    nodeName = m[1].toUpperCase();
                    for (var i = 0; d[i]; i++) for (var c = d[i].firstChild; c; c = c.nextSibling) if (c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName)) r.push(c);
                    d = r;
                    t = t.replace(re, "");
                    if (t.indexOf(" ") == 0) continue;
                    l = true
                } else {
                    re = /^([>+~])\s*(\w*)/i;
                    if ((m = re.exec(t)) != null) {
                        r = [];
                        var k = {};
                        nodeName = m[2].toUpperCase();
                        m = m[1];
                        for (var j = 0, rl = d.length; j < rl; j++) {
                            var n = m == "~" || m == "+" ? d[j].nextSibling : d[j].firstChild;
                            for (; n; n = n.nextSibling) if (n.nodeType == 1) {
                                var g = D.data(n);
                                if (m == "~" && k[g]) break;
                                if (!nodeName || n.nodeName.toUpperCase() == nodeName) {
                                    if (m == "~") k[g] = true;
                                    r.push(n)
                                }
                                if (m == "+") break
                            }
                        }
                        d = r;
                        t = D.trim(t.replace(re, ""));
                        l = true
                    }
                }
                if (t && !l) {
                    if (!t.indexOf(",")) {
                        if (o == d[0]) d.shift();
                        done = D.merge(done, d);
                        r = d = [o];
                        t = " " + t.substr(1, t.length)
                    } else {
                        var h = quickID;
                        var m = h.exec(t);
                        if (m) {
                            m = [0, m[2], m[3], m[1]]
                        } else {
                            h = quickClass;
                            m = h.exec(t)
                        }
                        m[2] = m[2].replace(/\\/g, "");
                        var f = d[d.length - 1];
                        if (m[1] == "#" && f && f.getElementById && !D.isXMLDoc(f)) {
                            var p = f.getElementById(m[2]);
                            if ((D.browser.msie || D.browser.opera) && p && typeof p.id == "string" && p.id != m[2]) p = D('[@id="' + m[2] + '"]', f)[0];
                            d = r = p && (!m[3] || D.nodeName(p, m[3])) ? [p] : []
                        } else {
                            for (var i = 0; d[i]; i++) {
                                var a = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
                                if (a == "*" && d[i].nodeName.toLowerCase() == "object") a = "param";
                                r = D.merge(r, d[i].getElementsByTagName(a))
                            }
                            if (m[1] == ".") r = D.classFilter(r, m[2]);
                            if (m[1] == "#") {
                                var e = [];
                                for (var i = 0; r[i]; i++) if (r[i].getAttribute("id") == m[2]) {
                                    e = [r[i]];
                                    break
                                }
                                r = e
                            }
                            d = r
                        }
                        t = t.replace(h, "")
                    }
                }
                if (t) {
                    var b = D.filter(t, r);
                    d = r = b.r;
                    t = D.trim(b.t)
                }
            }
            if (t) d = [];
            if (d && o == d[0]) d.shift();
            done = D.merge(done, d);
            return done
        },
        classFilter: function(r, m, a) {
            m = " " + m + " ";
            var c = [];
            for (var i = 0; r[i]; i++) {
                var b = (" " + r[i].className + " ").indexOf(m) >= 0;
                if (!a && b || a && !b) c.push(r[i])
            }
            return c
        },
        filter: function(t, r, h) {
            var d;
            while (t && t != d) {
                d = t;
                var p = D.parse,
                    m;
                for (var i = 0; p[i]; i++) {
                    m = p[i].exec(t);
                    if (m) {
                        t = t.substring(m[0].length);
                        m[2] = m[2].replace(/\\/g, "");
                        break
                    }
                }
                if (!m) break;
                if (m[1] == ":" && m[2] == "not") r = isSimple.test(m[3]) ? D.filter(m[3], r, true).r : D(r).not(m[3]);
                else if (m[1] == ".") r = D.classFilter(r, m[2], h);
                else if (m[1] == "[") {
                    var g = [],
                        type = m[3];
                    for (var i = 0, rl = r.length; i < rl; i++) {
                        var a = r[i],
                            z = a[D.props[m[2]] || m[2]];
                        if (z == null || /href|src|selected/.test(m[2])) z = D.attr(a, m[2]) || '';
                        if ((type == "" && !! z || type == "=" && z == m[5] || type == "!=" && z != m[5] || type == "^=" && z && !z.indexOf(m[5]) || type == "$=" && z.substr(z.length - m[5].length) == m[5] || (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ h) g.push(a)
                    }
                    r = g
                } else if (m[1] == ":" && m[2] == "nth-child") {
                    var e = {},
                        g = [],
                        test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" || !/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
                        first = (test[1] + (test[2] || 1)) - 0,
                        d = test[3] - 0;
                    for (var i = 0, rl = r.length; i < rl; i++) {
                        var j = r[i],
                            parentNode = j.parentNode,
                            id = D.data(parentNode);
                        if (!e[id]) {
                            var c = 1;
                            for (var n = parentNode.firstChild; n; n = n.nextSibling) if (n.nodeType == 1) n.nodeIndex = c++;
                            e[id] = true
                        }
                        var b = false;
                        if (first == 0) {
                            if (j.nodeIndex == d) b = true
                        } else if ((j.nodeIndex - d) % first == 0 && (j.nodeIndex - d) / first >= 0) b = true;
                        if (b ^ h) g.push(j)
                    }
                    r = g
                } else {
                    var f = D.expr[m[1]];
                    if (typeof f == "object") f = f[m[2]];
                    if (typeof f == "string") f = eval("false||function(a,i){return " + f + ";}");
                    r = D.grep(r, function(a, i) {
                        return f(a, i, m, r)
                    }, h)
                }
            }
            return {
                r: r,
                t: t
            }
        },
        dir: function(b, c) {
            var a = [],
                cur = b[c];
            while (cur && cur != document) {
                if (cur.nodeType == 1) a.push(cur);
                cur = cur[c]
            }
            return a
        },
        nth: function(a, e, c, b) {
            e = e || 1;
            var d = 0;
            for (; a; a = a[c]) if (a.nodeType == 1 && ++d == e) break;
            return a
        },
        sibling: function(n, a) {
            var r = [];
            for (; n; n = n.nextSibling) {
                if (n.nodeType == 1 && n != a) r.push(n)
            }
            return r
        }
    });
    D.event = {
        add: function(f, i, g, e) {
            if (f.nodeType == 3 || f.nodeType == 8) return;
            if (D.browser.msie && f.setInterval) f = window;
            if (!g.guid) g.guid = this.guid++;
            if (e != undefined) {
                var h = g;
                g = this.proxy(h, function() {
                    return h.apply(this, arguments)
                });
                g.data = e
            }
            var j = D.data(f, "events") || D.data(f, "events", {}),
                handle = D.data(f, "handle") || D.data(f, "handle", function() {
                    if (typeof D != "undefined" && !D.event.triggered) return D.event.handle.apply(arguments.callee.elem, arguments)
                });
            handle.elem = f;
            D.each(i.split(/\s+/), function(c, b) {
                var a = b.split(".");
                b = a[0];
                g.type = a[1];
                var d = j[b];
                if (!d) {
                    d = j[b] = {};
                    if (!D.event.special[b] || D.event.special[b].setup.call(f) === false) {
                        if (f.addEventListener) f.addEventListener(b, handle, false);
                        else if (f.attachEvent) f.attachEvent("on" + b, handle)
                    }
                }
                d[g.guid] = g;
                D.event.global[b] = true
            });
            f = null
        },
        guid: 1,
        global: {},
        remove: function(e, h, f) {
            if (e.nodeType == 3 || e.nodeType == 8) return;
            var i = D.data(e, "events"),
                ret, index;
            if (i) {
                if (h == undefined || (typeof h == "string" && h.charAt(0) == ".")) for (var g in i) this.remove(e, g + (h || ""));
                else {
                    if (h.type) {
                        f = h.handler;
                        h = h.type
                    }
                    D.each(h.split(/\s+/), function(b, a) {
                        var c = a.split(".");
                        a = c[0];
                        if (i[a]) {
                            if (f) delete i[a][f.guid];
                            else for (f in i[a]) if (!c[1] || i[a][f].type == c[1]) delete i[a][f];
                            for (ret in i[a]) break;
                            if (!ret) {
                                if (!D.event.special[a] || D.event.special[a].teardown.call(e) === false) {
                                    if (e.removeEventListener) e.removeEventListener(a, D.data(e, "handle"), false);
                                    else if (e.detachEvent) e.detachEvent("on" + a, D.data(e, "handle"))
                                }
                                ret = null;
                                delete i[a]
                            }
                        }
                    })
                }
                for (ret in i) break;
                if (!ret) {
                    var d = D.data(e, "handle");
                    if (d) d.elem = null;
                    D.removeData(e, "events");
                    D.removeData(e, "handle")
                }
            }
        },
        trigger: function(h, c, f, g, i) {
            c = D.makeArray(c);
            if (h.indexOf("!") >= 0) {
                h = h.slice(0, -1);
                var a = true
            }
            if (!f) {
                if (this.global[h]) D("*").add([window, document]).trigger(h, c)
            } else {
                if (f.nodeType == 3 || f.nodeType == 8) return undefined;
                var b, ret, fn = D.isFunction(f[h] || null),
                    event = !c[0] || !c[0].preventDefault;
                if (event) {
                    c.unshift({
                        type: h,
                        target: f,
                        preventDefault: function() {},
                        stopPropagation: function() {},
                        timeStamp: now()
                    });
                    c[0][E] = true
                }
                c[0].type = h;
                if (a) c[0].exclusive = true;
                var d = D.data(f, "handle");
                if (d) b = d.apply(f, c);
                if ((!fn || (D.nodeName(f, 'a') && h == "click")) && f["on" + h] && f["on" + h].apply(f, c) === false) b = false;
                if (event) c.shift();
                if (i && D.isFunction(i)) {
                    ret = i.apply(f, b == null ? c : c.concat(b));
                    if (ret !== undefined) b = ret
                }
                if (fn && g !== false && b !== false && !(D.nodeName(f, 'a') && h == "click")) {
                    this.triggered = true;
                    try {
                        f[h]()
                    } catch (e) {}
                }
                this.triggered = false
            }
            return b
        },
        handle: function(b) {
            var a, ret, namespace, all, handlers;
            b = arguments[0] = D.event.fix(b || window.event);
            namespace = b.type.split(".");
            b.type = namespace[0];
            namespace = namespace[1];
            all = !namespace && !b.exclusive;
            handlers = (D.data(this, "events") || {})[b.type];
            for (var j in handlers) {
                var c = handlers[j];
                if (all || c.type == namespace) {
                    b.handler = c;
                    b.data = c.data;
                    ret = c.apply(this, arguments);
                    if (a !== false) a = ret;
                    if (ret === false) {
                        b.preventDefault();
                        b.stopPropagation()
                    }
                }
            }
            return a
        },
        fix: function(b) {
            if (b[E] == true) return b;
            var d = b;
            b = {
                originalEvent: d
            };
            var c = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");
            for (var i = c.length; i; i--) b[c[i]] = d[c[i]];
            b[E] = true;
            b.preventDefault = function() {
                if (d.preventDefault) d.preventDefault();
                d.returnValue = false
            };
            b.stopPropagation = function() {
                if (d.stopPropagation) d.stopPropagation();
                d.cancelBubble = true
            };
            b.timeStamp = b.timeStamp || now();
            if (!b.target) b.target = b.srcElement || document;
            if (b.target.nodeType == 3) b.target = b.target.parentNode;
            if (!b.relatedTarget && b.fromElement) b.relatedTarget = b.fromElement == b.target ? b.toElement : b.fromElement;
            if (b.pageX == null && b.clientX != null) {
                var a = document.documentElement,
                    body = document.body;
                b.pageX = b.clientX + (a && a.scrollLeft || body && body.scrollLeft || 0) - (a.clientLeft || 0);
                b.pageY = b.clientY + (a && a.scrollTop || body && body.scrollTop || 0) - (a.clientTop || 0)
            }
            if (!b.which && ((b.charCode || b.charCode === 0) ? b.charCode : b.keyCode)) b.which = b.charCode || b.keyCode;
            if (!b.metaKey && b.ctrlKey) b.metaKey = b.ctrlKey;
            if (!b.which && b.button) b.which = (b.button & 1 ? 1 : (b.button & 2 ? 3 : (b.button & 4 ? 2 : 0)));
            return b
        },
        proxy: function(a, b) {
            b.guid = a.guid = a.guid || b.guid || this.guid++;
            return b
        },
        special: {
            ready: {
                setup: function() {
                    bindReady();
                    return
                },
                teardown: function() {
                    return
                }
            },
            mouseenter: {
                setup: function() {
                    if (D.browser.msie) return false;
                    D(this).bind("mouseover", D.event.special.mouseenter.handler);
                    return true
                },
                teardown: function() {
                    if (D.browser.msie) return false;
                    D(this).unbind("mouseover", D.event.special.mouseenter.handler);
                    return true
                },
                handler: function(a) {
                    if (F(a, this)) return true;
                    a.type = "mouseenter";
                    return D.event.handle.apply(this, arguments)
                }
            },
            mouseleave: {
                setup: function() {
                    if (D.browser.msie) return false;
                    D(this).bind("mouseout", D.event.special.mouseleave.handler);
                    return true
                },
                teardown: function() {
                    if (D.browser.msie) return false;
                    D(this).unbind("mouseout", D.event.special.mouseleave.handler);
                    return true
                },
                handler: function(a) {
                    if (F(a, this)) return true;
                    a.type = "mouseleave";
                    return D.event.handle.apply(this, arguments)
                }
            }
        }
    };
    D.fn.extend({
        bind: function(c, a, b) {
            return c == "unload" ? this.one(c, a, b) : this.each(function() {
                D.event.add(this, c, b || a, b && a)
            })
        },
        one: function(d, b, c) {
            var e = D.event.proxy(c || b, function(a) {
                D(this).unbind(a, e);
                return (c || b).apply(this, arguments)
            });
            return this.each(function() {
                D.event.add(this, d, e, c && b)
            })
        },
        unbind: function(a, b) {
            return this.each(function() {
                D.event.remove(this, a, b)
            })
        },
        trigger: function(c, a, b) {
            return this.each(function() {
                D.event.trigger(c, a, this, true, b)
            })
        },
        triggerHandler: function(c, a, b) {
            return this[0] && D.event.trigger(c, a, this[0], false, b)
        },
        toggle: function(b) {
            var c = arguments,
                i = 1;
            while (i < c.length) D.event.proxy(b, c[i++]);
            return this.click(D.event.proxy(b, function(a) {
                this.lastToggle = (this.lastToggle || 0) % i;
                a.preventDefault();
                return c[this.lastToggle++].apply(this, arguments) || false
            }))
        },
        hover: function(a, b) {
            return this.bind('mouseenter', a).bind('mouseleave', b)
        },
        ready: function(a) {
            bindReady();
            if (D.isReady) a.call(document, D);
            else D.readyList.push(function() {
                return a.call(this, D)
            });
            return this
        }
    });
    D.extend({
        isReady: false,
        readyList: [],
        ready: function() {
            if (!D.isReady) {
                D.isReady = true;
                if (D.readyList) {
                    D.each(D.readyList, function() {
                        this.call(document)
                    });
                    D.readyList = null
                }
                D(document).triggerHandler("ready")
            }
        }
    });
    var x = false;

    function bindReady() {
        if (x) return;
        x = true;
        if (document.addEventListener && !D.browser.opera) document.addEventListener("DOMContentLoaded", D.ready, false);
        if (D.browser.msie && window == top)(function() {
            if (D.isReady) return;
            try {
                document.documentElement.doScroll("left")
            } catch (error) {
                setTimeout(arguments.callee, 0);
                return
            }
            D.ready()
        })();
        if (D.browser.opera) document.addEventListener("DOMContentLoaded", function() {
            if (D.isReady) return;
            for (var i = 0; i < document.styleSheets.length; i++) if (document.styleSheets[i].disabled) {
                setTimeout(arguments.callee, 0);
                return
            }
            D.ready()
        }, false);
        if (D.browser.safari) {
            var a;
            (function() {
                if (D.isReady) return;
                if (document.readyState != "loaded" && document.readyState != "complete") {
                    setTimeout(arguments.callee, 0);
                    return
                }
                if (a === undefined) a = D("style, link[rel=stylesheet]").length;
                if (document.styleSheets.length != a) {
                    setTimeout(arguments.callee, 0);
                    return
                }
                D.ready()
            })()
        }
        D.event.add(window, "load", D.ready)
    }
    D.each(("blur,focus,load,resize,scroll,unload,click,dblclick," + "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + "submit,keydown,keypress,keyup,error").split(","), function(i, b) {
        D.fn[b] = function(a) {
            return a ? this.bind(b, a) : this.trigger(b)
        }
    });
    var F = function(a, c) {
            var b = a.relatedTarget;
            while (b && b != c) try {
                b = b.parentNode
            } catch (error) {
                b = c
            }
            return b == c
        };
    D(window).bind("unload", function() {
        D("*").add(document).unbind()
    });
    D.fn.extend({
        _load: D.fn.load,
        load: function(g, d, c) {
            if (typeof g != 'string') return this._load(g);
            var e = g.indexOf(" ");
            if (e >= 0) {
                var i = g.slice(e, g.length);
                g = g.slice(0, e)
            }
            c = c ||
            function() {};
            var f = "GET";
            if (d) if (D.isFunction(d)) {
                c = d;
                d = null
            } else {
                d = D.param(d);
                f = "POST"
            }
            var h = this;
            D.ajax({
                url: g,
                type: f,
                dataType: "html",
                data: d,
                complete: function(a, b) {
                    if (b == "success" || b == "notmodified") h.html(i ? D("<div/>").append(a.responseText.replace(/<script(.|\s)*?\/script>/g, "")).find(i) : a.responseText);
                    h.each(c, [a.responseText, b, a])
                }
            });
            return this
        },
        serialize: function() {
            return D.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                return D.nodeName(this, "form") ? D.makeArray(this.elements) : this
            }).filter(function() {
                return this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password/i.test(this.type))
            }).map(function(i, c) {
                var b = D(this).val();
                return b == null ? null : b.constructor == Array ? D.map(b, function(a, i) {
                    return {
                        name: c.name,
                        value: a
                    }
                }) : {
                    name: c.name,
                    value: b
                }
            }).get()
        }
    });
    D.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i, o) {
        D.fn[o] = function(f) {
            return this.bind(o, f)
        }
    });
    var B = now();
    D.extend({
        get: function(d, b, a, c) {
            if (D.isFunction(b)) {
                a = b;
                b = null
            }
            return D.ajax({
                type: "GET",
                url: d,
                data: b,
                success: a,
                dataType: c
            })
        },
        getScript: function(b, a) {
            return D.get(b, null, a, "script")
        },
        getJSON: function(c, b, a) {
            return D.get(c, b, a, "json")
        },
        post: function(d, b, a, c) {
            if (D.isFunction(b)) {
                a = b;
                b = {}
            }
            return D.ajax({
                type: "POST",
                url: d,
                data: b,
                success: a,
                dataType: c
            })
        },
        ajaxSetup: function(a) {
            D.extend(D.ajaxSettings, a)
        },
        ajaxSettings: {
            url: location.href,
            global: true,
            type: "GET",
            timeout: 0,
            contentType: "application/x-www-form-urlencoded",
            processData: true,
            async: true,
            data: null,
            username: null,
            password: null,
            accepts: {
                xml: "application/xml, text/xml",
                html: "text/html",
                script: "text/javascript, application/javascript",
                json: "application/json, text/javascript",
                text: "text/plain",
                _default: "*/*"
            }
        },
        lastModified: {},
        ajax: function(s) {
            s = D.extend(true, s, D.extend(true, {}, D.ajaxSettings, s));
            var g, jsre = /=\?(&|$)/g,
                status, data, type = s.type.toUpperCase();
            if (s.data && s.processData && typeof s.data != "string") s.data = D.param(s.data);
            if (s.dataType == "jsonp") {
                if (type == "GET") {
                    if (!s.url.match(jsre)) s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?"
                } else if (!s.data || !s.data.match(jsre)) s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
                s.dataType = "json"
            }
            if (s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre))) {
                g = "jsonp" + B++;
                if (s.data) s.data = (s.data + "").replace(jsre, "=" + g + "$1");
                s.url = s.url.replace(jsre, "=" + g + "$1");
                s.dataType = "script";
                window[g] = function(a) {
                    data = a;
                    success();
                    complete();
                    window[g] = undefined;
                    try {
                        delete window[g]
                    } catch (e) {}
                    if (i) i.removeChild(h)
                }
            }
            if (s.dataType == "script" && s.cache == null) s.cache = false;
            if (s.cache === false && type == "GET") {
                var j = now();
                var k = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + j + "$2");
                s.url = k + ((k == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + j : "")
            }
            if (s.data && type == "GET") {
                s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
                s.data = null
            }
            if (s.global && !D.active++) D.event.trigger("ajaxStart");
            var n = /^(?:\w+:)?\/\/([^\/?#]+)/;
            if (s.dataType == "script" && type == "GET" && n.test(s.url) && n.exec(s.url)[1] != location.host) {
                var i = document.getElementsByTagName("head")[0];
                var h = document.createElement("script");
                h.src = s.url;
                if (s.scriptCharset) h.charset = s.scriptCharset;
                if (!g) {
                    var l = false;
                    h.onload = h.onreadystatechange = function() {
                        if (!l && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
                            l = true;
                            success();
                            complete();
                            i.removeChild(h)
                        }
                    }
                }
                i.appendChild(h);
                return undefined
            }
            var m = false;
            var c = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
            if (s.username) c.open(type, s.url, s.async, s.username, s.password);
            else c.open(type, s.url, s.async);
            try {
                if (s.data) c.setRequestHeader("Content-Type", s.contentType);
                if (s.ifModified) c.setRequestHeader("If-Modified-Since", D.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT");
                c.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                c.setRequestHeader("Accept", s.dataType && s.accepts[s.dataType] ? s.accepts[s.dataType] + ", */*" : s.accepts._default)
            } catch (e) {}
            if (s.beforeSend && s.beforeSend(c, s) === false) {
                s.global && D.active--;
                c.abort();
                return false
            }
            if (s.global) D.event.trigger("ajaxSend", [c, s]);
            var d = function(a) {
                    if (!m && c && (c.readyState == 4 || a == "timeout")) {
                        m = true;
                        if (f) {
                            clearInterval(f);
                            f = null
                        }
                        status = a == "timeout" && "timeout" || !D.httpSuccess(c) && "error" || s.ifModified && D.httpNotModified(c, s.url) && "notmodified" || "success";
                        if (status == "success") {
                            try {
                                data = D.httpData(c, s.dataType, s.dataFilter)
                            } catch (e) {
                                status = "parsererror"
                            }
                        }
                        if (status == "success") {
                            var b;
                            try {
                                b = c.getResponseHeader("Last-Modified")
                            } catch (e) {}
                            if (s.ifModified && b) D.lastModified[s.url] = b;
                            if (!g) success()
                        } else D.handleError(s, c, status);
                        complete();
                        if (s.async) c = null
                    }
                };
            if (s.async) {
                var f = setInterval(d, 13);
                if (s.timeout > 0) setTimeout(function() {
                    if (c) {
                        c.abort();
                        if (!m) d("timeout")
                    }
                }, s.timeout)
            }
            try {
                c.send(s.data)
            } catch (e) {
                D.handleError(s, c, null, e)
            }
            if (!s.async) d();

            function success() {
                if (s.success) s.success(data, status);
                if (s.global) D.event.trigger("ajaxSuccess", [c, s])
            }
            function complete() {
                if (s.complete) s.complete(c, status);
                if (s.global) D.event.trigger("ajaxComplete", [c, s]);
                if (s.global && !--D.active) D.event.trigger("ajaxStop")
            }
            return c
        },
        handleError: function(s, a, b, e) {
            if (s.error) s.error(a, b, e);
            if (s.global) D.event.trigger("ajaxError", [a, s, e])
        },
        active: 0,
        httpSuccess: function(a) {
            try {
                return !a.status && location.protocol == "file:" || (a.status >= 200 && a.status < 300) || a.status == 304 || a.status == 1223 || D.browser.safari && a.status == undefined
            } catch (e) {}
            return false
        },
        httpNotModified: function(a, c) {
            try {
                var b = a.getResponseHeader("Last-Modified");
                return a.status == 304 || b == D.lastModified[c] || D.browser.safari && a.status == undefined
            } catch (e) {}
            return false
        },
        httpData: function(a, c, b) {
            var d = a.getResponseHeader("content-type"),
                xml = c == "xml" || !c && d && d.indexOf("xml") >= 0,
                data = xml ? a.responseXML : a.responseText;
            if (xml && data.documentElement.tagName == "parsererror") throw "parsererror";
            if (b) data = b(data, c);
            if (c == "script") D.globalEval(data);
            if (c == "json") data = eval("(" + data + ")");
            return data
        },
        param: function(a) {
            var s = [];
            if (a.constructor == Array || a.jquery) D.each(a, function() {
                s.push(encodeURIComponent(this.name) + "=" + encodeURIComponent(this.value))
            });
            else for (var j in a) if (a[j] && a[j].constructor == Array) D.each(a[j], function() {
                s.push(encodeURIComponent(j) + "=" + encodeURIComponent(this))
            });
            else s.push(encodeURIComponent(j) + "=" + encodeURIComponent(D.isFunction(a[j]) ? a[j]() : a[j]));
            return s.join("&").replace(/%20/g, "+")
        }
    });
    D.fn.extend({
        show: function(c, b) {
            return c ? this.animate({
                height: "show",
                width: "show",
                opacity: "show"
            }, c, b) : this.filter(":hidden").each(function() {
                this.style.display = this.oldblock || "";
                if (D.css(this, "display") == "none") {
                    var a = D("<" + this.tagName + " />").appendTo("body");
                    this.style.display = a.css("display");
                    if (this.style.display == "none") this.style.display = "block";
                    a.remove()
                }
            }).end()
        },
        hide: function(b, a) {
            return b ? this.animate({
                height: "hide",
                width: "hide",
                opacity: "hide"
            }, b, a) : this.filter(":visible").each(function() {
                this.oldblock = this.oldblock || D.css(this, "display");
                this.style.display = "none"
            }).end()
        },
        _toggle: D.fn.toggle,
        toggle: function(a, b) {
            return D.isFunction(a) && D.isFunction(b) ? this._toggle.apply(this, arguments) : a ? this.animate({
                height: "toggle",
                width: "toggle",
                opacity: "toggle"
            }, a, b) : this.each(function() {
                D(this)[D(this).is(":hidden") ? "show" : "hide"]()
            })
        },
        slideDown: function(b, a) {
            return this.animate({
                height: "show"
            }, b, a)
        },
        slideUp: function(b, a) {
            return this.animate({
                height: "hide"
            }, b, a)
        },
        slideToggle: function(b, a) {
            return this.animate({
                height: "toggle"
            }, b, a)
        },
        fadeIn: function(b, a) {
            return this.animate({
                opacity: "show"
            }, b, a)
        },
        fadeOut: function(b, a) {
            return this.animate({
                opacity: "hide"
            }, b, a)
        },
        fadeTo: function(c, a, b) {
            return this.animate({
                opacity: a
            }, c, b)
        },
        animate: function(k, j, i, g) {
            var h = D.speed(j, i, g);
            return this[h.queue === false ? "each" : "queue"](function() {
                if (this.nodeType != 1) return false;
                var f = D.extend({}, h),
                    p, hidden = D(this).is(":hidden"),
                    self = this;
                for (p in k) {
                    if (k[p] == "hide" && hidden || k[p] == "show" && !hidden) return f.complete.call(this);
                    if (p == "height" || p == "width") {
                        f.display = D.css(this, "display");
                        f.overflow = this.style.overflow
                    }
                }
                if (f.overflow != null) this.style.overflow = "hidden";
                f.curAnim = D.extend({}, k);
                D.each(k, function(c, a) {
                    var e = new D.fx(self, f, c);
                    if (/toggle|show|hide/.test(a)) e[a == "toggle" ? hidden ? "show" : "hide" : a](k);
                    else {
                        var b = a.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
                            start = e.cur(true) || 0;
                        if (b) {
                            var d = parseFloat(b[2]),
                                unit = b[3] || "px";
                            if (unit != "px") {
                                self.style[c] = (d || 1) + unit;
                                start = ((d || 1) / e.cur(true)) * start;
                                self.style[c] = start + unit
                            }
                            if (b[1]) d = ((b[1] == "-=" ? -1 : 1) * d) + start;
                            e.custom(start, d, unit)
                        } else e.custom(start, a, "")
                    }
                });
                return true
            })
        },
        queue: function(a, b) {
            if (D.isFunction(a) || (a && a.constructor == Array)) {
                b = a;
                a = "fx"
            }
            if (!a || (typeof a == "string" && !b)) return A(this[0], a);
            return this.each(function() {
                if (b.constructor == Array) A(this, a, b);
                else {
                    A(this, a).push(b);
                    if (A(this, a).length == 1) b.call(this)
                }
            })
        },
        stop: function(b, c) {
            var a = D.timers;
            if (b) this.queue([]);
            this.each(function() {
                for (var i = a.length - 1; i >= 0; i--) if (a[i].elem == this) {
                    if (c) a[i](true);
                    a.splice(i, 1)
                }
            });
            if (!c) this.dequeue();
            return this
        }
    });
    var A = function(b, c, a) {
            if (b) {
                c = c || "fx";
                var q = D.data(b, c + "queue");
                if (!q || a) q = D.data(b, c + "queue", D.makeArray(a))
            }
            return q
        };
    D.fn.dequeue = function(a) {
        a = a || "fx";
        return this.each(function() {
            var q = A(this, a);
            q.shift();
            if (q.length) q[0].call(this)
        })
    };
    D.extend({
        speed: function(b, a, c) {
            var d = b && b.constructor == Object ? b : {
                complete: c || !c && a || D.isFunction(b) && b,
                duration: b,
                easing: c && a || a && a.constructor != Function && a
            };
            d.duration = (d.duration && d.duration.constructor == Number ? d.duration : D.fx.speeds[d.duration]) || D.fx.speeds.def;
            d.old = d.complete;
            d.complete = function() {
                if (d.queue !== false) D(this).dequeue();
                if (D.isFunction(d.old)) d.old.call(this)
            };
            return d
        },
        easing: {
            linear: function(p, n, b, a) {
                return b + a * p
            },
            swing: function(p, n, b, a) {
                return ((-Math.cos(p * Math.PI) / 2) + 0.5) * a + b
            }
        },
        timers: [],
        timerId: null,
        fx: function(b, c, a) {
            this.options = c;
            this.elem = b;
            this.prop = a;
            if (!c.orig) c.orig = {}
        }
    });
    D.fx.prototype = {
        update: function() {
            if (this.options.step) this.options.step.call(this.elem, this.now, this);
            (D.fx.step[this.prop] || D.fx.step._default)(this);
            if (this.prop == "height" || this.prop == "width") this.elem.style.display = "block"
        },
        cur: function(a) {
            if (this.elem[this.prop] != null && this.elem.style[this.prop] == null) return this.elem[this.prop];
            var r = parseFloat(D.css(this.elem, this.prop, a));
            return r && r > -10000 ? r : parseFloat(D.curCSS(this.elem, this.prop)) || 0
        },
        custom: function(c, b, d) {
            this.startTime = now();
            this.start = c;
            this.end = b;
            this.unit = d || this.unit || "px";
            this.now = this.start;
            this.pos = this.state = 0;
            this.update();
            var e = this;

            function t(a) {
                return e.step(a)
            }
            t.elem = this.elem;
            D.timers.push(t);
            if (D.timerId == null) {
                D.timerId = setInterval(function() {
                    var a = D.timers;
                    for (var i = 0; i < a.length; i++) if (!a[i]()) a.splice(i--, 1);
                    if (!a.length) {
                        clearInterval(D.timerId);
                        D.timerId = null
                    }
                }, 13)
            }
        },
        show: function() {
            this.options.orig[this.prop] = D.attr(this.elem.style, this.prop);
            this.options.show = true;
            this.custom(0, this.cur());
            if (this.prop == "width" || this.prop == "height") this.elem.style[this.prop] = "1px";
            D(this.elem).show()
        },
        hide: function() {
            this.options.orig[this.prop] = D.attr(this.elem.style, this.prop);
            this.options.hide = true;
            this.custom(this.cur(), 0)
        },
        step: function(a) {
            var t = now();
            if (a || t > this.options.duration + this.startTime) {
                this.now = this.end;
                this.pos = this.state = 1;
                this.update();
                this.options.curAnim[this.prop] = true;
                var b = true;
                for (var i in this.options.curAnim) if (this.options.curAnim[i] !== true) b = false;
                if (b) {
                    if (this.options.display != null) {
                        this.elem.style.overflow = this.options.overflow;
                        this.elem.style.display = this.options.display;
                        if (D.css(this.elem, "display") == "none") this.elem.style.display = "block"
                    }
                    if (this.options.hide) this.elem.style.display = "none";
                    if (this.options.hide || this.options.show) for (var p in this.options.curAnim) D.attr(this.elem.style, p, this.options.orig[p])
                }
                if (b) this.options.complete.call(this.elem);
                return false
            } else {
                var n = t - this.startTime;
                this.state = n / this.options.duration;
                this.pos = D.easing[this.options.easing || (D.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
                this.now = this.start + ((this.end - this.start) * this.pos);
                this.update()
            }
            return true
        }
    };
    D.extend(D.fx, {
        speeds: {
            slow: 600,
            fast: 200,
            def: 400
        },
        step: {
            scrollLeft: function(a) {
                a.elem.scrollLeft = a.now
            },
            scrollTop: function(a) {
                a.elem.scrollTop = a.now
            },
            opacity: function(a) {
                D.attr(a.elem.style, "opacity", a.now)
            },
            _default: function(a) {
                a.elem.style[a.prop] = a.now + a.unit
            }
        }
    });
    D.fn.offset = function() {
        var b = 0,
            top = 0,
            elem = this[0],
            results;
        if (elem) with(D.browser) {
            var d = elem.parentNode,
                offsetChild = elem,
                offsetParent = elem.offsetParent,
                doc = elem.ownerDocument,
                safari2 = safari && parseInt(version) < 522 && !/adobeair/i.test(v),
                css = D.curCSS,
                fixed = css(elem, "position") == "fixed";
            if (elem.getBoundingClientRect) {
                var c = elem.getBoundingClientRect();
                add(c.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft), c.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
                add(-doc.documentElement.clientLeft, -doc.documentElement.clientTop)
            } else {
                add(elem.offsetLeft, elem.offsetTop);
                while (offsetParent) {
                    add(offsetParent.offsetLeft, offsetParent.offsetTop);
                    if (mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari && !safari2) border(offsetParent);
                    if (!fixed && css(offsetParent, "position") == "fixed") fixed = true;
                    offsetChild = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;
                    offsetParent = offsetParent.offsetParent
                }
                while (d && d.tagName && !/^body|html$/i.test(d.tagName)) {
                    if (!/^inline|table.*$/i.test(css(d, "display"))) add(-d.scrollLeft, -d.scrollTop);
                    if (mozilla && css(d, "overflow") != "visible") border(d);
                    d = d.parentNode
                }
                if ((safari2 && (fixed || css(offsetChild, "position") == "absolute")) || (mozilla && css(offsetChild, "position") != "absolute")) add(-doc.body.offsetLeft, -doc.body.offsetTop);
                if (fixed) add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft), Math.max(doc.documentElement.scrollTop, doc.body.scrollTop))
            }
            results = {
                top: top,
                left: b
            }
        }
        function border(a) {
            add(D.curCSS(a, "borderLeftWidth", true), D.curCSS(a, "borderTopWidth", true))
        }
        function add(l, t) {
            b += parseInt(l, 10) || 0;
            top += parseInt(t, 10) || 0
        }
        return results
    };
    D.fn.extend({
        position: function() {
            var a = 0,
                top = 0,
                results;
            if (this[0]) {
                var b = this.offsetParent(),
                    offset = this.offset(),
                    parentOffset = /^body|html$/i.test(b[0].tagName) ? {
                        top: 0,
                        left: 0
                    } : b.offset();
                offset.top -= num(this, 'marginTop');
                offset.left -= num(this, 'marginLeft');
                parentOffset.top += num(b, 'borderTopWidth');
                parentOffset.left += num(b, 'borderLeftWidth');
                results = {
                    top: offset.top - parentOffset.top,
                    left: offset.left - parentOffset.left
                }
            }
            return results
        },
        offsetParent: function() {
            var a = this[0].offsetParent;
            while (a && (!/^body|html$/i.test(a.tagName) && D.css(a, 'position') == 'static')) a = a.offsetParent;
            return D(a)
        }
    });
    D.each(['Left', 'Top'], function(i, b) {
        var c = 'scroll' + b;
        D.fn[c] = function(a) {
            if (!this[0]) return;
            return a != undefined ? this.each(function() {
                this == window || this == document ? window.scrollTo(!i ? a : D(window).scrollLeft(), i ? a : D(window).scrollTop()) : this[c] = a
            }) : this[0] == window || this[0] == document ? self[i ? 'pageYOffset' : 'pageXOffset'] || D.boxModel && document.documentElement[c] || document.body[c] : this[0][c]
        }
    });
    D.each(["Height", "Width"], function(i, b) {
        var c = i ? "Left" : "Top",
            br = i ? "Right" : "Bottom";
        D.fn["inner" + b] = function() {
            return this[b.toLowerCase()]() + num(this, "padding" + c) + num(this, "padding" + br)
        };
        D.fn["outer" + b] = function(a) {
            return this["inner" + b]() + num(this, "border" + c + "Width") + num(this, "border" + br + "Width") + (a ? num(this, "margin" + c) + num(this, "margin" + br) : 0)
        }
    })
})();

Executed Writes (11)

#1 JavaScript::Write (size: 178, repeated: 1)

<SCRIPT TYPE="text/javascript" SRC="http://ad.xtendmedia.com/imp?Z=300x250&s=3526582&T=3&_salt=3470887025&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0"></SCRIPT>

#2 JavaScript::Write (size: 177, repeated: 1)

<SCRIPT TYPE="text/javascript" SRC="http://ad.xtendmedia.com/imp?Z=468x60&s=3526582&T=3&_salt=2172757552&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0"></SCRIPT>

#3 JavaScript::Write (size: 446, repeated: 1)

<div class="download"><h4><a class="iframe" title="Download T.I Album No Mercy" href="http://network.adsmarket.com/click/i2lrmWCcqZaRZ3CdX8p6w4iQcplmoH6WiZBwlmCjqZeLZnCWjZ-Dl45oag"></a></h4></div><div class="download3"><span class="download2"><a class="iframe" title="Download T.I Album No Mercy" href="http://network.adsmarket.com/click/i2lrmWCcqZaRZ3CdX8p6w4iQcplmoH6WiZBwlmCjqZeLZnCWjZ-Dl45oag">Download T.I Album No Mercy.zip</a></span></div>

#4 JavaScript::Write (size: 576, repeated: 1)

<iframe src="http://ads.a-static.com/137/ad_rr.html?w=300&h=250&ff=&if=300x250_radio.gif&g=NO&ct=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D6%26cid%3D2275%26mid%3D3715%26pid%3D218%26default%3Dfalse%26random%3D63187529%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D" width="300" height="250" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" style="width:300px; height:250px; border:0; margin:0; padding:0;"></iframe>

#5 JavaScript::Write (size: 579, repeated: 1)

<iframe src="http://ads.a-static.com/94/html/728x90.html?id=EMAD004Ldyn5G1&a=T.I&t=No+Mercy&s=&g=NO&c=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D9%26cid%3D2555%26mid%3D3368%26pid%3D218%26default%3Dfalse%26random%3D71869211%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D" width="728" height="90" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" style="width:728px; height:90px; border:0; margin:0; padding:0;"></iframe>

#6 JavaScript::Write (size: 1092, repeated: 1)

<object type="application/x-shockwave-flash" data="http://content.yieldmanager.edgesuite.net/atoms/13/49/ec/bf/1349ecbf873e28181d2593b1e9fb6df8.swf?clickTAG=http%3A%2F%2Fad%2Extendmedia%2Ecom%2Fclk%3F3%2CeJytjd8KgjAUh5%2DmO5M8M5uMLjbUEpokSbHu3BxmpkYMrJ4%2DK%2DkJ%2Djh8%2EDh%2EOA4iEst5oV1P%2DVL7bq6Jg3Ll6RkuEFgzQoi78PwFBhcsY6eSSblN0qDVRtEPjLcJHSnfSr95i99eh8ddkY1jXPgR%2EQuMBXcx5vjztwwwleJZ3s8d%2D62tYjge9pWAuN9ksSMgNDyLLrxyKnHgaJOFiJ9rSJ4CkoDVIv1dLi3rZMx1gugEoqH6vrebK1K3vK1t1TVDy0yrwW03bfRNPeyTaV6JF1%2EX%2C" height="60" width="468" loop="false" wmode="opaque"><param name="wmode" value="opaque"><param name="movie" value="http://content.yieldmanager.edgesuite.net/atoms/13/49/ec/bf/1349ecbf873e28181d2593b1e9fb6df8.swf?clickTAG=http%3A%2F%2Fad%2Extendmedia%2Ecom%2Fclk%3F3%2CeJytjd8KgjAUh5%2DmO5M8M5uMLjbUEpokSbHu3BxmpkYMrJ4%2DK%2DkJ%2Djh8%2EDh%2EOA4iEst5oV1P%2DVL7bq6Jg3Ll6RkuEFgzQoi78PwFBhcsY6eSSblN0qDVRtEPjLcJHSnfSr95i99eh8ddkY1jXPgR%2EQuMBXcx5vjztwwwleJZ3s8d%2D62tYjge9pWAuN9ksSMgNDyLLrxyKnHgaJOFiJ9rSJ4CkoDVIv1dLi3rZMx1gugEoqH6vrebK1K3vK1t1TVDy0yrwW03bfRNPeyTaV6JF1%2EX%2C" /></object>

#7 JavaScript::Write (size: 1129, repeated: 1)

<object type="application/x-shockwave-flash" data="http://content.yieldmanager.edgesuite.net/atoms/54/27/cb/c0/5427cbc0d694b325ca2c7980babf66e8.swf?clickTAG=http%3A%2F%2Fad%2Extendmedia%2Ecom%2Fclk%3F3%2CeJytjV1rwjAUhn%2DNd7XkQ2tC2EVC7JZhqmUdpd7ZGNpqP0QCtf76VVfcH9jD4eHlnAMvxAxYQiheLRElAbUryCA%2DmMACYhfAA4wxRCFdEgSDhef8OBd5votiWVtn%2DBOh24hPFA%2Dp37wjD3%2Ds91%2EHZDqTIw35vyCEvGVTVs%2EeQhIeKlzcTp14vb0rrGVxj1IFNomCGVo7nYS1rmAZ3b%2DHTbqvsjQetvLc6%2DSz3v4VvHle6dxlhvkMheP0fe83F2yuh%2Ebsm64ZV25ejW67eWOvZvBL1%2EwALaJfGQ%3D%3D%2C" height="250" width="300" loop="false" wmode="opaque"><param name="wmode" value="opaque"><param name="movie" value="http://content.yieldmanager.edgesuite.net/atoms/54/27/cb/c0/5427cbc0d694b325ca2c7980babf66e8.swf?clickTAG=http%3A%2F%2Fad%2Extendmedia%2Ecom%2Fclk%3F3%2CeJytjV1rwjAUhn%2DNd7XkQ2tC2EVC7JZhqmUdpd7ZGNpqP0QCtf76VVfcH9jD4eHlnAMvxAxYQiheLRElAbUryCA%2DmMACYhfAA4wxRCFdEgSDhef8OBd5votiWVtn%2DBOh24hPFA%2Dp37wjD3%2Ds91%2EHZDqTIw35vyCEvGVTVs%2EeQhIeKlzcTp14vb0rrGVxj1IFNomCGVo7nYS1rmAZ3b%2DHTbqvsjQetvLc6%2DSz3v4VvHle6dxlhvkMheP0fe83F2yuh%2Ebsm64ZV25ejW67eWOvZvBL1%2EwALaJfGQ%3D%3D%2C" /></object>

#8 JavaScript::Write (size: 252, repeated: 1)

<script src="http://adserver.adreactor.com/servlet/view/banner/javascript/zone?zid=6&pid=218&custom1=T.I&custom2=No+Mercy&random=63187529&millis=1351956332258&referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm" type="text/javascript"></script>

#9 JavaScript::Write (size: 252, repeated: 1)

<script src="http://adserver.adreactor.com/servlet/view/banner/javascript/zone?zid=9&pid=218&custom1=T.I&custom2=No+Mercy&random=71869211&millis=1351956332089&referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm" type="text/javascript"></script>

#10 JavaScript::Write (size: 253, repeated: 1)

<script src="http://adserver.adreactor.com/servlet/view/window/javascript/zone?zid=23&pid=218&custom1=T.I&custom2=No+Mercy&random=36390355&millis=1351956331925&referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm" type="text/javascript"></script>

#11 JavaScript::Write (size: 96, repeated: 1)

<script type="text/javascript" src="http://resources.infolinks.com/js/310.3.1e/ice.js"></script>


HTTP Transactions (61)


Request Response
GET /t-i/no-mercy.htm HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
HTTP/1.1 200 OK

Content-Type: text/html; charset=UTF-8
Server: nginx
Date: Sat, 03 Nov 2012 15:22:37 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Last-Modified: Sat, 03 Nov 2012 14:38:04 GMT
Vary: Accept-Encoding, Cookie
Expires: Sat, 03 Nov 2012 15:38:04 GMT
Pragma: public
Cache-Control: max-age=927, public, must-revalidate, proxy-revalidate
X-Powered-By: W3 Total Cache/0.9.2.4
Content-Encoding: gzip
X-Pingback: http://www.mp3crank.com/xmlrpc.php
GET /mp3crank.css?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/css
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 3351
Last-Modified: Thu, 04 Oct 2012 18:04:29 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /wp-content/themes/mp3crank/style.css?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/css
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 21757
Last-Modified: Sat, 27 Oct 2012 15:08:48 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /wp-content/themes/mp3crank/js/jquery.js?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 31033
Last-Modified: Tue, 06 Jul 2010 20:47:00 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /mp3crank.js?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 9786
Last-Modified: Wed, 03 Oct 2012 14:28:29 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /wp-content/themes/mp3crank/pagenavi-css.css?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/css
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 467
Last-Modified: Sun, 29 Jul 2012 11:31:10 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /wp-content/plugins/i-like-this/js/i-like-this.js?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 282
Last-Modified: Thu, 11 Mar 2010 09:07:54 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /wp-content/plugins/i-like-this/css/i-like-this.css?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/css
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 482
Last-Modified: Fri, 10 Aug 2012 21:52:26 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /quant.js HTTP/1.1

Host: edge.quantserve.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Server: Apache
Last-Modified: Mon, 25 Jun 2012 19:57:36 GMT
Accept-Ranges: bytes
Content-Length: 2307
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: private, max-age=86400
Expires: Sun, 04 Nov 2012 15:25:31 GMT
Date: Sat, 03 Nov 2012 15:25:31 GMT
Connection: keep-alive
GET /wp-includes/js/jquery/jquery.js?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 93889
Last-Modified: Wed, 23 Nov 2011 19:36:15 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /cover-album/T.I-No-Mercy1-300x300.jpg?84cd58 HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: image/jpeg
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 12715
Last-Modified: Mon, 06 Dec 2010 19:22:34 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /js/infolinks_main.js HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Content-Encoding: gzip
Cache-Control: max-age=3600
Date: Sat, 03 Nov 2012 15:25:31 GMT
Etag: &quot;2d2d14-786-4cd58175364c0+gzip&quot;
Expires: Sat, 03 Nov 2012 16:25:31 GMT
Last-Modified: Wed, 31 Oct 2012 10:08:59 GMT
Server: ECS (arn/46E3)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1258
GET /app/geoip.js HTTP/1.1

Host: j.maxmind.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.0 200 OK

Content-Type: text/javascript; charset=ISO-8859-1
Expires: Sat, 03 Nov 2012 15:55:31 GMT
Cache-Control: private, max-age=0
Access-Control-Allow-Origin: *
Content-Length: 482
GET /ajax/libs/jquery/1.7.1/jquery.min.js HTTP/1.1

Host: ajax.googleapis.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/javascript; charset=UTF-8
Vary: Accept-Encoding
Content-Encoding: gzip
Last-Modified: Mon, 02 Apr 2012 18:24:28 GMT
Date: Thu, 01 Nov 2012 01:09:09 GMT
Expires: Fri, 01 Nov 2013 01:09:09 GMT
X-Content-Type-Options: nosniff
Server: sffe
Content-Length: 33186
X-XSS-Protection: 1; mode=block
Cache-Control: public, max-age=31536000
Age: 224182
GET /js/libcode1_noajax.js HTTP/1.1

Host: adserver.adreactor.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/javascript;charset=UTF-8
Cache-Control: public, max-age=604800
Expires: Sat, 10 Nov 2012 15:25:31 GMT
Vary: Accept-Encoding
Last-Modified: Thu, 25 Oct 2012 06:08:28 GMT
Content-Encoding: gzip
Content-Length: 946
Date: Sat, 03 Nov 2012 15:25:30 GMT
Server: AdReactor
GET /wp-content/themes/mp3crank/images/header.png HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/wp-content/themes/mp3crank/style.css?84cd58
HTTP/1.1 200 OK

Content-Type: image/png
Server: nginx
Date: Sat, 03 Nov 2012 15:22:38 GMT
Content-Length: 10440
Last-Modified: Fri, 10 Aug 2012 22:08:50 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /servlet/view/window/javascript/zone?zid=23&pid=218&custom1=T.I&custom2=No+Mercy&random=36390355&millis=1351956331925&referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm HTTP/1.1

Host: adserver.adreactor.com
GET /servlet/view/window/javascript/zone?zid=23&amp;pid=218&amp;custom1=T.I&amp;custom2=No+Mercy&amp;random=36390355&amp;millis=1351956331925&amp;referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/javascript;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 31 Dec 1998 11:59:59 GMT
P3P: CP=&quot;NOI DSP COR NID&quot;
Set-Cookie: ADRUID=66a2f9722cedf1e3d3d5c63cc5103759; Expires=Sun, 03-Nov-2013 15:25:31 GMT; Path=/
Content-Encoding: gzip
Content-Length: 1281
Date: Sat, 03 Nov 2012 15:25:31 GMT
Server: AdReactor
GET /wp-content/themes/mp3crank/images/hl-dot.gif HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/wp-content/themes/mp3crank/style.css?84cd58
HTTP/1.1 200 OK

Content-Type: image/gif
Server: nginx
Date: Sat, 03 Nov 2012 15:22:39 GMT
Content-Length: 43
Last-Modified: Tue, 06 Jul 2010 20:46:16 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /servlet/view/banner/javascript/zone?zid=9&pid=218&custom1=T.I&custom2=No+Mercy&random=71869211&millis=1351956332089&referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm HTTP/1.1

Host: adserver.adreactor.com
GET /servlet/view/banner/javascript/zone?zid=9&amp;pid=218&amp;custom1=T.I&amp;custom2=No+Mercy&amp;random=71869211&amp;millis=1351956332089&amp;referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: ADRUID=66a2f9722cedf1e3d3d5c63cc5103759
HTTP/1.1 200 OK

Content-Type: text/javascript;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 31 Dec 1998 11:59:59 GMT
P3P: CP=&quot;NOI DSP COR NID&quot;
Content-Encoding: gzip
Content-Length: 414
Date: Sat, 03 Nov 2012 15:25:31 GMT
Server: AdReactor
GET /servlet/view/banner/javascript/zone?zid=6&pid=218&custom1=T.I&custom2=No+Mercy&random=63187529&millis=1351956332258&referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm HTTP/1.1

Host: adserver.adreactor.com
GET /servlet/view/banner/javascript/zone?zid=6&amp;pid=218&amp;custom1=T.I&amp;custom2=No+Mercy&amp;random=63187529&amp;millis=1351956332258&amp;referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: ADRUID=66a2f9722cedf1e3d3d5c63cc5103759
HTTP/1.1 200 OK

Content-Type: text/javascript;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 31 Dec 1998 11:59:59 GMT
P3P: CP=&quot;NOI DSP COR NID&quot;
Content-Encoding: gzip
Content-Length: 407
Date: Sat, 03 Nov 2012 15:25:31 GMT
Server: AdReactor
GET /widgets.js?84cd58 HTTP/1.1

Host: platform.twitter.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/javascript; charset=utf-8
Cache-Control: public, max-age=1800
Last-Modified: Fri, 02 Nov 2012 09:48:09 GMT
Etag: &quot;eeaccca8778f3be533564253af185e3e&quot;
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Date: Sat, 03 Nov 2012 15:25:32 GMT
Content-Length: 24565
Connection: keep-alive
P3P: CP=&quot;CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT&quot;
GET /wp-content/themes/mp3crank/images/download.png HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/wp-content/themes/mp3crank/style.css?84cd58
HTTP/1.1 200 OK

Content-Type: image/png
Server: nginx
Date: Sat, 03 Nov 2012 15:22:39 GMT
Content-Length: 4265
Last-Modified: Thu, 06 Sep 2012 21:39:02 GMT
Connection: keep-alive
Accept-Ranges: bytes
GET /js/310.3.1e/ice.js HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Content-Encoding: gzip
Cache-Control: max-age=2592000
Date: Sat, 03 Nov 2012 15:25:32 GMT
Etag: &quot;340846-219fc-4cd5732dc7480+gzip&quot;
Expires: Mon, 03 Dec 2012 15:25:32 GMT
Last-Modified: Wed, 31 Oct 2012 09:05:06 GMT
Server: ECS (arn/46F8)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 55706
GET /94/html/728x90.html?id=EMAD004Ldyn5G1&a=T.I&t=No+Mercy&s=&g=NO&c=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D9%26cid%3D2555%26mid%3D3368%26pid%3D218%26default%3Dfalse%26random%3D71869211%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D HTTP/1.1

Host: ads.a-static.com
GET /94/html/728x90.html?id=EMAD004Ldyn5G1&amp;a=T.I&amp;t=No+Mercy&amp;s=&amp;g=NO&amp;c=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D9%26cid%3D2555%26mid%3D3368%26pid%3D218%26default%3Dfalse%26random%3D71869211%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/html
Server: nginx
Date: Sat, 03 Nov 2012 15:25:32 GMT
Last-Modified: Tue, 04 Sep 2012 16:24:14 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
GET /137/ad_rr.html?w=300&h=250&ff=&if=300x250_radio.gif&g=NO&ct=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D6%26cid%3D2275%26mid%3D3715%26pid%3D218%26default%3Dfalse%26random%3D63187529%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D HTTP/1.1

Host: ads.a-static.com
GET /137/ad_rr.html?w=300&amp;h=250&amp;ff=&amp;if=300x250_radio.gif&amp;g=NO&amp;ct=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D6%26cid%3D2275%26mid%3D3715%26pid%3D218%26default%3Dfalse%26random%3D63187529%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/html
Server: nginx
Date: Sat, 03 Nov 2012 15:25:32 GMT
Last-Modified: Thu, 19 Apr 2012 06:25:02 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
GET /st?ad_type=iframe&ad_size=468x60&section=3526582 HTTP/1.1

Host: ad.xtendmedia.com
GET /st?ad_type=iframe&amp;ad_size=468x60&amp;section=3526582 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

HTTP/1.1 200 OK
Date: Sat, 03 Nov 2012 15:25:33 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor0101.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:33 GMT
Expires: Sat, 03 Nov 2012 15:25:33 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
GET /st?ad_type=iframe&ad_size=300x250&section=3526582 HTTP/1.1

Host: ad.xtendmedia.com
GET /st?ad_type=iframe&amp;ad_size=300x250&amp;section=3526582 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

HTTP/1.1 200 OK
Date: Sat, 03 Nov 2012 15:25:33 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor0136.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:33 GMT
Expires: Sat, 03 Nov 2012 15:25:33 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
GET /functions/functions.js HTTP/1.1

Host: ads.a-static.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ads.a-static.com/94/html/728x90.html?id=EMAD004Ldyn5G1&amp;a=T.I&amp;t=No+Mercy&amp;s=&amp;g=NO&amp;c=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D9%26cid%3D2555%26mid%3D3368%26pid%3D218%26default%3Dfalse%26random%3D71869211%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Server: nginx
Date: Sat, 03 Nov 2012 15:25:33 GMT
Last-Modified: Fri, 10 Aug 2012 10:00:17 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Mon, 03 Dec 2012 15:25:33 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip
GET /pixel;r=681426878;a=p-b4RUAsZYoEwlI;fpan=1;fpa=P0-518105093-1351956333127;ns=0;ce=1;je=1;sr=1176x885x24;enc=n;dst=1;et=1351956333127;tzo=-60;ref=;url=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm;ogl= HTTP/1.1

Host: pixel.quantserve.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: image/gif
Connection: close
Set-Cookie: mc=5095376d-27d2b-06930-32588; expires=Mon, 05-May-2014 15:25:33 GMT; path=/; domain=.quantserve.com
P3P: CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAo PSDo OUR SAMa IND COM NAV&quot;
Cache-Control: private, no-cache, no-store, proxy-revalidate
Pragma: no-cache
Expires: Fri, 04 Aug 1978 12:00:00 GMT
Content-Length: 35
Date: Sat, 03 Nov 2012 15:25:33 GMT
Server: QS
GET /ga.js HTTP/1.1

Host: www.google-analytics.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
If-Modified-Since: Wed, 19 Sep 2012 11:51:40 GMT
HTTP/1.1 200 OK

Content-Type: text/javascript
Content-Length: 14888
Content-Encoding: gzip
Last-Modified: Mon, 22 Oct 2012 15:51:19 GMT
X-Content-Type-Options: nosniff, nosniff
Date: Sat, 03 Nov 2012 13:09:17 GMT
Expires: Sun, 04 Nov 2012 01:09:17 GMT
Vary: Accept-Encoding
Age: 8176
Cache-Control: max-age=43200, public
Server: GFE/2.0
GET /widgets/tweet_button.1351848862.html HTTP/1.1

Host: platform.twitter.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8
Cache-Control: public, max-age=315569260
Last-Modified: Fri, 02 Nov 2012 09:36:43 GMT
Etag: &quot;8387ae31da8d953f1223ed70a0922e74&quot;
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 22625
Date: Sat, 03 Nov 2012 15:25:33 GMT
Connection: keep-alive
P3P: CP=&quot;CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT&quot;
GET /imp?Z=468x60&s=3526582&T=3&_salt=2172757552&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0 HTTP/1.1

Host: ad.xtendmedia.com
GET /imp?Z=468x60&amp;s=3526582&amp;T=3&amp;_salt=2172757552&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=468x60&amp;section=3526582
HTTP/1.1 302 Found

HTTP/1.1 302 Found
Date: Sat, 03 Nov 2012 15:25:33 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor0007.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Location: http://ad.yieldmanager.com/imp?Z=468x60&amp;s=3526582&amp;T=3&amp;_salt=2172757552&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:33 GMT
Expires: Sat, 03 Nov 2012 15:25:33 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
GET /functions/swfobject.js HTTP/1.1

Host: ads.a-static.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ads.a-static.com/137/ad_rr.html?w=300&amp;h=250&amp;ff=&amp;if=300x250_radio.gif&amp;g=NO&amp;ct=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D6%26cid%3D2275%26mid%3D3715%26pid%3D218%26default%3Dfalse%26random%3D63187529%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Server: nginx
Date: Sat, 03 Nov 2012 15:25:33 GMT
Last-Modified: Thu, 16 Feb 2012 14:30:35 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Mon, 03 Dec 2012 15:25:33 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip
GET /__utm.gif?utmwv=5.3.7&utms=1&utmn=1318631512&utmhn=www.mp3crank.com&utmcs=UTF-8&utmsr=1176x885&utmvp=1159x778&utmsc=24-bit&utmul=en-us&utmje=1&utmfl=10.0%20r45&utmdt=Free%20Music%20Download%20T.I%20-%20No%20Mercy.%20MP3%20Download%2C%20Songs%20Download&utmhid=845658577&utmr=-&utmp=%2Ft-i%2Fno-mercy.htm&utmac=UA-3181137-2&utmcc=__utma%3D5909743.325891497.1351956333.1351956333.1351956333.1%3B%2B__utmz%3D5909743.1351956333.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B&utmu=q~ HTTP/1.1

Host: www.google-analytics.com
GET /__utm.gif?utmwv=5.3.7&amp;utms=1&amp;utmn=1318631512&amp;utmhn=www.mp3crank.com&amp;utmcs=UTF-8&amp;utmsr=1176x885&amp;utmvp=1159x778&amp;utmsc=24-bit&amp;utmul=en-us&amp;utmje=1&amp;utmfl=10.0%20r45&amp;utmdt=Free%20Music%20Download%20T.I%20-%20No%20Mercy.%20MP3%20Download%2C%20Songs%20Download&amp;utmhid=845658577&amp;utmr=-&amp;utmp=%2Ft-i%2Fno-mercy.htm&amp;utmac=UA-3181137-2&amp;utmcc=__utma%3D5909743.325891497.1351956333.1351956333.1351956333.1%3B%2B__utmz%3D5909743.1351956333.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B&amp;utmu=q~ HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: image/gif
Date: Thu, 01 Nov 2012 01:27:45 GMT
Content-Length: 35
X-Content-Type-Options: nosniff
Pragma: no-cache
Expires: Wed, 19 Apr 2000 11:43:00 GMT
Last-Modified: Wed, 21 Jan 2004 19:51:30 GMT
Cache-Control: private, no-cache, no-cache=Set-Cookie, proxy-revalidate
Age: 223068
Server: GFE/2.0
GET /t.gif?_=1351956333229&count=horizontal&dnt=true&hashtags=MP3CRANK&id=twitter-widget-0&lang=en&original_referer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&size=m&text=Free%20MP3%20Download%20%C2%BB%20T.I%20-%20No%20Mercy%20%C2%AB&url=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&via=mp3crank&type=share&twttr_referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&twttr_widget=1&twttr_dnt=1 HTTP/1.1

Host: p.twitter.com
GET /t.gif?_=1351956333229&amp;count=horizontal&amp;dnt=true&amp;hashtags=MP3CRANK&amp;id=twitter-widget-0&amp;lang=en&amp;original_referer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;size=m&amp;text=Free%20MP3%20Download%20%C2%BB%20T.I%20-%20No%20Mercy%20%C2%AB&amp;url=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;via=mp3crank&amp;type=share&amp;twttr_referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;twttr_widget=1&amp;twttr_dnt=1 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://platform.twitter.com/widgets/tweet_button.1351848862.html
HTTP/1.1 200 OK

Content-Type: image/gif
Etag: &quot;377d257f2d2e294916143c069141c1c5:1328738114&quot;
Last-Modified: Wed, 08 Feb 2012 21:55:14 GMT
Accept-Ranges: bytes
Content-Length: 43
DNT: beta
Cache-Control: no-cache
P3P: CP=&quot;CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT&quot;
Date: Sat, 03 Nov 2012 15:25:33 GMT
Connection: keep-alive
GET /imp?Z=300x250&s=3526582&T=3&_salt=3470887025&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0 HTTP/1.1

Host: ad.xtendmedia.com
GET /imp?Z=300x250&amp;s=3526582&amp;T=3&amp;_salt=3470887025&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=300x250&amp;section=3526582
HTTP/1.1 302 Found

HTTP/1.1 302 Found
Date: Sat, 03 Nov 2012 15:25:33 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor0495.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Location: http://ad.yieldmanager.com/imp?Z=300x250&amp;s=3526582&amp;T=3&amp;_salt=3470887025&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:33 GMT
Expires: Sat, 03 Nov 2012 15:25:33 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
GET /94/icon_ringtones.gif HTTP/1.1

Host: ads.a-static.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ads.a-static.com/94/html/728x90.html?id=EMAD004Ldyn5G1&amp;a=T.I&amp;t=No+Mercy&amp;s=&amp;g=NO&amp;c=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D9%26cid%3D2555%26mid%3D3368%26pid%3D218%26default%3Dfalse%26random%3D71869211%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D
HTTP/1.1 200 OK

Content-Type: image/gif
Server: nginx
Date: Sat, 03 Nov 2012 15:25:33 GMT
Content-Length: 812
Last-Modified: Mon, 04 Oct 2010 21:12:00 GMT
Connection: keep-alive
Expires: Mon, 03 Dec 2012 15:25:33 GMT
Cache-Control: max-age=2592000
Accept-Ranges: bytes
GET /gsd/13519563332350?evt=afterGSD&pid=68764&wsid=4&pdom=www.mp3crank.com&purl=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&jsv=310.3.1e HTTP/1.1

Host: router.infolinks.com
GET /gsd/13519563332350?evt=afterGSD&amp;pid=68764&amp;wsid=4&amp;pdom=www.mp3crank.com&amp;purl=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;jsv=310.3.1e HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
HTTP/1.1 200 OK

Content-Type: text/javascript;charset=UTF-8
Server: Apache-Coyote/1.1
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: max-age=0
P3P: CP=&quot;NON DSP NID OUR COR&quot;
Set-Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59; Domain=infolinks.com; Expires=Mon, 03-Nov-2014 15:25:33 GMT; Path=/
Content-Length: 280
Date: Sat, 03 Nov 2012 15:25:33 GMT
Connection: close
GET /1/urls/count.json?url=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&callback=twttr.receiveCount HTTP/1.1

Host: cdn.api.twitter.com
GET /1/urls/count.json?url=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;callback=twttr.receiveCount HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://platform.twitter.com/widgets/tweet_button.1351848862.html
HTTP/1.1 200 OK

Content-Type: application/javascript;charset=utf-8
Last-Modified: Sat, 03 Nov 2012 15:25:33 GMT
Content-Encoding: gzip
Content-Length: 108
Server: tfe
Vary: Accept-Encoding
Cache-Control: must-revalidate, max-age=900
Expires: Sat, 03 Nov 2012 15:40:33 GMT
Date: Sat, 03 Nov 2012 15:25:33 GMT
Connection: keep-alive
GET /imp?Z=468x60&s=3526582&T=3&_salt=2172757552&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0 HTTP/1.1

Host: ad.yieldmanager.com
GET /imp?Z=468x60&amp;s=3526582&amp;T=3&amp;_salt=2172757552&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=468x60&amp;section=3526582
HTTP/1.1 302 Found

HTTP/1.1 302 Found
Date: Sat, 03 Nov 2012 15:25:33 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor0124.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Location: http://cookex.amp.yahoo.com/v2/cexposer/SIG=148tq8u4g/*http%3A//ad.yieldmanager.com/imp?Z=468x60&amp;s=3526582&amp;T=3&amp;_salt=2172757552&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:33 GMT
Expires: Sat, 03 Nov 2012 15:25:33 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
GET /jot?l=%7B%22_category_%22%3A%22tfw_widgets%22%2C%22event_name%22%3A%22tweetbutton%3Aimpression%22%2C%22dnt%22%3A%22true%22%2C%22_%22%3A%221351956333229%22%2C%22count%22%3A%22horizontal%22%2C%22hashtags%22%3A%22MP3CRANK%22%2C%22id%22%3A%22twitter-widget-0%22%2C%22lang%22%3A%22en%22%2C%22original_referer%22%3A%22http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm%22%2C%22size%22%3A%22m%22%2C%22text%22%3A%22Free%20MP3%20Download%20%C2%BB%20T.I%20-%20No%20Mercy%20%C2%AB%22%2C%22url%22%3A%22http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm%22%2C%22via%22%3A%22mp3crank%22%2C%22type%22%3A%22share%22%2C%22referrer%22%3A%22http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm%22%2C%22widget%22%3Atrue%7D&dnt=NaN HTTP/1.1

Host: r.twimg.com
GET /jot?l=%7B%22_category_%22%3A%22tfw_widgets%22%2C%22event_name%22%3A%22tweetbutton%3Aimpression%22%2C%22dnt%22%3A%22true%22%2C%22_%22%3A%221351956333229%22%2C%22count%22%3A%22horizontal%22%2C%22hashtags%22%3A%22MP3CRANK%22%2C%22id%22%3A%22twitter-widget-0%22%2C%22lang%22%3A%22en%22%2C%22original_referer%22%3A%22http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm%22%2C%22size%22%3A%22m%22%2C%22text%22%3A%22Free%20MP3%20Download%20%C2%BB%20T.I%20-%20No%20Mercy%20%C2%AB%22%2C%22url%22%3A%22http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm%22%2C%22via%22%3A%22mp3crank%22%2C%22type%22%3A%22share%22%2C%22referrer%22%3A%22http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm%22%2C%22widget%22%3Atrue%7D&amp;dnt=NaN HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://platform.twitter.com/widgets/tweet_button.1351848862.html
HTTP/1.1 200 OK

Content-Type: image/gif
X-Transaction: 124f4178d9712ac5
Last-Modified: Sat, 03 Nov 2012 15:25:33 GMT
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
Set-Cookie: guest_id=v1%3A135195633358035636; Expires=Mon, 3-Nov-2014 15:25:33 GMT; Path=/; Domain=.twitter.com
Date: Sat, 03 Nov 2012 15:25:33 GMT
Content-Encoding: gzip
Content-Length: 65
Server: tfe
GET /137/300x250_radio.gif HTTP/1.1

Host: ads.a-static.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ads.a-static.com/137/ad_rr.html?w=300&amp;h=250&amp;ff=&amp;if=300x250_radio.gif&amp;g=NO&amp;ct=http%3A%2F%2Fadserver.adreactor.com%2Fservlet%2Fclick%2Fzone%3Fzid%3D6%26cid%3D2275%26mid%3D3715%26pid%3D218%26default%3Dfalse%26random%3D63187529%26timestamp%3D20121103102532%26test%3Dfalse%26custom1%3DT.I%26custom2%3DNo%2BMercy%26referrer%3Dhttp%253A%252F%252Fmp3crank.com%252Ft-i%252Fno-mercy.htm%26redirect%3D
HTTP/1.1 200 OK

Content-Type: image/gif
Server: nginx
Date: Sat, 03 Nov 2012 15:25:33 GMT
Content-Length: 15913
Last-Modified: Thu, 26 Apr 2012 08:00:37 GMT
Connection: keep-alive
Expires: Mon, 03 Dec 2012 15:25:33 GMT
Cache-Control: max-age=2592000
Accept-Ranges: bytes
GET /imp?Z=300x250&s=3526582&T=3&_salt=3470887025&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0 HTTP/1.1

Host: ad.yieldmanager.com
GET /imp?Z=300x250&amp;s=3526582&amp;T=3&amp;_salt=3470887025&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=300x250&amp;section=3526582
HTTP/1.1 302 Found

HTTP/1.1 302 Found
Date: Sat, 03 Nov 2012 15:25:35 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor0880.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Location: http://cookex.amp.yahoo.com/v2/cexposer/SIG=149visqeo/*http%3A//ad.yieldmanager.com/imp?Z=300x250&amp;s=3526582&amp;T=3&amp;_salt=3470887025&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:35 GMT
Expires: Sat, 03 Nov 2012 15:25:35 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
OPTIONS /action/doq.htm?pcode=utf-8&r=13519563349791 HTTP/1.1

Host: rt1902.infolinks.com
OPTIONS /action/doq.htm?pcode=utf-8&amp;r=13519563349791 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://www.mp3crank.com
Access-Control-Request-Method: POST
HTTP/1.1 200 OK

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Content-Length: 0
Date: Sat, 03 Nov 2012 15:25:34 GMT
GET /v2/cexposer/SIG=148tq8u4g/*http%3A//ad.yieldmanager.com/imp?Z=468x60&s=3526582&T=3&_salt=2172757552&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0 HTTP/1.1

Host: cookex.amp.yahoo.com
GET /v2/cexposer/SIG=148tq8u4g/*http%3A//ad.yieldmanager.com/imp?Z=468x60&amp;s=3526582&amp;T=3&amp;_salt=2172757552&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=468x60&amp;section=3526582
HTTP/1.1 302 Found

Content-Type: text/html; charset=utf-8
Date: Sat, 03 Nov 2012 15:25:35 GMT
Set-Cookie: B=643639l89adrf&amp;b=3&amp;s=o2; expires=Tue, 04-Nov-2014 20:00:00 GMT; path=/; domain=.yahoo.com
P3P: policyref=&quot;http://info.yahoo.com/w3c/p3p.xml&quot;, CP=&quot;CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV&quot;
Location: http://ad.yieldmanager.com/imp?Z=468x60&amp;s=3526582&amp;T=3&amp;_salt=2172757552&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0&amp;SIG=10vs0tg3a;x-cookie=643639y89nqes&amp;o=3&amp;f=b2
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Cache-Control: private
GET /v2/cexposer/SIG=149visqeo/*http%3A//ad.yieldmanager.com/imp?Z=300x250&s=3526582&T=3&_salt=3470887025&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0 HTTP/1.1

Host: cookex.amp.yahoo.com
GET /v2/cexposer/SIG=149visqeo/*http%3A//ad.yieldmanager.com/imp?Z=300x250&amp;s=3526582&amp;T=3&amp;_salt=3470887025&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=300x250&amp;section=3526582
HTTP/1.1 302 Found

Content-Type: text/html; charset=utf-8
Date: Sat, 03 Nov 2012 15:25:35 GMT
Set-Cookie: B=7g97gc989adrf&amp;b=3&amp;s=e8; expires=Tue, 04-Nov-2014 20:00:00 GMT; path=/; domain=.yahoo.com
P3P: policyref=&quot;http://info.yahoo.com/w3c/p3p.xml&quot;, CP=&quot;CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV&quot;
Location: http://ad.yieldmanager.com/imp?Z=300x250&amp;s=3526582&amp;T=3&amp;_salt=3470887025&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0&amp;SIG=10v7ecmnl;x-cookie=7t97tp989nqes&amp;o=3&amp;f=r8
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Cache-Control: private
POST /action/doq.htm?pcode=utf-8&r=13519563349791 HTTP/1.1

Host: rt1902.infolinks.com
POST /action/doq.htm?pcode=utf-8&amp;r=13519563349791 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Content-Length: 3699
Origin: http://www.mp3crank.com
Pragma: no-cache
Cache-Control: no-cache
HTTP/1.1 200 OK

Content-Type: text/html;charset=UTF-8
Server: Apache-Coyote/1.1
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache, no-store
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Set-Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59; Domain=infolinks.com; Expires=Mon, 03-Nov-2014 15:25:35 GMT; Path=/
P3P: CP=&quot;NON DSP NID OUR COR&quot;
Content-Language: en-US
Content-Length: 998
Date: Sat, 03 Nov 2012 15:25:34 GMT
GET /static/skins/loader.gif HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59
HTTP/1.1 200 OK

Content-Type: image/gif
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Date: Sat, 03 Nov 2012 15:25:35 GMT
Etag: &quot;2d1304-65f-4c79efae64dc0&quot;
Expires: Mon, 03 Dec 2012 15:25:35 GMT
Last-Modified: Sun, 19 Aug 2012 14:12:15 GMT
Server: ECS (arn/46F5)
X-Cache: HIT
Content-Length: 1631
GET /static/skins/loader-bg.png HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59
HTTP/1.1 200 OK

Content-Type: image/png
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Date: Sat, 03 Nov 2012 15:25:35 GMT
Etag: &quot;c447f2-5d0-4c79f30e6c440&quot;
Expires: Mon, 03 Dec 2012 15:25:35 GMT
Last-Modified: Sun, 19 Aug 2012 14:27:21 GMT
Server: ECS (arn/46E7)
X-Cache: HIT
Content-Length: 1488
GET /static/skins/brand/intext/1/loading.gif.png HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59
HTTP/1.1 200 OK

Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Date: Sat, 03 Nov 2012 15:25:35 GMT
Last-Modified: Fri, 02 Nov 2012 08:48:02 GMT
Server: ECS (arn/46E9)
X-Cache: HIT
X-Powered-By: PHP/5.2.17
Content-Length: 0
GET /static/skins/brand/intext/1/btn.png.png HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59
HTTP/1.1 200 OK

Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Date: Sat, 03 Nov 2012 15:25:35 GMT
Last-Modified: Fri, 02 Nov 2012 08:30:01 GMT
Server: ECS (arn/46F0)
X-Cache: HIT
X-Powered-By: PHP/5.2.17
Content-Length: 0
GET /static/skins/brand/intext/1/hdr-btns.png.png HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59
HTTP/1.1 200 OK

Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Date: Sat, 03 Nov 2012 15:25:35 GMT
Last-Modified: Thu, 01 Nov 2012 19:29:41 GMT
Server: ECS (arn/46FD)
X-Cache: HIT
X-Powered-By: PHP/5.2.17
Content-Length: 0
GET /static/skins/brand/intag/1/logo.png HTTP/1.1

Host: resources.infolinks.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
Cookie: cuid=88d249f3-fd4e-416a-b0d7-23bfcc9c1b59
HTTP/1.1 200 OK

Content-Type: image/png
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Date: Sat, 03 Nov 2012 15:25:35 GMT
Etag: &quot;c8438c-3d8-4cb158bbcca80&quot;
Expires: Mon, 03 Dec 2012 15:25:35 GMT
Last-Modified: Tue, 02 Oct 2012 15:55:06 GMT
Server: ECS (arn/46ED)
X-Cache: HIT
Content-Length: 984
GET /imp?Z=468x60&s=3526582&T=3&_salt=2172757552&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0&SIG=10vs0tg3a;x-cookie=643639y89nqes&o=3&f=b2 HTTP/1.1

Host: ad.yieldmanager.com
GET /imp?Z=468x60&amp;s=3526582&amp;T=3&amp;_salt=2172757552&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0&amp;SIG=10vs0tg3a;x-cookie=643639y89nqes&amp;o=3&amp;f=b2 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=468x60&amp;section=3526582
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Date: Sat, 03 Nov 2012 15:25:35 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor0792.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Set-Cookie: BX=643639l89adrf&amp;b=3&amp;s=o2&amp;t=307; path=/; expires=Tue, 19-Jan-2038 03:14:07 GMT uid=uid=b6ed6e8c-25ca-11e2-bb9d-ff269d6a35f0&amp;_hmacv=1&amp;_salt=1203125093&amp;_keyid=k1&amp;_hmac=78faed33042f83e329fb0fc8d2c74b2ca583cad5; path=/; expires=Mon, 03-Dec-2012 15:25:35 GMT RMBX=643639l89adrf&amp;b=3&amp;s=o2&amp;t=307; path=/; expires=Tue, 19-Jan-2038 03:14:07 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:35 GMT
Expires: Sat, 03 Nov 2012 15:25:35 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
GET /atoms/13/49/ec/bf/1349ecbf873e28181d2593b1e9fb6df8.swf?clickTAG=http%3A%2F%2Fad%2Extendmedia%2Ecom%2Fclk%3F3%2CeJytjd8KgjAUh5%2DmO5M8M5uMLjbUEpokSbHu3BxmpkYMrJ4%2DK%2DkJ%2Djh8%2EDh%2EOA4iEst5oV1P%2DVL7bq6Jg3Ll6RkuEFgzQoi78PwFBhcsY6eSSblN0qDVRtEPjLcJHSnfSr95i99eh8ddkY1jXPgR%2EQuMBXcx5vjztwwwleJZ3s8d%2D62tYjge9pWAuN9ksSMgNDyLLrxyKnHgaJOFiJ9rSJ4CkoDVIv1dLi3rZMx1gugEoqH6vrebK1K3vK1t1TVDy0yrwW03bfRNPeyTaV6JF1%2EX%2C HTTP/1.1

Host: content.yieldmanager.edgesuite.net

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=468x60&amp;section=3526582
HTTP/1.1 200 OK

Content-Type: application/x-shockwave-flash
Server: Apache
Etag: &quot;1349ecbf873e28181d2593b1e9fb6df8:1333981940&quot;
Last-Modified: Mon, 09 Apr 2012 14:32:19 GMT
Accept-Ranges: bytes
Content-Length: 7575
Cache-Control: max-age=31536000
Date: Sat, 03 Nov 2012 15:25:36 GMT
Connection: keep-alive
GET /imp?Z=300x250&s=3526582&T=3&_salt=3470887025&B=10&u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&r=0&SIG=10v7ecmnl;x-cookie=7t97tp989nqes&o=3&f=r8 HTTP/1.1

Host: ad.yieldmanager.com
GET /imp?Z=300x250&amp;s=3526582&amp;T=3&amp;_salt=3470887025&amp;B=10&amp;u=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm&amp;r=0&amp;SIG=10v7ecmnl;x-cookie=7t97tp989nqes&amp;o=3&amp;f=r8 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=300x250&amp;section=3526582
HTTP/1.1 200 OK

Content-Type: application/x-javascript
Date: Sat, 03 Nov 2012 15:25:36 GMT
Server: YTS/1.20.13
X-RightMedia-Hostname: raptor1391.rm.bf1.yahoo.com
P3P: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA&quot;
Set-Cookie: BX=7g97gc989adrf&amp;b=3&amp;s=e8&amp;t=307; path=/; expires=Tue, 19-Jan-2038 03:14:07 GMT uid=uid=b706e07e-25ca-11e2-bd9d-77ff2435d1c9&amp;_hmacv=1&amp;_salt=4103240817&amp;_keyid=k1&amp;_hmac=a84c92f816f30bcf2bf82a19aa01b9ac2a2fb41d; path=/; expires=Mon, 03-Dec-2012 15:25:35 GMT RMBX=7g97gc989adrf&amp;b=3&amp;s=e8&amp;t=307; path=/; expires=Tue, 19-Jan-2038 03:14:07 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Vary: *
Last-Modified: Sat, 03 Nov 2012 15:25:36 GMT
Expires: Sat, 03 Nov 2012 15:25:36 GMT
Pragma: no-cache
Content-Encoding: gzip
Age: 1
Transfer-Encoding: chunked
Connection: keep-alive
GET /atoms/54/27/cb/c0/5427cbc0d694b325ca2c7980babf66e8.swf?clickTAG=http%3A%2F%2Fad%2Extendmedia%2Ecom%2Fclk%3F3%2CeJytjV1rwjAUhn%2DNd7XkQ2tC2EVC7JZhqmUdpd7ZGNpqP0QCtf76VVfcH9jD4eHlnAMvxAxYQiheLRElAbUryCA%2DmMACYhfAA4wxRCFdEgSDhef8OBd5votiWVtn%2DBOh24hPFA%2Dp37wjD3%2Ds91%2EHZDqTIw35vyCEvGVTVs%2EeQhIeKlzcTp14vb0rrGVxj1IFNomCGVo7nYS1rmAZ3b%2DHTbqvsjQetvLc6%2DSz3v4VvHle6dxlhvkMheP0fe83F2yuh%2Ebsm64ZV25ejW67eWOvZvBL1%2EwALaJfGQ%3D%3D%2C HTTP/1.1

Host: content.yieldmanager.edgesuite.net

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://ad.xtendmedia.com/st?ad_type=iframe&amp;ad_size=300x250&amp;section=3526582
HTTP/1.1 200 OK

Content-Type: application/x-shockwave-flash
Server: Apache
Etag: &quot;5427cbc0d694b325ca2c7980babf66e8:1333981878&quot;
Last-Modified: Mon, 09 Apr 2012 14:31:17 GMT
Accept-Ranges: bytes
Content-Length: 7570
Cache-Control: max-age=31536000
Date: Sat, 03 Nov 2012 15:25:36 GMT
Connection: keep-alive
GET /favicon.ico HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: __qca=P0-518105093-1351956333127; __utma=5909743.325891497.1351956333.1351956333.1351956333.1; __utmb=5909743.1.10.1351956333; __utmc=5909743; __utmz=5909743.1351956333.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
HTTP/1.1 200 OK

Content-Type: image/vnd.microsoft.icon
Server: nginx
Date: Sat, 03 Nov 2012 15:22:43 GMT
Content-Length: 0
Connection: keep-alive
X-Powered-By: PHP/5.3.10
GET /the-haddonfields/we-are-not-alone.htm HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.mp3crank.com/t-i/no-mercy.htm
X-Moz: prefetch
Cookie: __qca=P0-518105093-1351956333127; __utma=5909743.325891497.1351956333.1351956333.1351956333.1; __utmb=5909743.1.10.1351956333; __utmc=5909743; __utmz=5909743.1351956333.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
HTTP/1.1 200 OK

Content-Type: text/html; charset=UTF-8
Server: nginx
Date: Sat, 03 Nov 2012 15:22:43 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: w3tc_referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm; path=/
Link: &lt;http://www.mp3crank.com/?p=43513&gt;; rel=shortlink
Last-Modified: Sat, 03 Nov 2012 15:22:43 GMT
Vary: Accept-Encoding, Cookie
Expires: Sat, 03 Nov 2012 16:22:43 GMT
Pragma: public
Cache-Control: max-age=3600, public, must-revalidate, proxy-revalidate
X-Powered-By: W3 Total Cache/0.9.2.4
Content-Encoding: gzip
X-Pingback: http://www.mp3crank.com/xmlrpc.php
GET /get/flashplayer/update/current/xml/version_en_win_pl.xml HTTP/1.1

Host: fpdownload2.macromedia.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
HTTP/1.1 200 OK

Content-Type: text/xml
Server: Apache
Last-Modified: Wed, 03 Oct 2012 19:48:11 GMT
Etag: &quot;289dff-26c-4cb2ceb2654c0&quot;
Accept-Ranges: bytes
Content-Length: 620
Date: Sat, 03 Nov 2012 15:25:36 GMT
Connection: keep-alive
GET /favicon.ico HTTP/1.1

Host: www.mp3crank.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: __qca=P0-518105093-1351956333127; __utma=5909743.325891497.1351956333.1351956333.1351956333.1; __utmb=5909743.1.10.1351956333; __utmc=5909743; __utmz=5909743.1351956333.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); w3tc_referrer=http%3A%2F%2Fwww.mp3crank.com%2Ft-i%2Fno-mercy.htm
HTTP/1.1 200 OK

Content-Type: image/vnd.microsoft.icon
Server: nginx
Date: Sat, 03 Nov 2012 15:22:46 GMT
Content-Length: 0
Connection: keep-alive
X-Powered-By: PHP/5.3.10