// Programmed by Shawn Olson http://www.shawnolson.net
// Copyright (c) 2006. All Rights Reserved
// Permission to use the HTML generated from this script
// provided that there is credit given to Shawn Olson
// or there is a link provided to http://www.word-search-maker.webonizer.com

var smoGameType = 'words'; // words | numbers

var smoCharacters = new Array();
var smoWords = new Array();
var smoRows = 10;
var smoCols=10;
var smoFormStep = 1;
var totalEntries = new Array();

function getSmoWords(){
  var wordlist = document.getElementById('gameWords').value;
  
  //var listR = new RegExp(,'');
  wordlist = wordlist.replace('\n',',');
  wordlist = wordlist.replace("\n",',');
  wordlist = wordlist.replace(",  ,",',');
  wordlist = wordlist.replace(", ,",',');
  wordlist = wordlist.replace(",,,,,,,,,,,",',');
  wordlist = wordlist.replace(",,,,,,,",',');
  wordlist = wordlist.replace(",,,,,",',');
  wordlist = wordlist.replace(",,,",',');
  wordlist = wordlist.replace(",,",',');
  smoWords = wordlist.split(',');
  smoWords.sort();
  var w = 0;
  for (w in smoWords){
    if(smoWords[w]=='' || smoWords[w]==' '){
	smoWords.shift();
	
	}
  
  }
  
}



function outputWordlist(type){
 var x=0;
 var div = 10;
   if(type=='preview'){
    lt = '<';
	gt = '>';
  } else {
    lt = '&lt;';
	gt = '&gt;';
  }
  var total = smoWords.length;
  if(total%9==0){
    div = 9;
  }else if(total%8==0){
    div = 8;
  } else if(total%7==0){
    div = 7;
  } else if(total%6==0){
    div = 6;
  } else if(total%5==0){
    div = 5;
  } else if(total%4==0){
    div = 4;
  } else if(total%3==0){
    div = 3;
  } else if(total%2==0){
    div = 2;
  }
  var y = 1;
  
 var output = lt+'table class="wordList"'+gt+lt+'caption'+gt+'Word List'+lt+'/caption'+gt+lt+'tr'+gt+lt+'td'+gt+lt+'ul'+gt;
 for(x in smoWords){
   output+= lt+'li'+gt+lt+'input type="checkbox" id="wordSearchWord'+x+'" onclick="checkoff('+x+')"/'+gt+lt+'label for="wordSearchWord'+x+'" id="wordSearchLabel'+x+'"'+gt+smoWords[x]+lt+'/label'+gt+lt+'/li'+gt;
   if(y%div==0){
      output+=lt+'/ul'+gt+lt+'/td'+gt+lt+'td'+gt+lt+'ul'+gt;
   }
   y++;
 }

 output+=lt+'/ul'+gt+lt+'/td'+gt+lt+'/tr'+gt+lt+'/table'+gt;
 return output;
}

function checkInteger(theElement){
 output = true;
 var theE = document.getElementById(theElement);
 var intval = (theE.value);
 var strValidChars = "0123456789";
 if(intval<5 || intval>30){
  output = false;
 } 
 if(output==true){
   for (var i = 0; i < intval.length; i++){
      strChar = intval.charAt(i);
      if (strValidChars.indexOf(strChar) == -1){    
		 output = false;
      }
   }
 }
 if (output==false){
 alert('Your columns and rows must be numbers between 5 and 30');
	theE.focus();

 }
}



function allowedCharacters(){
  output = '';
  var list;
  switch(smoGameType){
   case 'words':
    list = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z';
	list = list.toUpperCase();
    break;
   case 'numbers':
    list = '1,2,3,4,5,6,7,8,9,0';
    break;
  }
  smoCharacters = list.split(','); 
}

