/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_shell.hxx"


#include "internal/config.hxx"
#include "internal/dbgmacros.hxx"
#include "internal/utilities.hxx"

//-----------------------------
// constants
//-----------------------------

const size_t MAX_RES_STRING = 1024;
const wchar_t SPACE_CHAR = _T(' ');

//---------------------------------
/**
*/
std::wstring StringToWString(const std::string& String)
{
    int len = MultiByteToWideChar(
        CP_ACP, 0, String.c_str(), -1, 0, 0);
    
    wchar_t* buff = reinterpret_cast<wchar_t*>(
        _alloca(len * sizeof(wchar_t)));

    MultiByteToWideChar(
        CP_ACP, 0, String.c_str(), -1, buff, len);

    return std::wstring(buff);
}

//---------------------------------
/**
*/
std::string WStringToString(const std::wstring& String)
{
    int len = WideCharToMultiByte(
        CP_ACP, 0, String.c_str(), -1, 0, 0, 0, 0);
    
    char* buff = reinterpret_cast<char*>(
        _alloca(len * sizeof(char)));

    WideCharToMultiByte(
        CP_ACP, 0, String.c_str(), -1, buff, len, 0, 0);

    return std::string(buff);
}

//---------------------------------
/**
*/
std::wstring GetResString(int ResId)
{
    wchar_t szResStr[MAX_RES_STRING];

    int rc = LoadStringW( GetModuleHandleW(MODULE_NAME), ResId, szResStr, sizeof(szResStr) );

    OutputDebugStringFormat( "GetResString: read %d chars\n", rc );
    ENSURE(rc, "String resource not found");

    return std::wstring(szResStr);
}

//---------------------------------
/**
*/
bool is_windows_xp_or_above()
{
    OSVERSIONINFO osvi;        
    ZeroMemory(&osvi, sizeof(osvi));
    osvi.dwOSVersionInfoSize = sizeof(osvi);        
    GetVersionEx(&osvi);

    // LLA: check for windows xp or above (Vista)
    if (osvi.dwMajorVersion > 5 ||
        (5 == osvi.dwMajorVersion && osvi.dwMinorVersion >= 1))
    {
        return true;
    }
    return false;
}

//---------------------------------
/**
*/

void SaveDebugInfoToFile( const std::wstring& str )
{
   int handle;

   if ((handle = open("c:\\temp\\SHELLRESULT.$$$", O_CREAT | O_RDWR | O_APPEND )) == -1)
   {
      perror("Error: open file error");
      return;
   }
   write(handle, str.c_str(), str.length() );
   close(handle);
}

//---------------------------------
/** helper function to judge if the string is only has spaces.
    @returns
        <TRUE>if the provided string contains only but at least one space
        character else <FALSE/>.
*/

bool HasOnlySpaces(const std::wstring& String)
{
    if ( String.length() == 0 )
        return false; 

    const wchar_t* p = String.c_str();

    while (*p)
    {
        if (*p++ != SPACE_CHAR)
            return false;
    }

    return true;
}

//---------------------------------
/** helper function to convert windows paths to short form.
    @returns
        shortend path.
*/

std::wstring getShortPathName( const std::wstring& aLongName )
{
    std::wstring shortName = aLongName;
    long         length    = GetShortPathName( aLongName.c_str(), NULL, 0 );

    if ( length != 0 )
    {
        TCHAR* buffer = new TCHAR[ length+1 ];
        length = GetShortPathName( aLongName.c_str(), buffer, length );
        if ( length != 0 )
            shortName = std::wstring( buffer );
        delete [] buffer;
    }
    return shortName;
}

