
function WordContextViewer(){var contextViewer=this;var _this=this;var posMapping={'n':'noun','v':'verb','a':'adjective','r':'adverb'};var textArea=$('textArea');var textValidator=new FieldValidator(textArea);var data=null;var text="";var activeWord=null;var openResults=new Animation('resultsArea',{opacity:{'initial':0,'to':1},display:{to:'block',at:0}},1);var closeResults=new Animation('resultsArea',{opacity:{'initial':1,'to':0},display:{to:'none',at:1}},0);var parseButton=$('parseButton');parseButton.onclick=parseWords;$('createWordList').onclick=bind(toggleWordlistMode);this.reset=reset;function reset(){clear();closeResults.start();$('wordInfo').style.display='none';parserShade.setOpen(true);}
function toggleWordlistMode(){if(!loginData.hasProfile){if(loginData.validUser){if(!loginData.hasLogin){if(confirm('You must be signed in to create a word list. Would you like to sign in now?')){loginData.signIn();}}else{alert('Your subscription and/or login does not support word lists. Contact your administrator to learn about upgrading your account to support this feature.');}}else{if(confirm('You must be signed in to create a word list. Would you like to sign in now?')){loginData.signIn();}}
return;}
var listPanel=$('resultsArea');if(Element.hasClass(listPanel,'editMode')){Element.removeClass(listPanel,'editMode');views['list'].wordListMode=false;$('createWordList').style.display='block';$('selectAllWords').style.display='none';}else{views['list'].wordListMode=true;Element.addClass(listPanel,'editMode');$('createWordList').style.display='none';$('selectAllWords').style.display='inline';}
views['list'].reset();views['list'].render();switchView('list');setActiveWord(getActiveWord());}
$('cancelWordListButton').onclick=function(){toggleWordlistMode();return false;}
$('saveWordListForm').onsubmit=function(){if(this.validator&&this.validator.validate()){var wl=new Wordlist();Event.addListener(wl,'save',function(){document.location.href=wl.getURL();});Event.addListener(wl,'error',function(){alert('there was an error saving your wordlist');});wl.setTitle(this['wordlist.name'].value);wl.setShared(this['wordlist.shared'].checked);wl.setSource(Wordlist.SRC_VOCABGRABBER);var includeExamples=this['wordlist.examples'].checked;var added=0;if(data&&data.words.length){for(var i=0;i<data.words.length;i++){if(data.words[i].selected&&!isFiltered(data.words[i])){var example=(includeExamples)?getExampleHTML(data.words[i],0):null;if(example!=null&&example.length>500){example=example.substring(0,496)+'...';}
wl.addWord(data.words[i].word,'en',example);added++;}}}
if(added>0){toggleWordlistMode();wl.save();}else{alert('No words were included in your list. You must select some words to include.');}}
return false;};function getExampleHTML(word,index){var uses=word.uses;var wordStart=uses[index][0];var wordEnd=uses[index][1];var si=findSentence(uses[index][0]);if(si!=-1){var start=data.sentences[si][0];var end=data.sentences[si][1];var sStart=text.substring(start,wordStart);var sEnd=text.substring(wordEnd,end);return sStart+'<b>'+text.substring(wordStart,wordEnd)+'</b>'+sEnd;}}
this.parseWords=parseWords;function parseWords(closeParser){if(textArea.value.trim().length==0){alert("Nothing to grab! Please paste some text in the text area, or choose an example.");return;}
Event.fire(_this,'parsing');clear();if(closeParser==undefined||closeParser){parserShade.setOpen(false);}
data=null;text=textArea.value;textArea.disabled=true;parseButton.value='Grabbing Vocabulary...';parseButton.disabled=true;$('loadingProgress').style.display='block';(new JSONRequest("parsetext.json",{'text':text},renderWords,function(e){throw e})).send();if(window.pageTracker){pageTracker._trackPageview("/vocabgrabber/grab");}}
this.openExample=openExample;function openExample(name){clear();var req=new XMLHttpRequest();req.onreadystatechange=function(){if(req.readyState==4&&req.status==200){textArea.value=req.responseText;textValidator.checklen();}}
req.open('GET','examples/'+name+'.txt',true);req.send(null);return false;}
$('selectAllWords').onclick=function(){var selected=this.checked;var boxes=$('resultsList').getElementsByTagName('input');for(var i=0;i<boxes.length;i++){if(!isFiltered(data.byword[boxes[i].name])){data.byword[boxes[i].name].selected=selected;boxes[i].checked=selected;}}}
var relevanceLevels=['Not Relevant','Unlikely Relevant','Neutral Relevance','Likely Relevant','Highly Relevant'];var relevanceButtons=[];var relevanceStatus=[];var relevanceCounts=[0,0,0,0,0];for(var i=0;i<relevanceLevels.length;i++){relevanceButtons[i]=$('relevance'+(i+1));relevanceButtons[i].onclick=bind(selectRelevance,[i,relevanceButtons[i]]);relevanceStatus[i]=Element.hasClass(relevanceButtons[i],'selected');}
function selectRelevance(index,button){if(Element.hasClass(button,'selected')){relevanceStatus[index]=false;Element.removeClass(button,'selected');filterList();for(var v in views)views[v].reset();activeView.render();}else{relevanceStatus[index]=true;Element.addClass(button,'selected');filterList();for(var v in views)views[v].reset();activeView.render();}
return false;}
function WindowShade(header,content){var shade=this;if(!header.nodeName)header=$(header);if(!content.nodeName)content=$(content);var open=Element.hasClass(header,'expanded');header.onclick=function(){setOpen(!open);}
function isOpen(){return open;}
function setOpen(state,now){if(open!=state){open=state;Event.fire(shade,'open');if(now){if(state){Element.addClass(header,'expanded');content.style.display='block';content.style.height=(Browser.IE)?content.offsetHeight:'';}else{Element.removeClass(header,'expanded');content.style.display='none';}}else{if(state){Element.addClass(header,'expanded');closeAnim.stop();var ph=content.style.height;var pd=content.style.display;content.style.height='';content.style.display='block';openAnim.attributes.height.to=(Browser.IE)?content.offsetHeight:content.clientHeight-(parseInt(Element.getStyle(content,'padding-top'))+parseInt(Element.getStyle(content,'padding-bottom')));content.style.display=pd;content.style.height=ph;openAnim.start();}else{Element.removeClass(header,'expanded');openAnim.stop();closeAnim.attributes.height.from=(Browser.IE)?content.offsetHeight:content.clientHeight-(parseInt(Element.getStyle(content,'padding-top'))+parseInt(Element.getStyle(content,'padding-bottom')));closeAnim.start();}}}}
this.setOpen=setOpen;this.isOpen=isOpen;var openAnim=new Animation(content,{'height':{'initial':0},'display':{'to':'block','at':0},'overflow':{'to':'hidden','at':'0'}},.5);var closeAnim=new Animation(content,{'height':{'to':0},'display':{'to':'none','at':1},'overflow':{'to':'hidden','at':'0'}},.5);Event.addListener(openAnim,'stop',function(){content.style.overflow='';});Event.addListener(closeAnim,'stop',function(){content.style.overflow='';});}
var examplesShade=new WindowShade('examplesHeader','exampleList');var definitionsShade=new WindowShade('definitionHeader','definitionsPanel');var parserShade=new WindowShade('parserHeader','entryArea');var startOver=$('startOver');startOver.onclick=function(){parserShade.setOpen(true);return false;}
Event.addListener(parserShade,'open',function(){startOver.style.display=(this.isOpen())?'none':'block';});function bind(fun,args){if(args&&!(args instanceof Array))args=[args];if(!args)args=[];return function(){return fun.apply(_this,args);}}
function View(name,renderFunction,clearFunction){var rendered=false;this.name=name;this.button=$(name+'View');this.button.onclick=bind(switchView,name);this.panel=$(name+'Panel');this.setSelected=function(b){if(b){Element.addClass(this.button,'selected');this.panel.style.display='block';this.render();Event.fire(this,'shown');}else{Element.removeClass(this.button,'selected');this.panel.style.display='none';Event.fire(this,'hidden');}}
this.render=function(){if(!rendered){renderFunction();rendered=true;}}
this.reset=function(){rendered=false;if(clearFunction)clearFunction();}}
ListView.extend(View);function ListView(){var _this=this;this.wordListMode=false;ListView.superclass.constructor.call(this,'list',render,clear);var resultsList=$('resultsList');var activeRow=null;Event.addListener(contextViewer,'activeword',function(){if(activeRow)Element.removeClass(activeRow,'active');var rows=resultsList.getElementsByTagName('tr');var word=contextViewer.getActiveWord();for(var i=0;i<rows.length;i++){if(rows[i].word==word){activeRow=rows[i];Element.addClass(activeRow,'active');break;}}});function clear(){activeRow=null;Element.removeChildren($('resultsList'));}
function render(){activeRow=null;Element.removeChildren($('resultsList'));for(var i=0;i<filteredList.length;i++){resultsList.appendChild(renderRow(filteredList[i],_this.wordListMode));}}
function renderRow(word,wl){var tags;if(word.tags){tags=[];for(var t=0;t<word.tags.length;t++){tags[t]=Element.construct(['a',{'class':word.tags[t],'href':'#'},'\u00A0']);tags[t].title=TAG_NAMES[word.tags[t]];}}else{tags='\u00A0';}
var diff=Math.ceil((1-word.r)*5);var wordProps={'href':'#','onclick':returnFalse};if(word.uses.length>1){wordProps.title='click to see all '+word.uses.length+' uses of "'+word.word+'"'+' ('+word.r+'/'+word.f+')';}else{wordProps.title='click to see '+word.uses.length+' use of "'+word.word+'"'+' ('+word.r+'/'+word.f+')';}
wordProps.title+' ('+word.salience+')';var fc=[];if(wl){var cb=Element.construct(['input',{'type':'checkbox','name':word.word}]);cb.defaultChecked=cb.checked=word.selected;cb.onclick=function(evt){data.byword[this.name].selected=this.checked;if(!evt)evt=window.event;evt.cancelBubble=true;}
fc[fc.length]=cb;}
fc[fc.length]=['span',wordProps,word.word];var cols=[['td',fc],['td',{'class':'tags'},tags],['td',{'class':'info'},''+(word.rel+1)],['td',{'class':'info'},''+word.uses.length]];var row=Element.construct(['tr',cols]);row.onclick=bind(setActiveWord,word.word);row.onmouseover=hoverOver;row.onmouseout=hoverOut;row.word=word.word;return row;}}
GalleryView.extend(View);function GalleryView(){GalleryView.superclass.constructor.call(this,'gallery',render,clear);var _this=this;function clear(){_this.panel.innerHTML='';}
function render(){var panel=_this.panel;panel.innerHTML='';var nohref={'href':'#'};for(var i=0;i<filteredList.length;i++){var wd=filteredList[i];nohref['class']=((wd.tags)?wd.tags.join(' '):'all');var a=Element.construct(['a',nohref,' ']);a.style.backgroundImage='url(/browse/mini/en/'+encodeURI(wd.word)+'.thm.gif)';if(wd.uses.length>1){a.title='click to see all '+wd.uses.length+' uses of "'+wd.word+'"';}else{a.title='click to see 1 use of "'+wd.word+'"';}
a.onclick=bind(setActiveWord,wd.word);panel.appendChild(a);}}}
TagCloudView.extend(View);function TagCloudView(){TagCloudView.superclass.constructor.call(this,'tagcloud',render,clear);var _this=this;function clear(){_this.panel.innerHTML='';}
function render(){var panel=_this.panel;panel.innerHTML='';var nohref={'href':'#','onclick':clickWord};var sizes=['f6','f5','f4','f3','f2','f1'];if(filteredList.length>0){var maxUses=0;for(var i=0;i<filteredList.length;i++){if(filteredList[i].uses.length>maxUses)maxUses=filteredList[i].uses.length;}
for(var i=0;i<filteredList.length;i++){var wd=filteredList[i];var idx=Math.floor((1-(wd.uses.length/maxUses))*sizes.length);nohref['class']=sizes[idx]+' '+((wd.tags)?wd.tags.join(' '):'all');var a=Element.construct(['a',nohref,wd.word]);if(wd.uses.length>1){a.title='click to see all '+wd.uses.length+' uses of "'+wd.word+'"';}else{a.title='click to see 1 use of "'+wd.word+'"';}
panel.appendChild(a);panel.appendChild(document.createTextNode(' '));}}}}
var views={'list':new ListView(),'tagcloud':new TagCloudView(),'gallery':new GalleryView()};var activeView=null;function switchView(view){var nv=views[view];if(nv&&nv!=activeView){if(activeView!=null)activeView.setSelected(false);activeView=nv;activeView.setSelected(true);}
return false;}
function clickWord(){setActiveWord(Element.getText(this));}
this.clear=clear;function clear(){wordMap.clear();$('exampleList').innerHTML='';$('wordInfo').style.display='none';textArea.disabled=false;for(var POS in posMapping){$(posMapping[POS]+'s').style.display='none';}
for(var v in views)views[v].reset();}
function renderWords(results){data=results;clear();$('loadingProgress').style.display='none';parseButton.disabled=false;parseButton.value="Grab Vocabulary!";$('wordInfo').style.display='block';relevanceCount=[0,0,0,0,0];for(var t in tagCounts)tagCounts[t]=0;if(data.words.length>0){data.byword={};var maxRel=0;for(var i=0;i<data.words.length;i++){var w=data.words[i];data.byword[w.word]=w;if(w.f>0&&w.r>maxRel)maxRel=w.r;}
tagCounts.ALL=data.words.length;for(var i=0;i<data.words.length;i++){var w=data.words[i];if(w.f>0){w.rel=Math.round((w.r/maxRel)*4);}else{w.rel=4;}
if(w.tags){for(var t=0;t<w.tags.length;t++){if(tagCounts[w.tags[t]]!=null){tagCounts[w.tags[t]]++;}}}
w.selected=false;relevanceCount[w.rel]++;}
for(var i=0;i<relevanceCounts.length;i++){relevanceButtons[i].title=relevanceLevels[i]+' ('+relevanceCount[i]+' words)';}
if(data.unique!=data.words.length){$('foundCount').innerHTML='Showing top '+data.words.length+' of '+data.unique+' words.';}else{$('foundCount').innerHTML='Found '+data.words.length+' words';}
filterList();if(activeView==null){switchView('tagcloud');}
activeView.render();setActiveWord(data.words[0].word);openResults.start();}else{$('foundCount').innerHTML='No words found, please enter more text.';parserShade.setOpen(true);}
for(var t in tagCountDisplay){Element.setText(tagCountDisplay[t],'('+tagCounts[t]+')');}}
function hoverOver(){Element.addClass(this,'hover');}
function hoverOut(){Element.removeClass(this,'hover');}
function returnFalse(){return false;}
var TAG_NAMES={'ART':'Arts and Literature','GEO':'Geography','MAT':'Math','PER':'People','SCI':'Science','SOC':'Social Studies','VOC':'Vocabulary','ALL':'All'};var tagCounts={};var DIFFICULTIES=[];var tagButtons={};var tagCountDisplay={};for(var t in TAG_NAMES){tagButtons[t]=$('tag'+t);tagButtons[t].onclick=bind(toggleTag,t);tagCounts[t]=0;tagCountDisplay[t]=$('count'+t);}
function selectInSource(start,end){parserShade.setOpen(true,true);textArea.value=text;if(textArea.createTextRange){textArea.focus();var range=textArea.createTextRange();range.moveStart("character",start);range.moveEnd("character",(-(text.length-end))+1);range.select();}else if(textArea.setSelectionRange){textArea.setSelectionRange(end-1,end);var ev=document.createEvent('KeyEvents');ev.initKeyEvent('keypress',true,true,window,false,false,false,false,0,textArea.value.charCodeAt(end-1));textArea.dispatchEvent(ev);textArea.focus();textArea.setSelectionRange(start,end);}}
function toggleTag(tag){if(tag!='ALL'){var cnt=0;for(var t in tagButtons){if(tagButtons[t].checked)cnt++;}
if(tagButtons[tag].checked&&cnt==2&&tagButtons['ALL'].checked){tagButtons['ALL'].checked=false;}else{if(cnt==0){tagButtons['ALL'].checked=true;}}}
filterList();for(var v in views)views[v].reset();activeView.render();}
var filteredList=[];function filterList(){filteredList=[];for(var i=0;i<data.words.length;i++){var wd=data.words[i];if(!isFiltered(wd))filteredList.push(wd);}
filteredList.sort(selectedSort.current);}
function isFiltered(word){if(tagButtons.ALL.checked)return!relevanceStatus[word.rel];if(word.tags){for(var i=0;i<word.tags.length;i++){var btn=tagButtons[word.tags[i]];if(btn&&btn.checked)return!relevanceStatus[word.rel];}}
return true;}
function SortOption(fn){this.ascending=fn;this.descending=function(a,b){return-fn(a,b);}
this.current=this.ascending;this.toggle=function(){this.current=(this.isAscending())?this.descending:this.ascending}
this.isAscending=function(){return(this.current==this.ascending);}}
var sorts={'freq':new SortOption(function(a,b){if(a.f==b.f){return(sorts['freq'].isAscending())?sorts.alpha.ascending(a,b):sorts.alpha.descending(a,b);}else{return b.f-a.f;}}),'usage':new SortOption(function(a,b){var ret=b.uses.length-a.uses.length;if(ret!=0)return ret;return(sorts['usage'].isAscending())?sorts.alpha.ascending(a,b):sorts.alpha.descending(a,b);}),'alpha':new SortOption(function(a,b){var la=a.word.toLowerCase();var lb=b.word.toLowerCase();return(la<lb)?-1:((lb==la)?0:1);}),'relevance':new SortOption(function(a,b){if(a.r==b.r)return 0;else if(a.r==null)return-1;else if(b.r==null)return 1;return b.r-a.r;})}
var selectedSort=sorts.relevance;var sortButtons={};for(var i in sorts){var b=$('sort_'+i);if(b){sortButtons[i]=b;sortButtons[i].onclick=bind(setSelectedSort,i)}}
function setSelectedSort(s){if(sorts[s]&&sorts[s]==selectedSort){sorts[s].toggle();}
for(var i in sortButtons)sortButtons[i].className='';selectedSort=sorts[s];Element.addClass(sortButtons[s],selectedSort.isAscending()?'ascending':'descending');filteredList.sort(selectedSort.current);for(var v in views)views[v].reset();activeView.render();return false;}
this.getActiveWord=getActiveWord;function getActiveWord(word){return activeWord;}
function setActiveWord(word){activeWord=word;var wordData=data.byword[word];var uses=data.byword[word].uses;var examples=$('exampleList');examples.innerHTML='';$('examplesHeader').innerHTML="Examples from Text ("+uses.length+")";var seen=[];for(var i=0;i<uses.length;i++){var wordStart=uses[i][0];var wordEnd=uses[i][1];var si=findSentence(uses[i][0]);if(si!=-1&&seen[si]!=1){seen[si]=1;examples.appendChild(createExample(si,wordData,wordStart,wordEnd,i));}}
wordMap.setWord(word,'en');showDefinition(word);Event.fire(_this,'activeword');return false;}
function createExample(si,wordData,wordStart,wordEnd,i){var start=data.sentences[si][0];var end=data.sentences[si][1];var sStart=text.substring(start,wordStart);var sEnd=text.substring(wordEnd,end);var word=wordData.word;var lookup=Element.construct(['a',{'href':'#','class':'lookup'},text.substring(wordStart,wordEnd)]);lookup.onclick=function(evt){searchvt(word);if(evt)evt.cancelBubble=true;return false;}
lookup.title='lookup "'+word+'" in the Visual Thesaurus';var children;var clickFun;if(views['list'].wordListMode){var cb=Element.construct(['input',{'type':'radio','name':'exampleSentence','value':i}]);if(i==0&&!wordData.selectedUse||i==wordData.selectedUse){cb.checked=true;}
clickFun=bind(selectExample,[word,i]);cb.onclick=clickFun;children=[cb,sStart,lookup,sEnd];}else{children=[sStart,lookup,sEnd];}
var li=Element.construct(['li',children]);li.onmouseover=hoverOver;li.onmouseout=hoverOut;li.onclick=function(evt){if(views['list'].wordListMode){clickFun();}else{selectInSource(start,end);}};return li;}
function selectExample(word,index){data.byword[word].selectedUse=index;var examples=$('exampleList');if(examples){var cbs=examples.getElementsByTagName('input');if(index<cbs.length){cbs[index].checked=true;}}}
function getSentence(word,use){var si=findSentence(word.uses[use][0]);var start=data.sentences[si][0];var end=data.sentences[si][1];return text.substring(start,end);}
function findSentence(index){for(var i=0;i<data.sentences.length;i++){if(index>=data.sentences[i][0]&&index<data.sentences[i][1]){return i;}}
return-1;}
var wordMap=new WordMap('mapRoot','vtsSearchMap');wordMap.style='mini';var disable=function(evt){if(evt&&evt.preventDefault)evt.preventDefault();return false;};$('wordInfo').onselectstart=disable;$('wordInfo').onmousedown=disable;Event.addListener(wordMap,'click',function(e){if(e.area&&e.area.word)VisualThesaurus.instance.search(e.area.word,e.area.lang);else if(e.area.sid)VisualThesaurus.instance.searchMeaning('SENSE:'+e.area.sid,true);});wordMap.cursorForArea=function(area){if(area.sid||area.word)return'pointer';else return'default';}
wordMap.toolTipForArea=function(area){if(area.sid){var sense=wordMap.dataForArea(area);return posMapping[sense.pos]+': '+sense.definition;}else if(area.word){return area.word;}else if(area.from&&area.to){var from=title(area.from);var to=title(area.to);var type=WordMap.edgeTypes[area.type];return from+' '+type.name+" "+to;}}
function title(id,results){if(id.sid){var sense=wordMap.result.senses[id.sid];var word=sense.words[0];if(sense.pos=='v'){if(word.indexOf(' ')!=-1){var words=word.split(' ');words[0]=LangTools.toGerund(words[0]);word=words.join(' ');}else{word=LangTools.toGerund(word);}}
return word;}else if(id.word){return id.word;}}
function showDefinition(word){var req=new JSONRequest("/browse/definition.json",{'word':word},function(senses){for(var POS in posMapping){$(posMapping[POS]+'s').style.display='none';Element.removeChildren($(posMapping[POS]+'Defs'));}
for(var i=0;i<senses.length;i++){var sense=senses[i];var POS=sense.POS;$(posMapping[POS]+'Defs').appendChild(Element.construct(['li',sense.definition]));$(posMapping[POS]+'s').style.display='block';}});req.send();}
var posMapping={'n':'noun','v':'verb','a':'adjective','r':'adverb'};}
function HelpPanel(){var _this=this;var visible=true;this.setVisible=setVisible;function setVisible(b){if(b!=visible){var display=(b)?'block':'none';$('howTo').style.display=display;$('productFeatures').style.display=display;visible=b;Event.fire(_this,'visible');}}
this.isVisible=isVisible
function isVisible(){return visible;}
if(Browser.IE){$('ieInstructions').style.display='block';}else{$('ffInstructions').style.display='block';}
var toolbarHelp=$('toolbarHelp');var toolbarAdd=$('toolbarAdd');$('toggleHelp').onclick=function(){setVisible(true);return false;}
toolbarAdd.onclick=function(){var hide=(toolbarHelp.style.display=='block');if(hide){Element.removeClass(toolbarAdd,'toolbarAddExpanded');}else{Element.addClass(toolbarAdd,'toolbarAddExpanded');}
toolbarHelp.style.display=(hide)?'none':'block';return false;}}