﻿String.prototype.format = function() {
    var s = arguments[0];
    for (var i = 0; i < arguments.length - 1; i++) {
        var reg = new RegExp("\\{" + i + "\\}", "gm");
        s = s.replace(reg, arguments[i + 1]);
    }

    return s;
}

function CreateGuid() {
    var S4 = function() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    };
    return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}

function ToggleDisplay(ctrl) {
    if ($(ctrl).css('display') != 'none') {
        $(ctrl).css('display', 'none');
    } else {
        $(ctrl).css('display', 'block');
    }
}

function AttachBelow(sender, control) {
    $(sender).parent().append($(control));
}

function TrimStart(sString, c) {
    while (sString.substring(0, 1) == c) {
        sString = sString.substring(1, sString.length);
    }
    return sString;
}

function TrimEnd(sString, c) {
    while (sString.substring(sString.length - 1, sString.length) == c) {
        sString = sString.substring(0, sString.length - 1);
    }
    return sString;
}


function Dictionary() {
    var Keys = new Array();
    var Values = new Array();

    this.Clear = function() {
        Keys = new Array();
        Values = new Array();
    }

    this.Count = function() {
        return Keys.length;
    }

    this.KeyAt = function(index) {
        return Keys.length > index ? Keys[index] : "";
    }

    this.Get = function(key) {
        var value = undefined;
        for (var x = 0; x < Keys.length; x++) {
            if (Keys[x] == key) {
                value = Values[x];
            }
        }
        return value;
    }

    this.Add = function(key, value) {
        var found = false;
        for (var x = 0; x < Keys.length; x++) {
            if (Keys[x] == key) {
                found = true;
                break;
            }
        }
        if (found == false) {
            Keys.push(key);
            Values.push(value);
        }
    }

    this.Set = function(key, value) {
        var found = false;
        for (var x = 0; x < Keys.length; x++) {
            if (Keys[x] == key) {
                Values[x] = value;
                found = true;
                break;
            }
        }
        if (found == false) {
            this.Add(key, value);
        }
    }

    this.ToDebugString = function() {
        var text = "";
        for (var x = 0; x < Keys.length; x++) {
            text += "(" + Keys[x] + ":" + Values[x] + "),";
        }
        return "[" + text + "]";
    }
}

function GroupSelectionHandler() {
    var dict = new Dictionary();
    var lastSender;
    var lastOwner;

    this.Dictionary = function() {
        return dict;
    }
	
    this.Select = function(sender, group) {
        var oldOwner = dict.Get(group);
        dict.Set(group, $(sender));
        lastSender = sender;
        lastOwner = oldOwner;
        $(this).trigger("OnSelect", [this, sender, oldOwner]);
    }

    this.Refresh = function() {
        for (var x = 0; x < dict.Count(); x++) {
            $(this).trigger("OnRefresh", [this, dict.Get(dict.KeyAt(x))]);
        }
    }
}
