#ifndef _CPDETECT_H_
#define _CPDETECT_H_

#define MAX_CONFIDENCE     100  
#define MIN_CONFIDENCE     86
#define MIN_DOCPERCENT     60
#define MIN_TEXT_SIZE      200
#define HIGHEST_ASCII      127
#define MIN_ACCEPTABLE_CONFIDENCE   60

#define DEFAULT_CPMRU_INIT_HITS 100
#define DEFAULT_CPMRU_FACTOR    20
#define CP_AUTO_MRU_NUM         6
#define DEFAULT_CPMRU_NUM       10
#define MAX_CPMRU_NUM           20
#define MAX_ENTITY_LENTH        10

#define IsNoise(c) ((unsigned)(c) <= 0x20 && (c) != 0 && (c) != 0x1B)
#define IS_ENCODED_ENCODING(cp) ((cp) == CP_ISO_2022_JP || (cp) == CP_CHN_HZ || (cp) == CP_UTF_7 || (cp) == CP_UTF_8 || (cp) == CP_ISO_2022_KR)

typedef struct _CODEPAGE_MRU 
{
    DWORD   dwEncoding;
    DWORD   dwHistoryHits;
} CODEPAGE_MRU, *PCODEPAGE_MRU;

typedef struct tagCpPatch
{
    UINT            srcEncoding;
    UINT            destEncoding;
    UINT            nSize;
    unsigned char   *pszUch;
} CPPATCH;

// Dump everything under
// HKCU\\Software\\Microsoft\\Internet Explorer\\International
#define REGSTR_PATH_CPMRU TSZMICROSOFTPATH TEXT("\\Internet Explorer\\International\\CpMRU")
#define REG_KEY_CPMRU                   TEXT("Cache")
#define REG_KEY_CPMRU_ENABLE            TEXT("Enable")
#define REG_KEY_CPMRU_NUM               TEXT("Size")
#define REG_KEY_CPMRU_INIT_HITS         TEXT("InitHits")
#define REG_KEY_CPMRU_PERCENTAGE_FACTOR TEXT("Factor")


// CCpMRU
class CCpMRU
{
    PCODEPAGE_MRU   _pCpMRU;

    DWORD           dwCpMRUNum;
    DWORD           dwCpMRUInitHits;
    DWORD           dwCpMRUFactor;

public:
    DWORD           dwCpMRUEnable;
    BOOL            bCpUpdated;

    CCpMRU::CCpMRU(void)
    {
        // No update at initial time
        bCpUpdated = FALSE;
        _pCpMRU = NULL;
    }

    ~CCpMRU(void);
    HRESULT Init(void);
    HRESULT GetCpMRU(PCODEPAGE_MRU pCpMRU, UINT *puiCpNum);
    void UpdateCPMRU(DWORD dwEncoding);

};
void RemoveHtmlTags (LPSTR pIn, UINT *pnBytes);
UINT PatchCodePage(UINT uiEncoding, unsigned char *pStr, int nSize);
extern class CCpMRU * g_pCpMRU;

#endif  // _CPDETECT_H_