﻿// JScript File

window["CheckDefs"] = function(params) {
    for (var i = 0; i < params.length; i++)
        if (!window["_def" + params[i]])
        return false;

    return true;
};
window["AddDef"] = function(def) {
    window["_def" + def] = true;
}

nothing = function() {
    //does NOTHING
}

function Bind(object, method) {
    return function() { return method.apply(object, arguments); }
}

function $$(tagName) {
    return document.getElementsByTagName(tagName);
}

AddEventHandler = function(obj, evName, ptr) {
    if (obj.Events) {
        if (obj.Events[evName])
            obj.Events[evName].push(ptr);
        else
            obj.Events[evName] = Array(ptr);
    }
};



function PadLeft(str, len, c) {
    var out = str;
    for (var i = str.length; i < len; i++)
        out = c + out;
    return out;
}
function PadRight(str, len, c) {
    var out = str;
    for (var i = str.length; i < len; i++)
        out = out + c;
    return out;
}

function exId(id) {
    if (document.getElementById(id) == null)
        Debug.Write("id not found: '" + id + "'");

    return document.getElementById(id);
}

function scroll(object, left, top) {
    if (object) {
        object.style.left = (left ? left : object.offsetLeft) + "px";
        object.style.top = (top ? top : object.offsetTop) + "px";
    }
}

Events = {
    _IdSeed: 0,
    /**
    Description: Creates an identifier unique only to the current browser client side.
    */
    InstanceIdentifier: function() {
        var now = new Date();
        var s = PadLeft(now.getMinutes() + "", 2, '0') +
          PadLeft(now.getSeconds() + "", 2, '0') +
          "." + this._IdSeed;

        this._IdSeed++;

        return s;
    },
    Register: function(obj, eventname, handler) {
        if (!obj.id) obj.id = this.InstanceIdentifier();
        if (!this[obj.id]) this[obj.id] = { o: obj };
        if (!this[obj.id][eventname]) this[obj.id][eventname] = [];
        if (handler) this[obj.id][eventname].push(handler);
    },
    RegisterHandler: function(obj, eventname, func) {
        if (!this[obj.id]) return;
        else if (!this[obj.id][eventname]) return;
        else this[obj.id][eventname].push(func);

        return this[obj.id][eventname].length - 1;
    },
    RegisterObject: function(obj) {
        if (!obj.id) obj.id = this.InstanceIdentifier();
        if (!this[obj.id]) this[obj.id] = { o: obj };
    },
    GetObject: function(id) {
        if (!this[id])
            return null;
        else
            return this[id].o;
    },
    GetHandlers: function(obj, eventname) {
        if (!this[obj.id]) return [];
        else if (!this[obj.id][eventname]) return [];
        else return this[obj.id][eventname]
    },
    StandardEvent: function(obj, eventname) {
        var _dispatch = this.GetHandlers(obj, eventname);
        for (var i = 0; i < _dispatch.length; i++)
            _dispatch[i](obj);
    }
    //Z.G.03/26/08
    , add: function(obj, type, fn) {
        if (obj.attachEvent) {
            obj['e' + type + fn] = fn;
            obj[type + fn] = function() { obj['e' + type + fn](window.event); }
            obj.attachEvent('on' + type, obj[type + fn]);
        } else {
            obj.addEventListener(type, fn, false);
        }
    }
    , remove: function(obj, type, fn) {
        if (obj.detachEvent) {
            obj.detachEvent('on' + type, obj[type + fn]);
            obj[type + fn] = null;
        } else {
            obj.removeEventListener(type, fn, false);
        }
    }
}
var WindowLoadUnloadObserver = {
    addLoadObserver: function(f) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = f;
        }
        else {
            window.onload = function() {
                if (oldonload && typeof oldonload == 'function') {
                    oldonload();
                }
                f();
            }
        }
    }
, addUnLoadObserver: function(f) {
    var oldonunload = window.onunload;

    if (typeof window.onunload != 'function') {
        window.onunload = f;
    }
    else {
        window.onunload = function() {
            if (oldonunload && typeof oldonunload == 'function') {
                oldonunload();
            }
            f();
        }
    }
}
}

