// TODO: Move global defs to config system getting js-relevant config parameters from server side.
// window.onerror = globalErrorHandler;

/* TODO: Function proxy wont work since onerror is not yet defined
(function() {
    var proxiedError = window.onerror;  
    window.onerror = function() {
	  globalErrorHandler(this, arguments);
	  return proxiedError.apply(this, arguments);
      };
})();
*/

// TODO: Move function to global service
window.errorQueue = Array();
window.holder = new Object();

// Extending String to support formatting
String.prototype.format = function() {
  var pattern = /\{\d+\}/g;
  var args = arguments;
  return this.replace(pattern, function(capture){ return args[capture.match(/\d+/)]; });
}

function globalInit() {
    runUpdateErrorPanel();
    $('errorPanel').setStyle({ 
	    left : '300px', 
	    top : '200px' 
    });

    window.holder.dragErrorPanel = new Draggable('errorPanel', { 
	    ghosting: false, 
	    onEnd : function (obj, mEvent) {
		// TODO: Store in user profile and reuse pos on post; mEvent.clientX,mEvent.clientY;
	    } 
    });

    // If any paste print errors, show panel
    if($('paste-debug-prints')!=null && $('paste-debug-prints').innerHTML.length>0) {
	$('wdgPanel').show();
    }
}

function globalErrorHandler(desc, page, line, chr) {
  queueError(
    '<h3>While running client side javascript an error occurred: </h3>'
    +'<p>Error description: '+desc+'</p>'
    +'<p>Page address: '+page+'</p>'
    +'<p>Line number: '+line+'</p>'
  )
  return true
}

function runUpdateErrorPanel() {
    showQueuedErrors();
    setTimeout(runUpdateErrorPanel,1000)
}

function queueError(msg) {
    window.errorQueue.push(msg);
}

function showQueuedErrors() {
    if(window.errorQueue.length>0) {
	var tempQ = window.errorQueue;
	window.errorQueue = Array(); // Clear queue
	var errorMsg = '<h2>Error message: {0} client side error{1} occurred:</h2>'.format( tempQ.length, (tempQ.length>1?'s':'') );
	for(var i=0;i<tempQ.length;i++) {
	    errorMsg += '<p>{0}</p>'.format(tempQ[i]);
	}	
	showError(errorMsg);
    }
}

function showError(msg) {
    $('errorContent').update($('errorContent').innerHTML+msg);
    $('errorPanel').show();
}

function closeErrorPanel() {
    $('errorPanel').hide();
    $('errorContent').update('');
}

