/**
 *  a collection of functions to use with javascript objects
 *
 *  Version: 1.00.00
 */
var object = {
    serialize : function( object ) {
        switch ( typeof object ) {
            case 'number': case 'boolean': case 'function':
                return object;
                break;
            case 'string':
                return '\'' + object + '\'';
                break;
            case 'object':
                var output;
                
                if ( object.constructor === Array || typeof object.callee !== 'undefined' ) {
                    output = '[';
                    
                    for ( i = 0; i < object.length - 1; i++ ) {
                        output += this.serialize( object[i] ) + ',';
                    }
                    output += this.serialize( object[i] ) + ']';
                }
                else {
                    output = '{';
                    
                    for ( key in object ) {
                        output += key + ':' + this.serialize( object[key] ) + ',';
                    }
                    output = str.replace( /\,$/, '', output ) + '}';
                    
                    return output;
                    break;
                }
                break;
            default:
                return null;
                break;
        }
    }
}

/**
 * collection of functions for javascript
 */
function exit (status) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Paul
    // +   bugfixed by: Hyam Singer (http://www.impact-computing.com/)
    // +   improved by: Philip Peterson
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: Should be considered expirimental. Please comment on this function.
    // *     example 1: exit();
    // *     returns 1: null
 
    var i;
 
    if (typeof status === 'string') {
        alert(status);
    }
 
    this.window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);
 
    var handlers = [
        'copy', 'cut', 'paste',
        'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
        'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
        'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
    ];
    
    function stopPropagation (e) {
        e.stopPropagation();
        // e.preventDefault(); // Stop for the form controls, etc., too?
    }
    for (i=0; i < handlers.length; i++) {
        this.window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
    }
 
    if (this.window.stop) {
        this.window.stop();
    }
    
    throw '';
}
