function widget_loaded(responseText, textStatus, XMLHttpRequest) {
	var sId = $(this).attr('id');
	var asId = sId.split("_");
	var sWidgetType = asId[0];
	var sWidgetKey = asId[1];
	var sScriptName = "/js/widget_loaded/" + sWidgetType + "/" + sWidgetKey;

	var bScriptLoaded = false;
	//$('head script').each(function() {
	//	if ($(this).attr('src') != undefined && $(this).attr('src').indexOf(sScriptName) != -1) bScriptLoaded = true;
	//});

	if (!bScriptLoaded) {
		sScriptName += '/#' + new Date().getTime();
		var head = document.getElementsByTagName('head')[0];
		var script = document.createElement('script');
		script.src = sScriptName;
		script.type = 'text/javascript';
		head.appendChild(script);
		var newLine = document.createTextNode("\n");
		head.appendChild(newLine);
	}
}

function refresh_widgets( $action ){
  $('.widget').each(function(){
    var sId = $(this).attr('id');
    var asId = sId.split("_");
    var sWidgetType = asId[0];
    var sWidgetKey = asId[1];
    $(this).load("/" + sWidgetType + "/show_widget/" + sWidgetKey + '/#' + new Date().getTime(), $action, widget_loaded);
  });
}

jQuery.createXMLDocument = function( s ) {
  var browserName = navigator.appName;
  var xmlDoc;
  if ( browserName == "Microsoft Internet Explorer" ) {
    xmlDoc = new ActiveXObject( "Microsoft.XMLDOM" );
    xmlDoc.async = "false";
    xmlDoc.loadXML( s );
  } else {
    xmlDoc = ( new DOMParser() ).parseFromString( s, "text/xml" );
  }
  return xmlDoc;
}

function xmlrpc( $method, $parameters, $success_callback ) {
  var $xmlstring = '<?xml version="1.0"?>';
  $xmlstring += '<methodCall>';
  $xmlstring += ' <methodName>' + $method + '</methodName>';
  $xmlstring += ' <params>';
  $xmlstring += '   <param>';
  $xmlstring += '     <value>';
  $xmlstring += '       <struct>';

  jQuery.each($parameters, function(key, val) {
    $xmlstring += '         <member>';
    $xmlstring += '           <name>' + key + '</name>';
    $xmlstring += '           <value>' + val + '</value>';
    $xmlstring += '         </member>';
  });

  $xmlstring += '       </struct>';
  $xmlstring += '     </value>';
  $xmlstring += '   </param>';
  $xmlstring += ' </params>';
  $xmlstring += '</methodCall>';

  var xmlDoc = $.createXMLDocument( $xmlstring );

  $.ajax({
    url: "/xmlrpc",
    type: "POST",
    processData: false,
    contentType: "text/xml",
    data: xmlDoc,
    final_success: $success_callback,
    success: xmlrpc_callback
  });
}

function xmlrpc_callback( data )
{
  if(typeof(data) == 'string') {
    // Antagligen felmeddelande
  } else if( $("fault", data).size() ) {
    // Definitivt ett felmeddelande
/*
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>1</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>This is not a known method for this XML-RPC Server</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>
*/
  } else {
    // Inget fel
    this.final_success( data );
  }
}



function display_xml( data ){
  $dialog = $('#dialog');
  if( $dialog.size() == 0 ) {
    $('body').append('<div id="dialog" title="Resultat"></div>');
    $dialog = $('#dialog');
  }
  $dialog.dialog();

  var xmlString  = '';
  if(typeof(data) == 'string') {
    xmlString = data;
  } else {
    if( data.xml ) {
      xmlString += data.xml;
    } else {
      xmlString = (new XMLSerializer()).serializeToString(data);
    }
  }

  xmlString.replace(/\&/g, '&amp;');
  xmlString.replace(/\</g, '&lt;');
  xmlString.replace(/\>/g, '&gt;');
  $dialog.text(xmlString);

  $dialog.dialog('open');
/*
*/
}