<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--***********************************************************
 * 
 * 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.
 * 
 ***********************************************************-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Init" script:language="StarBasic">Option Explicit
REM  *****  BASIC  *****



Public Const SBRANGEUBOUND = 20
Public StyleRangeAssignmentList(SBRANGEUBOUND)as String
Public SelRangeList(SBRANGEUBOUND) as String
Public RangeList(SBRANGEUBOUND) as String
Public UnprotectList() as String
Public FilterNames(2,1) as String
Public bDoUnProtect as Boolean
Public bCancelTask as Boolean

Public sREADY as String
Public sPROTECT as String
Public sCONTINUE as String

Public sSELTEMPL as String
Public sSELCELL as String
Public sCURRRANGES as String
Public sTEMPLATES as String

Public sSOURCEFILE as String
Public sSOURCEDIR as String
Public sTARGETDIR as String

Public sStsPROGRESS as String
Public sStsCELLPROGRSS as String
Public sStsRELRANGES as String
Public sStsRELSHEETRANGES as String
Public sStsREPROTECT as String

Public sMsgSELDIR as String
Public sMsgSELFILE as String
Public sMsgTARGETDIR as String
Public sMsgNOTTHERE as String
Public sMsgDLGTITLE as String
Public sMsgUNPROTECT as String
Public sMsgPWPROTECT as String
Public sMsgWRONGPW as String
Public sMsgSHEETPROTECTED as String
Public sMsgWARNING as String
Public sMsgSHEETSNOPROTECT as String
Public sMsgSHEETNOPROTECT as String
Public sMsgCHOOSECURRENCY as String
Public sMsgPASSWORD as String
Public sMsgOK as String
Public sMsgCANCEL as String
Public sMsgFileInvalid as String
Public sMsgNODIRECTORY as String
Public sMsgDOCISREADONLY as String
Public sMsgFileExists as String
Public sMsgCancelConversion as String
Public sMsgCancelTitle as String
Public sCurrPORTUGUESE as String
Public sCurrDUTCH as String
Public sCurrFRENCH as String
Public sCurrSPANISH as String
Public sCurrITALIAN as String
Public sCurrGERMAN as String
Public sCurrBELGIAN as String
Public sCurrIRISH as String
Public sCurrLUXEMBOURG as String
Public sCurrAUSTRIAN as String
Public sCurrFINNISH as String
Public sCurrGREEK as String
Public sCurrSLOVENIAN as String
Public sCurrCYPRIOT as String
Public sCurrMALTESE as String
Public sCurrSLOVAK as String
Public sCurrUNKNOWN as String
Public sCurrSYSUNKNOWN as String

Public sPrgsRETRIEVAL as String
Public sPrgsCONVERTING as String
Public sPrgsUNPROTECT as String
Public sInclusiveSubDir as String

Public Const SBCOUNTRYCOUNT = 15
Public CurMimeType as String
Public CurCellCount as Long
Public oSheets as Object
Public oStyles as Object
Public oStyle as Object
Public oFormats as Object
Public aSimpleStr as String
Public nSimpleKey as Long
Public aFormat() as Variant
Public oRanges as Object
Public oRange as Object
Public nLanguage as integer
Public nFormatLanguage as integer
Public aCellFormat as Variant
Public oDocument as Object
Public StartCol, StartRow, EndCol, EndRow as String
Public oSheet as Object
Public IntStartCol,	IntStartRow, IntEndCol,	IntEndRow as integer
Public oSelRanges as Object
Public nFormatType as Integer
Public sFormatCurrency as String
Public sFormatLanguage as String
Public CurSheetName as String
Public oStatusLine as Object
Public Const SBRELGET = 50
Public StatusValue as Single
Public TotCellCount as Long
Public StyleIndex as Integer
Public RangeIndex as Integer
Public CurrIndex as Integer
Public ActLangNumber(1) as Integer
Public CurExtension(2) as String
Public Currfactor as Double
Public CurrSymbolList(2) as String
Public CurrLanguage as String
Public CurrValue(15,5)
Public LangIDValue(15,2,2) as String
Public PreName as String
Public Separator as String
Public BitmapDir as String
Public TypeIndex as Integer, CSIndex as Integer, LangIndex as Integer, FSIndex as Integer
Public oLocale as New com.sun.star.lang.Locale
Public sEuroSign as String
Public oPointer as Object
Public sDocType as String
Public bPreSelected as Boolean
Public bRecursive as Boolean
Public bCancelProtection as Boolean
Public CurrRoundMode as Boolean
Public bRangeListDefined as Boolean
Public bDocHasProtectedSheets as Boolean
Public sGOON as String
Public sHELP as String
Public sCANCEL as String
Dim sEnd as String

