








function Ps3EncodeDecToHex(iDec)
{
 var oHex = new String("");
 var iR;
 var i;

 if (iDec)
 {
 var iIndex=0;
 while(iDec > 0)
 {
 iR = iDec % (1<<(4*(iIndex+1)));

 iCharIn = iDec;

 iR = iR/(1<<(4*iIndex));
 iDec -= (iR*(1<<(4*iIndex)));

 if (iR>9)
 oHex += String.fromCharCode(97+(iR-10));
 else
 oHex += String.fromCharCode(48+iR);

 iIndex++;
 if (iIndex> 8 )
 break;
 }
 }
 else
 {
 oHex="0";
 }

 var oRval = new String("");

 i=oHex.length;
 while (i>0)
 oRval += oHex.charAt(--i);

 return(oRval);
}


function Ps3EncodeHexToDec(sHex)
{
 var oHex = new String("");
 var iDec;
 var iR;
 var i;

 if (0 == sHex.length)
 {
 alert("Ps3EncodeHexToDec: Zero Len Hex - sHex("+sHex+")");
 return(0);
 }

 iDec=0;
 for(i=0; i<sHex.length; i++)
 {
 var iOffset=sHex.length-i-1;
 var iChar=sHex.charCodeAt(i);
 var iVal;

 if ((iChar>=48) && (iChar<=57))
 {
 iVal=iChar-48;
 }
 else if ((iChar>=97) && (iChar<=102))
 {
 iVal=(iChar-97)+10;
 }
 else
 {
 alert("Ps3EncodeHexToDec: BAD iChar - iChar("+iChar+")");
 return(0);
 }

 iDec += (iVal * (1<<(4*iOffset)));
 }

 return(iDec);
}


function Ps3EncodeEncodePse1(sIn)
{
 var oOut = new String("pse1");
 var i;

 for(i=0; i<sIn.length; i++)
 {
 var iChar = sIn.charCodeAt(i);

 if ((iChar>=97) && (iChar<=119))
 oOut+=String.fromCharCode(iChar);

 else if ((iChar>=65) && (iChar<=90))
 oOut+=String.fromCharCode(iChar);

 else if ((iChar>=48) && (iChar<=57))
 oOut+=String.fromCharCode(iChar);

 else if (iChar<256)
 oOut=oOut+"x"+Ps3EncodeDecToHex(iChar);

 else if (iChar<4096)
 oOut=oOut+"y"+Ps3EncodeDecToHex(iChar);

 else if (iChar<65536)
 oOut=oOut+"z"+Ps3EncodeDecToHex(iChar);

 else if (iChar<256)
 oOut=oOut+"ERROR";
 }

 return(oOut);
}


function Ps3EncodeDecodePse1(sIn)
{
 var oOut = new String("");
 var i;

 if (sIn.length < 4)
 {
 alert("Ps3EncodeDecodePse1: TOO SHORT -> sIn(" + sIn + ")");
 return("");
 }

 if ( ( 112  != sIn.charCodeAt(0))
 || ( 115  != sIn.charCodeAt(1))
 || ( 101  != sIn.charCodeAt(2))
 || ( 49  != sIn.charCodeAt(3))
 )
 {
 alert("Ps3EncodeDecodePse1: BAD 4CC -> sIn(" + sIn + ")");
 return("");
 }

 for(i=4; i<sIn.length; i++)
 {
 var iChar = sIn.charCodeAt(i);

 if ((iChar>=97) && (iChar<=119))
 oOut+=String.fromCharCode(iChar);

 else if ((iChar>=65) && (iChar<=90))
 oOut+=String.fromCharCode(iChar);

 else if ((iChar>=48) && (iChar<=57))
 oOut+=String.fromCharCode(iChar);

 else if (iChar <= 122)
 {
 var oHex = new String("");
 var iDec = -1;

 i++;


 if (120 == iChar)
 {
 oHex += sIn.charAt(i);
 oHex += sIn.charAt(i+1);
 i+=1;
 }

 else if (121 == iChar)
 {
 oHex += sIn.charAt(i);
 oHex += sIn.charAt(i+1);
 oHex += sIn.charAt(i+2);
 i+=2;
 }

 else if (122 == iChar)
 {
 oHex += sIn.charAt(i);
 oHex += sIn.charAt(i+1);
 oHex += sIn.charAt(i+2);
 oHex += sIn.charAt(i+3);
 i+=3;
 }
 else
 {
 alert("Ps3EncodeDecodePse1: BAD HEX CHAR -> iHexChar(" + iHexChar + ")");
 return("");
 }

 iDec=Ps3EncodeHexToDec(oHex);
 oOut+=String.fromCharCode(iDec);


 }
 else
 {
 alert("Ps3EncodeDecodePse1: BAD ENCODED CHAR -> iChar(" + iChar + ")");
 return("");
 }
 }

 return(oOut);
}