DebugLevels = { VeryVerbose: 10, SomewhatVerbose: 7, Normal: 5, Minimal: 3, Critical: 0 };
Debug = {
    MaxVerbosity: DebugLevels.SomewhatVerbose,
    OnKeyUp: function(e) {
        if (e['shiftKey'] && e['altKey'] && e['keyCode'] == 68)
            this.ToggleDebugWindow();
    },
    ToggleDebugWindow: function() {
        if (!this.debugLayer) this.CreateDiv();
        this.debugLayer.ToggleShowHide();
    },
    WriteLevel: function(msg, level) {
        if (level <= Debug.MaxVerbosity)
            Debug.Write(msg);
    },
    Write: function(msg) {
        if (!this.debugLayer) this.CreateDiv();
        var newDiv = document.createElement("div");
        newDiv.style.backgroundColor = this.NextBGColor();
        newDiv.appendChild(document.createTextNode(msg));
        newDiv.appendChild(document.createElement("hr"));
        this.debugLayer.element.insertBefore(newDiv, this.debugLayer.element.firstChild)
    },
    WriteMulti: function(params_) {
        var newDiv = document.createElement("div");
        newDiv.style.backgroundColor = this.NextBGColor();
        for (var i = 0; i < arguments.length; i++) {
            newDiv.appendChild(document.createTextNode(arguments[i]));
            newDiv.appendChild(document.createElement("hr"));
        }
        this.debugLayer.element.insertBefore(newDiv, this.debugLayer.element.firstChild)
    },
    WriteFormat: function(format, params_) {
        this.Write(Text._Format(arguments));
    },
    CreateDiv: function() {
        this.debugLayer = new Layer(document.createElement("div"));
        this.debugLayer.Hide();
        this.debugLayer.element.style.overflow = "auto";
        this.debugLayer.element.style.height = "200px";
        this.debugLayer.element.style.padding = "15px";
        this.debugLayer.element.style.border = "1px solid black";
        var body = document.getElementsByTagName("body")[0];
        body.insertBefore(this.debugLayer.element, body.firstChild);
    },
    NextBGColor: function() {
        if (this.lastbgColor != "#dfdfdf")
            this.lastbgColor = "#dfdfdf";
        else
            this.lastbgColor = "#fff";

        return this.lastbgColor;
    }
}
Events.Register(window, "OnKeyUp");

document.onkeyup = function(e) { if (!e) e = window.event; KeyUp(e); }

KeyUp = function(e) {
    var _dispatch = Events.GetHandlers(window, "OnKeyUp");
    for (var i = 0; i < _dispatch.length; i++)
        _dispatch[i](e);
}
Events.RegisterHandler(window, "OnKeyUp", Bind(Debug, Debug.OnKeyUp));

ScrollWindowTop = function() {
    /*if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    window.pageYOffset = 0;
    } else */
    if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
        //DOM compliant
        document.body.scrollTop = 0;
    } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
        //IE6 standards compliant mode
        document.documentElement.scrollTop = 0;
    }
};

function $() {
    var elements = [];
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == 'string') {
            element = exId(element);
        }
        if (arguments.length == 1)
            return element;
        elements.push(element);
    }
    return elements;
}

_LoadFromNVP = function(nvp) {
    var out = { raw: nvp, toString: function() { return nvp; } };
    var items = nvp.split("&");
    for (var i = 0; i < items.length; i++) {
        var nvp = items[i].split("=");
        if (nvp.length == 2) {
            out[nvp[0]] = nvp[1];

        }
    }

    return out;
}

QueryString = _LoadFromNVP(window.location.search.substring(1));


_ = function(field, def) {
    var defaultV = null;
    if (def)
        defaultV = def;
    var v = window.QueryString[field];
    if (v && v != null) {
        while (v.indexOf('+') > -1) v = v.replace('+', ' ');
        return unescape(v.replace('+', ' '));
    } else
        return defaultV;
}

