User:Endo999/monobook.js

// does google toolbar like translation of words and selected text// works on ie and firefox, epiphany, safari, chrome, and opera but still has bugs on// Konqueror (in fact the code is disabled on Konqueror)// selected text translation (up to 500 characters) only on IE, Firefox, and Epiphany, and chrome// this has only been tested on the monobook skin// default from and to language// the languages must be the same as in google.language.Languages array.// these are normally the international defaults but note://  portuguese: pt-PT//  traditional chinese: zh-TW//  simplified chinese: zh-CN//// must be set in this routine for dictionarylookup.js/*var SCLanguageDefaultTo = 'fr';var SCLanguageDefaultFrom='en';*/var SCLanguageTo='fr';var SCLanguageDefaultTo = SCLanguageTo;var SCLanguageDefaultFrom='en';if(typeof mw.config.get('wgUserLanguage') != "null" &&   typeof mw.config.get('wgContentLanguage')!= "null"){   if(mw.config.get('wgUserLanguage') != mw.config.get('wgContentLanguage'))      SCLanguageDefaultTo = mw.config.get('wgUserLanguage');}var SCShiftKeyNeeded = true;// need to set document.domain here, each language should set this field heredocument.domain = mw.config.get('wgServer').substring( mw.config.get('wgServer').lastIndexOf("//")+2);// default literals for system// must be set in this routine for dictionarylookup.js// the gadget manager can change these to the language he wishesvar SCstrLanguage = "Language";var SCstrSource = "Source";var SCstrGoogle = "Google";var SCstrCloseWindow = "Close window";var SCstrSelectLanguage = "Select language (to)";var SCstrWikipedialanguage = "Wikipedia language";var SCstrDictionary = "Dictionary";var SCstrWikipedia = "Wikipedia";var SCstrPopupHelp = "GoogleTrans help?";var SCstrTurnOffPopups = "Turn GoogleTrans off?";var SCstrTurnOnPopups = "Turn GoogleTrans on?";var SCstrGoogleTrans ="GoogleTrans";var SCstrOff = " (off)";var SCstrOn = " (on)";var SCstrChangeOptions = "Change options for GoogleTrans";var SCstrTranslatePage = "Google: translate page?";var SCstrHelpUrl = "http:https://www.search.com.vn/wiki/index.php?lang=en&q=User:Endo999/dictionarylookuphelp.html&ctype=text/html";var SCstrSingleWord = "Translation of single words";var SCstrSelectedText = "Translation of selected text (> 500 characters)";var SCstrKonqueror = "This feature is not supported on Konqueror";var SCstrTextTooLarge =  "Text element too large to parse!";var SCstrGuessLanguage = "Any language";var SCstrShiftKeyNeeded = "Shift key down to bring up Popup? Turn Option ";var SCbNoShiftKeyBrowser = false;var SCPopupBackgroundColor = "beige";  // you can set the popup background color hereappendCSS('.SCuserData { behavior:url(#default#userdata);} ' +'#SCitem div small, #SCitem small,#SCitem div div small,#SCitem div div div small {font-size:65%;color:black}' +'#SCitem div a:hover, #SCitem a:hover, #SCitem div div a:hover {text-decoration:underline;}' +'.SCPopup {background-color:' + SCPopupBackgroundColor +';border: 1px solid blue;position:absolute;font-size:14pt;z-index:9999;' +'overflow:visible;line-height:normal;padding:.5em;display:block;}' +'.SCxWindow {font-size:70%;color:black;' + 'position:absolute;right:.5em;}'+'.SCyWindow{font-size:50%;color:black;position:absolute;right:.5em;'+'bottom:.5em}' +'.SCxTranslation {font-size:70%;color:black;' +'position:absolute;left:.5em;top;.5em;}' +'.SCxText {color:black;}'+'.SCPopupIE {position:absolute;background-color: ' + SCPopupBackgroundColor +';border: 1px solid blue;font-size:14pt;z-index:9999; ' +'overflow:visible;display:block;line-height:normal;padding:.5em;width:auto;}'+'.SChidestuff {display:none;}');function SCGoogleLanguageLoaded() {    SCMakeGoogleLanguages();}function SCloadGoogleLanguage() {  google.load("language", "1", {"callback" : SCGoogleLanguageLoaded});}// this api key is not strictly necessary, but Google maintains they will email// you if, for some reason, they withdraw the Google translation services// the gadget manager is welcome to log onto code.google.com and get his own// api key.  var SCGoogleAPIKey = "ABQIAAAAIL6lIdsFmMh3QB6iZZYqHBT5zsu4IrEqi6aTPGb6EkJ6C2zK0BQyWgLmv16JfxNy3RYUKg7GyR6XAg";mw.loader.load("http://www.google.com/jsapi?callback=SCloadGoogleLanguage&key=" +   SCGoogleAPIKey); addOnloadHook(    function () {        var span1 = document.createElement('DIV');        span1.setAttribute('id','SCitem');        var thebody = document.getElementsByTagName('BODY');        thebody[0].appendChild(span1);        var span2 = document.createElement('SPAN');        span2.setAttribute('id','SCPersistElement');        span2.setAttribute('class','SCuserData');        thebody[0].appendChild(span2);    });var SCnewoptions;function SCMakeGoogleLanguages(){ var l; var lcode; var newoptions = ""; var bLangNotSupported = true; var b2digitsLangNotSupported = true; var language2digits = "";  for (l in google.language.Languages) {   lcode = google.language.Languages[l];   if(google.language.isTranslatable(lcode))   {     if(!l.match(/UNKNOWN/i))       newoptions +=    '<option value="' + lcode + '">' + (l.substring(0,1).toUpperCase() + l.substring(1).toLowerCase()) + '</option>'+"\n";   if(lcode.toUpperCase() == SCLanguageDefaultTo.toUpperCase())      bLangNotSupported = false;   var twodigitlang = "";   if(lcode.match(/^(..)/))      twodigitlang = RegExp.$1;   if(twodigitlang.length == 2 && SCLanguageDefaultTo.match("^" + twodigitlang,"i"))   {      b2digitsLangNotSupported = false;      language2digits = lcode;   }   } }  SCnewoptions = newoptions;  if(bLangNotSupported) {   var olddefaultlang = SCLanguageDefaultTo;   var bSameAsContent = false;   if(typeof mw.config.get('wgContentLanguage') != "undefined" && mw.config.get('wgContentLanguage') == language2digits)      bSameAsContent = true;   if(!b2digitsLangNotSupported && !bSameAsContent)   {      SCLanguageDefaultTo = language2digits;   }   else    SCLanguageDefaultTo = SCLanguageTo;   if(olddefaultlang == SCtranslateTo)     SCtranslateTo = SCLanguageDefaultTo;    }}// contents of dictionarylookup1.js follow// this javascript isolates the text word under the //cursor when it rests on a word for 1.5 seconds// works in Firefox 1,2.0,3 and IE 6.0,7,8, chrome// works in Windows Safari, and Opera// does not work in Konqueror(that I know of, code is disabled for Konqueror)// with the Google language javascript api this does dictionary lookup// in several languages.// the word isolated  is translated// and the translation is placed back in the new window// on IE, Firefox, chrome, and Epiphany a cursor place over// selected text (up to 500 characters) will use// that text// author: endo999// author: Paul Cheffers// email: paul@securecottage.com// 2008// // this webpage is placed in the public domain by the author// the default languages(the from language is redundant as Google guesses // the language) but SCLanguageDefaultTo is important is you are porting// to another Wikipedia Language// set this in main gadget file// restrictive environments don't like wikipedia.org to set cookies with//document.domain = "wikipedia.org"var SCSourcestrlength = SCstrSource.length + SCstrGoogle + 2;var SCMinLength = 22;var SCgooglereference1 = //'<span onMouseover="javascript:SCdonthide=true;">' +'<small class="SCyWindow">'+ SCstrSource +': <a href="#" ' +'onMouseover="javascript:SCdonthide=true;" ' +'onclick="javascript:window.open(\'';var SCgooglereference1a ='\')">' + SCstrGoogle + '</a></small> ';var SCgooglereference2 = '<a class="SCxWindow" href="javascript:SCdonthide=false;SChidespan(\'';var SCgooglereference3 = '\')">X</a>';var SClanguageprompt1 = '<small class="SCxTranslation"><a ' + 'href="javascript:SCmakevisiblelanguagechange()" ' +'onMouseover="javascript:SCdonthide=true;" ' +'>';var SClanguageprompt2 ='</a></small>&nbsp;';var SClabel="";var SCtext="";var SCtranslate="FrenchToEnglish";var SCtranslateFrom = SCLanguageDefaultFrom;var SCtranslateTo = SCLanguageDefaultTo;var SCTooManyTextElements=450;var SCdonthide = false; // for change of languagevar SCwindows = 0; // number of yellow windowsvar SCMaxwindows = 1; // max number of yellow windowsvar SCscreenWidth = 0, SCscreenHeight = 0;var SCwrheight=250, SCwrwidth=300;var SCscrOfX = 0, SCscrOfY = 0;var SCWikihtml="", SCDicthtml="";var SCbInsertSpan=false;var SCalttranslate="";var SCWikipedialanguage="en.wikipedia.org";var SCshowwrad = false;var SCbIsIE = false;var SCbIsIE8 = false;var SCbIsKonqueror = false;var SCbIsOpera = false;var SCbIsMozilla = false;var SCdebug = false;var SCclientX=0;var SCclientY=0;var SCposx = 0;  // position of cursorvar SCposy = 0;var SCPosYAdjust = 42; // if over link with title drop popup window a littlevar SCpposx = -1; // previous position of cursorvar SCpposy = -1;var SCsrcElement=null;var SCbIsKonquerorEvent=false;var SCbMouseClicked=false;var SChInterval = null;//var SCMaxWordLength = 50;var SCselectedText = "";var SCrangeCurx = 0;var SCrangeCury = 0;var SCrangeCurx1 = 0;var SCrangeCury1 = 0;var SCselectionarray = new Array();var SCselectionstart = new Array();var SCselectionend = new Array();var SCselectionarrayposition = new Array();var SCselection = new Array();var SCMaxWordLength=495;var SCIeRange;var SCSelectionType;var SCbIsWordInSelection=false;var SCGoogleTrans=true;var SCbIsChrome=false;var SCShiftKey=false;if(SCPersistantLoad("GoogleTrans") == "1")   SCGoogleTrans = true;else SCGoogleTrans = false;if(navigator.appVersion.match(/MSIE/i)){  SCbIsIE = true;  if(navigator.userAgent.indexOf('MSIE 8') != -1)     SCbIsIE8 = true;  }var SCbIsSafari = false;var SCbIsPre4Safari = false;if(navigator.appVersion.match(/Safari/i)){  SCbIsSafari = true;if(navigator.userAgent.indexOf('Version/3.')!= -1 ||   navigator.userAgent.indexOf('Version/2.')!= -1  ){     SCbIsPre4Safari = true;     SCbNoShiftKeyBrowser = true; }}if(navigator.userAgent.indexOf('Epiphany/1.')!= -1 ||   navigator.userAgent.indexOf('Firefox/1.') != -1  )  SCbNoShiftKeyBrowser = true;if(navigator.appVersion.match(/Chrome/i)){  SCbIsSafari = false;  SCbIsChrome = true;}if(navigator.appVersion.match(/Konqueror/i)){  SCbIsKonqueror = true;}if(navigator.appName.match(/Opera/i)){  SCbIsOpera = true;}if(navigator.appName.match(/Netscape/i)){  SCbIsMozilla = true;}var SCnn=(document.layers)?true:false;var SCie=(document.all)?true:false;function SCkeyUp(e) { var evt=(e)?e:(window.event)?window.event:null; if(evt){ //  var key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));}if(!evt)  return;try { if (evt.shiftKey==1)    SCShiftKey = true; else SCShiftKey = false;} catch(e){  SCShiftKey = false;  SCShiftKeyNeeded = false;} }function SCkeyDown(e) { var evt=(e)?e:(window.event)?window.event:null; var key=0;if(evt){ //  var key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));}if(!evt)  return;try { if (evt.shiftKey==1)    SCShiftKey = true; else SCShiftKey = false;}catch(e){  SCShiftKey = false;  SCShiftKeyNeeded = false;} if(key == 27 && SCdebug == false) // escape key{ // SCdebug = true;  // SCdeleteEvents();}else if(key == 27 && SCdebug == true){//  SCdebug = false;//  SCcreateEvents();}}  function SCdeleteEvents(){document.onkeydown=null;document.onmousedown = null;document.body.onmousemove = null;document.body.onmouseout = null;}function SCeventhook(hook,func){if(document.addEventListener)document.addEventListener(hook, func, false);elsedocument.attachEvent("on" + hook, func);}function SCcreateEvents(){SCeventhook("keyup",SCkeyUp);SCeventhook("keydown",SCkeyDown);SCeventhook("mousedown",SCcaptureMousedown);SCeventhook("mousemove",SCcaptureMousemove);SCeventhook("mouseout",SCcaptureMouseout);}var shiftkeyneeded = SCPersistantLoad('shiftkeyneeded');if(shiftkeyneeded == "0")   SCShiftKeyNeeded = false;else SCShiftKeyNeeded = true;if(SCbNoShiftKeyBrowser)     SCShiftKeyNeeded = false;var SCpersistlangFrom = SCPersistantLoad('languageFrom');if(SCpersistlangFrom != "")   SCtranslateFrom = SCpersistlangFrom;var SCpersistlangTo = SCPersistantLoad('languageTo');if(SCpersistlangTo != "")   SCtranslateTo = SCpersistlangTo;   var SCwikilang = SCPersistantLoad('Wikipedialanguage');if(SCwikilang != "")   SCWikipedialanguage = SCwikilang;else SCPersistantSave('Wikipedialanguage',SCWikipedialanguage);SCsetInterval();function SCsetInterval(){if(SChInterval)   clearInterval(SChInterval);SChInterval = null;if(SCShiftKeyNeeded)   SChInterval = setInterval("SCinterval()",250);else SChInterval = setInterval("SCinterval()",1000);}var SCbIsOutsideClientArea = false;function SCcaptureMouseout(evt){    SCbIsOutsideClientArea = true;    SCbMouseClicked = false;}var SClastposx=0;var SClastposy=0;var SCbInSCInterval = false;var SCintervalsession=0;function SCinterval(){ if(SCbIsKonqueror)   return; // current dont work on Konqueror SCintervalsession++; try { if(SCbInSCInterval)    return; SCbInSCInterval = true;     if(SCbIsMozilla) {   if(SCsrcElement &&       SCsrcElement.toString().match(/HTMLHtmlElement/i))     SCbIsOutsideClientArea = true; } if(SCbIsKonqueror||SCbIsOpera) {   if(SCsrcElement &&       SCsrcElement.toString().match(/HTMLBodyElement/i))     SCbIsOutsideClientArea = true;   else SCbIsOutsideClientArea = false; } else if(SCbIsIE) {    SCgetScrollXY();    SCScreenSize();    if(SCposx > SCscreenWidth+SCscrOfX-4 ||       SCposy > SCscreenHeight+SCscrOfY-4)       SCbIsOutsideClientArea = true; } var mes = document.getElementById("SCmessage");  if(mes && SCsrcElement)    mes.innerHTML = SCbIsOutsideClientArea + ":" +     SCbMouseClicked + ":" +     SCposx+","+SCposy+"::"+SCsrcElement.toString();var posx = SCpposx - SCposx;if(posx < 0) posx = - posx;var posy = SCpposy - SCposy;if(posy < 0) posy = - posy;if(!SCbMouseClicked && posx < 4 &&   posy < 4  && (SCcurrentLink == "" || SCcurrentLink == null ||!document.getElementById(SCcurrentLink))){    if(SCsrcElement &&       !(SClastposx == SCposx        && SClastposy == SCposy)        && !SCbIsOutsideClientArea      )    {     SCFindElementUnderMouseOver(SCsrcElement);     if(!SCShiftKeyNeeded)     {       SClastposx = SCposx;       SClastposy = SCposy;     }         }}else if((SCcurrentLink != "" && SCcurrentLink != null && document.getElementById(SCcurrentLink))      &&       (posx > 4 || posy > 4)      && !SCbIsOutsideClientArea      && ((SCShiftKeyNeeded && SCintervalsession%4==0)||!SCShiftKeyNeeded)       )     SChidespan(SCcurrentLink);  if(!SCdonthide && !SCbMouseClicked      && ((SCShiftKeyNeeded && SCintervalsession%4==0)||!SCShiftKeyNeeded)    )  {    SCpposx = SCposx;    SCpposy = SCposy;  }  SCbInSCInterval = false;  } catch(e) {SCbInSCInterval = false; }}function SCcaptureMousemove(evt){   SCbIsOutsideClientArea = false;   SCFindPositionOfMouseClick(evt);   var posx = SCposx - SCpposx;   var posy = SCposy - SCpposy;   if(posx < 0) posx = - posx;   if(posy < 0) posy = - posy;     if(!(posx < 4 && posy < 4))     SCbMouseClicked = false;}// capture right mouse clickfunction SCcaptureMousedown(evt){var mouseClick;if(evt) mouseClick = evt.which;else mouseClick = window.event.button;if(/*mouseClick == 1 &&*/ SCbIsOutsideClientArea==false){  SCbMouseClicked = true;}}//http://www.quirksmode.org/js/events_properties.htmlfunction SCFindPositionOfMouseClick(e) {SCposx = 0;SCposy = 0; if (!e) var e = window.event;if (e.pageX || e.pageY) {  SCposx = e.pageX;SCposy = e.pageY;}else if (e.clientX || e.clientY) {             if(1==1)             {                  SCclientX=e.clientX;                SCclientY=e.clientY; SCposx = e.clientX +  document.body.scrollLeft+ document.documentElement.scrollLeft;SCposy = e.clientY + document.body.scrollTop+ document.documentElement.scrollTop;              }              else              {                SCposx = window.event.x+document.body.scrollLeft;                SCposy = window.event.y+document.body.scrollTop;              }      }// SCposx and SCposy contain the mouse position relative to the document  if (e.target)         {         SCsrcElement = e.target;        }else if (e.srcElement)         {         SCsrcElement = e.srcElement;        } }// find the element under the mouse click// see http://www.quirksmode.org/js/events_properties.htmlfunction SCFindElementUnderMouseOver(targ) {        if(!targ)          return;        if(!SCGoogleTrans)          return;        if(SCShiftKeyNeeded && SCShiftKey == false)          return;        if(SCwindows >= SCMaxwindows)          return;        if (targ.nodeType == 3) // defeat Safari bug        {targ = targ.parentNode;        }         if(targ.nodeName == "TEXTAREA" ||           targ.nodeName == "INPUT")             return; // if input area just return                 // only scan through text elements         var SelectionNode=null;         var SelectionOffset=null;         var SelectionAnchorNode = null;         var SelectionAnchorOffset=null;        if(SCbIsIE8 && targ.childNodes.length > SCTooManyTextElements*2)        {            return;        }         var children = targ.childNodes;         var ntextchildren = 0;                  if(SCbIsIE && children.length > SCTooManyTextElements*2)            return;         for(i=0;i<children.length;i++)         {   if(children.item(i).nodeType == 3)                     ntextchildren++;                if(ntextchildren > SCTooManyTextElements)                {                    window.status = SCstrTextTooLarge;                    return;                }         }         // if there are too many text elements to parse just return                  if(ntextchildren > SCTooManyTextElements)         {             window.status = SCstrTextTooLarge;             return;         }                           if(!(SCbIsIE||SCbIsOpera||SCbIsPre4Safari) && window.getSelection)         {          var userSelection = window.getSelection();         SCselectedText = userSelection.toString();         SelectionNode = userSelection.focusNode;         SelectionOffset = userSelection.focusOffset;         SelectionAnchorNode = userSelection.anchorNode;         SelectionAnchorOffset = userSelection.anchorOffset;         for(i=0;i<children.length;i++)         {           /*           if(userSelection.containsNode(children[i],false))            SCselection[i] = true;           else           */                      if(userSelection.containsNode(children[i],true))           {              SCselectionarray[i] = new Array();              SCselectionstart[i] = -1;              SCselectionend[i] = -1;              SCAreWordsInSelection(userSelection,SCselectionarray[i],              children[i],i)              SCselection[i] = false;           }           else            {              SCselectionarray[i] = new Array();              SCselection[i] = false;              SCselectionstart[i] = -1;              SCselectionend[i] = -1;           }         }         }         else if(SCbIsIE)         {            SCIeRange = document.selection.createRange();            SCIeRange1 = SCIeRange.duplicate();            SCSelectionType = document.selection.type;         }                  /*         var userSelection="";         if(!SCbIsIE && window.getSelection)         {   userSelection = window.getSelection();         }         */         for(i=0;i<children.length;i++)         {             if(children.item(i).nodeType == 3)             {                 var bBreak = false;                                if(SCfindwordin(targ,children.item(i),i)==true) bBreak = true;                 if(bBreak) break;                            }                            }           if(SelectionNode && window.getSelection && window.getSelection.toString()!="")           {              try {              var userSelection = window.getSelection();              if(userSelection)              {                userSelection.collapse(SelectionAnchorNode,SelectionAnchorOffset);                userSelection.extend(SelectionNode,SelectionOffset);              }              } catch(e) { }                        }         //  else if(SCbIsIE)         //     SCIeRange1.select();                 }// parent is tag, child must be text node// 1) separate child text element into//    a) SCleft span of all words left of current //    b) SCcurrent: span of current word//    c) SCright: span of all words right of current word// 2) do binarylookup-like search of SCcurrent//    span to see if it is over the cursor position// function SCfindwordin(parent,child,childindex){                  var debug = SCdebug;         SCbIsWordInSelection = false;                          var words = child.nodeValue.split(/[\s\r\n]+/);         var delimiter = " ";         var firstcharacter = "";         var lastcharacter = "";         // put a limit on the size of the text element: 4000 words                  if(words.length > 4000)         {             window.status = SCstrTextTooLarge;             return false;         }  // if a selection text item then we dont have to do   // the search, we can proceed from here  // if Wikipedia then dont do  // only check here if IE  if(typeof SCtranslateFrom != "undefined" &&     SCtranslateFrom != "Wikipedia") {     if(SCbIsIE)  {     SCselectedText = SCNotTooBigAndInSelection(parent,child,words);         if(SCselectedText != "")     {       SCbIsWordInSelection = true;       SCSetInLink(SCselectedText,parent,child,mid,delimiter,words,false);       return true;     }  }  }             if(child.nodeValue.substring(0,1).match(/[\s\r\n]/))            firstcharacter = delimiter;         if(child.nodeValue.match(/[\s\r\n]$/))            lastcharacter = delimiter;         // if language is Chinese, split every letter         // not on whitespace, as above         if(typeof SCtranslateFrom != "undefined"            && ((SCtranslateFrom.match("zh","i") || SCtranslateFrom == "ja")||               (SCtranslateFrom == "Wikipedia" &&                (SCalttranslateFrom.match("zh","i")                || SCalttranslateFrom == "ja"                )))              )        {            var tempnodeValue = child.nodeValue;            tempnodeValue.replace(/[\s\r\n]+/," ");            words = tempnodeValue.split("");         //   words = child.nodeValue.split("");            delimiter = "";        }         // no sense in searching         if(words.length <= 0)            return false;         var html1="",html2="",currentword="";         var i,j;         var high = words.length;         var mid = Math.floor(high/2);         var low = 0;         var oldmid = -1;                  var iRepetition = 0;          while(1)         {            if(oldmid == mid)               break; // have failed, don't repeat            if(++iRepetition > 20)               break; // no element is that large            if(typeof words[mid] == "undefined")               break; // have failed, don't repeat            html1 = firstcharacter; // usually nil            // create SCleft text string            /*            for(j=0;j<mid;j++)            {               html1 += words[j] + delimiter;            }            */            if(mid > 0)            {               html1 += words.slice(0,mid).join(delimiter);               html1 += delimiter;            }            // create SCright text string            /*            html2 = "";            for(j=mid+1;j<words.length;j++)            {               html2 += words[j] +                ((j!=words.length-1)?                  delimiter:"");            }            */            if(mid+1 < words.length)            {              html2 = words.slice(mid+1,words.length).join(delimiter);              if(html2 != "")                 html2 += lastcharacter;            }                       // SCcurrent text string            currentword = words[mid];            if(html2 != "")               currentword += delimiter;            if(html2 == "" && lastcharacter != "")               currentword += lastcharacter;                 // sometimes words[mid] is nil            // if the case just back up one and continue           if(currentword == delimiter) // ie, space after period            {               if(debug)    alert("resetting currentword");               if(mid<high)               {                 mid++;                 if(oldmid == mid)                    oldmid-=2;               }               else break;               continue;            }                      var left = document.createElement('SPAN');            left.setAttribute("id","SCleft");                                 var right = document.createElement('SPAN');            right.setAttribute("id","SCright");                                 var current = document.createElement('SPAN');            current.setAttribute("id","SCcurrent");                                   var str1 = document.createTextNode(html1);            var str2 = document.createTextNode(html2);            var str3 = document.createTextNode(currentword);            left.appendChild(str1);            right.appendChild(str2);            current.appendChild(str3);            // replace child text region with            // left,current, and right span elements            // TO GET CURSOR POSITIONING                                               parent.replaceChild(right,child);            parent.insertBefore(current,right);            parent.insertBefore(left,current);                                    var SCcurrent = document.getElementById("SCcurrent");            var SCleft = document.getElementById("SCleft");            var SCright = document.getElementById("SCright");            if(debug)           {      // debugging code            SCcurrent.style.backgroundColor = "yellow";            SCleft.style.backgroundColor="red";            SCright.style.backgroundColor="orange";           }            var Curx = SCfindPosX(SCcurrent);            var Cury = SCfindPosY(SCcurrent);            var Curx1 = Curx + SCcurrent.offsetWidth;            var Cury1 = Cury + SCcurrent.offsetHeight;            var Leftx = SCfindPosX(SCleft);            var Lefty = SCfindPosY(SCleft);            var Leftx1 = Leftx + SCleft.offsetWidth;            var Lefty1 = Lefty + SCleft.offsetHeight;            var Rightx = SCfindPosX(SCright);            var Righty = SCfindPosY(SCright);            var Rightx1 = Rightx + SCright.offsetWidth;            var Righty1 = Righty + SCright.offsetHeight;// special processing for IE                       var bInsertForIE = false;            var bUpForIE = false;            var bDownForIE = false;            var bBreakForIE = false;               if(SCbIsIE)            {                              var sElem = "";               sElem = SCcurrent.componentFromPoint(                       SCclientX,SCclientY);                             if(sElem == "")               {                 bInsertForIE = true;               }               else               {                 var sElem1 = "";                 var sElem2 = "";                 sElem1 = SCleft.componentFromPoint(                       SCclientX,SCclientY);                 sElem2 = SCright.componentFromPoint(                       SCclientX,SCclientY);                                  if(sElem1 == "outside" &&                    sElem2 == "outside")                   bBreakForIE=true;                 if(sElem1 == "")                   bUpForIE = true;                 if(sElem2 == "")                   bDownForIE = true;               }             }  if(debug){  alert(Curx+","+Curx1+":"+Cury+","+Cury1+"::"+SCposx+","+SCposy +      ":::" + high+","+mid+","+low);  alert(Lefty+","+Lefty1+":"+Righty+","+Righty1+"::"+SCposx+","+SCposy +      ":::" + high+","+mid+","+low);  }            var currentHeight = SCcurrent.offsetHeight;            var currentWidth = SCcurrent.offsetWidth;                        parent.removeChild(right);            parent.removeChild(current);            parent.replaceChild(child,left);           // parent.replaceChild(child,span1);                // if cursor below whole element then fail            if(1==0 && SCposy > Righty1 && Righty < Righty1 &&               Lefty1 != Righty1              )             {               if(debug)alert("left break");               break;             }    //  if cursor before whole element then fail            if(1==0 &&SCposy < Lefty && Lefty < Lefty1)            {              if(debug)alert("right break");               break;            }                       if(bBreakForIE)               break;                        oldmid = mid;            var SCbCursorOverSelection=false;            if(!SCbIsIE&&!SCbIsOpera&&!SCbIsPre4Safari)            {                             if(SCselection[childindex] == true)               {                 SCbCursorOverSelection=true;                              }               else if(SCselectionarray[childindex].length>=mid &&                  SCselectionarray[childindex][mid] == true)               {                 SCbCursorOverSelection=true;                                }                                         }            if((SCposx >= Curx && SCposx <= Curx1               && SCposy >= Cury && SCposy <= Cury1) ||                 bInsertForIE)            {                             var linkText = words[mid];               if(!SCbIsIE && SCbCursorOverSelection && SCtranslateFrom != "Wikipedia")               {                   linkText = SCselectedText;                   SCbIsWordInSelection = true;               }                      SCSetInLink(linkText,parent,child,mid,delimiter,words,true);                              return true;            }            if(bUpForIE)            {               high = mid;               mid = Math.floor((low + high)/2);            }            else if(bDownForIE)            {               low = mid;               mid = Math.floor((low + high)/2);            }            else            if(Cury > SCposy) // go up in element            {               high = mid;               mid = Math.floor((low + high)/2);            }            else if(Cury1 < SCposy) // go down in element            {               low = mid;               mid = Math.floor((low + high)/2);            }            else if(SCposx < Curx) // go up in element            {               high = mid;               mid = Math.floor((low + high)/2);            }            else if(SCposx > Curx1)  // go down in element            {               low = mid;               mid = Math.floor((low + high)/2);            }               }     return false;          }var SCindex = 0;  // for ids of translation windows// put the translation window near the cursor pointvar SCcurrentLink = "";var SClinkword = "";function SCSetInLink(word,parent,child,wordindex,delimiter,words,bIsSearchDone){    if(SCwindows >= SCMaxwindows)     return;  SCwindows++;  var linkname = "SC" + (++SCindex);  SCcurrentLink = linkname;  // take out punctuation if single word   if(word.split(/\s/).length==1)     word = word.replace(/[.;:?!,]/g,"");  SClinkword = word;  if(word.length > SCMaxWordLength)  {    word = word.substring(0,SCMaxWordLength);    word += "...";  }  if((SCtranslateFrom == "ja" ||     SCtranslateFrom.match("zh","i")) &&     !SCbIsWordInSelection    )  //   && SCtranslateTo != "en")  {//ch|ja to non en language       // translate to next punctuation markvar i;var wordlist="";        var beginindex = (wordindex > 0)?wordindex-1:0;        var endindex = words.length-1;for(i=beginindex;i<=endindex;i++){if(words[i].match(/\s/))  break;wordlist += words[i];}word = wordlist;          }  var str1 = document.createTextNode(word);  var a1 = document.createElement("DIV");  a1.setAttribute("id",linkname);   if(!SCbIsIE)  a1.setAttribute("class","SCPopup");  else a1.className = "SCPopupIE";  if(!SCbIsIE)   {    a1.setAttribute("onMousedown",'SChidespan("' + linkname + '")');  }  a1.setAttribute("onMouseover","SCdonthide=true;");  a1.setAttribute("onMouseout","SCdonthide=false;");    SCbInsertSpan = false;   if(SCtranslateFrom != "Wikipedia")  {     a1.appendChild(str1);     SCWikihtml = SCWikipediaLink(wordindex,delimiter,words).innerHTML;     SCDicthtml = "";       }  else  {  a1.appendChild(SCWikipediaLink(wordindex,delimiter,words));    SCWikihtml="";    SCDicthtml=word;   if(!SCbIsIE)    {            a1.setAttribute("onMousedown","");            a1.firstChild.setAttribute("onMousedown","");   }    }    var thebody = document.getElementsByTagName("BODY");//  var html = document.getElementsByTagName("HTML");             var item = document.getElementById("SCitem");      if(item)        item.appendChild(a1);              if(SCtranslateFrom == "Wikipedia")    {       SCsetLanguageDefault("wikipedialanguageoptions",                       "Wikipedialanguage")        }   // cursorposition is absolute, positioning of   // webpage elements may upset translation window   // positioning, so append this window to body.   // position window  SCPositionPopup(linkname,true);    if(SCtranslateFrom != "Wikipedia")  {    var theword = word;    if((SCtranslateFrom.match("zh","i")      || SCtranslateFrom == "ja")      && !SCbIsWordInSelection      )    {      var currword = word;      var beginindex = (wordindex > 0)?wordindex-1:0;      var endindex = (wordindex < words.length-1)?                      wordindex+1:wordindex;      var numwords = endindex - beginindex;      if(numwords == 2)        theword += " " + words[beginindex]+currword +" "+currword + words[endindex];      else if(numwords == 1 && beginindex == wordindex)        theword += " " + currword + words[endindex];       else if(numwords == 1 && endindex == wordindex)        theword += " " + words[beginindex] + currword;      beginindex = wordindex;      // we use cedit and edict for english stuff      if(SCtranslateTo == "en"&&1==0)      {endindex = (wordindex+10 < words.length)?wordindex+10:words.length-1;var i;var wordlist="";for(i=beginindex;i<=endindex;i++){if(words[i].match(/[\r\n\s]/))break;wordlist += words[i];}if(i-beginindex > 2)theword += " " + wordlist;      }      else       {//ch|ja to non en language       // translate to next punctuation markvar i;var wordlist="";        endindex = words.length-1;for(i=beginindex;i<=endindex;i++){if(words[i].match(/\s/))  break;                words[i] = words[i].replace(/\'/g,"\u0026#39;");        words[i] = words[i].replace(/\"/g,"\u0026quot;");wordlist += words[i];}theword = wordlist;             }    }    SCasyncGet(linkname, theword);  }  }// is the current element in a link and does this link have a title?function SCIsSrcElementInALink(){   if(!SCsrcElement)      return false;      if(SCsrcElement.nodeName.match(/^a$/i)      && ((SCsrcElement.getAttribute("title") != null &&          SCsrcElement.getAttribute("title") != "")          ||          typeof popupVersion != "undefined")         )      return true;   var Elem = SCsrcElement;   while(Elem.parentNode)   {      if(Elem.nodeName.match(/^a$/i)      && ((Elem.getAttribute("title") != null &&          Elem.getAttribute("title") != "")          ||          typeof popupVersion != "undefined")         )      return true;      Elem = Elem.parentNode;   }   return false;   }function SCPositionPopup(linkname,bAdjust){  var a2 = document.getElementById(linkname);  var thebody = document.getElementsByTagName("BODY");  var posyadjust = 0;  var posxadjust = 0;  var bAdjustPosition = SCIsSrcElementInALink();  if(bAdjustPosition && typeof popupVersion != "undefined" && bAdjust)      posyadjust = -SCPosYAdjust;  else if(bAdjustPosition)      posyadjust = SCPosYAdjust;   if(a2 && a2.style)  {        if(SCbIsIE)    {      // for ie      // body overflow needs to be set    //  a2.style.position = "absolute";      a2.style.left = SCposx;      a2.style.top = SCposy + posyadjust;      a2.onMouseover=new Function("SCdonthide=true;");      a2.onMouseout=new Function("SCdonthide=false;");// if in ie the initial span goes over the right        // side of screenvar doclength = SCfinddoclength(a2);var a2overflow = (SCposx+a2.scrollWidth+1) - doclength;        if(a2overflow > 0){  var newposx =  SCposx - a2overflow;//  a2.style.position="absolute";  a2.style.left = newposx;  a2.style.top=SCposy + posyadjust;       }    }    else    {        // a2 element returns 0 for following function        var doclength = SCfinddoclength(thebody[0]);        var a2overflow = (SCposx+a2.scrollWidth+1) - doclength;if(a2overflow > 0){  var newposx =  SCposx - a2overflow;//  a2.style.position="absolute";  a2.style.left = newposx + "px";  a2.style.top=(SCposy + posyadjust) + "px";//    }      else      {          a2.style.left = (SCposx) + "px";          a2.style.top = (SCposy + posyadjust) + "px";      }         }//    a2.style.display="block";        }}// after translation window has been left clicked// remove itfunction SChidespan(id){     if(SCdonthide)    return; // so change of language can be done    try  {    SCwindows--;  if(SCwindows < 0) SCwindows = 0;    var ob = document.getElementById(id);  //alert(ob.innerHTML)  if(SCbIsOpera && !ob)     alert("ob not found");  if(SCbIsOpera && 1==0)  {     ob = document.getElementById("SCitem");// delete all childrenwhile(ob.childNodes.length>0){ob.removeChild(ob.childNodes[0]);}  }  else  {    var styl = ob.style;    styl.display = "none";    if(ob && ob.parentNode)     ob.parentNode.removeChild(ob);  else     if(SCbIsOpera) alert("maybe no parentnode");  }  }  catch(err)  {    if(SCbIsOpera)      alert("unable to hide " + id);  }    // clear the html  SCWikihtml = "";  SCDicthtml = "";  }function SCfinddoclength(obj){        var ScrollBarOffset = 0;        if(SCbIsIE)        {            ScrollBarOffset = 20;        }if(SCbIsOpera)          return window.innerWidth;        else          return document.body.clientWidth-ScrollBarOffset; // minus the scroll bar if IEif (obj.offsetParent){while (obj.offsetParent){obj = obj.offsetParent;}        }               return obj.offsetWidth;}// code from http://www.quirksmode.org/js/findpos.htmlfunction SCfindPosX(obj){var curleft = 0;        if(!obj)           return 0;if (obj.offsetParent){while (obj.offsetParent){curleft += obj.offsetLeftobj = obj.offsetParent;}}else if (obj.x){curleft += obj.x;}return curleft;}// code from http://www.quirksmode.org/js/findpos.htmlfunction SCfindPosY(obj){var curtop = 0;        if(!obj)           return 0;        if (obj.offsetParent){while (obj.offsetParent){curtop += obj.offsetTopobj = obj.offsetParent;}}else if (obj.y)        {curtop += obj.y;        }return curtop;}// place meaning within translation windowfunction SCInsertTranslation(translatedword){// var translatedword = SCrequest.responseText;                 var translation = translatedword.split("|");// translation[0] id of window// translation[1] word// translation[2] translated word            var meaning = translation[2];  if(meaning == '\n')     meaning = "NOT FOUND!!";          meaning = meaning.replace(/\\u0026#39;/gi,"'");          meaning = meaning.replace(/\\u0026quot;/gi,'"');                    if(SCtranslateFrom == "Wikipedia" && !SCbInsertSpan)          {            SCDicthtml = meaning;            return;          }          SCbInsertSpan = true;          // SCbInsertSpan = false;          var ob = document.getElementById(translation[0]);  if(ob)  {try{                                               var span1 = document.createElement("SPAN");                     var newid = "x" + translation[0];                     span1.setAttribute("id",newid);                                               span1.innerHTML =                              meaning;     if(SCbIsIE)                     {                         var newfunction = new Function("SCdonthide=false;");                         span1.onmouseout = newfunction;                          var newfunction1 = new Function("SCdonthide=true;");                         span1.onmouseover = newfunction1;                      }                               ob.replaceChild(span1,ob.firstChild);                     var span2 = document.getElementById(newid);      var bIsInLink = SCIsSrcElementInALink();                     var pixelstring = "px";                     if(SCbIsIE)                         pixelstring = "";                     // the following code handles the IE                      // case where the yellow window goes                     // to the right of the body                    if(!SCbIsSafari)                     {                     var doclength = SCfinddoclength(span2.parentNode);                     var span2overflow = (SCposx+span2.scrollWidth+1) - doclength;                                       if(span2overflow > 0)                     {                                              var newposx =  SCposx - span2overflow;                       span2.parentNode.style.position="absolute";                       span2.parentNode.style.left = newposx;                       span2.parentNode.style.top=SCposy;       if(bIsInLink && typeof popupVersion == "undefined")                          span2.parentNode.style.top = (SCposy + SCPosYAdjust) + pixelstring;                     }                    }                                       if(bIsInLink && typeof popupVersion != "undefined")                    {                       span2.parentNode.style.top = (SCposy - span2.parentNode.offsetHeight) + pixelstring;                    }   }catch(err){  alert("unable to set innerHTML");}}        //else alert("no id:" + translatedword);}// issue Google Ajax requestfunction SCasyncGet(id,word){   var languagepath = "en|fr";   // consult SCtranslate for language translation   if(typeof SCtranslateFrom != "undefined"      && typeof SCtranslateTo != "undefined"     )   {       languagepath = SCtranslateFrom + "|" +                       SCtranslateTo;   }      var persistantlanguagepathFrom = SCPersistantLoad('languageFrom');   var persistantlanguagepathTo = SCPersistantLoad('languageTo');      if(persistantlanguagepathFrom != "" &&      persistantlanguagepathTo != "")        languagepath = persistantlanguagepathFrom +              "|" + persistantlanguagepathTo;   if(languagepath=="Wikipedia")        languagepath = "en|fr";//   if(languagepath == "Wikipedia")//   {//   }//   else   {     // google limits to 500 characters of translation     if(word.length > SCMaxWordLength)        word = word.substring(0,SCMaxWordLength);     var bIsSelectedText = "NO";     if(SCbIsWordInSelection)         bIsSelectedText = "YES";     SCgoogleLookup(word,id);   }}function SCreplaceHtml(obj,newhtml){ while(obj.childNodes.length>0) {   obj.removeChild(obj.childNodes[0]); } var newspan = document.createElement("SPAN"); newspan.innerHTML = newhtml obj.appendChild(newspan);}function SClanguageChange(obj,id){ var langoptions =  obj.options[     obj.selectedIndex     ].value; if(id.match(/From/)) {   SCtranslateFrom = langoptions;   SCPersistantSave('languageFrom',SCtranslateFrom); } else if(id.match(/To/)) {   SCtranslateTo = langoptions;   SCPersistantSave('languageTo',SCtranslateTo); }// SCtranslate = langoptions; //SCdonthide = false; //SChidespan(SCcurrentLink);}function SCwikipedialanguageChange(obj){ var langoptions =  obj.options[     obj.selectedIndex     ].value; SCWikipedialanguage = langoptions; SCPersistantSave('Wikipedialanguage',SCWikipedialanguage); var objWiki = document.getElementById(SCcurrentLink); if(!objWiki) {   alert("objWiki failed: " + SCcurrentLink);    }  var arrLinks = objWiki.getElementsByTagName("A"); var i; for(i=0;i<arrLinks.length;i++) {   var theonclick = arrLinks[i].getAttribute("onclick");     if(!theonclick)      continue;   if(theonclick.toString().match(/^(.*)..\.wikipedia\.org\?(.*)$/mi))   {           var newonclick =       RegExp.$1 +          SCWikipedialanguage +".wikipedia.org" + '?' + RegExp.$2;               if(SCbIsIE)      {                           if(newonclick.match(/\{(\s*javascript:)?(.*)\}/mi) ||            newonclick.match(/(javascript:)?(.*)/mi))         {                      var newfunction = new Function("return " + RegExp.$2 + ";");           arrLinks[i].onclick = newfunction;          }      }      else         arrLinks[i].setAttribute("onclick",newonclick);   } } }function SCSettings(){  var linkname = "SC" + (++SCindex);  SCcurrentLink = linkname;  var str1 = document.createTextNode("");  var a1 = document.createElement("DIV");  a1.setAttribute("id",linkname);   if(!SCbIsIE) // firefox accepts these attributes                    // ie does not  {    a1.setAttribute("onMousedown",'SChidespan("' + linkname + '")');    a1.setAttribute("class","SCPopup");    /*    a1.setAttribute("style","text-decoration:none;background-color:" + SCPopupBackgroundColor + ";border: 1px solid blue;position:absolute;font-size:14pt;z-index:9999;overflow:visible;display:none;line-height:normal;");  */  }    if(SCbIsIE)   {       a1.className="SCPopupIE";  //   a1.setAttribute("href",'javascript:SChidespan("' + linkname +  '")');  }  a1.setAttribute("onMouseover","SCdonthide=true;");  a1.setAttribute("onMouseout","SCdonthide=false;");  a1.appendChild(str1);    if(!SCbIsIE)    {            a1.setAttribute("onMousedown","");           // a1.firstChild.setAttribute("onMousedown","");   }  var thebody = document.getElementsByTagName("BODY");//  var html = document.getElementsByTagName("HTML");         var item = document.getElementById("SCitem");      if(item)        item.appendChild(a1);      SCPositionPopup(linkname,false);      SCmakevisiblelanguagechange();    }function SCHideSettings(){  SCdonthide=false;  SCPersistantSave('GoogleTrans',(SCGoogleTrans)?"1":"0");  var popsid = document.getElementById("ca-TransPopsId");  if(!popsid)      return;    var anchor1 = popsid.getElementsByTagName( "a" )[0];  if(!anchor1)     return;  var text1;   if(SCGoogleTrans)    text1 = document.createTextNode(SCstrGoogleTrans  + SCstrOn);  else     text1 = document.createTextNode(SCstrGoogleTrans + SCstrOff);   // delete text from anchor in tab while(anchor1.childNodes.length>0) {   anchor1.removeChild(anchor1.childNodes[0]); } // replace text in anchor in tab anchor1.appendChild(text1);     SChidespan(SCcurrentLink);}function SCSaveShiftKeyNeeded(){   if(SCbNoShiftKeyBrowser)   {     SCShiftKeyNeeded = false;     return;   }   SCsetInterval();   SCPersistantSave("shiftkeyneeded",SCShiftKeyNeeded?"1":"0");}var SCnewhtml = "";function SCmakevisiblelanguagechange(){var obj = document.getElementById(SCcurrentLink);if(!obj){  alert("unable to get object: SCmakevisiblelanguagechange " + SCcurrentLink);  return;}SCdonthide = true;var persistantlanguageFrom = SCPersistantLoad('languageFrom');if(persistantlanguageFrom == "")   persistantlanguageFrom = SCLanguageDefaultFrom;var persistantlanguageTo = SCPersistantLoad('languageTo');if(persistantlanguageTo == "")   persistantlanguageTo = SCLanguageDefaultTo;var newhtml = '<a class="SCxWindow" href="javascript:SCdonthide=false;SChidespan(\'' +SCcurrentLink +'\')">X</a>' +'<small><a href="javascript:;"' +' style="text-decoration:underline;" ' +' onclick="javascript:SCGoogleTrans=' +((SCGoogleTrans)?"false":"true") + ';SCHideSettings();">' +((SCGoogleTrans)?SCstrTurnOffPopups:SCstrTurnOnPopups) +'</a>' + '&nbsp;&nbsp;<a style="text-decoration:underline" href="javascript:;"  onclick="javascript:window.open(\''+SCstrHelpUrl+'\');">' + SCstrPopupHelp+'</a>'+'<br><a href="javascript:;"' +' style="text-decoration:underline;" ' +' onclick="javascript:SCShiftKeyNeeded=' +((SCShiftKeyNeeded)?"false":"true") +';SCSaveShiftKeyNeeded()' +';SCHideSettings();">' +SCstrShiftKeyNeeded +((SCShiftKeyNeeded)?SCstrOff:SCstrOn) +'</a></small>' +'<br>&nbsp;&nbsp;' + '<small>' + SCstrSelectLanguage + '</small><br>' +'<SELECT name="languageoptionsFrom" id="languageoptionsFrom"' + 'onchange="SClanguageChange(this,\'languageFrom\')"' +' onMouseover="javascript:SCdonthide=true;" class="SChidestuff">' +//' onMouseout="javascript:SCdonthide=false;">' + SCnewoptions + '</select>' +'<SELECT name="languageoptionsTo" id="languageoptionsTo"' + 'onchange="SClanguageChange(this,\'languageTo\')">' +' onMouseover="javascript:SCdonthide=true;">' +//' onMouseout="javascript:SCdonthide=false;">' + SCnewoptions + '</select>&nbsp;&nbsp;<br><small>' +SCstrSingleWord + SCstrOn + '<br>' +SCstrSelectedText + ((SCbIsIE || (SCbIsMozilla&&!(SCbIsOpera||SCbIsKonqueror||SCbIsPre4Safari )))?SCstrOn:SCstrOff) +((SCbIsKonqueror)?SCstrKonqueror + '<br>' : '') +'<br>'; var newspan = document.createElement("DIV");  newspan.setAttribute("onMouseover","javascript:SCdonthide=true;");  if(SCbIsIE)  {     newspan.onmouseover = new Function("SCdonthide=true;");  } newspan.innerHTML = newhtml; var i;  while(obj.childNodes.length>0) {   obj.removeChild(obj.childNodes[0]); }  // obj.replaceChild(newspan,obj.firstChild);  obj.appendChild(newspan);if(SCbIsSafari)    obj.setAttribute("onMousedown",""); // obj.innerHTML = newhtml;   SCsetLanguageDefault("languageoptionsFrom","languageFrom");   SCsetLanguageDefault("languageoptionsTo","languageTo");   }function SCsetLanguageDefault(id,key){  var i;  var obj = document.getElementById(id);  if(!obj)      return;    var defaultlanguage = SCPersistantLoad(key);  if(defaultlanguage == "")  {     //     if(typeof SCtranslate == "undefined")     {        if(key.match(/From/))          defaultlanguage = SCLanguageDefaultFrom;        else if(key.match(/To/))          defaultlanguage = SCLanguageDefaultTo;         }//     else defaultlanguage = SCtranslate;  }  if(!obj || (obj && !obj.options))  {     alert("setLanguageDefault: bad object passed!" +      id + ":" +      key);  }  for(i=0;i<obj.options.length;i++)  {     obj.options[i].selected = false;     if(obj.options[i].value.match(defaultlanguage,"i"))     {        obj.options[i].selected = true;              }  }   if(SCbIsSafari)  {     obj.setAttribute("style","text-decoration:underline");  }}function SCPersistantSave(key,value){/*   if(SCbIsIE)       SCUserDataSave(key,value);   else if(typeof globalStorage != "undefined")        SCGlobalStorageSave(key,value);   else */   SCsetcookieVal(key,value);}function SCPersistantLoad(key){   /*   if(SCbIsIE)       return SCUserDataLoad(key);   else if(typeof globalStorage != "undefined")        return SCGlobalStorageLoad(key);   else */    return SCgetcookieVal(key); }function SCUserDataSave(key,value){  SCPersistElement.setAttribute(key,value);  SCPersistElement.save("oXMLStore");}function SCUserDataLoad(key){  SCPersistElement.load("oXMLStore");  var retc = SCPersistElement.getAttribute(key);  if(retc == null)    retc = "";  return retc;}function SCGlobalStorageSave(key,value){  if(globalStorage)  {    eval ("globalStorage['www.securecottage.com']." +          key + "='" + value + "'");  }}function SCGlobalStorageLoad(key){  var retc = "";  if(globalStorage)  {     retc =     eval ("globalStorage['wikipedia.org']." +          key );     if (retc == null)        return "";          return retc.value;       }  return "";}function SCsetcookieVal(cookieKey,cookieValue){   var ExpireDate = new Date();//   ExpireDate.setYear(ExpireDate.getYear() + 1910);   ExpireDate.setYear(ExpireDate.getUTCFullYear() + 10);   document.cookie =  cookieKey + '=' + cookieValue +           "; path=/; "         //  + "domain=" + document.domain + "; "           + "expires=" + ExpireDate.toGMTString();  }function SCgetcookieVal(cookieName){    var aCookie = "";  var thisCookie;      aCookie = document.cookie;  thisCookie = aCookie.split("; ");  var i;  var retCookie = "";  for(i=0;i<thisCookie.length;i++)  {     if(cookieName == thisCookie[i].split("=")[0].substring(0,cookieName.length))     {           retCookie = thisCookie[i].split("=")[1];           break;     }  }    return retCookie;}function SCwikichange(obj){  var parobj = document.getElementById(SCcurrentLink);  if(parobj && SCWikihtml != "")  {     SCalttranslateFrom = SCtranslateFrom;     SCalttranslateTo = SCtranslateTo;     SCtranslateFrom = "Wikipedia";     SCDicthtml = parobj.innerHTML;     if(SCbIsIE||SCbIsSafari)        SCreplaceHtml(parobj,SCWikihtml);     else        parobj.innerHTML = SCWikihtml;    SCsetLanguageDefault("wikipedialanguageoptions",                       "Wikipedialanguage")   if(SCbIsSafari)             parobj.setAttribute("onMousedown","");  //  SChidewradd();  }}function SCdictionarychange(obj){  var parobj = document.getElementById(SCcurrentLink);    if(parobj && SCDicthtml != "")  {     SCtranslateFrom = SCalttranslateFrom;     SCtranslateTo = SCalttranslateTo;     SCtranslateFrom = SCPersistantLoad('languageFrom');     SCtranslateTo = SCPersistantLoad('languageTo');     if(SCtranslateFrom == "")         SCtranslateFrom = SCLanguageDefaultFrom;     if(SCtranslateTo == "")         SCtranslateTo = SCLanguageDefaultTo;     SCWikihtml = parobj.innerHTML;     if(SCbIsIE||SCbIsSafari)       SCreplaceHtml(parobj,SCDicthtml);     else       parobj.innerHTML = SCDicthtml;     if(parobj && !SCbIsIE)     {        parobj.setAttribute("onMousedown",'SChidespan("' + SCcurrentLink + '")');     }     if(!SCbInsertSpan)     {             SCasyncGet(SCcurrentLink,SCDicthtml);       SCbInsertSpan=true;           }      }}function SCWikipediaLink(wordindex,delimiter,words){  var i,j;    var newhtml = '<span ' +' onMouseover="javascript:SCdonthide=true;"' +' onMouseout="javascript:SCdonthide=false;">' +'<a href="javascript:SCmakevisiblelanguagechange()"' +' style="text-decoration:underline"' +' onMouseover="javascript:SCdonthide=true;"' +'>' +'Wikipedia</a>';  newhtml +=  '&nbsp;&nbsp;<a href="javascript:SCdictionarychange(this)"' +' style="text-decoration:underline"' +' onMouseover="javascript:SCdonthide=true;"' +'>' +'Dictionary?</a>';  newhtml += '<br><small>Wikipedia language</small><br>' +'<SELECT name="Wikipedialanguageoptions" id="wikipedialanguageoptions"' + 'onchange="SCwikipedialanguageChange(this)">' +' onMouseover="javascript:SCdonthide=true;"' +'>' +SCnewoptions +'</select><br>';  var numwords=4;  if((SCtranslateFrom.match("zh","i")       || SCtranslateFrom == "ja"     )       ||     (SCtranslateFrom == "Wikipedia" &&       (SCalttranslateFrom.match("zh","i") ||       SCalttranslateFrom == "ja"        ))     )      numwords = 10;  var wordindexend = wordindex + numwords;  if(wordindexend > words.length-1)     wordindexend = words.length-1;  for(i=wordindex;i<=wordindexend;i++)  {     var linktext = "";     for(j=wordindex;j<=i;j++)     {        var theword="";        if(words[j].match(/^(.*)\'s$/))           theword = RegExp.$1;        else theword = words[j];        theword = theword.replace(/\'/g,"\u0026#39;");        theword = theword.replace(/\"/g,"\u0026quot;");        linktext += theword;        if(j<i)          linktext += delimiter;     }     newhtml += '<br><a ' +'onMouseover="javascript:SCdonthide=true;" ' + ' href="javascript:SCdonthide=false;SChidespan(\'' + SCcurrentLink + '\');" ' + 'onclick=\'javascript:window.open(\"http://' +SCWikipedialanguage.substring(0,2) + '.wikipedia.org?go=Go&search=' +     encodeURIComponent(linktext) + '\")\'>' + linktext + '</a>';       }  newhtml +='<br><a href="javascript:SCdonthide=false;SChidespan(' + '\'' + SCcurrentLink +'\')"><small>Close Window</small></a></span>';  var newspan = document.createElement("SPAN");  newspan.innerHTML = newhtml;  return newspan;}//http://www.howtocreate.co.uk/tutorials/javascript/browserwindowfunction SCScreenSize() {    if( typeof( window.innerWidth ) == 'number' ) {    //Non-IE    SCscreenWidth = window.innerWidth;    SCscreenHeight = window.innerHeight;  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {    //IE 6+ in 'standards compliant mode'    SCscreenWidth = document.documentElement.clientWidth;    SCscreenHeight = document.documentElement.clientHeight;  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {    //IE 4 compatible    SCscreenWidth = document.body.clientWidth;    SCscreenHeight = document.body.clientHeight;  } }//http://www.howtocreate.co.uk/tutorials/javascript/browserwindowfunction SCgetScrollXY() {  if( typeof( window.pageYOffset ) == 'number' ) {    //Netscape compliant    SCscrOfY = window.pageYOffset;    SCscrOfX = window.pageXOffset;  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {    //DOM compliant    SCscrOfY = document.body.scrollTop;    SCscrOfX = document.body.scrollLeft;  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {    //IE6 standards compliant mode    SCscrOfY = document.documentElement.scrollTop;    SCscrOfX = document.documentElement.scrollLeft;  }}// is the current cursor position inside // a selected area.  The selected area must be // within one node and be on the same line// only works for IEfunction SCNotTooBigAndInSelection(theparent,thechild){  if(!SCbIsIE)      return "";  var retWordList = SCIsInSelection(theparent,thechild);  if(retWordList == "" || retWordList == null)      return "";  var retWordArray = retWordList.split(/[\r\n\s]+/);  return retWordList;}// only works for IEfunction SCIsInSelection(theparent,thechild){var returnSelectedText="";var debug = false;var userSelection;if(SCbIsIE) // IE{  var debug=false;   if(SCSelectionType.match(/none/i)||SCSelectionType == ""||SCSelectionType == null)    return "";   if(SCSelectionType.match(/text/i))  {    var range = SCIeRange;    var s = range.text;    var collection = range.getClientRects();    var i;    for(i=0;i<collection.length;i++)    {       var leftt = collection[i].left +           document.body.scrollLeft+           document.documentElement.scrollLeft;       var rightt =  collection[i].right +           document.body.scrollLeft+           document.documentElement.scrollLeft;       var topp = collection[i].top +           document.body.scrollTop+           document.documentElement.scrollTop;       var bottomm = collection[i].bottom +           document.body.scrollTop+           document.documentElement.scrollTop;    if(SCposx >= leftt    && SCposx <= rightt    && SCposy >= topp    && SCposy <= bottomm    )       return s;  if(debug)       alert(collection[i].left+"-"+collection[i].right+"_"+             collection[i].top +"_"+collection[i].bottom+"__"+        leftt+":"       + ":" + rightt + ":" +       ":"+document.body.scrollLeft +":"+           document.documentElement.scrollLeft +       ":"+topp+":"        +bottomm+":"+":"         +document.body.scrollTop+":" +        document.documentElement.scrollTop +":"       +SCposx+":"+SCposy);    }    return "";   }  }}function SCgetRangeObject(selectionObject) { // Safari!var range = document.createRange();range.setStart(selectionObject.anchorNode,selectionObject.anchorOffset);range.setEnd(selectionObject.focusNode,selectionObject.focusOffset);return range;}function SCAreWordsInSelection(userSelection,SCselectionarray,child,childindex){    var range = SCgetRangeObject(userSelection);  var str = child.nodeValue;  if(str == "" || str == null)    return;  var delimiter = /^[\r\n ]+/  var delimiter1 = /^\S+/;  var bNoSpace = false;  if(SCtranslateFrom.match("zh","i") ||     SCtranslateFrom == "ja")  {    bNoSpace = true;  }  SCselectionstart[childindex] = -1;  SCselectionend[childindex] = -1;  var range1 = document.createRange();  var i,j,k;  for(i=0,j=0;i<str.length;i++)  {        if(SCisPointInRange(range,range1,child,i))    {       if(SCselectionstart[childindex] == -1)         SCselectionstart[childindex] = i;       SCselectionend[childindex] = i;    }        if(str.substring(i).match(delimiter))      continue;    else    {       if(SCisPointInRange(range,range1,child,i))      {        SCselectionarray[j] = true;      }      else SCselectionarray[j] = false;      j++;    }    k=i;    for(k=i;!bNoSpace && k<str.length;k++)    {      if(SCisPointInRange(range,range1,child,k))        SCselectionend[childindex] = k;      if(!str.substring(k).match(delimiter1))        break;    }    i=k;            }}function SCOldAreWordsInSelection(userSelection,SCselectionarray,child,childindex){  var range = SCgetRangeObject(userSelection);  var str = child.nodeValue;  if(str == "" || str == null)    return;  var delimiter = /^[\r\n ]+/  var delimiter1 = /^\S+/;  var bNoSpace = false;  if(SCtranslateFrom.match("zh","i") ||     SCtranslateFrom == "ja")  {    bNoSpace = true;  }  SCselectionstart[childindex] = -1;  SCselectionend[childindex] = -1;  var range1 = document.createRange();  var i,j,k;  for(i=0,j=0;i<str.length;i++)  {        if(range.isPointInRange(child,i))    {       if(SCselectionstart[childindex] == -1)         SCselectionstart[childindex] = i;       SCselectionend[childindex] = i;    }        if(str.substring(i).match(delimiter))      continue;    else    {       if(range.isPointInRange(child,i))      {        SCselectionarray[j] = true;      }      else SCselectionarray[j] = false;      j++;    }    k=i;    for(k=i;!bNoSpace && k<str.length-1;k++)    {      if(!str.substring(k+1).match(delimiter1))        break;    }    i=k;    if(range.isPointInRange(child,i))      SCselectionend[childindex] = i;        }}function SCisPointInRange(range,range1,child,i){    if(SCbIsMozilla)       return range.isPointInRange(child,i);    range1.setStart(child,i);    range1.setEnd(child,i);    if(range.compareBoundaryPoints(Range.START_TO_START,range1) <= 0 &&       range.compareBoundaryPoints(Range.END_TO_END,range1) >= 0)       return true;    else return false;}function SCgoogleLookup(text,label) {      SClabel = label;      SCtext = text;      SCgoogletranslate =       "http://translate.google.com/translate?hl=en" + "&tl=" + SCtranslateTo +"&u=" +          encodeURIComponent(document.location.href);                 google.language.translate(text, "", SCtranslateTo,             function(result) {                          if (result.translation||result.error)        {        var nbspstr = "";       var i;       var SClanguagestrlength = SCGetGoogleLanguage(SCtranslateTo).length + 10;       if(SClanguagestrlength < SCSourcestrlength)          SClanguagestrlength = SCSourcestrlength+10;       if(result.translation)       {       for(i=result.translation.length;i<SClanguagestrlength;i++)       {              nbspstr+="&nbsp;";       }       }       var pretranslatedword = "";       if(SClinkword.split(/\s/).length == 1)           pretranslatedword = SClinkword + ": ";       var insertstring = SClabel + '|' + SCtext + '|' +      SClanguageprompt1 +  '→ ' +   SCGetGoogleLanguage(SCtranslateTo) +     SClanguageprompt2 +   SCgooglereference2 +      SClabel + SCgooglereference3 +       '<div class="SCxText">' +            ((result.translation)?            (pretranslatedword + result.translation)            :result.error.message) + nbspstr +'</div>' +      '<div><br>' +      SCgooglereference1 +       SCgoogletranslate +      SCgooglereference1a      + '</div>'      ;             SCInsertTranslation(insertstring);        }                });     } SCScreenSize();function SCGetGoogleLanguage(lcode){  var l;  for (l in google.language.Languages)  {     if(lcode == google.language.Languages[l])       return (l.substring(0,1).toUpperCase() + l.substring(1).toLowerCase());   }  return "undefined";}SCScreenSize();addOnloadHook(    function () {        SCcreateEvents();    });addOnloadHook(    function () {        var bPops = SCPersistantLoad('GoogleTrans');                var title = SCstrGoogleTrans;        if(bPops == "1" || bPops == "")        {           SCGoogleTrans = true;           title += SCstrOn;           if(bPops == "")              SCPersistantSave('GoogleTrans','1');        }        else        {           SCGoogleTrans = false;           title += SCstrOff;        }    //    SCMakeGoogleLanguages();        mw.util.addPortletLink('p-cactions',"javascript:SCSettings()", title, "ca-TransPopsId", SCstrChangeOptions, "");    });