﻿// 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);
}

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));

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;
        case eventTypes.PreSignUp:

          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; }