Sub InitializeResources()
Dim LocWorkPath as String
	With DialogModel
		&apos; Strings that are also needed by the Password Dialog
		sGoOn = GetResText(1003)
		sHelp = GetResText(1001)
		sCANCEL = GetResText(1418)
		sEnd = GetResText(1000)
		sPROTECT = GetResText(1005)
		sCONTINUE = GetResText(1007)
		sSELTEMPL = GetResText(1106)
		sSELCELL = GetResText(1107)
		sCURRRANGES = GetResText(1108)
		sTEMPLATES = GetResText(1109)
		sStsPROGRESS = GetResText(1300)
		sStsCELLPROGRSS = GetResText(1301)
		sStsRELSHEETRANGES = GetResText(1302)
		sStsRELRANGES = GetResText(1303)
		sStsREPROTECT = GetResText(1304)
		sREADY = GetResText(1400)
		sMsgSELDIR = GetResText(1401)
		sMsgSELFILE = GetResText(1402)
		sMsgTARGETDIR = GetResText(1403)
		sMsgNOTTHERE = GetResText(1404)
		sMsgDLGTITLE = GetResText(1405)
		sMsgUNPROTECT = GetResText(1406)
		sMsgPWPROTECT = GetResText(1407)
		sMsgWRONGPW = GetResText(1408)
		sMsgSHEETPROTECTED = GetResText(1409)
		sMsgWARNING = GetResText(1410)
		sMsgSHEETSNOPROTECT = GetResText(1411)
		sMsgSHEETNOPROTECT = GetResText(1412)
		sMsgCHOOSECURRENCY = GetResText(1415)
		sMsgPASSWORD = GetResText(1416)
		sMsgOK = GetResText(1417)
		sMsgCANCEL = GetResText(1418)
		sMsgFILEINVALID = GetResText(1419)
		sMsgFILEINVALID = ReplaceString(sMsgFILEINVALID,&quot;%PRODUCTNAME&quot;, GetProductname())
		SMsgNODIRECTORY = GetResText(1420)
		sMsgDOCISREADONLY = GetResText(1421)
		sMsgFileExists = GetResText(1422)
		sMsgCancelConversion = GetResText(1423)
		sMsgCancelTitle = GetResText(1424)
		sCurrPORTUGUESE = GetResText(1500)
		sCurrDUTCH = GetResText(1501)
		sCurrFRENCH = GetResText(1502)
		sCurrSPANISH = GetResText(1503)
		sCurrITALIAN = GetResText(1504)
		sCurrGERMAN = GetResText(1505)
		sCurrBELGIAN = GetResText(1506)
		sCurrIRISH = GetResText(1507)
		sCurrLUXEMBOURG = GetResText(1508)
		sCurrAUSTRIAN = GetResText(1509)
		sCurrFINNISH = GetResText(1510)
		sCurrGREEK = GetResText(1511)
		sCurrSLOVENIAN = GetResText(1512)
		sCurrCYPRIOT = GetResText(1513)
		sCurrMALTESE = GetResText(1514)
		sCurrSLOVAK = GetResText(1515)
		sCurrUNKNOWN = GetResText(1516)
		sCurrSYSUNKNOWN = GetResText(1517)
		.cmdCancel.Label =  sCANCEL
		.cmdHelp.Label =  sHELP
		.cmdBack.Label =  GetResText(1002)
		.cmdGoOn.Label =  sGOON
		.lblHint.Label =  GetResText(1004)
		.lblCurrencies.Label = GetResText(1006)
		.cmdBack.Enabled = False		
		If .Step = 1 Then
			.chkComplete.Label = GetResText(1100)
			.hlnSelection.Label = GetResText(1101)
			.optCellTemplates.Label = GetResText(1102)
			.optSheetRanges.Label = GetResText(1103)
			.optDocRanges.Label = GetResText(1104)
			.optSelRange.Label = GetResText(1105)
			sCURRRANGES = GetResText(1108)
			.lblSelection.Label = sCURRRANGES
		Else
			.lblProgress.Label = sStsPROGRESS
		 	.hlnExtent.Label = GetResText(1200)
			.optSingleFile.Label = GetResText(1201) 
 			.optWholeDir.Label = GetResText(1202)
 			.chkProtect.Label = GetResText(1207)
 			.chkTextDocuments.Label = GetResText(1210) 

			sSOURCEFILE = GetResText(1203)
			sSOURCEDIR = GetResText(1204)
 			.lblSource.Label = sSOURCEDIR
 			sInclusiveSubDir = GetResText(1205)
 			.chkRecursive.Label = sInclusiveSubDir
			sTARGETDIR = GetResText(1206)
 			.lblTarget.Label = STARGETDIR 
			
			LocWorkPath = GetPathSettings(&quot;Work&quot;)
			If Not oUcb.Exists(LocWorkPath) Then
				ShowNoOfficePathError()
				Stop
			End If

			.txtSource.Text = ConvertfromUrl(LocWorkPath)
			
			SubstDir = .txtSource.Text
			.txtTarget.Text = .txtSource.Text
			.hlnProgress.Label = GetResText(1600)
			.lblConfig.Label = GetResText(1603)
			sPrgsRETRIEVAL = GetResText(1601)
			sPrgsCONVERTING = GetResText(1602)
			sPrgsUNPROTECT = GetResText(1604)
		End If
	End With
