window.jQuery = window.jQuery || {}; window.jQuery.fn = window.jQuery.fn || {}; jQuery.fn.rpc = function(url, dataType, onLoadCallback, version) { version = version || "1.0"; dataType = dataType || "json"; if(dataType != "json" && dataType != "xml") { new Error("IllegalArgument: Unsupported data type"); } var _self = this; var serializeToXml = function(data) { switch (typeof data) { case 'boolean': return ''+ ((data) ? '1' : '0') +''; case 'number': var parsed = parseInt(data); if(parsed == data) { return ''+ data +''; } return ''+ data +''; case 'string': return ''+ data +''; case 'object': if(data instanceof Date) { return ''+ data.getFullYear() + data.getMonth() + data.getDate() +'T'+ data.getHours() +':'+ data.getMinutes() +':'+ data.getSeconds() +''; } else if(data instanceof Array) { var ret = ''+"\n"; for (var i=0; i < data.length; i++) { ret += ' '+ serializeToXml(data[i]) +"\n"; } ret += ''; return ret; } else { var ret = ''+"\n"; jQuery.each(data, function(key, value) { ret += " "+ key +""; ret += serializeToXml(value) +"\n"; }); ret += ''; return ret; } } } var xmlRpc = function(method, params) { var ret = ''+method+''; for(var i=0; i"; } ret += ""; return ret; } var parseXmlValue = function(node) { childs = jQuery(node).children(); for(var i=0; i < childs.length; i++) { switch(childs[i].tagName) { case 'boolean': return (jQuery(childs[i]).text() == 1); case 'int': return parseInt(jQuery(childs[i]).text()); case 'double': return parseFloat(jQuery(childs[i]).text()); case "string": return jQuery(childs[i]).text(); case "array": var ret = []; jQuery("> data > value", childs[i]).each( function() { ret.push(parseXmlValue(this)); } ); return ret; case "struct": var ret = {}; jQuery("> member", childs[i]).each( function() { ret[jQuery( "> name", this).text()] = parseXmlValue(jQuery("value", this)); } ); return ret; case "dateTime.iso8601": /* TODO: fill me :( */ return NULL; } } } var parseXmlResponse = function(data) { var ret = {}; ret.version = version; jQuery("methodResponse params param > value", data).each( function(index) { ret.result = parseXmlValue(this); } ); jQuery("methodResponse fault > value", data).each( function(index) { ret.error = parseXmlValue(this); } ); return ret; } var rpc_contents = { 'xml':'text/xml' ,'json':'application/json' }; var _rpc = function(method, callback) { var params = []; for (var i=2; i