Array.prototype.______array = '______array';
var JSON = {
    org: 'http://www.JSON.org',
    copyright: '(c)2005 JSON.org',
    license: 'http://www.crockford.com/JSON/license.html',

    stringify: function (arg) {
        var c, i, l, s = '', v;
        switch (typeof arg) {
         case 'object':if (arg) {if (arg.______array == '______array') {for (i = 0; i < arg.length; ++i) {v = this.stringify(arg[i]);if (s) {s += ',';}s += v;}return '[' + s + ']';} else if (typeof arg.toString != 'undefined') {for (i in arg) {v = arg[i];if (typeof v != 'undefined' && typeof v != 'function') {v = this.stringify(v);if (s) {s += ',';}s += this.stringify(i) + ':' + v;}}return '{' + s + '}';}}return 'null';
         case 'number': return isFinite(arg) ? String(arg) : 'null';
         case 'string': l = arg.length;s = '"';for (i = 0; i < l; i += 1) {c = arg.charAt(i);if (c >= ' ') {if (c == '\\' || c == '"') {s += '\\';}s += c;} else {switch (c) {case '\b':s += '\\b';break;case '\f':s += '\\f';break;case '\n':s += '\\n';break;case '\r':s += '\\r';break;case '\t':s += '\\t';break;default:c = c.charCodeAt();s += '\\u00' + Math.floor(c / 16).toString(16) +(c % 16).toString(16);}}}return s + '"';case 'boolean':return String(arg);default:return 'null';}
        },
    parse: function (text) {
        var at = 0;var ch = ' ';
        function error(m) {throw {name: 'JSONError',message: m,at: at - 1,text: text};}
        function next() {ch = text.charAt(at);at += 1;return ch;}function white() {while (ch != '' && ch <= ' ') {next();}}
        function str() {var i, s = '', t, u;if (ch == '"') {outer:while (next()) {if (ch == '"') {next();return s;} else if (ch == '\\') {switch (next()) {case 'b':s += '\b';break;case 'f':s += '\f';break;case 'n':s += '\n';break;case 'r':s += '\r';break;case 't':s += '\t';break;case 'u':u = 0;for (i = 0; i < 4; i += 1) {t = parseInt(next(), 16);if (!isFinite(t)) {break outer;}u = u * 16 + t;}s += String.fromCharCode(u);break;default:s += ch;}} else {s += ch;}}}error("Bad string");}
        function arr() {var a = [];if (ch == '[') {next();white();if (ch == ']') {next();return a;}while (ch) {a.push(val());white();if (ch == ']') {next();return a;} else if (ch != ',') {break;}next();white();}}error("Bad array");}
        function obj() {var k, o = {};if (ch == '{') {next();white();if (ch == '}') {next();return o;}while (ch) {k = str();white();if (ch != ':') {break;}next();o[k] = val();white();if (ch == '}') {next();return o;} else if (ch != ',') {break;}next();white();}}error("Bad object");}
        function num() {var n = '', v;if (ch == '-') {n = '-';next();}while (ch >= '0' && ch <= '9') {n += ch;next();}if (ch == '.') {n += '.';while (next() && ch >= '0' && ch <= '9') {n += ch;}}if (ch == 'e' || ch == 'E') {n += 'e';next();if (ch == '-' || ch == '+') {n += ch;next();}while (ch >= '0' && ch <= '9') {n += ch;next();}}v = +n;if (!isFinite(v)) {error("Bad number");} else {return v;}}
        function word() {switch (ch) {case 't': if (next() == 'r' && next() == 'u' && next() == 'e') {next();return true;}break;case 'f': if (next() == 'a' && next() == 'l' && next() == 's' && next() == 'e') {next();return false;}break;case 'n': if (next() == 'u' && next() == 'l' && next() == 'l') {next();return null;}break;}error("Syntax error");}
        function val() {white();switch (ch) {case '{':return obj();case '[':return arr();case '"':return str();case '-':return num();default:return ch >= '0' && ch <= '9' ? num() : word();}}
        return val();
    }
};


function display(what,where){
  if(!where){
    var where = 'message_box';
  }
  if(document.getElementById(where)){
    document.getElementById(where).innerHTML = what;
  }
}
function addEvent(obj, evType, fn){if (obj.addEventListener){obj.addEventListener(evType, fn, false);return true;}else if(obj.attachEvent){var r = obj.attachEvent("on"+evType, fn);return r;}else{return false;}}
function findPosX(obj){var curleft=0;if(obj.offsetParent){while(obj.offsetParent){curleft+=obj.offsetLeft;obj=obj.offsetParent;}}else if(obj.x){curleft+=obj.x;}return curleft;}
function findPosY(obj){var curtop=0;if(obj.offsetParent){while(obj.offsetParent){curtop+=obj.offsetTop;obj=obj.offsetParent;}}else if(obj.y){curtop+=obj.y;}return curtop;}

