/* FILLER TEXT 0.1 beta
 * filler_text.js.  Concept/Executive Producer - Silus Grok
 *                  Associate Producer         - Aaron Shafavaloff
 *                  Programming                - Paul Huff
 * 
 * Available under a Creative Commons "Attribution/Share Alike" license:
 * http://creativecommons.org/licenses/by-sa/2.5/
 * 
 * Updates will be available here:
 * http://silusGROK.blogspot.com/
 * 
 */


var paragraph = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

var word_array = paragraph.split(" ");

function generate(num){
  var ret_string = "";
  var start_num = parseInt(Math.round(Math.random() * 1000));
  num = parseInt(num);
  for(var i = start_num; i < start_num + num; i++){
    if(i == start_num){
      var my_word = word_array[i % word_array.length];
      my_word = my_word.substr(0,1).toUpperCase() + my_word.substr(1,my_word.length);
      ret_string += my_word + " ";
    }	
    else{
      ret_string += word_array[i % word_array.length] + " ";
    }
  }
  return ret_string;
}

function parser(val, node){
  if(val=="[FILLER TEXT]"){
    var num = Math.random() * 1000;
    if(node){
      node.innerHTML = generate(num);
      return;
    }
    else {
      return generate(num);
    }
  }
  if(matches = val.match(/\[FILLER TEXT (\d+)\s*w\]/)){
    if(node){
      node.innerHTML = generate(matches[1]);
      return;
    }
    else {
      return generate(matches[1]);
    }
  }
  if(matches = val.match(/\[FILLER TEXT (\d+)\s*x\s*(\d+)\s*w\]/)){
    var my_string = "";
    var my_local_string;
    var nodeName = node.nodeName;
    for(var i = 0; i < matches[1]; i++){
      my_local_string = generate(matches[2]);
      if(node && node.nodeName != 'BODY'){
	var clone = node.cloneNode(false);
	clone.innerHTML = my_local_string;
	node.parentNode.insertBefore(clone, node);
      }
      else {
	my_string += '<p>' + my_local_string + '</p>';
      }
    }
    if(node && node.nodeName != 'BODY'){
      node.parentNode.removeChild(node);
      return;
    }
    else if(node.nodeName == 'BODY'){
      node.innerHTML = my_string;
    }
    else{
      return my_string;
    }
  }
  if(matches = val.match(/\[FILLER TEXT (\d+)\s*\]/)){
    var my_string = "";
    var my_local_string;
    var nodeName = node.nodeName;
    for(var i = 0; i < matches[1]; i++){
      var num = Math.random() * 1000;
      my_local_string = generate(num);
      if(node && node.nodeName != 'BODY'){
	var clone = node.cloneNode(false);
	clone.innerHTML = my_local_string;
	node.parentNode.insertBefore(clone, node);
      }
      else {
	my_string += '<p>' + my_local_string + '</p>';
      }
    }
    if(node && node.nodeName != 'BODY'){
      node.parentNode.removeChild(node);
      return;
    }
    else if(node.nodeName == 'BODY'){
      node.innerHTML = my_string;
    }
    else{
      return my_string;
    }
  }
  if(matches = val.match(/\[FILLER TEXT (\d+)\s*(\w+)\s*x\s*(\d+)\s*w\]/)){
    var my_string = "";
    for(var i = 0; i < matches[1]; i++){
      my_string += "<" + matches[2] + ">" + generate(matches[3]) + "</" 
	+ matches[2] + ">";
    }
    if(node){
      node.innerHTML = my_string;
      return;
    }
    else {
      return my_string;
    }
  }
  if(matches = val.match(/\[FILLER TEXT (\d+)\s*(\w+)\.(\w+)\s*x\s*(\d+)\s*w\]/)){
    var my_string = "";
    for(var i = 0; i < matches[1]; i++){
      my_string += "<" + matches[2] + " class='" + matches[3] + "'>" + 
	generate(matches[4]) + "</" + matches[2] + ">";
    }
    if(node){
      node.innerHTML = my_string;
    }
    else {
      return my_string;
    }
  }
  if(matches = val.match(/\[FILLER TEXT (\d+)\s*(\w+)\s*\]/)){
    var my_string = "";
    for(var i = 0; i < matches[1]; i++){
      var num = Math.random() * 1000;
      my_string += "<" + matches[2] + ">" + generate(num) + "</" 
	+ matches[2] + ">";
    }
    if(node){
      node.innerHTML = my_string;
      return;
    }
    else {
      return my_string;
    }
  }
  if(matches = val.match(/\[FILLER TEXT (\d+)\s*(\w+)\.(\w+)\s*\]/)){
    var my_string = "";
    for(var i = 0; i < matches[1]; i++){
      var num = Math.random() * 1000;
      my_string += "<" + matches[2] + " class='" + matches[3] + "'>" + 
	generate(num) + "</" + matches[2] + ">";
    }
    if(node){
      node.innerHTML = my_string;
    }
    else {
      return my_string;
    }
  }
  return "Couldn't parse.";
}

function replace_me(node){
  var mystring = node.innerHTML;
  if(node.innerHTML){
    if(matches = mystring.match(/^\s*\[FILLER TEXT\s?[\s\w\.]*\]\s*$/g)){
      parser(matches[0], node);    
    }
    else {
      for(var i = 0; i < node.childNodes.length; i++){
	replace_me(node.childNodes[i]);
      }
    }
  }
}

function loremload(){
  replace_me(document.body);  //Walk the dom and parse stuff.
  var mystring = document.body.innerHTML;  //Then, catch any stragglers.
  var matches = mystring.match(/\[FILLER TEXT\s?[\s\w\.]*\]/g);
  for(var i = 0; i < matches.length; i++){
    var replacement = parser(matches[i], false);
    mystring = mystring.replace(matches[i], replacement);
  }
  document.body.innerHTML = mystring;
}
