//
//  youtube.js
//

var specialChars = new Array(
  0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
  0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffd, 0x017d, 0xfffd,
  0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
  0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffd, 0x017e, 0x0178
);

function getstr(str, pos) {
  var res = str.charCodeAt(pos);

  if ( res == 0xfffd ) {
    return 0;
  }

  for ( var i = 0; i < specialChars.length; i++ ) {
    if ( res == specialChars[i] ) {
	    res = 0x80 + i;
    }
  }
  return res;
}

function ReverseString(str) {
  var chara;
  var i = 0;
  var result = new String("");

  while( i < str.length ) {
    var code = 0;
    chara = getstr( str, i++ );
    if ( chara == 0 ) {
	    continue;
    } else if ( chara < 0x80 ) {
      code |= chara;
    } else if ( chara < 0xe0 ) {
      code |= (chara & 0x001f) << 6;
	    chara = getstr( str, i++ );
	    if ( chara == 0    ) {
        continue;
      }
	    if ( chara == 0x20 ) {
        chara = 0xa0;
      }
      code |= (chara & 0x003f);
    } else if ( chara < 0x100 ) {
      code |= (chara & 0x000f) << 12;
	    chara = getstr( str, i++ );
	    if ( chara == 0    ) {
        continue;
      }
	    if ( chara == 0x20 ) {
        chara = 0xa0;
      }
      code |= (chara & 0x003f) << 6;
	    chara = getstr( str, i++ );
	    if ( chara == 0    ) {
        continue;
      }
	    if ( chara == 0x20 ) {
        chara = 0xa0;
      }
      code |= (chara & 0x003f);
    } else {
    code = chara;
	  }
    result += String.fromCharCode(code);
  }
  return result;
}

