/**
 * Utilises scriptaculous to pull data...
 * @author Jonathan Wan
 */

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); };

function jRequest(file) {
	var opt = {
	    method: 'get',
		username: '',
		password: '',
		asynchronous: true,
		
		/** On success, handle event */
	    onSuccess: function(t) {
			var xmlDom = t.responseXML;
			var xmlDoc = xmlDom.documentElement;
	        var thisContentNode = document.getElementById('content');
			var newContentNode;
			/*
			if (xmlDoc.nodeName != 'html') {
				alert('replacing bad');
				newContentNode = Builder.node('div', 'Critical Error: Could not process the requested XML file. The file may be corrupted.');
			}
			else {
				alert('replacing good');
				newContentNode = xmlDom.getElementsByTagName('body').item(0).childNodes.item(1).cloneNode(true);
				alert('new: ' + newContentNode);
			}
			alert(thisContentNode.parentNode);
			thisContentNode.parentNode.replaceChild(thisContentNode, newContentNode);
			alert('replaced');
			*/
	    },
	    // Handle 404
	    on404: function(t) {
	        alert('Error 404: location "' + t.statusText + '" was not found.');
	    },
	    // Handle other errors
	    onFailure: function(t) {
	        alert('Error ' + t.status + ' -- ' + t.statusText);
	    }
	};
	//new Ajax.Request(file, opt);
	new Ajax.Updater('content', file, opt);
};

/* Extend Scriptaculous */

Effect.Unfold = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 100, Object.extend({   
    scaleContent: false,
    scaleY: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({width: '1px', height: '1px'}).show();
    },
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 100, {
      scaleContent: false, 
      scaleX: false,
      scaleFrom: 5,
      scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
          restoreAfterFinish: true,
        afterSetup: function(effect) {
            effect.element.makeClipping().setStyle({height: '1px'}).show(); 
          },  
          afterFinishInternal: function(effect) {
            effect.element.undoClipping().setStyle(oldStyle);
          }
    });
  }}, arguments[1] || {}));
};