function isEmail(s) {
    var reEmail = /^[A-Za-z0-9_\.!#\x24%&\x27\x2a\x2b\x2d~]+\@[A-Za-z0-9_!#\x24%&\x27\x2a\x2b\x2d~]+\.[\.A-Za-z0-9_!#\x24%&\x27\x2a\x2b\x2d~]+[\x20A-Za-z0-9_!#\x24%&\x27\x2a\x2b\x2d~]$/;
    return reEmail.test(s)
}

function isNumeric(test) {

    if (typeof (test) == "number")
        return true;
    if (typeof (test) != "string")
        return false;

    if (test.length == 0)
        return false;

    for (var i = 0; i < test.length; i++)
        if (test.charAt(i) < '0' || test.charAt(i) > '9')
        return false;
    return true;
}

function findByClass(className, root) {
    for (var i = 0; i < root.childNodes.length; i++) {
        if ((" " + root.childNodes[i].className + " ").indexOf(" " + className + " ") >= 0)
            return root.childNodes[i];
    }
    return null;
}

function removeChildren(node) {
    if (typeof (node) != "undefined" && node != null)
        if (typeof (node.childNodes) != "undefined")
        while (node.childNodes.length > 0)
        node.removeChild(node.firstChild);
}

function ifdef(check, true$, false$) {
    if (typeof (check) != "undefined")
        return ifdef(true$, function() { return true$(); });
    else
        return ifdef(false$, function() { return false$(); });
};

function defined(ele) {
    return typeof (ele) != "undefined";
};

function remChildren(ele) {
    if (!defined(ele) || ele == null || !defined(ele.firstChild) || !defined(ele.removeChild))
        return;

    while (ele.firstChild != null)
        ele.removeChild(ele.firstChild);
};
Omniture = {
    LogIt: function(pn, sr, ch, pt, p1, p2, p3, p4, p5, cm, st, zp, ev, pr, pur, ev1, ev2, ev3, ev4, ev5) {
        if (typeof (s) != "undefined") {
            var str = document.location.pathname.match("\\b([\\w\-\+\(\)_\%\&\;\!\~\^\.]+(?=\.aspx))\\b");
            str = str == null ? "Default" : str[0];
            s.pageName = pn ? str + ":" + pn : "";
            s.server = sr ? sr : "";
            s.channel = ch ? ch : "";
            s.pageType = pt ? pt : "";
            s.prop1 = p1 ? p1 : "";
            s.prop2 = p2 ? p2 : "";
            s.prop3 = p3 ? p3 : "";
            s.prop4 = p4 ? p4 : "";
            s.prop5 = p5 ? p5 : "";
            /* Conversion Variables */
            //s.campaign=""
            //s.state=""
            //s.zip=""
            s.events = ev ? ev : "";
            //s.products=""
            //s.purchaseID=""
            s.eVar1 = ev1 ? ev1 : ""; //user-id
            //s.eVar2=""
            //s.eVar3=""
            //s.eVar4=""
            //s.eVar5=""
            void (s.t());
        }
    }
};
var isSsl = location.protocol.toLowerCase().indexOf('https') >= 0;
GeoSign = {
    TrackSignUp: function() {
        if (typeof (_doGeosignTracking) == "undefined")
            _doGeosignTracking = false;
        if (_doGeosignTracking == true)
            $("GeosignConversionImage").src = "https://www.foundry42.com/conversion/p.gif";
    }
};

SendTec = {
    TrackSignUp: function() {
        if ($("SignUpBug") != null)
            $("SignUpBug").src = "https://www.directnetadvertising.net/bin/site/wrappers/campresincrad.asp?AID=421&OfferID=1499";
    }
};

Google = {
    TrackSignUp: function() {
        if (typeof (_doGoogleTracking) == "undefined")
            _doGoogleTracking = false;
        if (_doGoogleTracking == true)
            $("GoogleConversionImage").src =
                "http" + (isSsl == true ? "s" : "") + "://www.googleadservices.com/pagead/conversion/1059041627/imp.gif?value=1.0&label=signup&script=0";
    },
    PageTrack: function(pageName) {
        if (typeof (_doGoogleTracking) == "undefined")
            _doGoogleTracking = false;
        if (typeof (urchinTracker) == "undefined")
            urchinTracker = null;
        if (_doGoogleTracking == true && urchinTracker != null)
            urchinTracker("/" + pageName);
    }
};

Generic = {
    TrackPixel: function(pixelSrc) {
        if ($("SignUpBug") != null)
            $("SignUpBug").src = pixelSrc;
    }
}

var eventTypes = { SignUp: 1, AddTollFree: 3, AddTollSubAccount: 4, AddTollFreeSubAccount: 5, PreSignUp : 6 };

function jsTracking(userId, eventType) {

    switch (eventTypes[eventType]) {
        case eventTypes.SignUp:
            Google.TrackSignUp();
            break;
        case eventTypes.AddTollFree:

            break;
        case eventTypes.AddTollSubAccount:

            break;
        case eventTypes.AddTollFreeSubAccount:

            break;
    }

    Omniture.LogIt(eventType, document.domain, "", "", userId, "", "", "", "", "", "", "", "event" + eventTypes[eventType].toString(), "", "", userId, "", "", "", "");
    Google.PageTrack(eventType);

    //if JSEvents are defined, and this event is defined, then invoke the event specified.
    if (typeof (JSEvents) != "undefined")
        if (typeof (JSEvents[eventType.toString().toLowerCase()]) != "undefined")
        JSEvents[eventType.toString().toLowerCase()](userId);

};

function def(check, def, nullif_) {
    if (check == null)
        return def;
    else if (typeof (nullif_) == "undefined")
        return check;
    else if (typeof (nullif_) == "array") {
        for (var i = 0; i < nullif_.length; i++)
            if (check == nullif_[i])
            return def;
        return check;
    }
    else if (check == nullif_)
        return def;
    else
        return check;
};

var isnull = function(a, d) {
    return a == null || typeof (a) == "undefined" ? d : a;
};

function fade(element, durationMS, frames, from, to, completedHandler) {
    if (defined(element.fading) && element.fading == true) { //if were already fading, then hold off and check again in 20ms
        setTimeout(function() { fade(element, durationMS, frames, from, to, completedHandler); }, 20);
    }

    element.fading = true;

    var rf = parseInt(from.substr(0, 2), 16);
    var gf = parseInt(from.substr(2, 2), 16);
    var bf = parseInt(from.substr(4, 2), 16);
    var rt = parseInt(to.substr(0, 2), 16);
    var gt = parseInt(to.substr(2, 2), 16);
    var bt = parseInt(to.substr(4, 2), 16);

    var delay = durationMS / frames;

    element.from = { red: rf, green: gf, blue: bf };
    element.to = { red: rt, green: gt, blue: bt };

    element.frame = 1;
    element.frames = frames;
    if (typeof (completedHandler) != "undefined")
        element.completedHandler = completedHandler;
    else
        element.completedHandler = void (0);

    setTimeout(function() {
        element.interval = setInterval(Bind(element, fadeStep), delay);
    }, 10);
}

function fadeStep() {
    if (!defined(this.interval))
        return;

    if (this.frame >= this.frames) {
        var f = this.completedHandler;

        //clear settings
        this.style.backgroundColor = void (0);
        clearInterval(this.interval);
        this.interval = void (0);
        this.from = void (0);
        this.to = void (0);
        this.frame = void (0);
        this.frames = void (0);
        this.completedHandler = void (0);

        if (defined(f))
            f();
        //specify as no longer fading
        this.fading = false;

        return;
    }

    //$current is a reference var
    var testColor = function(from, to, $current) {
        if ((from > to && $current < to) || (from < to && $current > to)) $current = to;
    }

    // alert("fadeStep");
    r = Math.floor(this.from.red * ((this.frames - this.frame) / this.frames) + this.to.red * (this.frame / this.frames)); testColor(this.from.red, this.to.red, r);
    g = Math.floor(this.from.green * ((this.frames - this.frame) / this.frames) + this.to.green * (this.frame / this.frames)); testColor(this.from.green, this.to.green, g);
    b = Math.floor(this.from.blue * ((this.frames - this.frame) / this.frames) + this.to.blue * (this.frame / this.frames)); testColor(this.from.blue, this.to.blue, b);

    h = ToColorHex(r, g, b);

    this.frame++;
    this.style.backgroundColor = h;
}

function ToColorHex(r, g, b) {
    var pad = function(str) { return PadLeft(str, 2, '0'); }
    return "#" + pad(r.toString(16)) + pad(g.toString(16)) + pad(b.toString(16));
}

function GetParamsAsArgs(params_) { return arguments; }

ToHex = function(s) {
    var ret = [];
    for (var i=0; i < s.length; i++)
        ret.push(s.charCodeAt(i).toString(16));
        
    return ret.join("");
}

FromHex = function(s) {
    var ret = [];
    for (var i = 0; i < s.length; i+=2)
        ret.push(String.fromCharCode(parseInt(s.substring(i, 2), 16)));

    return ret.join("");
}

CreateRedir = function(url, delimiter) {
    var ret = url.toString();

    if (ret.indexOf("?") >= 0) {
        var data = ret.split("?");
        //create the hex encoded redirection.
        //user array and array.join as stringbuilder.
        return Array(
            data[0],
            delimiter,
            ToHex(data[1])
        ).join("");
    }
    else {
        return ret;
    }
}

PlayAudioFile = function (url) {

    var ele = $("AudioPlayer");

    var path = Text.Format("button/musicplayer_f6.swf?autoplay=true&song_url={0}", escape(url));

    //must use object cloning because u cannot create valid "object" nodes in IE7 DOM
    var clone = $("cloneobject").cloneNode(true);
    clone.data = path;
    clone.childNodes[0].value = path;
    clone.style.display = "block";
    removeChildren(ele);
    ele.appendChild(clone);
}
