EVR.Color = function(color)
{
   this.set_rgb(color);
}
EVR.Color.prototype.set_rgb = function(color)
{
   if (typeof color == "object")
   {
      this.rgb = color;
   }
   else if (color.slice(0, 3) == "rgb")
   {
      this.rgb = this.extract_rgb_from_tuple(color);
   }
   else
   {
      this.rgb = this.extract_rgb_from_hex_string(color);
   }
}
EVR.Color.prototype.extract_rgb_from_tuple = function(color)
{
   var rgb = color.match(/\d+/g);
   return [+rgb[0], +rgb[1], +rgb[2]];
}
EVR.Color.prototype.extract_rgb_from_hex_string = function(color)
{
   var r = parseInt(color.slice(1, 3), 16);
   var g = parseInt(color.slice(3, 5), 16);
   var b = parseInt(color.slice(5, 7), 16);
   return [r, g, b];
}
EVR.Color.prototype.get_string = function()
{
   var r = parseInt(this.rgb[0]);
   var g = parseInt(this.rgb[1]);
   var b = parseInt(this.rgb[2]);
   return "rgb(" + r + "," + g + "," + b + ")";
}
EVR.Color.prototype.toString = function()
{
   return "[object EVR.Color]";
}
Map = function(parent, colors, beams)
{
   this.apply_style = apply_style;
   this.build_map = build_map;
   this.advance_indicator = advance_indicator;
   this.get_color = get_color;
   this.determine_beam_color = determine_beam_color;
   this.determine_beam_width = determine_beam_width;
   this.determine_beam_lane = determine_beam_lane;
   this.element = document.createElement("table");
   this.tr = document.createElement("tr");
   this.index = 0;
   this.element.appendChild(this.tr);
   this.apply_style();
   this.build_map();
   this.append_self(parent);

   function apply_style()
   {
      this.element.style.position = "absolute";
      this.element.style.left = "0px";
      this.element.style.top = "0px";
      this.element.style.width = "100%";
      this.element.setAttribute("cellspacing", "0");
      this.element.setAttribute("cellpadding", "0");
   }
   function build_map()
   {
      var ii = 0;
      for (; BEAM_PROPERTIES[ii]; ii++)
      {
	 var cell = document.createElement("td");
	 var course = document.createElement("div");
	 var indicator = document.createElement("div");
	 cell.style.verticalAlign = "top";
	 course.style.height = MAP_COURSE_HEIGHT + "px";
	 course.style.marginBottom = MAP_COURSE_MARGIN + "px";
	 course.style.backgroundColor = this.determine_beam_color(ii);
	 indicator.style.height = MAP_INDICATOR_HEIGHT + "px";
	 cell.appendChild(course);
	 cell.appendChild(indicator);
	 this.tr.appendChild(cell);
      }
      this.advance_indicator();
   }
   function advance_indicator()
   {
      var nodes = this.tr.childNodes;
      var index = this.index++;
      if (index > 0)
      {
	 var previous_cell = nodes[index-1].getElementsByTagName("div");
	 previous_cell[1].style.backgroundColor = "";
	 previous_cell[1].style.borderBottom = 0;
      }
      var current_cell = nodes[index].getElementsByTagName("div");
      current_cell[1].style.backgroundColor = MAP_INDICATOR_COLOR;
      current_cell[1].style.borderBottom = MAP_INDICATOR_BORDER;
   }
   function get_color(index)
   {
      return colors[index];
   }
   function determine_beam_color(index)
   {
      return colors[parseInt(beams[index][0])];
   }
   function determine_beam_lane(index)
   {
      return parseInt(beams[index][1])-1;
   }
   function determine_beam_width(index)
   {
      return parseInt(beams[index][2]) * BEAM_WIDTH_MULTIPLIER;
   }
}

Map.prototype = new Element;
Math.get_random_number = function(min, max)
{
   return Math.random() * (max - min) + min;
}
Math.get_random_int = function(min, max)
{
   return Math.floor(Math.random() * (max - min + 1)) + min;
}
function Course(parent, map)
{
   this.apply_style = apply_style;
   this.initialize_beams = initialize_beams;
   this.element = document.createElement("div");
   this.append_self(parent);
   this.apply_style();
   this.initialize_beams();
   function apply_style()
   {
      var background_color = map.determine_beam_color(0);
      this.element.style.backgroundColor = background_color;
      this.element.style.width = parent.clientWidth + "px";
      this.element.style.height = parent.clientHeight * (5/16);
      this.element.style.fontSize = "0px";
      this.element.style.overflow = "hidden";
      this.element.style.marginTop = parent.clientHeight * (5/23);
      this.element.style.borderTopWidth = BEAM_HEIGHT/2 + 1 + "px";
      this.element.style.borderBottomWidth = 2 + "px";
      this.element.style.borderStyle = "solid";
      this.element.style.borderColor = background_color;
   }
   function initialize_beams()
   {
      var ii = 0, jj = 0;
      var initial_color = map.determine_beam_color(0);
      var color = initial_color;
      var lane = map.determine_beam_lane(0);
      var width = map.determine_beam_width(0);
      var x = EMOTICON_START_X + EMOTICON_WIDTH + BEAM_START_OFFSET;
      while (ii++ < BEAM_COUNT)
      {
	 new Beam(this.element, color, width, lane++, x);
	 if (lane > BEAM_COUNT-1) lane = 0;
	 color = map.get_color(jj++);
	 if (color == initial_color) color = map.get_color(jj++);
      }
   }
}

Course.prototype = new Element;
EVR.Requester = function(path, query, text, post)
{
   this.path = path;
   this.query = query;
   this.text = text || false;
   this.set_method(post);
   this.build();
}
EVR.Requester.prototype.set_method = function(post)
{
   var method = "GET";
   if (post == true)
   {
      method = "POST";
   }
   this.method = method;
}
EVR.Requester.prototype.build = function()
{
   if (window.XMLHttpRequest)
   {
      this.request = new XMLHttpRequest();
   }
   else
   {
      this.request = new ActiveXObject("Microsoft.XMLHttp");
   }
}
EVR.Requester.prototype.execute = function()
{
   var request = this.request;
   var method = this.method;
   var url = this.build_url();
   var parameters = null;
   request.open(method, url, false);
   if (method == "POST")
   {
      var mime = "application/x-www-form-urlencoded";
      parameters = this.query;
      request.setRequestHeader("Content-type", mime);
   }
   request.send(parameters);
   return this.text ? request.responseText : request.responseXML;
}
EVR.Requester.prototype.build_url = function()
{
   var url = this.path + "?" + +new Date;
   if (this.method == "GET" && !!this.query)
   {
      url += "&" + this.query;
   }
   return url;
}
EVR.Requester.prototype.toString = function()
{
   return "[object EVR.Requester]";
}
54.224.108.238
54.224.108.238
54.224.108.238
 
June 5, 2016

↠ RSS Feed ↞