End Sub

Sub InitializeLanguages()
	sEuroSign = chr(8364)

&apos; CURRENCIES_PORTUGUESE
	LangIDValue(0,0,0) = &quot;pt&quot;
	LangIDValue(0,0,1) = &quot;&quot;
	LangIDValue(0,0,2) = &quot;-816&quot;

&apos; CURRENCIES_DUTCH
	LangIDValue(1,0,0) = &quot;nl&quot;
	LangIDValue(1,0,1) = &quot;&quot;
	LangIDValue(1,0,2) = &quot;-413&quot;

&apos; CURRENCIES_FRENCH
	LangIDValue(2,0,0) = &quot;fr&quot;
	LangIDValue(2,0,1) = &quot;&quot;
	LangIDValue(2,0,2) = &quot;-40C&quot;

&apos; CURRENCIES_SPANISH
	LangIDValue(3,0,0) = &quot;es&quot;
	LangIDValue(3,0,1) = &quot;&quot;
	LangIDValue(3,0,2) = &quot;-40A&quot;
	
	&apos;Spanish modern
	LangIDValue(3,1,0) = &quot;es&quot;
	LangIDValue(3,1,1) = &quot;&quot;
	LangIDValue(3,1,2) = &quot;-C0A&quot;

	&apos;Spanish katalanic
	LangIDValue(3,2,0) = &quot;es&quot;
	LangIDValue(3,2,1) = &quot;&quot;
	LangIDValue(3,2,2) = &quot;-403&quot;

&apos; CURRENCIES_ITALIAN
	LangIDValue(4,0,0) = &quot;it&quot;
	LangIDValue(4,0,1) = &quot;&quot;
	LangIDValue(4,0,2) = &quot;-410&quot;

&apos; CURRENCIES_GERMAN
	LangIDValue(5,0,0) = &quot;de&quot;
	LangIDValue(5,0,1) = &quot;DE&quot;
	LangIDValue(5,0,2) = &quot;-407&quot;

&apos; CURRENCIES_BELGIAN
	LangIDValue(6,0,0) = &quot;fr&quot;
	LangIDValue(6,0,1) = &quot;BE&quot;
	LangIDValue(6,0,2) = &quot;-80C&quot;

	LangIDValue(6,1,0) = &quot;nl&quot;
	LangIDValue(6,1,1) = &quot;BE&quot;
	LangIDValue(6,1,2) = &quot;-813&quot;

