window.onerror = function (msg, url, line) {
  message = 'Error message: ' + msg + '\nURL: ' + url + '\nLine Number: ' + line;
  new Ajax.Request('/sixbreak/jserror', {
		  asynchronous:false,
		  method:"post",
		  parameters: "error=" + message
  });
 return true;
}

var quiz = false;
var pe = false;
var answered = false;
var selected_answer = false;

var setSeverity = function(s) {
  if($('severity_')) {
    $('severity_').writeAttribute('value', value = s);
    $('severity_scale').className = ('severity_' + s);
    //alert($('severity_').readAttribute('value'));
    return false;
  }
}

var setSeverityOver = function(s) {
  $('severity_scale').addClassName('severity_' + s + '_over');
}

var setSeverityOut = function(s) {
  $('severity_scale').removeClassName('severity_' + s + '_over');
}

function quiz_new() {
  quiz = true;
  Event.observe(document, 'keypress', function(e) {observe_keypress(e);});
	window.scrollTo(0, 0);
}

function quiz_destroy() {
  if ($('quiz_wrapper')) $('quiz_wrapper').remove();
  if ($('modal_bg')) $('modal_bg').remove();
  Event.stopObserving(document, 'keypress');
  quiz = false;
  try { comet.subscribe(); } catch(e) {}
}

var answer_array;
function do_answer(element, controller) {
  if (controller === undefined )
    controller = 'games';

  if(answered == false) {
	  answered = true;
	  selected_answer = element.id.substr(6);

    new Ajax.Request('/' + controller + '/answer', {
			  asynchronous:false,
			  method:"post",
			  parameters: "id=" + $('answer').id.value + "&answer=" + selected_answer + "&" + answer_array,
          onSuccess: function(){ '$("answer").disable()'; },
          onFailure: function(){ alert('Fehler in xhr /' + controller + '/answer') } });
  }
}

var observe_keypress = function(e) {
  var key_pressed = false;
  if (!e)  //ie
    e = window.event;

  if (e.which) {
    key_pressed = e.which;
  }
  else if (e.keyCode) { //ie
    key_pressed = e.keyCode;
  }
	
  //simplify?
  var wanted_keys = new Array(49, 50, 51, 52, 32, 46, 97, 100, 103); // 1,2,3,4,a,d,g
  var key_values = new Hash();
  key_values.set(49, 1);
  key_values.set(50, 2);
  key_values.set(51, 3);
  key_values.set(52, 4);
  key_values.set(46, 1);
  key_values.set(32,1 );
  key_values.set(97, 2);
  key_values.set(100, 3);
  key_values.set(103, 4);


  if (wanted_keys.indexOf(key_pressed) != -1) {
    var answer_idx = key_values.get(key_pressed);
    // alert('key_pressed: ' + key_pressed + ' translated key_value: ' + answer_idx);
    if (navigator.userAgent.indexOf('Internet Explorer') > -1 || navigator.userAgent.indexOf('MSIE') > -1) {
      spans = document.getElementsByTagName('span');
      wanted_name = answer_name_with_index(answer_idx);
      for( var i=0; i<= spans.length;i++) {
        if(spans[i].name == wanted_name) {
         supplied_answer = spans[i];
          break;
       }
      }
    } else {
      supplied_answer = document.getElementsByName(answer_name_with_index(answer_idx))[0];
    }
    if($('answer') && key_pressed)
      do_answer(supplied_answer);
  }
}

function answer_name_with_index(index) {
	return 'answer_' + (index - 1);
}

function update_user_points(points) {
  if ($('userhomstatisticbox')) {
    new Ajax.Updater('userhomstatisticbox', '/_user_home_statisticsbox');
  }
}

/* prototype.js extensions */
// Extension to Ajax allowing for classes of requests of which only one (the latest) is ever active at a time
// - stops queues of now-redundant requests building up / allows you to supercede one request with another easily.

// just pass in onlyLatestOfClass: 'classname' in the options of the request

Ajax.currentRequests = {};

Ajax.Responders.register({
  onCreate: function(request) {
    if (request.options.onlyLatestOfClass && Ajax.currentRequests[request.options.onlyLatestOfClass]) {
      // if a request of this class is already in progress, attempt to abort it before launching this new request
      try { Ajax.currentRequests[request.options.onlyLatestOfClass].transport.abort(); } catch(e) {}
    }
    // keep note of this request object so we can cancel it if superceded
    Ajax.currentRequests[request.options.onlyLatestOfClass] = request;
  },
  onComplete: function(request) {
    if (request.options.onlyLatestOfClass) {
      // remove the request from our cache once completed so it can be garbage collected
      Ajax.currentRequests[request.options.onlyLatestOfClass] = null;
    }
  }
});

/**
 * Ajax.Request.abort
 * extend the prototype.js Ajax.Request object so that it supports an abort method
 */
Ajax.Request.prototype.abort = function() {
    // prevent and state change callbacks from being issued
    this.transport.onreadystatechange = Prototype.emptyFunction;
    // abort the XHR
    this.transport.abort();
    // update the request counter
    Ajax.activeRequestCount--;
};
/* /prototype.js extensions */
