<!--

// Scrabble.js - by Kate Spanos
// September 2006
// Updated January 2008 (clear solution div when the word is erased from input field)
// Updated December 2008 (added features, updated UI and design)
// Updated April 2010 (added word validation/dictionary check)
// thekatespanos.com

var lang = $.url.param('lang') ? $.url.param('lang') : 'en';

//dealing with wordswithfriends.net referred visitors
if (document.referrer) {
	var refer = document.referrer;
	if (refer.search("wordswithfriends")) {
		lang = 'wwf';
		bonusPts = 35;
		$('#bonusPts').text('35');
	}
}
$('#wwf-note').hide();

$('#lang option[value="' + lang + '"]').attr('selected','selected');
var initWord = $.url.param('word') ? $.url.param('word') : 0;
var lettervalues = new Array();

Array.prototype.indexOf = function(value){
  var i = 0;
  while(i < this.length){
    if(this[i] == value) return i;
    i++;
  }
  return -1;
}

function setNth(v) {
if (v == 1) { $('#nth').html(' <sup>st</sup> letter'); }
else if (v == 2) { $('#nth').html(' <sup>nd</sup> letter'); }
else if (v == 3) { $('#nth').html(' <sup>rd</sup> letter'); }
else { $('#nth').html(' <sup>th</sup> letter'); }
}

Array.prototype.inArray = function (value)
{
var i;
for (i=0; i < this.length; i++) {
	if (this[i] == value) {	return true; }
}
return false;
}

function toggleDouble(val) {
	if (lettervalues[val] == 2) { lettervalues[val] = 1; }
	else { lettervalues[val] = 2; }
}
function toggleTriple(val) {
	if (lettervalues[val] == 3) { lettervalues[val] = 1; }
	else { lettervalues[val] = 3; }
}

function scrabblify() {
	$('.validation').html('');
	
	if ($('#lang').val()) { lang = $('#lang').val(); }
	else { lang = 'en'; }
	if (lang == 'wwf') { bonusPts = 35;$('#bonusPts').text('35');$('#wwf-note').hide(); }
	else { bonusPts = 50;$('#bonusPts').text('50'); }

	var tiles = eval(lang+'_tiles');
	var values = eval(lang+'_values');

	var word = $('#word').val();
	word = word.toUpperCase();
	var w = new Array();
	w = word.split(''); //have to convert string to an array to use [] indexing in IE
	//var cardinal = $('#cardinal').val()-1; //this was used for old cardinal lettervalue

	var calculated = 0;

	if (lang == 'es') {
		var tiled_word = new Array();
		var m = -1; //use this variable to track where we are in the new tiled_word array (while n tracks where we are in the original word w array)
		for (var n = 0; n < w.length; n++) {
			var letter = w[n];
			m++;
			if (m > 0) { prev_letter = tiled_word[m-1]; }
			if ( (m > 0) && ( letter == 'R' || letter == 'L') ) {
				if (letter == prev_letter) { 
					letter = prev_letter+letter;
					tiled_word.pop();
					tiled_word.push(letter);
					m--;
				}
				else { tiled_word.push(letter); }
			}
			else { tiled_word.push(letter); }
			
		}
		w = tiled_word;
	}
	var msg = "<p>";
	for (var t = 0; t < w.length; t++) {
		var val1,ind1;
		if (!tiles.inArray(w[t])) { w[t] = '&empty;'; val1 = '';}
		else {
			ind1 = tiles.indexOf(w[t]);
			val1 = values[ind1];
		}
		
		if (lettervalues[t] == 2) {
			msg += '<div style="display:block;float:left;height:80px;"><span class="tile doubleLetterTile">';
		}
		else if (lettervalues[t] == 3) {
			msg += '<div style="display:block;float:left;height:80px;"><span class="tile tripleLetterTile">';
		}
		else {
			msg += '<div style="display:block;float:left;height:80px;"><span class="tile">';
		}
		msg += w[t] + '<sub>' + val1 + '</sub></span><br /><span style="text-align:center;clear:both;margin-left:13px;">';
		msg += '<span class="doubleLetter" title="double letter score" onclick="toggleDouble('+t+');scrabblify();">x2</span>';		
		msg += '<span class="tripleLetter" title="triple letter score" onclick="toggleTriple('+t+');scrabblify();">x3</span></span></div> ';
		extra = ' ';
	}
	msg += "</p><p style='clear:both;'><br />= "; 

	var len = w.length;
	var valid_len = len;
	var sum = 0;

	for (var i = 0; i < len; i++) {
		var letter = w[i];
		if (!tiles.inArray(letter)) { letter = ' '; }
		if ( (letter == ' ') ) { valid_len-=1; }
		
		var ind = tiles.indexOf(letter);
		var val = values[ind];
		
		/*if (cardinal == i) { //this was used for old cardinal lettervalue
			var lettervalue = $('#lettervalue').val();
			val *= lettervalue;
		}*/
		if (!lettervalues[i]) { lettervalues[i] = 1; }
		val *= lettervalues[i];
		
		if ( (i+1) == len) { msg += val + "<br />"; }
		else { msg += val + " + "; }
		sum += val;
		calculated = 1; //calculated at least one letter
	}

	msg += " = ";

	var doub = document.forms['scrabbleform'].elements['double'].checked;
	var trip = document.forms['scrabbleform'].elements['triple'].checked;
	if (doub) {
		var xdoub = $('#x-double').val();
		var orig_sum = sum;
		for (i=0;i<xdoub;i++) {
			sum *= 2;
		}
		if (xdoub == 1) {  msg += orig_sum + " x 2 (double word score applied once)<br />= "; }
		else { msg += orig_sum + " x 2<sup>" + xdoub + "</sup> (double word score applied " + (xdoub) + " times)<br />= "; }
	}
	//else if (trip) {
	if (trip) {
		var xtrip = $('#x-triple').val();
		var orig_sum = sum;
		for (i=0;i<xtrip;i++) {
			sum *= 3;
		}
		if (xtrip == 1) { msg += orig_sum + " x 3 (triple word score applied once)<br />= "; }
		else { msg += orig_sum + " x 3<sup>" + xtrip + "</sup> (triple word score applied " + (xtrip) + " times)<br />= "; }
	}

	var bonus = document.forms['scrabbleform'].elements['bonus'].checked;
	if (bonus && (valid_len > 6)) { msg += sum + " + " + bonusPts + "  point bonus<br />= "; sum += bonusPts; }

	msg += "<span class='solution'>" + sum + "</span></p>";


	if (calculated) { $('#solution').html(msg); }
	else { $('#solution').html(''); }
	
	$('#validateWord .word').text(word + ' ');
}

