function utf8_decode(utftext) 
{ var plaintext = ""; var i=0; var c=c1=c2=0;
  // while-Schleife, weil einige Zeichen uebersprungen werden
  while(i<utftext.length)
  { c = utftext.charCodeAt(i);
    if (c<128) 
    { plaintext += String.fromCharCode(c);
      i++;
    }
    else 
      if((c>191) && (c<224)) 
      { c2 = utftext.charCodeAt(i+1);
        plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
        i+=2;
      }
      else 
      { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
        plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
        i+=3;
      }
   }
   return plaintext;
}

function chr(ascii) 
{ return String.fromCharCode(ascii);
}

// see here for a list:  http://en.wikipedia.org/wiki/Alphabets_derived_from_the_Latin
// note that Notepad2 doesn't support all chars.
function StripAccents(theword)
{ var letter, tempWord, charcase;
  tempWord = '';
  for(var i = 0; i <theword.length; i++) /* optimalisation */
  { if(theword.charCodeAt(i) >= 128) 
      break;
  }
  if(i == theword.length)
     return theword;
  for(i = 0; i <theword.length; i++)
  { letter = theword.charAt(i);
    if(letter <= "~") 
    { tempWord = tempWord.concat(letter);
      continue;
    }
    if(letter == letter.toLowerCase())
      charcase = false;
    else
      charcase = true;
    switch (letter.toLowerCase())
    { case 'á': case 'à': case 'â': case 'ä': case 'å': case 'ą': 
      case 'ă': case 'ã': case 'ǻ': case 'ā':
        letter = 'a';
        break;
      case 'æ':
        letter = 'ae'; case 'ǽ':
        break;
       case 'ß':
        letter = 'ss';
        break;
     case 'ç': case 'č': case 'ć': case 'ĉ': case 'ċ':
        letter = 'c';
        break;
      case 'đ': case 'ď': case 'ð': 
        letter = 'd';
       	break;
      case 'é': case 'è': case 'ė': case 'ê': case 'ë': case 'ě': 
      case 'ĕ': case 'ē': case 'ę': 
        letter = 'e';
        break;
      case 'ğ': case 'ģ': case 'ġ':
        letter = 'g';
        break;
      case 'ĥ': case 'ħ':
        letter = 'h';
        break;
      case 'ı': case 'í': case 'ì': case 'î': case 'ï': case 'ĭ':
      case 'ī': case 'ĩ': case 'į':
        letter = 'i';
        break;
      case 'ĳ':
        letter = 'ij';
        break;
      case 'ĵ':
        letter = 'j';
        break;
      case 'ķ':
        letter = 'k';
        break;
      case 'ĺ': case 'ļ': case 'ł': case 'ľ': case 'ŀ':
        letter = 'l';
        break;
      case 'ŉ': case 'ń': case 'n̈': case 'ň': case 'ñ': case 'ń': 
      case 'ņ': case 'ŋ':
        letter = 'n';
       	break;
      case 'ó': case 'ò': case 'ô': case 'ö': case 'ŏ': case 'ō':
      case 'õ': case 'ő': case 'ø': case 'ǿ':
        letter = 'o';
        break;
      case 'œ':
        letter = 'oe';
        break;
      case 'ř': case 'ŕ': case 'ŗ':
        letter = 'r';
        break;
      case 'ś': case 'ŝ': case 'š': case 'ş': 
        letter = 's';
        break;
      case 'ţ': case 'ť': case 'ŧ': case 'þ':
        letter = 't';
        break;
      case 'ú': case 'ù': case 'û': case 'ü': case 'ů': case 'ŭ':
      case 'ū': case 'ũ': case 'ű': case 'ů': case 'ų':
        letter = 'u';
        break;
     case 'ẃ': case 'ẁ': case 'ŵ': case 'ẅ':
        letter = 'w';
        break;
      case 'ý': case 'ỳ': case 'ŷ': case 'ÿ':
        letter = 'y';
        break;
      case 'ź': case 'ż': case 'ž': 
        letter = 'z';
        break;
       case '': 
        letter = "'";
        break;
   }
    if(charcase) 
      letter = letter.toUpperCase();
    tempWord = tempWord.concat(letter);
  }
  return tempWord;
}

/* converts the short form of the name to the filename. Note that replace needs /g to be global */
function htmlize(xfile)
{ 
//  xfile = utf8_decode(xfile);
  xfile = xfile.replace(/ /g,"_");
  xfile = xfile.replace(/\'/g,""); /* looks like this must be apart */
  xfile = xfile.replace(/[,()\.]/g,"");  /* 13-2-2009: removed "-" */
  xfile = xfile.replace(/_&_/g,"_and_");
//  xfile = xfile.replace(/\+/g,"&");
  xfile = xfile.replace(/:/g,"-");
  xfile = StripAccents(xfile);
  return xfile.toLowerCase();
}

// flatten and deflatten are used in localsubmit() in edit.php
function flatten()
{ if(MainForm.composer)
  { if(MainForm.composer.selectedIndex)
    { utf8_composer =  MainForm.composer.options[MainForm.composer.selectedIndex].text;
      MainForm.composer.options[MainForm.composer.selectedIndex].text = StripAccents(utf8_composer);
    }
    else
    { utf8_composer =  MainForm.composer.value;
      MainForm.composer.value = StripAccents(utf8_composer);
    }
  }
  if(MainForm.performer)
  { if(MainForm.performer.selectedIndex)
    { utf8_performer = MainForm.performer.options[MainForm.performer.selectedIndex].text;
      MainForm.performer.options[MainForm.performer.selectedIndex].text = StripAccents(utf8_performer);
    }
    else
    { utf8_performer = MainForm.performer.value;
      MainForm.performer.value = StripAccents(utf8_performer);
    }
  }
  if(( MainForm.tabname.value == "composer") || (MainForm.tabname.value == "performer")) 
  { if(MainForm.shortname.selectedIndex)
    { utf8_shortname = MainForm.shortname.options[MainForm.shortname.selectedIndex].text;
      MainForm.shortname.options[MainForm.shortname.selectedIndex].text = StripAccents(utf8_shortname);
    }
    else /* editperformer */
    { utf8_shortname = MainForm.shortname.value;
      MainForm.shortname.value = StripAccents(utf8_shortname);
    }
  }
}

function deflatten()
{ if(MainForm.composer)
  { if(MainForm.composer.selectedIndex)
      MainForm.composer.options[MainForm.composer.selectedIndex].text = utf8_composer;
    else
      MainForm.composer.value = utf8_composer;
  }
  if(MainForm.performer)
  { if(MainForm.performer.selectedIndex)
      MainForm.performer.options[MainForm.performer.selectedIndex].text = utf8_performer;
    else
      MainForm.performer.value = utf8_performer;
  }
  if(( MainForm.tabname.value == "composer") || (MainForm.tabname.value == "performer"))
  { if(MainForm.shortname.selectedIndex)
      MainForm.shortname.options[MainForm.shortname.selectedIndex].text = utf8_shortname;
    else
      MainForm.shortname.value = utf8_shortname;
  } 
}

/***********************************************
* Bookmark site script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/

/* Modified to support Opera */
function bookmarksite(title,url){
if (window.sidebar) // firefox
	window.sidebar.addPanel(title, url, "");
else if(window.opera && window.print){ // opera
	var elem = document.createElement('a');
	elem.setAttribute('href',url);
	elem.setAttribute('title',title);
	elem.setAttribute('rel','sidebar');
	elem.click();
} 
else if(document.all)// ie
	window.external.AddFavorite(url, title);
}

