function Utils(){
    this.type = "object";
}

Utils.prototype.formToJson = function(elementsSelector){
    var elements = $(elementsSelector);
    var json = "{";
    
    for (var i = 0; i < elements.length; i++) {
		var type = elements[i]["type"];
		var checked = elements[i]["checked"];
        var id = elements[i]["id"];
        var name = elements[i]["name"];
		var value = elements[i]["value"];
		
		// use the group name instead of the id
        if (type == "radio" &&  checked == true)
		    id = name; 
	    
		// skip unselected radio elements
        if (type == "radio" &&  checked == false)
		    continue; 
		
        if (json.length > 1) 
            json += ",";
        
		json += '"' + id + '":"' + encodeURIComponent(value) + '"';
    }
    
    json += "}";
    return json;
}

Utils.prototype.handlePostResponse = function(data, textStatus, callback){
    //var d = JSON.parse(data);
	var d = eval( '(' + data + ')');
    callback(d);
}

Utils.prototype.post = function(handlerUrl, func, elementsSelector, callback){
    $.post(handlerUrl, "func=" + func + "&data=" + (new Utils()).formToJson(elementsSelector), function(data, textStatus){
        (new Utils()).handlePostResponse(data, textStatus, callback);
    }, "text");
}

Utils.prototype.Count = function(obj){
    var count = 0;
    
    for (key in obj) 
        if (obj.hasOwnProperty(key)) 
            count++;
    
    return count;
}
