//  CSC Global Object and small utilities
//  Author: Jason Alonso <jalonso@media>

function $(x) { return document.getElementById(x); }

function CscGlobalObject(status_tag) {

// Import YUI features
var YUC = YAHOO.util.Connect;
var JSON = YAHOO.lang.JSON;

// Declare routines
function go_json( url, form, handler, fields, error_handler ) {
        var callbacks = {
                success: function(o) {
                        // Attempt to parse JSON
                        try {
                                response = JSON.parse(o.responseText);
                        } catch (x) {
                                $('ft') = 'JSON parse error while parsing "' + o.responseText + '".';
                        }

                        // Render response
                        if( status_tag != null )
                                $(status_tag).innerHTML = response['text'];

                        // Handle it
                        if( response['result'] == 'ok' ) handler(response);
                        else if( typeof(error_handler) != 'undefined' ) error_handler(response);
                },
                
                failure: function (o) {
                        try {
                                // Try parsing the error as JSON.
                                error_handler(JSON.parse(o.responseText).text);
                        } catch (x) {
                                if (o.responseText) error_handler(o.responseText);
                                else error_handler(o.statusText);
                        }
                }
        };

       // Prepare fields
       var fields_str = '';
       for( var k in fields )
               fields_str += k.toString() + '=' + escape(fields[k].toString()) + '&';
       
        // Submit request
        if( form != null ) {
                var post = $(form);
                YUC.setForm(post);
        }
        YUC.asyncRequest('POST', url, callbacks, fields_str);
}

// Declare sub-objects
this.widgets = new Object();
this.session = new Object();

// Initialize session
this.session.user_logged_in = false;

// Export methods and properties
this.go_json = go_json;

};

// Construct the CSC Global Object
CSC = new CscGlobalObject();
