/*
* JavaScript Observer Class designed by Dustin Diaz
* http://www.dustindiaz.com/javascript-observer-class/
*
*/
/*

Example of Usage:

//Create a new Observer
var validationObserver = new Observer;

//Subscribe a function for execution
validationObserver.subscribe(yourFunction);

//Execute all subscribed observers
validationObserver.execute(); 

*/
function Observer() {
    this.fns = [];
}

Observer.prototype =
{
    subscribe: function (fn) {
        if (fn != undefined) {
            this.fns.push(fn);
        }
    },
    unsubscribe: function (fn) {
        var tmpfns = [];
        for (var i = 0, j = this.fns.length; i < j; ++i) {
            if (this.fns[i] !== fn) {
                tmpfns.push(this.fns[i]);
            }
        }
        this.fns = tmpfns;
    },
    execute: function () {
        for (var i = 0, j = this.fns.length; i < j; ++i) {
            this.fns[i].call();
        }
    },
    unsubscribeall: function () {
        this.fns = [];
    },
    //USED TO RESUBSCRIBE FORMELEMENTS AFTER
    //AN AJAX REFERESH, CHECKS TO ENSURE ELEMENT
    //STILL EXISTS BEFORE SUBSCRIBING IT.
    resubscribe: function (formFieldId, fn) {
        if (fn != undefined) {
            this.unsubscribe(fn);
            if ($(formFieldId) != undefined) {
                this.fns.push(fn);
            }
        }
    },
    //USED IN DEBUGING
    //CALL THIS TO MAKE SURE THE OBJECT HAS BEEN CREATED
    alert: function () {
        alert("Working");
    }
};