function generateLetterForm(r,c){
  var x;
  output = '<select name="r'+r+'c'+c+'" id="r'+r+'c'+c+'"><option value="?" style="color:blue;font-weight:bold">?</option>';
  for(x in smoCharacters){
  output+= '<option value="'+smoCharacters[x]+'">'+smoCharacters[x] + '</option>';
  }
  output+='</select>';
  return output;
}

function generateLetterCell(r,c,type){
  var x = 'r'+r+'c'+c;
  var val = document.getElementById(x).value;
  if(val=='?'){theClass='wordSearchRandom'; val = randomLetter(document.getElementById('gameWords').value);}else{theClass='wordSearchProper';}
  if(type=='preview'){
    lt = '<';
	gt = '>';
  } else {
    lt = '&lt;';
	gt = '&gt;';
  }
  output = lt+'td'+gt+lt+'div id="cr'+r+'cc'+c+'" class="'+theClass+'" onclick="clickThis(\'cr'+r+'cc'+c+'\')"'+gt;
  output+=val;
  output+=lt+'/div'+gt;
  output+=lt+'/td'+gt;
  return output;
}

function generateGame(type,webonizer){
 getSmoWords();
 if(document.getElementById('gameWords').value.length < 15){ alert('Your word list is too small.'); return;}
 if(smoWords.length < 4){ alert('You must have at least four words in your word list.'); return;}
 var t = 1;
 var c = 1;
 var r = 1;
  if(type=='preview'){
    lt = '<';
	gt = '>';
  } else {
    lt = '&lt;';
	gt = '&gt;';
  }
 
 output = lt+'div class="myWordSearchContainer" id="myWordSearchContainer"'+gt+lt+'h1'+gt+document.getElementById('gameTitle').value+lt+'/h1'+gt+lt+'table class="myWordSearch"'+gt+lt+'caption'+gt+document.getElementById('gameTitle').value+lt+'/caption'+gt+lt+'tbody'+gt+lt+'tr'+gt;
 while(t <= smoRows * smoCols){
   output += generateLetterCell(r,c,type);
   if(c % smoCols == 0 && (t!=((smoRows * smoCols)-1))){
     output += lt+'/tr'+gt+lt+'tr'+gt;
	 c = 1;
	 r++;
   } else {c++;}
   t++;
 }
 output += lt+'/tr'+gt+lt+'/tbody'+gt+lt+'/table'+gt+lt+'div class="mywordbox"'+gt+lt+'form action="javascript:return"'+gt;
 output+=outputWordlist(type);
 output+=lt+'button onclick="changecss(\'.wordSearchRandom\',\'backgroundColor\',\'black\')"'+gt+'Show Answers'+lt+'/button'+gt;
 output+=lt+'button onclick="changecss(\'.wordSearchRandom\',\'backgroundColor\',\'white\')"'+gt+'Hide Answers'+lt+'/button'+gt;
 output+=lt+'/form'+gt+lt+'/div'+gt+lt+'hr/'+gt+lt+'p style="text-align:center"'+gt+'This Word Search was created using the '+lt+'br/'+gt+lt+'b'+gt+'Webonizer Word Search Maker'+lt+'/b'+gt+' at'+lt+'br/'+gt+lt+'a href="http://www.word-search-maker.webonizer.com"'+gt+'www.word-search-maker.webonizer.com'+lt+'/a'+gt+lt+'br/'+gt+'Programmed by '+lt+'a href="http://www.shawnolson.net"'+gt+'Shawn Olson'+lt+'/a'+gt+'.'+lt+'/p'+gt+lt+'/div'+gt;
 if(type=='preview'){
   var doc = document.getElementById('previewBox').innerHTML = output;
 }
 if(type=='html'){


 
 
  if(webonizer==false){
   output = '<code>&lt;html&gt;&lt;head&gt;&lt;title&gt;'+document.getElementById('gameTitle').value+'&lt;/title&gt;'+lt+'link rel="favicon" href="http://www.word-search-maker.webonizer.com/favicon.ico"/'+gt+lt+'link rel="stylesheet" type="text/css" href="http://www.word-search-maker.webonizer.com/word_search_style/wordSearchMaker.css"/'+gt+lt+'link rel="stylesheet" type="text/css" href="http://www.word-search-maker.webonizer.com/word_search_style/wordSearch.css" media="print"/'+gt+lt+'script type="text/javascript" src="http://www.word-search-maker.webonizer.com/word_search_scripts/myWordSearch.js"'+gt+lt+'/script'+gt+'&lt;/head&gt;&lt;body&gt;'+output+'&lt;/body&gt;&lt;/html&gt;</code>';} else {

     output = '<h4 style="color:black;font-weight:bold">Meta</h4><code>'+lt+'link rel="stylesheet" type="text/css" href="http://www.word-search-maker.webonizer.com/word_search_style/wordSearchMaker.css"/'+gt+lt+'link rel="stylesheet" type="text/css" href="http://www.word-search-maker.webonizer.com/word_search_style/wordSearch.css" media="print"/'+gt+lt+'script type="text/javascript" src="http://www.word-search-maker.webonizer.com/word_search_scripts/myWordSearch.js"'+gt+lt+'/script'+gt+'</code><h4 style="color:black;font-weight:bold">Article</h4><code>'+output+'</code>';
   }


   var doc = document.getElementById('htmlBox').innerHTML = output;
 }
 //doc.focus();
}
function doNothing(){
//function added because Firefox is retarded
return;
}