function in_list(list,findthis){for(var i=0;i<list.length;i++){if(list[i]==findthis){return i}}return -1}
function join_lists(l1,l2){var f=[];for(var i=0;i<l1.length;i++){f.push(l1[i]);}for(var i=0;i<l2.length;i++){f.push(l2[i]);}return f}
function shuffle(l){
  // Shuffles a list!
  var x = new Array(l.length);
  for(var i=0;i<x.length;i++){
    x[i] = i;
  }
  var z = 0,r = 0,t = [];
  for(var e=0;e<x.length;e++){
    z = 0;
    while(z==0){
      r=Math.floor(Math.random()*x.length)
      if(in_list(t,x[r])==-1){
        t.push(x[r])
        z=1
      }
    }
  }
  for(var i=0;i<t.length;i++){
    x[i]=l[t[i]]
  }
  return x
}

function toggle(szDivID,onoff){var obj=document.getElementById(szDivID).style;var isV=obj.visibility=="hidden"?0:1;obj.display=(onoff?(onoff=="on"?"inline":"none"):(isV?"none":"inline"));obj.visibility=(onoff?(onoff=="on"?"visible":"hidden"):(isV?"hidden":"visible"));}
function getHTTPObject() { var xmlhttp; /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } return xmlhttp; }
var http = getHTTPObject(); // We create the HTTP Object

function fade(elem_name,fading,percent,increase,delay,onoff,target){
  var elem = document.getElementById(elem_name);
  if(!fading){if(onoff=="on"){toggle(elem_name,'on')}window.setTimeout("fade('"+elem_name+"',1,"+percent+","+increase+","+delay+",'"+onoff+"',"+target+")",delay);display("Fading");}
  else{
    percent += increase;
    if(percent > 100 || percent < 0 || ( increase < 0 && percent < target ) || ( increase > 0 && percent > target ) ){
      if(increase<0){
        percent = percent<target?target:1;
      }
      else if(increase>0){
        percent = percent>target?target:100;
      }
      fading = 0;
      if(onoff=="off"){toggle(elem_name,'off')}
      display("Done Fading")
    }
    else{fading = 1;display("Fading: "+percent)}
    if(elem.filters){elem.filters.alpha.opacity = percent;}
    else if(elem.style.opacity){elem.style.opacity = percent / 100;}
    else{elem.style.MozOpacity = percent / 100;}
    if(fading == 1){window.setTimeout("fade('"+elem_name+"',1,"+percent+","+increase+","+delay+",'"+onoff+"',"+target+")",delay);}
  }
}

function shade(elem_name,start,finish,increase,delay,code,shading,position){
  //alert(elem_name +" "+ start +" "+ finish +" "+ increase +" "+ delay +" "+ code +" "+ shading +" "+ position);
  function done(){
    position=finish;
    shading = 0;
    display("Done Shading");
    eval(code);
  }
  var elem = document.getElementById(elem_name);
  if(!shading){
    window.setTimeout("shade('"+elem_name+"',"+start+","+finish+","+increase+","+delay+","+code+",1,"+start+")",delay);
    elem.style.height=start;
    display("Shading");
  }
  else{
    position += increase;
    if(increase<0&&shading){if(position<=finish){done()}}
    else if(increase>=0&&shading){if(position>=finish){done()}}
    else{shading = 1;display("Shading: "+position)}
    elem.style.height = position;
    if(shading == 1){
      window.setTimeout("shade('"+elem_name+"',"+start+","+finish+","+increase+","+delay+","+code+","+shading+","+position+")",delay);
    }
  }
}

function move(elem_name,start,finish,delay,moving,position,ix,iy){
  var elem = document.getElementById(elem_name);
  if(!moving){
    start = [elem.style.left,elem.style.top]
    var ix = (finish[0]-start[0])/10;
    var iy = (finish[1]-start[1])/10;
    elem.style.left = start[0];
    elem.style.top  = start[1];
    window.setTimeout("move('"+elem_name+"',0,0,"+delay+",1,0,"+ix+","+iy+")",delay);
  }
  else{
    position++;
    elem.style.left += position*ix;
    elem.style.top  += position*iy;
    if(position>=10){moving=0;display("Done")}
    else{moving = 1;}
    if(moving == 1){
      window.setTimeout("move('"+elem_name+"',0,0,"+delay+",1,"+position+","+ix+","+iy+")",delay);
    }
  }
}

