﻿
// EVENTS
//
// Using arrays as event handler collections.
// Call eventName.invoke() to fire all added handlers.
// add() method is already defined by AJAX Extensions.

Array.prototype.invokeHandlers = function (eventArgs) {
    for(var k = 0; k < this.length; k++) {
        if(typeof(this[k]) == 'function') {
            this[k](eventArgs);
        }
    }
}

Array.prototype.addHandler = function (item) {
    this[this.length] = item;
}

Event = Array;

_VirtualFunctionBaseClonePrefix = 'base_';

function createPrototypeWithOverridableFunctions(type) {
    var thePrototype = new type();
    for(var funcName in thePrototype) {
        if(typeof(thePrototype[funcName]) == 'function' && !funcName.startsWith(_VirtualFunctionBaseClonePrefix)) {
            thePrototype[_VirtualFunctionBaseClonePrefix + funcName] = thePrototype[funcName];
        }
    }
    return thePrototype;
}

_VirtualObjectsDictionary = new Object(); // holds all created virtual controls by their Id

function ResetVirtualObjectsDictionary() { _VirtualObjectsDictionary = new Object(); }

function registerVirtualObject(id, object) {
    if(object == null || typeof(_VirtualObjectsDictionary[id]) != 'undefined') {
        alert('An object is null or is already added to the collection.');
    }
    _VirtualObjectsDictionary[id] = object;
}

function isVirtualObjectExisting(id) {
	return typeof(_VirtualObjectsDictionary[id]) != 'undefined';
}

function getVirtualObject(id) {
//    if(typeof(_VirtualObjectsDictionary[id]) == 'undefined') {
//        alert('Virtual object with specified Id (' + id + ') was not found.');
//    }
    return _VirtualObjectsDictionary[id];
}

function __Dictionary() {
    // fastest Array.contains analogue for IE6
    this.contains = function (object) {
        if(this[object] != undefined) {
            return true;
        }
    };
}

// object because JSON deserializer generated object instead of Array
function objectToDictionary (object) {
    var dictionary = new __Dictionary();
    for(var i in object) {
        dictionary[object[i]] = object[i];
    }
    return dictionary;
}