function getWords(act, text, successAction) {
	var scrlTopStatus = getStatus("#scrlTop");
	var scrlBottomStatus = getStatus("#scrlBottom");
	if(act == "previous") {
		setStatus("#scrlTop", "Wait");
	} else if(act == "next") {
		setStatus("#scrlBottom", "Wait");
	}
	
	$.ajax({
		type: "POST",
		url: "http://www.beedictionary.com/dictionary/ajax",
		data: "word="+text+"&action="+act+"&format=json",
		dataType: "json",
		error: function(request, status, error) {
			setStatus("#scrlTop", scrlTopStatus);
			setStatus("#scrlBottom", scrlBottomStatus);
		},
		success: function(data) {
			//data = eval('(' + data + ')');
			if(act == "previous" && data.words.length > 0 && data.words[0] != "")	{
				var d_length = data.words.length;
				var t_data = new Array();
				var count = 0;
				for(i=0;i<data.words.length;i++) {
					t_data[count++] = data.words[i];
				}
				for(i=0;i<Wdata.words.length;i++) {
					t_data[count++] = Wdata.words[i];
				}
				Wdata.words = t_data;
				Wdata.pages++;
				Wdata.page++;
				Wdata.start_index = d_length;
				Wdata.end_index = Wdata.end_index + d_length;
				setStatus("#scrlTop", "Active");
			} else if(act == "next" && data.words.length > 0 && data.words[0] != "") {
				var t_data = new Array();
				var count = 0;
				for(i=0;i<Wdata.words.length;i++) {
					t_data[count++] = Wdata.words[i];
				}
				for(i=0;i<data.words.length;i++) {
					t_data[count++] = data.words[i];
				}
				Wdata.words = t_data;
				Wdata.pages++;
				setStatus("#scrlBottom", "Active");
			} else {
				setStatus("#scrlTop", scrlTopStatus);
				setStatus("#scrlBottom", scrlBottomStatus);
			}

			if(successAction) {
				eval(successAction);
			}
		}
	});
}

function getFirstWord() {
	return $("#filteredWords").children("li:first").children("span:first").text();
}

function getLastWord() {
	return $("#filteredWords").children("li:last").children("span:first").text();
}

function getOtherPages() {
	/*if(Wdata.words.length > 0)
		$("#def_"+Wdata.words[0].word_id).slideToggle("slow");*/
	var f_word = getFirstWord();
	var l_word = getLastWord();
	getWords('previous', f_word, 'getWords("next", "'+l_word+'")');
}

function showNextPage() {
	Wdata.page++;
	if(Wdata.page <= Wdata.pages) {
		var startIndex = (Wdata.page - 1) * words_per_page;
		var endIndex = startIndex + (words_per_page - 1);
		if(endIndex >= Wdata.words.length) {
			endIndex = Wdata.words.length - 1;
		}
		if(Wdata.words.length-(endIndex+1) > 0 && Wdata.words.length-(endIndex+1) < words_per_page) {
			Wdata.words.splice(endIndex+1);
			Wdata.pages--;
		}

		$("#WordsDiv").html('<ul id="filteredWords"></ul>');
		var wordHTML;
		for(var i=startIndex;i<=endIndex;i++) {
			wordHTML = '';
			if(Wdata.words[0].lemma != "") {
				wordHTML = getWordHTML(i);
				$("#filteredWords").append('<li id="wli_'+Wdata.words[i].word_id+'">'+wordHTML+'</li>');
			}
		}
        
		/*var letter = getFirstWord().substr(0,1);
		selectLetter(letter);*/

		setStatus("#scrlTop", "Active");

		if(Wdata.page == Wdata.pages) {
			setStatus("#scrlBottom", "Inactive");
			getWords('next', getLastWord());
		} else {
			setStatus("#scrlBottom", "Active");
		}
	} else {
		Wdata.page--;
	}
}

