﻿// 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) }
}

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);
    }
}

Debug = {
    OnKeyUp : function(e) {
        if(e['shiftKey'] && e['altKey'] && e['keyCode'] == 68)
            this.ToggleDebugWindow();
    },
    ToggleDebugWindow : function() {
        if(!this.debugLayer) this.CreateDiv();
        this.debugLayer.ToggleShowHide();
    },
    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.top = "200px";
        this.debugLayer.element.style.width = "90%";
        this.debugLayer.element.style.height = "200px";
        this.debugLayer.element.style.position = "absolute";
        this.debugLayer.element.style.padding = "15px";
        this.debugLayer.element.style.border = "1px solid black";
        document.body.appendChild(document.createElement("br"));
        document.body.appendChild(document.createElement("br"));
        document.body.appendChild(this.debugLayer.element);
    },
    NextBGColor : function() {
        if(this.lastbgColor != "#dfdfdf")
            this.lastbgColor = "#dfdfdf";
        else
            this.lastbgColor = "#ffffff";
        
        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)
}

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;
  }
};