// Copyright 2004 Macromedia, Inc. All rights reserved.


//--------------------------------------------------------------------
// FUNCTION:
//   updatePageDirective
//
// DESCRIPTION:
//   This function is called when a user changes their document encoding
//	 or the document type of their document.
//
// ARGUMENTS:
//   dom - The Document DOM of the document to be opened.
//
// RETURNS:
//   none
//--------------------------------------------------------------------

function updatePageDirective(dom)
{
  if (dom)
  {
var encoding = dom.getCharSet();
    if (encoding)
    {
      var codepage = charsetToCodePage(encoding);

      var docStr = dom.documentElement.outerHTML;
      var endSearch = -1;
      var pageDirectiveStart = -1;
      var startSearch = docStr.indexOf('<%');
      if (startSearch > -1)
        endSearch = docStr.indexOf('%>');
        
      if (startSearch > -1 && endSearch > 0){
        pageDirectiveStart = docStr.substring(startSearch,endSearch).search( /@LANGUAGE=/i );
      }

      if( pageDirectiveStart > -1 )
      {
        var pageDirectiveEnd = 0;
        pageDirectiveEnd = docStr.indexOf("%>", pageDirectiveStart) + 2;

        if(pageDirectiveEnd > 1 && pageDirectiveEnd > pageDirectiveStart)
        {
          var oldLangStr = docStr.substring(pageDirectiveStart, pageDirectiveEnd);
          var newLangStr = oldLangStr;
          newLangStr = newLangStr.replace(/(codepage=)"[\w-]*"/i, "$1\"" + codepage + "\"");  // double quotes
          newLangStr = newLangStr.replace(/(codepage=)'[\w-]*'/i, "$1'" + codepage + "'");    // single quotes
          if (newLangStr != oldLangStr)
          {
            var newDocStr = docStr.substring(0, pageDirectiveStart) +
                            newLangStr +
                            docStr.substring(pageDirectiveEnd);
            dom.documentElement.outerHTML = newDocStr;
          }
        }
      }

	 /* For jsp */  
      
      pageDirectiveStart = docStr.search( /<%@\s*Page/i );
  	  
  
      if( pageDirectiveStart > -1 )
      {
        var pageDirectiveEnd = 0;
        pageDirectiveEnd = docStr.indexOf("%>", pageDirectiveStart) + 2;
        
        if(pageDirectiveEnd > 1 && pageDirectiveEnd > pageDirectiveStart)
        {
          var oldLangStr = docStr.substring(pageDirectiveStart, pageDirectiveEnd);
        
	  var newLangStr = oldLangStr;
          //Either one of the following would work.
          newLangStr = oldLangStr.replace(/(charset=)[\w-]*/i, "$1" + encoding);
          newLangStr = newLangStr.replace(/(ResponseEncoding=\"\")[\w-]*/i, "ResponseEncoding=\""+ encoding +"\"");
                  
          if (newLangStr != oldLangStr)
          {
            var newDocStr = docStr.substring(0, pageDirectiveStart) +
                            newLangStr +
                            docStr.substring(pageDirectiveEnd);
  		      dom.documentElement.outerHTML = newDocStr;
          }
        }
      }

    }
  }
}


//--------------------------------------------------------------------
// FUNCTION:
//   charsetToCodePage
//
// DESCRIPTION:
//   This function returns the correct codepage value for the given character set
//
// ARGUMENTS:
//   charset - string - the charset to determine the code page for
//
// RETURNS:
//   string
//--------------------------------------------------------------------

function charsetToCodePage(charset)
{
  charset = charset.toLowerCase();

  var codepage = "CP_ACP";  // default value

  if (charset.indexOf( "iso-8859-1" ) != -1)
  {
    codepage = "1252";
  }
  else if (charset.indexOf( "utf-8" ) != -1)
  {
    codepage = "65001";
  }
  else if (charset.indexOf( "shift_jis" ) != -1)
  {
    codepage = "932";
  }
  else if (charset.indexOf( "iso-2022-jp" ) != -1)
  {
    codepage = "CODE_JPN_JIS";
  }
  else if (charset.indexOf( "euc-jp" ) != -1)
  {
    codepage = "CODE_JPN_EUC";
  }
  else if (charset.indexOf( "big5" ) != -1)
  {
    codepage = "950";
  }
  else if (charset.indexOf( "gb2312" ) != -1)
  {
    codepage = "936";
  }
  else if (charset.indexOf( "euc-kr" ) != -1)
  {
    codepage = "949";
  }
  else if (charset.indexOf( "din_66003-kr" ) != -1)
  {
    codepage = "20106";
  }
  else if (charset.indexOf( "ns_4551-1-kr" ) != -1)
  {
    codepage = "20108";
  }
  else if (charset.indexOf( "sen_850200_b" ) != -1)
  {
    codepage = "20107";
  }
  else if (charset.indexOf( "_autodetect" ) != -1)
  {
    codepage = "50932";
  }
  else if (charset.indexOf( "_autodetect_kr" ) != -1)
  {
    codepage = "50949";
  }
  else if (charset.indexOf( "csISO2022jp" ) != -1)
  {
    codepage = "50221";
  }
  else if (charset.indexOf( "hz-gb-2312" ) != -1)
  {
    codepage = "52936";
  }
  else if (charset.indexOf( "ibm852" ) != -1)
  {
    codepage = "852";
  }
  else if (charset.indexOf( "ibm866" ) != -1)
  {
    codepage = "866";
  }
  else if (charset.indexOf( "irv" ) != -1)
  {
    codepage = "20105";
  }
  else if (charset.indexOf( "iso-2022-kr" ) != -1)
  {
    codepage = "949";
  }
  else if (charset.indexOf( "iso-8859-2" ) != -1)
  {
    codepage = "28592";
  }
  else if (charset.indexOf( "iso-8859-3" ) != -1)
  {
    codepage = "28593";
  }
  else if (charset.indexOf( "iso-8859-4" ) != -1)
  {
    codepage = "28594";
  }
  else if (charset.indexOf( "iso-8859-5" ) != -1)
  {
    codepage = "28595";
  }
  else if (charset.indexOf( "iso-8859-6" ) != -1)
  {
    codepage = "28596";
  }
  else if (charset.indexOf( "iso-8859-7" ) != -1)
  {
    codepage = "28597";
  }
  else if (charset.indexOf( "iso-8859-8" ) != -1)
  {
    codepage = "28598";
  }
  else if (charset.indexOf( "iso-8859-9" ) != -1)
  {
    codepage = "1254";
  }
  else if (charset.indexOf( "koi8-r" ) != -1)
  {
    codepage = "20866";
  }
  else if (charset.indexOf( "ks_c_5601" ) != -1)
  {
    codepage = "949";
  }
  else if (charset.indexOf( "unicode" ) != -1)
  {
    codepage = "1200";
  }
  else if (charset.indexOf( "unicodeFEFF" ) != -1)
  {
    codepage = "1201";
  }
  else if (charset.indexOf( "utf-7" ) != -1)
  {
    codepage = "65000";
  }
  else if (charset.indexOf( "windows-1250" ) != -1)
  {
    codepage = "1250";
  }
  else if (charset.indexOf( "windows-1251" ) != -1)
  {
    codepage = "1251";
  }
  else if (charset.indexOf( "windows-1252" ) != -1)
  {
    codepage = "1252";
  }
  else if (charset.indexOf( "windows-1253" ) != -1)
  {
    codepage = "1253";
  }
  else if (charset.indexOf( "windows-1254" ) != -1)
  {
    codepage = "1254";
  }
  else if (charset.indexOf( "windows-1255" ) != -1)
  {
    codepage = "1255";
  }
  else if (charset.indexOf( "windows-1256" ) != -1)
  {
    codepage = "1256";
  }
  else if (charset.indexOf( "windows-1257" ) != -1)
  {
    codepage = "1257";
  }
  else if (charset.indexOf( "windows-1258" ) != -1)
  {
    codepage = "1258";
  }
  else if (charset.indexOf( "windows-874" ) != -1)
  {
    codepage = "874";
  }
  else if (charset.indexOf( "x-euc" ) != -1)
  {
    codepage = "51932";
  }
  else if (charset.indexOf( "x-user-defined" ) != -1)
  {
    codepage = "50000";
  }
  else if (charset.indexOf( "asmo-708" ) != -1)
  {
    codepage = "708";
  }
  else if (charset.indexOf( "dos-720" ) != -1)
  {
    codepage = "720";
  }
  else if (charset.indexOf( "dos-862" ) != -1)
  {
    codepage = "862";
  }
  else if (charset.indexOf( "dos-874" ) != -1)
  {
    codepage = "874";
  }
  else if (charset.indexOf( "cp866" ) != -1)
  {
    codepage = "866";
  }
  else if (charset.indexOf( "cp1256" ) != -1)
  {
    codepage = "1256";
  }
  

  return codepage;
}