&apos; CURRENCIES_IRISH
	LangIDValue(7,0,0) = &quot;en&quot;
	LangIDValue(7,0,1) = &quot;IE&quot;
	LangIDValue(7,0,2) = &quot;-1809&quot;

	LangIDValue(7,1,0) = &quot;ga&quot;
	LangIDValue(7,1,1) = &quot;IE&quot;
	LangIDValue(7,1,2) = &quot;-83C&quot;

&apos; CURRENCIES_LUXEMBOURG
	LangIDValue(8,0,0) = &quot;fr&quot;
	LangIDValue(8,0,1) = &quot;LU&quot;
	LangIDValue(8,0,2) = &quot;-140C&quot;
	
	LangIDValue(8,1,0) = &quot;de&quot;
	LangIDValue(8,1,1) = &quot;LU&quot;
	LangIDValue(8,1,2) = &quot;-1007&quot;

&apos; CURRENCIES_AUSTRIAN
	LangIDValue(9,0,0) = &quot;de&quot;
	LangIDValue(9,0,1) = &quot;AT&quot;
	LangIDValue(9,0,2) = &quot;-C07&quot;

&apos; CURRENCIES_FINNISH
	LangIDValue(10,0,0) = &quot;fi&quot;
	LangIDValue(10,0,1) = &quot;FI&quot;
	LangIDValue(10,0,2) = &quot;-40B&quot;

	LangIDValue(10,1,0) = &quot;sv&quot;
	LangIDValue(10,1,1) = &quot;FI&quot;
	LangIDValue(10,1,2) = &quot;-81D&quot;

&apos; CURRENCIES_GREEK
	LangIDValue(11,0,0) = &quot;el&quot;
	LangIDValue(11,0,1) = &quot;GR&quot;
	LangIDValue(11,0,2) = &quot;-408&quot;

&apos; CURRENCIES_SLOVENIAN
	LangIDValue(12,0,0) = &quot;sl&quot;
	LangIDValue(12,0,1) = &quot;SI&quot;
	LangIDValue(12,0,2) = &quot;-424&quot;

&apos; CURRENCIES_CYPRIOT
	LangIDValue(13,0,0) = &quot;el&quot;
	LangIDValue(13,0,1) = &quot;CY&quot;
	LangIDValue(13,0,2) = &quot;-408&quot;

&apos; CURRENCIES_MALTESE
	LangIDValue(14,0,0) = &quot;mt&quot;
	LangIDValue(14,0,1) = &quot;MT&quot;
	LangIDValue(14,0,2) = &quot;-43A&quot;

&apos; CURRENCIES_SLOVAK
	LangIDValue(15,0,0) = &quot;sk&quot;
	LangIDValue(15,0,1) = &quot;SK&quot;
	LangIDValue(15,0,2) = &quot;-41B&quot;

End Sub



