var UTIL = {
    json : function(obj){
        var json = null;
        switch (typeof obj) {
            case 'number':
                json = obj;
                break;
            case 'string':
                try{
                    eval('json = ' + obj);
                    if(typeof json != 'object'){
                        throw new Object();
                    }
                }catch(e){
                    json = '"' + obj + '"';
                }
                break;
            case 'object':
                json = jsonToString(obj);
                break;
            default:
                json = typeof obj;
                break;
        }
        return json;
        function jsonToString(obj){
            switch (UTIL.typeOf(obj)) {
                case 'string':
                    return '"' + obj + '"';
                    break;
                case 'number':
                    return obj;
                    break;
                case 'object':
                    json = '';
                    for(var k in obj){
                        json += ',' + k + ':' + jsonToString(obj[k]);
                    }
                    json = '{' + json.substring(1) + '}';
                    return json;
                    break;
                case 'array':
                    json = '';
                    for(var i = 0; i < obj.length; i++){
                        json += ',' + jsonToString(obj[i]);
                    }
                    json = '[' + json.substring(1) + ']';
                    return json;
                    break;
                default :
                    return null;
            }
        }
    },
    typeOf : function(obj){
        var type = Object.prototype.toString.call(obj);
        return type.split(' ')[1].split(']')[0].toLowerCase();
    },
    param : function(name){
        try{
            var entry = location.search.substring(1).split('&');
            for(var i in entry){
                var keyval = entry[i].split('=', 2);
                if(keyval[0] == name)
                    return keyval[1];
            }
            return null;
        }catch(e){
            return null;
        }
    },
    editText : function(e, submit, cancel){
        var oldText = e.innerHTML;
        var parent = e.parentNode;
        var form = document.createElement('form');
        parent.insertBefore(form, e);
        parent.removeChild(e);
        form.innerHTML = '<input type="text" name="newText" value="' + oldText + '" />';
        var input = form.getElementsByTagName('input')[0];
        input.select();
        input.onblur = function(){
            parent.insertBefore(e, form);
            parent.removeChild(form);
            try{
                cancel();
            }catch(e){}
        }
        form.onsubmit = function(){
            try{
                parent.insertBefore(e, form);
                e.innerHTML = input.value;
                parent.removeChild(form);
            }catch(e){
            }
            try{
                submit(input.value);
            }catch(e){}
            return false;
        }
    }
};