function getWordHTML(w) {
	var word = Wdata.words[w];
    var defLimiter = 90;    
	var wordHTML = '<span><a href="javascript:void(0);" onclick="showDefinition(\''+word.word_id+'\');" title="Meaning of '+word.lemma+'">'+word.lemma+'</a></span>';
    defLimiter = 90 - Math.ceil(1.5 * word.lemma.length);
   if(word.pronunciations) {
		if(trim(word.pronunciations.us_url) != "") {
			if(hasReqestedVersion)
				wordHTML +=' <embed id="snd_player" width="17" height="15" align="texttop" flashvars="soundUrl='+word.pronunciations.us_url+'&u=audio" salign="t" menu="false" loop="false" quality="high" src="http://www.beedictionary.com/resources/flash/snd_player.swf" type="application/x-shockwave-flash" wmode="transparent"></embed>';
			else
				wordHTML += ' <a href="http://www.beedictionary.com/'+word.pronunciations.us_url+'"><img src="http://cdn.beedictionary.com/images/dict_sound.png"/></a>';
		}
       
		if(word.pronunciations.ipa_us && trim(word.pronunciations.ipa_us) != "") {
          defLimiter = 90 - 3 * word.lemma.length;
			wordHTML += '<span id="ipa_'+word.word_id+'" style="display:inline;"> \/'+trim(word.pronunciations.ipa_us)+'\/</span>';
			wordHTML += '<a href="javascript:void(0);" title="Help about pronunciations" class="a_pronunciation nobackground" onClick="show_IPA_help();">?</a>';
		}
	}
	
	if(word.definitions != "") {
		wordHTML += ' <span class="shortDef">'+character_limiter(word.definitions, defLimiter)+'</span>';
	}
	
	if(is_admin) {
		wordHTML += ' <a href="http://www.beedictionary.com/backend/lookup/' + word.lemma.replace(new RegExp("[ ]+", "g"), "_") + '" title="Edit word info"><img src="http://cdn.beedictionary.com/images/edit.png" border="0" /></a>';
	}
	return wordHTML;
}

function showPrevPage() {
	Wdata.page--;
	if(Wdata.page >= 1) {
		var startIndex = (Wdata.page - 1) * words_per_page;
		var endIndex = startIndex + (words_per_page - 1);

		if(endIndex >= Wdata.words.length) {
			endIndex = Wdata.words.length - 1;
		}

		$("#WordsDiv").html('<ul id="filteredWords"></ul>');
		var wordHTML;
		for(var i=startIndex;i<=endIndex;i++) {
			wordHTML = '';
			if(Wdata.words[0].lemma != "") {
				wordHTML = getWordHTML(i);
				$("#filteredWords").append('<li id="wli_'+Wdata.words[i].word_id+'">'+wordHTML+'</li>');
			}
		}
       /*var letter = getFirstWord().substr(0,1);
		selectLetter(letter);*/

		setStatus("#scrlBottom", "Active");

		if(Wdata.page == 1) {
			setStatus("#scrlTop", "Inactive");
			getWords('previous', getFirstWord());
		} else {
			setStatus("#scrlTop", "Active");
		}
	} else {
		Wdata.page++;
	}
    
    
}

function selectLetter(letter) {
	var current = $("#browse-nav li.current");
	current.html('<a rel="nofollow" href="http://www.beedictionary.com/meaning/'+letter+'" title="Meanings of words starting with '+current.text()+'">'+current.text()+'</a>');
	current.removeClass("current");
	letter = letter.toUpperCase();
	$("#li_"+letter).html('<a href="javascript:void(0);">'+letter+'</a>');
	$("#li_"+letter).addClass("current");
	$("#startWith").html(letter);
	var tobNavHTML = '';
	$("#startWith2").html('<a rel="nofollow" href="http://www.beedictionary.com/meaning/'+letter+String.fromCharCode(65)+'" title="Meanings of words starting with '+letter+String.fromCharCode(65)+'">'+letter+String.fromCharCode(65)+'</a>&nbsp;');
	var i = 66;
	while(i<=90) {
		$("#startWith2").append('<a rel="nofollow" href="http://www.beedictionary.com/meaning/'+letter+String.fromCharCode(i)+'" title="Meanings of words starting with '+letter+String.fromCharCode(i)+'\'">'+letter+String.fromCharCode(i)+'</a>&nbsp;');
		i++;
	}
    
    applyCornerFor($("#li_"+letter));
}