Sub InitializeCurrencies()
Dim i as Integer
	GoOn = True

	CurrValue(0,0) = sCurrPORTUGUESE
	&apos; real conversion rate
	CurrValue(0,1) = 200.482
	&apos; rounded conversion rate
	CurrValue(0,2) = 200
	CurrValue(0,3) = &quot;Esc.&quot;
	CurrValue(0,4) = &quot;Esc.&quot;
	CurrValue(0,5) = &quot;PTE&quot;

	CurrValue(1,0) = sCurrDUTCH
	&apos; real conversion rate
	CurrValue(1,1) = 2.20371
	&apos; rounded conversion rate
	CurrValue(1,2) = 2
	CurrValue(1,3) = &quot;F&quot;
	CurrValue(1,4) = &quot;fl&quot;
	CurrValue(1,5) = &quot;NLG&quot;

	CurrValue(2,0) = sCurrFRENCH
	&apos; real conversion rate
	CurrValue(2,1) = 6.55957
	&apos; rounded conversion rate
	CurrValue(2,2) = 7
	CurrValue(2,3) = &quot;F&quot;
	CurrValue(2,4) = &quot;F&quot;
	CurrValue(2,5) = &quot;FRF&quot;

	CurrValue(3,0) = sCurrSPANISH
	&apos; real conversion rate
	CurrValue(3,1) = 166.386
	&apos; rounded conversion rate
	CurrValue(3,2) = 170
	CurrValue(3,3) = &quot;Pts&quot;
	CurrValue(3,4) = &quot;Pts&quot;
	CurrValue(3,5) = &quot;ESP&quot;

	CurrValue(4,0) = sCurrITALIAN
	&apos; real conversion rate
	CurrValue(4,1) = 1936.27
	&apos; rounded conversion rate
	CurrValue(4,2) = 2000
	CurrValue(4,3) = &quot;L.&quot;
	CurrValue(4,4) = &quot;L.&quot;
	CurrValue(4,5) = &quot;ITL&quot;

	CurrValue(5,0) = sCurrGERMAN
	&apos; real conversion rate
	CurrValue(5,1) = 1.95583
	&apos; rounded conversion rate
	CurrValue(5,2) = 2
	CurrValue(5,3) = &quot;DM&quot;
	CurrValue(5,4) = &quot;DM&quot;
	CurrValue(5,5) = &quot;DEM&quot;

	CurrValue(6,0) = sCurrBELGIAN
	&apos; real conversion rate
	CurrValue(6,1) = 40.3399
	&apos; rounded conversion rate
	CurrValue(6,2) = 40
	CurrValue(6,3) = &quot;FB&quot;
	CurrValue(6,4) = &quot;BF&quot;
	CurrValue(6,5) = &quot;BEF&quot;

	CurrValue(7,0) = sCurrIRISH
	&apos; real conversion rate
	CurrValue(7,1) = 0.787564
	&apos; rounded conversion rate
	CurrValue(7,2) = 0.8
	CurrValue(7,3) = &quot;IR£&quot;
	CurrValue(7,4) = &quot;£&quot;
	CurrValue(7,5) = &quot;IEP&quot;

	CurrValue(8,0) = sCurrLUXEMBOURG
	&apos; real conversion rate
	CurrValue(8,1) = 40.3399
	&apos; rounded conversion rate
	CurrValue(8,2) = 40
	CurrValue(8,3) = &quot;F&quot;
	CurrValue(8,4) = &quot;F&quot;
	CurrValue(8,5) = &quot;LUF&quot;

	CurrValue(9,0) = sCurrAUSTRIAN
	&apos; real conversion rate
	CurrValue(9,1) = 13.7603
	&apos; rounded conversion rate
	CurrValue(9,2) = 15
	CurrValue(9,3) = &quot;öS&quot;
	CurrValue(9,4) = &quot;S&quot;
	CurrValue(9,5) = &quot;ATS&quot;

	CurrValue(10,0) = sCurrFINNISH
	&apos; real conversion rate
	CurrValue(10,1) = 5.94573
	&apos; rounded conversion rate
	CurrValue(10,2) = 6
	CurrValue(10,3) = &quot;mk&quot;
	CurrValue(10,4) = &quot;mk&quot;
	CurrValue(10,5) = &quot;FIM&quot;

	CurrValue(11,0) = sCurrGREEK
	&apos; real conversion rate
	CurrValue(11,1) = 340.750
	&apos; rounded conversion rate
	CurrValue(11,2) = 400
	CurrValue(11,3) = chr(916) &amp; chr(961) &amp; chr(967)
	CurrValue(11,4) = chr(916) &amp; chr(961) &amp; chr(967)
	CurrValue(11,5) = &quot;GRD&quot;

	CurrValue(12,0) = sCurrSLOVENIAN
	&apos; real conversion rate
	CurrValue(12,1) = 239.64
	&apos; rounded conversion rate
	CurrValue(12,2) = 240
	CurrValue(12,3) = &quot;SIT&quot;
	CurrValue(12,4) = &quot;SIT&quot;
	CurrValue(12,5) = &quot;SIT&quot;

	CurrValue(13,0) = sCurrCYPRIOT
	&apos; real conversion rate
	CurrValue(13,1) = 0.585274
	&apos; rounded conversion rate
	CurrValue(13,2) = 0.6
	CurrValue(13,3) = &quot;£C&quot;
	CurrValue(13,4) = &quot;£&quot;
	CurrValue(13,5) = &quot;CYP&quot;

	CurrValue(14,0) = sCurrMALTESE
	&apos; real conversion rate
	CurrValue(14,1) = 0.429300
	&apos; rounded conversion rate
	CurrValue(14,2) = 0.4
	CurrValue(14,3) = chr(8356)
	CurrValue(14,4) = &quot;Lm&quot;
	CurrValue(14,5) = &quot;MTL&quot;

	CurrValue(15,0) = sCurrSLOVAK
	&apos; real conversion rate
	CurrValue(15,1) = 30.1260
	&apos; rounded conversion rate
	CurrValue(15,2) = 30
	CurrValue(15,3) = &quot;Sk&quot;
	CurrValue(15,4) = &quot;Sk&quot;
	CurrValue(15,5) = &quot;SKK&quot;

	i = -1
	CurrSymbolList(0) = &quot;&quot;
	CurrSymbolList(1) = &quot;&quot;
	InitializeCurrencyValues(CurrIndex)