/** convert LocaleSet pair into Microsoft List of Locale ID (LCID) 
    according to ISO-639 and ISO-3166.
    http://etext.lib.virginia.edu/tei/iso639.html
    http://nl.ijs.si/gnusl/cee/std/ISO_3166.html
    @param 
        Locale, LocaleSet 
    @returns
        Windows Locale Identifier corresponding to input LocaleSet.
    @Usage Sample
        LocaleSet_t myDefaultLocale( ::std::wstring( L"zh" ),::std::wstring(L"HK") );
        DWORD myLCID = LocaleSetToLCID( myDefaultLocale );
        wchar_t  buffer[20];
        _ultow( myLCID, buffer, 16 );
        MessageBox( NULL, buffer,L"the LCID is:",MB_OK );
*/

LCID LocaleSetToLCID( const LocaleSet_t & Locale )
{
    if ( EMPTY_LOCALE == Locale )
        return GetSystemDefaultLCID();

    USHORT usPrimaryLang= LANG_NEUTRAL;
	USHORT usSubLang=SUBLANG_DEFAULT;

    ::std::wstring wsLanguage(Locale.first);
	::std::wstring wsCountry(Locale.second);

    if  ( wsLanguage == L"ar" )
    {
        usPrimaryLang = LANG_ARABIC;                      // Arabic 01

        if ( wsCountry == L"SA" ) 
            usSubLang = SUBLANG_ARABIC_SAUDI_ARABIA;          // Arabic (Saudi Arabia) 
        else if ( wsCountry == L"IQ" ) 
            usSubLang = SUBLANG_ARABIC_IRAQ;                  // Arabic (Iraq) 
        else if ( wsCountry == L"EG" ) 
            usSubLang = SUBLANG_ARABIC_EGYPT;                 // Arabic (Egypt) 
        else if ( wsCountry == L"LY" ) 
            usSubLang = SUBLANG_ARABIC_LIBYA;                 // Arabic (Libya) 
        else if ( wsCountry == L"DZ" ) 
            usSubLang = SUBLANG_ARABIC_ALGERIA;               // Arabic (Algeria) 
        else if ( wsCountry == L"MA" ) 
            usSubLang = SUBLANG_ARABIC_MOROCCO;               // Arabic (Morocco) 
        else if ( wsCountry == L"TN" ) 
            usSubLang = SUBLANG_ARABIC_TUNISIA;               // Arabic (Tunisia) 
        else if ( wsCountry == L"OM" ) 
            usSubLang = SUBLANG_ARABIC_OMAN;                  // Arabic (Oman) 
        else if ( wsCountry == L"YE" ) 
            usSubLang = SUBLANG_ARABIC_YEMEN;                 // Arabic (Yemen) 
        else if ( wsCountry == L"SY" ) 
            usSubLang = SUBLANG_ARABIC_SYRIA;                 // Arabic (Syria) 
        else if ( wsCountry == L"JO" ) 
            usSubLang = SUBLANG_ARABIC_JORDAN;                // Arabic (Jordan) 
        else if ( wsCountry == L"LB" ) 
            usSubLang = SUBLANG_ARABIC_LEBANON;               // Arabic (Lebanon) 
        else if ( wsCountry == L"KW" ) 
            usSubLang = SUBLANG_ARABIC_KUWAIT;                // Arabic (Kuwait) 
        else if ( wsCountry == L"AE" ) 
            usSubLang = SUBLANG_ARABIC_UAE;                   // Arabic (U.A.E.) 
        else if ( wsCountry == L"BH" ) 
            usSubLang = SUBLANG_ARABIC_BAHRAIN;               // Arabic (Bahrain) 
        else if ( wsCountry == L"QA" ) 
            usSubLang = SUBLANG_ARABIC_QATAR;                 // Arabic (Qatar) 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"bg" ) 
        usPrimaryLang = LANG_BULGARIAN;                   //Bulgarian 02
    else if ( wsLanguage == L"ca" ) 
        usPrimaryLang = LANG_CATALAN;                     //Catalan 03
    else if ( wsLanguage == L"zh" )
    {
        usPrimaryLang = LANG_CHINESE;                     //Chinese               
        if ( wsCountry == L"TW" ) 
            usSubLang = SUBLANG_CHINESE_TRADITIONAL;          // Chinese (Traditional) 
        else if ( wsCountry == L"CN" ) 
            usSubLang = SUBLANG_CHINESE_SIMPLIFIED;           // Chinese (Simplified) 
        else if ( wsCountry == L"HK" ) 
            usSubLang = SUBLANG_CHINESE_HONGKONG;             // Chinese (Hong Kong SAR, PRC) 
        else if ( wsCountry == L"SG" ) 
            usSubLang = SUBLANG_CHINESE_SINGAPORE;            // Chinese (Singapore) 
        else if ( wsCountry == L"MO" ) 
            usSubLang = SUBLANG_CHINESE_MACAU;                // Chinese (Macau SAR) 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"cs" )                            
        usPrimaryLang = LANG_CZECH;                       //Czech              
    else if ( wsLanguage == L"da" )                            
        usPrimaryLang = LANG_DANISH;                      //Danish             
    else if ( wsLanguage == L"de" )             
    {
        usPrimaryLang = LANG_GERMAN;                      //German  
        if ( wsCountry == L"DE" ) 
            usSubLang = SUBLANG_GERMAN;                       // German 
        else if ( wsCountry == L"CH" ) 
            usSubLang = SUBLANG_GERMAN_SWISS;                 // German (Swiss) 
        else if ( wsCountry == L"AT" ) 
            usSubLang = SUBLANG_GERMAN_AUSTRIAN;              // German (Austrian) 
        else if ( wsCountry == L"LU" ) 
            usSubLang = SUBLANG_GERMAN_LUXEMBOURG;            // German (Luxembourg) 
        else if ( wsCountry == L"LI" ) 
            usSubLang = SUBLANG_GERMAN_LIECHTENSTEIN;         // German (Liechtenstein) 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"el" )                            
        usPrimaryLang = LANG_GREEK;                       //Greek              
    else if ( wsLanguage == L"en" ) 
    {
        usPrimaryLang = LANG_ENGLISH;                         //English  
        if ( wsCountry == L"US" ) 
            usSubLang = SUBLANG_ENGLISH_US;                   // English (US) 
        else if ( wsCountry == L"GB" ) 
            usSubLang = SUBLANG_ENGLISH_UK;                   // English (UK) 
        else if ( wsCountry == L"AU" ) 
            usSubLang = SUBLANG_ENGLISH_AUS;                  // English (Australian) 
        else if ( wsCountry == L"CA" ) 
            usSubLang = SUBLANG_ENGLISH_CAN;                  // English (Canadian) 
        else if ( wsCountry == L"NZ" ) 
            usSubLang = SUBLANG_ENGLISH_NZ;                   // English (New Zealand) 
        else if ( wsCountry == L"IE" ) 
            usSubLang = SUBLANG_ENGLISH_EIRE;                 // English (Ireland) 
        else if ( wsCountry == L"ZA" ) 
            usSubLang = SUBLANG_ENGLISH_SOUTH_AFRICA;         // English (South Africa) 
        else if ( wsCountry == L"JM" ) 
            usSubLang = SUBLANG_ENGLISH_JAMAICA;              // English (Jamaica) 
        else if ( wsCountry == L"GD" ) 
            usSubLang = SUBLANG_ENGLISH_CARIBBEAN;            // English (Caribbean) Grenada
        else if ( wsCountry == L"BZ" ) 
            usSubLang = SUBLANG_ENGLISH_BELIZE;               // English (Belize) 
        else if ( wsCountry == L"TT" ) 
            usSubLang = SUBLANG_ENGLISH_TRINIDAD;             // English (Trinidad) 
        else if ( wsCountry == L"ZW" ) 
            usSubLang = SUBLANG_ENGLISH_ZIMBABWE;             // English (Zimbabwe) 
        else if ( wsCountry == L"PH" ) 
            usSubLang = SUBLANG_ENGLISH_PHILIPPINES;          // English (Philippines) 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"es" )     
    {
        usPrimaryLang = LANG_SPANISH;                     //Spanish      
        //else if ( wsCountry == L"ES" ) 
        //  usSubLang = SUBLANG_SPANISH;                      // Spanish (Castilian) 
        if ( wsCountry == L"MX" ) 
            usSubLang = SUBLANG_SPANISH_MEXICAN;              // Spanish (Mexican) 
        else if ( wsCountry == L"ES" ) 
            usSubLang = SUBLANG_SPANISH_MODERN;               // Spanish (Spain) 
        else if ( wsCountry == L"GT" ) 
            usSubLang = SUBLANG_SPANISH_GUATEMALA;            // Spanish (Guatemala) 
        else if ( wsCountry == L"CR" ) 
            usSubLang = SUBLANG_SPANISH_COSTA_RICA;           // Spanish (Costa Rica) 
        else if ( wsCountry == L"PA" ) 
            usSubLang = SUBLANG_SPANISH_PANAMA;               // Spanish (Panama) 
        else if ( wsCountry == L"DO" ) 
            usSubLang = SUBLANG_SPANISH_DOMINICAN_REPUBLIC;   // Spanish (Dominican Republic) 
        else if ( wsCountry == L"VE" ) 
            usSubLang = SUBLANG_SPANISH_VENEZUELA;            // Spanish (Venezuela) 
        else if ( wsCountry == L"CO" ) 
            usSubLang = SUBLANG_SPANISH_COLOMBIA;             // Spanish (Colombia) 
        else if ( wsCountry == L"PE" ) 
            usSubLang = SUBLANG_SPANISH_PERU;                 // Spanish (Peru) 
        else if ( wsCountry == L"AR" ) 
            usSubLang = SUBLANG_SPANISH_ARGENTINA;            // Spanish (Argentina) 
        else if ( wsCountry == L"EC" ) 
            usSubLang = SUBLANG_SPANISH_ECUADOR;              // Spanish (Ecuador) 
        else if ( wsCountry == L"CL" ) 
            usSubLang = SUBLANG_SPANISH_CHILE;                // Spanish (Chile) 
        else if ( wsCountry == L"UY" ) 
            usSubLang = SUBLANG_SPANISH_URUGUAY;              // Spanish (Uruguay) 
        else if ( wsCountry == L"PY" ) 
            usSubLang = SUBLANG_SPANISH_PARAGUAY;             // Spanish (Paraguay) 
        else if ( wsCountry == L"BO" ) 
            usSubLang = SUBLANG_SPANISH_BOLIVIA;              // Spanish (Bolivia) 
        else if ( wsCountry == L"SV" ) 
            usSubLang = SUBLANG_SPANISH_EL_SALVADOR;          // Spanish (El Salvador) 
        else if ( wsCountry == L"HN" ) 
            usSubLang = SUBLANG_SPANISH_HONDURAS;             // Spanish (Honduras) 
        else if ( wsCountry == L"NI" ) 
            usSubLang = SUBLANG_SPANISH_NICARAGUA;            // Spanish (Nicaragua) 
        else if ( wsCountry == L"PR" ) 
            usSubLang = SUBLANG_SPANISH_PUERTO_RICO;          // Spanish (Puerto Rico) 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"fi" )                            
        usPrimaryLang = LANG_FINNISH;                     //Finnish               
    else if ( wsLanguage == L"fr" )             
    {
        usPrimaryLang = LANG_FRENCH;                      //French    
        if ( wsCountry == L"FR" ) 
            usSubLang = SUBLANG_FRENCH;                        // French 
        else if ( wsCountry == L"BE" ) 
            usSubLang = SUBLANG_FRENCH_BELGIAN;                // French (Belgian) 
        else if ( wsCountry == L"CA" )
            usSubLang = SUBLANG_FRENCH_CANADIAN;               // French (Canadian) 
        else if ( wsCountry == L"CH" )
            usSubLang = SUBLANG_FRENCH_SWISS;                  // French (Swiss) 
        else if ( wsCountry == L"LU" ) 
            usSubLang = SUBLANG_FRENCH_LUXEMBOURG;             // French (Luxembourg) 
        else if ( wsCountry == L"MC" ) 
            usSubLang = SUBLANG_FRENCH_MONACO;                 // French (Monaco) 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"iw" )                            
        usPrimaryLang = LANG_HEBREW;                      //Hebrew             
    else if ( wsLanguage == L"hu" )                            
        usPrimaryLang = LANG_HUNGARIAN;                        //Hungarian           
    else if ( wsLanguage == L"is" )                            
        usPrimaryLang = LANG_ICELANDIC;                        //Icelandic           
    else if ( wsLanguage == L"it" )     
    {
        usPrimaryLang = LANG_ITALIAN;                     //Italian
        if ( wsCountry == L"IT" ) 
            usSubLang = SUBLANG_ITALIAN;                       // Italian 
        else if ( wsCountry == L"CH" ) 
            usSubLang = SUBLANG_ITALIAN_SWISS;                 // Italian (Swiss) 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"ja" )                            
        usPrimaryLang = LANG_JAPANESE;                    //Japanese             
    else if ( wsLanguage == L"ko" )   
    {
        usPrimaryLang = LANG_KOREAN;                      //Korean
        if ( wsCountry == L"KR" ) 
            usSubLang = SUBLANG_KOREAN;                       // Korean 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"nl" )
    {
        usPrimaryLang = LANG_DUTCH;                       //Dutch        
        if ( wsCountry == L"NL" ) 
            usSubLang = SUBLANG_DUTCH;                        // Dutch 
        else if ( wsCountry == L"BE" ) 
            usSubLang = SUBLANG_DUTCH_BELGIAN;                // Dutch (Belgian)  
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"no" )   
    {
        usPrimaryLang = LANG_NORWEGIAN;                   //Norwegian   
        if ( wsCountry == L"NO" ) 
            usSubLang = SUBLANG_NORWEGIAN_BOKMAL;             // Norwegian (Bokmal) 
        //else if ( wsCountry == L"NO" ) 
        //  usSubLang = SUBLANG_NORWEGIAN_NYNORSK;            // Norwegian (Nynorsk) 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"pl" )                            
        usPrimaryLang = LANG_POLISH;                      //Polish             
    else if ( wsLanguage == L"pt" )                
    {
        usPrimaryLang = LANG_PORTUGUESE;                  //Portuguese  
        if ( wsCountry == L"BR" ) 
            usSubLang = SUBLANG_PORTUGUESE_BRAZILIAN;         // Portuguese (Brazil) 
        else if ( wsCountry == L"PT" ) 
            usSubLang = SUBLANG_PORTUGUESE;                   // Portuguese (Portugal) 
        else 
            usSubLang = SUBLANG_DEFAULT;                      //default sub language
    }
    else if ( wsLanguage == L"ro" )                            
        usPrimaryLang = LANG_ROMANIAN;                    //Romanian             
    else if ( wsLanguage == L"ru" )                            
        usPrimaryLang = LANG_RUSSIAN;                     //Russian               
    else if ( wsLanguage == L"hr" )                            
        usPrimaryLang = LANG_CROATIAN;                    //Croatian             
    else if ( wsLanguage == L"sr" )        
    {
        usPrimaryLang = LANG_SERBIAN;                     //Serbian    
        if ( wsCountry == L"VA" ) 
            usSubLang = SUBLANG_SERBIAN_LATIN;                 // Serbian (Latin) 
        else if ( wsCountry == L"HR" ) 
            usSubLang = SUBLANG_SERBIAN_CYRILLIC;              // Serbian (Cyrillic) 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"sk" )                            
        usPrimaryLang = LANG_SLOVAK;                      //Slovak             
    else if ( wsLanguage == L"sq" )                            
        usPrimaryLang = LANG_ALBANIAN;                    //Albanian             
    else if ( wsLanguage == L"sv" )       
    {
        usPrimaryLang = LANG_SWEDISH;                     //Swedish               
        if ( wsCountry == L"SE" ) 
            usSubLang = SUBLANG_SWEDISH;                       // Swedish 
        else if ( wsCountry == L"FI" ) 
            usSubLang = SUBLANG_SWEDISH_FINLAND;               // Swedish (Finland) 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"th" )                            
        usPrimaryLang = LANG_THAI;                        //Thai                     
    else if ( wsLanguage == L"tr" )                            
        usPrimaryLang = LANG_TURKISH;                     //Turkish               
    else if ( wsLanguage == L"ur" )     
    {
        usPrimaryLang = LANG_URDU;                        //Urdu                     
        if ( wsCountry == L"PK" ) 
            usSubLang = SUBLANG_URDU_PAKISTAN;                 // Urdu (Pakistan) 
        else if ( wsCountry == L"IN" ) 
            usSubLang = SUBLANG_URDU_INDIA;                    // Urdu (India) 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"in" )                            
        usPrimaryLang = LANG_INDONESIAN;                  //Indonesian     
    else if ( wsLanguage == L"uk" )                            
        usPrimaryLang = LANG_UKRAINIAN;                   //Ukrainian           
    else if ( wsLanguage == L"be" )                            
        usPrimaryLang = LANG_BELARUSIAN;                  //Belarusian     
    else if ( wsLanguage == L"sl" )                            
        usPrimaryLang = LANG_SLOVENIAN;                   //Slovenian           
    else if ( wsLanguage == L"et" )                            
        usPrimaryLang = LANG_ESTONIAN;                    //Estonian             
    else if ( wsLanguage == L"lv" )                            
        usPrimaryLang = LANG_LATVIAN;                     //Latvian               
    else if ( wsLanguage == L"lt" )
    {               
        usPrimaryLang = LANG_LITHUANIAN;                  //Lithuanian  
        if ( wsCountry == L"LT" ) 
            usSubLang = SUBLANG_LITHUANIAN;                    // Lithuanian 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"fa" )                            
        usPrimaryLang = LANG_FARSI;                       //Farsi              
    else if ( wsLanguage == L"vi" )                            
        usPrimaryLang = LANG_VIETNAMESE;                  //Vietnamese     
    else if ( wsLanguage == L"hy" )                           
        usPrimaryLang = LANG_ARMENIAN;                    //Armenian             
    else if ( wsLanguage == L"az" )
    {
        usPrimaryLang = LANG_AZERI;                       //Azeri  
        //if ( wsCountry == L"  " ) 
        //  usSubLang = SUBLANG_AZERI_LATIN;                   // Azeri (Latin) 
        //else if ( wsCountry == L"  " ) 
        //  usSubLang = SUBLANG_AZERI_CYRILLIC;                // Azeri (Cyrillic) 
    }
    else if ( wsLanguage == L"eu" )                            
        usPrimaryLang = LANG_BASQUE;                      //Basque             
    else if ( wsLanguage == L"mk" )                            
        usPrimaryLang = LANG_MACEDONIAN;                  //FYRO Macedonian    
    else if ( wsLanguage == L"af" )                            
        usPrimaryLang = LANG_AFRIKAANS;                   //Afrikaans           
    else if ( wsLanguage == L"ka" )                            
        usPrimaryLang = LANG_GEORGIAN;                    //Georgian             
    else if ( wsLanguage == L"fo" )                            
        usPrimaryLang = LANG_FAEROESE;                    //Faeroese             
    else if ( wsLanguage == L"hi" )                            
        usPrimaryLang = LANG_HINDI;                       //Hindi              
    else if ( wsLanguage == L"ms" )  
    {
        usPrimaryLang = LANG_MALAY;                       //Malay   
        if ( wsCountry == L"MY" ) 
            usSubLang = SUBLANG_MALAY_MALAYSIA;                // Malay (Malaysia) 
        else if ( wsCountry == L"BN" ) 
            usSubLang = SUBLANG_MALAY_BRUNEI_DARUSSALAM;       // Malay (Brunei Darassalam) 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"kk" )                            
        usPrimaryLang = LANG_KAZAK;                       //Kazak              
    else if ( wsLanguage == L"ky" )                            
        usPrimaryLang = LANG_KYRGYZ;                      //Kyrgyz             
    else if ( wsLanguage == L"sw" )                            
        usPrimaryLang = LANG_SWAHILI;                     //Swahili               
    else if ( wsLanguage == L"uz" )  
    {
        usPrimaryLang = LANG_UZBEK;                       //Uzbek  
        if ( wsCountry == L"UZ" ) 
            usSubLang = SUBLANG_UZBEK_LATIN;                   // Uzbek (Latin) 
        else if ( wsCountry == L"DE" ) 
            usSubLang = SUBLANG_UZBEK_CYRILLIC;                // Uzbek (Cyrillic) 
        else 
            usSubLang = SUBLANG_DEFAULT;                       //default sub language
    }
    else if ( wsLanguage == L"tt" )                            
        usPrimaryLang = LANG_TATAR;                       //Tatar              
    else if ( wsLanguage == L"bn" )                            
        usPrimaryLang = LANG_BENGALI;                     //Not supported.        
    else if ( wsLanguage == L"pa" )                            
        usPrimaryLang = LANG_PUNJABI;                     //Punjabi               
    else if ( wsLanguage == L"gu" )                            
        usPrimaryLang = LANG_GUJARATI;                    //Gujarati             
    else if ( wsLanguage == L"or" )                            
        usPrimaryLang = LANG_ORIYA;                       //Not supported.     
    else if ( wsLanguage == L"ta" )                            
        usPrimaryLang = LANG_TAMIL;                       //Tamil              
    else if ( wsLanguage == L"te" )                            
        usPrimaryLang = LANG_TELUGU;                      //Telugu             
    else if ( wsLanguage == L"kn" )                            
        usPrimaryLang = LANG_KANNADA;                     //Kannada               
    else if ( wsLanguage == L"ml" )                            
        usPrimaryLang = LANG_MALAYALAM;                   //Not supported. 
    else if ( wsLanguage == L"as" )                            
        usPrimaryLang = LANG_ASSAMESE;                    //Not supported.       
    else if ( wsLanguage == L"mr" )                            
        usPrimaryLang = LANG_MARATHI;                     //Marathi               
    else if ( wsLanguage == L"sa" )                            
        usPrimaryLang = LANG_SANSKRIT;                    //Sanskrit             
    else if ( wsLanguage == L"mn" )                            
        usPrimaryLang = LANG_MONGOLIAN;                   //Mongolian           
    else if ( wsLanguage == L"gl" )                            
        usPrimaryLang = LANG_GALICIAN;                    //Galician             
    else if ( wsLanguage == L"sd" )                            
        usPrimaryLang = LANG_SINDHI;                      //Not supported.     
    else if ( wsLanguage == L"ks" )                            
        usPrimaryLang = LANG_KASHMIRI;                    //Not supported.       
    else if ( wsLanguage == L"ne" )                            
        usPrimaryLang = LANG_NEPALI;                      //Not supported.     
    //else if ( wsLanguage == L"  " )                            
    //  usPrimaryLang = LANG_MANIPURI;                    //Not supported.       
    //else if ( wsLanguage == L"  " )                            
    //  usPrimaryLang = LANG_KONKANI;                     //Konkani               
    //else if ( wsLanguage == L"  " )                            
    //  usPrimaryLang = LANG_SYRIAC;                      //Syriac             
    //else if ( wsLanguage == L"  " )                            
    //  usPrimaryLang = LANG_DIVEHI;                      //Divehi             
    else 
        return GetSystemDefaultLCID();                    //System Default Locale 

	return MAKELCID( MAKELANGID( usPrimaryLang, usSubLang ), SORT_DEFAULT );
}