function showDefinition(word_id) {
	$("div[id^='def_']:visible").filter(function (index) {
		return $(this).attr("id") != "def_"+word_id;
	}).slideToggle("slow");

	var el = false;
	var makeAjax = false;
	if($("#wli_"+word_id+" #def_"+word_id).length > 0) {
		el = $("#wli_"+word_id+" #def_"+word_id);
	} else {
		var word = '';
		var found = false;
		makeAjax = true;
		
		for(w in Wdata.words) {
			if(word_id == Wdata.words[w].word_id) {
				found = true;
				word =  Wdata.words[w].lemma;
				defHTML = '<div id="def_'+word_id+'" style="display:none;"><div class="defCalloutWrapper"><div class="defCallout"></div></div><div id="attachContent_'+word_id+'" class="defCalloutContent"><div style="width:100%; text-align:center;"><img src="http://cdn.beedictionary.com/images/spinner.gif"/></div></div></div>';
				$("#wli_"+word_id).append(defHTML);
				break;
			}
		}
		if(found) {
			el = $("#wli_"+word_id+" #def_"+word_id);
		}
	}
	if(el) {
		el.slideToggle("slow");
		if(makeAjax) {
			$.ajax({
				type: "POST",
				url: "http://www.beedictionary.com/dictionary/ajax",
				data: "word_id="+word_id+"&word="+word+"&action=wordinfo&format=html",
				error: function(request, status, error) {
					el.remove();
				},
				success: function(data) {
					//alert(data);
					$("#attachContent_"+word_id).html(data);
					applyCalloutCorners();
				}
			});
		} else {
			applyCalloutCorners();
		}
	}
    
}

function setStatus(el, status) {
	var id = $(el).attr('id');
	$(el).attr('class', id+status);
}

function getStatus(el) {
	return $(el).attr('class').replace($(el).attr('id'), "");
}

function togglePronounciation(el, word_id) {
	if($(el).html() == "Spelled") {
    	$(el).html("IPA");
    } else {
    	$(el).html("Spelled");
    }
	$("#ipa_"+word_id).toggle();
	$("#nor_"+word_id).toggle();
}

function select_ipa_help(num) {
	$("#help_1").hide();
	$("#help_2").hide();
	$("#help_3").hide();
	$("#help_link_1").removeClass("ipa_help_current");
	$("#help_link_2").removeClass("ipa_help_current");
	$("#help_link_3").removeClass("ipa_help_current");
	$("#help_link_"+num).addClass("ipa_help_current");
	$("#help_"+num).show();
	return false;
}

function show_IPA_help() {
	var indicator = '<div align="center"><img src="http://cdn.beedictionary.com/images/indicator.gif"/></div>';
	$.popup.show("Bee Dictionary Bulider - IPA Phonetics Symbols", '<div id="dialog_ipa_symbols">'+indicator+'</div>', {main_class: "popupDiv"});
	
	$.ajax({
		type: "POST",
		url: "http://www.beedictionary.com/api/ipa_help/",
		error: function(request, status, error) {
			$.popup.hide();
			$("#messages").html(request.responseText);
			$("#messages").floatingmsgbox({type: "info", close_button: true});
		},
		success: function(data) {
			$("#dialog_ipa_symbols").html(data);
		}
	});
}

function getPOS(posShort){
   switch(posShort)
    {
    case "n":
      	return "n";
    case "v":
    	return "v";
    case "a":
      	return "adj";
    case "r":
    	return "adv";
    case "s":
		return "adj";    
    default:
      return "";
    }
}