function generateGameForm(){
 updateGameType();
 allowedCharacters();
 smoFormStep = 2;
 var t = 1;
 var c = 1;
 var r = 1;
 output = '<form action="javascript:doNothing()"><fieldset><legend>Word Search Form</legend><table><caption>Add Words<br/>Leave un-used fields as "?"</caption><tbody><tr>';
 while(t <= smoRows * smoCols){
 
   
   output += '<td>'+generateLetterForm(r,c)+'</td>';
 
   if(c % smoCols == 0 && (t!=((smoRows * smoCols)-1))){
     output += '</tr><tr>';
	 c = 1;
	 r++;
   } else {c++;}
   t++;
   
 }

 output += '</tr></tbody></table></fieldset><fieldset><legend>Game Information</legend><label for="gameTitle">Game Title</label><input type="text" name="gameTitle" id="gameTitle" value="Word Search Title"/><br/><label for="gameWords">Word List</label><br/><textarea name="gameWords" id="gameWords" rows="6" cols="30" title="Enter a comma-separated list of words. Letters, numbers, commas and spaces only!"></textarea></fieldset><fieldset><legend>Actions</legend><button onclick="generateGame(\'preview\',false)">Generate Preview</button><button onclick="generateGame(\'html\',false)">Generate Game</button><button onclick="generateGame(\'html\',true)">Format For Webonizer Article</button></fieldset></form>';
  //<button onclick="newGameForm()">New Game</button>
 document.getElementById('formBox').innerHTML = output;
 document.getElementById('functionality').style.display = 'block';
}


function updateGameType(){
 smoGameType = document.getElementById('gameType').value;
 smoCols = document.getElementById('smoCols').value;
 smoRows = document.getElementById('smoRows').value;
}

    function randomLetter(list){
	 list = stripCharacter(stripCharacter(stripCharacter(list, ','), ' '), "\n");
  list = list.replace('\n',',');
  list = list.replace("\n",',');
	 var randLetter = list.charAt(Math.round(Math.random() * list.length));
	 randLetter = randLetter.toUpperCase();
	 if(randLetter == ''){randLetter = String.fromCharCode(65 + Math.round(Math.random() * 25));}
     return randLetter;
    }

	function stripCharacter(words,character) {
	  var spaces = words.length;
	  for(var x = 1; x<spaces; ++x){
	   words = words.replace(character, "");   
	 }
	 return words;
    }