function clearForm(formIdent) 
{ 
  var form, elements, i, elm; 
  form = document.getElementById 
    ? document.getElementById(formIdent) 
    : document.forms[formIdent]; 

	if (document.getElementsByTagName)
	{
		elements = document.getElementsByTagName('input');
		for( i=0, elm; elm=elements.item(i++); )
		{
			if (elm.getAttribute('type') == "text")
			{
				elm.value = '';
			}
		}
	}

	// Actually looking through more elements here
	// but the result is the same.
	else
	{
		elements = form.elements;
		for( i=0, elm; elm=elements[i++]; )
		{
			if (elm.type == "text")
			{
				elm.value ='';
			}
		}
	}

	//$('#lettervalue').val(2); //this was used for old cardinal lettervalue
	lettervalues = [];
	document.forms['scrabbleform'].elements['double'].checked = false;
	document.forms['scrabbleform'].elements['triple'].checked = false;
	$('#x-double').val(1);
	$('#x-triple').val(1);
	$('#x-double-txt').hide();
	$('#x-triple-txt').hide();
	$('#solution').html('');
	
	$('.validation').html('');
	$('#validateWord .word').html('');

	$('#word').focus();
}

function show(div) {
	document.getElementById(div).style.display = 'block';
	$('#word').focus();
}
function hide(div) {
	document.getElementById(div).style.display = 'none';
	$('#word').focus();
}
function toggle(div) {
	if ( $(div).style.display == 'block' ) hide(div);
	else show(div);
	$('#word').focus();
}

/*---VALIDATION---*/
function validate() {
	if ($('#lang').val() != 'en' && $('#lang').val() != 'wwf') {
		$('#validationMW').html('Sorry, validation is only available for English words.');
		return false;
	}
	if (!$('#word').val()) { $('#validationMW').html('Please enter a word first.');return false; }
	var word = $('#word').val();
	$('.validationWrap').append('<p class="loading"></p>');
	$.ajax({
		url: 'http://www.merriam-webster.com/dictionary/' + word,
		type: 'GET',
		error: function() {
			$('#validationMW').html('<span class="invalid">error loading from</span> <a target="_blank" href="http://www.merriam-webster.com/dictionary/' + word + '">Merriam-Webster.com</a>.');	
		},
		success: function(res) {
			var definition = $(res.responseText).find('#mwEntryData').html();
				if (definition) {
					$('#validationMW').html('<span class="word valid">' + word + '</span> is a valid word according to <a target="_blank" href="http://www.merriam-webster.com/dictionary/' + word + '">Merriam-Webster.com</a>.');
					//$('#definitionMW').html(definition);
				}
				else {
					$('#validationMW').html('<span class="word invalid">' + word + '</span> is not a valid word according to <a target="_blank" href="http://www.merriam-webster.com/dictionary/' + word + '">Merriam-Webster.com</a>.');					
				}
		},
		complete: function() {
			$('.loading').remove();
		}
	});
	$.ajax({
		url: 'http://dictionary.reference.com/browse/' + word,
		type: 'GET',
    error: function() {
			$('#validationDC').html('<span class="invalid">error loading from</span> <a target="_blank" href="http://www.dictionary.reference.com/browse/' + word + '">Dictionary.com</a>.');	
    },
		success: function(res) { 
			var definition = $(res.responseText).find('.results_content').html();
			if (definition) {
				$('#validationDC').html('<span class="word valid">' + word + '</span> is a valid word according to <a target="_blank" href="http://www.dictionary.reference.com/browse/' + word + '">Dictionary.com</a>.');
				//$('#definitionDC').html(definition);
			}
			else {
				$('#validationDC').html('<span class="word invalid">' + word + '</span> is not a valid word according to <a target="_blank" href="http://www.dictionary.reference.com/browse/' + word + '">Dictionary.com</a>.');
			}
		},
		complete: function() {
			$('.loading').remove();
		}
	});
}
-->