var xyenv = { }

function xyScriptEval(code) {
  var xy = new XY(xyenv, [], new Queue());
  var ast = parse(tokenize(code));
  xy.y.enqueueHeads(ast);
  while(xy.y.getSize() > 0)
    xy.eval1();
}

(function() {
function findLang(scp, typ) {
  var code = [];
  for(var i=0; i < scp.length; ++i) {
    if(scp[i].type.toLowerCase()==typ) {
      code.push(scp[i].text);
    }
  }
  return code;
}

function addScript(par, code) {
  var scp = document.createElement("script");
  scp.type = "text/javascript";
  scp.text = code;
  par.appendChild(scp);
}

function compileAll(typ, comp) {
  var scp = document.getElementsByTagName("script");
  if(scp.length > 0) {
    var par = scp[0].parentNode;
    var code = findLang(scp,typ);
    for(var i=0; i < code.length; ++i) {
     addScript(par, comp(code[i]));
    }
  }
}

function xytrim(str) {
  return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

$(document).ready(function() {
 compileAll("text/x-xy", function(code) {
     var lines = code.split("\n");
     var r = [];
     for(var i=0; i < lines.length; ++i) {
       if(xytrim(lines[i]).length > 0) {
         r.push("xyScriptEval('" + lines[i].replace(/\\/g,"\\\\") + "');");
         }
      }
      return r.join("\n");
      });
});
})();