End Sub


Sub InitializeControls()
	If CurrIndex = -1 Then
		If DialogModel.Step = 1 Then
			EnableStep1DialogControls(True, False, False)
		ElseIf DialogModel.Step = 2 Then
			EnableStep2DialogControls(True)
		End If
	End If
End Sub	


Sub InitializeConverter(oLocale, iDialogPage as Integer)
Dim Isthere as Boolean
	bCancelProtection = False
	bRangeListDefined = False
	PWIndex = -1
	If iDialogPage = 1 Then
		ToggleWindow(False)
		sDocType = Tools.GetDocumentType(ThisComponent)
		If sDocType = &quot;sCalc&quot; Then
			bDocHasProtectedSheets = CheckSheetProtection(oSheets)
		End If
	    oStatusline = ThisComponent.GetCurrentController.GetFrame.CreateStatusIndicator()
	End If
	DialogConvert = LoadDialog(&quot;Euro&quot;, &quot;DlgConvert&quot;)
	DialogModel = DialogConvert.Model
	DialogPassword = LoadDialog(&quot;Euro&quot;, &quot;DlgPassword&quot;)
	PasswordModel = DialogPassword.Model
	DialogModel.Step = iDialogPage
	InitializeResources()
	InitializeLanguages()
	InitializeLocales(oLocale)
	InitializeCurrencies()
	InitializeControls()
	BitmapDir = GetOfficeSubPath(&quot;Template&quot;, &quot;../wizard/bitmap&quot;)
	If BitmapDir = &quot;&quot; Then
		Stop
	End If
	FillUpCurrencyListbox()
	DialogModel.imgPreview.ImageUrl = BitmapDir &amp; &quot;euro_&quot; &amp; DialogModel.Step &amp; &quot;.bmp&quot;	
	DialogConvert.Title = sMsgDLGTITLE
	DialogModel.cmdGoOn.DefaultButton = True	
	If iDialogPage = 1 Then
		ToggleWindow(True)
	End If
End Sub


Sub	InitializeCurrencyValues(CurrIndex)
	If CurrIndex &lt;&gt; -1 Then
		CurrLanguage = CurrValue(CurrIndex,0)
		CurrFactor = CurrValue(CurrIndex,1)
		CurrSymbolList(0) = CurrValue(CurrIndex,3)
		CurrSymbolList(1) = CurrValue(CurrIndex,4)
		CurrSymbolList(2) = CurrValue(CurrIndex,5)
	End If
End Sub		


Function InitializeLocales(oLocale) as Boolean
Dim i as Integer, n as Integer, m as Integer
Dim sLanguage as String, sCountry as String
Dim bTakeThisLocale as Boolean
	sLanguage = oLocale.Language
	sCountry = oLocale.Country
	For n = 0 To SBCOUNTRYCOUNT - 1
		For m = 0 TO 1
			If DialogModel.Step = 2 Then
				bTakeThisLocale = LangIDValue(n,m,0) = sLanguage
			Else
				bTakeThisLocale = LangIDValue(n,m,0) = sLanguage
			End If
			If bTakeThisLocale Then
				CurrIndex = n
				For i = 0 To 2
					CurExtension(i) = LangIDValue(CurrIndex,i,2)
				Next i
				InitializeLocales = True
				Exit Function
			End If
		Next m
	Next n
	CurrIndex = -1
	InitializeLocales = False
End Function
</script:module>
