[Freeswitch-svn] [commit] r2449 - in freeswitch/trunk/gtalkphone: . Setup SkinWin freeswitch freeswitch/include freeswitch/source google https imphone imphone/debug mixer mixer/include mixer/source monitor res skin skin/google skin/google/css skin/google/css/gtalkphone skin/google/js skin/google/res ui ui/include ui/source

Freeswitch SVN zebra at freeswitch.org
Wed Aug 30 11:21:43 EDT 2006


Author: zebra
Date: Wed Aug 30 11:21:42 2006
New Revision: 2449

Added:
   freeswitch/trunk/gtalkphone/
   freeswitch/trunk/gtalkphone/Setup/
   freeswitch/trunk/gtalkphone/Setup/Setup.vdproj
   freeswitch/trunk/gtalkphone/SkinWin/
   freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.cpp
   freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.h
   freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.cpp
   freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.h
   freeswitch/trunk/gtalkphone/SkinWin/SkinWin.cpp
   freeswitch/trunk/gtalkphone/SkinWin/SkinWin.h
   freeswitch/trunk/gtalkphone/SkinWin/Subclass.cpp
   freeswitch/trunk/gtalkphone/SkinWin/Subclass.h
   freeswitch/trunk/gtalkphone/SkinWin/Utils.cpp
   freeswitch/trunk/gtalkphone/StdAfx.cpp
   freeswitch/trunk/gtalkphone/StdAfx.h
   freeswitch/trunk/gtalkphone/const.h
   freeswitch/trunk/gtalkphone/freeswitch/
   freeswitch/trunk/gtalkphone/freeswitch.xml
   freeswitch/trunk/gtalkphone/freeswitch/include/
   freeswitch/trunk/gtalkphone/freeswitch/include/freeswitch.h
   freeswitch/trunk/gtalkphone/freeswitch/source/
   freeswitch/trunk/gtalkphone/freeswitch/source/freeswitch.cpp
   freeswitch/trunk/gtalkphone/google/
   freeswitch/trunk/gtalkphone/google/HYPERLINK.CPP
   freeswitch/trunk/gtalkphone/google/HYPERLINK.H
   freeswitch/trunk/gtalkphone/google/StdAfx.cpp
   freeswitch/trunk/gtalkphone/google/StdAfx.h
   freeswitch/trunk/gtalkphone/google/chatButton_down.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/google/chatButton_up.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/google/cursor1.cur   (contents, props changed)
   freeswitch/trunk/gtalkphone/google/google.aps   (contents, props changed)
   freeswitch/trunk/gtalkphone/google/google.cpp
   freeswitch/trunk/gtalkphone/google/google.def
   freeswitch/trunk/gtalkphone/google/google.dsp
   freeswitch/trunk/gtalkphone/google/google.dsw
   freeswitch/trunk/gtalkphone/google/google.exp   (contents, props changed)
   freeswitch/trunk/gtalkphone/google/google.h
   freeswitch/trunk/gtalkphone/google/google.lib   (contents, props changed)
   freeswitch/trunk/gtalkphone/google/google.rc
   freeswitch/trunk/gtalkphone/google/google.vcproj
   freeswitch/trunk/gtalkphone/google/google.vcproj.D57JVH91.Asterlink.user
   freeswitch/trunk/gtalkphone/google/google2.h
   freeswitch/trunk/gtalkphone/google/mainbutton.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/google/resource.h
   freeswitch/trunk/gtalkphone/gtalkphone.aps   (contents, props changed)
   freeswitch/trunk/gtalkphone/gtalkphone.cpp
   freeswitch/trunk/gtalkphone/gtalkphone.h
   freeswitch/trunk/gtalkphone/gtalkphone.ncb   (contents, props changed)
   freeswitch/trunk/gtalkphone/gtalkphone.rc
   freeswitch/trunk/gtalkphone/gtalkphone.sln
   freeswitch/trunk/gtalkphone/gtalkphone.suo   (contents, props changed)
   freeswitch/trunk/gtalkphone/gtalkphone.vcproj
   freeswitch/trunk/gtalkphone/gtalkphone.vcproj.D57JVH91.Asterlink.user
   freeswitch/trunk/gtalkphone/https/
   freeswitch/trunk/gtalkphone/https/gtalkphone_https.cpp
   freeswitch/trunk/gtalkphone/https/gtalkphone_https.h
   freeswitch/trunk/gtalkphone/imphone/
   freeswitch/trunk/gtalkphone/imphone/debug/
   freeswitch/trunk/gtalkphone/imphone/debug/google.dll   (contents, props changed)
   freeswitch/trunk/gtalkphone/imphone/debug/google.ilk   (contents, props changed)
   freeswitch/trunk/gtalkphone/mixer/
   freeswitch/trunk/gtalkphone/mixer/include/
   freeswitch/trunk/gtalkphone/mixer/include/MixerBase.h
   freeswitch/trunk/gtalkphone/mixer/include/MixerFader.h
   freeswitch/trunk/gtalkphone/mixer/source/
   freeswitch/trunk/gtalkphone/mixer/source/MixerBase.cpp
   freeswitch/trunk/gtalkphone/mixer/source/MixerFader.cpp
   freeswitch/trunk/gtalkphone/monitor/
   freeswitch/trunk/gtalkphone/monitor/MonThread.cpp
   freeswitch/trunk/gtalkphone/monitor/MonThread.h
   freeswitch/trunk/gtalkphone/monitor/MoniWnd.cpp
   freeswitch/trunk/gtalkphone/monitor/MoniWnd.h
   freeswitch/trunk/gtalkphone/res/
   freeswitch/trunk/gtalkphone/res/Toolbar.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/res/gtalkphone.ico   (contents, props changed)
   freeswitch/trunk/gtalkphone/res/gtalkphone.rc2
   freeswitch/trunk/gtalkphone/res/gtalkphoneDoc.ico   (contents, props changed)
   freeswitch/trunk/gtalkphone/resource.h
   freeswitch/trunk/gtalkphone/skin/
   freeswitch/trunk/gtalkphone/skin/google/
   freeswitch/trunk/gtalkphone/skin/google/.DS_Store   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/Buttons.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/Checkbox.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/Radio.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/Thumbs.db   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/bottom.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/close.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/css/
   freeswitch/trunk/gtalkphone/skin/google/css/boxsizing.htc
   freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/
   freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone.css
   freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/Thumbs.db   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/gtalkphone.css
   freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handl2e.horizontal.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handle.horizontal.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/css/winclassic.css
   freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm
   freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm.2
   freeswitch/trunk/gtalkphone/skin/google/js/
   freeswitch/trunk/gtalkphone/skin/google/js/range.js
   freeswitch/trunk/gtalkphone/skin/google/js/slider.js
   freeswitch/trunk/gtalkphone/skin/google/js/timer.js
   freeswitch/trunk/gtalkphone/skin/google/left.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/max.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/min.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/
   freeswitch/trunk/gtalkphone/skin/google/res/.DS_Store   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM#.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM0.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM1.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM2.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM3.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM4.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM5.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM6.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM7.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM8.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM9.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/NUM_STAR.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/Thumbs.db   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_01.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_02.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_03.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_04.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_05.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_06.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_07.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_08.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_09.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_10.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_11.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_12.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_13.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_14.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_15.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_16.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_17.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_18.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_19.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_20.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_21.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_22.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_23.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_24.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_25.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_26.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_27.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_28.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_29.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/btDial.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/btDial_disable.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/btHold.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/btHold_disable.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/btReDial.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/btReDial_disable.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/cha.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/fangdajing.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/gtalkphone_logo.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/mic.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_01.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_02.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_03.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_04.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_05.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_06.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_07.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_08.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_09.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_10.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_11.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_12.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_13.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_14.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_15.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_16.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_17.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_18.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_19.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_20.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_21.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_22.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_23.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_24.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_25.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_26.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_27.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_28.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_29.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/phone1.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/phone2.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/ring.wav   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/ringin.wav   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/signin.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/spe2eker.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/speeker.gif   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/res/zlwcyd.mp3   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/restore.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/right.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/skin/google/settingsDlg.htm
   freeswitch/trunk/gtalkphone/skin/google/theme.ini
   freeswitch/trunk/gtalkphone/skin/google/top.bmp   (contents, props changed)
   freeswitch/trunk/gtalkphone/ui/
   freeswitch/trunk/gtalkphone/ui/include/
   freeswitch/trunk/gtalkphone/ui/include/External.h
   freeswitch/trunk/gtalkphone/ui/include/gtalkphoneDlg.h
   freeswitch/trunk/gtalkphone/ui/include/settingsDlg.h
   freeswitch/trunk/gtalkphone/ui/source/
   freeswitch/trunk/gtalkphone/ui/source/External.cpp
   freeswitch/trunk/gtalkphone/ui/source/gtalkphoneDlg.cpp
   freeswitch/trunk/gtalkphone/ui/source/settingsDlg.cpp

Log:


Added: freeswitch/trunk/gtalkphone/Setup/Setup.vdproj
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/Setup/Setup.vdproj	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,5084 @@
+"DeployProject"
+{
+"VSVersion" = "3:800"
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
+"IsWebType" = "8:FALSE"
+"ProjectName" = "8:GtalkSetup"
+"LanguageId" = "3:1033"
+"CodePage" = "3:1252"
+"UILanguageId" = "3:1033"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
+    "Hierarchy"
+    {
+        "Entry"
+        {
+        "MsmKey" = "8:_011F605D964748BDAA911C7DE2315BB1"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_03153A29D019413AB8802480F81DEF7F"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_047539112C3E461EAA74088FA9BE9E69"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_0534EE6640B342CFB755CE50728A8BCA"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_092402C810E94F1AB18DE4850CFC15AC"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_099956C2FDFB4F1D856128F2598A4B33"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_0B327B4477E04F94BD0EFF3BB08C2034"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_0E3B5842A3734D90A0EE515AEC6CA0C8"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_0E3D00F607D64FFBAB3BCCEE54868B94"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_0EB4E22D947047928070894CC314427A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_1273F63008CF585CA0E063E436B4646F"
+        "OwnerKey" = "8:_EC68A140B58841DA9B9172BAFA5BEC63"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_1943D4043028471EA31B3B740572CF58"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_19FABE7F81974445A9D9548C4BD17B4A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_1CFB1AB04E024FC993E0EB4859DF8408"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_1EA6C313E8784DB5A7269636F12F97FC"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_213875BF232B446089B248AB680A0E8C"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_219915C9DD5E446C979573CA1A77CD94"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_2573B3D1C1B64130B14C0AC58B220AAD"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_26D8B58FB52A4D269E82662406380FB8"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_2814E641538B42EFA83525986A9D5AC1"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_283AF8C6D620E7AAFAAA28E46550E979"
+        "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_28F33D5DADE544A0AC0B4745FE3FBCE0"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_2D3594E151184C9B8C66BA923F3FABAA"
+        "OwnerKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_2F2FEC549F02436EB87961BD1B9E5783"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_2FE2BE6423524466AE9B6DDACA25659B"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_30D9C271D9814AB3A21BF4E254EF1516"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_318FCC99E8D143D6B4F9F534E63009B3"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_329D8DAE6C01FCF026E9DFB48B932203"
+        "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_33FEF8EC137A4CCFA2D033338AD41740"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3481511C7FB64F80B8A15FF88674E39B"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_34F26958FC234A729D9E66BF43FB621E"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_352B3F82A641637C8A115BDBD9E815F8"
+        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3616BAFEC39B4CB3B59DDB88FF7EF234"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_38D479EDA4B149229E7683A872389B67"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3911245A4F074600B8FDFDA13670079C"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3AA771348091426E95001C83842B96B8"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3B4414B23DDA4F148D65344ACDA8AD26"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3DF8772375AA4701AFCA33BD13454741"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_431678C6A4054132B0E5B7E13926A75E"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_449CF87BB19F4704AFC7A6EA4229E204"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4558465C50C14F60BB4E8B25025AE011"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4595E9E3EEE54266888939B751817D3A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_47DF23462CAA41E18CEFE3D0A348C477"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_497942BF15E0080F895E96BC0285CB5D"
+        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4CD45D17DBE94E79947507384EFFD130"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4EDEC377C8284215B7D4E7A4EFAB86E2"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4F3F74AA3B4F4AE98F367218EE691BC7"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_517C2A23792D45E9B359DB18D913386A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_569D03628E41BAB30C90978B9575D98C"
+        "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_59C3EF63D3C94FC7AC5E04ACC2B3B6A5"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_5A3512552B17420CA5D7F6043665AF6D"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_5C3E0D24513D46A4B8366006A3268EF4"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_5CFF4C7484B640B1B5756CD323CC7E58"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_5D2D1389842F47F8BEA541066B9C4098"
+        "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_632D79C6771442AB9D17E66DE2C750B6"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_656873B55D354EFFAA92EA6689A00723"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_66D36239CEE44E41AC15D8745B60DA6F"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_67A562A164694F33931369E955A504D2"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_68627C5080F244F3B88EF04CAD1506F9"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_69234AE2A61247F0AC620E58F3463D48"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6BD96A84A097442AA01020E71415DB0B"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6CF1BB0311AD41C3BC50DB8ED0EABED1"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6E5C001E7A314DCEA0A4BF52BF74BCAD"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6ED2FF0583A54D71982D109F21758A5E"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588"
+        "OwnerKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588"
+        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588"
+        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588"
+        "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7092EBC0CF264196915B5BE2B699115E"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_70C0B0406844413691C4F6D730088354"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_72A8732C0C0C4D0EAAE89DBB82073335"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7358123D2D064AD1BC517911A8B23D1B"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7C234E65007B484D805DEC15290CFE68"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7D114A70FCAC4E4695D42DA8F424EC6C"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7FB5188167F24299BEEA7D24D24A3588"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_838A91BA18C64FA9842DA0D1C4E5A575"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_87768631363249B2B301143C193612F7"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_87AB4EBFBFE940E2A5BC3A530BFDA7CD"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_881DE3D70D804FD3AF3B580BCEB0CDB8"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8A97B08A94BF4C61953A80E160801418"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_1CFB1AB04E024FC993E0EB4859DF8408"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_EF14CB99F3414BB689D0CB0E6D6B8AB8"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_BCB8B09BD3BF4E5889E46049601E0973"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_BB649A2C1ABE4895859025B09A240323"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_B20769E090034897B32E3EA4EC1BA8A0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_A944ADCEDF884574A23F7BA5420A6BA1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_A0D5F714A0F94250A1C39603B699AB82"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_318FCC99E8D143D6B4F9F534E63009B3"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_2F2FEC549F02436EB87961BD1B9E5783"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9"
+        "OwnerKey" = "8:_2814E641538B42EFA83525986A9D5AC1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8DC8F46624C1484B9950384102994B2F"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8EAD91E4DA424EA6A84DCFE531858A6A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8F064C3BD40643E2B9CB0A070E5EB595"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_90153CA3A0E74CBE805ADA265DB7F60F"
+        "OwnerKey" = "8:_5D2D1389842F47F8BEA541066B9C4098"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_91114B05951A4F99A978778F9E210C5C"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_91326CA936BB4A17915EC8E1DEAE7AAF"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_914D088BFACC45918177690473C705EC"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_920E18F9C5C34C9EBFBF65840F9DD772"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_929BB78C2E9D416FB6A8126177F8D075"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_959DD5B2433842EA803B176E58C8CFD7"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_98B97716225C408E8D11F0C646D44927"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_9A293E8A356A4959BB6E541B7DC213CD"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_9C34E0D148C14DB7A206CA6E069F56FD"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A0D5F714A0F94250A1C39603B699AB82"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A1322143D6F741CFA29A5539F515E1EA"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A3936A2727E73289F5804D5DA006FD0A"
+        "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A4AC3FC3DCDF4E639A45632F0F3F7F04"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A91DF1AAD16346E59F0BBC44F54721CB"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A944ADCEDF884574A23F7BA5420A6BA1"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_AD2EB44FE6D548F2A8DA4F9F2CE817AC"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B0A2E9B4C45D4098AFD734D0C4E3EAFB"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B13EDAD78BBF4A3F9F516F864CB698A1"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B20769E090034897B32E3EA4EC1BA8A0"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B29014EF9EBF4C949289E10F81307693"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B3189C4379A149C68DE68EEFA2269570"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BA27CD4D77B1458197BAC2BB1A4237C0"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BA6EBADA278241F281B09875DD1661B8"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BB649A2C1ABE4895859025B09A240323"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BC316CC13DBF4B68B36DC86C1D172509"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BCB8B09BD3BF4E5889E46049601E0973"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BD0F36F62CF0450CA4A5613FBBF76C45"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BD6C52C176794E38AA7B9389EC172CBB"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BD74B34F036F4A9782584166ED893A18"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BE6A27F1EA5C462585E36F14FE24A5AC"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_BFC3D1F41C3243F2B40965A22F650C39"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C105055EE271471A999CE7022E617EB7"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C41CB5C24D2840AE8B6836AD7DB97196"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C4358C1327914A369B402FDAF33163CD"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C4FD5527CDD5430DBBB1329DC0BDA8C5"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C81AC700C1BC4A55B98DF12C0CBAFD6F"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C8BD2A446FD4454382A140CE1ED2E7C4"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9F7CB31F666426DA9DDBA6DC8F0A803"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_CA8E2512E246456093E1246370C11B41"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_CC490CFDB0814F92B01C1E30B786A885"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_CDBF086ABFDA4AEA9AF25BC36AEBC8D2"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_CEB75EE0E69A45C7B9650D93CAC1009A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_D0752B769340436C8D9233BBB844535A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_D0BB09AFB8D94B76918F0EE85BCCAD0A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_D20F7A0A8C1445D3A5455D8ECA94D118"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_D84D0E09AC0B46D68C56C4421EA0E03C"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_D9B558ED8D5045A18FE190B7692F089A"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_D9B95A3E108E2DC4D5FD66A98B16714F"
+        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DB764FA862A546569D00535F32AA49D9"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DBBC0473484444C1BBC8C0408FD13107"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DDDD93BA6A644BFDB6A234872F6B544D"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E0891F01CC67410D97B62D708B560C60"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E1CC91FCF87955D17FC3C0A8E875B690"
+        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E2B402496C1340FAB3A7E2EE660A9B10"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E51DA0CD3E3941299D7A22F20C1E16C0"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E763C699DF0948B6984DDEB96A2DFD06"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC68A140B58841DA9B9172BAFA5BEC63"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EF00E2B953F847BE8E2E9C25455C93EB"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EF14CB99F3414BB689D0CB0E6D6B8AB8"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EF83A11C5C3440848E6765E2638C2E32"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F1F056696C2A4479BDC661D2A6FCB410"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F1F90472DB034558ACB7B359C73F0C17"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F70545DA1954BF3D355780C29CBEBD74"
+        "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+    }
+    "Configurations"
+    {
+        "Debug"
+        {
+        "DisplayName" = "8:Debug"
+        "IsDebugOnly" = "11:TRUE"
+        "IsReleaseOnly" = "11:FALSE"
+        "OutputFilename" = "8:Debug\\GtalkPhone.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+            {
+            "Enabled" = "11:TRUE"
+            "PromptEnabled" = "11:TRUE"
+            "PrerequisitesLocation" = "2:2"
+            "Url" = "8:http://www.gtalkphone.com/"
+            "ComponentsUrl" = "8:"
+                "Items"
+                {
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Visual.C++.8.0.x86"
+                    {
+                    "Name" = "8:Visual C++ Runtime Libraries (x86)"
+                    "ProductCode" = "8:Microsoft.Visual.C++.8.0.x86"
+                    }
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
+                    {
+                    "Name" = "8:Windows Installer 3.1"
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"
+                    }
+                }
+            }
+        }
+        "Release"
+        {
+        "DisplayName" = "8:Release"
+        "IsDebugOnly" = "11:FALSE"
+        "IsReleaseOnly" = "11:TRUE"
+        "OutputFilename" = "8:Release\\GtalkPhone.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+            {
+            "Enabled" = "11:TRUE"
+            "PromptEnabled" = "11:TRUE"
+            "PrerequisitesLocation" = "2:2"
+            "Url" = "8:http://www.gtalkphone.com/"
+            "ComponentsUrl" = "8:"
+                "Items"
+                {
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Visual.C++.8.0.x86"
+                    {
+                    "Name" = "8:Visual C++ Runtime Libraries (x86)"
+                    "ProductCode" = "8:Microsoft.Visual.C++.8.0.x86"
+                    }
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
+                    {
+                    "Name" = "8:Windows Installer 3.1"
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"
+                    }
+                }
+            }
+        }
+    }
+    "Deployable"
+    {
+        "CustomAction"
+        {
+        }
+        "DefaultFeature"
+        {
+        "Name" = "8:DefaultFeature"
+        "Title" = "8:"
+        "Description" = "8:"
+        }
+        "ExternalPersistence"
+        {
+            "LaunchCondition"
+            {
+            }
+        }
+        "File"
+        {
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_011F605D964748BDAA911C7DE2315BB1"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\btDial_disable.gif"
+            "TargetName" = "8:btDial_disable.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_03153A29D019413AB8802480F81DEF7F"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_25.gif"
+            "TargetName" = "8:bignumpad_25.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_047539112C3E461EAA74088FA9BE9E69"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM0.gif"
+            "TargetName" = "8:NUM0.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0534EE6640B342CFB755CE50728A8BCA"
+            {
+            "SourcePath" = "8:..\\skin\\google\\max.bmp"
+            "TargetName" = "8:max.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_092402C810E94F1AB18DE4850CFC15AC"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_07.gif"
+            "TargetName" = "8:numpad_big_cropped_07.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_099956C2FDFB4F1D856128F2598A4B33"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_29.gif"
+            "TargetName" = "8:bignumpad_29.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0B327B4477E04F94BD0EFF3BB08C2034"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM9.gif"
+            "TargetName" = "8:NUM9.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0E3B5842A3734D90A0EE515AEC6CA0C8"
+            {
+            "SourcePath" = "8:..\\skin\\google\\restore.bmp"
+            "TargetName" = "8:restore.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0E3D00F607D64FFBAB3BCCEE54868B94"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM4.gif"
+            "TargetName" = "8:NUM4.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0EB4E22D947047928070894CC314427A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_08.gif"
+            "TargetName" = "8:bignumpad_08.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1273F63008CF585CA0E063E436B4646F"
+            {
+            "SourcePath" = "8:iphlpapi.dll"
+            "TargetName" = "8:iphlpapi.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1943D4043028471EA31B3B740572CF58"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_28.gif"
+            "TargetName" = "8:bignumpad_28.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_19FABE7F81974445A9D9548C4BD17B4A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_08.gif"
+            "TargetName" = "8:numpad_big_cropped_08.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1EA6C313E8784DB5A7269636F12F97FC"
+            {
+            "SourcePath" = "8:..\\skin\\google\\settingsDlg.htm"
+            "TargetName" = "8:settingsDlg.htm"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_213875BF232B446089B248AB680A0E8C"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM#.gif"
+            "TargetName" = "8:NUM#.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_219915C9DD5E446C979573CA1A77CD94"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_02.gif"
+            "TargetName" = "8:bignumpad_02.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2573B3D1C1B64130B14C0AC58B220AAD"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_24.gif"
+            "TargetName" = "8:numpad_big_cropped_24.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_26D8B58FB52A4D269E82662406380FB8"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_23.gif"
+            "TargetName" = "8:numpad_big_cropped_23.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_283AF8C6D620E7AAFAAA28E46550E979"
+            {
+            "SourcePath" = "8:WININET.dll"
+            "TargetName" = "8:WININET.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_28F33D5DADE544A0AC0B4745FE3FBCE0"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\phone2.gif"
+            "TargetName" = "8:phone2.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2FE2BE6423524466AE9B6DDACA25659B"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_13.gif"
+            "TargetName" = "8:bignumpad_13.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_30D9C271D9814AB3A21BF4E254EF1516"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\speeker.gif"
+            "TargetName" = "8:speeker.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_329D8DAE6C01FCF026E9DFB48B932203"
+            {
+            "SourcePath" = "8:MSWSOCK.dll"
+            "TargetName" = "8:MSWSOCK.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_33FEF8EC137A4CCFA2D033338AD41740"
+            {
+            "SourcePath" = "8:..\\skin\\google\\min.bmp"
+            "TargetName" = "8:min.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3481511C7FB64F80B8A15FF88674E39B"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_11.gif"
+            "TargetName" = "8:numpad_big_cropped_11.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_34F26958FC234A729D9E66BF43FB621E"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM1.gif"
+            "TargetName" = "8:NUM1.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_352B3F82A641637C8A115BDBD9E815F8"
+            {
+            "SourcePath" = "8:libapriconv.dll"
+            "TargetName" = "8:libapriconv.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3616BAFEC39B4CB3B59DDB88FF7EF234"
+            {
+            "SourcePath" = "8:..\\skin\\google\\top.bmp"
+            "TargetName" = "8:top.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_38D479EDA4B149229E7683A872389B67"
+            {
+            "SourcePath" = "8:..\\freeswitch.xml"
+            "TargetName" = "8:freeswitch.xml"
+            "Tag" = "8:"
+            "Folder" = "8:_06036160035041E38F4179E6DB6380C5"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3911245A4F074600B8FDFDA13670079C"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_20.gif"
+            "TargetName" = "8:numpad_big_cropped_20.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3AA771348091426E95001C83842B96B8"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\ring.wav"
+            "TargetName" = "8:ring.wav"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3B4414B23DDA4F148D65344ACDA8AD26"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\signin.gif"
+            "TargetName" = "8:signin.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3DF8772375AA4701AFCA33BD13454741"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_05.gif"
+            "TargetName" = "8:bignumpad_05.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_431678C6A4054132B0E5B7E13926A75E"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_27.gif"
+            "TargetName" = "8:bignumpad_27.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_449CF87BB19F4704AFC7A6EA4229E204"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_27.gif"
+            "TargetName" = "8:numpad_big_cropped_27.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4595E9E3EEE54266888939B751817D3A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_22.gif"
+            "TargetName" = "8:numpad_big_cropped_22.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47DF23462CAA41E18CEFE3D0A348C477"
+            {
+            "SourcePath" = "8:..\\skin\\google\\css\\winclassic.css"
+            "TargetName" = "8:winclassic.css"
+            "Tag" = "8:"
+            "Folder" = "8:_861C9A164F7740888F430087CD807957"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_497942BF15E0080F895E96BC0285CB5D"
+            {
+            "SourcePath" = "8:libaprutil.dll"
+            "TargetName" = "8:libaprutil.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4CD45D17DBE94E79947507384EFFD130"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_10.gif"
+            "TargetName" = "8:numpad_big_cropped_10.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4EDEC377C8284215B7D4E7A4EFAB86E2"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM3.gif"
+            "TargetName" = "8:NUM3.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4F3F74AA3B4F4AE98F367218EE691BC7"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_02.gif"
+            "TargetName" = "8:numpad_big_cropped_02.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_517C2A23792D45E9B359DB18D913386A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_07.gif"
+            "TargetName" = "8:bignumpad_07.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_569D03628E41BAB30C90978B9575D98C"
+            {
+            "SourcePath" = "8:google.dll"
+            "TargetName" = "8:google.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_59C3EF63D3C94FC7AC5E04ACC2B3B6A5"
+            {
+            "SourcePath" = "8:..\\skin\\google\\theme.ini"
+            "TargetName" = "8:theme.ini"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5A3512552B17420CA5D7F6043665AF6D"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_17.gif"
+            "TargetName" = "8:bignumpad_17.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5C3E0D24513D46A4B8366006A3268EF4"
+            {
+            "SourcePath" = "8:..\\skin\\google\\right.bmp"
+            "TargetName" = "8:right.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5CFF4C7484B640B1B5756CD323CC7E58"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_16.gif"
+            "TargetName" = "8:bignumpad_16.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_632D79C6771442AB9D17E66DE2C750B6"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM2.gif"
+            "TargetName" = "8:NUM2.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_656873B55D354EFFAA92EA6689A00723"
+            {
+            "SourcePath" = "8:..\\skin\\google\\Radio.bmp"
+            "TargetName" = "8:Radio.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_66D36239CEE44E41AC15D8745B60DA6F"
+            {
+            "SourcePath" = "8:..\\skin\\google\\Checkbox.bmp"
+            "TargetName" = "8:Checkbox.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_67A562A164694F33931369E955A504D2"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_25.gif"
+            "TargetName" = "8:numpad_big_cropped_25.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_68627C5080F244F3B88EF04CAD1506F9"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_04.gif"
+            "TargetName" = "8:numpad_big_cropped_04.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_69234AE2A61247F0AC620E58F3463D48"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM5.gif"
+            "TargetName" = "8:NUM5.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6BD96A84A097442AA01020E71415DB0B"
+            {
+            "SourcePath" = "8:..\\skin\\google\\gtalkphone.htm"
+            "TargetName" = "8:gtalkphone.htm"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6CF1BB0311AD41C3BC50DB8ED0EABED1"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\btHold.gif"
+            "TargetName" = "8:btHold.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6ED2FF0583A54D71982D109F21758A5E"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM_STAR.gif"
+            "TargetName" = "8:NUM_STAR.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6FF2C3095A6D26FCF0D994F725656588"
+            {
+            "SourcePath" = "8:libapr.dll"
+            "TargetName" = "8:libapr.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7092EBC0CF264196915B5BE2B699115E"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_14.gif"
+            "TargetName" = "8:bignumpad_14.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_70C0B0406844413691C4F6D730088354"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_06.gif"
+            "TargetName" = "8:numpad_big_cropped_06.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7C234E65007B484D805DEC15290CFE68"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_05.gif"
+            "TargetName" = "8:numpad_big_cropped_05.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7D114A70FCAC4E4695D42DA8F424EC6C"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_21.gif"
+            "TargetName" = "8:numpad_big_cropped_21.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7FB5188167F24299BEEA7D24D24A3588"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_15.gif"
+            "TargetName" = "8:bignumpad_15.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_838A91BA18C64FA9842DA0D1C4E5A575"
+            {
+            "SourcePath" = "8:..\\skin\\google\\left.bmp"
+            "TargetName" = "8:left.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_87AB4EBFBFE940E2A5BC3A530BFDA7CD"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_13.gif"
+            "TargetName" = "8:numpad_big_cropped_13.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_881DE3D70D804FD3AF3B580BCEB0CDB8"
+            {
+            "SourcePath" = "8:..\\skin\\google\\css\\boxsizing.htc"
+            "TargetName" = "8:boxsizing.htc"
+            "Tag" = "8:"
+            "Folder" = "8:_861C9A164F7740888F430087CD807957"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8A97B08A94BF4C61953A80E160801418"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_03.gif"
+            "TargetName" = "8:bignumpad_03.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8DC8F46624C1484B9950384102994B2F"
+            {
+            "SourcePath" = "8:..\\skin\\google\\Buttons.bmp"
+            "TargetName" = "8:Buttons.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8EAD91E4DA424EA6A84DCFE531858A6A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_11.gif"
+            "TargetName" = "8:bignumpad_11.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8F064C3BD40643E2B9CB0A070E5EB595"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_10.gif"
+            "TargetName" = "8:bignumpad_10.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_91114B05951A4F99A978778F9E210C5C"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_17.gif"
+            "TargetName" = "8:numpad_big_cropped_17.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_91326CA936BB4A17915EC8E1DEAE7AAF"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_24.gif"
+            "TargetName" = "8:bignumpad_24.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_914D088BFACC45918177690473C705EC"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_19.gif"
+            "TargetName" = "8:numpad_big_cropped_19.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_920E18F9C5C34C9EBFBF65840F9DD772"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_01.gif"
+            "TargetName" = "8:bignumpad_01.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_929BB78C2E9D416FB6A8126177F8D075"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_09.gif"
+            "TargetName" = "8:bignumpad_09.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_959DD5B2433842EA803B176E58C8CFD7"
+            {
+            "SourcePath" = "8:..\\skin\\google\\css\\gtalkphone\\handle.horizontal.bmp"
+            "TargetName" = "8:handle.horizontal.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_53783B5A732D49059B24D6A1105850EC"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_98B97716225C408E8D11F0C646D44927"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_22.gif"
+            "TargetName" = "8:bignumpad_22.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9C34E0D148C14DB7A206CA6E069F56FD"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_23.gif"
+            "TargetName" = "8:bignumpad_23.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A1322143D6F741CFA29A5539F515E1EA"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_29.gif"
+            "TargetName" = "8:numpad_big_cropped_29.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A3936A2727E73289F5804D5DA006FD0A"
+            {
+            "SourcePath" = "8:RPCRT4.dll"
+            "TargetName" = "8:RPCRT4.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A4AC3FC3DCDF4E639A45632F0F3F7F04"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_01.gif"
+            "TargetName" = "8:numpad_big_cropped_01.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A91DF1AAD16346E59F0BBC44F54721CB"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\fangdajing.gif"
+            "TargetName" = "8:fangdajing.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B13EDAD78BBF4A3F9F516F864CB698A1"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM7.gif"
+            "TargetName" = "8:NUM7.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B29014EF9EBF4C949289E10F81307693"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_12.gif"
+            "TargetName" = "8:numpad_big_cropped_12.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B3189C4379A149C68DE68EEFA2269570"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\phone1.gif"
+            "TargetName" = "8:phone1.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BA27CD4D77B1458197BAC2BB1A4237C0"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\btReDial.gif"
+            "TargetName" = "8:btReDial.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BA6EBADA278241F281B09875DD1661B8"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_03.gif"
+            "TargetName" = "8:numpad_big_cropped_03.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BC316CC13DBF4B68B36DC86C1D172509"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM6.gif"
+            "TargetName" = "8:NUM6.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD0F36F62CF0450CA4A5613FBBF76C45"
+            {
+            "SourcePath" = "8:..\\skin\\google\\js\\range.js"
+            "TargetName" = "8:range.js"
+            "Tag" = "8:"
+            "Folder" = "8:_083F81B59A304720B4A8BDB7FF91639D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD6C52C176794E38AA7B9389EC172CBB"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\cha.gif"
+            "TargetName" = "8:cha.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD74B34F036F4A9782584166ED893A18"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_12.gif"
+            "TargetName" = "8:bignumpad_12.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BE6A27F1EA5C462585E36F14FE24A5AC"
+            {
+            "SourcePath" = "8:..\\skin\\google\\js\\slider.js"
+            "TargetName" = "8:slider.js"
+            "Tag" = "8:"
+            "Folder" = "8:_083F81B59A304720B4A8BDB7FF91639D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BFC3D1F41C3243F2B40965A22F650C39"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_26.gif"
+            "TargetName" = "8:numpad_big_cropped_26.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C41CB5C24D2840AE8B6836AD7DB97196"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\NUM8.gif"
+            "TargetName" = "8:NUM8.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C4358C1327914A369B402FDAF33163CD"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_21.gif"
+            "TargetName" = "8:bignumpad_21.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C4FD5527CDD5430DBBB1329DC0BDA8C5"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\btReDial_disable.gif"
+            "TargetName" = "8:btReDial_disable.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C8BD2A446FD4454382A140CE1ED2E7C4"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_20.gif"
+            "TargetName" = "8:bignumpad_20.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C9F7CB31F666426DA9DDBA6DC8F0A803"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_19.gif"
+            "TargetName" = "8:bignumpad_19.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CA8E2512E246456093E1246370C11B41"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\gtalkphone_logo.gif"
+            "TargetName" = "8:gtalkphone_logo.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CC490CFDB0814F92B01C1E30B786A885"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_15.gif"
+            "TargetName" = "8:numpad_big_cropped_15.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CDBF086ABFDA4AEA9AF25BC36AEBC8D2"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_16.gif"
+            "TargetName" = "8:numpad_big_cropped_16.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CEB75EE0E69A45C7B9650D93CAC1009A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_26.gif"
+            "TargetName" = "8:bignumpad_26.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D0752B769340436C8D9233BBB844535A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\btDial.gif"
+            "TargetName" = "8:btDial.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D20F7A0A8C1445D3A5455D8ECA94D118"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_18.gif"
+            "TargetName" = "8:bignumpad_18.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D84D0E09AC0B46D68C56C4421EA0E03C"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_06.gif"
+            "TargetName" = "8:bignumpad_06.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D9B558ED8D5045A18FE190B7692F089A"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\mic.gif"
+            "TargetName" = "8:mic.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D9B95A3E108E2DC4D5FD66A98B16714F"
+            {
+            "SourcePath" = "8:libsqlite.dll"
+            "TargetName" = "8:libsqlite.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DB764FA862A546569D00535F32AA49D9"
+            {
+            "SourcePath" = "8:..\\skin\\google\\close.bmp"
+            "TargetName" = "8:close.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DBBC0473484444C1BBC8C0408FD13107"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_04.gif"
+            "TargetName" = "8:bignumpad_04.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DDDD93BA6A644BFDB6A234872F6B544D"
+            {
+            "SourcePath" = "8:..\\skin\\google\\js\\timer.js"
+            "TargetName" = "8:timer.js"
+            "Tag" = "8:"
+            "Folder" = "8:_083F81B59A304720B4A8BDB7FF91639D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E0891F01CC67410D97B62D708B560C60"
+            {
+            "SourcePath" = "8:..\\skin\\google\\bottom.bmp"
+            "TargetName" = "8:bottom.bmp"
+            "Tag" = "8:"
+            "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E1CC91FCF87955D17FC3C0A8E875B690"
+            {
+            "SourcePath" = "8:WLDAP32.dll"
+            "TargetName" = "8:WLDAP32.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E2B402496C1340FAB3A7E2EE660A9B10"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_18.gif"
+            "TargetName" = "8:numpad_big_cropped_18.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E51DA0CD3E3941299D7A22F20C1E16C0"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_14.gif"
+            "TargetName" = "8:numpad_big_cropped_14.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EF00E2B953F847BE8E2E9C25455C93EB"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_09.gif"
+            "TargetName" = "8:numpad_big_cropped_09.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EF83A11C5C3440848E6765E2638C2E32"
+            {
+            "SourcePath" = "8:..\\skin\\google\\css\\gtalkphone\\gtalkphone.css"
+            "TargetName" = "8:gtalkphone.css"
+            "Tag" = "8:"
+            "Folder" = "8:_53783B5A732D49059B24D6A1105850EC"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F1F056696C2A4479BDC661D2A6FCB410"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\btHold_disable.gif"
+            "TargetName" = "8:btHold_disable.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F1F90472DB034558ACB7B359C73F0C17"
+            {
+            "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_28.gif"
+            "TargetName" = "8:numpad_big_cropped_28.gif"
+            "Tag" = "8:"
+            "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F70545DA1954BF3D355780C29CBEBD74"
+            {
+            "SourcePath" = "8:FreeSwitch.dll"
+            "TargetName" = "8:FreeSwitch.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+        }
+        "FileType"
+        {
+        }
+        "Folder"
+        {
+            "{3C67513D-01DD-4637-8A68-80971EB9504F}:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            {
+            "DefaultLocation" = "8:[ProgramFilesFolder]\\[ProductName]"
+            "Name" = "8:#1925"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:TARGETDIR"
+                "Folders"
+                {
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_06036160035041E38F4179E6DB6380C5"
+                    {
+                    "Name" = "8:conf"
+                    "AlwaysCreate" = "11:TRUE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_A95348FEFEF74A31B7C08B4201803CBD"
+                        "Folders"
+                        {
+                        }
+                    }
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_1C97B9EB8E024EE0AA5282BFBE006743"
+                    {
+                    "Name" = "8:db"
+                    "AlwaysCreate" = "11:TRUE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_9E6DFB10CEE3456A82E42EA3751A0A25"
+                        "Folders"
+                        {
+                        }
+                    }
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_50A75B11E6984CA5933060192C4A21CC"
+                    {
+                    "Name" = "8:skin"
+                    "AlwaysCreate" = "11:FALSE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_E69C08966CEF428A9479FD4CB77B7143"
+                        "Folders"
+                        {
+                            "{9EF0B969-E518-4E46-987F-47570745A589}:_96055D6EF136409781FB9B9D2AA42279"
+                            {
+                            "Name" = "8:google"
+                            "AlwaysCreate" = "11:FALSE"
+                            "Condition" = "8:"
+                            "Transitive" = "11:FALSE"
+                            "Property" = "8:_D9E8C3693E7643D6BA2FD364CD515C6C"
+                                "Folders"
+                                {
+                                    "{9EF0B969-E518-4E46-987F-47570745A589}:_083F81B59A304720B4A8BDB7FF91639D"
+                                    {
+                                    "Name" = "8:js"
+                                    "AlwaysCreate" = "11:FALSE"
+                                    "Condition" = "8:"
+                                    "Transitive" = "11:FALSE"
+                                    "Property" = "8:_55E35904680847C58A01CD98DB4F57B3"
+                                        "Folders"
+                                        {
+                                        }
+                                    }
+                                    "{9EF0B969-E518-4E46-987F-47570745A589}:_861C9A164F7740888F430087CD807957"
+                                    {
+                                    "Name" = "8:css"
+                                    "AlwaysCreate" = "11:FALSE"
+                                    "Condition" = "8:"
+                                    "Transitive" = "11:FALSE"
+                                    "Property" = "8:_127A93C1C6DD4F0596068F708C75638B"
+                                        "Folders"
+                                        {
+                                            "{9EF0B969-E518-4E46-987F-47570745A589}:_53783B5A732D49059B24D6A1105850EC"
+                                            {
+                                            "Name" = "8:gtalkphone"
+                                            "AlwaysCreate" = "11:FALSE"
+                                            "Condition" = "8:"
+                                            "Transitive" = "11:FALSE"
+                                            "Property" = "8:_F2570A427C29462DB652E6CD74E87B2B"
+                                                "Folders"
+                                                {
+                                                }
+                                            }
+                                        }
+                                    }
+                                    "{9EF0B969-E518-4E46-987F-47570745A589}:_9B25E0B00C2C4C7FB29BE94B8859977C"
+                                    {
+                                    "Name" = "8:res"
+                                    "AlwaysCreate" = "11:FALSE"
+                                    "Condition" = "8:"
+                                    "Transitive" = "11:FALSE"
+                                    "Property" = "8:_0C7A7A8E013043A28422129D387F3231"
+                                        "Folders"
+                                        {
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_B6E020422C78490D96F78DB0E1A3F521"
+                    {
+                    "Name" = "8:mod"
+                    "AlwaysCreate" = "11:TRUE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_09F2F8E16214428B84412E224BAA50C1"
+                        "Folders"
+                        {
+                        }
+                    }
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_ED8FE817D10341CEBA2571A43326876F"
+                    {
+                    "Name" = "8:log"
+                    "AlwaysCreate" = "11:TRUE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_673CC6A86CF64CC2BD137EF46A3AD379"
+                        "Folders"
+                        {
+                        }
+                    }
+                }
+            }
+            "{1525181F-901A-416C-8A58-119130FE478E}:_47AC7012FEA1483795137E042EAAA132"
+            {
+            "Name" = "8:#1916"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:DesktopFolder"
+                "Folders"
+                {
+                }
+            }
+            "{1525181F-901A-416C-8A58-119130FE478E}:_BB9A8497D4A34C94A9F73DBAD1B4EDD5"
+            {
+            "Name" = "8:#1919"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:ProgramMenuFolder"
+                "Folders"
+                {
+                }
+            }
+        }
+        "LaunchCondition"
+        {
+        }
+        "Locator"
+        {
+        }
+        "MsiBootstrapper"
+        {
+        "LangId" = "3:1033"
+        }
+        "Product"
+        {
+        "Name" = "8:Microsoft Visual Studio"
+        "ProductName" = "8:GtalkPhone"
+        "ProductCode" = "8:{317A9CC0-40DC-4803-A13E-5937F05F9D2E}"
+        "PackageCode" = "8:{F335F38D-E000-4D11-92E4-6C534A847189}"
+        "UpgradeCode" = "8:{8080E3A5-7ADD-4173-8913-BDA439D1C8DD}"
+        "RestartWWWService" = "11:FALSE"
+        "RemovePreviousVersions" = "11:FALSE"
+        "DetectNewerInstalledVersion" = "11:TRUE"
+        "InstallAllUsers" = "11:FALSE"
+        "ProductVersion" = "8:1.0.0"
+        "Manufacturer" = "8:GtalkPhone"
+        "ARPHELPTELEPHONE" = "8:"
+        "ARPHELPLINK" = "8:http://www.gtalkphone.com"
+        "Title" = "8:GtalkPhone"
+        "Subject" = "8:"
+        "ARPCONTACT" = "8:GtalkPhone"
+        "Keywords" = "8:"
+        "ARPCOMMENTS" = "8:Gtalkphone soft phone client"
+        "ARPURLINFOABOUT" = "8:http://www.gtalkphone.com"
+        "ARPPRODUCTICON" = "8:"
+        "ARPIconIndex" = "3:0"
+        "SearchPath" = "8:"
+        "UseSystemSearchPath" = "11:TRUE"
+        "TargetPlatform" = "3:0"
+        "PreBuildEvent" = "8:"
+        "PostBuildEvent" = "8:"
+        "RunPostBuildEvent" = "3:0"
+        }
+        "Registry"
+        {
+            "HKLM"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C86C84661E6B4F4385B0A9B46004C30A"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_F9ACB3B7D8FE4C4AB1DEAAA8AFDB6625"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                    "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_C59781825E5B4A9AA93BDAA5A88B7390"
+                                    {
+                                    "Name" = "8:[ProductName]"
+                                    "Condition" = "8:"
+                                    "Transitive" = "11:FALSE"
+                                    "ValueTypes" = "3:1"
+                                    "Value" = "8:"
+                                    }
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCU"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_7F5B1AD977F741E2BA57B612CB916982"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8BE36B8912C74AE3895B662703C59F60"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCR"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKU"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKPU"
+            {
+                "Keys"
+                {
+                }
+            }
+        }
+        "Sequences"
+        {
+        }
+        "Shortcut"
+        {
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_2571AAD8CB0B4B7D8DD7AF7B936AAB41"
+            {
+            "Name" = "8:GtalkPhone"
+            "Arguments" = "8:"
+            "Description" = "8:"
+            "ShowCmd" = "3:1"
+            "IconIndex" = "3:0"
+            "Transitive" = "11:FALSE"
+            "Target" = "8:_4558465C50C14F60BB4E8B25025AE011"
+            "Folder" = "8:_47AC7012FEA1483795137E042EAAA132"
+            "WorkingFolder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Icon" = "8:"
+            "Feature" = "8:"
+            }
+        }
+        "UserInterface"
+        {
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0AC03CBC91DC47F395834FBA9E8EFA43"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:2"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7E723E774FA54F4DBCB57AE03DE9B912"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Finished"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_885CF4FBC8524588BC68589AA4DAD7CD"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:2"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4BB1CFED1FBE405DA7915AE4FDAAD9E2"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:Confirm Installation"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4F779649BBA94A14A711885D453A873C"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Welcome"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1202"
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E0F0A54AAFCF424685A4BCCA5D4FA293"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Installation Folder"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E8A0FD168FA4401FBF582E01DA819A71"
+                    {
+                    "Sequence" = "3:210"
+                    "DisplayName" = "8:License Agreement"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminLicenseDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "EulaText"
+                            {
+                            "Name" = "8:EulaText"
+                            "DisplayName" = "8:#1008"
+                            "Description" = "8:#1108"
+                            "Type" = "3:6"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:2"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Sunken"
+                            {
+                            "Name" = "8:Sunken"
+                            "DisplayName" = "8:#1007"
+                            "Description" = "8:#1107"
+                            "Type" = "3:5"
+                            "ContextData" = "8:4;True=4;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:4"
+                            "DefaultValue" = "3:4"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9237AC900FC7421096FC1C1F479A57D9"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:1"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_87DF179163CD484DB37A39147438C87A"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Finished"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "UpdateText"
+                            {
+                            "Name" = "8:UpdateText"
+                            "DisplayName" = "8:#1058"
+                            "Description" = "8:#1158"
+                            "Type" = "3:15"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1258"
+                            "DefaultValue" = "8:#1258"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9F49CF9AA2304625B214D7BF7FE0FC89"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:1"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_008ED2DDF9EE4AAAA5A54CE5B90D7427"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Welcome"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1202"
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_1229F6668E004795AE90C753D37CA881"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:License Agreement"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdLicenseDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "EulaText"
+                            {
+                            "Name" = "8:EulaText"
+                            "DisplayName" = "8:#1008"
+                            "Description" = "8:#1108"
+                            "Type" = "3:6"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:2"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Sunken"
+                            {
+                            "Name" = "8:Sunken"
+                            "DisplayName" = "8:#1007"
+                            "Description" = "8:#1107"
+                            "Type" = "3:5"
+                            "ContextData" = "8:4;True=4;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:4"
+                            "DefaultValue" = "3:4"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E4748A502E1E4F89B72F6B70E40E6954"
+                    {
+                    "Sequence" = "3:400"
+                    "DisplayName" = "8:Confirm Installation"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F9BF3342C96C46E881504C25485FBD93"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Installation Folder"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "InstallAllUsersVisible"
+                            {
+                            "Name" = "8:InstallAllUsersVisible"
+                            "DisplayName" = "8:#1059"
+                            "Description" = "8:#1159"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_A743B7ABADA24530AC058C2B0E78F94F"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_B83060B37387437599800ADFAC074C18"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:1"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3C5BB3C734294ACAAB1AEF433CCCA33F"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Progress"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BC9CAF451369479F82544986C8CF598B"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:2"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F33D853FB64C44D9A501F2CD9132828B"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Progress"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_E0AB16337A7946BFAEA2E0890188594D"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
+            }
+        }
+        "MergeModule"
+        {
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_2D3594E151184C9B8C66BA923F3FABAA"
+            {
+            "UseDynamicProperties" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86.msm"
+                "Properties"
+                {
+                }
+            "LanguageId" = "3:0"
+            "Exclude" = "11:FALSE"
+            "Folder" = "8:"
+            "Feature" = "8:"
+            "IsolateTo" = "8:"
+            }
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_5D2D1389842F47F8BEA541066B9C4098"
+            {
+            "UseDynamicProperties" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "SourcePath" = "8:Microsoft_VC80_MFC_x86.msm"
+                "Properties"
+                {
+                }
+            "LanguageId" = "3:0"
+            "Exclude" = "11:FALSE"
+            "Folder" = "8:"
+            "Feature" = "8:"
+            "IsolateTo" = "8:"
+            }
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_8D269A170E264064951A217B1E8540A9"
+            {
+            "UseDynamicProperties" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "SourcePath" = "8:Microsoft_VC80_CRT_x86.msm"
+                "Properties"
+                {
+                }
+            "LanguageId" = "3:0"
+            "Exclude" = "11:FALSE"
+            "Folder" = "8:"
+            "Feature" = "8:"
+            "IsolateTo" = "8:"
+            }
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_90153CA3A0E74CBE805ADA265DB7F60F"
+            {
+            "UseDynamicProperties" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "SourcePath" = "8:policy_8_0_microsoft_vc80_mfc_x86.msm"
+                "Properties"
+                {
+                }
+            "LanguageId" = "3:0"
+            "Exclude" = "11:FALSE"
+            "Folder" = "8:"
+            "Feature" = "8:"
+            "IsolateTo" = "8:"
+            }
+        }
+        "ProjectOutput"
+        {
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1CFB1AB04E024FC993E0EB4859DF8408"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_dingaling.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2814E641538B42EFA83525986A9D5AC1"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_ilbc.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{D3EC0AFF-76FC-4210-A825-9A17410660A3}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_28FBC5A60B44423B8A2CC378347483CE"
+            {
+            "SourcePath" = "8:..\\release\\libapr.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2F2FEC549F02436EB87961BD1B9E5783"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_iax.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{3A5B9131-F20C-4A85-9447-6C1610941CEE}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_318FCC99E8D143D6B4F9F534E63009B3"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_sndfile.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3FBEFE0119944C6781F81104ECEF37CA"
+            {
+            "SourcePath" = "8:..\\release\\libapriconv.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_4558465C50C14F60BB4E8B25025AE011"
+            {
+            "SourcePath" = "8:..\\release\\gtalkphone.exe"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{14187C61-F357-4151-AEDE-F562645FB3F3}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_59CFED0C4EC0492C945E4EBC04FE965F"
+            {
+            "SourcePath" = "8:..\\release\\libaprutil.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6E5C001E7A314DCEA0A4BF52BF74BCAD"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_speex.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{5580D60E-0F77-4716-9CD4-B8E5986FA375}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_72A8732C0C0C4D0EAAE89DBB82073335"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_playback.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{78100236-7CEA-4948-96CC-E8ED3160329C}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_7358123D2D064AD1BC517911A8B23D1B"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_softtimer.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_87768631363249B2B301143C193612F7"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_g711.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_9A293E8A356A4959BB6E541B7DC213CD"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_bridgecall.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{E1794405-29D4-466D-9BE3-DD2344C2A663}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A0D5F714A0F94250A1C39603B699AB82"
+            {
+            "SourcePath" = "8:..\\..\\libs\\libteletone\\Release\\libteletone.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{89385C74-5860-4174-9CAF-A39E7C48909C}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A944ADCEDF884574A23F7BA5420A6BA1"
+            {
+            "SourcePath" = "8:..\\release\\libsqlite.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_AD2EB44FE6D548F2A8DA4F9F2CE817AC"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_l16.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B0A2E9B4C45D4098AFD734D0C4E3EAFB"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_conference.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{C24FB505-05D7-4319-8485-7540B44C8603}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B20769E090034897B32E3EA4EC1BA8A0"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_gsm.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{4926323F-4EA8-4B7D-A3D3-65488725988F}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BB649A2C1ABE4895859025B09A240323"
+            {
+            "SourcePath" = "8:..\\release\\libpcre.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{8D04B550-D240-4A44-8A18-35DA3F7038D9}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BCB8B09BD3BF4E5889E46049601E0973"
+            {
+            "SourcePath" = "8:..\\release\\google.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{861345DE-6846-43AD-8012-043810D0E465}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C105055EE271471A999CE7022E617EB7"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_commands.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C81AC700C1BC4A55B98DF12C0CBAFD6F"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_dialplan_xml.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{07113B25-D3AF-4E04-BA77-4CD1171F022C}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D0BB09AFB8D94B76918F0EE85BCCAD0A"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_dptools.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{B5881A85-FE70-4F64-8607-2CAAE52669C6}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D2EF447106B24E67907DAED3D39CFBB1"
+            {
+            "SourcePath" = "8:..\\release\\FreeSwitch.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E763C699DF0948B6984DDEB96A2DFD06"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_PortAudio.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{5FD31A25-5D83-4794-8BEE-904DAD84CE71}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EC68A140B58841DA9B9172BAFA5BEC63"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_exosip.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EF14CB99F3414BB689D0CB0E6D6B8AB8"
+            {
+            "SourcePath" = "8:..\\release\\mod\\mod_console.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{1C453396-D912-4213-89FD-9B489162B7B5}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+        }
+        "VJSharpPlugin"
+        {
+        }
+    }
+}

Added: freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,216 @@
+// EnBitmap.cpp: implementation of the CEnBitmap class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "EnBitmap.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[]=__FILE__;
+#define new DEBUG_NEW
+#endif
+
+const int HIMETRIC_INCH	= 2540;
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CEnBitmap::CEnBitmap()
+{
+
+}
+
+CEnBitmap::~CEnBitmap()
+{
+
+}
+
+BOOL CEnBitmap::LoadImage(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst, COLORREF crBack)
+{
+	ASSERT(m_hObject == NULL);      // only attach once, detach on destroy
+
+	if (m_hObject != NULL)
+		return FALSE;
+
+	BYTE*	pBuff = NULL;
+	int		nSize = 0;
+	BOOL bResult = FALSE;
+
+	// first call is to get buffer size
+	if (GetResource(MAKEINTRESOURCE(uIDRes), szResourceType, hInst, 0, nSize))
+	{
+		if (nSize > 0)
+		{
+			pBuff = new BYTE[nSize];
+			
+			// this loads it
+			if (GetResource(MAKEINTRESOURCE(uIDRes), szResourceType, hInst, pBuff, nSize))
+			{
+				IPicture* pPicture = LoadFromBuffer(pBuff, nSize);
+
+				if (pPicture)
+				{
+					bResult = Attach(pPicture, crBack);
+					pPicture->Release();
+				}
+			}
+			
+			delete [] pBuff;
+		}
+	}
+
+	return bResult;
+}
+
+BOOL CEnBitmap::LoadImage(LPCTSTR szImagePath, COLORREF crBack)
+{
+	ASSERT(m_hObject == NULL);      // only attach once, detach on destroy
+
+	if (m_hObject != NULL)
+		return FALSE;
+
+	BOOL bResult = FALSE;
+	CFile			cFile;
+	CFileException	e;
+	
+	if (cFile.Open(szImagePath, CFile::modeRead | CFile::typeBinary, &e))
+	{
+		int nSize = (int)cFile.GetLength();
+
+		BYTE* pBuff = new BYTE[nSize];
+		
+		if (cFile.Read(pBuff, nSize) > 0)
+		{
+			IPicture* pPicture = LoadFromBuffer(pBuff, nSize);
+			
+			if (pPicture)
+			{
+				bResult = Attach(pPicture, crBack);
+				pPicture->Release();
+			}
+		}
+		
+		delete [] pBuff;
+	}
+
+	return bResult;
+}
+
+IPicture* CEnBitmap::LoadFromBuffer(BYTE* pBuff, int nSize)
+{
+	HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize);
+	void* pData = GlobalLock(hGlobal);
+	memcpy(pData, pBuff, nSize);
+	GlobalUnlock(hGlobal);
+
+	IStream* pStream = NULL;
+	IPicture* pPicture = NULL;
+
+	if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
+	{
+		OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&pPicture);
+		pStream->Release();
+	}
+
+	return pPicture; // caller releases
+}
+
+BOOL CEnBitmap::GetResource(LPCTSTR lpName, LPCTSTR lpType, HMODULE hInst, void* pResource, int& nBufSize)
+{ 
+	HRSRC		hResInfo;
+	HANDLE		hRes;
+	LPSTR		lpRes	= NULL; 
+	bool		bResult	= FALSE;
+
+	// Find the resource
+	hResInfo = FindResource(hInst, lpName, lpType);
+
+	if (hResInfo == NULL) 
+		return false;
+
+	// Load the resource
+	hRes = LoadResource(hInst, hResInfo);
+
+	if (hRes == NULL) 
+		return false;
+
+	// Lock the resource
+	lpRes = (char*)LockResource(hRes);
+
+	if (lpRes != NULL)
+	{ 
+		if (pResource == NULL)
+		{
+			nBufSize = SizeofResource(hInst, hResInfo);
+			bResult = true;
+		}
+		else
+		{
+			if (nBufSize >= (int)SizeofResource(hInst, hResInfo))
+			{
+				memcpy(pResource, lpRes, nBufSize);
+				bResult = true;
+			}
+		} 
+
+		UnlockResource(hRes);  
+	}
+
+	// Free the resource
+	FreeResource(hRes);
+
+	return bResult;
+}
+
+BOOL CEnBitmap::Attach(IPicture* pPicture, COLORREF crBack)
+{
+	ASSERT(m_hObject == NULL);      // only attach once, detach on destroy
+
+	if (m_hObject != NULL)
+		return FALSE;
+
+	ASSERT(pPicture);
+
+	if (!pPicture)
+		return FALSE;
+
+	BOOL bResult = FALSE;
+
+	CDC dcMem;
+	CDC* pDC = CWnd::GetDesktopWindow()->GetDC();
+
+	if (dcMem.CreateCompatibleDC(pDC))
+	{
+		long hmWidth;
+		long hmHeight;
+
+		pPicture->get_Width(&hmWidth);
+		pPicture->get_Height(&hmHeight);
+		
+		int nWidth	= MulDiv(hmWidth,	pDC->GetDeviceCaps(LOGPIXELSX), HIMETRIC_INCH);
+		int nHeight	= MulDiv(hmHeight,	pDC->GetDeviceCaps(LOGPIXELSY), HIMETRIC_INCH);
+
+		CBitmap bmMem;
+
+		if (bmMem.CreateCompatibleBitmap(pDC, nWidth, nHeight))
+		{
+			CBitmap* pOldBM = dcMem.SelectObject(&bmMem);
+
+			if (crBack != -1)
+				dcMem.FillSolidRect(0, 0, nWidth, nHeight, crBack);
+			
+			HRESULT hr = pPicture->Render(dcMem, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, NULL);
+			dcMem.SelectObject(pOldBM);
+
+			if (hr == S_OK)
+				bResult = CBitmap::Attach(bmMem.Detach());
+		}
+	}
+
+	CWnd::GetDesktopWindow()->ReleaseDC(pDC);
+
+	return bResult;
+}
+

Added: freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,30 @@
+// EnBitmap.h: interface for the CEnBitmap class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_ENBITMAP_H__1FDE0A4E_8AB4_11D6_95AD_EFA89432A428__INCLUDED_)
+#define AFX_ENBITMAP_H__1FDE0A4E_8AB4_11D6_95AD_EFA89432A428__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+class CEnBitmap : public CBitmap  
+{
+public:
+	CEnBitmap();
+	virtual ~CEnBitmap();
+
+	BOOL LoadImage(LPCTSTR szImagePath, COLORREF crBack = 0);
+	BOOL LoadImage(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst = NULL, COLORREF crBack = 0); 
+
+	// helpers
+	static BOOL GetResource(LPCTSTR lpName, LPCTSTR lpType, HMODULE hInst, void* pResource, int& nBufSize);
+	static IPicture* LoadFromBuffer(BYTE* pBuff, int nSize);
+
+protected:
+	BOOL Attach(IPicture* pPicture, COLORREF crBack);
+
+};
+
+#endif // !defined(AFX_ENBITMAP_H__1FDE0A4E_8AB4_11D6_95AD_EFA89432A428__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,416 @@
+// MyBitmap.cpp: implementation of the CMyBitmap class.
+//
+//	History:
+//	2002.11.23
+//				copy from kdphoto projects
+//
+//
+//	
+//	
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "MyBitmap.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[]=__FILE__;
+#define new DEBUG_NEW
+#endif
+
+
+// TransparentBlt	- Copies a bitmap transparently onto the destination DC
+// hdcDest		- Handle to destination device context 
+// nXDest		- x-coordinate of destination rectangle's upper-left corner 
+// nYDest		- y-coordinate of destination rectangle's upper-left corner 
+// nWidth		- Width of destination rectangle 
+// nHeight		- height of destination rectangle 
+// hBitmap		- Handle of the source bitmap
+// nXSrc		- x-coordinate of source rectangle's upper-left corner 
+// nYSrc		- y-coordinate of source rectangle's upper-left corner 
+// colorTransparent	- The transparent color
+// hPal			- Logical palette to be used with bitmap. Can be NULL
+
+void MyTransparentBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, 
+					int nHeight, HBITMAP hBitmap, int nXSrc, int nYSrc,
+					COLORREF colorTransparent, HPALETTE hPal )
+{
+	CDC dc, memDC, maskDC, tempDC;
+	dc.Attach( hdcDest );
+	maskDC.CreateCompatibleDC(&dc);
+	CBitmap maskBitmap;
+	
+	//add these to store return of SelectObject() calls
+	CBitmap* pOldMemBmp = NULL;
+	CBitmap* pOldMaskBmp = NULL;
+	HBITMAP hOldTempBmp = NULL;
+	
+	memDC.CreateCompatibleDC(&dc);
+	tempDC.CreateCompatibleDC(&dc);
+	CBitmap bmpImage;
+	bmpImage.CreateCompatibleBitmap( &dc, nWidth, nHeight );
+	pOldMemBmp = memDC.SelectObject( &bmpImage );
+	
+	// Select and realize the palette
+	if( dc.GetDeviceCaps(RASTERCAPS) & RC_PALETTE && hPal )
+	{
+		::SelectPalette( dc, hPal, FALSE );
+		dc.RealizePalette();
+		
+		::SelectPalette( memDC, hPal, FALSE );
+	}
+	
+	hOldTempBmp = (HBITMAP) ::SelectObject( tempDC.m_hDC, hBitmap );
+	
+	memDC.BitBlt( 0,0,nWidth, nHeight, &tempDC, nXSrc, nYSrc, SRCCOPY );
+	
+	// Create monochrome bitmap for the mask
+	maskBitmap.CreateBitmap( nWidth, nHeight, 1, 1, NULL );
+	pOldMaskBmp = maskDC.SelectObject( &maskBitmap );
+	memDC.SetBkColor( colorTransparent );
+	
+	// Create the mask from the memory DC
+	maskDC.BitBlt( 0, 0, nWidth, nHeight, &memDC, 
+		0, 0, SRCCOPY );
+	
+	// Set the background in memDC to black. Using SRCPAINT with black 
+	// and any other color results in the other color, thus making 
+	// black the transparent color
+	memDC.SetBkColor(RGB(0,0,0));
+	memDC.SetTextColor(RGB(255,255,255));
+	memDC.BitBlt(0, 0, nWidth, nHeight, &maskDC, 0, 0, SRCAND);
+	
+	// Set the foreground to black. See comment above.
+	dc.SetBkColor(RGB(255,255,255));
+	dc.SetTextColor(RGB(0,0,0));
+	dc.BitBlt(nXDest, nYDest, nWidth, nHeight, &maskDC, 0, 0, SRCAND);
+	
+	// Combine the foreground with the background
+	dc.BitBlt(nXDest, nYDest, nWidth, nHeight, &memDC, 
+		0, 0, SRCPAINT);
+	
+	
+	if (hOldTempBmp)
+		::SelectObject( tempDC.m_hDC, hOldTempBmp);
+	if (pOldMaskBmp)
+		maskDC.SelectObject( pOldMaskBmp );
+	if (pOldMemBmp)
+		memDC.SelectObject( pOldMemBmp );
+	
+	dc.Detach();
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CMyBitmap::CMyBitmap()
+{
+
+}
+
+CMyBitmap::~CMyBitmap()
+{
+
+}
+
+BOOL CMyBitmap::StretchDraw(CDC *pDC, LPRECT r, LPRECT sr )
+{
+	if ( !r ) return FALSE;
+	CDC dc;
+	dc.CreateCompatibleDC( pDC );
+	CBitmap * bmp = dc.SelectObject( this );
+	pDC->SetStretchBltMode(COLORONCOLOR);
+	if ( !sr )
+		pDC->StretchBlt( r->left, r->top, r->right, r->bottom, &dc, 0, 0, GetWidth(), GetHeight() ,
+			SRCCOPY );
+	else
+		pDC->StretchBlt( r->left, r->top, r->right - r->left, r->bottom - r->top, &dc, sr->left, sr->top, 
+		sr->right - sr->left, sr->bottom - sr->top,
+			SRCCOPY );
+
+	
+	dc.SelectObject( bmp );	
+	return TRUE;	
+
+}
+
+BOOL CMyBitmap::StretchDraw(CDC *pDC, LPRECT r)
+{
+	CDC dc;
+	dc.CreateCompatibleDC( pDC );
+	CBitmap * bmp = dc.SelectObject( this );
+	
+	pDC->StretchBlt( r->left, r->top, r->right, r->bottom, &dc, 0, 0, GetWidth(), GetHeight() ,
+		SRCCOPY );
+	
+	dc.SelectObject( bmp );	
+	return TRUE;	
+}
+
+BOOL CMyBitmap::Draw( CDC *pDC, int x, int y, LPRECT sr, COLORREF colTrans, BOOL bTrans )
+{
+	if ( !bTrans )
+		Draw( pDC ,x, y, sr );
+	else
+	{
+		MyTransparentBlt( pDC->GetSafeHdc(), x, y, sr->right - sr->left, sr->bottom - sr->top, 
+			(HBITMAP)this->GetSafeHandle(), sr->left, sr->top, colTrans, NULL );
+	}
+	return TRUE;
+}
+
+//draw sub bmp to special point
+BOOL CMyBitmap::Draw( CDC *pDC, int x, int y, LPRECT sr )
+{
+	CDC dc;
+	dc.CreateCompatibleDC( pDC );
+	CBitmap * bmp = dc.SelectObject( this );	
+	if ( sr != NULL)
+		pDC->BitBlt( x, y, sr->right - sr->left, sr->bottom - sr->top, &dc, 
+			sr->left, sr->top,  SRCCOPY );
+	else
+		pDC->BitBlt( x, y, Width(), Height(), &dc, 
+			0, 0,  SRCCOPY );
+	dc.SelectObject( bmp );		
+	return TRUE;
+
+}
+
+BOOL CMyBitmap::Draw(CDC *pDC, LPRECT r)
+{
+	CDC dc;
+	dc.CreateCompatibleDC( pDC );
+	CBitmap * bmp = dc.SelectObject( this );	
+	pDC->BitBlt( r->left, r->top, r->right - r->left, r->bottom - r->top, &dc, 0, 0 ,
+		  SRCCOPY );
+
+	dc.SelectObject( bmp );		
+	return TRUE;
+}
+
+
+///HOWTO: Drawing Transparent Bitmaps
+//see: Microsoft Knowledge Base Article - Q79212
+BOOL CMyBitmap::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour)
+{
+	MyTransparentBlt( pDC->GetSafeHdc(), x, y, GetWidth(), GetHeight(), (HBITMAP)this->GetSafeHandle(), 0, 0, crColour, NULL );
+/*
+	COLORREF crOldBack = pDC->SetBkColor(0);
+	COLORREF crOldText = pDC->SetTextColor(RGB(255,255,255));
+	CDC dcImage, dcTrans;
+	
+	// Create two memory dcs for the image and the mask
+	dcImage.CreateCompatibleDC(pDC);
+	dcTrans.CreateCompatibleDC(pDC);
+	
+	// Select the image into the appropriate dc
+	CBitmap* pOldBitmapImage = dcImage.SelectObject(this);
+	
+	// Create the mask bitmap
+	CBitmap bitmapTrans;
+	int nWidth = GetWidth();
+	int nHeight = GetHeight();
+	bitmapTrans.CreateBitmap(nWidth, nHeight, 1, 1, NULL);
+	
+	// Select the mask bitmap into the appropriate dc
+	CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);
+	
+	// Build mask based on transparent colour
+	dcImage.SetBkColor(crColour);
+	dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);
+	
+	// Do the work - True Mask method - cool if not actual display
+	pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
+	pDC->BitBlt(x, y, nWidth, nHeight, &dcTrans, 0, 0, SRCAND);
+	pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
+	
+	// Restore settings
+	dcImage.SelectObject(pOldBitmapImage);
+	dcTrans.SelectObject(pOldBitmapTrans);
+	pDC->SetBkColor(crOldBack);
+	pDC->SetTextColor(crOldText);
+*/
+	return TRUE;
+}	
+
+
+HRGN CMyBitmap::CreateRgnFromFile( COLORREF color )
+{
+	HBITMAP hBmp = (HBITMAP)this->GetSafeHandle();
+
+	// get image properties
+	BITMAP bmp = { 0 };
+	::GetObject( hBmp, sizeof(BITMAP), &bmp );
+	// allocate memory for extended image information
+	LPBITMAPINFO bi = (LPBITMAPINFO) new BYTE[ sizeof(BITMAPINFO) + 8 ];
+	memset( bi, 0, sizeof(BITMAPINFO) + 8 );
+	bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+	// create temporary dc
+	HDC dc = CreateIC( _T("DISPLAY"),NULL,NULL,NULL );
+	// get extended information about image (length, compression, length of color table if exist, ...)
+	DWORD res = GetDIBits( dc, hBmp, 0, bmp.bmHeight, 0, bi, DIB_RGB_COLORS );
+	// allocate memory for image data (colors)
+	LPBYTE pBits = new BYTE[ bi->bmiHeader.biSizeImage + 4 ];
+	// allocate memory for color table
+	if ( bi->bmiHeader.biBitCount == 8 )
+	{
+		// actually color table should be appended to this header(BITMAPINFO),
+		// so we have to reallocate and copy it
+		LPBITMAPINFO old_bi = bi;
+		// 255 - because there is one in BITMAPINFOHEADER
+		bi = (LPBITMAPINFO)new char[ sizeof(BITMAPINFO) + 255 * sizeof(RGBQUAD) ];
+		memcpy( bi, old_bi, sizeof(BITMAPINFO) );
+		// release old header
+		delete old_bi;
+	}
+	// get bitmap info header
+	BITMAPINFOHEADER& bih = bi->bmiHeader;
+	// get color table (for 256 color mode contains 256 entries of RGBQUAD(=DWORD))
+	LPDWORD clr_tbl = (LPDWORD)&bi->bmiColors;
+	// fill bits buffer
+	res = GetDIBits( dc, hBmp, 0, bih.biHeight, pBits, bi, DIB_RGB_COLORS );
+	DeleteDC( dc );
+
+	BITMAP bm;
+	::GetObject( hBmp, sizeof(BITMAP), &bm );
+	// shift bits and byte per pixel (for comparing colors)
+	LPBYTE pClr = (LPBYTE)&color;
+	// swap red and blue components
+	BYTE tmp = pClr[0]; pClr[0] = pClr[2]; pClr[2] = tmp;
+	// convert color if curent DC is 16-bit (5:6:5) or 15-bit (5:5:5)
+	if ( bih.biBitCount == 16 )
+	{
+		// for 16 bit
+		color = ((DWORD)(pClr[0] & 0xf8) >> 3) |
+				((DWORD)(pClr[1] & 0xfc) << 3) |
+				((DWORD)(pClr[2] & 0xf8) << 8);
+		// for 15 bit
+//		color = ((DWORD)(pClr[0] & 0xf8) >> 3) |
+//				((DWORD)(pClr[1] & 0xf8) << 2) |
+//				((DWORD)(pClr[2] & 0xf8) << 7);
+	}
+
+	const DWORD RGNDATAHEADER_SIZE	= sizeof(RGNDATAHEADER);
+	const DWORD ADD_RECTS_COUNT		= 40;			// number of rects to be appended
+													// to region data buffer
+
+	// BitPerPixel
+	BYTE	Bpp = (BYTE)(bih.biBitCount >> 3);				// bytes per pixel
+	// bytes per line in pBits is DWORD aligned and bmp.bmWidthBytes is WORD aligned
+	// so, both of them not
+	DWORD m_dwAlignedWidthBytes = (bmp.bmWidthBytes & ~0x3) + (!!(bmp.bmWidthBytes & 0x3) << 2);
+	// DIB image is flipped that's why we scan it from the last line
+	LPBYTE	pColor = pBits + (bih.biHeight - 1) * m_dwAlignedWidthBytes;
+	DWORD	dwLineBackLen = m_dwAlignedWidthBytes + bih.biWidth * Bpp;	// offset of previous scan line
+													// (after processing of current)
+	DWORD	dwRectsCount = bih.biHeight;			// number of rects in allocated buffer
+	INT		i, j;									// current position in mask image
+	INT		first = 0;								// left position of current scan line
+													// where mask was found
+	bool	wasfirst = false;						// set when mask has been found in current scan line
+	bool	ismask = false;									// set when current color is mask color
+
+	// allocate memory for region data
+	// region data here is set of regions that are rectangles with height 1 pixel (scan line)
+	// that's why first allocation is <bm.biHeight> RECTs - number of scan lines in image
+	RGNDATAHEADER* pRgnData = 
+		(RGNDATAHEADER*)new BYTE[ RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) ];
+	// get pointer to RECT table
+	LPRECT pRects = (LPRECT)((LPBYTE)pRgnData + RGNDATAHEADER_SIZE);
+	// zero region data header memory (header  part only)
+	memset( pRgnData, 0, RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) );
+	// fill it by default
+	pRgnData->dwSize	= RGNDATAHEADER_SIZE;
+	pRgnData->iType		= RDH_RECTANGLES;
+
+	for ( i = 0; i < bih.biHeight; i++ )
+	{
+		for ( j = 0; j < bih.biWidth; j++ )
+		{
+			// get color
+			switch ( bih.biBitCount )
+			{
+			case 8:
+				ismask = (clr_tbl[ *pColor ] != color);
+				break;
+			case 16:
+				ismask = (*(LPWORD)pColor != (WORD)color);
+				break;
+			case 24:
+				ismask = ((*(LPDWORD)pColor & 0x00ffffff) != color);
+				break;
+			case 32:
+				ismask = (*(LPDWORD)pColor != color);
+			}
+			// shift pointer to next color
+			pColor += Bpp;
+			// place part of scan line as RECT region if transparent color found after mask color or
+			// mask color found at the end of mask image
+			if ( wasfirst )
+			{
+				if ( !ismask )
+				{
+					// save current RECT
+					pRects[ pRgnData->nCount++ ] = CRect( first, i, j, i + 1 );
+					// if buffer full reallocate it with more room
+					if ( pRgnData->nCount >= dwRectsCount )
+					{
+						dwRectsCount += ADD_RECTS_COUNT;
+						// allocate new buffer
+						LPBYTE pRgnDataNew = new BYTE[ RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) ];
+						// copy current region data to it
+						memcpy( pRgnDataNew, pRgnData, RGNDATAHEADER_SIZE + pRgnData->nCount * sizeof(RECT) );
+						// delte old region data buffer
+						delete pRgnData;
+						// set pointer to new regiondata buffer to current
+						pRgnData = (RGNDATAHEADER*)pRgnDataNew;
+						// correct pointer to RECT table
+						pRects = (LPRECT)((LPBYTE)pRgnData + RGNDATAHEADER_SIZE);
+					}
+					wasfirst = false;
+				}
+			}
+			else if ( ismask )		// set wasfirst when mask is found
+			{
+				first = j;
+				wasfirst = true;
+			}
+		}
+
+		if ( wasfirst && ismask )
+		{
+			// save current RECT
+			pRects[ pRgnData->nCount++ ] = CRect( first, i, j, i + 1 );
+			// if buffer full reallocate it with more room
+			if ( pRgnData->nCount >= dwRectsCount )
+			{
+				dwRectsCount += ADD_RECTS_COUNT;
+				// allocate new buffer
+				LPBYTE pRgnDataNew = new BYTE[ RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) ];
+				// copy current region data to it
+				memcpy( pRgnDataNew, pRgnData, RGNDATAHEADER_SIZE + pRgnData->nCount * sizeof(RECT) );
+				// delte old region data buffer
+				delete pRgnData;
+				// set pointer to new regiondata buffer to current
+				pRgnData = (RGNDATAHEADER*)pRgnDataNew;
+				// correct pointer to RECT table
+				pRects = (LPRECT)((LPBYTE)pRgnData + RGNDATAHEADER_SIZE);
+			}
+			wasfirst = false;
+		}
+
+		pColor -= dwLineBackLen;
+	}
+	// release image data
+	delete pBits;
+	delete bi;
+
+	// create region
+	HRGN hRgn = ExtCreateRegion( NULL, RGNDATAHEADER_SIZE + pRgnData->nCount * sizeof(RECT), (LPRGNDATA)pRgnData );
+	// release region data
+	delete pRgnData;
+
+	return hRgn;
+}

Added: freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,90 @@
+// MyBitmap.h: interface for the CMyBitmap class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_MYBITMAP_H__73EF928E_90A7_461A_B879_7E3007684679__INCLUDED_)
+#define AFX_MYBITMAP_H__73EF928E_90A7_461A_B879_7E3007684679__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+//#include "include\Picture.h"
+#include "EnBitmap.h"
+
+class CMyBitmap : public CEnBitmap  
+{
+public:
+	BOOL Draw( CDC *pDC, LPRECT r);
+	//draw sub bmp to special point
+	BOOL Draw( CDC *pDC, int x, int y, LPRECT sr );
+	BOOL Draw( CDC *pDC, int x, int y, LPRECT sr, COLORREF colTrans, BOOL bTrans );
+
+	BOOL StretchDraw(CDC *pDC, LPRECT tr, LPRECT sr );
+	BOOL StretchDraw(CDC *pDC, LPRECT r);
+
+	int	 Width()
+	{
+		return GetWidth();
+	}
+		
+	int	 GetWidth()
+	{
+		BITMAP bm;
+		memset( &bm, 0, sizeof(bm) );
+		GetBitmap(&bm);
+		return bm.bmWidth;
+	}
+
+	int	 Height()
+	{
+		return GetHeight();
+	}
+	
+	int	 GetHeight()
+	{
+		BITMAP bm;
+		memset( &bm, 0, sizeof(bm) );
+		GetBitmap(&bm);
+		return bm.bmHeight;
+	}
+	
+	CMyBitmap();
+	virtual ~CMyBitmap();
+
+
+	BOOL Attach( HBITMAP hbmp )
+	{
+		return CBitmap::Attach( hbmp );
+	}
+
+/*		
+		HBITMAP hBitmap = NULL; 
+		hBitmap = (HBITMAP)LoadImage(NULL, szFilename, IMAGE_BITMAP, 0, 0, 
+			LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); 
+*/
+
+	BOOL LoadBitmap(LPCTSTR szFilename) 
+	{ 
+		ASSERT(szFilename);
+		DeleteObject();
+
+		/*
+		CClientDC dc(NULL);
+		CPicture pic;
+		if ( !pic.LoadPicture( szFilename ) )
+			return FALSE;
+		HBITMAP hBitmap = pic.CreateDDB(&dc);
+		pic.DeleteObject();
+
+		return Attach(hBitmap); 
+		*/
+		return LoadImage( szFilename );
+	}
+
+	BOOL DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour);	
+
+	HRGN CreateRgnFromFile( COLORREF color );
+};
+
+#endif // !defined(AFX_MYBITMAP_H__73EF928E_90A7_461A_B879_7E3007684679__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/SkinWin/SkinWin.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/SkinWin.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,1169 @@
+#include "stdafx.h"
+#include "resource.h"
+#include "SkinWin.h"
+#include "google.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[]=__FILE__;
+#define new DEBUG_NEW
+#endif
+
+#define UM_NOTIFY WM_USER+1000
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CSkinWin::CSkinWin()
+{
+	m_bInit = FALSE;
+	m_winstate = 0;
+
+	m_barcolor = RGB(207,207,207);
+	m_menucolor = RGB(207,207,207);
+
+	m_iconFlag = FALSE;
+	m_displayFlag = TRUE;
+		m_rectParent.bottom=0;
+		m_rectParent.right = 0;
+		m_bClose = FALSE;
+}
+
+CSkinWin::~CSkinWin()
+{
+
+}
+
+CString GetPathName( const TCHAR * filename );
+CString GetFileName( const TCHAR * filename, int ext = 0);
+TCHAR *next_token( TCHAR *buf, TCHAR *token, TCHAR *stopchars );
+
+COLORREF ReadColor( CString section, CString key, CString file, COLORREF defcolor )
+{
+	TCHAR buf[1000];
+	GetPrivateProfileString( section, key, _T(""), buf, 1000, file );
+	if ( *buf )
+	{
+		TCHAR token[255];
+		TCHAR *p = buf;
+		int r, g, b;
+		p = next_token( p, token, NULL );
+		sscanf_s(token,_T("%d"),&r);
+		//r = atoi(token);
+		p = next_token( p, token, NULL );
+		sscanf_s(token,_T("%d"),&g);
+		//g = atoi(token);
+		p = next_token( p, token, NULL );
+		sscanf_s(token,_T("%d"),&b);
+		//b = atoi(token);
+		return RGB(r, g, b );			
+	}
+	else
+		return defcolor;
+}
+
+BOOL CSkinWin::LoadSkin( const TCHAR * skinfile )
+{
+	static const TCHAR * ps = _T("Personality");
+	TCHAR buf[1000];
+	CString path = GetPathName( skinfile );
+	
+	if ( m_bInit )
+	{
+		m_bmpDlg.DeleteObject();
+		m_bmpTitle.DeleteObject();
+		m_bmpLeft.DeleteObject();
+		m_bmpRight.DeleteObject();
+		m_bmpBottom.DeleteObject();
+		m_bmpMaxBtn.DeleteObject();
+		m_bmpRestoreBtn.DeleteObject();
+		m_bmpMinBtn.DeleteObject();
+		m_bmpCloseBtn.DeleteObject();
+
+		//set deafult
+		m_barcolor = RGB(207,207,207);
+		m_menucolor = RGB(207,207,207);
+
+		m_bInit = FALSE;
+	}
+
+	GetPrivateProfileString( ps, _T("DialogBmp"), _T(""), buf, 1000, skinfile );
+	if ( *buf != 0 )
+		m_bmpDlg.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 ));
+		
+
+	GetPrivateProfileString( ps, _T("Top"), _T(""), buf, 1000, skinfile );
+	if ( *buf == 0 || !m_bmpTitle.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) )
+		return FALSE;
+	GetPrivateProfileString( ps, _T("Left"), _T(""), buf, 1000, skinfile );
+	if ( *buf == 0 || !m_bmpLeft.LoadBitmap( path +_T( "/" )+ GetFileName( buf,1 ) )) 
+		return FALSE;
+	GetPrivateProfileString( ps, _T("Right"), _T(""), buf, 1000, skinfile );
+	if ( *buf == 0 || !m_bmpRight.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 ) )) 
+		return FALSE;
+	GetPrivateProfileString( ps, _T("Bottom"), _T(""), buf, 1000, skinfile );
+	if ( *buf == 0 || !m_bmpBottom.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 ) )) 
+		return FALSE;
+
+	m_TitleHeight = m_bmpTitle.Height()/2;
+	m_BorderLeftWidth = m_bmpLeft.Width()/2;
+	m_BorderRightWidth = m_bmpRight.Width()/2;
+	m_BorderBottomHeight = m_bmpBottom.Height()/2;
+
+	m_titleoff1 = GetPrivateProfileInt( ps, _T("TopTopHeight"), 0, skinfile );
+	m_titleoff2 = m_bmpTitle.Width() - GetPrivateProfileInt( ps, _T("TopBotHeight"), 0, skinfile );
+	if ( m_titleoff2 <= m_titleoff1 )
+		m_titleoff2 = m_titleoff1 + 1;
+	m_leftoff1 = GetPrivateProfileInt( ps, _T("LeftTopHeight"), 0, skinfile );
+	m_leftoff2 = m_bmpLeft.Height() - GetPrivateProfileInt( ps, _T("LeftBotHeight"), 0, skinfile );
+	if ( m_leftoff2 <= m_leftoff1 )
+		m_leftoff2 = m_leftoff1 + 1;
+
+	m_rightoff1 = GetPrivateProfileInt( ps, _T("RightTopHeight"), 0, skinfile );
+	m_rightoff2 = m_bmpRight.Height() - GetPrivateProfileInt( ps, _T("RightBotHeight"), 0, skinfile );
+	if ( m_rightoff2 <= m_rightoff1 )
+		m_rightoff2 = m_rightoff1 + 1;
+
+	m_bottomoff1 = GetPrivateProfileInt( ps, _T("BottomTopHeight"), 0, skinfile );
+	m_bottomoff2 = m_bmpBottom.Width() - GetPrivateProfileInt( ps, _T("BottomBotHeight"), 0, skinfile );
+	if ( m_bottomoff2 <= m_bottomoff1 )
+		m_bottomoff2 = m_bottomoff1 + 1;
+
+	//load buttons
+	int count = GetPrivateProfileInt( ps, _T("ButtonCount"), 0, skinfile );
+	int icount = GetPrivateProfileInt( ps, _T("ButtonImgCount"), 3, skinfile );
+	for ( int i = 0; i < count; i++ )
+	{
+		CString sec;
+		sec.Format( _T("Button%d"), i );
+		GetPrivateProfileString( sec, _T("ButtonImage"), _T(""), buf, 1000, skinfile );
+		int action = GetPrivateProfileInt( sec, _T("Action"), 0,  skinfile );
+		int x = GetPrivateProfileInt( sec, _T("XCoord"), 0, skinfile );
+		int y = GetPrivateProfileInt( sec, _T("YCoord"), 0, skinfile );
+
+		int state = icount;
+		if ( action == 0 )
+		{
+			//close
+			if ( !m_bmpCloseBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) 
+				return FALSE;
+			//state = m_bmpCloseBtn.Width()/m_bmpCloseBtn.Height();
+			m_rectCloseBtn = CRect( (x-m_bmpCloseBtn.Width()/state)-8, y, x-8 , y + m_bmpCloseBtn.Height() );
+		}
+		if ( action == 2 )
+		{
+			//min
+			if ( !m_bmpMinBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) 
+				return FALSE;
+			//state = m_bmpMinBtn.Width()/m_bmpMinBtn.Height();
+			m_rectMinBtn = CRect( (x-m_bmpMinBtn.Width()/state)-40, y, x-40, y + m_bmpMinBtn.Height() );
+		}
+		if ( action == 1 )
+		{			
+			if ( !m_bmpMaxBtn.GetSafeHandle() )
+			{
+				//max
+				if ( !m_bmpMaxBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) 
+					return FALSE;
+				//state = m_bmpMaxBtn.Width()/m_bmpMaxBtn.Height();
+				m_rectMaxBtn = CRect( x-m_bmpMaxBtn.Width()/state, y, x , y + m_bmpMaxBtn.Height() );
+			}
+			else
+			{
+				//restore
+				if ( !m_bmpRestoreBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) 
+					return FALSE;
+				//state = m_bmpRestoreBtn.Width()/m_bmpRestoreBtn.Height();
+				m_rectRestoreBtn = CRect( x-m_bmpRestoreBtn.Width()/state, y, x , y + m_bmpRestoreBtn.Height() );
+			}
+		}
+		if ( action == 4 )
+		{
+		}
+	}
+	m_textShift = GetPrivateProfileInt( ps, _T("TextShift"), 0, skinfile );
+	m_textShiftVer = GetPrivateProfileInt( ps, _T("TextShiftVert"), 0, skinfile );
+
+	TCHAR * colours = _T("Colours");
+	m_colTitle1 = ReadColor(colours, _T("TitleText"), skinfile, GetSysColor(COLOR_CAPTIONTEXT) );
+	m_colTitle2 = ReadColor(colours, _T("InactiveTitleText"), skinfile, GetSysColor(COLOR_CAPTIONTEXT) );
+	
+	m_bTrans = GetPrivateProfileInt( ps, _T("UsesTran"), 0, skinfile );
+	if ( m_bTrans )
+		m_colTrans = ReadColor(colours, _T("TransColor"), skinfile, RGB(255,0,255) );
+
+
+	m_barcolor = ReadColor(colours, _T("BarColor"), skinfile, RGB(207,207,207) );
+	m_menucolor = ReadColor(colours, _T("MenuColor"), skinfile, RGB(207,207,207) );
+
+	m_btnbgcolor = ReadColor(colours, _T("ButtonFace"), skinfile, GetSysColor(COLOR_BTNFACE) );
+	m_btntextcolor = ReadColor(colours, _T("ButtonText"), skinfile, GetSysColor(COLOR_BTNTEXT));
+	m_btnhovercolor = ReadColor(colours, _T("ButtonHilight"), skinfile, GetSysColor(COLOR_BTNFACE) );
+	m_btnfocuscolor = ReadColor(colours, _T("ButtonFocus"), skinfile, GetSysColor(COLOR_BTNFACE) );
+	
+
+	m_bInit = TRUE;
+	return TRUE;
+}
+
+BOOL CSkinWin::DrawTitle(CDC *pDC, int x, int y, int w, int state)
+{
+	int padding; 
+	int ox = x;
+	padding = ( w - m_bmpTitle.Width() )/( m_titleoff2 - m_titleoff1 ) + 1 ;
+	if ( padding < 0 ) padding = 0;
+
+	RECT sr;
+	if ( state == 0 )
+		sr = CRect( 0, 0, m_titleoff1, m_TitleHeight );
+	else
+		sr = CRect( 0, m_TitleHeight, m_titleoff1, m_bmpTitle.Height()  );	
+	m_bmpTitle.Draw( pDC, x, y, &sr );
+	 
+	x += m_titleoff1;
+	if ( state == 0 )
+		sr = CRect(  m_titleoff1, 0, m_titleoff2, m_TitleHeight );
+	else
+		sr = CRect(  m_titleoff1, m_TitleHeight, m_titleoff2, m_bmpTitle.Height()  );	
+
+	for ( int i = 0; i <= padding; i++, x += m_titleoff2 - m_titleoff1 )
+	{
+		int d = ( x + m_titleoff2 - m_titleoff1 - ox - w);
+		if ( d > 0 )
+			sr.right = sr.right - d;
+		m_bmpTitle.Draw( pDC, x, y, &sr );
+	}
+
+	x = ox + w - ( m_bmpTitle.Width() - m_titleoff2 ) + 1 ;
+	if ( state == 0 )
+		sr = CRect(  m_titleoff2, 0, m_bmpTitle.Width()-1, m_TitleHeight);
+	else
+		sr = CRect(  m_titleoff2, m_TitleHeight, m_bmpTitle.Width()-1, m_bmpTitle.Height()  );	
+	m_bmpTitle.Draw( pDC, x, y, &sr );
+	return TRUE;
+}
+
+BOOL CSkinWin::DrawBottom(CDC *pDC, int x, int y, int w, int state)
+{
+	int padding; 
+	int ox = x;
+	padding = ( w - m_bmpBottom.Width() )/( m_bottomoff2 - m_bottomoff1 ) + 1 ;
+	if ( padding < 0 ) padding = 0;
+
+	RECT sr;
+	if ( state == 0 )
+		sr = CRect( 0, 0, m_bottomoff1, m_BorderBottomHeight);
+	else
+		sr = CRect( 0, m_BorderBottomHeight, m_bottomoff1, m_bmpBottom.Height()  );	
+	m_bmpBottom.Draw( pDC, x, y, &sr );
+	
+	x += m_bottomoff1;
+	if ( state == 0 )
+		sr = CRect(  m_bottomoff1, 0, m_bottomoff2, m_BorderBottomHeight );
+	else
+		sr = CRect(  m_bottomoff1, m_BorderBottomHeight, m_bottomoff2, m_bmpBottom.Height() );	
+
+	for ( int i = 0; i <= padding; i++, x += m_bottomoff2 - m_bottomoff1 )
+	{
+		int d = ( x + m_bottomoff2 - m_bottomoff1 - ox - w);
+		if ( d > 0 )
+			sr.right = sr.right - d;
+		m_bmpBottom.Draw( pDC, x, y, &sr );
+	}
+
+	x = ox + w - ( m_bmpBottom.Width() - m_bottomoff2 );
+	if ( state == 0 )
+		sr = CRect(  m_bottomoff2, 0, m_bmpBottom.Width()-1, m_BorderBottomHeight );
+	else
+		sr = CRect(  m_bottomoff2, m_BorderBottomHeight, m_bmpBottom.Width()-1, m_bmpBottom.Height()  );	
+	m_bmpBottom.Draw( pDC, x, y, &sr );
+	return TRUE;
+}
+
+BOOL CSkinWin::DrawLeft(CDC *pDC, int x, int y, int h, int state)
+{
+	int padding; 
+	int oy = y;
+	padding = ( h - m_bmpLeft.Height() )/( m_leftoff2 - m_leftoff1 ) + 1 ;
+	if ( padding < 0 ) padding = 0;
+
+	RECT sr;
+	if ( state == 0 )
+		sr = CRect( 0, 0, m_BorderLeftWidth, m_leftoff1 );
+	else
+		sr = CRect( m_BorderLeftWidth, 0, m_bmpLeft.Width(), m_leftoff1  );	
+	m_bmpLeft.Draw( pDC, x, y, &sr );
+	
+	y += m_leftoff1;
+	if ( state == 0 )
+		sr = CRect(  0, m_leftoff1,  m_BorderLeftWidth, m_leftoff2 );
+	else
+		sr = CRect(  m_BorderLeftWidth, m_leftoff1, m_bmpLeft.Width(), m_leftoff2 );	
+
+	for ( int i = 0; i <= padding; i++, y += m_leftoff2 - m_leftoff1 )
+	{
+		int d = ( y + m_leftoff2 - m_leftoff1 - oy - h);
+		if ( d > 0 )
+			sr.bottom = sr.bottom - d;
+		m_bmpLeft.Draw( pDC, x, y, &sr );
+	}
+
+	y = oy + h - ( m_bmpLeft.Height() - m_leftoff2 ) ;
+	if ( state == 0 )
+		sr = CRect(  0, m_leftoff2, m_BorderLeftWidth, m_bmpLeft.Height());
+	else
+		sr = CRect(  m_BorderLeftWidth, m_leftoff2,  m_bmpLeft.Width(), m_bmpLeft.Height()  );	
+	m_bmpLeft.Draw( pDC, x, y, &sr );
+
+	return TRUE;
+}
+
+BOOL CSkinWin::DrawRight(CDC *pDC, int x, int y, int h, int state)
+{
+	int padding; 
+	int oy = y;
+	padding = ( h - m_bmpRight.Height() )/( m_rightoff2 - m_rightoff1 ) + 1 ;
+	if ( padding < 0 ) padding = 0;
+
+	RECT sr;
+	if ( state == 0 )
+		sr = CRect( 0, 0, m_BorderRightWidth, m_rightoff1 );
+	else
+		sr = CRect( m_BorderRightWidth, 0, m_bmpRight.Width(), m_rightoff1  );	
+	m_bmpRight.Draw( pDC, x, y, &sr );
+	
+	y += m_rightoff1;
+	if ( state == 0 )
+		sr = CRect(  0, m_rightoff1,  m_BorderRightWidth, m_rightoff2 );
+	else
+		sr = CRect(  m_BorderRightWidth, m_rightoff1, m_bmpRight.Width(), m_rightoff2 );	
+
+	for ( int i = 0; i <= padding; i++, y += m_rightoff2 - m_rightoff1 )
+	{
+		int d = ( y + m_rightoff2 - m_rightoff1 - oy - h);
+		if ( d > 0 )
+			sr.bottom = sr.bottom - d;
+		m_bmpRight.Draw( pDC, x, y, &sr );
+	}
+
+	y = oy + h - ( m_bmpRight.Height() - m_rightoff2 ) ;
+	if ( state == 0 )
+		sr = CRect(  0, m_rightoff2, m_BorderRightWidth, m_bmpRight.Height());
+	else
+		sr = CRect(  m_BorderRightWidth, m_rightoff2,  m_bmpRight.Width(), m_bmpRight.Height()  );	
+	m_bmpRight.Draw( pDC, x, y, &sr );
+
+	return TRUE;
+
+}
+
+BOOL CSkinWin::DrawFrame(CDC *pDC, int x, int y, int w, int h, int state, int title )
+{
+	if ( title )
+		DrawTitle( pDC, x + m_BorderLeftWidth , y, 
+   			w - m_BorderRightWidth - m_BorderLeftWidth + 1, state );
+	DrawLeft( pDC, x, y, h, state );
+	DrawRight( pDC, x + w - m_BorderRightWidth , y, h, state );
+	DrawBottom( pDC, x + m_BorderLeftWidth, 
+		y + h - m_BorderBottomHeight, w - m_BorderRightWidth - m_BorderLeftWidth, state );
+	return TRUE;
+
+}
+
+BOOL CSkinWin::InstallSkin(CWnd *wnd)
+{
+	if ( !wnd  || !m_bInit ) return FALSE;
+	HookWindow( (HWND)NULL);
+	int r = HookWindow( wnd );
+
+	DWORD style = GetWindowLong( m_hWnd, GWL_STYLE );
+	m_sizable = style & WS_SIZEBOX;
+	m_minable = style & WS_MINIMIZEBOX;
+	m_maxable = style & WS_MAXIMIZEBOX;
+	//m_sysmenu = style & WS_MAXIMIZEBOX;
+	style &= ~(WS_MINIMIZEBOX);
+	style &= ~WS_MAXIMIZEBOX;
+	//style &= ~WS_SYSMENU;
+	SetWindowLong( m_hWnd, GWL_STYLE, style );
+	AddTaskIcon();
+	m_iconFlag = TRUE;
+	return r;
+}
+
+LRESULT CSkinWin::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
+{
+	if ( !IsWindow(m_hWnd) )
+		return 0;
+	if ( !m_bInit  ) 
+		return Default();
+		
+	switch ( msg )
+	{
+	case UM_GOOGLE_NOTIFY:
+	case UM_NOTIFY:	
+		if(lp == WM_LBUTTONDOWN)
+		{
+				ShowWindow(m_hWnd,SW_SHOWNORMAL);
+				SetWindowPos(m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE   |SWP_NOSIZE );
+				m_displayFlag = TRUE;
+		}
+		else if(lp == WM_RBUTTONDOWN)
+		{
+			CPoint pt;
+			GetCursorPos(&pt);
+			popMenu.TrackPopupMenu(0,pt.x,pt.y,CWnd::FromHandle( m_hWnd)); 
+			
+		}
+		break;
+	case WM_SHOWWINDOW:
+		//call setwindowpos to force OnNcCalcSize when hWnd is a dialog
+		if ( wp )
+			SetWindowPos( m_hWnd, 0, 0, 0, 400, 400, SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED );
+		Default();
+		return 0;
+		break;
+	//case WM_ERASEBKGND:
+	case WM_INITMENUPOPUP:
+		Default();
+		return 0;
+	case WM_DESTROY:
+	case WM_NCDESTROY:
+		DeleteTaskIcon();
+		Default();
+		break;
+	case WM_SYSCOMMAND:
+		OnSysCommand( (UINT)wp, lp );
+		//Default();
+		return 0;
+	case WM_SETTEXT:
+		return OnSetText( wp, lp );
+	case WM_NCPAINT:
+		OnNcPaint( (HRGN)wp );
+		return 0;
+	case WM_NCCALCSIZE:
+		OnNcCalcSize( (BOOL)wp, (NCCALCSIZE_PARAMS *)lp );
+		return 0;
+	case WM_SIZE:
+		OnSize( (UINT)wp, (int)(LOWORD(lp)), (int)(HIWORD(lp)) );
+		return 0;	
+	case WM_NCACTIVATE:
+		return OnNcActivate( (BOOL)wp );
+	case WM_NCHITTEST:
+		return OnNcHitTest(CPoint(LOWORD(lp), HIWORD(lp)));
+	case WM_NCLBUTTONUP:
+		OnNcLButtonUp((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp)));
+		return 0;
+	case WM_NCLBUTTONDOWN:
+		OnNcLButtonDown((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp)));
+		return 0;
+	case WM_NCLBUTTONDBLCLK:
+		OnNcLButtonDblClk((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp)));
+		return 0;
+	case WM_NCRBUTTONUP:
+		OnNcRButtonUp((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp)));
+		return 0;
+	case WM_NCRBUTTONDOWN:
+		OnNcRButtonDown((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp)));
+		return 0;
+	case WM_NCMOUSEMOVE:
+		OnNcMouseMove( (UINT)wp,CPoint(LOWORD(lp), HIWORD(lp)));
+		return 0;
+	case WM_GETMINMAXINFO:
+		OnGetMinMaxInfo( (MINMAXINFO *)lp );
+		return 0;
+	case WM_WINDOWPOSCHANGING:
+		OnWindowPosChanging((WINDOWPOS *)lp);
+		return 0;
+	case WM_SIZING:
+		OnSizing( (UINT)wp, (LPRECT)lp );
+		return 0;
+	case WM_ACTIVATE:
+		OnActivate( (UINT)wp, CWnd::FromHandle((HWND)lp), 0 );
+		return 0;
+	case WM_COMMAND:
+		if(m_bClose)
+			Default();
+		else if ( !HandleSysCommand( wp, lp ) )
+			Default();
+		return 0;
+	case WM_KEYDOWN:
+		break;
+	default:
+		return Default();
+	}
+	return 0;
+}
+
+void CSkinWin::OnNcPaint(HRGN rgn1)
+{	
+	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
+	CDC * pDC = pWnd->GetWindowDC();
+	CRect wr;
+	pWnd->GetWindowRect( wr );
+//f ( (DWORD)rgn) 
+//pDC->SelectClipRgn( CRgn::FromHandle(rgn) );
+
+	//m_bActive = GetActiveWindow() == m_hWnd;
+	int state = 0;
+	if ( m_bActive)
+		state = 0;
+	else state = 1;
+	
+	pDC->ExcludeClipRect(0, 0, wr.Width(),	m_TitleHeight );
+	DrawFrame( pDC, 0, 0, wr.Width(), wr.Height(), state, 0 );	
+	pDC->SelectClipRgn( NULL ); 
+
+	CDC memDC, *pNewDC;
+	CMyBitmap bmp;
+	CBitmap  *obmp;
+	memDC.CreateCompatibleDC( pDC );
+	bmp.CreateCompatibleBitmap( pDC, wr.Width(), m_TitleHeight );
+	obmp = memDC.SelectObject(&bmp);
+	pNewDC = &memDC;
+	
+	DrawTitle( pNewDC, m_BorderLeftWidth , 0, 
+   			wr.Width() - m_BorderRightWidth - m_BorderLeftWidth + 1, state );
+	DrawLeft( pNewDC, 0, 0, m_bmpLeft.Height(), state );
+	DrawRight( pNewDC, wr.Width() - m_BorderRightWidth , 0, m_bmpRight.Height(), state );
+
+	
+	CRgn newrgn;
+	newrgn.CreateRectRgn( 0, 0, wr.Width(), wr.Height() );
+	if ( m_bTrans )
+	{
+		CRgn rgn;
+		rgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() );
+		HRGN hrgn = bmp.CreateRgnFromFile( m_colTrans );
+		newrgn.CombineRgn( &rgn, CRgn::FromHandle(hrgn), RGN_XOR  );
+		pDC->SelectClipRgn( &newrgn ); 
+	}
+	else
+		SetWindowRgn( m_hWnd, newrgn, FALSE );
+
+	if ( m_downHitTest == HTCLOSE )
+		DrawButton( pNewDC, 0, 1 );
+	else if ( m_moveHitTest == HTCLOSE)
+		DrawButton( pNewDC, 0, 2 );
+	else
+		DrawButton( pNewDC, 0, 0 );
+	
+	if ( m_downHitTest == HTMINBUTTON )
+		DrawButton( pNewDC, 2, 1 );
+	else if ( m_moveHitTest == HTMINBUTTON)
+		DrawButton( pNewDC, 2, 2 );
+	else
+		DrawButton( pNewDC, 2, 0 );	
+
+	if ( m_downHitTest == HTMAXBUTTON )
+		DrawButton( pNewDC, 1, 1 );
+	else if ( m_moveHitTest == HTMAXBUTTON)
+		DrawButton( pNewDC, 1, 2 );
+	else
+		DrawButton( pNewDC, 1, 0 );		
+
+//	int cx = GetSystemMetrics(SM_CXSMICON);
+//	int cy = GetSystemMetrics(SM_CYSMICON);
+	SendMessage( m_hWnd, WM_GETICON, ICON_SMALL, 0);
+	/*if ( !hi )
+	{
+#ifdef IDR_MAINFRAME
+		hi = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
+#endif
+	}*/
+	//draw icon
+	/*::DrawIconEx( pNewDC->GetSafeHdc(), m_BorderLeftWidth, 5, (HICON)
+		CopyImage( hi, IMAGE_ICON, 
+		cx, cy, 0), cx, cy, 0, 0, DI_NORMAL);*/
+	//draw text
+	if ( m_title.IsEmpty() )
+		pWnd->GetWindowText(m_title);
+
+	if (m_bActive)
+		pNewDC->SetTextColor( m_colTitle1 );
+	else
+		pNewDC->SetTextColor( m_colTitle2 );
+
+	CFont font, *ofont;
+	font.CreatePointFont( GetSystemMetrics(SM_CYSMCAPTION), _T("System") );
+	ofont = pNewDC->SelectObject(&font);
+
+	pNewDC->SetBkMode(TRANSPARENT);
+	pNewDC->DrawText( m_title, CRect( m_textShift, m_textShiftVer, wr.Width() - m_bmpTitle.Width() + m_titleoff2, 
+		m_TitleHeight ), DT_SINGLELINE | DT_LEFT | DT_VCENTER | DT_WORD_ELLIPSIS  );
+
+	pNewDC->SelectObject(&font);
+
+	pDC->BitBlt( 0, 0, wr.Width(),
+		m_TitleHeight, pNewDC, 0, 0, SRCCOPY );
+	memDC.SelectObject(obmp);
+
+	pDC->SelectClipRgn(NULL);
+}
+
+void CSkinWin::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS *lpncsp)
+{
+	if ( bCalcValidRects )
+	{
+		lpncsp->rgrc[0].left = lpncsp->rgrc[0].left + m_BorderLeftWidth;
+		lpncsp->rgrc[0].right = lpncsp->rgrc[0].right - m_BorderRightWidth;
+		lpncsp->rgrc[0].top = lpncsp->rgrc[0].top + m_TitleHeight;
+		lpncsp->rgrc[0].bottom = lpncsp->rgrc[0].bottom - m_BorderBottomHeight;
+		lpncsp->rgrc[1] = lpncsp->rgrc[0];
+
+	}
+	else
+	{
+		Default();
+	}
+
+}
+
+void CSkinWin::OnSizing(UINT nSide, LPRECT lpRect)
+{
+		//Default();
+//	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
+	CRect wr(lpRect);
+
+	
+	/*if ( m_bTrans )
+		SetWindowRgn( m_hWnd, GetRegion(wr.Width(), wr.Height() ), TRUE );
+	else
+		SetWindowRgn( m_hWnd, NULL, TRUE );*/
+	
+}
+
+
+void CSkinWin::OnSize(UINT nType, int cx, int cy)
+{
+	//Default();
+	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
+	CRect wr;	
+	Default();
+	pWnd->GetWindowRect(wr);
+	/*pWnd->Invalidate();
+	OnNcPaint(0);*/
+	
+	if ( m_bTrans )
+		SetWindowRgn( m_hWnd, GetRegion(wr.Width(), wr.Height() ), TRUE );
+	else
+		SetWindowRgn( m_hWnd, NULL, TRUE );
+
+
+}
+
+HRGN CSkinWin::GetRegion(int w, int h)
+{
+	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
+	CRect wr;
+	pWnd->GetWindowRect(wr);
+	
+	CRgn rgn;
+	if ( m_bTrans )
+	{
+		CDC *pDC = pWnd->GetDC();
+		CDC memDC;
+		CMyBitmap bmp;
+		CBitmap *obmp;
+		memDC.CreateCompatibleDC(pDC);
+		bmp.CreateCompatibleBitmap( pDC, w, m_TitleHeight );
+		obmp = memDC.SelectObject(&bmp);
+		/*
+		memDC.FillSolidRect( 0, 0, w, h, 0 );
+		DrawFrame( &memDC, 0, 0, w, h, 0 );
+		*/
+		DrawTitle( &memDC, m_BorderLeftWidth , 0, 
+   				wr.Width() - m_BorderRightWidth - m_BorderLeftWidth + 1, 0 );
+		DrawLeft( &memDC, 0, 0, m_bmpLeft.Height(), 0 );
+		DrawRight( &memDC, wr.Width() - m_BorderRightWidth , 0, m_bmpRight.Height(), 0 );
+		
+		memDC.SelectObject(obmp);
+		pWnd->ReleaseDC( pDC );
+
+		rgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() );
+		HRGN hrgn = bmp.CreateRgnFromFile( m_colTrans );
+		CRgn newrgn;
+		newrgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() );
+		newrgn.CombineRgn( &rgn, CRgn::FromHandle(hrgn), RGN_XOR  );
+		
+		return (HRGN)newrgn.Detach();
+	}
+	else
+		rgn.CreateRectRgn( 0, 0, wr.Width(), wr.Height() );
+		
+	
+	return (HRGN)rgn.Detach();
+}
+
+
+BOOL CSkinWin::OnNcActivate(BOOL bActive)
+{
+	m_bActive = bActive;
+	OnNcPaint(0);
+	if ( !bActive )
+	{
+		return 1;
+	}
+	else
+		return 0;
+}
+
+
+
+UINT CSkinWin::OnNcHitTest(CPoint point)
+{
+	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
+	CRect wr;
+	pWnd->GetWindowRect(wr);
+	
+	point.x -= wr.left;
+	point.y -= wr.top;
+	if ( PtInRect( GetButtonRect(0), point ) )
+		return HTCLOSE;
+	if ( PtInRect( GetButtonRect(2), point ) && m_minable )
+		return HTMINBUTTON;
+	if ( PtInRect( GetButtonRect(1), point ) && m_maxable )
+		return HTMAXBUTTON;
+
+	CRect r;
+	int cx = GetSystemMetrics(SM_CXSMICON);
+	int cy = GetSystemMetrics(SM_CYSMICON);
+	if ( PtInRect( CRect(m_BorderLeftWidth, 5, m_BorderLeftWidth + cx, cy + 5), point ) )
+		return HTSYSMENU;
+
+	r = CRect( 0, 0, m_BorderLeftWidth, m_TitleHeight );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTTOPLEFT;
+	r = CRect( wr.Width() - m_BorderLeftWidth, 0,  wr.Width(), m_TitleHeight  );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTTOPRIGHT;
+	r = CRect( 0, wr.Height() - m_BorderBottomHeight, m_BorderLeftWidth, wr.Height() );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTBOTTOMLEFT;
+	r = CRect( wr.Width()-m_BorderRightWidth, wr.Height() - m_BorderBottomHeight,  wr.Width(), wr.Height() );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTBOTTOMRIGHT;
+	r = CRect( 0, m_TitleHeight,  m_BorderLeftWidth, wr.Height() - m_BorderBottomHeight  );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTLEFT;
+	r = CRect( wr.Width()-m_BorderRightWidth, m_TitleHeight,  wr.Width(), wr.Height() - m_BorderBottomHeight  );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTRIGHT;
+	r = CRect( m_BorderLeftWidth, wr.Height() - m_BorderBottomHeight,  wr.Width()-m_BorderRightWidth, wr.Height() );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTBOTTOM;
+	r = CRect( m_BorderLeftWidth, 0,  wr.Width()-m_BorderRightWidth, m_BorderBottomHeight );
+	if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		return HTTOP;
+	//set to boder 5
+	r = CRect( m_BorderLeftWidth, 5 , wr.Width()-m_BorderRightWidth, m_TitleHeight );
+	if ( PtInRect( r, point ) )
+		return HTCAPTION;
+
+
+
+	return HTCLIENT;
+}
+
+void CSkinWin::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
+{
+	if ( nHitTest == HTCAPTION && m_sizable )
+	{
+		if ( m_winstate == 1 )
+			Restore();
+		else
+			Maximize(); //ShowWindow(m_hWnd, SW_MAXIMIZE);
+		m_downHitTest = 0;
+		m_moveHitTest = 0;
+		OnNcPaint(0);
+	}
+}
+
+void CSkinWin::OnNcLButtonDown(UINT nHitTest, CPoint point)
+{
+	m_downHitTest = nHitTest;
+	m_moveHitTest = m_downHitTest;
+
+	OnNcPaint(0);	
+	if ( nHitTest >= HTLEFT && nHitTest <= HTBOTTOMRIGHT || 
+		nHitTest == HTCAPTION && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		Default();
+	else if ( nHitTest == HTSYSMENU )
+	{
+		PopupSysMenu(point);
+		/*
+		CWnd * pWnd = CWnd::FromHandle(m_hWnd);
+		//a tricky hack
+		pWnd->ModifyStyle( 0, WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX );			
+		Default();
+		pWnd->ModifyStyle( WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 0 );			
+		*/
+	}
+}
+
+void CSkinWin::OnNcLButtonUp(UINT nHitTest, CPoint point)
+{
+	if ( nHitTest == HTCLOSE )
+	{
+		SendMessage(m_hWnd, WM_CLOSE, 0, 0);
+		return;
+	}
+	else if ( nHitTest == HTMINBUTTON )
+		Minimize();
+	else if ( nHitTest == HTMAXBUTTON )
+	{
+		if ( m_winstate == 1 ) // IsZoomed(m_hWnd) )
+			Restore(); //ShowWindow(m_hWnd, SW_RESTORE);
+		else
+			Maximize(); //ShowWindow(m_hWnd, SW_MAXIMIZE);
+	}
+	else
+		return;
+	m_downHitTest = 0;
+	m_moveHitTest = 0;
+	OnNcPaint(0);
+
+}
+
+void CSkinWin::OnNcMouseMove(UINT nHitTest, CPoint point)
+{
+	if ( nHitTest >= HTLEFT && nHitTest <= HTBOTTOMRIGHT || 
+		 nHitTest == HTCAPTION && m_winstate != 1 )  //!IsZoomed(m_hWnd) )
+		Default();
+	
+	m_moveHitTest = nHitTest;
+	m_downHitTest = 0;
+	if ( m_oldHitTest != nHitTest )
+	{
+		/*
+		CRect r;
+		r = GetButtonRect(0);
+		r.UnionRect( r, GetButtonRect(1) );
+		r.UnionRect( r, GetButtonRect(2) );
+		CRgn rgn;
+		rgn.CreateRectRgn( r.left, r.top, r.right, r.bottom );
+		*/
+		OnNcPaint(0);
+		m_oldHitTest = nHitTest;
+	}
+	
+}
+
+void CSkinWin::OnNcRButtonDown(UINT nHitTest, CPoint point)
+{
+	if ( nHitTest == HTCAPTION )
+	{
+		/*
+		CWnd * pWnd = CWnd::FromHandle(m_hWnd);
+		pWnd->ModifyStyle( 0, WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX );			
+		Default();
+		pWnd->ModifyStyle( WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 0 );			
+		*/
+		PopupSysMenu(point);
+	}
+}
+
+void CSkinWin::OnNcRButtonUp(UINT nHitTest, CPoint point)
+{
+
+
+}
+
+CRect CSkinWin::GetButtonRect(int i)
+{
+	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
+	CRect wr;
+	pWnd->GetWindowRect(wr);
+
+	CRect r;
+	if ( i == 0 && m_bmpCloseBtn.GetSafeHandle() )
+	{
+		//close
+		r = m_rectCloseBtn;
+		r.left = wr.Width() - m_rectCloseBtn.right;
+		r.right = wr.Width() - m_rectCloseBtn.left;
+	}
+	if ( i == 1 && m_bmpMaxBtn.GetSafeHandle())
+	{
+		//max
+		
+		if ( m_winstate != 1 || !m_bmpRestoreBtn.GetSafeHandle() )
+		{
+			r = m_rectMaxBtn;
+			r.left = wr.Width() - m_rectMaxBtn.right;
+			r.right = wr.Width() - m_rectMaxBtn.left;
+		}
+		else
+		{
+			r = m_rectRestoreBtn;
+			r.left = wr.Width() - m_rectRestoreBtn.right;
+			r.right = wr.Width() - m_rectRestoreBtn.left;
+		}
+			
+	}
+	if ( i == 2 && m_bmpMinBtn.GetSafeHandle())
+	{
+		//min
+		r = m_rectMinBtn;
+		r.left = wr.Width() - m_rectMinBtn.right;
+		r.right = wr.Width() - m_rectMinBtn.left;
+	}
+
+	return r;
+
+}
+
+BOOL CSkinWin::DrawButton( CDC * pDC, int i, int state)
+{
+	if ( i == 0 )
+	{
+		if ( m_bmpCloseBtn.GetSafeHandle() )
+		{
+			CRect r = GetButtonRect(0);
+			m_bmpCloseBtn.Draw( pDC, r.left, r.top, 
+				CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ), m_colTrans, m_bTrans );
+		}
+	}
+	if ( i == 1 )
+	{
+		CRect r = GetButtonRect(1);
+		if ( m_maxable && m_bmpMaxBtn.GetSafeHandle() )
+			if ( m_winstate == 1&& m_bmpRestoreBtn.GetSafeHandle() )
+				m_bmpRestoreBtn.Draw( pDC, r.left, r.top, 
+					CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ), m_colTrans, m_bTrans );
+			else
+				m_bmpMaxBtn.Draw( pDC, r.left, r.top, 
+					CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ) , m_colTrans, m_bTrans);
+	}
+	if ( i == 2 )
+	{
+		if ( m_minable && m_bmpMinBtn.GetSafeHandle() )
+		{
+			CRect r = GetButtonRect(2);
+			m_bmpMinBtn.Draw( pDC, r.left, r.top, 
+				CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ) , m_colTrans, m_bTrans);
+
+		}
+	}
+	return TRUE;
+	
+}
+
+void CSkinWin::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
+{
+	lpMMI->ptMinTrackSize = CPoint( m_bmpTitle.Width() + m_bmpLeft.Width() +
+		m_bmpRight.Width(),  m_bmpLeft.Height() + 20 );
+}
+
+
+void CSkinWin::OnWindowPosChanging(WINDOWPOS *lpwndpos)
+{
+}
+
+
+BOOL CSkinWin::OnEraseBkgnd(CDC *pDC)
+{
+	if ( m_bmpDlg.GetSafeHandle() )
+	{
+		CRect r;
+		GetClientRect( m_hWnd, r);
+		for ( int i = 0; i < r.Width()/m_bmpDlg.Width() + 1; i++ )
+			for ( int j = 0; j < r.Height()/m_bmpDlg.Height() + 1; j++ )
+			{
+				m_bmpDlg.Draw( pDC, CRect( i *  m_bmpDlg.Width(), j * m_bmpDlg.Height(),
+					i *  m_bmpDlg.Width() + m_bmpDlg.Width(), j * m_bmpDlg.Height() + m_bmpDlg.Height() ) );
+			}
+
+		return TRUE;
+	}
+	else
+		return FALSE;
+}
+
+CRect CSkinWin::GetMaximizeRect()
+{
+	CRect r;
+	SystemParametersInfo(SPI_GETWORKAREA, 0, r, 0);
+	
+	return r;
+}
+
+BOOL CSkinWin::Maximize()
+{
+	/*CRect r = GetMaximizeRect();
+	GetWindowRect( m_hWnd, m_rectRestoreWin );
+	m_winstate = 1;
+	::MoveWindow( m_hWnd, r.left, r.top, r.Width(), r.Height(), TRUE  );
+	UpdateWindow( m_hWnd );*/
+	return TRUE;
+}
+
+BOOL CSkinWin::Minimize()
+{
+	m_oldwinstate = m_winstate;
+	m_winstate = 2;
+	ShowWindow(m_hWnd, SW_MINIMIZE);
+	/*
+			if (m_iconFlag)
+				ShowWindow(m_hWnd,SW_HIDE);
+			else
+			{
+				//AddTaskIcon();
+				m_iconFlag = TRUE;
+				ShowWindow(m_hWnd,SW_HIDE);
+			}*/
+			return TRUE;
+}
+
+BOOL CSkinWin::Restore()
+{
+	if ( m_winstate == 1 )
+	{
+		::MoveWindow( m_hWnd, m_rectRestoreWin.left, m_rectRestoreWin.top,
+			m_rectRestoreWin.Width(), m_rectRestoreWin.Height(), TRUE  );
+		m_winstate = 0;
+		UpdateWindow( m_hWnd );
+	}
+	return TRUE;
+}
+
+//void OnActivate(UINT nState,CWnd* pWndOther, BOOL bMinimized );
+
+void CSkinWin::OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized)
+{
+	//Default();
+	m_bActive = ( nState == WA_ACTIVE || nState == WA_CLICKACTIVE );
+	OnNcActivate(m_bActive);
+}
+
+LRESULT CSkinWin::OnSetText(WPARAM wp, LPARAM lp)
+{
+	TCHAR * str = ( TCHAR *)lp;
+
+	Default();
+	m_title = str;
+	OnNcPaint(0);
+	return 0;
+}
+
+
+
+void CSkinWin::OnSysCommand(UINT nID, LPARAM lParam)
+{
+	if ( nID == SC_MAXIMIZE )
+		Maximize();
+	else if ( nID == SC_RESTORE && m_winstate == 1 )
+		Restore();
+	else if ( nID == SC_RESTORE && m_winstate == 2 )
+	{
+		ShowWindow( m_hWnd, SW_RESTORE );
+		m_winstate = m_oldwinstate;
+		OnNcPaint(0);
+	}
+	else 
+		Default();
+}
+
+BOOL CSkinWin::PopupSysMenu(CPoint point)
+{
+	CWnd * pWnd = CWnd::FromHandle(m_hWnd);
+	CMenu SysMenu;
+	SysMenu.Attach( GetSystemMenu(m_hWnd, FALSE) );
+
+
+
+
+/*
+  when gray menuitem, a strange line appears!!
+  
+	if ( m_winstate == 0 )
+	{
+		SysMenu.EnableMenuItem( SC_MINIMIZE, MF_BYCOMMAND|MF_ENABLED );
+		SysMenu.EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED );
+		SysMenu.EnableMenuItem( SC_RESTORE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED );
+	}	
+	else if ( m_winstate == 1 )
+	{
+		SysMenu.EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED );
+		SysMenu.EnableMenuItem( SC_RESTORE, MF_BYCOMMAND|MF_ENABLED );
+	}
+	else if ( m_winstate == 2 )
+	{
+		SysMenu.EnableMenuItem( SC_MINIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED );
+		SysMenu.EnableMenuItem( SC_RESTORE, MF_BYCOMMAND|MF_ENABLED );
+	}
+*/
+	
+	SysMenu.TrackPopupMenu( 0, point.x, point.y, pWnd  );		
+	SysMenu.Detach();
+	return TRUE;
+}
+
+BOOL CSkinWin::HandleSysCommand(WPARAM wp, LPARAM lp)
+{
+	if ( lp == 0 )
+	{
+		if(wp==2) 
+		{
+			//Minimize();
+			//ShowWindow(m_hWnd,SW_HIDE);
+			if (m_iconFlag)
+				ShowWindow(m_hWnd,SW_HIDE);
+			else
+			{
+				AddTaskIcon();
+				m_iconFlag = TRUE;
+				ShowWindow(m_hWnd,SW_HIDE);
+			}
+			return TRUE;
+		}
+		CMenu SysMenu;
+		SysMenu.Attach( GetSystemMenu(m_hWnd, FALSE) );
+		int count = SysMenu.GetMenuItemCount();
+		int i = 0;
+		for( ; i < count ; i++ )
+			if ( SysMenu.GetMenuItemID(i) == wp )
+				break;
+		SysMenu.Detach();
+		if ( i >= count )
+			return FALSE;
+		if ( wp == SC_MAXIMIZE )
+			Maximize();
+		else if ( wp == SC_MINIMIZE )
+			Minimize();
+		else if ( wp == SC_RESTORE && m_winstate == 1 )
+			Restore();
+		else if ( wp == SC_RESTORE && m_winstate == 2 )
+		{
+			ShowWindow( m_hWnd, SW_RESTORE );
+			m_winstate = m_oldwinstate;
+			OnNcPaint(0);
+		}
+		else 
+			SendMessage( m_hWnd, WM_SYSCOMMAND, wp, lp );
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+BOOL CSkinWin::AddTaskIcon()
+{
+	tnid.cbSize = sizeof(NOTIFYICONDATA);
+	tnid.hWnd = m_hWnd;
+	tnid.uID = 0;
+	tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
+	tnid.uCallbackMessage = UM_NOTIFY;
+	tnid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
+	strcpy_s(tnid.szTip, _T("gtalkphone"));
+	return Shell_NotifyIcon(NIM_ADD, &tnid);
+}
+
+BOOL CSkinWin::DeleteTaskIcon()
+{
+	if (m_iconFlag)
+	{
+		return Shell_NotifyIcon(NIM_DELETE, &tnid);
+	}
+	else
+		return FALSE;
+}
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/SkinWin/SkinWin.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/SkinWin.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,136 @@
+// SkinWin.h: interface for the CSkinWin class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_SKINWIN_H__F010D322_E34F_4F9E_87E8_E76E9611942D__INCLUDED_)
+#define AFX_SKINWIN_H__F010D322_E34F_4F9E_87E8_E76E9611942D__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "MyBitmap.h"
+#include "Subclass.h"
+#define UM_QUIT   WM_USER+1001
+class CSkinWin  : public CSubclassWnd
+{
+public:
+	CString		m_title;
+	CString		m_strSkinFile;		//skin definition file
+	CMyBitmap	m_bmpTitle;		//contains two bitmap;
+
+	CMyBitmap	m_bmpLeft;		
+	CMyBitmap	m_bmpRight;
+	CMyBitmap	m_bmpBottom;
+	CMyBitmap	m_bmpMenubg;
+	CMyBitmap	m_bmpDlg;
+
+	UINT		m_oldHitTest;
+	UINT		m_moveHitTest;
+	UINT		m_downHitTest;
+	//offset in the bmp
+	int			m_titleoff1, m_titleoff2;
+	int			m_leftoff1, m_leftoff2;
+	int			m_rightoff1, m_rightoff2;
+	int			m_bottomoff1, m_bottomoff2;
+
+	CMyBitmap	m_bmpMinBtn;
+	CMyBitmap	m_bmpMaxBtn;
+	CMyBitmap	m_bmpCloseBtn;
+	CMyBitmap	m_bmpRestoreBtn;
+	CRect		m_rectMinBtn;
+	CRect		m_rectMaxBtn;
+	CRect		m_rectCloseBtn;
+	CRect		m_rectRestoreBtn;
+
+	CRect		m_rectRestoreWin;
+	int			m_winstate;			//0 for normal, 1 for max, 2 for min
+	int			m_oldwinstate;		//save state before min
+
+	RECT m_rectParent;
+
+
+	BOOL		m_sizable;
+	BOOL		m_minable;
+	BOOL		m_maxable;
+	BOOL		m_sysmenu;
+
+	int			m_TitleHeight;
+	int			m_BorderLeftWidth;
+	int			m_BorderRightWidth;
+	int			m_BorderBottomHeight;
+
+	int			m_textShift, m_textShiftVer;
+	COLORREF	m_colTitle1, m_colTitle2;
+	COLORREF	m_colTrans;
+
+	COLORREF	m_barcolor;
+	COLORREF	m_menucolor;
+	COLORREF	m_btnbgcolor, m_btntextcolor, m_btnhovercolor, m_btnfocuscolor;
+
+	BOOL		m_bTrans;
+
+	BOOL		m_bInit;
+	BOOL		m_bActive;
+	CMenu       popMenu;
+	BOOL        m_bClose;
+public:
+	BOOL			m_iconFlag;
+	BOOL			m_displayFlag;
+	NOTIFYICONDATA	tnid;
+	void OnUmNotify(WPARAM wParam, LPARAM lParam);
+	BOOL DeleteTaskIcon();
+	BOOL AddTaskIcon();
+	BOOL IsInited()
+	{
+		return m_bInit;
+	}
+	BOOL HandleSysCommand(WPARAM wp, LPARAM lp);
+	BOOL PopupSysMenu(CPoint point);
+	void OnSysCommand(UINT nID, LPARAM lParam );
+	BOOL Restore();
+	BOOL Minimize();
+	BOOL Maximize();
+	LRESULT OnSetText( WPARAM wp, LPARAM lp );
+	void OnActivate(UINT nState,CWnd* pWndOther, BOOL bMinimized );
+	CRect GetMaximizeRect();
+	BOOL OnEraseBkgnd( CDC *pDC);
+	void OnSizing( UINT nSide, LPRECT lpRect);
+	void OnWindowPosChanging( WINDOWPOS* lpwndpos );
+	void OnGetMinMaxInfo( MINMAXINFO* lpMMI );
+	BOOL DrawButton( CDC * pDC, int i, int state );
+	CRect GetButtonRect( int i );
+	void OnNcRButtonUp(   UINT nHitTest,   CPoint point);
+	void OnNcRButtonDown(   UINT nHitTest, CPoint point );
+	void OnNcMouseMove( UINT nHitTest, CPoint point );
+	void OnNcLButtonUp( UINT nHitTest, CPoint point );
+	void OnNcLButtonDown( UINT nHitTest, CPoint point );
+	void OnNcLButtonDblClk( UINT nHitTest,  CPoint point );
+	UINT OnNcHitTest( CPoint point );
+	BOOL OnNcActivate( BOOL bActive );
+	HRGN GetRegion( int w, int h);
+	void OnSize(UINT nType, int cx, int cy );
+	void OnNcCalcSize( BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
+	void OnNcPaint( HRGN rgn );
+	BOOL InstallSkin( CWnd * wnd );
+	BOOL DrawFrame( CDC *pDC, int x, int y,int w, int h, int state, int title = 1 );
+	BOOL DrawRight(CDC *pDC, int x, int y, int h, int state);
+	BOOL DrawLeft(CDC *pDC, int x, int y, int h, int state);
+	BOOL DrawBottom(CDC *pDC, int x, int y, int w, int state);
+	BOOL DrawTitle( CDC *pDC, int x, int y, int w, int state );
+	CSkinWin();
+	CSkinWin( const TCHAR * skinfile )
+	{
+		CSkinWin();
+		LoadSkin( skinfile );			
+	}
+	virtual ~CSkinWin();
+
+	//skinfile:	full path name to skin inifile
+	BOOL	LoadSkin( const TCHAR * skinfile );
+	//vitrual functions
+	virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
+
+};
+
+#endif // !defined(AFX_SKINWIN_H__F010D322_E34F_4F9E_87E8_E76E9611942D__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/SkinWin/Subclass.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/Subclass.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,270 @@
+#include "StdAfx.h"
+#include "Subclass.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+//////////////////
+// The message hook map is derived from CMapPtrToPtr, which associates
+// a pointer with another pointer. It maps an HWND to a CSubclassWnd, like
+// the way MFC's internal maps map HWND's to CWnd's. The first CSubclassWnd
+// attached to a window is stored in the map; all other CSubclassWnd's for that
+// window are then chained via CSubclassWnd::m_pNext.
+//
+class CSubclassWndMap : private CMapPtrToPtr {
+public:
+	CSubclassWndMap();
+	~CSubclassWndMap();
+	static CSubclassWndMap& GetHookMap();
+	void Add(HWND hwnd, CSubclassWnd* pSubclassWnd);
+	void Remove(CSubclassWnd* pSubclassWnd);
+	void RemoveAll(HWND hwnd);
+	CSubclassWnd* Lookup(HWND hwnd);
+};
+
+// This trick is used so the hook map isn't
+// instantiated until someone actually requests it.
+//
+#define	theHookMap	(CSubclassWndMap::GetHookMap())
+
+IMPLEMENT_DYNAMIC(CSubclassWnd, CWnd);
+
+CSubclassWnd::CSubclassWnd()
+{
+	m_pNext = NULL;
+	m_pOldWndProc = NULL;	
+	m_hWnd  = NULL;
+}
+
+CSubclassWnd::~CSubclassWnd()
+{
+	if (m_hWnd) 
+		HookWindow((HWND)NULL);		// unhook window
+}
+
+//////////////////
+// Hook a window.
+// This installs a new window proc that directs messages to the CSubclassWnd.
+// pWnd=NULL to remove.
+//
+BOOL CSubclassWnd::HookWindow(HWND hwnd)
+{
+	ASSERT_VALID(this);
+	if (hwnd) {
+		// Hook the window
+		ASSERT(m_hWnd==NULL);
+		ASSERT(::IsWindow(hwnd));
+		theHookMap.Add(hwnd, this);			// Add to map of hooks
+
+	} else if (m_hWnd) {
+		// Unhook the window
+		theHookMap.Remove(this);				// Remove from map
+		m_pOldWndProc = NULL;
+	}
+	m_hWnd = hwnd;
+	return TRUE;
+}
+
+//////////////////
+// Window proc-like virtual function which specific CSubclassWnds will
+// override to do stuff. Default passes the message to the next hook; 
+// the last hook passes the message to the original window.
+// You MUST call this at the end of your WindowProc if you want the real
+// window to get the message. This is just like CWnd::WindowProc, except that
+// a CSubclassWnd is not a window.
+//
+LRESULT CSubclassWnd::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
+{
+//	ASSERT_VALID(this);  // removed for speed
+	ASSERT(m_pOldWndProc);
+	return m_pNext ? m_pNext->WindowProc(msg, wp, lp) :	
+		::CallWindowProc(m_pOldWndProc, m_hWnd, msg, wp, lp);
+}
+
+//////////////////
+// Like calling base class WindowProc, but with no args, so individual
+// message handlers can do the default thing. Like CWnd::Default
+//
+LRESULT CSubclassWnd::Default()
+{
+	// MFC stores current MSG in thread state
+	MSG& curMsg = AfxGetThreadState()->m_lastSentMsg;
+	// Note: must explicitly call CSubclassWnd::WindowProc to avoid infinte
+	// recursion on virtual function
+	return CSubclassWnd::WindowProc(curMsg.message, curMsg.wParam, curMsg.lParam);
+}
+
+#ifdef _DEBUG
+void CSubclassWnd::AssertValid() const
+{
+	CObject::AssertValid();
+	ASSERT(m_hWnd==NULL || ::IsWindow(m_hWnd));
+	if (m_hWnd) {
+		CSubclassWnd* p = theHookMap.Lookup(m_hWnd);
+		for (; p; p=p->m_pNext) {
+			if (p==this)
+				break;
+		}
+		ASSERT(p); // should have found it!
+	}
+}
+
+void CSubclassWnd::Dump(CDumpContext& dc) const
+{
+	CObject::Dump(dc);
+}
+
+#endif
+
+//////////////////
+// Subclassed window proc for message hooks. Replaces AfxWndProc (or whatever
+// else was there before.)
+//
+LRESULT CALLBACK
+HookWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
+{
+#ifdef _USRDLL
+	// If this is a DLL, need to set up MFC state
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+#endif
+
+	// Set up MFC message state just in case anyone wants it
+	// This is just like AfxCallWindowProc, but we can't use that because
+	// a CSubclassWnd is not a CWnd.
+	//
+	MSG& curMsg = AfxGetThreadState()->m_lastSentMsg;
+	MSG  oldMsg = curMsg;   // save for nesting
+	curMsg.hwnd		= hwnd;
+	curMsg.message = msg;
+	curMsg.wParam  = wp;
+	curMsg.lParam  = lp;
+
+	// Get hook object for this window. Get from hook map
+	CSubclassWnd* pSubclassWnd = theHookMap.Lookup(hwnd);
+	ASSERT(pSubclassWnd);
+
+	LRESULT lr;
+	if (msg==WM_NCDESTROY) {
+		// Window is being destroyed: unhook all hooks (for this window)
+		// and pass msg to orginal window proc
+		//
+		WNDPROC wndproc = pSubclassWnd->m_pOldWndProc;
+		theHookMap.RemoveAll(hwnd);
+		lr = ::CallWindowProc(wndproc, hwnd, msg, wp, lp);
+
+	} else {
+		// pass to msg hook
+		lr = pSubclassWnd->WindowProc(msg, wp, lp);
+	}
+	curMsg = oldMsg;			// pop state
+	return lr;
+}
+
+////////////////////////////////////////////////////////////////
+// CSubclassWndMap implementation
+//
+CSubclassWndMap::CSubclassWndMap()
+{
+}
+
+CSubclassWndMap::~CSubclassWndMap()
+{
+// This assert bombs when posting WM_QUIT, so I've deleted it.
+//	ASSERT(IsEmpty());	// all hooks should be removed!	
+}
+
+//////////////////
+// Get the one and only global hook map
+// 
+CSubclassWndMap& CSubclassWndMap::GetHookMap()
+{
+	// By creating theMap here, C++ doesn't instantiate it until/unless
+	// it's ever used! This is a good trick to use in C++, to
+	// instantiate/initialize a static object the first time it's used.
+	//
+	static CSubclassWndMap theMap;
+	return theMap;
+}
+
+/////////////////
+// Add hook to map; i.e., associate hook with window
+//
+void CSubclassWndMap::Add(HWND hwnd, CSubclassWnd* pSubclassWnd)
+{
+	ASSERT(hwnd && ::IsWindow(hwnd));
+
+	// Add to front of list
+	pSubclassWnd->m_pNext = Lookup(hwnd);
+	SetAt(hwnd, pSubclassWnd);
+	
+	if (pSubclassWnd->m_pNext==NULL) {
+		// If this is the first hook added, subclass the window
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+		pSubclassWnd->m_pOldWndProc = 
+			(WNDPROC)SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG_PTR)HookWndProc);
+#pragma warning(pop)
+
+	} else {
+		// just copy wndproc from next hook
+		pSubclassWnd->m_pOldWndProc = pSubclassWnd->m_pNext->m_pOldWndProc;
+	}
+	ASSERT(pSubclassWnd->m_pOldWndProc);
+}
+
+//////////////////
+// Remove hook from map
+//
+void CSubclassWndMap::Remove(CSubclassWnd* pUnHook)
+{
+	HWND hwnd = pUnHook->m_hWnd;
+	ASSERT(hwnd && ::IsWindow(hwnd));
+
+	CSubclassWnd* pHook = Lookup(hwnd);
+	ASSERT(pHook);
+	if (pHook==pUnHook) {
+		// hook to remove is the one in the hash table: replace w/next
+		if (pHook->m_pNext)
+			SetAt(hwnd, pHook->m_pNext);
+		else {
+			// This is the last hook for this window: restore wnd proc
+			RemoveKey(hwnd);
+#pragma warning(push)
+#pragma warning(disable:4244)
+			SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG_PTR)(pHook->m_pOldWndProc));
+#pragma warning(pop)
+		}
+	} else {
+		// Hook to remove is in the middle: just remove from linked list
+		while (pHook->m_pNext!=pUnHook)
+			pHook = pHook->m_pNext;
+		ASSERT(pHook && pHook->m_pNext==pUnHook);
+		pHook->m_pNext = pUnHook->m_pNext;
+	}
+}
+
+//////////////////
+// Remove all the hooks for a window
+//
+void CSubclassWndMap::RemoveAll(HWND hwnd)
+{
+	CSubclassWnd* pSubclassWnd;
+	while ((pSubclassWnd = Lookup(hwnd))!=NULL)
+		pSubclassWnd->HookWindow((HWND)NULL);	// (unhook)
+}
+
+/////////////////
+// Find first hook associate with window
+//
+CSubclassWnd* CSubclassWndMap::Lookup(HWND hwnd)
+{
+	CSubclassWnd* pFound = NULL;
+	if (!CMapPtrToPtr::Lookup(hwnd, (void*&)pFound))
+		return NULL;
+	ASSERT_KINDOF(CSubclassWnd, pFound);
+	return pFound;
+}
+

Added: freeswitch/trunk/gtalkphone/SkinWin/Subclass.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/Subclass.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,83 @@
+#ifndef _SUBCLASSW_H
+#define _SUBCLASSW_H
+
+////////////////////////////////////////////////////////////////
+// Copyright 1998 Paul DiLascia
+// If this code works, it was written by Paul DiLascia.
+// If not, I don't know who wrote it.
+//
+/////////////////////////////////////////////////////////////////////////////
+/****************************************************************************
+ *
+ * $Date: 10/26/99 10:50p $
+ * $Revision: 4 $
+ * $Archive: /CodeJock/Include/Subclass.h $
+ *
+ * $History: Subclass.h $
+ * 
+ * *****************  Version 4  *****************
+ * User: Kirk Stowell Date: 10/26/99   Time: 10:50p
+ * Updated in $/CodeJock/Include
+ * Made class methods virtual for inheritance purposes.
+ * 
+ * *****************  Version 3  *****************
+ * User: Kirk Stowell Date: 10/14/99   Time: 12:41p
+ * Updated in $/CodeJock/Include
+ * Added source control history to file header.
+ *
+ ***************************************************************************/
+/////////////////////////////////////////////////////////////////////////////
+
+//////////////////
+// Generic class to hook messages on behalf of a CWnd.
+// Once hooked, all messages go to CSubclassWnd::WindowProc before going
+// to the window. Specific subclasses can trap messages and do something.
+//
+// To use:
+//
+// * Derive a class from CSubclassWnd.
+//
+// * Override CSubclassWnd::WindowProc to handle messages. Make sure you call
+//   CSubclassWnd::WindowProc if you don't handle the message, or your
+//   window will never get messages. If you write seperate message handlers,
+//   you can call Default() to pass the message to the window.
+//
+// * Instantiate your derived class somewhere and call HookWindow(pWnd)
+//   to hook your window, AFTER it has been created.
+//	  To unhook, call HookWindow(NULL).
+//
+// This is a very important class, crucial to many of the widgets Window
+// widgets implemented in PixieLib. To see how it works, look at the HOOK
+// sample program.
+//
+class  CSubclassWnd : public CObject {
+public:
+	DECLARE_DYNAMIC(CSubclassWnd);
+	CSubclassWnd();
+	~CSubclassWnd();
+
+	// Subclass a window. Hook(NULL) to unhook (automatic on WM_NCDESTROY)
+	virtual BOOL	HookWindow(HWND  hwnd);
+	virtual BOOL	HookWindow(CWnd* pWnd)	{ return HookWindow(pWnd->GetSafeHwnd()); }
+	virtual BOOL	IsHooked()					{ return m_hWnd!=NULL; }
+
+	friend LRESULT CALLBACK HookWndProc(HWND, UINT, WPARAM, LPARAM);
+	friend class CSubclassWndMap;
+
+#ifdef _DEBUG
+	virtual void AssertValid() const;
+	virtual void Dump(CDumpContext& dc) const;
+#endif
+
+protected:
+	HWND				m_hWnd;				// the window hooked
+	WNDPROC			m_pOldWndProc;		// ..and original window proc
+	CSubclassWnd*	m_pNext;				// next in chain of hooks for this window
+
+	// Override this to handle messages in specific handlers
+	virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
+	virtual LRESULT Default();				// call this at the end of handler fns
+};
+
+#endif // _SUBCLASSW_H
+

Added: freeswitch/trunk/gtalkphone/SkinWin/Utils.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/SkinWin/Utils.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,283 @@
+//	2002.11.23
+//				copy from kdphoto projects
+
+#include "stdafx.h"
+
+int	GetChar( TCHAR ** str )
+{
+    int code = **((TCHAR **)str);
+    if ( !str ) return 0;
+    if ( !*str ) return 0;
+    if ( !code ) return 0;
+
+    (*str) ++;
+    if ( code > 0x80 )
+    {
+        code *= 256;
+        code += **((TCHAR **)str);
+        (*str) ++;
+    }
+    return code;
+};
+
+int SetChar( TCHAR **str, int chr )
+{
+    int  byte = 1;
+
+    if ( !str ) return 0;
+    if ( !*str ) return 0;
+
+    if ( chr < 256 )
+    {
+        **((TCHAR **)str) = (TCHAR)(chr % 256);
+        (*str) ++;
+    }
+    else
+    {
+        **((TCHAR **)str) = (TCHAR)(chr / 256);
+        (*str) ++;
+        **((TCHAR **)str) = (TCHAR)(chr % 256);
+        (*str) ++;
+        byte ++;
+    }
+
+    return byte;
+}
+
+int PeekChar( TCHAR **str )
+{
+    int code = **((TCHAR **)str);
+
+    if ( !str ) return 0;
+    if ( !*str ) return 0;
+    if ( !code ) return 0;
+
+    if ( code > 0x80 )
+    {
+        code *= 256;
+        code += *((TCHAR *)(*str + 1));
+    }
+
+    return code;
+}
+
+int CatChar( TCHAR *str, int cc)
+{
+	int len = 0;
+	while( *str ) 
+	{
+		GetChar( &str );
+		len++;
+	}
+	SetChar( &str, cc );
+	*str = 0;
+	return (++len);
+}
+
+
+TCHAR *whitespaces = _T(" \t\n");
+
+///È¥µô¿Õ¸ñµÄº¯Êý
+void trim( TCHAR *buf, TCHAR *result )
+{
+	TCHAR * p;
+	if ( !buf || !result )
+		return;
+	p = strlen( buf ) + buf;
+	while ( (*buf) && strchr( whitespaces, *buf) ) buf++;
+	while( (p >= buf) && strchr( whitespaces, *p) ) p--;
+	while ( buf <= p ) *result++ = *buf++;
+	*result = 0;
+}
+
+TCHAR *next_token( TCHAR *buf, TCHAR *token, TCHAR *stopchars )
+{
+	if ( !stopchars )
+		stopchars = whitespaces;
+	int cc;
+	TCHAR *p = token;
+
+	while ( (cc = GetChar(&buf)) && (!strchr( stopchars, cc))  )
+		SetChar( &token, cc);			
+	SetChar( &token, 0);		
+	trim( p, p );
+
+	return buf;
+}
+
+
+CString GetPathName( const TCHAR * filename )
+{
+/*
+	CString path = filename;
+	TCHAR *file = path.GetBuffer(512);
+	TCHAR *p = file + strlen( file );
+	for ( ; *p != '\\' && *p != '/' && p > file; p-- );
+	if ( *p == '\\' || *p == '/') p++;
+	*p = 0;	
+	path.ReleaseBuffer();
+*/
+	TCHAR path[MAX_PATH];
+	strcpy_s( path, filename );
+	TCHAR *p = path + strlen( path );
+	for ( ; *p != _T('\\') && *p != _T('/') && p > path; p-- );
+	if ( *p == _T('\\') || *p == _T('/')) p++;
+	*p = 0;		
+	return CString(path);	
+}
+
+///»ñÈ¡ÎļþÀ©Õ¹Ãû
+const TCHAR * GetExt( const TCHAR * filename )
+{
+	const TCHAR *p = strlen(filename) + filename;
+	while( p > filename && *p != _T('.') ) p--;
+	if ( *p != _T('.') )
+		return _T("\0");
+	else
+		return p;
+}
+
+///»ñÈ¡ÎļþÀ©Õ¹Ãû
+CString GetFileName( const TCHAR * filename, int ext = 0)
+{
+/*
+	CString path = filename;
+	TCHAR *file = path.GetBuffer(512);
+	TCHAR *p = file + wcslen( file );
+	for ( ; *p != '\\' && *p != '/' && p > file; p-- );
+	if ( *p == '\\' || *p == '/') p++;
+	if ( !ext )
+	{
+		TCHAR *p1 = p;
+		while( *p1 && *p1 != '.' ) p1++;
+		*p1 = 0;	
+	}
+	path.ReleaseBuffer();
+	return p;	
+*/
+	TCHAR path[MAX_PATH];
+	strcpy_s( path, filename );
+	TCHAR *p  = path + strlen(path);
+	for ( ; *p != _T('\\') && *p != _T('/') && p > path; p-- );
+	if ( *p == _T('\\') || *p == _T('/')) p++;
+	if ( !ext )
+	{
+		TCHAR *p1 = p;
+		while( *p1 && *p1 != _T('.') ) p1++;
+		*p1 = 0;	
+	}
+	return CString(p);
+}
+
+typedef  HRESULT  (_stdcall *RegFunc)(void);
+
+BOOL	RegisterControl( const TCHAR * file, int reg )
+{
+	HMODULE hmod = LoadLibrary( file );
+	if ( !hmod )
+		return FALSE;
+
+	RegFunc func;
+	if ( reg )
+		func = (RegFunc)GetProcAddress( hmod, "DllRegisterServer" );
+	else
+		func = (RegFunc)GetProcAddress( hmod, "DllUnregisterServer" );
+	if ( func )
+	{
+		HRESULT hr = func();
+		FreeLibrary( hmod );
+		return S_OK == hr;
+	}
+	FreeLibrary( hmod );
+	return FALSE;	
+}
+
+
+//0:win9x
+//1:winnt
+//2:win2000/winxp
+//3:win32s
+int GetWindowVersion()
+{
+	DWORD ret;
+	DWORD dwVersion = GetVersion();
+	
+	// Get the Windows version.
+	
+	DWORD dwWindowsMajorVersion =  (DWORD)(LOBYTE(LOWORD(dwVersion)));
+//	DWORD dwWindowsMinorVersion =  (DWORD)(HIBYTE(LOWORD(dwVersion)));
+	
+	// Get the build number.
+	DWORD dwBuild;
+	if (dwVersion < 0x80000000)              // Windows NT/2000/XP
+	{
+		dwBuild = (DWORD)(HIWORD(dwVersion));
+		if ( dwBuild == 5 )
+			ret = 2;
+		else
+			ret = 1;
+	}
+	else if (dwWindowsMajorVersion < 4)      // Win32s
+	{
+		dwBuild = (DWORD)(HIWORD(dwVersion) & ~0x8000);
+		ret = 3;
+	}
+	else                                     // Windows 95/98/Me
+	{
+		dwBuild =  0;
+		ret = 0;
+	}
+	return ret;
+}
+
+
+CString GetSystemPath()
+{
+	CString systempath;
+	::GetWindowsDirectory(systempath.GetBuffer(MAX_PATH), MAX_PATH);
+	systempath.ReleaseBuffer();		
+	BOOL bWin9x = ( GetWindowVersion() == 0 );
+	if (systempath.Right(1) != _T("\\"))
+	{
+		//is win9x
+		if ( bWin9x )
+			systempath += _T("\\System\\");	
+		else			
+			systempath += _T("\\System32\\");	
+	}	
+	return systempath;
+}
+
+
+int debug_printf(TCHAR *fmt, ...);
+//be careful!
+void RecursiveDelete(CString szPath)
+{
+	CFileFind ff;
+	CString path = szPath;
+	
+	if(path.Right(1) != _T("\\"))
+		path += _T("\\");
+	
+	path += _T("*.*");
+	
+	BOOL res = ff.FindFile(path);
+	
+	///debug_printf("delete dir!:%s\n", (LPCSTR)szPath);
+	
+	while(res)
+	{
+		res = ff.FindNextFile();
+		if (!ff.IsDots() && !ff.IsDirectory())
+		{
+			DeleteFile(ff.GetFilePath());
+			
+		}
+		else if (ff.IsDirectory() && !ff.IsDots() )
+		{
+			path = ff.GetFilePath();
+			RecursiveDelete(path);
+			RemoveDirectory(path);
+		}
+	}
+}
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/StdAfx.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/StdAfx.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+//	gtalkphone.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+
+

Added: freeswitch/trunk/gtalkphone/StdAfx.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/StdAfx.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,90 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently,
+// but are changed infrequently
+
+#pragma once
+
+/* disable the following warnings 
+ * C4152: non standard extension, function/data ptr conversion in expression
+ * C4054: A function pointer is cast (possibly incorrectly) to a data pointer.
+ * C4100: The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored. 
+ * C4142: A type is redefined in a manner that has no effect on the generated code.
+ * C4200: Non standard extension C zero sized array
+ * C4204: nonstandard extension used : non-constant aggregate initializer 
+ * C4706: assignment within conditional expression
+ * C4055: type cast from data pointer to function pointer (apr carries function pointers as data pointers)
+ * C4214: nonstandard extension used : bit field types other than int
+ * C4819: The file contains a character that cannot be represented in the current code page
+ * C4132: 'object' : const object should be initialized (fires innapropriately for prototyped forward declaration of cost var)
+ */
+#pragma warning(disable:4152 4054 4100 4142 4200 4204 4706 4055 4214 4819 4132 4510 4610)
+
+#ifndef _SECURE_ATL
+#define _SECURE_ATL 1
+#endif
+
+#ifndef VC_EXTRALEAN
+#define VC_EXTRALEAN		// Exclude rarely-used stuff from Windows headers
+#endif
+
+// Modify the following defines if you have to target a platform prior to the ones specified below.
+// Refer to MSDN for the latest info on corresponding values for different platforms.
+#ifndef WINVER				// Allow use of features specific to Windows XP or later.
+#define WINVER 0x0501		// Change this to the appropriate value to target other versions of Windows.
+#endif
+
+#ifndef _WIN32_WINNT		// Allow use of features specific to Windows XP or later.                   
+#define _WIN32_WINNT 0x0501	// Change this to the appropriate value to target other versions of Windows.
+#endif						
+
+#ifndef _WIN32_WINDOWS		// Allow use of features specific to Windows 98 or later.
+#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
+#endif
+
+#ifndef _WIN32_IE			// Allow use of features specific to IE 6.0 or later.
+#define _WIN32_IE 0x0600	// Change this to the appropriate value to target other versions of IE.
+#endif
+
+#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS	// some CString constructors will be explicit
+
+// turns off MFC's hiding of some common and often safely ignored warning messages
+#define _AFX_ALL_WARNINGS
+
+#include <afxwin.h>         // MFC core and standard components
+#include <afxext.h>         // MFC extensions
+
+
+#include <afxdisp.h>        // MFC Automation classes
+
+
+
+#ifndef _AFX_NO_OLE_SUPPORT
+#include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
+#endif
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h>			// MFC support for Windows Common Controls
+#endif // _AFX_NO_AFXCMN_SUPPORT
+
+
+
+
+
+
+
+#include <afxdhtml.h>        // HTML Dialogs
+#include <windows.h>
+
+
+#ifdef _UNICODE
+#if defined _M_IX86
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#elif defined _M_IA64
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#elif defined _M_X64
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#else
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#endif
+#endif
+
+

Added: freeswitch/trunk/gtalkphone/const.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/const.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,8 @@
+#ifndef _CONST_H
+#define _CONST_H
+ 
+#define MAIN_FRAME_WIDTH  400
+#define MAIN_FRAME_HEIGH  550
+
+
+#endif
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/freeswitch.xml
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/freeswitch.xml	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,140 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+  <section name="configuration" description="Various Configuration">
+    <configuration name="modules.conf" description="Modules">
+      <modules>
+        <!-- Loggers (I'd load these first) -->
+        <load module="mod_console"/>
+        
+        <!-- Endpoints -->
+        <load module="mod_exosip"/>
+        <load module="mod_portaudio"/>
+        <load module="mod_dingaling"/>
+        
+        <!-- Applications -->
+        <load module="mod_bridgecall"/>
+        <load module="mod_commands"/>
+        
+        <!-- Dialplan Interfaces -->
+        <load module="mod_dialplan_xml"/>
+        <!-- <load module="mod_dialplan_directory"/> -->
+
+        <!-- Codec Interfaces -->
+        <load module="mod_g711"/>
+        <load module="mod_gsm"/>
+        <load module="mod_l16"/>
+        
+        </modules>
+    </configuration>
+  
+    <configuration name="console.conf" description="Console Logger">
+      <!-- pick a file name, a function name or 'all' -->
+      <!-- map as many as you need for specific debugging -->
+      <mappings>
+      <!-- <param name="log_event" value="DEBUG"/> -->
+      <param name="all" value="DEBUG"/>
+      </mappings>
+    </configuration>
+  
+    <configuration name="exosip.conf" description="Exosip Endpoint">
+      <settings>
+        <param name="port" value="5060"/>
+        <param name="dialplan" value="XML"/>
+        <param name="dtmf-duration" value="100"/>
+        <param name="codec-prefs" value="PCMU,PCMA"/>
+	<!-- Payload number to bind DTMF to-->
+        <param name="rfc2833-pt" value="101"/>
+	<!-- disable to trade async for more calls -->
+				<param name="use-rtp-timer" value="true"/>
+        <!-- pick one (default if not specified is 'guess'); -->
+        <param name="rtp-ip" value="guess"/>
+        <!-- <param name-"rtp-ip" value="10.0.0.1"/> -->
+        <!-- leave commented or 0.0.0.0 for all ip -->
+        <!-- <param name="sip-ip" value="127.0.0.1"/> -->
+  
+        <!-- optional ; -->
+        <!-- <param name="ext-rtp-ip" value="stun:stun.server.com"/> -->
+        <!-- <param name="ext-rtp-ip" value="100.101.102.103"/> -->
+  
+        <!-- specify 'myrealm' with certian key -->
+        <!-- use !myrealm! at beginning of url to activate -->
+        <!-- exosip/!myrealm!1000 at dest -->
+        <!-- srtp:<param name="myrealm" value="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"/> -->
+  
+        <!-- VAD choose one (out is a good choice); -->
+        <!-- <param name="vad" value="in"/> -->
+        <!-- <param name="vad" value="out"/> -->
+        <!-- <param name="vad" value="both"/> -->
+      </settings>
+    </configuration>
+
+    <configuration name="portaudio.conf" description="Soundcard Endpoint">
+      <settings>
+        <param name="debug" value="2"/>
+        <param name="dialplan" value="XML"/>
+  
+        <!-- partial string match on something in the name or the device # -->
+        <param name="indev" value="USB"/>
+        <param name="outdev" value="USB"/>
+  
+        <param name="cid-name" value="FreeSwitch"/>
+        <param name="cid-num" value="5555551212"/>
+      </settings>
+    </configuration>
+  
+    <configuration name="dingaling.conf" description="XMPP Jingle Endpoint">
+      <settings>
+        <param name="debug" value="0"/>
+        <param name="codec-prefs" value="PCMU"/>
+      </settings>
+    </configuration>
+
+    <configuration name="xml_rpc.conf" description="XML RPC">
+      <settings>
+	<!-- The port where you want to run the http service (default 8080) -->
+	<param name="http-port" value="8080"/>
+        <!-- The url to a gateway cgi that can generate xml similar to
+        what's in this file only on-the-fly (leave it commented if you dont
+        need it) -->
+	<!-- one or more |-delim of configuration|directory|dialplan -->
+        <!-- <param name="gateway-url" value="http://www.server.com/gateway.cgi" bindings="configuration"/> -->
+      </settings>
+    </configuration>
+  </section>
+  <section name="dialplan" description="Regex/XML Dialplan">
+    <!-- Valid fields in conditions:
+         "dialplan, caller_id_name, ani, ani2, caller_id_number,
+          network_addr, rdnis, destination_number, uuid, source,
+          context, chan_name" -->
+
+    <!-- *NOTE* The special context name 'any' will match any context -->
+  <context name="default">
+    <extension name="PSTN Termination">
+      <condition field="source" expression="mod_portaudio"/>
+      <condition field="destination_number" expression="(.*)">
+        <action application="bridge" data="$1"/>
+      </condition>
+     </extension>
+
+    <extension name="Inbound Calls">
+      <condition field="destination_number" expression="(.*)">
+        <action application="bridge" data="portaudio"/>
+      </condition>
+     </extension>
+
+     <extension name="devconf">
+       <condition field="destination_number" expression="^888$">
+         <action application="bridge" data="exosip/888 at 66.250.68.194"/>
+       </condition>
+     </extension>
+
+    </context>
+  </section>
+
+  <section name="directory" description="User Directory">
+  </section>
+
+</document>
+      
+
+

Added: freeswitch/trunk/gtalkphone/freeswitch/include/freeswitch.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/freeswitch/include/freeswitch.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,40 @@
+#ifndef _FREESWITCH_H
+#define _FREESWITCH_H
+#include <switch.h>
+extern "C" {
+#define UM_FREESWITCH_EVENT            10000
+
+#define DL_EVENT_LOGIN_SUCCESS "dingaling::login_success"
+#define DL_EVENT_LOGIN_FAILURE "dingaling::login_failure"
+#define DL_EVENT_MESSAGE "dingaling::message"
+#define PA_EVENT_RING "portaudio::ringing"
+#define PA_EVENT_INFO "call_id"
+#define CMDLEN 255
+class FreeswitchCall
+{
+public:
+    static bool get_load_status();
+	static int freeswitch_shutdown();
+	static int freeswitch_init();
+	static int freeswitch_login(char* userid,char* password,int issave);
+	static int freeswitch_logout();
+	static int get_userinfo(char *userid,char *password,int &issave);
+	static int freeswitch_hangup();
+public:
+	FreeswitchCall(char *extension);
+	FreeswitchCall(int incallid);//for incoming call
+	~FreeswitchCall();
+	int freeswitch_send_dtmf(char *digits);
+	int freeswitch_answercall();
+private:
+	int callid;
+	char retbuf[100];
+	int retlen ;
+	int freeswitch_call(char *extension);
+	int freeswitch_hangup(char* callnum);
+	int freeswitch_answercall(char* callnum);
+	int freeswitch_send_dtmf(char *callnum, char *digits);	
+};
+extern HWND mm_event_hwnd;
+}
+#endif
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/freeswitch/source/freeswitch.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/freeswitch/source/freeswitch.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,464 @@
+#include "stdafx.h"
+#include "freeswitch.h"
+static char *ppath= "log.txt";
+static char *err = NULL;
+static switch_event *pevent;
+static bool isLoaded=false;
+static int write_to_conf_file(char* userid,char* password,int issave);
+static void get_internet_ip(char *outip);
+static void event_callback(switch_event_t *event);
+HWND mm_event_hwnd=NULL;
+FreeswitchCall::FreeswitchCall(char *extension)
+{
+	retlen = 100;
+	callid = freeswitch_call(extension);
+	/*char acNum[100];
+	sprintf(acNum,"gtalkphone%d",callid);*/
+}
+FreeswitchCall::FreeswitchCall(int incallid)//for incoming call
+{
+	callid = incallid;
+	/*char acNum[10];
+	sprintf(acNum,"%d",callid);
+	freeswitch_answercall(acNum);*/
+}
+FreeswitchCall::~FreeswitchCall()
+{
+	char acNum[10];
+	sprintf(acNum,"%d",callid);
+	freeswitch_hangup(acNum);
+}
+bool FreeswitchCall::get_load_status()
+{
+	return isLoaded;
+}
+int FreeswitchCall::freeswitch_init()
+{
+	const char *err = NULL;
+    if(isLoaded) return 0;
+	//if(!write_to_conf_file(userid,password))
+	//	return 255;
+	switch_core_set_globals();
+	char path_buf[1024];
+	snprintf(path_buf, sizeof(path_buf), "%s/%s", SWITCH_GLOBAL_dirs.log_dir, ppath);
+	FILE *f = fopen(path_buf,"w+");
+	if(f)
+	{
+		fclose(f);
+	}
+	if (switch_core_init(ppath, &err) != SWITCH_STATUS_SUCCESS) {
+		//Add code here to handle the actual init error message
+		return 255;
+	}
+    
+	if (switch_event_bind("gtalkphone_main", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_callback, NULL) !=
+		SWITCH_STATUS_SUCCESS) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
+		return 255;
+	}
+	/*if (switch_event_bind("mod_dingaling", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_callback, NULL) !=
+		SWITCH_STATUS_SUCCESS) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
+		return 255;
+	}*/
+	if (switch_loadable_module_init() != SWITCH_STATUS_SUCCESS) {
+		return 255;
+	}
+    isLoaded = true;
+	return 0;
+}
+int FreeswitchCall::freeswitch_hangup()
+{
+	char *cmd = "pahup";
+	char *arg = NULL;
+    char *retbuf = (char*)malloc(CMDLEN);
+     switch_stream_handle_t stream = {0};
+     memset(retbuf, 0, CMDLEN);
+     stream.data = retbuf;
+     stream.end = stream.data;
+     stream.data_size = CMDLEN;
+     stream.write_function = switch_console_stream_write;
+     switch_api_execute(cmd, arg,NULL, &stream);
+    if(retbuf!=NULL)
+		free(retbuf);
+	//switch_api_execute(cmd, arg, retbuf, retlen);
+	return 0;
+}
+int FreeswitchCall::freeswitch_shutdown()
+{
+	if(!isLoaded) return 0;
+	isLoaded = false;
+	switch_loadable_module_shutdown();
+	switch_core_destroy();
+	return 0;
+}
+int FreeswitchCall::freeswitch_answercall()
+{
+	char acNum[10];
+	sprintf(acNum,"%d",callid);
+	freeswitch_answercall(acNum);
+	return 0;
+}
+int FreeswitchCall::freeswitch_call(char *extension)
+{
+	char *cmd = "pacall";
+	callid=0;
+
+	//We need to add check here for value of return buff, possible values:
+	// "SUCCESS: 0" where 0 is the call number.  We need the call number to properly hang up calls and send dtmf
+	// "FAIL"
+     char *retbuf = (char*)malloc(CMDLEN);
+     switch_stream_handle_t stream = {0};
+     memset(retbuf, 0, CMDLEN);
+     stream.data = retbuf;
+     stream.end = stream.data;
+     stream.data_size = CMDLEN;
+     stream.write_function = switch_console_stream_write;
+     switch_api_execute(cmd, extension,NULL, &stream);
+
+	//switch_api_execute(cmd, extension, retbuf, retlen);
+	sscanf(retbuf,"SUCCESS: %d",&callid);
+    if(retbuf!=NULL)
+		free(retbuf);
+	return callid;
+}
+int FreeswitchCall::freeswitch_login(char* userid,char* password,int issave)
+{
+	write_to_conf_file(userid,password,issave);
+	char *cmd = "dl_login";
+	char internet_ip[20] ={0};
+	int nat = 0;
+	size_t argLen;
+	get_internet_ip(internet_ip);
+	if (internet_ip[0] == '\0') {
+		sprintf(internet_ip, "0.0.0.0");
+		argLen = strlen("name=jingle;")+strlen("login=")+strlen(userid)+strlen("@gtalkphone.com/talk;password=")+strlen(password)+strlen(";dialplan=XML;message=Jingle all the way;rtp-ip=")+strlen("0.0.0.0;ext-rtp-ip=stun:stun.fwdnet.net")+strlen(";exten=888")+1;
+		nat = 1;
+	} else {
+		argLen = strlen("name=jingle;")+strlen("login=")+strlen(userid)+strlen("@gtalkphone.com/talk;password=")+strlen(password)+strlen(";dialplan=XML;message=Jingle all the way;rtp-ip=")+strlen(internet_ip)+strlen(";exten=888")+1;
+	}
+	
+	char *arg =(char*)malloc(argLen);
+    char *retbuf = (char*)malloc(CMDLEN);
+     switch_stream_handle_t stream = {0};
+     memset(retbuf, 0, CMDLEN);
+	 memset(arg,0,argLen);
+	 strcpy(arg,"name=jingle;login=");
+	 strcat(arg,userid);
+	 if(strstr(userid,"@")==NULL)
+	 {
+		 strcat(arg,"@gtalkphone.com");
+	 }
+	 strcat(arg,"/talk");
+	 strcat(arg,";");
+	 strcat(arg,"password=");
+	 strcat(arg,password);
+	 strcat(arg,";dialplan=XML;message=Jingle all the way;rtp-ip=");
+	 strcat(arg,internet_ip);
+	 if (nat == 1) {
+		 strcat(arg,";ext-rtp-ip=stun:stun.fwdnet.net");
+	 }
+	 strcat(arg,";exten=888");
+     stream.data = retbuf;
+     stream.end = stream.data;
+     stream.data_size = CMDLEN;
+     stream.write_function = switch_console_stream_write;
+     switch_api_execute(cmd, arg,NULL, &stream);
+    if(retbuf!=NULL)
+		free(retbuf);
+	if(arg!=NULL)
+		free(arg);
+	//switch_api_execute(cmd, arg, retbuf, retlen);
+	return 0;
+}
+int FreeswitchCall::freeswitch_logout()
+{
+	char *cmd = "dl_logout";
+    char *retbuf = (char*)malloc(CMDLEN);
+     switch_stream_handle_t stream = {0};
+     memset(retbuf, 0, CMDLEN);
+     stream.data = retbuf;
+     stream.end = stream.data;
+     stream.data_size = CMDLEN;
+     stream.write_function = switch_console_stream_write;
+     switch_api_execute(cmd, "jingle",NULL, &stream);
+    if(retbuf!=NULL)
+		free(retbuf);
+	//switch_api_execute(cmd, arg, retbuf, retlen);
+	return 0;
+}
+int FreeswitchCall::freeswitch_hangup(char* callnum)
+{
+	char *cmd = "pahup";
+	char *arg = NULL;
+	if (callnum) {
+		arg = callnum;
+	}
+    char *retbuf = (char*)malloc(CMDLEN);
+     switch_stream_handle_t stream = {0};
+     memset(retbuf, 0, CMDLEN);
+     stream.data = retbuf;
+     stream.end = stream.data;
+     stream.data_size = CMDLEN;
+     stream.write_function = switch_console_stream_write;
+     switch_api_execute(cmd, arg,NULL, &stream);
+    if(retbuf!=NULL)
+		free(retbuf);
+	//switch_api_execute(cmd, arg, retbuf, retlen);
+	return 0;
+}
+int FreeswitchCall::freeswitch_answercall(char* callnum)
+{
+	char *cmd = "paoffhook";
+	char *arg = callnum;
+    char *retbuf = (char*)malloc(CMDLEN);
+     switch_stream_handle_t stream = {0};
+     memset(retbuf, 0, CMDLEN);
+     stream.data = retbuf;
+     stream.end = stream.data;
+     stream.data_size = CMDLEN;
+     stream.write_function = switch_console_stream_write;
+     switch_api_execute(cmd, arg,NULL, &stream);
+    if(retbuf!=NULL)
+		free(retbuf);
+	//switch_api_execute(cmd, arg, retbuf, retlen);
+	return 0;
+}
+int FreeswitchCall::freeswitch_send_dtmf(char *callnum, char *digits)
+{
+	char *cmd = "padtmf";
+	char arg[100];
+	snprintf(arg, 100, "%s %s", callnum, digits);
+	
+    
+    char *retbuf = (char*)malloc(CMDLEN);
+     switch_stream_handle_t stream = {0};
+     memset(retbuf, 0, CMDLEN);
+     stream.data = retbuf;
+     stream.end = stream.data;
+     stream.data_size = CMDLEN;
+     stream.write_function = switch_console_stream_write;
+     switch_api_execute(cmd, arg, NULL,&stream);
+    if(retbuf!=NULL)
+		free(retbuf);
+	//switch_api_execute(cmd, arg, retbuf, retlen);
+	return 0;
+}
+
+int FreeswitchCall::freeswitch_send_dtmf(char *digits)
+{	
+	char acNum[10];
+	sprintf(acNum,"%d",callid);
+	freeswitch_send_dtmf(acNum,digits);
+	return 0;
+}
+int write_to_conf_file(char* userid,char* password,int issave)
+{
+	/*FILE *f;
+	char path_buf[1024];
+	snprintf(path_buf, sizeof(path_buf), "%s/%s", SWITCH_GLOBAL_dirs.conf_dir, "dingaling.conf");
+	f = fopen(path_buf,"w+");
+	if(!f)
+	{
+		AfxMessageBox("Error!Can't create dingaling.conf file!");
+		return 0;
+	}
+	fputs("[settings]\n",f);
+	fputs("debug => 0\n",f);
+	fputs("codec_prefs => PCMU\n",f);
+	fputs("[interface]\n",f);
+	fputs("name => google\n",f);
+	fprintf(f,"login => %s at jabber.asterlink.com/talk\n",userid);
+	fprintf(f,"password => %s\n",password);
+	fputs("dialplan => demo\n",f);
+	fputs("message => Jingle all the way\n",f);
+	fputs("rtp-ip => 0.0.0.0\n",f);
+	fputs("ext-rtp-ip => stun:stun.server.com\n",f);
+	fputs("exten => 1000\n",f);
+	fclose(f);*/
+	
+    HKEY hKey=NULL;
+	DWORD dwLen=0;
+	TCHAR szKey[255];
+	BOOL bRet = 0;
+	DWORD dwType = 0;
+	sprintf(szKey,_T("SOFTWARE\\GtalkPhone"));
+	if(RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen)!=ERROR_SUCCESS)
+	{
+		return 1;
+	}
+	dwType = REG_SZ;
+	dwLen     = (DWORD)strlen(userid)+1;	
+	if(RegSetValueEx(hKey,_T("USERID"),0,dwType,(LPBYTE)userid,dwLen)!=ERROR_SUCCESS)
+	{
+		bRet = 1;
+	}
+	dwLen     = (DWORD)strlen(password)+1;
+	if(RegSetValueEx(hKey,_T("PASSWORD"),0,dwType,(LPBYTE)password,dwLen)!=ERROR_SUCCESS)
+	{
+		bRet = 1;
+	}
+	dwType = REG_DWORD;
+	dwLen = sizeof(DWORD);
+	DWORD dwtmp=issave;
+	if(RegSetValueEx(hKey,_T("ISSAVE"),0,dwType,(LPBYTE)(&dwtmp),dwLen)!=ERROR_SUCCESS)
+	{
+		bRet = 1;
+	}
+	RegCloseKey(hKey);
+    return 0;
+}
+int FreeswitchCall::get_userinfo(char *userid,char *password,int &issave)
+{
+	/*switch_core_set_globals();
+	if(!userid) return 0;
+	if(!password) return 0;
+	
+	switch_config_t cfg;
+	char *var, *val;
+	char *cf = "dingaling.conf";
+
+
+	if (!switch_config_open_file(&cfg, cf)) {
+		//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
+		return 0;
+	}
+
+	while (switch_config_next_pair(&cfg, &var, &val)) {
+		if (!strcasecmp(cfg.category, "interface")) {
+			if (!strcmp(var, "login")) {
+				char *p=strchr(val, '@');
+				if(p) (*p) = '\0';
+				switch_copy_string(userid, val, 256);
+			} else if (!strcmp(var, "password")) {
+				switch_copy_string(password, val, 256);
+			} 
+		}
+	}
+
+	switch_config_close_file(&cfg);
+*/
+	if(!userid) return 0;
+	if(!password) return 0;
+	(*userid) = '\0';
+	(*password) = '\0';
+	HKEY hKey=NULL;
+	DWORD dwLen=255;
+	TCHAR szKey[255];
+	LONG lRet = 0;
+	DWORD dwType =REG_SZ;
+	sprintf(szKey,_T("SOFTWARE\\GtalkPhone"));
+	if(RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen)!=ERROR_SUCCESS)
+	{
+		return FALSE;
+	}
+	lRet = RegQueryValueEx(hKey,_T("USERID"),0,&dwType,(LPBYTE)userid,&dwLen);
+	lRet = RegQueryValueEx(hKey,_T("USERID"),0,&dwType,(LPBYTE)userid,&dwLen);
+	lRet = RegQueryValueEx(hKey,_T("PASSWORD"),0,&dwType,(LPBYTE)password,&dwLen);
+	dwType = REG_DWORD;
+	dwLen = sizeof(DWORD);
+	DWORD dwtmp=0;
+	lRet = RegQueryValueEx(hKey,_T("ISSAVE"),0,&dwType,(LPBYTE)(&dwtmp),&dwLen);
+	issave = dwtmp;
+	RegCloseKey(hKey);
+	return 0;
+}
+void event_callback(switch_event_t *event)
+{
+	TRACE("event coming!\n");
+	if(event->event_id==SWITCH_EVENT_MODULE_LOAD) 
+		return;
+	if(mm_event_hwnd!=NULL)
+	{
+		SendMessage(mm_event_hwnd,UM_FREESWITCH_EVENT,NULL,(LPARAM)event);
+	}
+}
+void get_internet_ip(char *outip)
+{
+	 char szHostName[128];
+
+ BOOL bPrivateAdr = false; // Private Address area
+ BOOL bClassA = false;     // Class A definition
+ BOOL bClassB = false;     // Class B definition
+ BOOL bClassC = false;     // Class C definition
+ BOOL bAutoNet = false;    // AutoNet definition
+ CString str;
+
+ if (gethostname(szHostName, 128) == 0 )
+ {
+  // Get host adresses
+  struct hostent * pHost;
+  int i;
+  UINT ipb;
+  pHost = gethostbyname(szHostName);
+
+  for (i = 0;
+       pHost!= NULL && pHost->h_addr_list[i]!= NULL;
+       i++ )
+  {
+   int j;
+   str="";
+   bClassA = bClassB = bClassC = false;
+   for( j = 0; j < pHost->h_length; j++ )
+   {
+    CString addr;
+
+    if( j > 0 )	str += ".";
+    ipb = (unsigned int)((unsigned char*)pHost->h_addr_list[i])[j];
+
+    // Define the IP range for exclusion
+    if(j==0)
+    {
+     if(bClassA = (ipb == 10)) break; // Class A defined
+     bClassB = (ipb == 172);
+     bClassC = (ipb == 192);
+     bAutoNet = (ipb == 169);
+    }
+    else if (j==1)
+    {
+     // Class B defined
+     if(bClassB = (bClassB && ipb >= 16 && ipb <= 31)) break;
+
+     // Class C defined
+     if(bClassC = (bClassC && ipb == 168)) break;
+
+     //AutoNet pasibility defined
+     if(bAutoNet = (bAutoNet && ipb == 254)) break;
+    }
+
+    addr.Format("%u", ipb );
+    str += addr;
+   }
+   // If any address of Private Address 
+   // area has been found bPrivateAdr = true
+   bPrivateAdr = bPrivateAdr || bClassA || bClassB || bClassC;
+
+   // If any address of Internet Address area 
+   // has been found returns TRUE
+   if (!bClassA
+   && !bClassB
+   && !bClassC
+   && !bAutoNet
+   && str != "127.0.0.1"
+   && !str.IsEmpty())
+   {
+	   sprintf(outip,"%u.%u.%u.%u",(unsigned int)((unsigned char*)pHost->h_addr_list[i])[0],
+		   (unsigned int)((unsigned char*)pHost->h_addr_list[i])[1],(unsigned int)((unsigned char*)pHost->h_addr_list[i])[2],
+		   (unsigned int)((unsigned char*)pHost->h_addr_list[i])[3]);
+       return;
+   }
+  }
+ }
+/*
+ if (bPrivateAdr)
+ {
+  // The system has IP address from Private Address
+  // area,only. Internet from the computer can be accessable
+  // via Proxy. If user turn on proxy connection flag, the
+  // function believe Internet accessable.
+  return bProxyConnection;
+ }*/
+outip[0] = '\0';
+ return ;
+
+}
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/google/HYPERLINK.CPP
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/HYPERLINK.CPP	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,428 @@
+// HyperLink.cpp : implementation file
+//
+// HyperLink static control. Will open the default browser with the given URL
+// when the user clicks on the link.
+//
+// Copyright (C) 1997, 1998 Chris Maunder (chrismaunder at codeguru.com)
+// All rights reserved. May not be sold for profit.
+//
+// Thanks to Pål K. Tønder for auto-size and window caption changes.
+//
+// "GotoURL" function by Stuart Patterson
+// As seen in the August, 1997 Windows Developer's Journal.
+// Copyright 1997 by Miller Freeman, Inc. All rights reserved.
+// Modified by Chris Maunder to use TCHARs instead of chars.
+//
+// "Default hand cursor" from Paul DiLascia's Jan 1998 MSJ article.
+//
+
+#include "stdafx.h"
+#include "HyperLink.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+#define TOOLTIP_ID 1
+
+/////////////////////////////////////////////////////////////////////////////
+// CHyperLink
+
+CHyperLink::CHyperLink()
+{
+    m_hLinkCursor       = NULL;                 // No cursor as yet
+    m_crLinkColour      = RGB(  0,   0, 238);   // Blue
+    m_crVisitedColour   = RGB( 85,  26, 139);   // Purple
+    m_crHoverColour     = ::GetSysColor(COLOR_HIGHLIGHT);
+    m_bOverControl      = FALSE;                // Cursor not yet over control
+    m_bVisited          = FALSE;                // Hasn't been visited yet.
+    m_bUnderline        = TRUE;                 // Underline the link?
+    m_bAdjustToFit      = TRUE;                 // Resize the window to fit the text?
+    m_strURL.Empty();
+}
+
+CHyperLink::~CHyperLink()
+{
+    m_Font.DeleteObject();
+}
+
+BEGIN_MESSAGE_MAP(CHyperLink, CStatic)
+    //{{AFX_MSG_MAP(CHyperLink)
+    ON_CONTROL_REFLECT(STN_CLICKED, OnClicked)
+    ON_WM_CTLCOLOR_REFLECT()
+    ON_WM_SETCURSOR()
+    ON_WM_MOUSEMOVE()
+    //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CHyperLink message handlers
+
+BOOL CHyperLink::PreTranslateMessage(MSG* pMsg) 
+{
+    m_ToolTip.RelayEvent(pMsg);
+    return CStatic::PreTranslateMessage(pMsg);
+}
+
+void CHyperLink::OnClicked()
+{
+    int result = (int)GotoURL(m_strURL, SW_SHOW);
+    m_bVisited = (result > HINSTANCE_ERROR);
+    if (!m_bVisited) {
+        MessageBeep(MB_ICONEXCLAMATION);     // Unable to follow link
+        ReportError(result);
+    } else 
+        SetVisited();                        // Repaint to show visited colour
+}
+
+HBRUSH CHyperLink::CtlColor(CDC* pDC, UINT nCtlColor) 
+{
+    ASSERT(nCtlColor == CTLCOLOR_STATIC);
+
+    if (m_bOverControl)
+        pDC->SetTextColor(m_crHoverColour);
+    else if (m_bVisited)
+        pDC->SetTextColor(m_crVisitedColour);
+    else
+        pDC->SetTextColor(m_crLinkColour);
+
+    // transparent text.
+    pDC->SetBkMode(TRANSPARENT);
+    return (HBRUSH)GetStockObject(NULL_BRUSH);
+}
+
+void CHyperLink::OnMouseMove(UINT nFlags, CPoint point) 
+{
+    CStatic::OnMouseMove(nFlags, point);
+
+    if (m_bOverControl)        // Cursor is currently over control
+    {
+        CRect rect;
+        GetClientRect(rect);
+
+        if (!rect.PtInRect(point))
+        {
+            m_bOverControl = FALSE;
+            ReleaseCapture();
+            RedrawWindow();
+            return;
+        }
+    }
+    else                      // Cursor has just moved over control
+    {
+        m_bOverControl = TRUE;
+        RedrawWindow();
+        SetCapture();
+    }
+}
+
+BOOL CHyperLink::OnSetCursor(CWnd* /*pWnd*/, UINT /*nHitTest*/, UINT /*message*/) 
+{
+    if (m_hLinkCursor)
+    {
+        ::SetCursor(m_hLinkCursor);
+        return TRUE;
+    }
+    return FALSE;
+}
+
+void CHyperLink::PreSubclassWindow() 
+{
+    // We want to get mouse clicks via STN_CLICKED
+    DWORD dwStyle = GetStyle();
+    ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle | SS_NOTIFY);
+    
+    // Set the URL as the window text
+    if (m_strURL.IsEmpty())
+        GetWindowText(m_strURL);
+
+    // Check that the window text isn't empty. If it is, set it as the URL.
+    CString strWndText;
+    GetWindowText(strWndText);
+    if (strWndText.IsEmpty()) {
+        ASSERT(!m_strURL.IsEmpty());    // Window and URL both NULL. DUH!
+        SetWindowText(m_strURL);
+    }
+
+    // Create the font
+    LOGFONT lf;
+    GetFont()->GetLogFont(&lf);
+    lf.lfUnderline = m_bUnderline;
+    m_Font.CreateFontIndirect(&lf);
+    SetFont(&m_Font);
+
+    PositionWindow();        // Adjust size of window to fit URL if necessary
+    SetDefaultCursor();      // Try and load up a "hand" cursor
+
+    // Create the tooltip
+    CRect rect; 
+    GetClientRect(rect);
+    m_ToolTip.Create(this);
+    m_ToolTip.AddTool(this, m_strURL, rect, TOOLTIP_ID);
+
+    CStatic::PreSubclassWindow();
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CHyperLink operations
+
+void CHyperLink::SetURL(CString strURL)
+{
+    m_strURL = strURL;
+
+    if (::IsWindow(GetSafeHwnd())) {
+        PositionWindow();
+        m_ToolTip.UpdateTipText(strURL, this, TOOLTIP_ID);
+    }
+}
+
+CString CHyperLink::GetURL() const
+{ 
+    return m_strURL;   
+}
+
+void CHyperLink::SetColours(COLORREF crLinkColour, COLORREF crVisitedColour,
+                            COLORREF crHoverColour /* = -1 */) 
+{ 
+    m_crLinkColour    = crLinkColour; 
+    m_crVisitedColour = crVisitedColour;
+
+	if (crHoverColour == -1)
+		m_crHoverColour = ::GetSysColor(COLOR_HIGHLIGHT);
+	else
+		m_crHoverColour = crHoverColour;
+
+    if (::IsWindow(m_hWnd))
+        Invalidate(); 
+}
+
+COLORREF CHyperLink::GetLinkColour() const
+{ 
+    return m_crLinkColour; 
+}
+
+COLORREF CHyperLink::GetVisitedColour() const
+{
+    return m_crVisitedColour; 
+}
+
+COLORREF CHyperLink::GetHoverColour() const
+{
+    return m_crHoverColour;
+}
+
+void CHyperLink::SetVisited(BOOL bVisited /* = TRUE */) 
+{ 
+    m_bVisited = bVisited; 
+
+    if (::IsWindow(GetSafeHwnd()))
+        Invalidate(); 
+}
+
+BOOL CHyperLink::GetVisited() const
+{ 
+    return m_bVisited; 
+}
+
+void CHyperLink::SetLinkCursor(HCURSOR hCursor)
+{ 
+    m_hLinkCursor = hCursor;
+    if (m_hLinkCursor == NULL)
+        SetDefaultCursor();
+}
+
+HCURSOR CHyperLink::GetLinkCursor() const
+{
+    return m_hLinkCursor;
+}
+
+void CHyperLink::SetUnderline(BOOL bUnderline /* = TRUE */)
+{
+    m_bUnderline = bUnderline;
+
+    if (::IsWindow(GetSafeHwnd()))
+    {
+        LOGFONT lf;
+        GetFont()->GetLogFont(&lf);
+        lf.lfUnderline = m_bUnderline;
+
+        m_Font.DeleteObject();
+        m_Font.CreateFontIndirect(&lf);
+        SetFont(&m_Font);
+
+        Invalidate(); 
+    }
+}
+
+BOOL CHyperLink::GetUnderline() const
+{ 
+    return m_bUnderline; 
+}
+
+void CHyperLink::SetAutoSize(BOOL bAutoSize /* = TRUE */)
+{
+    m_bAdjustToFit = bAutoSize;
+
+    if (::IsWindow(GetSafeHwnd()))
+        PositionWindow();
+}
+
+BOOL CHyperLink::GetAutoSize() const
+{ 
+    return m_bAdjustToFit; 
+}
+
+
+// Move and resize the window so that the window is the same size
+// as the hyperlink text. This stops the hyperlink cursor being active
+// when it is not directly over the text. If the text is left justified
+// then the window is merely shrunk, but if it is centred or right
+// justified then the window will have to be moved as well.
+//
+// Suggested by Pål K. Tønder 
+
+void CHyperLink::PositionWindow()
+{
+    if (!::IsWindow(GetSafeHwnd()) || !m_bAdjustToFit) 
+        return;
+
+    // Get the current window position
+    CRect rect;
+    GetWindowRect(rect);
+
+    CWnd* pParent = GetParent();
+    if (pParent)
+        pParent->ScreenToClient(rect);
+
+    // Get the size of the window text
+    CString strWndText;
+    GetWindowText(strWndText);
+
+    CDC* pDC = GetDC();
+    CFont* pOldFont = pDC->SelectObject(&m_Font);
+    CSize Extent = pDC->GetTextExtent(strWndText);
+    pDC->SelectObject(pOldFont);
+    ReleaseDC(pDC);
+
+    // Get the text justification via the window style
+    DWORD dwStyle = GetStyle();
+
+    // Recalc the window size and position based on the text justification
+    if (dwStyle & SS_CENTERIMAGE)
+        rect.DeflateRect(0, (rect.Height() - Extent.cy)/2);
+    else
+        rect.bottom = rect.top + Extent.cy;
+
+    if (dwStyle & SS_CENTER)   
+        rect.DeflateRect((rect.Width() - Extent.cx)/2, 0);
+    else if (dwStyle & SS_RIGHT) 
+        rect.left  = rect.right - Extent.cx;
+    else // SS_LEFT = 0, so we can't test for it explicitly 
+        rect.right = rect.left + Extent.cx;
+
+    // Move the window
+    SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOZORDER);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CHyperLink implementation
+
+// The following appeared in Paul DiLascia's Jan 1998 MSJ articles.
+// It loads a "hand" cursor from the winhlp32.exe module
+void CHyperLink::SetDefaultCursor()
+{
+    if (m_hLinkCursor == NULL)                // No cursor handle - load our own
+    {
+        // Get the windows directory
+        CString strWndDir;
+        GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH);
+        strWndDir.ReleaseBuffer();
+
+        strWndDir += _T("\\winhlp32.exe");
+        // This retrieves cursor #106 from winhlp32.exe, which is a hand pointer
+        HMODULE hModule = LoadLibrary(strWndDir);
+        if (hModule) {
+            HCURSOR hHandCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106));
+            if (hHandCursor)
+                m_hLinkCursor = CopyCursor(hHandCursor);
+        }
+        FreeLibrary(hModule);
+    }
+}
+
+LONG CHyperLink::GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata)
+{
+    HKEY hkey;
+    LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey);
+
+    if (retval == ERROR_SUCCESS) {
+        long datasize = MAX_PATH;
+        TCHAR data[MAX_PATH];
+        RegQueryValue(hkey, NULL, data, &datasize);
+        lstrcpy(retdata,data);
+        RegCloseKey(hkey);
+    }
+
+    return retval;
+}
+
+void CHyperLink::ReportError(int nError)
+{
+    /*CString str;
+    switch (nError) {
+        case 0:                       str = _T("The operating system is out\nof memory or resources."; break;
+        case SE_ERR_PNF:              str = "The specified path was not found."; break;
+        case SE_ERR_FNF:              str = "The specified file was not found."; break;
+        case ERROR_BAD_FORMAT:        str = "The .EXE file is invalid\n(non-Win32 .EXE or error in .EXE image)."; break;
+        case SE_ERR_ACCESSDENIED:     str = "The operating system denied\naccess to the specified file."; break;
+        case SE_ERR_ASSOCINCOMPLETE:  str = "The filename association is\nincomplete or invalid."; break;
+        case SE_ERR_DDEBUSY:          str = "The DDE transaction could not\nbe completed because other DDE transactions\nwere being processed."; break;
+        case SE_ERR_DDEFAIL:          str = "The DDE transaction failed."; break;
+        case SE_ERR_DDETIMEOUT:       str = "The DDE transaction could not\nbe completed because the request timed out."; break;
+        case SE_ERR_DLLNOTFOUND:      str = "The specified dynamic-link library was not found."; break;
+        case SE_ERR_NOASSOC:          str = "There is no application associated\nwith the given filename extension."; break;
+        case SE_ERR_OOM:              str = "There was not enough memory to complete the operation."; break;
+        case SE_ERR_SHARE:            str = "A sharing violation occurred. ";
+        default:                      str.Format("Unknown Error (%d) occurred.", nError); break;
+    }
+    str = "Unable to open hyperlink:\n\n" + str;
+    AfxMessageBox(str, MB_ICONEXCLAMATION | MB_OK);*/
+}
+
+HINSTANCE CHyperLink::GotoURL(LPCTSTR url, int showcmd)
+{
+    /*TCHAR key[MAX_PATH + MAX_PATH];
+
+    // First try ShellExecute()
+    HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd);
+
+    // If it failed, get the .htm regkey and lookup the program
+    if ((UINT)result <= HINSTANCE_ERROR) {
+
+        if (GetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) {
+            lstrcat(key, _T("\\shell\\open\\command"));
+
+            if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) {
+                TCHAR *pos;
+                pos = _tcsstr(key, _T("\"%1\""));
+                if (pos == NULL) {                     // No quotes found
+                    pos = strstr(key, _T("%1"));       // Check for %1, without quotes 
+                    if (pos == NULL)                   // No parameter at all...
+                        pos = key+lstrlen(key)-1;
+                    else
+                        *pos = '\0';                   // Remove the parameter
+                }
+                else
+                    *pos = '\0';                       // Remove the parameter
+
+                lstrcat(pos, _T(" "));
+                lstrcat(pos, url);
+                result = (HINSTANCE) WinExec(key,showcmd);
+            }
+        }
+    }
+*/
+    return NULL;
+}

Added: freeswitch/trunk/gtalkphone/google/HYPERLINK.H
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/HYPERLINK.H	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,100 @@
+// HyperLink.h : header file
+//
+//
+// HyperLink static control. Will open the default browser with the given URL
+// when the user clicks on the link.
+//
+// Copyright Chris Maunder, 1997, 1998
+// Feel free to use and distribute. May not be sold for profit. 
+
+#if !defined(AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+/////////////////////////////////////////////////////////////////////////////
+// CHyperLink window
+
+class CHyperLink : public CStatic
+{
+// Construction/destruction
+public:
+    CHyperLink();
+    virtual ~CHyperLink();
+
+// Attributes
+public:
+
+// Operations
+public:
+
+    void SetURL(CString strURL);
+    CString GetURL() const;
+
+    void SetColours(COLORREF crLinkColour, COLORREF crVisitedColour, 
+                    COLORREF crHoverColour = -1);
+    COLORREF GetLinkColour() const;
+    COLORREF GetVisitedColour() const;
+    COLORREF GetHoverColour() const;
+
+    void SetVisited(BOOL bVisited = TRUE);
+    BOOL GetVisited() const;
+
+    void SetLinkCursor(HCURSOR hCursor);
+    HCURSOR GetLinkCursor() const;
+
+    void SetUnderline(BOOL bUnderline = TRUE);
+    BOOL GetUnderline() const;
+
+    void SetAutoSize(BOOL bAutoSize = TRUE);
+    BOOL GetAutoSize() const;
+
+// Overrides
+    // ClassWizard generated virtual function overrides
+    //{{AFX_VIRTUAL(CHyperLink)
+    public:
+    virtual BOOL PreTranslateMessage(MSG* pMsg);
+    protected:
+    virtual void PreSubclassWindow();
+    //}}AFX_VIRTUAL
+
+// Implementation
+protected:
+    HINSTANCE GotoURL(LPCTSTR url, int showcmd);
+    void ReportError(int nError);
+    LONG GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata);
+    void PositionWindow();
+    void SetDefaultCursor();
+
+// Protected attributes
+protected:
+    COLORREF m_crLinkColour, m_crVisitedColour;     // Hyperlink colours
+    COLORREF m_crHoverColour;                       // Hover colour
+    BOOL     m_bOverControl;                        // cursor over control?
+    BOOL     m_bVisited;                            // Has it been visited?
+    BOOL     m_bUnderline;                          // underline hyperlink?
+    BOOL     m_bAdjustToFit;                        // Adjust window size to fit text?
+    CString  m_strURL;                              // hyperlink URL
+    CFont    m_Font;                                // Underline font if necessary
+    HCURSOR  m_hLinkCursor;                         // Cursor for hyperlink
+    CToolTipCtrl m_ToolTip;                         // The tooltip
+
+    // Generated message map functions
+protected:
+    //{{AFX_MSG(CHyperLink)
+    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
+    afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
+    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
+    //}}AFX_MSG
+    afx_msg void OnClicked();
+    DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/google/StdAfx.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/StdAfx.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+//	test.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+
+

Added: freeswitch/trunk/gtalkphone/google/StdAfx.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/StdAfx.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,27 @@
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__A2E12E3F_D392_4C11_BF27_F3BE2916C6C2__INCLUDED_)
+#define AFX_STDAFX_H__A2E12E3F_D392_4C11_BF27_F3BE2916C6C2__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define VC_EXTRALEAN		// Exclude rarely-used stuff from Windows headers
+
+#include <afxwin.h>         // MFC core and standard components
+#include <afxext.h>         // MFC extensions
+#include <afxdisp.h>        // MFC Automation classes
+#include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h>			// MFC support for Windows Common Controls
+#endif // _AFX_NO_AFXCMN_SUPPORT
+
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__A2E12E3F_D392_4C11_BF27_F3BE2916C6C2__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/google/chatButton_down.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/google/chatButton_up.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/google/cursor1.cur
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/google/google.aps
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/google/google.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,1481 @@
+#ifdef _MSC_VER
+#pragma comment(lib, "kernel32.lib")
+#pragma comment(lib, "user32.lib")
+#pragma comment(lib, "gdi32.lib")
+#pragma comment(lib, "shell32.lib")
+#endif
+
+#include "google2.h"
+#include "tchar.h"
+#include "stdio.h"
+#include <time.h>
+#include <sys/types.h>
+#include <sys/timeb.h>
+
+#include <stdlib.h>
+#include "resource.h"
+
+void fDebugWriteln(TCHAR *vch);
+void fDebugWritelnA(CHAR *vch);
+HANDLE hfMutex = NULL;
+HINSTANCE g_hThisDll;
+HANDLE    hFileMap;
+BOOL bHookRichEdit1;
+BOOL bGetText;
+const int WM_MYMESSAGE2 = WM_APP + 2;
+#define UM_IMSETTING	WM_USER + 101
+static void DeleteAllItem(Str_hwndList *ptr);
+int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+{
+	switch(dwReason)
+	{
+	case DLL_PROCESS_ATTACH:
+        hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(Str_Head)+MAX_MESSAGE_LENGTH*sizeof(TCHAR),_T("google"));     
+        
+        hfMutex = CreateMutex(NULL, FALSE, _T("debug"));
+		g_hThisDll = hInstance;
+        pfnWndProc = NULL;
+		//bHookRichEdit1  = FALSE;
+		break;
+	case DLL_PROCESS_DETACH:
+		{
+			if(pfnWndProc)
+			{
+				
+				HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				SendMessage(((Str_Head*)m_mData)->hwndPanel,WM_CLOSE,NULL,NULL);
+				SendMessage(((Str_Head*)m_mData)->hwndPhone,WM_CLOSE,NULL,NULL);
+				Str_hwndList *ptr = ((Str_Head*)m_mData)->chatViewList;
+				((Str_Head*)m_mData)->chatViewList = NULL;
+				DeleteAllItem(ptr);
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+				if(IsWindowUnicode(g_hwndToMineWindow))
+				{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+					SetWindowLongPtrW(g_hwndToMineWindow, GWL_WNDPROC, 
+						(LONG_PTR)(WNDPROC)pfnWndProc);
+#pragma warning(pop)
+				}
+				else
+				{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+					SetWindowLongPtrA(g_hwndToMineWindow, GWL_WNDPROC, 
+						(LONG_PTR)(WNDPROC)pfnWndProc);
+#pragma warning(pop)
+				}
+			}
+            if(pfnListViewWndProc)
+			{
+				if(IsWindowUnicode(g_hwndListViewWindow))
+				{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+					SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, 
+						(LONG_PTR)(WNDPROC)pfnListViewWndProc);
+#pragma warning(pop)
+				}
+				else
+				{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+					SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, 
+						(LONG_PTR)(WNDPROC)pfnListViewWndProc);
+#pragma warning(pop)
+				}
+			}
+			if (NULL != hfMutex)
+			{
+				CloseHandle(hfMutex);
+			}
+            if(hFileMap!=NULL)
+                CloseHandle(hFileMap);
+            ShellDll_Unhook();
+		}
+	}
+
+return TRUE;
+}
+void DeleteAllItem(Str_hwndList *ptr)
+{
+	if(ptr==NULL) return;
+	DeleteAllItem(ptr->next);
+	ptr->next = NULL;
+	SendMessage(ptr->childhwnd,WM_CLOSE,NULL,NULL);
+	
+	/*if(IsWindowUnicode(ptr->parenthwnd))
+	{
+		SetWindowLongPtrW(ptr->parenthwnd, GWL_WNDPROC, 
+			(LPARAM)(WNDPROC)ptr->proc);
+	}
+	else
+	{
+		SetWindowLongPtrA(ptr->parenthwnd, GWL_WNDPROC, 
+			(LPARAM)(WNDPROC)ptr->proc);
+	}
+	delete ptr;	*/
+}
+
+// Sets up a hook to detect when Google starts
+void APIENTRY ShellDll_Hook()
+{
+	g_hShellHook = SetWindowsHookEx(WH_CBT, ShellDll_MainHook, g_hThisDll, 0);
+}
+
+
+void APIENTRY ShellDll_Unhook()
+{
+	if(g_hShellHook != NULL)
+		UnhookWindowsHookEx(g_hShellHook);
+}
+
+
+LRESULT CALLBACK ShellDll_MainHook(int nCode, WPARAM wParam, LPARAM lParam)
+{
+	TCHAR szClass[MAX_PATH] = {0};
+
+	BOOL doneonce = false;
+
+	if(nCode < 0)
+		return CallNextHookEx(g_hShellHook, nCode, wParam, lParam);
+	
+	// Call filter everytime a new window is created
+	if(nCode == HCBT_CREATEWND)
+	{
+		// Get the HWND of the window
+		HWND hwndToNewWindow = reinterpret_cast<HWND>(wParam);
+		GetClassName(hwndToNewWindow, szClass, MAX_PATH);
+        //fDebugWriteln(szClass);
+		
+		// Compare class name with Google's class name
+		if(!lstrcmpi(szClass, _T("Main View")))
+		{
+			//add main button
+				HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				((Str_Head*)m_mData)->hInstance=g_hThisDll;
+			    InitClass();
+                HWND hWnd = CreateDialog(g_hThisDll,MAKEINTRESOURCE( IDD_PANEL ),hwndToNewWindow,(DLGPROC)PanelProc);
+				((Str_Head*)m_mData)->hwndPanel = hWnd;
+				
+				RECT rect;
+				GetWindowRect(hwndToNewWindow,&rect);
+			    MoveWindow(hWnd,rect.right-rect.left - 120,40,110,
+							30,TRUE);
+				ShowWindow( hWnd, SW_NORMAL );
+			//add subclass window
+			
+				WNDCLASSEX wcex;
+
+				wcex.cbSize = sizeof(WNDCLASSEX); 
+
+				wcex.style = CS_HREDRAW | CS_VREDRAW; 
+				wcex.lpfnWndProc = (WNDPROC)ChildProc; 
+				wcex.cbClsExtra = 0;
+				wcex.cbWndExtra = 0;
+				wcex.hInstance = g_hThisDll;
+				wcex.hIcon = 0;
+				wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 
+				wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+				wcex.lpszMenuName = 0;
+				wcex.lpszClassName = _T("PhoneClass");
+				wcex.hIconSm = 0; 
+
+
+				RegisterClassEx(&wcex);
+
+				HWND    hchildwnd=NULL;
+				TCHAR cBuffer[0x100];
+				memset(cBuffer,0,sizeof(cBuffer));
+				hchildwnd = CreateWindow(_T("PhoneClass"),_T(""),WS_CHILD ,0,0,0,0,hwndToNewWindow,NULL,g_hThisDll,NULL);
+				((Str_Head*)m_mData)->hwndPhone = hchildwnd;
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+			
+
+		}
+		/*else if(!lstrcmpi(szClass, _T("Chat View")))
+		{
+			//add subclass window
+			    
+				HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				Str_hwndList *plist = new Str_hwndList;
+				memset((void*)plist,0,sizeof(Str_hwndList));
+				//plist->next = NULL;
+				//plist->proc = NULL;
+				plist->parenthwnd = hwndToNewWindow;
+				Str_hwndList *ptr = ((Str_Head*)m_mData)->chatViewList;
+				if(ptr==NULL)
+				{
+					((Str_Head*)m_mData)->chatViewList = plist;
+				}
+				else
+				{
+					while(ptr->next!=NULL)
+					{
+						ptr = ptr->next;
+					}
+					ptr->next = plist;
+				}
+			
+				WNDCLASSEX wcex;
+
+				wcex.cbSize = sizeof(WNDCLASSEX); 
+
+				wcex.style = CS_HREDRAW | CS_VREDRAW; 
+				wcex.lpfnWndProc = (WNDPROC)ChatChildProc; 
+				wcex.cbClsExtra = 0;
+				wcex.cbWndExtra = 0;
+				wcex.hInstance = g_hThisDll; 
+				wcex.hIcon = 0;
+				wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 
+				wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+				wcex.lpszMenuName = 0;
+				wcex.lpszClassName = _T("ChatAgent");
+				wcex.hIconSm = 0; 
+
+
+				RegisterClassEx(&wcex);
+
+				HWND    hchildwnd=NULL;
+				hchildwnd = CreateWindow(_T("ChatAgent"),_T(""),WS_CHILD ,0,0,0,0,hwndToNewWindow,NULL,g_hThisDll,NULL);
+				plist->childhwnd = hchildwnd;
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+		}*/
+	}
+
+	return CallNextHookEx(NULL, nCode, wParam, lParam);
+}
+
+//Google Subclass wndproc
+LRESULT WINAPI Google_SubClassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+    /*HWND    hchildwnd=NULL;
+    TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, _T(">>>----> Google_SubClassWndProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);*/
+	switch(uMsg)
+	{
+	case WM_ERASEBKGND:
+	case WM_SIZE:
+		{
+			RECT rect;
+			RECT prect;
+			GetWindowRect(hwnd,&rect);
+			
+				HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				HWND hPanel = ((Str_Head*)m_mData)->hwndPanel;
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+			GetWindowRect(hPanel,&prect);
+			MoveWindow(hPanel,rect.right-rect.left - 120,50,110,
+				30,TRUE);
+		}
+		break;
+	default:
+		break;
+	}
+
+	// Call previous window procedure
+	if(IsWindowUnicode(hwnd))
+	{
+		lResult = CallWindowProcW(pfnWndProc, hwnd, uMsg, wParam, lParam);
+	}
+	else
+	{
+		lResult = CallWindowProcA(pfnWndProc, hwnd, uMsg, wParam, lParam);
+	}
+
+	return lResult;
+}
+
+BOOL CALLBACK EnumListChildProc(
+  HWND hwnd,      // handle to child window
+  LPARAM lParam   // application-defined value
+)
+{    
+     TCHAR szClass[MAX_PATH] = {0};
+     GetClassName(hwnd, szClass, MAX_PATH);
+	  //AfxWnd42
+// Edit
+	 fDebugWriteln(_T("EnumListChildProc--->"));
+     fDebugWriteln(szClass);
+     
+     /*if(lstrcmpi(szClass, _T("Contact List View"))==0)
+     {
+         //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD);
+         g_hwndListViewWindow = hwnd;
+         if(IsWindowUnicode(g_hwndListViewWindow))
+	    {
+	         //Set new window procedure to MSN's class
+	        pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, 
+	        (LPARAM)(WNDPROC)Google_ListViewWndProc);
+	    }
+	    else
+	    {
+	         //Set new window procedure to MSN's class
+	        pfnListViewWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, 
+		        (LPARAM)(WNDPROC)Google_ListViewWndProc);
+	    }
+     } */
+    return TRUE;
+}
+LRESULT WINAPI Google_ListViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+    HWND    hchildwnd=NULL;
+    /*TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, _T(">>>----> Google_ListViewWndProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);*/
+	switch(uMsg)
+	{
+		case WM_NCCREATE:
+			//PostMessage(hwnd,WM_MYMESSAGE2,NULL,NULL);
+			break;
+	case WM_MYMESSAGE2:
+	case WM_TIMER:
+		///EnumChildWindows(hwnd,EnumListChildProc,0);
+		break;
+	case WM_ERASEBKGND:
+	case WM_SIZE:
+		break;
+	default:
+		break;
+	}
+
+	// Call previous window procedure
+	if(IsWindowUnicode(hwnd))
+	{
+		lResult = CallWindowProcW(pfnListViewWndProc, hwnd, uMsg, wParam, lParam);
+	}
+	else
+	{
+		lResult = CallWindowProcA(pfnListViewWndProc, hwnd, uMsg, wParam, lParam);
+	}
+
+	return lResult;
+}
+
+LRESULT WINAPI DailPanelProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+    TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer,0x100, _T(">>>----> DailPanelProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);
+	switch(uMsg)
+	{
+	case WM_NCCREATE:
+        break;
+	case WM_MYMESSAGE2:
+		break;
+		case WM_COMMAND:
+			{
+			GetDlgItemText(hwnd,IDC_DAILNUM,cBuffer,0x100);
+			int num = LOWORD(wParam) - 300;
+			if((num>=0)&&(num<=9))
+			{
+				int len = (int)wcslen(cBuffer);
+				cBuffer[len] = (TCHAR)(num+0x30);
+				cBuffer[len+1] = 0;
+				SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer);
+			}
+			else if(num==10)
+			{
+				int len = (int)wcslen(cBuffer);
+				cBuffer[len] = _T('*');
+				cBuffer[len+1] = 0;
+				SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer);				
+			}
+			else if(num==11)
+			{
+				int len = (int)wcslen(cBuffer);
+				cBuffer[len] = _T('#');
+				cBuffer[len+1] = 0;
+				SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer);				
+			}
+			else if(num==20)
+			{
+			HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			    if(hwndList!=NULL)
+				{ 
+				    while(hwndList)
+					{
+						if(hwndList->dailpanelhwnd==hwnd)
+							break;
+						else
+							hwndList = hwndList->next;
+					}
+				}
+				SetWindowText(hwndList->redithwnd,cBuffer);
+				SendMessage(hwndList->redithwnd,WM_KEYDOWN,0x0d,0xe0001);
+				SendMessage(hwndList->redithwnd,WM_KEYUP,0x0d,0xc00e0001);
+				SendMessage(hwndList->redithwnd,WM_CHAR,0x0d,0xc00e0001);
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+			}
+			else if(num==21)
+			{
+				int len = (int)wcslen(cBuffer);
+				cBuffer[len-1] = 0;
+				SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer);
+			}
+			
+				
+			}
+			break;
+	case WM_TIMER:
+		break;
+	case WM_SIZE:
+		{
+		HWND hPanel = GetDlgItem(hwnd, IDC_DAILPANEL);
+		RECT rect;
+				GetWindowRect(hwnd,&rect);
+			    MoveWindow(hPanel,0,0,rect.right - rect.left ,rect.bottom - rect.top,TRUE);
+		}
+		break;
+	//case WM_CTLCOLORBTN:
+	case WM_CTLCOLORSTATIC:
+	case WM_CTLCOLORDLG:
+		{
+			HBRUSH brush=CreateSolidBrush(RGB(255,255,255));
+			return (LRESULT)brush;
+		}
+		break;
+		case WM_PAINT:
+			
+		{
+			/*PAINTSTRUCT ps;
+			RECT rc;
+			HDC hdc1;
+			hdc1=BeginPaint(hwnd,&ps);
+			GetClientRect(hwnd,&rc);
+			
+            HBRUSH brush=CreateSolidBrush(RGB(255,255,255));
+			HBRUSH oldbrush =(HBRUSH)SelectObject(hdc1,brush);
+            Rectangle(hdc1,rc.left-1, rc.top-1, rc.right+2, rc.bottom+2);
+            SelectObject(hdc1,oldbrush);
+			EndPaint(hwnd,&ps);*/
+			
+		}
+        break;
+	case WM_LBUTTONDBLCLK:
+		break;
+	case WM_LBUTTONDOWN:
+		break;
+	case WM_DESTROY:	
+			break;
+	default:
+		break;
+	}
+
+	return DefWindowProc(hwnd, uMsg,wParam,lParam);
+}
+LRESULT WINAPI Google_ChatViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+    /*HWND    hchildwnd=NULL;
+    TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, _T(">>>----> Google_ChatViewWndProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);*/
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+	WNDPROC proc=(WNDPROC)GetWindowLongPtr(hwnd,GWL_USERDATA);
+#pragma warning(pop)
+	switch(uMsg)
+	{
+	case WM_MYMESSAGE2:
+		{
+		//Ôö¼Ó×Ó´°¿Ú
+			HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			    if(hwndList!=NULL)
+				{ 
+				    while(hwndList)
+					{
+						if(hwndList->parenthwnd==hwnd)
+							break;
+						else
+							hwndList = hwndList->next;
+					}
+				}
+				WNDCLASSEX wcex;
+
+				wcex.cbSize = sizeof(WNDCLASSEX); 
+
+				wcex.style = CS_HREDRAW|CS_VREDRAW|CS_GLOBALCLASS|CS_PARENTDC; 
+				wcex.lpfnWndProc = (WNDPROC)ChildProc; 
+				wcex.cbClsExtra = 0;
+				wcex.cbWndExtra = sizeof(void*);
+				wcex.hInstance = ((Str_Head*)m_mData)->hInstance; 
+				wcex.hIcon = 0;
+				wcex.hCursor = NULL; 
+				wcex.hbrBackground = CreateSolidBrush(RGB(255, 255, 255)) ;
+				wcex.lpszMenuName = 0;
+				wcex.lpszClassName = _T("DialPanel");
+				wcex.hIconSm = 0; 
+
+
+				RegisterClassEx(&wcex);
+
+				hwndList->dailpanelhwnd = CreateDialog(((Str_Head*)m_mData)->hInstance,MAKEINTRESOURCE( IDD_DIALPANEL ),hwnd,(DLGPROC)DailPanelProc);
+				
+				
+				RECT rect;
+				GetWindowRect(hwnd,&rect);
+			    MoveWindow(hwndList->dailpanelhwnd,1,53,rect.right - rect.left-2   ,rect.bottom - rect.top -54-40,TRUE);
+				ShowWindow( hwndList->dailpanelhwnd, SW_NORMAL );
+				
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+			}
+			break;
+	case WM_ERASEBKGND:
+	case WM_SIZE:
+		
+		{
+			HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			    if(hwndList!=NULL)
+				{ 
+				    while(hwndList)
+					{
+						if(hwndList->parenthwnd==hwnd)
+							break;
+						else
+							hwndList = hwndList->next;
+					}
+				}
+				//ShowWindow(hwndList->redithwnd,SW_HIDE);
+				ShowWindow(hwndList->redithwnd2,SW_HIDE);
+				ShowWindow(hwndList->iehwnd,SW_HIDE);
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+		}
+
+		break;
+	case WM_MOVE:
+	case WM_ACTIVATE:
+	case WM_SHOWWINDOW:
+		{
+			HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			    if(hwndList!=NULL)
+				{ 
+				    while(hwndList)
+					{
+						if(hwndList->parenthwnd==hwnd)
+							break;
+						else
+							hwndList = hwndList->next;
+					}
+				}
+				//ShowWindow(hwndList->redithwnd,SW_HIDE);
+				ShowWindow(hwndList->redithwnd2,SW_HIDE);
+				ShowWindow(hwndList->iehwnd,SW_HIDE);
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+		}
+
+		//return lResult;
+		break;
+	case WM_PAINT:
+		
+		{
+			HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			    if(hwndList!=NULL)
+				{ 
+				    while(hwndList)
+					{
+						if(hwndList->parenthwnd==hwnd)
+							break;
+						else
+							hwndList = hwndList->next;
+					}
+				}
+				RECT rect;
+				GetWindowRect(hwnd,&rect);
+			    MoveWindow(hwndList->dailpanelhwnd,1,53,rect.right - rect.left-2   ,rect.bottom - rect.top -54-40,TRUE);
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+		}
+		break;
+	case WM_DESTROY:
+	default:
+		break;
+	}
+/*HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+			HWND hparent = hwnd;
+			Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			while(hwndList)
+			{
+				if(hwndList->parenthwnd==hparent)
+					break;
+				else
+					hwndList = hwndList->next;
+			}*/
+	// Call previous window procedure
+	if(IsWindowUnicode(hwnd))
+	{
+		lResult = CallWindowProcW(proc, hwnd, uMsg, wParam, lParam);
+	}
+	else
+	{
+		lResult = CallWindowProcA(proc, hwnd, uMsg, wParam, lParam);
+	}
+				/*UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);*/
+				
+	
+
+	return lResult;
+}
+BOOL CALLBACK EnumChildProc(
+  HWND hwnd,      // handle to child window
+  LPARAM lParam   // application-defined value
+)
+{    
+     TCHAR szClass[MAX_PATH] = {0};
+     GetClassName(hwnd, szClass, MAX_PATH);
+	  //AfxWnd42
+// Edit
+     fDebugWriteln(szClass);
+     
+     if(lstrcmpi(szClass, _T("Contact List View"))==0)
+     {
+         //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD);
+         g_hwndListViewWindow = hwnd;
+         if(IsWindowUnicode(g_hwndListViewWindow))
+	    {
+	         //Set new window procedure to MSN's class
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+	        pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, 
+	        (LONG_PTR )(WNDPROC)Google_ListViewWndProc);
+#pragma warning(pop)
+	    }
+	    else
+	    {
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+	         //Set new window procedure to MSN's class
+	        pfnListViewWndProc = (WNDPROC) SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, 
+		        (LONG_PTR )(WNDPROC)Google_ListViewWndProc);
+#pragma warning(pop)
+	    }
+     } 
+    return TRUE;
+}
+
+LRESULT WINAPI Google_RichEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+    TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer,0x100, _T(">>>----> Google_RichEditProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);
+	HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+			Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			while(hwndList)
+			{
+				if(hwndList->redithwnd==hwnd)
+					break;
+				else
+					hwndList = hwndList->next;
+			}
+	switch(uMsg)
+	{
+    case WM_GETTEXT:
+//		fDebugWriteln((TCHAR*)lParam);
+        break;
+	case WM_PAINT:
+		bGetText = TRUE;
+		break;
+    default:
+        break;
+    }
+    // Call previous window procedure
+	if(IsWindowUnicode(hwnd))
+	{
+		lResult = CallWindowProcW(hwndList->reditproc, hwnd, uMsg, wParam, lParam);
+	}
+	else
+	{
+		lResult = CallWindowProcA(hwndList->reditproc, hwnd, uMsg, wParam, lParam);
+	}
+
+	return lResult;
+}
+BOOL CALLBACK EnumChatChildProc(
+  HWND hwnd,      // handle to child window
+  LPARAM lParam   // application-defined value
+)
+{    
+     TCHAR szClass[MAX_PATH] = {0};
+     GetClassName(hwnd, szClass, MAX_PATH);
+	  //AfxWnd42
+// Edit
+	 fDebugWriteln(_T("EnumChatChildProc--->"));
+     fDebugWriteln(szClass);
+     
+				HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+			Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			while(hwndList)
+			{
+				if(hwndList->parenthwnd==(HWND)lParam)
+					break;
+				else
+					hwndList = hwndList->next;
+			}
+     if(lstrcmpi(szClass, _T("RichEdit20W"))==0)
+     {
+		 //ShowWindow(hwnd,SW_HIDE);
+		 RECT rect;
+		 GetWindowRect(hwnd,&rect);
+		 RECT rectparent;
+		 GetWindowRect(hwndList->parenthwnd,&rectparent);
+		 if(rectparent.bottom - rect.bottom<20)
+		 {
+			hwndList->redithwnd = hwnd;
+			if(IsWindowUnicode(g_hwndListViewWindow))
+			{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+				 //Set new window procedure to MSN's class
+				hwndList->reditproc = (WNDPROC)SetWindowLongPtrW(hwnd, GWL_WNDPROC, 
+				(LONG_PTR )(WNDPROC)Google_RichEditProc);
+#pragma warning(pop)
+			}
+			else
+			{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+				 //Set new window procedure to MSN's class
+				hwndList->reditproc = (WNDPROC)SetWindowLongPtrA(hwnd, GWL_WNDPROC, 
+					(LONG_PTR )(WNDPROC)Google_RichEditProc);
+#pragma warning(pop)
+			}
+		 }
+		 else
+		 {
+			 hwndList->redithwnd2 = hwnd;
+		 }
+         //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD);
+        /* g_hwndListViewWindow = hwnd;
+         if(IsWindowUnicode(g_hwndListViewWindow))
+	    {
+	         //Set new window procedure to MSN's class
+	        pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, 
+	        (LPARAM)(WNDPROC)Google_ListViewWndProc);
+	    }
+	    else
+	    {
+	         //Set new window procedure to MSN's class
+	        pfnListViewWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, 
+		        (LPARAM)(WNDPROC)Google_ListViewWndProc);
+	    }*/
+     } 
+	 else if(lstrcmpi(szClass, _T("Internet Explorer_Server"))==0)
+     {
+		 ShowWindow(hwnd,SW_HIDE);
+		 hwndList->iehwnd = hwnd;
+         //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD);
+        /* g_hwndListViewWindow = hwnd;
+         if(IsWindowUnicode(g_hwndListViewWindow))
+	    {
+	         //Set new window procedure to MSN's class
+	        pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, 
+	        (LPARAM)(WNDPROC)Google_ListViewWndProc);
+	    }
+	    else
+	    {
+	         //Set new window procedure to MSN's class
+	        pfnListViewWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, 
+		        (LPARAM)(WNDPROC)Google_ListViewWndProc);
+	    }*/
+     } 
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+    return TRUE;
+}
+LRESULT WINAPI ChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+    /*TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, _T(">>>----> ChildProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);
+	swprintf(cBuffer, _T(">>>----> ChildProc : hwnd = %x "), hwnd);
+	fDebugWriteln(cBuffer);*/
+	switch(uMsg)
+	{
+	case WM_NCCREATE:
+		SetTimer(hwnd,1,100,NULL);
+        break;
+	case WM_MYMESSAGE2:
+		break;
+	case WM_TIMER:
+		{
+
+			g_hwndToMineWindow = GetParent(hwnd);
+			// Check and see if window is unicode or ascii
+			if(IsWindowUnicode(g_hwndToMineWindow))
+			{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+				// Set new window procedure to Google's class
+				pfnWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndToMineWindow, GWL_WNDPROC, 
+				(LONG_PTR )(WNDPROC)Google_SubClassWndProc);
+#pragma warning(pop)
+			}
+			else
+			{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+				// Set new window procedure to Google's class
+				pfnWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndToMineWindow, GWL_WNDPROC, 
+					(LONG_PTR )(WNDPROC)Google_SubClassWndProc);
+#pragma warning(pop)
+			}
+			
+				HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+				((Str_Head*)m_mData)->pfnMainWndProc = pfnWndProc;
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+				EnumChildWindows(g_hwndToMineWindow,EnumChildProc,0);
+		}
+		KillTimer(hwnd,1);
+		break;
+    case WM_NCPAINT:
+        break;
+	case WM_LBUTTONDBLCLK:
+		break;
+	case WM_LBUTTONDOWN:
+		break;
+	default:
+		break;
+	}
+
+	return DefWindowProc(hwnd, uMsg,wParam,lParam);
+}
+
+LRESULT WINAPI ChatChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+	/*memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, _T(">>>----> ChatChildProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);
+	swprintf(cBuffer, _T(">>>----> ChatChildProc : hwnd = %x "), hwnd);
+	fDebugWriteln(cBuffer);*/
+	switch(uMsg)
+	{
+	case WM_NCCREATE:
+		SetTimer(hwnd,1,10,NULL);
+        break;
+	case WM_MYMESSAGE2:
+		break;
+	case WM_TIMER:
+		{
+			
+                TCHAR cBuffer[0x100];
+			    HWND hparent = GetParent(hwnd);
+				GetWindowText(hparent,cBuffer, sizeof(cBuffer));
+				if(wcsstr(cBuffer,_T("jabberbot"))!=NULL)
+				{
+				
+					HANDLE    m_hFileMap;
+					LPSTR     m_mData;
+					m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+					m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+					if(m_hFileMap==NULL) return 0;
+					if(m_mData==NULL) 
+					{
+					   CloseHandle(m_hFileMap);
+					   return 0;
+					}
+					Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+					while(hwndList)
+					{
+						if(hwndList->parenthwnd==hparent)
+							break;
+						else
+							hwndList = hwndList->next;
+					}
+					if(hwndList!=NULL) 
+					{
+						if(IsWindowUnicode(hparent))
+						{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+							// Set new window procedure to Google's class
+							hwndList->proc = (WNDPROC)SetWindowLongPtrW(hparent, GWL_WNDPROC, 
+							(LONG_PTR )(WNDPROC)Google_ChatViewWndProc);
+#pragma warning(pop)
+						}
+						else
+						{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+							// Set new window procedure to Google's class
+							hwndList->proc = (WNDPROC)SetWindowLongPtrA(hparent, GWL_WNDPROC, 
+								(LONG_PTR )(WNDPROC)Google_ChatViewWndProc);
+#pragma warning(pop)
+						}
+					}
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+					SetWindowLongPtr(hparent,GWL_USERDATA,(LONG_PTR )hwndList->proc);
+#pragma warning(pop)
+					UnmapViewOfFile(m_mData);
+					CloseHandle(m_hFileMap);
+					PostMessage(hparent,WM_MYMESSAGE2,NULL,NULL);
+					EnumChildWindows(hparent,EnumChatChildProc,(LPARAM)hparent);
+				}
+         
+		}
+		KillTimer(hwnd,1);
+		break;
+    case WM_NCPAINT:
+        break;
+	case WM_LBUTTONDBLCLK:
+		break;
+	case WM_LBUTTONDOWN:
+		break;
+	case WM_DESTROY:
+		{
+                HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) return 0;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   return 0;
+				}
+			    HWND hparent = GetParent(hwnd);
+			    Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList;
+			    if(hwndList!=NULL)
+				{ 
+			       if(hwndList->parenthwnd==hparent)
+				   {
+					  
+				      ((Str_Head*)m_mData)->chatViewList = hwndList->next;
+				   }
+				   else
+				   {
+				        while(hwndList->next)
+						{
+							if(hwndList->next->parenthwnd==hparent)
+								break;
+							else
+								hwndList = hwndList->next;
+						}
+						Str_hwndList *ptr= hwndList->next;
+						if(ptr!=NULL)
+						{
+							hwndList->next=ptr->next;
+							hwndList = ptr;
+										
+						}
+					}
+				   
+					  if(hwndList->proc!=NULL)
+					  {
+						  SendMessage(hwndList->dailpanelhwnd,WM_CLOSE,NULL,NULL);
+						  
+						if(hwndList->reditproc)
+						{
+							if(IsWindowUnicode(hwndList->redithwnd))
+							{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+								// Set new window procedure to Google's class
+								SetWindowLongPtrW(hwndList->redithwnd, GWL_WNDPROC, 
+								    (LONG_PTR)(WNDPROC)hwndList->reditproc);
+#pragma warning(pop)
+							}
+							else
+							{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+								// Set new window procedure to Google's class
+								SetWindowLongPtrA(hwndList->redithwnd, GWL_WNDPROC, 
+									(LONG_PTR)(WNDPROC)hwndList->reditproc);
+#pragma warning(pop)
+							}
+						}
+						if(IsWindowUnicode(hparent))
+						{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+							// Set new window procedure to Google's class
+							SetWindowLongPtrW(hparent, GWL_WNDPROC, 
+							   (LONG_PTR)(WNDPROC)hwndList->proc);
+#pragma warning(pop)
+						}
+						else
+						{
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+							// Set new window procedure to Google's class
+							SetWindowLongPtrA(hparent, GWL_WNDPROC, 
+								(LONG_PTR)(WNDPROC)hwndList->proc);
+#pragma warning(pop)
+						}
+					  }
+				
+						delete hwndList;
+				}
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+		}
+		break;
+	default:
+		break;
+	}
+
+	return DefWindowProc(hwnd, uMsg,wParam,lParam);
+}
+LRESULT WINAPI PanelProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+   /* TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, _T(">>>----> PanelProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);
+	swprintf(cBuffer, _T(">>>----> PanelProc : hwnd = %x "), hwnd);
+	fDebugWriteln(cBuffer);	*/
+	switch(uMsg)
+	{
+	case WM_NCCREATE:
+        break;
+	case WM_MYMESSAGE2:
+		break;
+	case WM_TIMER:
+		break;
+		case WM_NCPAINT:
+		case WM_PAINT:
+			
+		{
+			PAINTSTRUCT ps;
+			RECT rc;
+			HDC hdc1;
+			hdc1=BeginPaint(hwnd,&ps);
+			GetClientRect(hwnd,&rc);
+			
+            HBRUSH brush=CreateSolidBrush(RGB(255,255,255));
+			HBRUSH oldbrush =(HBRUSH)SelectObject(hdc1,brush);
+            Rectangle(hdc1,rc.left-1, rc.top-1, rc.right+2, rc.bottom+2);
+            SelectObject(hdc1,oldbrush);
+			EndPaint(hwnd,&ps);
+			
+		}
+        break;
+	case WM_LBUTTONDBLCLK:
+		break;
+	case WM_LBUTTONDOWN:
+		break;
+	case WM_DESTROY:	
+			break;
+	default:
+		break;
+	}
+
+	return DefWindowProc(hwnd, uMsg,wParam,lParam);
+}
+
+int APIENTRY SetMonitorHWND(HWND hwnd)
+{
+    HANDLE    m_hFileMap;
+    LPSTR     m_mData;
+    m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+    m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+    if(m_hFileMap==NULL) return 0;
+    if(m_mData==NULL) 
+    {
+       CloseHandle(m_hFileMap);
+       return 0;
+    }
+	
+    memset(m_mData,0,sizeof(Str_Head));
+    ((Str_Head*)m_mData)->hwndMonitor=hwnd;
+	
+    UnmapViewOfFile(m_mData);
+    CloseHandle(m_hFileMap);
+    return 0;
+}
+LRESULT WINAPI Google_RichEditSubClassWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lResult = 0;
+    TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, 0x100,_T(">>>----> Google_RichEditSubClassWndProc1 : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam);
+	fDebugWriteln(cBuffer);
+	
+	switch(uMsg)
+	{
+    case WM_GETTEXT:
+//		fDebugWriteln((TCHAR*)lParam);
+        break;
+	case WM_PAINT:
+		bGetText = TRUE;
+		break;
+	case 0x441:
+		if(bGetText)
+		{
+			//bGetText = FALSE;
+			HWND hwndParent = GetParent(hwnd);
+			TCHAR cBuffer[0x1000];
+			memset(cBuffer,0,sizeof(cBuffer));
+			GetWindowText(hwndParent,cBuffer, sizeof(cBuffer));
+			
+#ifdef _DEBUG
+			fDebugWriteln(cBuffer);
+#endif
+            if(wcsstr(cBuffer,_T("jabberbot"))==NULL)
+				break;
+			HANDLE    m_hFileMap;
+			LPSTR     m_mData;
+			m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+			m_mData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+			if(m_hFileMap==NULL) break ;
+			if(m_mData==NULL) 
+			{
+			   CloseHandle(m_hFileMap);
+			   break ;
+			}
+			g_hwndMonitor = ((Str_Head*)m_mData)->hwndMonitor;
+			GetWindowText(hwnd,(TCHAR*)(m_mData+sizeof(Str_Head)),MAX_MESSAGE_LENGTH);
+			UnmapViewOfFile(m_mData);
+			CloseHandle(m_hFileMap);
+			PostMessage(g_hwndMonitor, WM_MYMESSAGE2,(WPARAM)hwnd,0);
+		}
+		break;
+    default:
+        break;
+    }
+    // Call previous window procedure
+	if(IsWindowUnicode(hwnd))
+	{
+//		lResult = CallWindowProcW((WNDPROC) (DWORD)pfnWndProc_RichEdit1, hwnd, uMsg, wParam, lParam);
+	}
+	else
+	{
+//		lResult = CallWindowProcA((WNDPROC) (DWORD)pfnWndProc_RichEdit1, hwnd, uMsg, wParam, lParam);
+	}
+
+	return lResult;
+}
+
+static LRESULT CALLBACK MainButtonWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
+{
+	struct BmpData *dat;
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+	dat=(struct BmpData*)GetWindowLongPtr(hwnd,0);
+#pragma warning(pop)
+	
+    /*TCHAR cBuffer[0x100];
+	memset(cBuffer,0,sizeof(cBuffer));
+	swprintf(cBuffer, _T(">>>----> MainButtonWndProc : uMsg = %x wParam=%x lParam=%x"), message,wParam,lParam);
+	fDebugWriteln(cBuffer);*/
+	switch(message) {
+		case WM_CREATE:
+			{
+				dat=(struct BmpData*)malloc(sizeof(struct BmpData));
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+				SetWindowLongPtr(hwnd,0,(LONG_PTR)dat);
+#pragma warning(pop)
+				HANDLE    m_hFileMap;
+				LPSTR     m_mData;
+				m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+				m_mData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+				if(m_hFileMap==NULL) break ;
+				if(m_mData==NULL) 
+				{
+				   CloseHandle(m_hFileMap);
+				   break ;
+				}
+				dat->hBitmap = LoadBitmap(((Str_Head*)m_mData)->hInstance,MAKEINTRESOURCE(IDB_BITMAPMAIN));
+				
+				UnmapViewOfFile(m_mData);
+				CloseHandle(m_hFileMap);
+			    SendMessage(hwnd,IM_MEASURETEXT,0,0);
+			}
+			break;
+		case WM_LBUTTONDOWN:
+		{	
+			HANDLE    m_hFileMap;
+			LPSTR     m_mData;
+			m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google"));     
+			m_mData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);   
+			if(m_hFileMap==NULL) break ;
+			if(m_mData==NULL) 
+			{
+			   CloseHandle(m_hFileMap);
+			   break ;
+			}
+			HWND wMonitor = ((Str_Head*)m_mData)->hwndMonitor;
+			UnmapViewOfFile(m_mData);
+			CloseHandle(m_hFileMap);
+			PostMessage(wMonitor, UM_GOOGLE_NOTIFY,(WPARAM)0,(LPARAM)WM_LBUTTONDOWN);
+			break;
+		}
+		case WM_SETFONT:
+		{
+			if(LOWORD(lParam)) SendMessage(hwnd,HLK_INVALIDATE,0,0);
+			SendMessage(hwnd,IM_MEASURETEXT,0,0);
+			break;
+		}
+		case WM_ERASEBKGND: return(1); break;
+		case HLK_INVALIDATE: // invalidate
+		{
+			RECT rcWnd;
+			POINT pt;
+			GetWindowRect(hwnd,&rcWnd);
+			pt.x = rcWnd.left;
+			pt.y = rcWnd.top;
+			ScreenToClient(GetParent(hwnd),&pt);
+			rcWnd.right = pt.x + (rcWnd.right-rcWnd.left);
+			rcWnd.bottom = pt.y + (rcWnd.bottom-rcWnd.top);
+			rcWnd.left = pt.x;
+			rcWnd.top = pt.y;
+
+			InvalidateRect(GetParent(hwnd),&rcWnd,TRUE);
+			break;
+		}
+		case WM_GETFONT:
+			break;
+		case IM_MEASURETEXT:
+		case WM_SETTEXT:
+		{
+			SendMessage(hwnd,HLK_INVALIDATE,0,0);
+			break;
+		}
+		case WM_SETCURSOR:
+		{	POINT pt;
+			GetCursorPos(&pt);
+			ScreenToClient(hwnd,&pt);
+			SetCursor(hHandCursor);
+			return TRUE;
+		}
+		case HLK_SETENABLECOLOUR:
+			break;
+		case HLK_SETDISABLECOLOUR:
+			break;
+		case WM_NCPAINT:
+		case WM_PAINT:
+		{	
+			BITMAP bm;
+			HDC hdcMem;
+			HWND hwndCanvas;
+			HDC hdcCanvas;
+			POINT ptSize, ptOrg;
+			RECT rect;
+
+			hwndCanvas = hwnd;
+			hdcCanvas = GetDC( hwndCanvas );
+			//BeginPaint(hwndCanvas,&ps);
+			hdcMem = CreateCompatibleDC( hdcCanvas );
+			SelectObject( hdcMem, dat->hBitmap );
+			SetMapMode( hdcMem, GetMapMode( hdcCanvas ));
+			GetObject( dat->hBitmap, sizeof( BITMAP ), ( LPVOID ) &bm );
+			ptSize.x = bm.bmWidth;
+			ptSize.y = bm.bmHeight;
+			DPtoLP( hdcCanvas, &ptSize, 1 );
+			ptOrg.x = ptOrg.y = 0;
+			DPtoLP( hdcMem, &ptOrg, 1 );
+			GetClientRect( hwndCanvas, &rect );
+			InvalidateRect( hwndCanvas, NULL, TRUE );
+			UpdateWindow( hwndCanvas );
+			BitBlt( hdcCanvas, 0, 0, ptSize.x, ptSize.y, hdcMem, ptOrg.x, ptOrg.y, SRCCOPY );
+			DeleteDC( hdcMem );
+			//EndPaint(hwndCanvas,&ps);
+			break;
+		}
+		case WM_DESTROY:
+			free(dat); dat=NULL;			
+#pragma warning(push)
+#pragma warning(disable:4244 4312)
+			SetWindowLongPtr(hwnd,0,(LONG_PTR )dat);
+#pragma warning(pop)
+			break;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+int InitClass(void)
+{
+	WNDCLASS wcl;
+
+	if(IsWinVer2000Plus()) hHandCursor=LoadCursor(NULL,IDC_HAND);
+	else hHandCursor=LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_HYPERLINKHAND));
+	wcl.lpfnWndProc=MainButtonWndProc;
+	wcl.cbClsExtra=0;
+	wcl.cbWndExtra=sizeof(void*);
+	wcl.hInstance=GetModuleHandle(NULL);
+	wcl.hCursor=NULL;
+	wcl.lpszClassName=WNDCLASS_MAINBUTTON;
+	wcl.hbrBackground=NULL;
+	wcl.hIcon=NULL;
+	wcl.lpszMenuName=NULL;
+	wcl.style=CS_HREDRAW|CS_VREDRAW|CS_GLOBALCLASS|CS_PARENTDC;
+	RegisterClass(&wcl);
+	return 0;
+}
+/***********************************************debug********************************************/
+
+void fDebugWriteln(TCHAR *vch)
+{
+    if(hfMutex==NULL) return ;
+	
+#ifdef _DEBUG
+	WaitForSingleObject(hfMutex, INFINITE);   
+	TCHAR acfile[256];
+
+	wsprintf(acfile,_T(".\\debug.txt"));
+	FILE *f =NULL;
+	_wfopen_s(&f,acfile,_T("r+"));
+	if(f==NULL) 
+	{
+		ReleaseMutex(hfMutex);
+		return;
+	}
+	fseek(f,0,SEEK_END);
+    CHAR  stmp[10000];
+    DWORD dwlen=0;
+    
+    dwlen = WideCharToMultiByte(CP_ACP,0,vch,wcslen(vch),stmp,10000,0,0);
+	fwrite(stmp,sizeof(CHAR),dwlen,f);
+	fwrite(_T("\n"),sizeof(TCHAR),wcslen(_T("\n")),f);
+	fclose(f);
+	ReleaseMutex(hfMutex);
+#endif
+}

Added: freeswitch/trunk/gtalkphone/google/google.def
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.def	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,8 @@
+LIBRARY         google
+
+
+EXPORTS
+   ShellDll_Hook      @2
+   ShellDll_Unhook    @3
+   ShellDll_MainHook  @4
+   SetMonitorHWND     @6

Added: freeswitch/trunk/gtalkphone/google/google.dsp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.dsp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,131 @@
+# Microsoft Developer Studio Project File - Name="google" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=google - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "google.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "google.mak" CFG="google - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "google - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "google - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "google - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "google_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "google_EXPORTS" /D "_UNICODE" /D "UNICODE" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"./Release/google.dll"
+
+!ELSEIF  "$(CFG)" == "google - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "google_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_USRDLL" /D "google_EXPORTS" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_UNICODE" /D "UNICODE" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"../imphone/Debug/google.dll" /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "google - Win32 Release"
+# Name "google - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\google.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\google.def
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\google.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\cursor1.cur
+# End Source File
+# Begin Source File
+
+SOURCE=.\google.rc
+# End Source File
+# Begin Source File
+
+SOURCE=.\mainbutton.bmp
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.h
+# End Source File
+# End Group
+# End Target
+# End Project

Added: freeswitch/trunk/gtalkphone/google/google.dsw
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.dsw	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "google"=".\google.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+

Added: freeswitch/trunk/gtalkphone/google/google.exp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/google/google.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,45 @@
+#ifndef _GOOGLE_H
+#define _GOOGLE_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#ifndef STRICT
+#define STRICT
+#endif
+
+#include <windows.h>
+#include <windowsx.h>
+
+#define MAX_MESSAGE_LENGTH  1024*2
+typedef struct Str_hwndList_Tag
+{
+	HWND parenthwnd;
+	HWND childhwnd;//parent agent
+	HWND buttonhwnd;
+	HWND dailpanelhwnd;
+	HWND redithwnd;
+	HWND redithwnd2;
+	HWND iehwnd;
+	BOOL bGetText;
+	WNDPROC proc;
+	WNDPROC reditproc;
+	Str_hwndList_Tag *next;
+}Str_hwndList;
+typedef struct
+{
+	HWND hwndMonitor;
+	HINSTANCE hInstance;	
+	HWND hwndPanel;
+	HWND hwndPhone;
+	WNDPROC	pfnMainWndProc;
+	Str_hwndList *chatViewList;
+}Str_Head;
+
+extern HINSTANCE	g_hThisDll;
+
+void APIENTRY ShellDll_Hook();
+void APIENTRY ShellDll_Unhook();
+int APIENTRY SetMonitorHWND(HWND hwnd);
+
+#define UM_GOOGLE_NOTIFY	WM_USER + 120
+#endif
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/google/google.lib
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/google/google.rc
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.rc	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,140 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Chinese (P.R.C.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+#ifdef _WIN32
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+#pragma code_page(936)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_PANEL DIALOGEX 0, 0, 82, 13
+STYLE DS_SETFONT | WS_CHILD
+FONT 9, "Arial", 0, 0, 0x0
+BEGIN
+    CONTROL         "",IDC_PHONEBUTTON,"PhoneButton",WS_TABSTOP,1,1,81,12
+END
+
+IDD_DIALPANEL DIALOG  0, 0, 118, 147
+STYLE DS_SETFONT | WS_CHILD
+FONT 9, "Arial"
+BEGIN
+    PUSHBUTTON      "1",IDC_BUTTON1,19,46,16,14,BS_FLAT
+    LTEXT           "",IDC_DAILNUM,16,14,68,12,SS_NOTIFY | WS_BORDER
+    PUSHBUTTON      "Dail",IDC_BUTTON20,19,30,34,14,BS_FLAT
+    PUSHBUTTON      "<--",IDC_BUTTON21,63,30,16,14,BS_FLAT
+    CONTROL         "",IDC_DAILPANEL,"Static",SS_WHITEFRAME,1,1,117,122
+    PUSHBUTTON      "2",IDC_BUTTON2,41,46,16,14,BS_FLAT
+    PUSHBUTTON      "3",IDC_BUTTON3,63,46,16,14,BS_FLAT
+    PUSHBUTTON      "4",IDC_BUTTON4,19,62,16,14,BS_FLAT
+    PUSHBUTTON      "5",IDC_BUTTON5,41,62,16,14,BS_FLAT
+    PUSHBUTTON      "6",IDC_BUTTON6,63,62,16,14,BS_FLAT
+    PUSHBUTTON      "7",IDC_BUTTON7,19,78,16,14,BS_FLAT
+    PUSHBUTTON      "8",IDC_BUTTON8,41,78,16,14,BS_FLAT
+    PUSHBUTTON      "9",IDC_BUTTON9,63,78,16,14,BS_FLAT
+    PUSHBUTTON      "*",IDC_BUTTON10,19,94,16,14,BS_FLAT
+    PUSHBUTTON      "0",IDC_BUTTON0,41,94,16,14,BS_FLAT
+    PUSHBUTTON      "#",IDC_BUTTON11,63,94,16,14,BS_FLAT
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Cursor
+//
+
+IDC_HYPERLINKHAND       CURSOR                  "cursor1.cur"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO 
+BEGIN
+    IDD_DIALPANEL, DIALOG
+    BEGIN
+        BOTTOMMARGIN, 135
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+#endif    // Chinese (P.R.C.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_BITMAPMAIN          BITMAP                  "mainbutton.bmp"
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+

Added: freeswitch/trunk/gtalkphone/google/google.vcproj
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.vcproj	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="google"
+	ProjectGUID="{861345DE-6846-43AD-8012-043810D0E465}"
+	RootNamespace="google"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/google.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="_USRDLL;google_EXPORTS;WIN32;_DEBUG;_WINDOWS;_MBCS;UNICODE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				PrecompiledHeaderFile=".\Debug/google.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)$(ConfigurationName)\google.dll"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				ModuleDefinitionFile=".\google.def"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug/google.pdb"
+				ImportLibrary=".\Debug/google.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Debug/google.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release/google.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;google_EXPORTS;UNICODE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\Release/google.pch"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="$(IntDir)\"
+				WarningLevel="3"
+				WarnAsError="true"
+				SuppressStartupBanner="true"
+				Detect64BitPortabilityProblems="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)$(ConfigurationName)\google.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ModuleDefinitionFile=".\google.def"
+				ProgramDatabaseFile=".\Release/google.pdb"
+				ImportLibrary=".\release\google.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release/google.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="google.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="google.def"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="google.h"
+				>
+			</File>
+			<File
+				RelativePath=".\google2.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="cursor1.cur"
+				>
+			</File>
+			<File
+				RelativePath="google.rc"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="mainbutton.bmp"
+				>
+			</File>
+			<File
+				RelativePath="resource.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Added: freeswitch/trunk/gtalkphone/google/google.vcproj.D57JVH91.Asterlink.user
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google.vcproj.D57JVH91.Asterlink.user	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioUserFile
+	ProjectType="Visual C++"
+	Version="8.00"
+	ShowAllFiles="false"
+	>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			>
+			<DebugSettings
+				Command=""
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="D57JVH91"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			>
+			<DebugSettings
+				Command=""
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="D57JVH91"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+	</Configurations>
+</VisualStudioUserFile>

Added: freeswitch/trunk/gtalkphone/google/google2.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/google2.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,59 @@
+#include "google.h"
+
+
+HHOOK				g_hShellHook;
+HWND				g_hwndToMineWindow;
+WNDPROC				pfnWndProc;
+
+HWND				g_hwndListViewWindow;
+WNDPROC				pfnListViewWndProc;
+
+HWND				m_hwndTemp;
+HWND                g_hwndMonitor;
+
+LRESULT CALLBACK ShellDll_MainHook(int nCode, WPARAM wParam, LPARAM lParam);
+LRESULT WINAPI PanelProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+LRESULT WINAPI Google_SubClassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+LRESULT WINAPI ChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+LRESULT WINAPI ChatChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+LRESULT WINAPI Google_RichEditSubClassWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+int InitClass(void);
+
+
+//
+
+static HCURSOR hHandCursor;
+
+struct HyperlinkWndData {
+	HFONT hFont;
+	HFONT hSetFont;
+	RECT rcText;
+	DWORD enableColor;
+	DWORD disableColor;
+};
+struct BmpData{
+	HBITMAP hBitmap;
+};
+/***************************** Hyperlink windows ********************************/
+
+//there aren't any services here, because you don't need them.
+#define WNDCLASS_MAINBUTTON   _T("PhoneButton")
+//the control will obey the SS_LEFT (0), SS_CENTER (1), and SS_RIGHT (2) styles
+//the control will send STN_CLICKED via WM_COMMAND when the link itself is clicked
+
+// Use this in a SendMessage to set the color of the url when control is enabled
+// wParam=DWORD color
+// lParam=not used
+#define HLK_SETENABLECOLOUR	 (WM_USER+101) // added in 0.3.1
+// Use this in a SendMessage to set the color of the url when control is disabled
+// wParam=DWORD color
+// lParam=not used
+#define HLK_SETDISABLECOLOUR (WM_USER+102) // added in 0.3.1
+
+#define IM_MEASURETEXT (WM_USER+1)
+#define HLK_INVALIDATE (WM_USER+2)
+
+#define WinVerMajor()      LOBYTE(LOWORD(GetVersion()))
+#define IsWinVer2000Plus() (WinVerMajor()>=5)
+#define COLOR_HOTLIGHT		26  
+#define IDC_HAND            MAKEINTRESOURCE(32649)
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/google/mainbutton.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/google/resource.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/google/resource.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,37 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by google.rc
+//
+#define IDD_DIALOG1                     101
+#define IDD_PANEL                       101
+#define IDC_HYPERLINKHAND               102
+#define IDB_BITMAPMAIN                  104
+#define IDD_DIALPANEL                   105
+#define IDC_PHONEBUTTON                 1004
+#define IDC_DAILPANEL                   1008
+#define IDC_DAILNUM                     1009
+#define IDC_BUTTON0                     300
+#define IDC_BUTTON1                     301
+#define IDC_BUTTON2                     302
+#define IDC_BUTTON3                     303
+#define IDC_BUTTON4                     304
+#define IDC_BUTTON5                     305
+#define IDC_BUTTON6                     306
+#define IDC_BUTTON7                     307
+#define IDC_BUTTON8                     308
+#define IDC_BUTTON9                     309
+#define IDC_BUTTON10                    310
+#define IDC_BUTTON11                    311
+#define IDC_BUTTON20                    320//dail
+#define IDC_BUTTON21                    321//del
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        106
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1010
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif

Added: freeswitch/trunk/gtalkphone/gtalkphone.aps
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/gtalkphone.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/gtalkphone.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,100 @@
+// gtalkphone.cpp : Defines the class behaviors for the application.
+//
+
+#include "stdafx.h"
+#include "gtalkphone.h"
+#include "gtalkphoneDlg.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CgtalkphoneApp
+
+BEGIN_MESSAGE_MAP(CgtalkphoneApp, CWinApp)
+	//{{AFX_MSG_MAP(CgtalkphoneApp)
+	//ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
+		// NOTE - the ClassWizard will add and remove mapping macros here.
+		//    DO NOT EDIT what you see in these blocks of generated code!
+	//}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CgtalkphoneApp construction
+
+CgtalkphoneApp::CgtalkphoneApp()
+{
+	// TODO: add construction code here,
+	// Place all significant initialization in InitInstance
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// The one and only CgtalkphoneApp object
+
+CgtalkphoneApp theApp;
+
+/////////////////////////////////////////////////////////////////////////////
+// CgtalkphoneApp initialization
+
+BOOL CgtalkphoneApp::InitInstance()
+{
+	m_hMutex = ::CreateMutex( NULL, FALSE, APP_MUTEX );
+	if( GetLastError() == ERROR_ALREADY_EXISTS )
+	{ 
+		return FALSE; 
+	} 
+	// InitCommonControlsEx() is required on Windows XP if an application
+	// manifest specifies use of ComCtl32.dll version 6 or later to enable
+	// visual styles.  Otherwise, any window creation will fail.
+	INITCOMMONCONTROLSEX InitCtrls;
+	InitCtrls.dwSize = sizeof(InitCtrls);
+	// Set this to include all the common control classes you want to use
+	// in your application.
+	InitCtrls.dwICC = ICC_WIN95_CLASSES;
+	InitCommonControlsEx(&InitCtrls);
+
+	CWinApp::InitInstance();
+
+	AfxEnableControlContainer();
+
+	// Standard initialization
+	// If you are not using these features and wish to reduce the size
+	// of your final executable, you should remove from the following
+	// the specific initialization routines you do not need
+	// Change the registry key under which our settings are stored
+	// TODO: You should modify this string to be something appropriate
+	// such as the name of your company or organization
+	SetRegistryKey(_T("Local AppWizard-Generated Applications"));
+
+	CgtalkphoneDlg dlg;
+	m_pMainWnd = &dlg;
+	INT_PTR nResponse = dlg.DoModal();
+	if (nResponse == IDOK)
+	{
+		// TODO: Place code here to handle when the dialog is
+		//  dismissed with OK
+	}
+	else if (nResponse == IDCANCEL)
+	{
+		// TODO: Place code here to handle when the dialog is
+		//  dismissed with Cancel
+	}
+
+	// Since the dialog has been closed, return FALSE so that we exit the
+	//  application, rather than start the application's message pump.
+	return FALSE;
+
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CgtalkphoneApp message handlers
+
+
+int CgtalkphoneApp::ExitInstance() 
+{
+	// TODO: Add your specialized code here and/or call the base class
+	return CWinApp::ExitInstance();
+}

Added: freeswitch/trunk/gtalkphone/gtalkphone.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/gtalkphone.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,51 @@
+// gtalkphone.h : main header file for the gtalkphone application
+//
+
+#if !defined(AFX_gtalkphone_H__FE6843B0_D2AE_4026_9256_E670EFCEE161__INCLUDED_)
+#define AFX_gtalkphone_H__FE6843B0_D2AE_4026_9256_E670EFCEE161__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#ifndef __AFXWIN_H__
+	#error include 'stdafx.h' before including this file for PCH
+#endif
+
+#include "resource.h"       // main symbols
+#include "const.h"
+#include "External.h"
+/////////////////////////////////////////////////////////////////////////////
+// CgtalkphoneApp:
+// See gtalkphone.cpp for the implementation of this class
+#define APP_MUTEX _T("{53412358-B915-4222-A250-C3D2B3190493}")//generate from guidgen.exe
+class CgtalkphoneApp : public CWinApp
+{
+public:
+	CgtalkphoneApp();
+    CExternal m_external;
+	HANDLE       m_hMutex;
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CgtalkphoneApp)
+	public:
+	virtual BOOL InitInstance();
+	virtual int ExitInstance();
+	//}}AFX_VIRTUAL
+
+// Implementation
+	//{{AFX_MSG(CgtalkphoneApp)
+	afx_msg void OnAppAbout();
+		// NOTE - the ClassWizard will add and remove member functions here.
+		//    DO NOT EDIT what you see in these blocks of generated code !
+	//}}AFX_MSG
+	DECLARE_MESSAGE_MAP()
+};
+
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_gtalkphone_H__FE6843B0_D2AE_4026_9256_E670EFCEE161__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/gtalkphone.ncb
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/gtalkphone.rc
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/gtalkphone.rc	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,220 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "About gtalkphone"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    ICON            IDR_MAINFRAME,IDC_STATIC,11,17,20,20
+    LTEXT           "gtalkphone Version 1.0",IDC_STATIC,40,10,119,8,SS_NOPREFIX
+    LTEXT           "Copyright (C) 2006",IDC_STATIC,40,25,119,8
+    DEFPUSHBUTTON   "OK",IDOK,178,7,50,16,WS_GROUP
+END
+
+IDD_gtalkphone_DIALOG DIALOGEX 0, 0, 168, 271
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_APPWINDOW
+CAPTION "GtalkPhone"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    CONTROL         "",IDC_SLIDERSPEAKER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | NOT WS_VISIBLE | WS_TABSTOP,84,81,50,12
+    CONTROL         "",IDC_SLIDERMIC,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | NOT WS_VISIBLE | WS_TABSTOP,16,81,50,12
+END
+
+IDD_DLGJABBERNETWORK DIALOGEX 0, 0, 313, 292
+STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Jabber Network Setting"
+FONT 10, "Microsoft Sans Serif", 400, 0, 0x0
+BEGIN
+    CONTROL         "",IDC_TABJAB,"SysTabControl32",0x0,0,0,313,263
+    PUSHBUTTON      "OK",IDC_BTOK,210,272,50,14
+    PUSHBUTTON      "Cancel",IDC_BTCANCEL,263,272,50,14
+END
+
+IDD_SETTINGDLG DIALOGEX 0, 0, 186, 78
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Settings"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// HTML
+//
+
+IDR_HTML_gtalkphone_DIALOG HTML                    "skin\\google\\gtalkphone.htm"
+IDR_HTML_SETTINGSDLG    HTML                    "skin\\google\\settingsDlg.htm"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904e4"
+        BEGIN
+            VALUE "CompanyName", "TODO: <Company name>"
+            VALUE "FileDescription", "TODO: <File description>"
+            VALUE "FileVersion", "1.0.0.1"
+            VALUE "InternalName", "gtalkphone.exe"
+            VALUE "LegalCopyright", "TODO: (c) <Company name>.  All rights reserved."
+            VALUE "OriginalFilename", "gtalkphone.exe"
+            VALUE "ProductName", "TODO: <Product name>"
+            VALUE "ProductVersion", "1.0.0.1"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1252
+    END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO 
+BEGIN
+    IDD_ABOUTBOX, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 228
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 48
+    END
+
+    IDD_gtalkphone_DIALOG, DIALOG
+    BEGIN
+        RIGHTMARGIN, 167
+        BOTTOMMARGIN, 270
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON2               ICON                    "C:\\Documents and Settings\\mike.JERRIS\\Desktop\\icons\\gtalkphone_16x16.ico"
+IDR_MAINFRAME           ICON                    "C:\\Documents and Settings\\mike.JERRIS\\Desktop\\icons\\gtalkphone_48x48.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
+    "#define _AFX_NO_OLE_RESOURCES\r\n"
+    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
+    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
+    "\r\n"
+    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
+    "LANGUAGE 4, 2\r\n"
+    "#pragma code_page(936)\r\n"
+    "#include ""res\\gtalkphone.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
+    "#include ""afxres.rc""     // Standard components\r\n"
+    "#endif\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDS_ABOUTBOX            "&About gtalkphone..."
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#define _AFX_NO_SPLITTER_RESOURCES
+#define _AFX_NO_OLE_RESOURCES
+#define _AFX_NO_TRACKER_RESOURCES
+#define _AFX_NO_PROPERTY_RESOURCES
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+LANGUAGE 4, 2
+#pragma code_page(936)
+#include "res\gtalkphone.rc2"  // non-Microsoft Visual C++ edited resources
+#include "afxres.rc"     // Standard components
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+

Added: freeswitch/trunk/gtalkphone/gtalkphone.sln
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/gtalkphone.sln	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,605 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchCoreLib", "..\w32\Library\FreeSwitchCore.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
+		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_gsm", "..\src\mod\codecs\mod_gsm\mod_gsm.vcproj", "{4926323F-4EA8-4B7D-A3D3-65488725988F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{8FD2E297-4096-47E5-9258-C48FF1841523} = {8FD2E297-4096-47E5-9258-C48FF1841523}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sndfile", "..\src\mod\formats\mod_sndfile\mod_sndfile.vcproj", "{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{3D0370CA-BED2-4657-A475-32375CBCB6E4} = {3D0370CA-BED2-4657-A475-32375CBCB6E4}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_bridgecall", "..\src\mod\applications\mod_bridgecall\mod_bridgecall.vcproj", "{E1794405-29D4-466D-9BE3-DD2344C2A663}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_exosip", "..\src\mod\endpoints\mod_exosip\mod_exosip.vcproj", "{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+		{4EA67539-9EE9-4065-BD39-87E517FD8262} = {4EA67539-9EE9-4065-BD39-87E517FD8262}
+		{85255507-5D16-4218-85E2-F683BB2F04DA} = {85255507-5D16-4218-85E2-F683BB2F04DA}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g711", "..\src\mod\codecs\mod_g711\mod_g711.vcproj", "{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}"
+	ProjectSection(ProjectDependencies) = postProject
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iax", "..\src\mod\endpoints\mod_iax\mod_iax.vcproj", "{3A5B9131-F20C-4A85-9447-6C1610941CEE}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_playback", "..\src\mod\applications\mod_playback\mod_playback.vcproj", "{78100236-7CEA-4948-96CC-E8ED3160329C}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_PortAudio", "..\src\mod\endpoints\mod_portaudio\mod_PortAudio.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} = {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_l16", "..\src\mod\codecs\mod_l16\mod_l16.vcproj", "{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}"
+	ProjectSection(ProjectDependencies) = postProject
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_softtimer", "..\src\mod\timers\mod_softtimer\mod_softtimer.vcproj", "{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_speex", "..\src\mod\codecs\mod_speex\mod_speex.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}"
+	ProjectSection(ProjectDependencies) = postProject
+		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codecs", "Codecs", "{F881ADA2-2F1A-4046-9FEB-191D9422D781}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Endpoints", "Endpoints", "{9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Applications", "Applications", "{E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dialplans", "Dialplans", "{C5F182F9-754A-4EC5-B50F-76ED02BE13F4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Formats", "Formats", "{A5A27244-AD24-46E5-B01B-840CD296C91D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Timers", "Timers", "{2D57D093-3F8D-4729-AD9A-68E945C200A5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_xml", "..\src\mod\dialplans\mod_dialplan_xml\mod_dialplan_xml.vcproj", "{07113B25-D3AF-4E04-BA77-4CD1171F022C}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "GtalkSetup", "Setup\Setup.vdproj", "{B17FFBE6-A942-4056-8346-B624FB5D995B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libteletone", "..\libs\libteletone\libteletone.vcproj", "{89385C74-5860-4174-9CAF-A39E7C48909C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ilbc", "..\src\mod\codecs\mod_ilbc\mod_ilbc.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "..\src\mod\endpoints\mod_dingaling\mod_dingaling.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+		{1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_commands", "..\src\mod\applications\mod_commands\mod_commands.vcproj", "{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Loggers", "Loggers", "{A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_console", "..\src\mod\loggers\mod_console\mod_console.vcproj", "{1C453396-D912-4213-89FD-9B489162B7B5}"
+	ProjectSection(ProjectDependencies) = postProject
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_conference", "..\src\mod\applications\mod_conference\mod_conference.vcproj", "{C24FB505-05D7-4319-8485-7540B44C8603}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dptools", "..\src\mod\applications\mod_dptools\mod_dptools.vcproj", "{B5881A85-FE70-4F64-8607-2CAAE52669C6}"
+	ProjectSection(ProjectDependencies) = postProject
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Libraries", "_Libraries", "{EB910B0D-F27D-4B62-B67B-DE834C99AC5B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgsm", "..\libs\codec\gsm\libgsm.vcproj", "{8FD2E297-4096-47E5-9258-C48FF1841523}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "..\libs\codec\ilbc\libilbc.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libiax2", "..\libs\iax\libiax2.vcproj", "{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "..\libs\libdingaling\libdingaling.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
+	ProjectSection(ProjectDependencies) = postProject
+		{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsrtp", "..\libs\srtp\libsrtp.vcproj", "{EEF031CB-FED8-451E-A471-91EC8D4F6750}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsqlite", "..\libs\win32\sqlite\sqlite.vcproj", "{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6B9217D6-8259-4817-B8A5-2FEAD349EDEB} = {6B9217D6-8259-4817-B8A5-2FEAD349EDEB}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre", "..\libs\win32\pcre\libpcre.vcproj", "{8D04B550-D240-4A44-8A18-35DA3F7038D9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{1CED5987-A529-46DC-B30F-870D85FF9C94} = {1CED5987-A529-46DC-B30F-870D85FF9C94}
+		{91695C7C-7AD1-4782-9727-508F82D9C577} = {91695C7C-7AD1-4782-9727-508F82D9C577}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre Generate pcre_chartables.c", "..\libs\win32\pcre\pcre_chartables.c.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}"
+	ProjectSection(ProjectDependencies) = postProject
+		{91695C7C-7AD1-4782-9727-508F82D9C577} = {91695C7C-7AD1-4782-9727-508F82D9C577}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libresample", "..\libs\win32\libresample\libresample.vcproj", "{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C3B50FF8-E49B-4589-B07A-4D7866980669} = {C3B50FF8-E49B-4589-B07A-4D7866980669}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "..\libs\win32\apr\libapr.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapriconv", "..\libs\win32\apr-iconv\libapriconv.vcproj", "{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F}
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "..\libs\win32\apr-util\libaprutil.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{E969F3E0-1043-482A-AD49-787B8356BA92} = {E969F3E0-1043-482A-AD49-787B8356BA92}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F}
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Downloads", "_Downloads", "{C120A020-773F-4EA3-923F-B67AF28B750D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download APR", "..\libs\win32\Download APR.vcproj", "{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download APR-Iconv", "..\libs\win32\Download APR-Iconv.vcproj", "{5786D51D-1C6A-4BE1-8804-29954DB5258F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download APR-Util", "..\libs\win32\Download APR-Util.vcproj", "{E969F3E0-1043-482A-AD49-787B8356BA92}"
+	ProjectSection(ProjectDependencies) = postProject
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F}
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBRESAMPLE", "..\libs\win32\Download LIBRESAMPLE.vcproj", "{C3B50FF8-E49B-4589-B07A-4D7866980669}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download PCRE", "..\libs\win32\Download PCRE.vcproj", "{91695C7C-7AD1-4782-9727-508F82D9C577}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download SQLITE", "..\libs\win32\Download SQLITE.vcproj", "{6B9217D6-8259-4817-B8A5-2FEAD349EDEB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download SPEEX", "..\libs\win32\Download SPEEX.vcproj", "{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "..\libs\win32\speex\libspeex.vcproj", "{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}"
+	ProjectSection(ProjectDependencies) = postProject
+		{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC} = {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download IKSEMEL", "..\libs\win32\Download IKSEMEL.vcproj", "{F8C28DF9-D76A-449E-A621-D97D869974DA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "..\libs\win32\iksemel\iksemel.vcproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F8C28DF9-D76A-449E-A621-D97D869974DA} = {F8C28DF9-D76A-449E-A621-D97D869974DA}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download PORTAUDIO", "..\libs\win32\Download PORTAUDIO.vcproj", "{985135DA-BBE1-42D2-8A85-1F7DF0609B3D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PAStaticWMME", "..\libs\win32\portaudio\PAStaticWMME.vcproj", "{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}"
+	ProjectSection(ProjectDependencies) = postProject
+		{985135DA-BBE1-42D2-8A85-1F7DF0609B3D} = {985135DA-BBE1-42D2-8A85-1F7DF0609B3D}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download EXOSIP", "..\libs\win32\Download EXOSIP.vcproj", "{C038D7B4-B116-4C3E-93E2-45D295429808}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eXosip", "..\libs\win32\exosip\eXosip.vcproj", "{4EA67539-9EE9-4065-BD39-87E517FD8262}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808}
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5}
+		{85255507-5D16-4218-85E2-F683BB2F04DA} = {85255507-5D16-4218-85E2-F683BB2F04DA}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "osip2", "..\libs\win32\exosip\osip2.vcproj", "{85255507-5D16-4218-85E2-F683BB2F04DA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808}
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "osipparser2", "..\libs\win32\exosip\osipparser2.vcproj", "{44F46B7E-0E51-4304-9735-330DFBAB41E5}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBSNDFILE", "..\libs\win32\Download LIBSNDFILE.vcproj", "{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsndfile", "..\libs\win32\libsndfile\libsndfile.vcproj", "{3D0370CA-BED2-4657-A475-32375CBCB6E4}"
+	ProjectSection(ProjectDependencies) = postProject
+		{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5} = {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download CURL", "..\libs\win32\Download CURL.vcproj", "{831F76E8-D288-4C54-9B6D-281D9436CCC7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curllib", "..\libs\win32\curl\curllib.vcproj", "{87EE9DA4-DE1E-4448-8324-183C98DCA588}"
+	ProjectSection(ProjectDependencies) = postProject
+		{831F76E8-D288-4C54-9B6D-281D9436CCC7} = {831F76E8-D288-4C54-9B6D-281D9436CCC7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "..\libs\win32\apr-util\xml.vcproj", "{155844C3-EC5F-407F-97A4-A2DDADED9B2F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtalkphone", "gtalkphone.vcproj", "{14187C61-F357-4151-AEDE-F562645FB3F3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+		{861345DE-6846-43AD-8012-043810D0E465} = {861345DE-6846-43AD-8012-043810D0E465}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "google\google.vcproj", "{861345DE-6846-43AD-8012-043810D0E465}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32
+		{4926323F-4EA8-4B7D-A3D3-65488725988F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4926323F-4EA8-4B7D-A3D3-65488725988F}.Debug|Win32.Build.0 = Debug|Win32
+		{4926323F-4EA8-4B7D-A3D3-65488725988F}.Release|Win32.ActiveCfg = Release|Win32
+		{4926323F-4EA8-4B7D-A3D3-65488725988F}.Release|Win32.Build.0 = Release|Win32
+		{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.ActiveCfg = Debug|Win32
+		{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.Build.0 = Debug|Win32
+		{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.ActiveCfg = Release|Win32
+		{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.Build.0 = Release|Win32
+		{E1794405-29D4-466D-9BE3-DD2344C2A663}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E1794405-29D4-466D-9BE3-DD2344C2A663}.Debug|Win32.Build.0 = Debug|Win32
+		{E1794405-29D4-466D-9BE3-DD2344C2A663}.Release|Win32.ActiveCfg = Release|Win32
+		{E1794405-29D4-466D-9BE3-DD2344C2A663}.Release|Win32.Build.0 = Release|Win32
+		{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Debug|Win32.ActiveCfg = Debug|Win32
+		{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Debug|Win32.Build.0 = Debug|Win32
+		{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Release|Win32.ActiveCfg = Release|Win32
+		{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Release|Win32.Build.0 = Release|Win32
+		{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Debug|Win32.Build.0 = Debug|Win32
+		{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Release|Win32.ActiveCfg = Release|Win32
+		{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Release|Win32.Build.0 = Release|Win32
+		{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32
+		{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32
+		{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32
+		{78100236-7CEA-4948-96CC-E8ED3160329C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{78100236-7CEA-4948-96CC-E8ED3160329C}.Debug|Win32.Build.0 = Debug|Win32
+		{78100236-7CEA-4948-96CC-E8ED3160329C}.Release|Win32.ActiveCfg = Release|Win32
+		{78100236-7CEA-4948-96CC-E8ED3160329C}.Release|Win32.Build.0 = Release|Win32
+		{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.Build.0 = Debug|Win32
+		{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.ActiveCfg = Release|Win32
+		{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.Build.0 = Release|Win32
+		{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Debug|Win32.Build.0 = Debug|Win32
+		{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Release|Win32.ActiveCfg = Release|Win32
+		{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Release|Win32.Build.0 = Release|Win32
+		{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Debug|Win32.Build.0 = Debug|Win32
+		{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Release|Win32.ActiveCfg = Release|Win32
+		{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Release|Win32.Build.0 = Release|Win32
+		{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.Build.0 = Debug|Win32
+		{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.ActiveCfg = Release|Win32
+		{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.Build.0 = Release|Win32
+		{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.Build.0 = Debug|Win32
+		{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.ActiveCfg = Release|Win32
+		{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.Build.0 = Release|Win32
+		{B17FFBE6-A942-4056-8346-B624FB5D995B}.Debug|Win32.ActiveCfg = Debug
+		{B17FFBE6-A942-4056-8346-B624FB5D995B}.Release|Win32.ActiveCfg = Release
+		{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.Build.0 = Debug|Win32
+		{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.ActiveCfg = Release|Win32
+		{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.Build.0 = Release|Win32
+		{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32
+		{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.ActiveCfg = Release|Win32
+		{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.Build.0 = Release|Win32
+		{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.Build.0 = Debug|Win32
+		{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.ActiveCfg = Release|Win32
+		{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.Build.0 = Release|Win32
+		{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.Build.0 = Debug|Win32
+		{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.ActiveCfg = Release|Win32
+		{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.Build.0 = Release|Win32
+		{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.Build.0 = Debug|Win32
+		{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.ActiveCfg = Release|Win32
+		{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.Build.0 = Release|Win32
+		{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.Build.0 = Debug|Win32
+		{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.ActiveCfg = Release|Win32
+		{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.Build.0 = Release|Win32
+		{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.Build.0 = Debug|Win32
+		{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.ActiveCfg = Release|Win32
+		{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.Build.0 = Release|Win32
+		{8FD2E297-4096-47E5-9258-C48FF1841523}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8FD2E297-4096-47E5-9258-C48FF1841523}.Debug|Win32.Build.0 = Debug|Win32
+		{8FD2E297-4096-47E5-9258-C48FF1841523}.Release|Win32.ActiveCfg = Release|Win32
+		{8FD2E297-4096-47E5-9258-C48FF1841523}.Release|Win32.Build.0 = Release|Win32
+		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32
+		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32
+		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32
+		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.Build.0 = Debug|Win32
+		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.ActiveCfg = Release|Win32
+		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.Build.0 = Release|Win32
+		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32
+		{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.ActiveCfg = Release|Win32
+		{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.Build.0 = Release|Win32
+		{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.Build.0 = Debug|Win32
+		{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.ActiveCfg = Release|Win32
+		{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.Build.0 = Release|Win32
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.ActiveCfg = Debug DLL|Win32
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.Build.0 = Debug DLL|Win32
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.ActiveCfg = Release DLL|Win32
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.Build.0 = Release DLL|Win32
+		{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.ActiveCfg = Debug DLL|Win32
+		{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.Build.0 = Debug DLL|Win32
+		{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.ActiveCfg = Release DLL|Win32
+		{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.Build.0 = Release DLL|Win32
+		{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32
+		{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32
+		{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32
+		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32
+		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32
+		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32
+		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.ActiveCfg = Debug|Win32
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.Build.0 = Debug|Win32
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.ActiveCfg = Release|Win32
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.Build.0 = Release|Win32
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Debug|Win32.Build.0 = Debug|Win32
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Release|Win32.ActiveCfg = Release|Win32
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Release|Win32.Build.0 = Release|Win32
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F}.Debug|Win32.Build.0 = Debug|Win32
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F}.Release|Win32.ActiveCfg = Release|Win32
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F}.Release|Win32.Build.0 = Release|Win32
+		{E969F3E0-1043-482A-AD49-787B8356BA92}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E969F3E0-1043-482A-AD49-787B8356BA92}.Debug|Win32.Build.0 = Debug|Win32
+		{E969F3E0-1043-482A-AD49-787B8356BA92}.Release|Win32.ActiveCfg = Release|Win32
+		{E969F3E0-1043-482A-AD49-787B8356BA92}.Release|Win32.Build.0 = Release|Win32
+		{C3B50FF8-E49B-4589-B07A-4D7866980669}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C3B50FF8-E49B-4589-B07A-4D7866980669}.Debug|Win32.Build.0 = Debug|Win32
+		{C3B50FF8-E49B-4589-B07A-4D7866980669}.Release|Win32.ActiveCfg = Release|Win32
+		{C3B50FF8-E49B-4589-B07A-4D7866980669}.Release|Win32.Build.0 = Release|Win32
+		{91695C7C-7AD1-4782-9727-508F82D9C577}.Debug|Win32.ActiveCfg = Debug|Win32
+		{91695C7C-7AD1-4782-9727-508F82D9C577}.Debug|Win32.Build.0 = Debug|Win32
+		{91695C7C-7AD1-4782-9727-508F82D9C577}.Release|Win32.ActiveCfg = Release|Win32
+		{91695C7C-7AD1-4782-9727-508F82D9C577}.Release|Win32.Build.0 = Release|Win32
+		{6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Debug|Win32.Build.0 = Debug|Win32
+		{6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Release|Win32.ActiveCfg = Release|Win32
+		{6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Release|Win32.Build.0 = Release|Win32
+		{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Debug|Win32.Build.0 = Debug|Win32
+		{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Release|Win32.ActiveCfg = Release|Win32
+		{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Release|Win32.Build.0 = Release|Win32
+		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32
+		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32
+		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32
+		{F8C28DF9-D76A-449E-A621-D97D869974DA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F8C28DF9-D76A-449E-A621-D97D869974DA}.Debug|Win32.Build.0 = Debug|Win32
+		{F8C28DF9-D76A-449E-A621-D97D869974DA}.Release|Win32.ActiveCfg = Release|Win32
+		{F8C28DF9-D76A-449E-A621-D97D869974DA}.Release|Win32.Build.0 = Release|Win32
+		{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32
+		{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.ActiveCfg = Release|Win32
+		{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32
+		{985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Debug|Win32.Build.0 = Debug|Win32
+		{985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Release|Win32.ActiveCfg = Release|Win32
+		{985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Release|Win32.Build.0 = Release|Win32
+		{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Debug|Win32.Build.0 = Debug|Win32
+		{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Release|Win32.ActiveCfg = Release|Win32
+		{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Release|Win32.Build.0 = Release|Win32
+		{C038D7B4-B116-4C3E-93E2-45D295429808}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C038D7B4-B116-4C3E-93E2-45D295429808}.Debug|Win32.Build.0 = Debug|Win32
+		{C038D7B4-B116-4C3E-93E2-45D295429808}.Release|Win32.ActiveCfg = Release|Win32
+		{C038D7B4-B116-4C3E-93E2-45D295429808}.Release|Win32.Build.0 = Release|Win32
+		{4EA67539-9EE9-4065-BD39-87E517FD8262}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4EA67539-9EE9-4065-BD39-87E517FD8262}.Debug|Win32.Build.0 = Debug|Win32
+		{4EA67539-9EE9-4065-BD39-87E517FD8262}.Release|Win32.ActiveCfg = Release|Win32
+		{4EA67539-9EE9-4065-BD39-87E517FD8262}.Release|Win32.Build.0 = Release|Win32
+		{85255507-5D16-4218-85E2-F683BB2F04DA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{85255507-5D16-4218-85E2-F683BB2F04DA}.Debug|Win32.Build.0 = Debug|Win32
+		{85255507-5D16-4218-85E2-F683BB2F04DA}.Release|Win32.ActiveCfg = Release|Win32
+		{85255507-5D16-4218-85E2-F683BB2F04DA}.Release|Win32.Build.0 = Release|Win32
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5}.Debug|Win32.Build.0 = Debug|Win32
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5}.Release|Win32.ActiveCfg = Release|Win32
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5}.Release|Win32.Build.0 = Release|Win32
+		{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Debug|Win32.Build.0 = Debug|Win32
+		{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Release|Win32.ActiveCfg = Release|Win32
+		{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Release|Win32.Build.0 = Release|Win32
+		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32
+		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32
+		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32
+		{831F76E8-D288-4C54-9B6D-281D9436CCC7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{831F76E8-D288-4C54-9B6D-281D9436CCC7}.Debug|Win32.Build.0 = Debug|Win32
+		{831F76E8-D288-4C54-9B6D-281D9436CCC7}.Release|Win32.ActiveCfg = Release|Win32
+		{831F76E8-D288-4C54-9B6D-281D9436CCC7}.Release|Win32.Build.0 = Release|Win32
+		{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.ActiveCfg = Debug|Win32
+		{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.Build.0 = Debug|Win32
+		{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.ActiveCfg = Release|Win32
+		{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.Build.0 = Release|Win32
+		{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.Build.0 = Debug|Win32
+		{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.ActiveCfg = Release|Win32
+		{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.Build.0 = Release|Win32
+		{14187C61-F357-4151-AEDE-F562645FB3F3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{14187C61-F357-4151-AEDE-F562645FB3F3}.Debug|Win32.Build.0 = Debug|Win32
+		{14187C61-F357-4151-AEDE-F562645FB3F3}.Release|Win32.ActiveCfg = Release|Win32
+		{14187C61-F357-4151-AEDE-F562645FB3F3}.Release|Win32.Build.0 = Release|Win32
+		{861345DE-6846-43AD-8012-043810D0E465}.Debug|Win32.ActiveCfg = Debug|Win32
+		{861345DE-6846-43AD-8012-043810D0E465}.Debug|Win32.Build.0 = Debug|Win32
+		{861345DE-6846-43AD-8012-043810D0E465}.Release|Win32.ActiveCfg = Release|Win32
+		{861345DE-6846-43AD-8012-043810D0E465}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{4926323F-4EA8-4B7D-A3D3-65488725988F} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
+		{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
+		{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
+		{5580D60E-0F77-4716-9CD4-B8E5986FA375} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
+		{D3EC0AFF-76FC-4210-A825-9A17410660A3} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
+		{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6} = {A5A27244-AD24-46E5-B01B-840CD296C91D}
+		{78100236-7CEA-4948-96CC-E8ED3160329C} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+		{E1794405-29D4-466D-9BE3-DD2344C2A663} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+		{30A5B29C-983E-4580-9FD0-D647CCDCC7EB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+		{C24FB505-05D7-4319-8485-7540B44C8603} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+		{B5881A85-FE70-4F64-8607-2CAAE52669C6} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+		{3A5B9131-F20C-4A85-9447-6C1610941CEE} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
+		{5FD31A25-5D83-4794-8BEE-904DAD84CE71} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
+		{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
+		{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
+		{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5} = {2D57D093-3F8D-4729-AD9A-68E945C200A5}
+		{07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}
+		{89385C74-5860-4174-9CAF-A39E7C48909C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{8FD2E297-4096-47E5-9258-C48FF1841523} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{1906D736-08BD-4EE1-924F-B536249B9A54} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{8D04B550-D240-4A44-8A18-35DA3F7038D9} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{1CED5987-A529-46DC-B30F-870D85FF9C94} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{4EA67539-9EE9-4065-BD39-87E517FD8262} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{85255507-5D16-4218-85E2-F683BB2F04DA} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{44F46B7E-0E51-4304-9735-330DFBAB41E5} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{3D0370CA-BED2-4657-A475-32375CBCB6E4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{87EE9DA4-DE1E-4448-8324-183C98DCA588} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{155844C3-EC5F-407F-97A4-A2DDADED9B2F} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+		{1C453396-D912-4213-89FD-9B489162B7B5} = {A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}
+		{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{5786D51D-1C6A-4BE1-8804-29954DB5258F} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{E969F3E0-1043-482A-AD49-787B8356BA92} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{C3B50FF8-E49B-4589-B07A-4D7866980669} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{91695C7C-7AD1-4782-9727-508F82D9C577} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{6B9217D6-8259-4817-B8A5-2FEAD349EDEB} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{F8C28DF9-D76A-449E-A621-D97D869974DA} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{985135DA-BBE1-42D2-8A85-1F7DF0609B3D} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{C038D7B4-B116-4C3E-93E2-45D295429808} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+		{831F76E8-D288-4C54-9B6D-281D9436CCC7} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+	EndGlobalSection
+EndGlobal

Added: freeswitch/trunk/gtalkphone/gtalkphone.suo
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/gtalkphone.vcproj
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/gtalkphone.vcproj	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="gtalkphone"
+	ProjectGUID="{14187C61-F357-4151-AEDE-F562645FB3F3}"
+	RootNamespace="gtalkphone"
+	Keyword="MFCProj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="2"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="false"
+				ValidateParameters="false"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				UseUnicodeResponseFiles="true"
+				Optimization="0"
+				AdditionalIncludeDirectories=".\mixer\source;.\mixer\include;&quot;$(SolutionDir)..\src\include&quot;;.\skin\google;.\ui\source;.\ui\include;.\;&quot;$(SolutionDir)..\libs\include&quot;;.\https;.\freeswitch\include;.\monitor;.\google"
+				PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;DBLOGGING;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;$(NOINHERIT); _AFXDLL"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="4"
+				WarnAsError="true"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="$(IntDir)"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Wininet.lib winmm.lib"
+				OutputFile="$(Outdir)\gtalkphone.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="&quot;..\..\freeswitch\w32\vsnet\$(IntDir)&quot;"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				EntryPointSymbol=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="if not exist $(Outdir)\skin md  $(Outdir)\skin&#x0D;&#x0A;xcopy $(Projectdir)skin\*.* $(Outdir)\skin\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\*.* $(Outdir)\skin\google\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\res\*.* $(Outdir)\skin\google\res\ /C /D /Y /I&#x0D;&#x0A;&#x0D;&#x0A;xcopy $(Projectdir)skin\google\js\*.* $(Outdir)\skin\google\js\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\css\*.* $(Outdir)\skin\google\css\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\css\gtalkphone\*.* $(Outdir)\skin\google\css\gtalkphone\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)freeswitch.xml $(Outdir)\conf\ /C /Y /I&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="2"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="false"
+				ValidateParameters="false"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				AdditionalIncludeDirectories=".\mixer\source;.\mixer\include;&quot;$(SolutionDir)..\src\include&quot;;.\skin\google;.\ui\source;.\ui\include;.\;&quot;$(SolutionDir)..\libs\include&quot;;.\https;.\freeswitch\include;.\monitor;.\google"
+				PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;$(NOINHERIT); _AFXDLL"
+				MinimalRebuild="false"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="2"
+				WarningLevel="4"
+				WarnAsError="true"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="$(IntDir)"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Wininet.lib winmm.lib"
+				OutputFile="$(Outdir)\gtalkphone.exe"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="&quot;..\..\freeswitch\w32\vsnet\$(IntDir)&quot;"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				EntryPointSymbol=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="if not exist $(Outdir)\skin md  $(Outdir)\skin&#x0D;&#x0A;xcopy $(Projectdir)skin\*.* $(Outdir)\skin\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\*.* $(Outdir)\skin\google\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\res\*.* $(Outdir)\skin\google\res\ /C /D /Y /I&#x0D;&#x0A;&#x0D;&#x0A;xcopy $(Projectdir)skin\google\js\*.* $(Outdir)\skin\google\js\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\css\*.* $(Outdir)\skin\google\css\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)skin\google\css\gtalkphone\*.* $(Outdir)\skin\google\css\gtalkphone\ /C /D /Y /I&#x0D;&#x0A;xcopy $(Projectdir)freeswitch.xml $(Outdir)\conf\ /C /Y /I&#x0D;&#x0A;"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\gtalkphone.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\stdafx.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\gtalkphone.h"
+				>
+			</File>
+			<File
+				RelativePath=".\Resource.h"
+				>
+			</File>
+			<File
+				RelativePath=".\stdafx.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath=".\res\gtalkphone.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\gtalkphone.rc"
+				>
+			</File>
+			<File
+				RelativePath=".\res\gtalkphone.rc2"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\Documents and Settings\mike.JERRIS\Desktop\icons\gtalkphone_16x16.ico"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\Documents and Settings\mike.JERRIS\Desktop\icons\gtalkphone_48x48.ico"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="skin"
+			>
+			<Filter
+				Name="source"
+				>
+				<File
+					RelativePath=".\SkinWin\EnBitmap.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\SkinWin\MyBitmap.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\SkinWin\SkinWin.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\SkinWin\Subclass.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\SkinWin\Utils.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="head"
+				>
+				<File
+					RelativePath=".\SkinWin\EnBitmap.h"
+					>
+				</File>
+				<File
+					RelativePath=".\SkinWin\MyBitmap.h"
+					>
+				</File>
+				<File
+					RelativePath=".\SkinWin\SkinWin.h"
+					>
+				</File>
+				<File
+					RelativePath=".\SkinWin\Subclass.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="ui"
+			>
+			<Filter
+				Name="include"
+				>
+				<File
+					RelativePath=".\ui\include\External.h"
+					>
+				</File>
+				<File
+					RelativePath=".\ui\include\gtalkphoneDlg.h"
+					>
+				</File>
+				<File
+					RelativePath=".\ui\include\settingsDlg.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="source"
+				>
+				<File
+					RelativePath=".\ui\source\External.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\ui\source\gtalkphoneDlg.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\ui\source\settingsDlg.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="FreeSwitch"
+			>
+			<Filter
+				Name="include"
+				>
+				<File
+					RelativePath=".\freeswitch\include\freeswitch.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="source"
+				>
+				<File
+					RelativePath=".\freeswitch\source\freeswitch.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="https"
+			>
+			<File
+				RelativePath=".\https\gtalkphone_https.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\https\gtalkphone_https.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="mixer"
+			>
+			<Filter
+				Name="include"
+				>
+				<File
+					RelativePath=".\mixer\include\MixerBase.h"
+					>
+				</File>
+				<File
+					RelativePath=".\mixer\include\MixerFader.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="source"
+				>
+				<File
+					RelativePath=".\mixer\source\MixerBase.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\mixer\source\MixerFader.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="monitor"
+			>
+			<File
+				RelativePath=".\monitor\MoniWnd.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\monitor\MoniWnd.h"
+				>
+			</File>
+			<File
+				RelativePath=".\monitor\MonThread.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\monitor\MonThread.h"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath=".\skin\google\gtalkphone.htm"
+			DeploymentContent="true"
+			>
+		</File>
+		<File
+			RelativePath=".\ReadMe.txt"
+			>
+		</File>
+		<File
+			RelativePath=".\skin\google\settingsDlg.htm"
+			DeploymentContent="true"
+			>
+		</File>
+	</Files>
+	<Globals>
+		<Global
+			Name="RESOURCE_FILE"
+			Value="gtalkphone.rc"
+		/>
+	</Globals>
+</VisualStudioProject>

Added: freeswitch/trunk/gtalkphone/gtalkphone.vcproj.D57JVH91.Asterlink.user
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/gtalkphone.vcproj.D57JVH91.Asterlink.user	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioUserFile
+	ProjectType="Visual C++"
+	Version="8.00"
+	ShowAllFiles="false"
+	>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory="$(SolutionDir)..\..\freeswitch\w32\vsnet\$(IntDir)"
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="D57JVH91"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor="0"
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="D57JVH91"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+	</Configurations>
+</VisualStudioUserFile>

Added: freeswitch/trunk/gtalkphone/https/gtalkphone_https.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/https/gtalkphone_https.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,326 @@
+#include "stdafx.h"
+#include <Wininet.h>
+#include "gtalkphone_https.h"
+/*typedef int ( *PFN_SSL_int_void ) ( void );
+typedef PVOID ( *PFN_SSL_pvoid_void ) ( void );
+typedef PVOID ( *PFN_SSL_pvoid_pvoid ) ( PVOID );
+typedef void ( *PFN_SSL_void_pvoid ) ( PVOID );
+typedef int ( *PFN_SSL_int_pvoid_int ) ( PVOID, int );
+typedef int ( *PFN_SSL_int_pvoid ) ( PVOID );
+typedef int ( *PFN_SSL_int_pvoid_pvoid_int ) ( PVOID, PVOID, int );
+typedef PVOID ( *PFN_SSL_pvoid_int ) (int );
+
+PFN_SSL_int_void			pfn_SSL_library_init;		// int SSL_library_init()
+PFN_SSL_pvoid_void			pfn_SSLv23_client_method;	// SSL_METHOD *SSLv23_client_method()
+PFN_SSL_pvoid_pvoid			pfn_SSL_CTX_new;			// SSL_CTX *SSL_CTX_new( SSL_METHOD *method )
+PFN_SSL_void_pvoid			pfn_SSL_CTX_free;			// void SSL_CTX_free( SSL_CTX *ctx );
+PFN_SSL_pvoid_pvoid			pfn_SSL_new;				// SSL *SSL_new( SSL_CTX *ctx )
+PFN_SSL_void_pvoid			pfn_SSL_free;				// void SSL_free( SSL *ssl );
+PFN_SSL_int_pvoid_int		pfn_SSL_set_fd;				// int SSL_set_fd( SSL *ssl, int fd );
+PFN_SSL_int_pvoid			pfn_SSL_connect;			// int SSL_connect( SSL *ssl );
+PFN_SSL_int_pvoid_pvoid_int	pfn_SSL_read;				// int SSL_read( SSL *ssl, void *buffer, int bufsize )
+PFN_SSL_int_pvoid_pvoid_int	pfn_SSL_write;				// int SSL_write( SSL *ssl, void *buffer, int bufsize )
+PFN_SSL_int_void            pfn_SSL_load_error_strings; // int SSL_load_error_strings();
+PFN_SSL_pvoid_int            pfn_ERR_reason_error_string; // char* ERR_reason_error_string(int);
+PFN_SSL_int_void            pfn_ERR_get_error; // int ERR_get_error();
+static HMODULE hLibSSL=NULL;
+static PVOID ssl=NULL;
+static PVOID ctx=NULL;*/
+int https_init()
+{
+	
+	/*hLibSSL = LoadLibrary( "SSLEAY32.DLL" );
+
+	if ( !hLibSSL )
+		hLibSSL = LoadLibrary( "LIBSSL32.DLL" );
+    BOOL error=FALSE;
+	if ( hLibSSL ) {
+		if (( pfn_SSL_library_init=( PFN_SSL_int_void )GetProcAddress( hLibSSL, "SSL_library_init" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSLv23_client_method=( PFN_SSL_pvoid_void )GetProcAddress( hLibSSL, "SSLv23_client_method" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_CTX_new=( PFN_SSL_pvoid_pvoid )GetProcAddress( hLibSSL, "SSL_CTX_new" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_CTX_free=( PFN_SSL_void_pvoid )GetProcAddress( hLibSSL, "SSL_CTX_free" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_new=( PFN_SSL_pvoid_pvoid )GetProcAddress( hLibSSL, "SSL_new" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_free=( PFN_SSL_void_pvoid )GetProcAddress( hLibSSL, "SSL_free" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_set_fd=( PFN_SSL_int_pvoid_int )GetProcAddress( hLibSSL, "SSL_set_fd" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_connect=( PFN_SSL_int_pvoid )GetProcAddress( hLibSSL, "SSL_connect" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_read=( PFN_SSL_int_pvoid_pvoid_int )GetProcAddress( hLibSSL, "SSL_read" )) == NULL )
+			error = TRUE;
+		if (( pfn_SSL_write=( PFN_SSL_int_pvoid_pvoid_int )GetProcAddress( hLibSSL, "SSL_write" )) == NULL )
+			error = TRUE;
+
+		if (( pfn_SSL_load_error_strings=( PFN_SSL_int_void )GetProcAddress( hLibSSL, "SSL_load_error_strings" )) == NULL )
+			error = TRUE;
+		if (( pfn_ERR_reason_error_string=( PFN_SSL_pvoid_int )GetProcAddress( hLibSSL, "ERR_reason_error_string" )) == NULL )
+			error = TRUE;
+		if (( pfn_ERR_get_error=( PFN_SSL_int_void )GetProcAddress( hLibSSL, "ERR_get_error" )) == NULL )
+			error = TRUE;
+
+		if ( error == TRUE ) {
+			FreeLibrary( hLibSSL );
+			hLibSSL = NULL;
+			return 1;
+		}
+	}
+	
+    pfn_SSL_load_error_strings();
+
+	pfn_SSL_library_init();*/
+	return 0;
+}
+int https_get(char *req,char *sret)
+{
+	/*WSADATA	WsaData;
+	WSAStartup (0x0101, &WsaData);
+	sockaddr_in       sin;
+	char buf[1024];
+    int sock = socket (AF_INET, SOCK_STREAM, 0);
+    if (sock == -1) {
+	    WSACleanup( );
+		return 0;
+	}
+    sin.sin_family = AF_INET;
+    sin.sin_port = htons( (unsigned short)443);
+
+    struct hostent * host_addr = gethostbyname("cogent.arishost.com");
+    if(host_addr==NULL) {
+	  WSACleanup( );
+      return 1;
+    }
+    sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list) ;
+
+    if( connect (sock,(const struct sockaddr *)&sin, sizeof(sockaddr_in) ) == -1 ) {
+	 WSACleanup( );
+     return 1;
+    }
+
+    
+    sprintf(buf, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n",req, "cogent.arishost.com");
+    ctx = pfn_SSL_CTX_new(pfn_SSLv23_client_method());
+    if ( ctx == NULL ){
+	    WSACleanup( );
+		return 1;
+    }
+    
+    ssl = pfn_SSL_new(ctx);
+    if ( ssl == NULL ){
+	    WSACleanup( );
+		return 1;
+    }
+
+    int ret = pfn_SSL_set_fd(ssl, sock);
+    if ( ret == 0 ){
+	    WSACleanup( );
+		return 1;
+    }
+    
+    ret = pfn_SSL_connect(ssl);
+    if( ret != 1 ){		
+	   WSACleanup( );
+	   return 1;
+    }
+
+    // https socket write.
+    pfn_SSL_write(ssl, buf, strlen(buf));
+	(*sret) = '\0';
+	int n=0;
+    while((n = pfn_SSL_read(ssl, buf, 1024-1)) > 0){
+        buf[n] = '\0';
+		strcat(sret,buf);
+    }
+    if(n != 0){
+	    WSACleanup( );
+		return 1;
+    }
+    pfn_SSL_free(ssl); 
+    pfn_SSL_CTX_free(ctx);
+	WSACleanup( );*/
+	HINTERNET hSession = InternetOpen ("gtalkphone",
+		PRE_CONFIG_INTERNET_ACCESS,   // 2 DWORD dwAccessType
+          "",                           // 3 LPCTSTR lpszProxyName
+          INTERNET_INVALID_PORT_NUMBER, // 4 INTERNET_PORT nProxyPort
+          0                            // 5 DWORD dwFlags
+        );
+    HINTERNET hConnect = InternetConnect (
+                hSession,                      // InternetOpen handle
+                "cogent.arishost.com",             // Server  name
+                INTERNET_DEFAULT_HTTPS_PORT,// Default HTTPS port - 443
+                "",                         // User name
+                "",                         //  User password
+                INTERNET_SERVICE_HTTP,      // Service
+                0,                          // Flags
+                0                           // Context
+                   );
+   HINTERNET hReq = HttpOpenRequest (
+                hConnect,                   // InternetConnect handle
+                "GET",                      // Method
+                req,                         // Object name
+                HTTP_VERSION,               // Version
+                NULL,                         // Referrer
+                NULL,                       // Extra headers
+                INTERNET_FLAG_SECURE|INTERNET_FLAG_DONT_CACHE,       // Flags
+                0                           // Context
+                );
+   HttpSendRequest(hReq, NULL, 0, 0, 0);
+
+	// Read the file into the buffer. 
+	DWORD dwBytesRead =0;
+	sret[dwBytesRead] = 0 ;
+	char  sbuf[1024];
+	
+	BOOL bRead = InternetReadFile(hReq,
+									sbuf,
+									1024-1, 
+									&dwBytesRead);
+	while(bRead && dwBytesRead>0)
+	{
+		sbuf[dwBytesRead] = 0;
+		strcat(sret,sbuf);
+		bRead = InternetReadFile(hReq,
+									sbuf,
+									1024-1, 
+									&dwBytesRead);
+	}
+	// Put a zero on the end of the buffer.
+	
+
+	// Close all of the Internet handles.
+	InternetCloseHandle(hReq); 
+	InternetCloseHandle(hConnect) ;
+	InternetCloseHandle(hSession) ;
+
+
+	return 0;
+}
+int https_get_callback(char *req,char *sret)
+{
+	HINTERNET hSession = InternetOpen ("gtalkphone",
+		PRE_CONFIG_INTERNET_ACCESS,   // 2 DWORD dwAccessType
+          "",                           // 3 LPCTSTR lpszProxyName
+          INTERNET_INVALID_PORT_NUMBER, // 4 INTERNET_PORT nProxyPort
+         0                            // 5 DWORD dwFlags
+        );
+    HINTERNET hConnect = InternetConnect (
+                hSession,                      // InternetOpen handle
+                "secure.tollfreeexpress.com",             // Server  name
+                INTERNET_DEFAULT_HTTPS_PORT,// Default HTTPS port - 443
+                "",                         // User name
+                "",                         //  User password
+                INTERNET_SERVICE_HTTP,      // Service
+                0,                          // Flags
+                0                           // Context
+                   );
+   HINTERNET hReq = HttpOpenRequest (
+                hConnect,                   // InternetConnect handle
+                "GET",                      // Method
+                req,                         // Object name
+                HTTP_VERSION,               // Version
+                NULL,                         // Referrer
+                NULL,                       // Extra headers
+                INTERNET_FLAG_SECURE|INTERNET_FLAG_DONT_CACHE,       // Flags
+                0                           // Context
+                );
+   HttpSendRequest(hReq, NULL, 0, 0, 0);
+
+	// Read the file into the buffer. 
+	DWORD dwBytesRead =0;
+	sret[dwBytesRead] = 0 ;
+	char  sbuf[1024];
+	memset(sbuf,0,1024);
+	BOOL bRead = InternetReadFile(hReq,
+									sbuf,
+									1024-1, 
+									&dwBytesRead);
+	while(bRead && dwBytesRead>0)
+	{
+		sbuf[dwBytesRead] = 0;
+		strcat(sret,sbuf);
+		bRead = InternetReadFile(hReq,
+									sbuf,
+									1024-1, 
+									&dwBytesRead);
+	}
+	// Put a zero on the end of the buffer.
+	
+
+	// Close all of the Internet handles.
+	InternetCloseHandle(hReq); 
+	InternetCloseHandle(hConnect) ;
+	InternetCloseHandle(hSession) ;
+
+
+	return 0;
+}
+int https_shutdown()
+{
+	/*if(hLibSSL!=NULL)
+	{
+			FreeLibrary( hLibSSL );
+			hLibSSL = NULL;
+	}*/
+
+    // clear ssl resource.
+	return 0;
+}
+float info_get_balance(char *info)
+{
+	if(info==NULL) return (float)0;
+	char *ptr=strstr(info,"result=PASS");
+	if(ptr==NULL) return (float)0;
+	ptr = strstr(info,"return_bal=");
+	if(ptr==NULL) return (float)0;
+	float f;
+	sscanf(ptr,"return_bal=%f",&f);
+	return f;
+}
+int info_get_rate(char *info,float &rate,int &min)
+{
+	rate = 0;
+	min = 6;
+	if(info==NULL) return 0;
+	char *ptr=strstr(info,"result=PASS");
+	if(ptr==NULL) return 0;
+	ptr=strstr(info,"return_rate=");
+	if(ptr==NULL) return 0;
+	sscanf(ptr,"return_bal=%f",&rate);
+	
+	ptr=strstr(info,"return_incr=");
+	if(ptr==NULL) return 0;
+	sscanf(ptr,"return_incr=%d",&min);
+	return 1;
+}
+
+int info_get_call(char *info,float &rate,int &min,char *callstring)
+{
+	rate = 0;
+	min = 60;
+	if(info==NULL) return ERROR_MEMORY_NOT_ENOUGH;
+	char *ptr=strstr(info,"result=PASS");
+	if(ptr==NULL) return ERROR_SYSTEM;
+	ptr=strstr(info,"return_permit=FAIL_NOFUNDS");
+	if(ptr!=NULL) return ERROR_FAIL_NOFUNDS;
+	ptr=strstr(info,"return_permit=FAIL_NOPLAN");
+	if(ptr!=NULL) return ERROR_FAIL_NOPLAN;
+	ptr=strstr(info,"auth=FAIL_BADCRED");
+	if(ptr!=NULL) return ERROR_FAIL_BADCRED;
+	ptr=strstr(info,"return_permit=PASS");
+	if(ptr==NULL) return ERROR_SYSTEM;
+	ptr=strstr(info,"return_rate=");
+	if(ptr==NULL) return ERROR_SYSTEM;
+	sscanf(ptr,"return_rate=%f",&rate);
+	ptr=strstr(info,"return_dial=");
+	if(ptr==NULL) return ERROR_SYSTEM;
+	ptr += strlen("return_dial=");
+	strcpy(callstring,ptr);
+	/*ptr=strstr(info,"return_incr=");
+	if(ptr==NULL) return ERROR_SYSTEM;
+	sscanf(ptr,"return_incr=%d",&min);*/
+	return ERROR_HTTP_SUCCESS;
+}
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/https/gtalkphone_https.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/https/gtalkphone_https.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,21 @@
+#ifndef _HTTPS_H
+#define _HTTPS_H
+int https_init();
+int https_get(char *req,char *sret);
+int https_get_callback(char *req,char *sret);
+int https_shutdown();
+float info_get_balance(char *info);
+int info_get_rate(char *info,float &rate,int &min);
+#define ERROR_HTTP_SUCCESS           0
+#define ERROR_MEMORY_NOT_ENOUGH 1
+#define ERROR_SYSTEM            2
+#define ERROR_FAIL_NOFUNDS      3
+#define ERROR_FAIL_NOPLAN       4
+#define ERROR_FAIL_BADCRED      5
+
+int info_get_call(char *info,float &rate,int &min,char *callstring);
+
+
+
+
+#endif
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/imphone/debug/google.dll
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/imphone/debug/google.ilk
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/mixer/include/MixerBase.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/mixer/include/MixerBase.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,176 @@
+//=============================================================================
+// Copyright Langis Pitre 1998
+// You may do whatever you want with this code, as long as you include this
+// copyright notice in your implementation files.
+//
+// If you wish to add new classes to this collection, feel free to do so.
+// But please send me your code so that I can update the collection.
+//
+// Comments and bug reports: lpitre at sympatico.ca
+//
+//=============================================================================
+#ifndef _LANGIS_PITRE_MIXER_BASE_H_
+#define _LANGIS_PITRE_MIXER_BASE_H_
+
+#include <mmsystem.h>
+
+// Comment-out the next line to prevent warnings to popup. If there was a problem
+// initializing a mixer control, your program won't crash since the classes check
+// the validity of values, and your controls will simply be disabled.
+// For debugging, it does help to find out where the problem is though.
+
+//#define DO_MIXER_WARNING
+
+
+const DWORD NO_SOURCE = MIXERLINE_COMPONENTTYPE_SRC_LAST + 1;
+
+//=============================================================================
+//                         CMixerBase Class
+//
+// Base class of all the mixer classes
+// Takes care of opening the mixer device to get a valid handler.
+// This handle, along with the number of channels are stored in
+// member variables. The Init() method queries the mixer interface
+// for the desired mixer control.
+//
+// You don't use this class directly, unless you want to derive new classes
+// from it, but you can use the 4 inline functions to retrieve the name and
+// short name of a mixer control or mixer line:
+//
+//	        GetControlName()
+//	        GetControlShortName()
+//	        GetLineName()
+//	        GetLineShortName()
+//
+//===========================================================================
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+class CMixerBase  
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+{
+public:
+
+	CMixerBase();
+	virtual ~CMixerBase();
+
+	void* GetValuePtr() { return m_val; }
+
+	int GetDestinLineIndex( MIXERLINE &line, DWORD lineType );
+	int GetSourceLineIndex( MIXERLINE &line, DWORD lineType );
+
+	int GetMixerControlValue();
+	int SetMixerControlValue();
+	
+	CString GetControlName() const;
+	CString GetControlShortName() const;
+	CString GetLineName() const;
+	CString GetLineShortName() const;
+
+	static LPCTSTR GetControlTypeString( DWORD type );
+	static LPCTSTR GetLineTypeString( DWORD type );
+
+
+protected:
+	
+	int  Init( DWORD DstType, DWORD SrcType, DWORD ControlType, HWND hwnd );
+	
+	void CloseMixer();
+
+	CString m_LineName;
+	CString m_DestLineName;
+	CString m_LineShortName;
+
+	HMIXER       m_HMixer;
+    MIXERCONTROL m_Control;
+	int          m_nChannels;
+
+private:
+	int InitMXDetails();
+
+    MIXERCONTROLDETAILS  m_Details;
+	void *m_val;
+};
+	
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+inline CString CMixerBase::GetControlName() const
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+{
+	if( m_HMixer )
+		return CString(m_Control.szName);
+	else
+		return CString("");
+}
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+inline CString CMixerBase::GetControlShortName() const
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+{
+	if( m_HMixer )
+		return CString(m_Control.szShortName);
+	else
+		return CString("");
+}
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+inline CString CMixerBase::GetLineName() const
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+{
+	return m_LineName;
+}
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+inline CString CMixerBase::GetLineShortName() const
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+{
+	return m_LineShortName;
+}
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+inline void CMixerBase::CloseMixer()
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+{
+	if ( m_HMixer ) mixerClose( m_HMixer );
+	m_HMixer = 0;
+	
+	if( m_val ) delete[] m_val;
+	m_val = NULL;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : PrintMessage
+//          
+// Descr. : printf style function with variable number of arguments, but that
+//          displays a message box once the string has been formatted.
+//          
+// Arg    : const char *title : string to display in the caption
+// Arg    : const char *fmt   : format string for the list of arguments
+// Arg    : ...               : 
+//-----------------------------------------------------------------------------
+inline void PrintMessage( const char *title, const char *fmt, ... )
+{
+#ifdef DO_MIXER_WARNING
+   va_list marker;
+   static char buffer[256];
+
+   va_start( marker, fmt );
+   _vsnprintf( buffer, 255, fmt, marker ); 
+   va_end( marker );
+
+   ::MessageBox( NULL, buffer, title, MB_OK|MB_ICONEXCLAMATION );
+#else
+   title; fmt;
+#endif
+
+}
+
+
+
+//===========================================================================
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // _LANGIS_PITRE_MIXER_BASE_H_
+
+//===========================================================================

Added: freeswitch/trunk/gtalkphone/mixer/include/MixerFader.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/mixer/include/MixerFader.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,101 @@
+//=============================================================================
+// Copyright Langis Pitre 1998
+// You may do whatever you want with this code, as long as you include this
+// copyright notice in your implementation files.
+//
+// If you wish to add new classes to this collection, feel free to do so.
+// But please send me your code so that I can update the collection.
+//
+// Comments and bug reports: lpitre at sympatico.ca
+//
+//=============================================================================
+#ifndef _LANGIS_PITRE_MIXER_FADER_H_
+#define _LANGIS_PITRE_MIXER_FADER_H_
+
+#include "MixerBase.h"
+
+//=============================================================================
+//                             CMixerFader Class
+//
+// Since this class is derived from CSliderCtrl, it allows the user to associate
+// a slider resource with a mixer fader control. All messages are handled
+// internally through message reflection.
+// 
+// How to use:
+//
+// 1) create a slider resource (either horizontal or vertical)
+// 2) declare a variable of type CMixerFader in your CDialog-derived class
+//    declaration
+// 3) In your OnInitDialog, subclass the CMixerFader object to associate it
+//    with the resource (or use DDE with a variable of type CMixerFader)
+// 4) In your OnInitDialog, call the Init() member funcion.
+//
+// If the device has two channels, it is possible to either create one
+// main volume and one balance slider, or to create sliders for the left
+// and right channels.
+//
+// For example:  say you want a main volume slider and a cd audio
+// volume slider, the call to Init() for the main and CD volumes would be:
+//
+//	m_mainVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,   // destination line
+//                     NO_SOURCE,                              // no source line
+//	                   MIXERCONTROL_CONTROLTYPE_VOLUME,	       // control type
+//					   CMixerFader::MAIN );
+//
+//	m_cdVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,     // destination line
+//                   MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC,  // source line
+//	                 MIXERCONTROL_CONTROLTYPE_VOLUME,          // control type
+//					 CMixerFader::MAIN );
+//
+//=============================================================================
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+class CMixerFader : public CSliderCtrl, public CMixerBase
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+{
+public:
+	CMixerFader();
+	virtual ~CMixerFader();
+	
+	enum { LEFT, RIGHT, MAIN, BALANCE };
+
+	int Init( DWORD DstType, DWORD SrcType, DWORD ControlType, int subType );
+	void SetPos(int pos);
+
+	//{{AFX_VIRTUAL(CMixerFader)
+	//}}AFX_VIRTUAL
+
+protected:
+
+	DWORD GetSliderValue();
+	void SetFaderValue();
+
+	void SetSliderPos( int value );
+	void SetHVSliderPos();
+
+	int m_FaderSpan;
+	int m_FaderStep;
+	int m_SliderSpan;
+	int m_subType;
+	float m_DeltaOverMax;
+
+	int m_pos;
+
+	MIXERCONTROLDETAILS_UNSIGNED *m_Value;
+
+	//{{AFX_MSG(CMixerFader)
+	afx_msg LONG OnMixerControlChanged( UINT, LONG );
+	afx_msg void HScroll ( UINT nSBCode, UINT nPos );
+	afx_msg void VScroll ( UINT nSBCode, UINT nPos );
+	afx_msg void OnDestroy();
+	//}}AFX_MSG
+
+	DECLARE_MESSAGE_MAP()
+};
+
+//===========================================================================
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // _LANGIS_PITRE_MIXER_FADER_H_

Added: freeswitch/trunk/gtalkphone/mixer/source/MixerBase.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/mixer/source/MixerBase.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,562 @@
+//=============================================================================
+// Copyright Langis Pitre 1998
+// You may do whatever you want with this code, as long as you include this
+// copyright notice in your implementation files.
+//
+// If you wish to add new classes to this collection, feel free to do so.
+// But please send me your code so that I can update the collection.
+//
+// Comments and bug reports: lpitre at sympatico.ca
+//
+//=============================================================================
+//=============================================================================
+//                         CMixerBase Class
+//
+// Base class of all the mixer classes
+// Takes care of opening the mixer device to get a valid handler.
+// This handle, along with the number of channels are stored in
+// member variables.
+// You can use the 4 inline functions to retrieve the name and
+// short name of a mixer control or mixer line:
+//
+//	        GetControlName()
+//	        GetControlShortName()
+//	        GetLineName()
+//	        GetLineShortName()
+//
+//=============================================================================
+//=============================================================================
+#include <stdarg.h>
+#include "stdafx.h"
+#include "MixerBase.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : CMixerBase
+//          
+// Descr. : 
+//          
+//-----------------------------------------------------------------------------
+CMixerBase::CMixerBase()
+{
+	m_HMixer = 0;
+	m_val = NULL;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : ~CMixerBase
+//          
+// Descr. : 
+//          
+//-----------------------------------------------------------------------------
+CMixerBase::~CMixerBase()
+{
+	CloseMixer();
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : Init
+//          
+// Descr. : Opens the mixer device and get a handle. Queries the mixer device for
+//          the desired control type. This control should belong either to a
+//          destination line or to a source line. 
+//        - If the control belongs to a destination line, the 'DstType' parameter
+//          should specify its component type, and the 'SrcType' parameter should
+//          be set to NO_SOURCE.
+//        - If the control belongs to a source line, the 'DstType' parameter
+//          should specify the component type of the line that owns the source line,
+//          and the 'SrcType' parameter should specify the component type of the
+//          source line that owns the control.
+//
+//          Called by the derived classes only ( protected ).
+//          If the desired mixer line is found, the specified control is queried,
+//          and memory il allocated to hold the values that will be sent to and
+//          queried from the mixer device.
+//          
+// Return : int 1 if successful, 0 otherwise
+//
+// Arg    : DWORD DstType : destination line component type
+//          
+//          These are valid arguments ( if available ):
+//
+//              MIXERLINE_COMPONENTTYPE_DST_DIGITAL 
+//              MIXERLINE_COMPONENTTYPE_DST_LINE
+//              MIXERLINE_COMPONENTTYPE_DST_MONITOR
+//              MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
+//              MIXERLINE_COMPONENTTYPE_DST_HEADPHONES
+//              MIXERLINE_COMPONENTTYPE_DST_TELEPHONE 
+//              MIXERLINE_COMPONENTTYPE_DST_WAVEIN
+//              MIXERLINE_COMPONENTTYPE_DST_MONITOR
+//              MIXERLINE_COMPONENTTYPE_DST_VOICEIN
+//
+// Arg    : DWORD SrcType : source line component type
+//          
+//          These are valid arguments ( if available ):
+//
+//              NO_SOURCE ( use when the desired control belongs to a destination line )
+//
+//              MIXERLINE_COMPONENTTYPE_SRC_DIGITAL 
+//              MIXERLINE_COMPONENTTYPE_SRC_LINE
+//              MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE
+//              MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER
+//              MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC
+//              MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE 
+//              MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER
+//              MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
+//              MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY
+//              MIXERLINE_COMPONENTTYPE_SRC_ANALOG
+//
+// Arg    : DWORD ControlType : desired control type
+//
+// Arg    : HWND hwnd : handle of window that will handle mixer specific messages
+//                      this handle is supplied by the derived classes.
+//
+//-----------------------------------------------------------------------------
+int CMixerBase::Init( DWORD DstType, DWORD SrcType, DWORD ControlType, HWND hwnd )
+{	
+	UINT nbMixers = mixerGetNumDevs();
+	if( nbMixers < 1 )
+	{
+		PrintMessage( "CMixerBase::Init", "No mixer device present" );
+		return 0;
+	}
+
+	// ---- open the mixer device ----
+
+	if ( m_HMixer )
+		mixerClose( m_HMixer );
+
+	if( mixerOpen( &m_HMixer, 0, ( DWORD_PTR )hwnd, 0, CALLBACK_WINDOW ) != MMSYSERR_NOERROR )
+	{
+		PrintMessage( "CMixerBase::Init", "Could not open mixer device" );
+		return 0;
+	}
+
+	// ----- find the desired destination line -----
+	
+	MIXERLINE line;
+
+	if( GetDestinLineIndex( line, DstType ) == -1 )
+	{
+		PrintMessage( "CMixerBase::Init",
+		              "Warning: the destination line \n%s\nwas not found.", GetLineTypeString( DstType ) );
+		CloseMixer();
+		return 0;
+	}
+	
+	m_DestLineName = line.szName;
+
+	// ----- find the desired source line -----
+
+	if( SrcType != NO_SOURCE )
+	{
+		if(  GetSourceLineIndex( line, SrcType ) == -1 )
+		{
+			PrintMessage( "CMixerBase::Init",
+		                  "Warning: the source line \n%s\n not found.\n"
+						  "\n(Associated to Destination line \n%s)", 
+						  GetLineTypeString( SrcType ), m_DestLineName );
+			CloseMixer();
+			return 0;
+		}
+	}
+
+	// we found the line! let's see if it has any controls...
+
+	m_nChannels     = line.cChannels;
+	m_LineName      = line.szName;
+	m_LineShortName = line.szShortName;
+
+	//TRACE( "Number of controls available: %d\n", line.cControls );
+	if( line.cControls == 0 )
+	{
+		PrintMessage( "CMixerBase::Init", 
+		              "No controls available for this audio line: %s", line.szName );
+		CloseMixer();
+		return 0;
+	}
+
+	// ---------- We try and find the desired control for the mixer line ---------
+    
+	MIXERLINECONTROLS   mixerLineControl;
+
+	mixerLineControl.cbStruct       = sizeof( MIXERLINECONTROLS );
+	mixerLineControl.dwLineID       = line.dwLineID;
+	mixerLineControl.dwControlType  = ControlType;
+	mixerLineControl.cControls      = 1;
+	mixerLineControl.cbmxctrl       = sizeof( MIXERCONTROL );
+	mixerLineControl.pamxctrl       = &m_Control;
+	
+	if( mixerGetLineControls( ( HMIXEROBJ )m_HMixer, &mixerLineControl, 
+		MIXER_GETLINECONTROLSF_ONEBYTYPE ) != MMSYSERR_NOERROR )
+	{
+		TRACE( "CMixerBase::Init - mixerGetLineControls failed\n" );
+		PrintMessage( "CMixerBase::Init", "Could not find specified mixer control. "
+			           "Associated Windows control will be disabled.\n"
+					   "Control type: %s,\n\nDest line type: %s,\nSrc  line type: %s\n", 
+					   GetControlTypeString( ControlType ), 
+					   GetLineTypeString( DstType ), 
+					   GetLineTypeString( SrcType ) );
+		CloseMixer();
+		return 0;
+	}
+
+	// we got the control, now store some values for later queries
+
+	if( !InitMXDetails() )
+		return 0;
+	
+	return 1;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : GetDestinLineIndex
+//          
+// Descr. : Loops through all possible destination lines, and returns the
+//          index of the line that matches the type passed as argument.
+//          The MIXERLINE structure is also filled along the way by the call
+//          to mixerGetLineInfo().
+//          
+// Return : int : index of line found, otherwise -1
+//
+// Arg    : MIXERLINE &line : 
+// Arg    : DWORD lineType  : 
+//-----------------------------------------------------------------------------
+int CMixerBase::GetDestinLineIndex( MIXERLINE &line, DWORD lineType )
+{
+	// ----- find out how many destination lines are available -----
+
+	MIXERCAPS caps;
+	if( mixerGetDevCaps( (UINT_PTR)m_HMixer, &caps, sizeof(MIXERCAPS) ) != MMSYSERR_NOERROR )
+	{
+		return -1;
+	}
+
+	int ndest = caps.cDestinations;
+	for( int i = 0; i < ndest; i++ )
+	{
+		line.cbStruct = sizeof( MIXERLINE );
+		line.dwSource = 0;
+		line.dwDestination = i;
+		if( mixerGetLineInfo( ( HMIXEROBJ )m_HMixer, &line, 
+							  MIXER_GETLINEINFOF_DESTINATION ) != MMSYSERR_NOERROR )
+		{
+			return -1;
+		}
+		
+		if( line.dwComponentType == lineType )
+		{
+			return( i );
+		}		
+	}
+	return -1;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : GetSourceLineIndex
+//          
+// Descr. : Loops through all possible source lines associated with a given
+//          destination line, and returns the index of the line that matches
+//          the type passed as argument. The destination line index is taken
+//          from the dwDestination member of the MIXERLINE structure, so this
+//          member must be properly set before calling this function.
+//          The MIXERLINE structure is also filled along the way by the call
+//          to mixerGetLineInfo().
+//          
+// Return : int
+// Arg    : MIXERLINE &line : 
+// Arg    : DWORD lineType  : 
+//-----------------------------------------------------------------------------
+int CMixerBase::GetSourceLineIndex( MIXERLINE &line, DWORD lineType )
+{
+	UINT  nconn    = line.cConnections;
+	DWORD DstIndex = line.dwDestination;
+
+	for( UINT j = 0; j < nconn; j++ )
+	{
+		line.cbStruct = sizeof( MIXERLINE );
+		line.dwSource = j;
+		line.dwDestination = DstIndex;
+		if( mixerGetLineInfo( ( HMIXEROBJ )m_HMixer, &line, 
+							  MIXER_GETLINEINFOF_SOURCE ) != MMSYSERR_NOERROR )
+		{
+			return -1;
+		}
+		
+		if( line.dwComponentType == lineType )
+		{
+			return( j );
+		}			
+	}
+	return -1;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : InitMXDetails
+//          
+// Descr. : prepare the MIXERCONTROLDETAILS structure for queries, and allocate
+//          the proper amount of memory to hold the values that will be sent to
+//          and queried from the mixer device.
+//
+// Return : void
+//-----------------------------------------------------------------------------
+int CMixerBase::InitMXDetails()
+{
+	m_Details.cbStruct       = sizeof( MIXERCONTROLDETAILS );
+    m_Details.dwControlID    = m_Control.dwControlID;
+	m_Details.cMultipleItems = m_Control.cMultipleItems;
+	
+	if( m_Control.fdwControl & MIXERCONTROL_CONTROLF_UNIFORM )
+	{
+		m_Details.cChannels = 1;
+	}
+	else
+	{
+		m_Details.cChannels = m_nChannels;
+	}
+
+	switch( m_Control.dwControlType & MIXERCONTROL_CT_UNITS_MASK )
+	{
+		case MIXERCONTROL_CT_UNITS_UNSIGNED:
+		case MIXERCONTROL_CT_UNITS_DECIBELS:
+			m_Details.cbDetails = sizeof( MIXERCONTROLDETAILS_UNSIGNED );
+			break;
+		
+		case MIXERCONTROL_CT_UNITS_PERCENT:
+		case MIXERCONTROL_CT_UNITS_SIGNED:
+			m_Details.cbDetails = sizeof( MIXERCONTROLDETAILS_SIGNED );
+			break;
+
+		case MIXERCONTROL_CT_UNITS_BOOLEAN:
+			m_Details.cbDetails = sizeof( MIXERCONTROLDETAILS_BOOLEAN );
+			break;
+		
+		default:
+			PrintMessage( "CMixerBase::InitMXDetails", "Control uses unknown units." );
+			CloseMixer();
+			return 0;
+	}
+
+	int nItems = 1;
+	if( m_Control.fdwControl & MIXERCONTROL_CONTROLF_MULTIPLE )
+	{
+		nItems = m_Control.cMultipleItems;
+	}
+	nItems *= m_Details.cChannels;
+
+	if( m_val ) delete[] m_val;
+	m_val = new char[ nItems* m_Details.cbDetails ];
+	if( m_val == NULL )
+	{
+		PrintMessage( "CMixerBase::InitMXDetails", "Memory allocation error." );
+		CloseMixer();
+		return 0;
+	}
+
+	m_Details.paDetails = m_val;
+
+	return 1;
+}
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : SetMixerControlValue
+//          
+// Descr. : 
+//          
+// Return : int
+// Arg    : MIXERCONTROL &ctrl    : 
+// Arg    : CMControlInfo &ctInfo : 
+// Arg    : LONG newVal           : 
+//-----------------------------------------------------------------------------
+int CMixerBase::SetMixerControlValue( )
+{
+	if( mixerSetControlDetails( ( HMIXEROBJ )m_HMixer, &m_Details, 
+			                      MIXER_SETCONTROLDETAILSF_VALUE ) 
+		!= MMSYSERR_NOERROR )
+	{
+		TRACE("CMixerBase::SetMixerControlValue mixerSetControlDetails error\n");
+		return 0;
+	}
+
+	return 1;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : GetMixerControlValue
+//          
+// Descr. : 
+//          
+// Return : int
+// Arg    : CMControlInfo &ctInfo : 
+//-----------------------------------------------------------------------------
+int CMixerBase::GetMixerControlValue( )
+{
+	if( mixerGetControlDetails( ( HMIXEROBJ )m_HMixer, &m_Details, 
+			                      MIXER_SETCONTROLDETAILSF_VALUE ) 
+		!= MMSYSERR_NOERROR )
+	{
+		TRACE("CMixerDialog::GetMixerControlValue mixerGetControlDetails error\n");
+		return 0;
+	}
+	
+	return 1;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+//
+// Utility functions. These are declared static, so they can be used outside of
+// an object instance, with the namespace being CMixerBase::
+//
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : GetControlTypeString
+//          
+// Descr. : 
+//          
+// Return : LPCTSTR
+// Arg    : DWORD type : 
+//-----------------------------------------------------------------------------
+LPCTSTR CMixerBase::GetControlTypeString( DWORD type )
+{
+	switch( type )
+	{
+		case MIXERCONTROL_CONTROLTYPE_CUSTOM:
+			return (  "MIXERCONTROL_CONTROLTYPE_CUSTOM" );
+		case MIXERCONTROL_CONTROLTYPE_BOOLEANMETER:
+			return (  "MIXERCONTROL_CONTROLTYPE_BOOLEANMETER" );
+		case MIXERCONTROL_CONTROLTYPE_SIGNEDMETER:
+			return (  "MIXERCONTROL_CONTROLTYPE_SIGNEDMETER" );
+		case MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER:
+			return (  "MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER" );
+		case MIXERCONTROL_CONTROLTYPE_PEAKMETER:
+			return (  "MIXERCONTROL_CONTROLTYPE_PEAKMETER" );
+		case MIXERCONTROL_CONTROLTYPE_BOOLEAN:
+			return (  "MIXERCONTROL_CONTROLTYPE_BOOLEAN" );
+		case MIXERCONTROL_CONTROLTYPE_ONOFF:
+			return (  "MIXERCONTROL_CONTROLTYPE_ONOFF" );
+		case MIXERCONTROL_CONTROLTYPE_MUTE:
+			return (  "MIXERCONTROL_CONTROLTYPE_MUTE" );
+		case MIXERCONTROL_CONTROLTYPE_MONO:
+			return (  "MIXERCONTROL_CONTROLTYPE_MONO" );
+		case MIXERCONTROL_CONTROLTYPE_LOUDNESS:
+			return (  "MIXERCONTROL_CONTROLTYPE_LOUDNESS" );
+		case MIXERCONTROL_CONTROLTYPE_STEREOENH:
+			return (  "MIXERCONTROL_CONTROLTYPE_STEREOENH" );
+		case MIXERCONTROL_CONTROLTYPE_BUTTON:
+			return (  "MIXERCONTROL_CONTROLTYPE_BUTTON" );
+		case MIXERCONTROL_CONTROLTYPE_DECIBELS:
+			return (  "MIXERCONTROL_CONTROLTYPE_DECIBELS" );
+		case MIXERCONTROL_CONTROLTYPE_SIGNED:
+			return (  "MIXERCONTROL_CONTROLTYPE_SIGNED" );
+		case MIXERCONTROL_CONTROLTYPE_UNSIGNED:
+			return (  "MIXERCONTROL_CONTROLTYPE_UNSIGNED" );
+		case MIXERCONTROL_CONTROLTYPE_PERCENT:
+			return (  "MIXERCONTROL_CONTROLTYPE_PERCENT" );
+		case MIXERCONTROL_CONTROLTYPE_SLIDER:
+			return (  "MIXERCONTROL_CONTROLTYPE_SLIDER" );
+		case MIXERCONTROL_CONTROLTYPE_PAN:
+			return (  "MIXERCONTROL_CONTROLTYPE_PAN" );
+		case MIXERCONTROL_CONTROLTYPE_QSOUNDPAN:
+			return (  "MIXERCONTROL_CONTROLTYPE_QSOUNDPAN" );
+		case MIXERCONTROL_CONTROLTYPE_FADER:
+			return (  "MIXERCONTROL_CONTROLTYPE_FADER" );
+		case MIXERCONTROL_CONTROLTYPE_VOLUME:
+			return (  "MIXERCONTROL_CONTROLTYPE_VOLUME" );
+		case MIXERCONTROL_CONTROLTYPE_BASS:
+			return (  "MIXERCONTROL_CONTROLTYPE_BASS" );
+		case MIXERCONTROL_CONTROLTYPE_TREBLE:
+			return (  "MIXERCONTROL_CONTROLTYPE_TREBLE" );
+		case MIXERCONTROL_CONTROLTYPE_EQUALIZER:
+			return (  "MIXERCONTROL_CONTROLTYPE_EQUALIZER" );
+		case MIXERCONTROL_CONTROLTYPE_SINGLESELECT:
+			return (  "MIXERCONTROL_CONTROLTYPE_SINGLESELECT" );
+		case MIXERCONTROL_CONTROLTYPE_MUX:
+			return (  "MIXERCONTROL_CONTROLTYPE_MUX" );
+		case MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT:
+			return (  "MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT" );
+		case MIXERCONTROL_CONTROLTYPE_MIXER:
+			return (  "MIXERCONTROL_CONTROLTYPE_MIXER" );
+		case MIXERCONTROL_CONTROLTYPE_MICROTIME:
+			return (  "MIXERCONTROL_CONTROLTYPE_MICROTIME" );
+		case MIXERCONTROL_CONTROLTYPE_MILLITIME:
+			return (  "MIXERCONTROL_CONTROLTYPE_MILLITIME" );
+			
+		default:
+			return (  "---- UNKNOWN CONTROL TYPE ----" );
+	}
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : GetLineTypeString
+//          
+// Descr. : 
+//          
+// Return : LPCTSTR
+// Arg    : DWORD type : 
+//-----------------------------------------------------------------------------
+LPCTSTR CMixerBase::GetLineTypeString( DWORD type )
+{
+	switch( type )
+	{
+		case MIXERLINE_COMPONENTTYPE_DST_DIGITAL:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_DIGITAL" );
+		case MIXERLINE_COMPONENTTYPE_DST_UNDEFINED:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_UNDEFINED" );
+		case MIXERLINE_COMPONENTTYPE_DST_LINE:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_LINE");
+		case MIXERLINE_COMPONENTTYPE_DST_MONITOR:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_MONITOR");
+		case MIXERLINE_COMPONENTTYPE_DST_SPEAKERS:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_SPEAKERS");
+		case MIXERLINE_COMPONENTTYPE_DST_HEADPHONES:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_HEADPHONES");
+		case MIXERLINE_COMPONENTTYPE_DST_TELEPHONE:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_TELEPHONE");
+		case MIXERLINE_COMPONENTTYPE_DST_WAVEIN:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_WAVEIN");
+		case MIXERLINE_COMPONENTTYPE_DST_VOICEIN:
+			return ( "MIXERLINE_COMPONENTTYPE_DST_VOICEIN");
+		case MIXERLINE_COMPONENTTYPE_SRC_ANALOG:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_ANALOG");
+		case MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY");
+		case MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC");
+		case MIXERLINE_COMPONENTTYPE_SRC_DIGITAL:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_DIGITAL");
+		case MIXERLINE_COMPONENTTYPE_SRC_LINE:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_LINE");
+		case MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE");
+		case MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER");
+		case MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER");
+		case MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE");
+		case MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED");
+		case MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT:
+			return ( "MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT");
+		case NO_SOURCE:
+			return ( "No source line");
+		default:
+			return (  "---- UNKNOWN LINE TYPE ----" );
+	}
+}

Added: freeswitch/trunk/gtalkphone/mixer/source/MixerFader.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/mixer/source/MixerFader.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,504 @@
+//=============================================================================
+// Copyright Langis Pitre 1998
+// You may do whatever you want with this code, as long as you include this
+// copyright notice in your implementation files.
+//
+// If you wish to add new classes to this collection, feel free to do so.
+// But please send me your code so that I can update the collection.
+//
+// Comments and bug reports: lpitre at sympatico.ca
+//
+//=============================================================================
+//=============================================================================
+//                             CMixerFader
+//
+// Since this class is derived from CSliderCtrl, it allows the user to associate
+// a slider resource with a mixer fader control. All messages are handled
+// internally through message reflection.
+// 
+// How to use:
+//
+// 1 ) create a slider resource ( either horizontal or vertical )
+// 2 ) declare a variable of type CMixerFader in your CDialog-derived class
+//    declaration
+// 3 ) In your OnInitDialog, subclass the CMixerFader object to associate it
+//    with the resource ( or use DDE with a variable of type CMixerFader )
+// 4 ) In your OnInitDialog, call the Init() member funcion.
+//
+// If the device has two channels, it is possible to either create one
+// main volume and one balance slider, or to create sliders for the left
+// and right channels.
+//
+//=============================================================================
+//=============================================================================
+//=============================================================================
+#include "stdafx.h"
+#include "MixerFader.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : CMixerFader
+//          
+// Descr. : 
+//          
+//-----------------------------------------------------------------------------
+CMixerFader::CMixerFader() : CMixerBase()
+{
+	m_Value = NULL;
+	m_DeltaOverMax = 0;
+	m_pos = 50;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : ~CMixerFader
+//          
+// Descr. : 
+//          
+//-----------------------------------------------------------------------------
+CMixerFader::~CMixerFader()
+{
+}
+
+BEGIN_MESSAGE_MAP( CMixerFader, CSliderCtrl )
+	//{{AFX_MSG_MAP( CMixerFader )
+	ON_MESSAGE( MM_MIXM_CONTROL_CHANGE, OnMixerControlChanged )
+	ON_WM_HSCROLL_REFLECT( )
+	ON_WM_VSCROLL_REFLECT( )
+	ON_WM_DESTROY()
+	//}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : Init
+//          
+// Descr. : Initializes the mixer control. Most of the work is done in the
+//          base class' implementation of Init.
+//          Init queries the mixer device for the specified mixer control type.
+//          If such a control is found, its current value is queried, and used
+//          to initialize the windows control.
+//        - If the call to CMixerBase::Init() is succesfull, m_Value is set to
+//          the address of the memory allocated by CMixerBase.
+//          
+// Return : int 0 if failed, 1 otherwise
+//
+// Arg    : DWORD DstType    : see definition of CMixerBase::Init() for a description
+// Arg    : DWORD SrcType    : see definition of CMixerBase::Init() for a description
+// Arg    : DWORD ControlType : type of desired fader.
+//
+//          These are valid arguments:
+//
+//              MIXERCONTROL_CONTROLTYPE_FADER 
+//              MIXERCONTROL_CONTROLTYPE_VOLUME
+//              MIXERCONTROL_CONTROLTYPE_BASS
+//              MIXERCONTROL_CONTROLTYPE_TREBLE
+//              MIXERCONTROL_CONTROLTYPE_EQUALIZER
+//
+// Arg    : int subType: If the mixer line has two channels, the subtype can be used to
+//                       create a fader for the left or right channel, or as a balance
+//                       between the channels, or as a main fader that controls both
+//                       channels.
+//                       If only one channel is available, only the MAIN subtype may be
+//                       specified.
+//                       These are valid arguments:
+//                       
+//                       CMixerFader::LEFT
+//                       CMixerFader::RIGHT
+//                       CMixerFader::MAIN
+//                       CMixerFader::BALANCE
+//                       
+//-----------------------------------------------------------------------------
+int CMixerFader::Init( DWORD DstType, DWORD SrcType, DWORD ControlType, int subType )
+{	
+	if ( m_hWnd == NULL )
+	{
+		PrintMessage( "CMixerFader::Init", "No Window attached. Did you create or subclass one?" );
+		return 0;
+	}
+
+	EnableWindow( FALSE );
+
+	if( subType == BALANCE )
+	{
+		int min, max;
+		GetRange( min, max );
+		SetSliderPos( ( max - min )/2 );
+	}
+
+	// start by checking the type and subtypes 
+
+	if( ( ControlType & MIXERCONTROL_CT_CLASS_MASK ) != MIXERCONTROL_CT_CLASS_FADER )
+	{
+		PrintMessage( "CMixerFader::Init", 
+		              "Wrong control type for a fader control: %s", 
+		              GetControlTypeString( ControlType ) );
+		return 0;
+	}
+	if( subType < LEFT || subType > BALANCE )
+	{
+		PrintMessage( "CMixerFader::Init", "Wrong sub-type for a fader control: %d", subType );
+		return 0;
+	}
+
+	m_subType = subType;
+
+	if( CMixerBase::Init( DstType, SrcType, ControlType, m_hWnd ) == 0 )
+		return 0;
+
+	// set the slider range and number of steps from the information obtained
+	// on the mixer control
+	m_FaderSpan  = m_Control.Bounds.dwMaximum - m_Control.Bounds.dwMinimum;
+	m_FaderStep  = m_FaderSpan/m_Control.Metrics.cSteps;
+	m_SliderSpan = m_Control.Metrics.cSteps;
+	
+	SetRange( 0, m_SliderSpan );
+
+	if( m_nChannels < 2 )
+	{
+		// a balance, left, or right control on a single channel line doesn't make sense
+		// abort and set the balance slider to mid-course
+		if( m_subType == LEFT || m_subType == RIGHT || m_subType == BALANCE )
+		{
+			PrintMessage( "CMixerFader::Init", 
+			              "Only one channel available on this line. Use Fader type MAIN only.\n"
+			              "Windows control will be disabled.\n"
+						  "\nItem: %s.\n"
+					      "\n( Line: %s )", 
+						  GetControlName(),
+					      GetLineName() );
+
+			if( subType == BALANCE )
+				SetSliderPos( m_SliderSpan/2 );
+			CloseMixer();
+			return 0;
+		}
+	}
+
+	m_Value = (MIXERCONTROLDETAILS_UNSIGNED *)GetValuePtr();
+	if( m_Value == NULL )
+	{
+		PrintMessage( "CMixerFader::Init", "m_Value NULL." );
+		CloseMixer();
+		return 0;
+	}
+
+	if( GetMixerControlValue() )
+	{
+		EnableWindow( TRUE );
+		SetHVSliderPos();
+	}
+
+	return 1;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : SetHVSliderPos
+//          
+// Descr. : Updates the slider position according to the subtype of fader used.
+//          Since a fader can be used as a balance between the two channels, this function
+//          and SetFaderValue() had to work in conjunction to ensure proper behavior of all
+//          sliders. For example, if the balance slider is shifted to one side, the right
+//          and left channels sliders must react accordingly. And if the main fader slider
+//          is moved, the relative position of the right and left channels must be kept
+//          constant.
+//          You don't have to read the rest of this description. It was not written to
+//          impress anybody; I just wanted to keep it logged somewhere!
+//
+//            For the BALANCE slider position P, the maximum value must be obtained at mid-course,
+//          the value decreasing linearly to 0 at both ends.
+//            Defining D ( Delta ) as R - L, the difference in value between the Right and
+//          Left channel, and M the greatest value between the the Right and Left channel,
+//          D / M is a function that is defined in the range [-1, 1], with a maximum at 0.
+//            So, m_SliderSpan / 2 * ( D/M + 1 ) will have the range [0, m_SliderSpan] with a
+//          maximum at half the slider range.
+//
+//          -> P = S / 2 * ( DOM + 1 ), where DOM = D/M ( Delta-Over-Max ),and S = m_SliderSpan
+//          
+//          Whenever a new set of values are sent to the mixer device, it sends back a
+//          notification message to all the mixer controls. The CMixerFader handler
+//          for this message ( see below ) calls SetHVSliderPos() to reposition the affected
+//          sliders. This was a headache because the current value of DOM had to be
+//          protected from unwanted changes. I used a member variable ( m_DeltaOverMax ) that
+//          could be used by both this function and SetFaderValue(). This looked simple on
+//          paper, but it took me a lot of debugging to find the right way to do this.
+//
+// Return : void
+//-----------------------------------------------------------------------------
+void CMixerFader::SetHVSliderPos()
+{
+	float MaxVal;
+
+	if( m_nChannels > 1 )
+	{
+		MaxVal = ( float )max( m_Value[RIGHT].dwValue, m_Value[LEFT].dwValue );
+		if( MaxVal > 0 )
+		{
+			m_DeltaOverMax = ( ( float )m_Value[RIGHT].dwValue - ( float )m_Value[LEFT].dwValue )/MaxVal;
+		}
+	}
+	else
+	{
+		MaxVal = ( float )m_Value[0].dwValue;
+	}
+		
+	switch ( m_subType )
+	{
+		case MAIN: // set the main fader to the maximum value
+			SetSliderPos( int( MaxVal/m_FaderStep ) );
+			break;
+
+		case BALANCE: // pos = m_SliderSpan/2 * ( delta/ max + 1 )
+			if( MaxVal > 0 )
+			{
+				SetSliderPos( int( m_SliderSpan*( m_DeltaOverMax + 1.0 )/2.0 ) );
+			}
+			break;
+
+		case LEFT: // only set the left channel slider
+			SetSliderPos( int( ( float )m_Value[LEFT].dwValue/m_FaderStep ) );
+			break;
+
+		case RIGHT: // only set the right channel slider
+			SetSliderPos( int( ( float )m_Value[RIGHT].dwValue/m_FaderStep ) );
+			break;
+
+		default:
+			PrintMessage( "CMixerFader::SetHVSliderPos", "Wrong sub-type for a fader control." );
+	}
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : SetFaderValue
+//          
+// Descr. : the slider position changed, update the values and send to mixer device.
+//
+//          To determine the values to send to the mixer device, this algorithm is used:
+//
+//          - If the MAIN slider is moved:
+//          The idea is to keep D = R - L constant. In other words, D1/M1 = D2/M2 where
+//          D2 and M2 are the new values.
+//          Now, if D1 > 0, this means that R1 = M1. This, in the abvove equality, gives:
+//          -> L2 = R2( 1 - D1/R1 ) =  R2( 1 - DOM1 )
+//          If D1 < 0,  L1 = M1, which leads to:
+//          ->  R2 = L2( 1 + DOM1 )
+//
+//          - If the BALANCE slider is moved:
+//          This will change D. Starting from the equation P = S / 2 * ( D/M + 1 )
+//          and rearranging the terms, we obtain respectively for the rigth and left channels:
+//
+//          -> R = M ( 2P/S - 1 ) + L
+//          -> L = R - M ( 2P/S - 1 )
+//
+//          If D > 0, R = M. This gives: L = 2R ( 1 - P/S )
+//          If D < 0, L = M. This gives: R = 2LP/S
+//
+// Return : void
+//-----------------------------------------------------------------------------
+void CMixerFader::SetFaderValue()
+{
+	DWORD newVal = GetSliderValue();
+	
+	float MaxVal;
+
+	if( m_nChannels > 1 )
+	{
+		MaxVal = ( float )max( m_Value[RIGHT].dwValue, m_Value[LEFT].dwValue );
+	}
+	else
+	{
+		MaxVal = ( float )m_Value[0].dwValue;
+	}
+
+	switch ( m_subType )
+	{
+		case MAIN:
+			if( m_nChannels > 1 )
+			{
+				if( m_DeltaOverMax > 0 )
+				{
+					m_Value[RIGHT].dwValue = newVal;
+					m_Value[LEFT].dwValue = DWORD( newVal*( 1.0f - m_DeltaOverMax ) );
+				}
+				else
+				{
+					m_Value[LEFT].dwValue = newVal;
+					m_Value[RIGHT].dwValue = DWORD( newVal*( 1.0f + m_DeltaOverMax ) );
+				}
+			}
+			else
+			{
+				m_Value[0].dwValue = newVal;
+			}
+			break;
+
+		case BALANCE:
+			if( ( int )newVal > m_FaderSpan/2 )
+			{
+				m_Value[RIGHT].dwValue = DWORD( MaxVal );
+				m_Value[LEFT].dwValue = DWORD( 2*MaxVal*( 1.0 - ( float )newVal/m_FaderSpan ) );
+			}
+			else
+			{
+				m_Value[RIGHT].dwValue = DWORD( 2*MaxVal*( float )newVal/m_FaderSpan );
+				m_Value[LEFT].dwValue = DWORD( MaxVal );
+			}
+			break;
+
+		case LEFT:
+			m_Value[LEFT].dwValue = newVal;
+			break;
+
+		case RIGHT:
+			m_Value[RIGHT].dwValue = newVal;
+			break;
+
+		default:
+			PrintMessage( "CMixerFader::SetFaderValue", "Wrong sub-type for a fader control." );
+			return;
+	}
+	
+	SetMixerControlValue();
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : GetSliderValue
+//          
+// Descr. : gets the current slider position. The value returned depends on the orientation
+//          of the slider.
+//          
+// Return : DWORD value corresponding to slider position
+//-----------------------------------------------------------------------------
+DWORD CMixerFader::GetSliderValue()
+{
+	/*if( ( GetStyle( ) & TBS_VERT ) == TBS_VERT )
+	{
+		return ( ( m_SliderSpan - GetPos() ) * m_FaderStep );
+	}
+	else
+	{
+		return ( GetPos() * m_FaderStep );
+	}*/
+	return m_pos*m_SliderSpan*m_FaderStep /100;
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : OnMixerControlChanged
+//          
+// Descr. : Message handler called whenever the MCI device sends the MM_MIXM_CONTROL_CHANGE
+//          message. The MCI mixer device will send this message for any changing
+//          setting, so we need to check that the MCI control that sent the message
+//          corresponds to the current fader control.
+//          
+// Return : LONG
+// Arg    : UINT         : 
+// Arg    : LONG message : 
+//-----------------------------------------------------------------------------
+LONG CMixerFader::OnMixerControlChanged( UINT hMix, LONG message )
+{
+//	UINT id = ( UINT )message;
+
+	/*if( id == m_Control.dwControlID && m_HMixer == ( HMIXER )hMix )
+	{
+		if( GetMixerControlValue() )
+		{
+			SetHVSliderPos();
+		}
+		else
+		{
+			TRACE( "CMixerFader::OnMixerControlChanged --- error\n" );
+		}
+	}*/
+
+	return 0L;
+}
+void CMixerFader::SetPos(int pos)
+{
+	m_pos = pos;
+	SetFaderValue();
+}
+
+//=============================================================================
+//
+// Descr. : Handler for scrolling event message sent whenever the slider is used. 
+//          Called by a horizontal slider
+//
+//=============================================================================
+void CMixerFader::HScroll ( UINT nSBCode, UINT /*nPos*/ )
+{
+	if( m_Value == NULL )
+	{
+		PrintMessage(  "CMixerFader::HScroll", "Error: Did you call Init() first?"  );
+		return;
+	}
+	if( nSBCode == TB_THUMBTRACK || nSBCode == TB_ENDTRACK || nSBCode == TB_PAGEDOWN || nSBCode == TB_PAGEUP )
+	{
+		SetFaderValue();
+	}
+}
+
+//=============================================================================
+//
+// Descr. : Handler for scrolling event message sent whenever the slider is used. 
+//          Called by a vertical slider
+//
+//=============================================================================
+void CMixerFader::VScroll ( UINT nSBCode, UINT /*nPos*/ )
+{
+	if( m_Value == NULL )
+	{
+		PrintMessage(  "CMixerFader::VScroll", "Error: Did you call Init() first?"  );
+		return;
+	}
+
+	if( nSBCode == TB_THUMBTRACK || nSBCode == TB_ENDTRACK || nSBCode == TB_PAGEDOWN || nSBCode == TB_PAGEUP )
+	{
+		SetFaderValue();
+	}
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : SetSliderPos
+//          
+// Descr. : we need to reverse the value for a vertical scrollbar
+//          
+// Return : void
+// Arg    : int value : 
+//-----------------------------------------------------------------------------
+void CMixerFader::SetSliderPos( int value )
+{
+	/*if( ( GetStyle( ) & TBS_VERT ) == TBS_VERT )
+	{
+		SetPos( m_SliderSpan - value );
+	}
+	else
+	{
+		SetPos( value );
+	}*/
+	SetPos( value );
+}
+
+
+//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+// Name   : OnDestroy
+//          
+// Descr. : 
+//          
+// Return : void
+//-----------------------------------------------------------------------------
+void CMixerFader::OnDestroy() 
+{
+	CloseMixer();
+	CSliderCtrl ::OnDestroy();
+}

Added: freeswitch/trunk/gtalkphone/monitor/MonThread.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/monitor/MonThread.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,50 @@
+// StkThread.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "MonThread.h"
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+/////////////////////////////////////////////////////////////////////////////
+// MonThread
+
+IMPLEMENT_DYNCREATE(CMonThread, CWinThread)
+
+CMonThread::CMonThread()
+{
+    m_parent=NULL;
+}
+CMonThread::CMonThread(CWnd* vparent)
+{
+    m_parent = vparent;
+}
+CMonThread::~CMonThread()
+{
+}
+
+BOOL CMonThread::InitInstance()
+{
+	// TODO:  perform and per-thread initialization here
+	m_MoniWnd.MyCreate( (CWnd*) m_parent );
+    m_pMainWnd = (CWnd*)&m_MoniWnd;
+	SetPriorityClass(this->m_hThread,BELOW_NORMAL_PRIORITY_CLASS);
+	return TRUE;
+}
+
+int CMonThread::ExitInstance()
+{
+	// TODO:  perform any per-thread cleanup here
+	return CWinThread::ExitInstance();
+}
+
+BEGIN_MESSAGE_MAP(CMonThread, CWinThread)
+	//{{AFX_MSG_MAP(MonThread)
+		// NOTE - the ClassWizard will add and remove mapping macros here.
+	//}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// MonThread message handlers

Added: freeswitch/trunk/gtalkphone/monitor/MonThread.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/monitor/MonThread.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,54 @@
+#if !defined(AFX_MonThread_H__27070EFA_8EC0_4C69_A772_D055422534AB__INCLUDED_)
+#define AFX_MonThread_H__27070EFA_8EC0_4C69_A772_D055422534AB__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+// MonThread.h : header file
+//
+
+#include "MoniWnd.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CMonThread thread
+class CMonThread : public CWinThread
+{
+	DECLARE_DYNCREATE(CMonThread)
+protected:
+	CMonThread();           // protected constructor used by dynamic creation
+
+// Attributes
+public:
+    CMonThread(CWnd* vparent); 
+	~CMonThread();
+    
+    CMoniWnd	m_MoniWnd;
+    CWnd       *m_parent;
+protected:
+// Operations
+public:
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CMonThread)
+	public:
+	virtual BOOL InitInstance();
+	virtual int ExitInstance();
+	//}}AFX_VIRTUAL
+
+// Implementation
+protected:
+
+	// Generated message map functions
+	//{{AFX_MSG(CMonThread)
+		// NOTE - the ClassWizard will add and remove member functions here.
+	//}}AFX_MSG
+
+	DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_MonThread_H__27070EFA_8EC0_4C69_A772_D055422534AB__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/monitor/MoniWnd.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/monitor/MoniWnd.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,99 @@
+// MoniWnd.cpp : implementation file
+//
+//	
+//	
+////////////////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "MoniWnd.h"
+#include "gtalkphone.h"
+#include "gtalkphoneDlg.h"
+#include "gtalkphone_https.h"
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+/////////////////////////////////////////////////////////////////////////////
+// CMoniWnd
+
+CMoniWnd::CMoniWnd()
+{
+    m_mainWnd = NULL;
+	m_iCount = 0;
+}
+
+CMoniWnd::~CMoniWnd()
+{
+	
+}
+
+
+BEGIN_MESSAGE_MAP(CMoniWnd, CWnd)
+	//{{AFX_MSG_MAP(CMoniWnd)
+	ON_WM_PAINT()
+	ON_WM_DESTROY()
+	//}}AFX_MSG_MAP
+	ON_WM_TIMER()
+END_MESSAGE_MAP()
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMoniWnd message handlers
+
+void CMoniWnd::OnPaint() 
+{
+}
+
+int CMoniWnd::MyCreate(CWnd* pWnd)
+{
+    CRect rect(0, 0, 0,0);
+    HBRUSH hBrush;
+    m_mainWnd = pWnd;
+	hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
+   	LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,hBrush);
+	CreateEx(0,lpszClassName,"Gtalkphone_Monitor",WS_OVERLAPPEDWINDOW,
+		rect,pWnd, 0, NULL);
+
+	ShowWindow(SW_HIDE);
+	SetTimer(1,1000,NULL);
+	return 1;
+}
+
+void CMoniWnd::OnDestroy() 
+{
+	CWnd::OnDestroy();
+}
+
+void CMoniWnd::OnTimer(UINT_PTR nIDEvent)
+{
+	// TODO: Add your message handler code here and/or call default
+    if(((CgtalkphoneDlg*)m_mainWnd)->m_iStatus == STATUS_LOGIN)
+	{
+		if(m_iCount>=180) m_iCount = 0;
+		if(m_iCount==0)
+		{
+			char info[1024];
+			char path[1024];
+			CString sUser = ((CgtalkphoneDlg*)m_mainWnd)->m_username;
+			if(sUser.Find("@")<0)
+			{
+				sUser += "@gtalkphone.com";
+			}
+			sprintf(path,"/api.cgi?user=%s&pass=%s&act=balance",sUser,((CgtalkphoneDlg*)m_mainWnd)->m_pwd);
+			https_get(path,info);
+			float fret = -(info_get_balance(info));
+			if(fret<-0.009 || fret>0.009)
+			{
+			   ((CgtalkphoneDlg*)m_mainWnd)->m_balance = fret;
+			}
+			CString s;
+			BSTR bstr;
+			s.Format("Balance:%.2f",((CgtalkphoneDlg*)m_mainWnd)->m_balance);
+	        bstr = s.AllocSysString();
+			::PostMessage(m_mainWnd->m_hWnd,UM_MONITOR_EVENT,0,(LPARAM)bstr);
+		}
+		m_iCount ++;
+	}
+	CWnd::OnTimer(nIDEvent);
+}

Added: freeswitch/trunk/gtalkphone/monitor/MoniWnd.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/monitor/MoniWnd.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,56 @@
+#if !defined(AFX_MoniWnd_H__58975303_DC58_11D1_A883_00C04FCCA334__INCLUDED_)
+#define AFX_MoniWnd_H__58975303_DC58_11D1_A883_00C04FCCA334__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+// MoniWnd.h : header file
+//
+
+/////////////////////////////////////////////////////////////////////////////
+// CMoniWnd window
+
+class CMoniWnd : public CWnd
+{
+// Construction
+public:
+	CMoniWnd();
+	
+// Data
+public:
+    CWnd    *m_mainWnd;
+	int     m_iCount;
+// Attributes
+public:
+
+// Operations
+public:
+
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CMoniWnd)
+	//}}AFX_VIRTUAL
+
+// Implementation
+public:
+	virtual ~CMoniWnd();
+
+	// Generated message map functions
+protected:
+	//{{AFX_MSG(CMoniWnd)
+	afx_msg void OnPaint();
+	afx_msg void OnDestroy();
+	//}}AFX_MSG
+	DECLARE_MESSAGE_MAP()
+public:
+	int MyCreate(CWnd* pWnd);
+public:
+	afx_msg void OnTimer(UINT_PTR nIDEvent);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_MoniWnd_H__58975303_DC58_11D1_A883_00C04FCCA334__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/res/Toolbar.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/res/gtalkphone.ico
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/res/gtalkphone.rc2
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/res/gtalkphone.rc2	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,13 @@
+//
+// gtalkphone.RC2 - resources Microsoft Visual C++ does not edit directly
+//
+
+#ifdef APSTUDIO_INVOKED
+	#error this file is not editable by Microsoft Visual C++
+#endif //APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Add manually edited resources here...
+
+/////////////////////////////////////////////////////////////////////////////

Added: freeswitch/trunk/gtalkphone/res/gtalkphoneDoc.ico
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/resource.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/resource.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,41 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by gtalkphone.rc
+//
+#define IDI_ICON2                       4
+#define IDM_ABOUTBOX                    0x0010
+#define IDD_ABOUTBOX                    100
+#define IDS_ABOUTBOX                    101
+#define IDR_HTML_SETTINGSDLG            103
+#define IDR_HTML_gtalkphone_DIALOG      104
+#define IDR_MAINFRAME                   128
+#define IDD_GEPHONE2_DIALOG             128
+#define IDD_DIALOG1                     129
+#define IDD_DLGJABBERNETWORK            129
+#define IDD_gtalkphone_DIALOG           131
+#define IDD_SETTINGDLG                  133
+#define IDR_MENU1                       136
+#define IDR_POPMENU                     136
+#define IDI_ICON1                       139
+#define IDC_SLIDER1                     1000
+#define IDC_TABJAB                      1000
+#define IDC_SLIDERSPEAKER               1000
+#define IDC_SLIDER2                     1001
+#define IDC_BTOK                        1001
+#define IDC_SLIDERMIC                   1001
+#define IDC_BTCANCEL                    1002
+#define IDC_SLIDER3                     1004
+#define IDC_OUTPUTSLIDER                1004
+#define IDC_INPUTSLIDER                 1005
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_3D_CONTROLS                     1
+#define _APS_NEXT_RESOURCE_VALUE        141
+#define _APS_NEXT_COMMAND_VALUE         32788
+#define _APS_NEXT_CONTROL_VALUE         1006
+#define _APS_NEXT_SYMED_VALUE           104
+#endif
+#endif

Added: freeswitch/trunk/gtalkphone/skin/google/.DS_Store
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/Buttons.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/Checkbox.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/Radio.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/Thumbs.db
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/bottom.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/close.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/css/boxsizing.htc
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/css/boxsizing.htc	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,157 @@
+<component lightWeight="true">
+<attach event="onpropertychange" onevent="checkPropertyChange()" />
+<attach event="ondetach" onevent="restore()" />
+<script>
+//<![CDATA[
+
+var doc = element.document;
+
+function init() {
+	updateBorderBoxWidth();
+	updateBorderBoxHeight();
+}
+
+function restore() {
+	element.runtimeStyle.width = "";
+	element.runtimeStyle.height = "";
+}
+
+/* border width getters */
+function getBorderWidth(sSide) {
+	if (element.currentStyle["border" + sSide + "Style"] == "none")
+		return 0;
+	var n = parseInt(element.currentStyle["border" + sSide + "Width"]);
+	return n || 0;
+}
+
+function getBorderLeftWidth() { return getBorderWidth("Left"); }
+function getBorderRightWidth() { return getBorderWidth("Right"); }
+function getBorderTopWidth() { return getBorderWidth("Top"); }
+function getBorderBottomWidth() { return getBorderWidth("Bottom"); }
+/* end border width getters */
+
+/* padding getters */
+function getPadding(sSide) {
+	var n = parseInt(element.currentStyle["padding" + sSide]);
+	return n || 0;
+}
+
+function getPaddingLeft() { return getPadding("Left"); }
+function getPaddingRight() { return getPadding("Right"); }
+function getPaddingTop() { return getPadding("Top"); }
+function getPaddingBottom() { return getPadding("Bottom"); }
+/* end padding getters */
+
+function getBoxSizing() {
+	var s = element.style;
+	var cs = element.currentStyle
+
+	if (typeof s.boxSizing != "undefined" && s.boxSizing != "")
+		return s.boxSizing;
+	if (typeof s["box-sizing"] != "undefined" && s["box-sizing"] != "")
+		return s["box-sizing"];
+	if (typeof cs.boxSizing != "undefined" && cs.boxSizing != "")
+		return cs.boxSizing;
+	if (typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != "")
+		return cs["box-sizing"];
+	return getDocumentBoxSizing();
+}
+
+function getDocumentBoxSizing() {
+	if (doc.compatMode == null || doc.compatMode == "BackCompat")
+		return "border-box";
+	return "content-box"
+}
+
+/* width and height setters */
+function setBorderBoxWidth(n) {
+	element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() -
+		getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
+}
+
+function setBorderBoxHeight(n) {
+	element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() -
+		getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
+}
+
+function setContentBoxWidth(n) {
+	element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() +
+		getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
+}
+
+function setContentBoxHeight(n) {
+	element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() +
+		getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
+}
+/* end width and height setters */
+
+function updateBorderBoxWidth() {
+	element.runtimeStyle.width = "";
+	if (getDocumentBoxSizing() == getBoxSizing())
+		return;
+	var csw = element.currentStyle.width;
+	if (csw != "auto" && csw.indexOf("px") != -1) {
+		if (getBoxSizing() == "border-box")
+			setBorderBoxWidth(parseInt(csw));
+		else
+			setContentBoxWidth(parseInt(csw));
+	}
+}
+
+function updateBorderBoxHeight() {
+	element.runtimeStyle.height = "";	
+	if (getDocumentBoxSizing() == getBoxSizing())
+		return;
+	var csh = element.currentStyle.height;
+	if (csh != "auto" && csh.indexOf("px") != -1) {
+		if (getBoxSizing() == "border-box")
+			setBorderBoxHeight(parseInt(csh));
+		else
+			setContentBoxHeight(parseInt(csh));
+	}
+}
+
+function checkPropertyChange() {
+	var pn = event.propertyName;
+	var undef;
+
+	if (pn == "style.boxSizing" && element.style.boxSizing == "") {
+		element.style.removeAttribute("boxSizing");
+		element.runtimeStyle.boxSizing = undef;		
+	}
+
+
+	switch (pn) {
+		case "style.width":
+		case "style.borderLeftWidth":
+		case "style.borderLeftStyle":
+		case "style.borderRightWidth":
+		case "style.borderRightStyle":
+		case "style.paddingLeft":
+		case "style.paddingRight":
+			updateBorderBoxWidth();
+			break;
+		
+		case "style.height":
+		case "style.borderTopWidth":
+		case "style.borderTopStyle":
+		case "style.borderBottomWidth":
+		case "style.borderBottomStyle":
+		case "style.paddingTop":
+		case "style.paddingBottom":
+			updateBorderBoxHeight();
+			break;
+		
+		case "className":
+		case "style.boxSizing":
+			updateBorderBoxWidth();
+			updateBorderBoxHeight();
+			break;
+	}
+}
+
+init();
+
+//]]>
+</script>
+</component>
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone.css
==============================================================================

Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/Thumbs.db
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/gtalkphone.css
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/gtalkphone.css	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,80 @@
+/*
+	back:	rgb(230,230,230)
+	dark:	rgb(90,97,90)
+	medium	rgb(189,190,189)
+	*/
+
+.dynamic-slider-control {
+	position:			relative;
+	background-color:	rgb(255,255,255);
+	-moz-user-focus:	normal;
+	-moz-user-select:	none;
+	cursor:				default;
+}
+
+.horizontal {
+	width:				66px;
+	height:				27px;
+}
+
+.vertical {
+	width:				29px;
+	height:				200px;
+}
+
+.dynamic-slider-control input {
+	display:	none;
+}
+
+.dynamic-slider-control .handle {
+	position:			absolute;	
+	font-size:			0px;
+	overflow:			hidden;
+	-moz-user-select:	none;
+	cursor:				default;
+}
+
+.dynamic-slider-control.horizontal .handle {
+	width:				11px;
+	height:				11px;
+	background-image:	url("handle.horizontal.bmp");
+}
+
+.dynamic-slider-control.horizontal .handle div {}
+.dynamic-slider-control.horizontal .handle.hover {}
+
+.dynamic-slider-control.vertical .handle {
+	width:				15px;
+	height:				31px;
+	background-image:	url("handle.vertical.png");
+}
+
+.dynamic-slider-control.vertical .handle.hover {}
+
+.dynamic-slider-control .line {
+	position:			absolute;
+	font-size:			0.01mm;
+	overflow:			hidden;
+	border:				0px solid rgb(90,97,90);
+	background:			rgb(104,104,104);
+	
+	behavior:			url("css/boxsizing.htc"); /* ie path bug */
+	box-sizing:			content-box;
+	-moz-box-sizing:	content-box;
+}
+.dynamic-slider-control.vertical .line {
+	width:				3px;
+}
+
+.dynamic-slider-control.horizontal .line {
+	height:				2px;
+}
+
+.dynamic-slider-control .line div {
+	width:		0px;
+	height:		0px;
+	
+	border:				0px solid;
+	border-color:		rgb(230,230,230) rgb(189,190,189)
+						rgb(189,190,189) rgb(230,230,230);
+}
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handl2e.horizontal.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handle.horizontal.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/css/winclassic.css
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/css/winclassic.css	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,99 @@
+.dynamic-slider-control {
+	position:			relative;
+	background-color:	ThreeDFace;
+	-moz-user-focus:	normal;
+	-moz-user-select:	none;
+	cursor:				default;
+}
+
+.horizontal {
+	width:				200px;
+	height:				29px;
+}
+
+.vertical {
+	width:				29px;
+	height:				200px;
+}
+
+.dynamic-slider-control input {
+	display:	none;
+}
+
+.dynamic-slider-control .handle {
+	position:			absolute;
+	-moz-user-select:	none;
+	cursor:				default;
+	background:			ThreeDFace;
+	border:				1px solid;
+	border-color:		ThreeDHighlight ThreeDDarkShadow
+						ThreeDDarkShadow ThreeDHighlight;
+}
+
+/* inner border */
+.dynamic-slider-control .handle div {
+	font-size:			1px;
+	border:				1px solid;
+	border-color:		ThreeDLightShadow ThreeDShadow
+						ThreeDShadow ThreeDLightShadow;	
+
+	behavior:			url("css/boxsizing.htc");	/* ie path bug */
+	box-sizing:			content-box;
+	-moz-box-sizing:	content-box;
+}
+
+/*	inner sets size
+.dynamic-slider-control.horizontal .handle {
+	width:				12px;
+	height:				22px;
+}
+*/
+
+.dynamic-slider-control.horizontal .handle div {
+	width:				8px;
+	height:				18px;
+}
+
+.dynamic-slider-control.horizontal .handle.hover {}
+
+/* inner sets size
+.dynamic-slider-control.vertical .handle {
+	width:				22px;
+	height:				12px;
+}
+*/
+
+.dynamic-slider-control.vertical .handle div {
+	width:				18px;
+	height:				8px;
+}
+
+.dynamic-slider-control.vertical .handle.hover {}
+
+.dynamic-slider-control .line {
+	
+	behavior:			url("css/boxsizing.htc"); /* ie path bug */
+	box-sizing:			content-box;
+	-moz-box-sizing:	content-box;
+		
+	position:			absolute;
+	font-size:			0.01mm;
+	overflow:			hidden;
+	border:				1px solid;
+	border-color:		ThreeDShadow ThreeDHighlight
+						ThreeDHighlight ThreeDShadow;
+	background:			ThreeDDarkShadow;
+}
+
+.dynamic-slider-control.vertical .line {
+	width:				1px;
+	
+}
+
+.dynamic-slider-control.horizontal .line {
+	height:				1px;
+}
+
+.dynamic-slider-control .line div {
+	display:	none;
+}
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,276 @@
+<HTML>
+<HEAD>
+<!--script type="text/javascript" src="js/range.js"></script>
+<script type="text/javascript" src="js/timer.js"></script>
+<script type="text/javascript" src="js/slider.js"></script>
+<link type="text/css" rel="StyleSheet" href="css/gtalkphone/gtalkphone.css" /-->
+</HEAD>
+
+<BODY ID=Cgephone2Dlg BGCOLOR=white  link="#000066" alink="#000066" vlink="#000066" >
+<!--script language=Javascript>
+
+<!--
+
+var message="";
+
+///////////////////////////////////
+
+function clickIE() {if (document.all) {(message);return false;}}
+
+function clickNS(e) {if 
+
+(document.layers||(document.getElementById&&!document.all)) {
+
+if (e.which==2||e.which==3) {(message);return false;}}}
+
+if (document.layers) 
+
+{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
+
+else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
+
+document.oncontextmenu=new Function("return false")
+
+// > 
+
+
+
+</script-->
+
+    <table border="0" cellpadding="2" cellspacing="2" style="left: 0px; width: 100%;
+        position: static; top: 0px; height: 100%; z-index: 0;">
+        <tr>
+            <td style="width: 684px; height: 155px">
+            </td>
+        </tr>
+        <tr>
+            <td valign="top" style="font-size: 12px; line-height: 5pt; font-family: Arial; width: 684px;">
+                
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;GtalkPhone Login:<br />
+                <br />
+                <br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
+                <input id="txtAccount" style="width: 80%; height: 23px; "
+                    type="text" /><br /><br /><br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Password:<br /><br /><br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
+                <input id="txtPwd" style="width: 80%; height: 23px; "
+                    type="password" /><br /><br /><br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;<input id="cbRem" style="border-right: silver thin; border-top: silver thin;
+                    border-left: silver thin; border-bottom: silver thin; width: 13px; height: 15px;" type="checkbox" checked="CHECKED" />Remember Password<br />
+                <br />
+                <br />
+                <br />
+                &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;
+                &nbsp; &nbsp; &nbsp;
+                <button id="btSign" style="width: 50%; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;"><img src="./res/signin.gif" style="width:100%;cursor: hand" alt=""></button> <br />
+                <br />
+                <br />
+                &nbsp; &nbsp; &nbsp;
+                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.gtalkphone.com" target=_blank >SignUp for GtalkPhone</a>
+                
+                <div id="dialpanel" style="left: 9px; width: 100%; position: absolute; top: 167px; height: 104%; background-color: white; z-index: 10; visibility: hidden;" >
+                    
+
+<table id="Table_01" border="0" cellpadding="0" cellspacing="0" style="left: 10%; width: 173px; position: relative; top: 0%; height: 227px">
+	<tr>
+		<td colspan="7">
+			</td>
+	</tr>
+	<tr>
+		<td rowspan="8">
+			<img src="./res/numpad_big_cropped_02.gif" width="12" height="228" alt=""></td>
+		<td>
+		<button id="bt1" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_03.gif" width="45" height="45" alt=""></button></td>
+		<td rowspan="8">
+			<img src="./res/numpad_big_cropped_04.gif" width="12" height="228" alt=""></td>
+		<td>
+		<button id="bt2" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_05.gif" width="44" height="45" alt=""></button></td>
+		<td rowspan="8">
+			<img src="./res/numpad_big_cropped_06.gif" width="12" height="228" alt=""></td>
+		<td>
+		<button id="bt3" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_07.gif" width="44" height="45" alt=""></button></td>
+		<td rowspan="8" style="width: 20px">
+			<img src="./res/numpad_big_cropped_08.gif" width="19" height="228" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_09.gif" width="45" height="11" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_10.gif" width="44" height="11" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_11.gif" width="44" height="11" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+		<button id="bt4" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_12.gif" width="45" height="45" alt=""></button></td>
+		<td>
+		<button id="bt5" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_13.gif" width="44" height="45" alt=""></button></td>
+		<td>
+		<button id="bt6" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_14.gif" width="44" height="45" alt=""></button></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_15.gif" width="45" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_16.gif" width="44" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_17.gif" width="44" height="10" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+		<button id="bt7" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_18.gif" width="45" height="45" alt=""></button></td>
+		<td>
+		<button id="bt8" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_19.gif" width="44" height="45" alt=""></button></td>
+		<td>
+		<button id="bt9" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_20.gif" width="44" height="45" alt=""></button></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_21.gif" width="45" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_22.gif" width="44" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_23.gif" width="44" height="10" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+		<button id="btStar" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_24.gif" width="45" height="45" alt=""></button></td>
+		<td>
+			<button id="bt0" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_25.gif" width="44" height="45" alt=""></button></td>
+		<td>
+			<button id="btSharp" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_26.gif" width="44" height="45" alt=""></button></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_27.gif" width="45" height="17" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_28.gif" width="44" height="17" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_29.gif" width="44" height="17" alt=""></td>
+	</tr>
+</table><br><br>
+                    <table border=0 cellpadding=0 cellspacing=0 width=100%><Tr><td align=left><p id="status" style="font-size: 12px; color: #ff6600; font-family: Arial">
+                        Offline</td><td align=right style="font-size: 12px;  font-family: Arial"><a href="" id="btSignout">Sign out</a></td></tr></table>
+            <br />
+                <br />
+            </td>
+        </tr>
+    </table>
+    <div style="left: 5px; width: 103%; position: absolute; top: 3px; height: 20px">    
+<table border=0 cellpadding=0 cellspacing=0 width=100%>
+<tr>
+<td width=150 valign=top><img src="./res/gtalkphone_logo.gif"></td><td width=300 valign=top>
+                <p style="font-size: 12px;  font-family: Arial" align=right><a href="" id="setting">Settings</a> | <a href="http://www.gtalkphone.com" target=_blank >Help</a>   
+
+                <p id="message" style="font-size: 12px;  font-family: Arial">
+		Idle </p>
+</td></tr></table>
+    </div>
+    <div style="left: 5px; width: 100%; position: absolute; top: 47px; height: 60px">
+        <table border="0" cellpadding="0" cellspacing="0" style="width: 100%">
+            <tr>
+                <td style="width: 60%; height: 45px;" valign="bottom">
+                <p id="Balance" style="font-size: 12px; font-family: Arial" >
+                     &nbsp;&nbsp;Balance: </p>
+                </td>
+                <td style="width: 20%; height: 45px;" align="right" valign="bottom"></td>
+                <td  style="width: 20%; height: 45px;" align="right" valign="bottom">
+                    <button id="btDial" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_dial" /></button>
+                    <button id="btHup" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btHold_disable.gif" height="21" width="21" style="cursor: hand" id="img_hold" /></button>
+                
+                    <button id="btCallBack" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btReDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_redial" /></button></td>
+            </tr>
+            <tr>
+                <td colspan="3" style="height: 30px; width: 95%; ">
+                
+                <div style="width: 104%; border-right: #a3a3a3 1px solid; border-top: #a3a3a3 1px solid; border-left: #a3a3a3 1px solid; border-bottom: #a3a3a3 1px solid; left: 1px; position: absolute; top: 50px; height: 1px;">
+                    <table style="width: 100%; height: 18px; left: 2px; top: 2px;" border="0" cellpadding="0" cellspacing="0">
+                        <tr class="dailnum">
+                            <td style="width: 17px; height: 18px;">
+                                <button style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;height: 18px;"><img src="./res/fangdajing.gif" height="15" width="15" /></button></td>
+                            <td style="height: 18px">
+                            <input id="dailnum" style="font-size: 12px; font-family: Arial; width: 100%; border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; height: 18px;" maxlength="50" class="dailnum" disabled="disabled"/>
+                            </td>
+                            <td style="width: 17px; height: 18px;" align="right">
+                               <button style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;height: 18px;" id="backspace"><img src="./res/cha.gif" height="11" width="12" style="visibility: hidden" id="imgbackspace" /></button>
+                                </td>
+                                
+                                
+                        </tr>
+                    </table>
+                
+                </div>
+                </td>
+            </tr>
+            <tr>
+                <td style="width: 60%; height: 24px;" align="right" valign="middle">
+                <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 27px;">
+                <tr>
+                <td align="right" valign="middle"  style="width: 183px; height: 38px;" class="range_mic">
+                <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 35px;" id="hr_mic" class="hr_mic" />                    
+                    <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 63px;" class="handl_mic" id="handl_mic" />
+                    </td>
+<td align="left" valign="middle" style="width: 25px; height: 38px;" >
+                    <img src="./res/mic.gif" height="34" width="24" style="left: 91px; position: absolute; top: 75px" />
+                    </td>
+                    </tr>
+                    </table>
+                    </td>
+                <td  colspan="2"style="width: 40%; height: 24px;" align="right" valign="middle">
+                
+                <table border="0" cellpadding="0" cellspacing="0" style="width: 100%">
+                <tr>
+                <td align="right" valign="middle" style="width: 104px" class="range_speeker">
+                
+                <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 141px;" id="hr_speeker" class="hr_speeker" />                    
+                    <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 165px;" class="handl_speeker" id="handl_speeker" />
+                <!--div  id="slider-2" >
+	                    <!--input id="slider-input-2"/>
+                    </div>
+<script type="text/javascript">
+var s = new Slider(document.getElementById("slider-1"), document.getElementById("slider-input-1"),"horizontal");
+var s2 = new Slider(document.getElementById("slider-2"), document.getElementById("slider-input-2"),"horizontal");
+s.setValue(50);
+s2.setValue(50);
+s.onchange = function () {
+	window.external.SetMicPos(s.getValue());
+	//document.getElementById("h-min").value = s.getMinimum();
+	//document.getElementById("h-max").value = s.getMaximum();
+};
+s2.onchange = function () {
+	window.external.SetSoundPos(s2.getValue());
+	//document.getElementById("h-min").value = s.getMinimum();
+	//document.getElementById("h-max").value = s.getMaximum();
+};
+window.onresize = function () {
+	s.recalculate();
+	s2.recalculate();
+};
+</script-->
+</td>
+<td align="left" valign="middle">
+                    <img src="./res/speeker.gif" height="34" width="31" style="left: 198px; position: absolute; top: 74px" />
+                    </td>
+                    </tr>
+                    </table></td>
+            </tr>
+        </table>
+        <hr style="height: 2px; border-top-width: 3px; border-left-width: 3px; border-left-color: #969696; left: 0px; border-bottom-width: 3px; border-bottom-color: #969696; width: 103%; border-top-color: #969696; position: absolute; top: 105px; background-color: #757575; border-right-width: 3px; border-right-color: #969696;" />
+    </div>
+        
+         
+    
+
+</BODY>
+</HTML>

Added: freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm.2
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm.2	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,289 @@
+<HTML>
+<HEAD>
+<!--script type="text/javascript" src="js/range.js"></script>
+<script type="text/javascript" src="js/timer.js"></script>
+<script type="text/javascript" src="js/slider.js"></script>
+<link type="text/css" rel="StyleSheet" href="css/gtalkphone/gtalkphone.css" /-->
+</HEAD>
+
+<BODY ID=Cgephone2Dlg BGCOLOR=white  link="#000066" >
+<!--script language=Javascript>
+
+<!--
+
+var message="";
+
+///////////////////////////////////
+
+function clickIE() {if (document.all) {(message);return false;}}
+
+function clickNS(e) {if 
+
+(document.layers||(document.getElementById&&!document.all)) {
+
+if (e.which==2||e.which==3) {(message);return false;}}}
+
+if (document.layers) 
+
+{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
+
+else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
+
+document.oncontextmenu=new Function("return false")
+
+// > 
+
+
+
+</script-->
+
+    <table border="0" cellpadding="2" cellspacing="2" style="left: 0px; width: 100%;
+        position: static; top: 0px; height: 100%; z-index: 0;">
+        <tr>
+            <td style="width: 684px; height: 155px">
+            </td>
+        </tr>
+        <tr>
+            <td valign="top" style="font-size: 12px; line-height: 5pt; font-family: Arial; width: 684px;">
+                
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;GtalkPhone Login:<br />
+                <br />
+                <br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
+                <input id="txtAccount" style="width: 80%; height: 23px; "
+                    type="text" /><br /><br /><br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Password:<br /><br /><br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
+                <input id="txtPwd" style="width: 80%; height: 23px; "
+                    type="password" /><br /><br /><br />
+                &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;<input id="cbRem" style="border-right: silver thin; border-top: silver thin;
+                    border-left: silver thin; border-bottom: silver thin; width: 13px; height: 15px;" type="checkbox" checked="CHECKED" />Remember Password<br />
+                <br />
+                <br />
+                <br />
+                &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;
+                &nbsp; &nbsp; &nbsp;
+                <input id="btSign" style="width: 50%; " type="image" src="./res/signin.gif" value="Sign In"  /><br />
+                <br />
+                <br />
+                &nbsp; &nbsp; &nbsp;
+                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.gtalkphone.com" target=_blank >SignUp for GtalkPhone</a>
+                
+                <div id="dialpanel" style="left: 9px; width: 100%; position: absolute; top: 167px; height: 104%; background-color: white; z-index: 10; visibility: hidden;" >
+                    
+
+<table id="Table_01" border="0" cellpadding="0" cellspacing="0" style="left: 10%; width: 173px; position: relative; top: 0%; height: 227px">
+	<tr>
+		<td colspan="7">
+			</td>
+	</tr>
+	<tr>
+		<td rowspan="8">
+			<img src="./res/numpad_big_cropped_02.gif" width="12" height="228" alt=""></td>
+		<td>
+		<BUTTON id="bt1" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_03.gif" width="45" height="45" alt="">
+			</BUTTON></td>
+		<td rowspan="8">
+			<img src="./res/numpad_big_cropped_04.gif" width="12" height="228" alt=""></td>
+		<td>
+		<BUTTON id="bt2" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_05.gif" width="44" height="45" alt="">
+			</BUTTON></td>
+		<td rowspan="8">
+			<img src="./res/numpad_big_cropped_06.gif" width="12" height="228" alt=""></td>
+		<td>
+		<BUTTON id="bt3" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_07.gif" width="44" height="45" alt="">
+			</BUTTON></td>
+		<td rowspan="8" style="width: 20px">
+			<img src="./res/numpad_big_cropped_08.gif" width="19" height="228" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_09.gif" width="45" height="11" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_10.gif" width="44" height="11" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_11.gif" width="44" height="11" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+		<BUTTON id="bt4" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_12.gif" width="45" height="45" alt="">
+			</BUTTON></td>
+		<td>
+		<BUTTON id="bt5" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_13.gif" width="44" height="45" alt="">
+			</BUTTON></td>
+		<td>
+		<BUTTON id="bt6" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_14.gif" width="44" height="45" alt="">
+			</BUTTON></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_15.gif" width="45" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_16.gif" width="44" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_17.gif" width="44" height="10" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+		<BUTTON id="bt7" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_18.gif" width="45" height="45" alt="">
+			</BUTTON></td>
+		<td>
+		<BUTTON id="bt8" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_19.gif" width="44" height="45" alt="">
+			</BUTTON></td>
+		<td>
+		<BUTTON id="bt9" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_20.gif" width="44" height="45" alt="">
+			</BUTTON></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_21.gif" width="45" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_22.gif" width="44" height="10" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_23.gif" width="44" height="10" alt=""></td>
+	</tr>
+	<tr>
+		<td>
+		<BUTTON id="btStar" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" >
+			<img src="./res/numpad_big_cropped_24.gif" width="45" height="45" alt=""></BUTTON></td>
+		<td>
+			<BUTTON id="bt0" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_25.gif" width="44" height="45" alt=""></BUTTON></td>
+		<td>
+			<BUTTON id="btSharp" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_26.gif" width="44" height="45" alt=""></BUTTON></td>
+	</tr>
+	<tr>
+		<td>
+			<img src="./res/numpad_big_cropped_27.gif" width="45" height="17" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_28.gif" width="44" height="17" alt=""></td>
+		<td>
+			<img src="./res/numpad_big_cropped_29.gif" width="44" height="17" alt=""></td>
+	</tr>
+</table><br><br>
+                    <table border=0 cellpadding=0 cellspacing=0 width=100%><Tr><td align=left><p id="status" style="font-size: 12px; color: #ff6600; font-family: Arial">
+                        Offline</td><td align=right style="font-size: 12px;  font-family: Arial"><a href="." target="_blank">Sign Out</a></td></tr></table>
+            <br />
+                <br />
+            </td>
+        </tr>
+    </table>
+    <div style="left: 5px; width: 103%; position: absolute; top: 3px; height: 20px">    
+                <p style="font-size: 12px;  font-family: Arial" align=right><a href="" id="setting">Settings</a> | <a href="http://www.gtalkphone.com" target=_blank >Help</a>   
+                <img src="./res/gtalkphone_logo.gif" align=left>  
+        <table style="width: 100%" border="0" cellpadding="0" cellspacing="0">
+            <tr>
+                <td style="font-size: x-small; font-family: Arial; height: 21px; width: 55%;" align="left" valign="middle" >
+                <p id="message" style="font-size: 12px;  font-family: Arial">
+		Idle </p>
+                </td>
+                <td style="font-size: 12px; font-family: Arial; width: 45%; height: 21px;" align="right" colspan="" rowspan="" valign="top">
+                    <br />
+                    </td>
+                
+            </tr>
+        </table> 
+    </div>
+    <div style="left: 5px; width: 100%; position: absolute; top: 47px; height: 60px">
+        <table border="0" cellpadding="0" cellspacing="0" style="width: 100%">
+            <tr>
+                <td style="width: 60%; height: 45px;" valign="bottom">
+                <p id="Balance" style="font-size: 12px; font-family: Arial" >
+                     &nbsp;&nbsp;Balance: </p>
+                </td>
+                <td style="width: 20%; height: 45px;" align="right" valign="bottom"></td>
+                <td  style="width: 20%; height: 45px;" align="right" valign="bottom">
+                    <BUTTON id="btDial" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_dial" /></BUTTON>
+                    <BUTTON id="btHup" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btHold_disable.gif" height="21" width="21" style="cursor: hand" id="img_hold" /></BUTTON>
+                
+                    <BUTTON id="btCallBack" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btReDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_redial" /></BUTTON></td>
+            </tr>
+            <tr>
+                <td colspan="3" style="height: 30px; width: 95%; ">
+                
+                <div style="height: 23px; width: 104%; border-right: #a3a3a3 1px solid; border-top: #a3a3a3 1px solid; border-left: #a3a3a3 1px solid; border-bottom: #a3a3a3 1px solid; left: 1px; position: absolute; top: 50px;">
+                    <table style="width: 100%; height: 22px; left: 2px; top: 2px;" border="0" cellpadding="0" cellspacing="0">
+                        <tr>
+                            <td style="width: 32px; height: 23px; font-size: 10pt; font-family: Arial;">
+                                <BUTTON style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><img src="./res/fangdajing.gif" height="15" width="15" /></BUTTON></td>
+                            <td style="height: 23px">
+                            <input id="dailnum" style="font-size: 12px; font-family: Arial; width: 100%; border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none;" maxlength="50"/>
+                            </td>
+                            <td style="width: 7%; height: 23px;" align="right">
+                               <BUTTON style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none; width: 100%; height: 100%;" id="backspace"><img src="./res/cha.gif" height="11" width="11" /></BUTTON>
+                                </td>
+                        </tr>
+                    </table>
+                
+                </div>
+                </td>
+            </tr>
+            <tr>
+                <td style="width: 60%; height: 24px;" align="right" valign="middle">
+                <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 27px;">
+                <tr>
+                <td align="right" valign="middle"  style="width: 183px" class="range_mic">
+                <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 37px;" id="hr_mic" class="hr_mic" />                    
+                    <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 65px;" class="handl_mic" id="handl_mic" />
+                    </td>
+<td align="left" valign="middle" style="width: 25px" >
+                    <img src="./res/mic.gif" height="34" width="24" />
+                    </td>
+                    </tr>
+                    </table>
+                    </td>
+                <td  colspan="2"style="width: 40%; height: 24px;" align="right" valign="middle">
+                
+                <table border="0" cellpadding="0" cellspacing="0" style="width: 100%">
+                <tr>
+                <td align="right" valign="middle" style="width: 104px" class="range_speeker">
+                
+                <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 143px;" id="hr_speeker" class="hr_speeker" />                    
+                    <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 167px;" class="handl_speeker" id="handl_speeker" />
+                <!--div  id="slider-2" >
+	                    <!--input id="slider-input-2"/>
+                    </div>
+<script type="text/javascript">
+var s = new Slider(document.getElementById("slider-1"), document.getElementById("slider-input-1"),"horizontal");
+var s2 = new Slider(document.getElementById("slider-2"), document.getElementById("slider-input-2"),"horizontal");
+s.setValue(50);
+s2.setValue(50);
+s.onchange = function () {
+	window.external.SetMicPos(s.getValue());
+	//document.getElementById("h-min").value = s.getMinimum();
+	//document.getElementById("h-max").value = s.getMaximum();
+};
+s2.onchange = function () {
+	window.external.SetSoundPos(s2.getValue());
+	//document.getElementById("h-min").value = s.getMinimum();
+	//document.getElementById("h-max").value = s.getMaximum();
+};
+window.onresize = function () {
+	s.recalculate();
+	s2.recalculate();
+};
+</script-->
+</td>
+<td align="left" valign="middle">
+                    <img src="./res/speeker.gif" height="34" width="31" />
+                    </td>
+                    </tr>
+                    </table></td>
+            </tr>
+        </table>
+        <hr style="height: 2px; border-top-width: 3px; border-left-width: 3px; border-left-color: #969696; left: 0px; border-bottom-width: 3px; border-bottom-color: #969696; width: 103%; border-top-color: #969696; position: absolute; top: 107px; background-color: #757575; border-right-width: 3px; border-right-color: #969696;" />
+    </div>
+        
+         
+    
+
+</BODY>
+</HTML>

Added: freeswitch/trunk/gtalkphone/skin/google/js/range.js
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/js/range.js	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,147 @@
+/*----------------------------------------------------------------------------\
+|                                Range Class                                  |
+|-----------------------------------------------------------------------------|
+|                         Created by Erik Arvidsson                           |
+|                  (http://webfx.eae.net/contact.html#erik)                   |
+|                      For WebFX (http://webfx.eae.net/)                      |
+|-----------------------------------------------------------------------------|
+| Used to model the data used when working with sliders, scrollbars and       |
+| progress bars. Based on the ideas of the javax.swing.BoundedRangeModel      |
+| interface defined by Sun for Java. http://java.sun.com/products/jfc/        |
+| swingdoc-api-1.0.3/com/sun/java/swing/BoundedRangeModel.html                |                                                              |
+|-----------------------------------------------------------------------------|
+|                  Copyright (c) 1999 - 2002 Erik Arvidsson                   |
+|-----------------------------------------------------------------------------|
+| This software is provided "as is", without warranty of any kind, express or |
+| implied, including  but not limited  to the warranties of  merchantability, |
+| fitness for a particular purpose and noninfringement. In no event shall the |
+| authors or  copyright  holders be  liable for any claim,  damages or  other |
+| liability, whether  in an  action of  contract, tort  or otherwise, arising |
+| from,  out of  or in  connection with  the software or  the  use  or  other |
+| dealings in the software.                                                   |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| This  software is  available under the  three different licenses  mentioned |
+| below.  To use this software you must chose, and qualify, for one of those. |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
+| Permits  anyone the right to use the  software in a  non-commercial context |
+| free of charge.                                                             |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| The WebFX Commercial license           http://webfx.eae.net/commercial.html |
+| Permits the  license holder the right to use  the software in a  commercial |
+| context. Such license must be specifically obtained, however it's valid for |
+| any number of  implementations of the licensed software.                    |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
+| Permits anyone the right to use and modify the software without limitations |
+| as long as proper  credits are given  and the original  and modified source |
+| code are included. Requires  that the final product, software derivate from |
+| the original  source or any  software  utilizing a GPL  component, such  as |
+| this, is also licensed under the GPL license.                               |
+|-----------------------------------------------------------------------------|
+| 2002-10-14 | Original version released                                      |
+|-----------------------------------------------------------------------------|
+| Created 2002-10-14 | All changes are in the log above. | Updated 2002-10-14 |
+\----------------------------------------------------------------------------*/
+
+
+function Range() {
+	this._value = 0;
+	this._minimum = 0;
+	this._maximum = 100;
+	this._extent = 0;
+	
+	this._isChanging = false;
+}
+
+Range.prototype.setValue = function (value) {
+	value = parseInt(value);
+	if (isNaN(value)) return;
+	if (this._value != value) {
+		if (value + this._extent > this._maximum)
+			this._value = this._maximum - this._extent;
+		else if (value < this._minimum)
+			this._value = this._minimum;
+		else
+			this._value = value;
+		if (!this._isChanging && typeof this.onchange == "function")
+			 this.onchange();
+	}
+};
+
+Range.prototype.getValue = function () {
+	return this._value;
+};
+
+Range.prototype.setExtent = function (extent) {
+	if (this._extent != extent) {
+		if (extent < 0)
+			this._extent = 0;
+		else if (this._value + extent > this._maximum)
+			this._extent = this._maximum - this._value;
+		else
+			this._extent = extent;
+		if (!this._isChanging && typeof this.onchange == "function")
+			this.onchange();
+	}
+};
+
+Range.prototype.getExtent = function () {
+	return this._extent;
+};
+
+Range.prototype.setMinimum = function (minimum) {
+	if (this._minimum != minimum) {
+		var oldIsChanging = this._isChanging;
+		this._isChanging = true;
+
+		this._minimum = minimum;
+		
+		if (minimum > this._value)
+			this.setValue(minimum);
+		if (minimum > this._maximum) {
+			this._extent = 0;
+			this.setMaximum(minimum);
+			this.setValue(minimum)
+		}
+		if (minimum + this._extent > this._maximum)
+			this._extent = this._maximum - this._minimum;
+
+		this._isChanging = oldIsChanging;
+		if (!this._isChanging && typeof this.onchange == "function")
+			this.onchange();
+	}
+};
+
+Range.prototype.getMinimum = function () {
+	return this._minimum;
+};
+
+Range.prototype.setMaximum = function (maximum) {
+	if (this._maximum != maximum) {
+		var oldIsChanging = this._isChanging;
+		this._isChanging = true;
+
+		this._maximum = maximum;		
+		
+		if (maximum < this._value)
+			this.setValue(maximum - this._extent);
+		if (maximum < this._minimum) {
+			this._extent = 0;
+			this.setMinimum(maximum);
+			this.setValue(this._maximum);
+		}		
+		if (maximum < this._minimum + this._extent)
+			this._extent = this._maximum - this._minimum;
+		if (maximum < this._value + this._extent)
+			this._extent = this._maximum - this._value;
+		
+		this._isChanging = oldIsChanging;
+		if (!this._isChanging && typeof this.onchange == "function")
+			this.onchange();
+	}
+};
+
+Range.prototype.getMaximum = function () {
+	return this._maximum;
+};

Added: freeswitch/trunk/gtalkphone/skin/google/js/slider.js
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/js/slider.js	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,506 @@
+/*----------------------------------------------------------------------------\
+|                                Slider 1.02                                  |
+|-----------------------------------------------------------------------------|
+|                         Created by Erik Arvidsson                           |
+|                  (http://webfx.eae.net/contact.html#erik)                   |
+|                      For WebFX (http://webfx.eae.net/)                      |
+|-----------------------------------------------------------------------------|
+| A slider control that degrades to an input control for non supported        |
+| browsers.                                                                   |
+|-----------------------------------------------------------------------------|
+|                  Copyright (c) 1999 - 2002 Erik Arvidsson                   |
+|-----------------------------------------------------------------------------|
+| This software is provided "as is", without warranty of any kind, express or |
+| implied, including  but not limited  to the warranties of  merchantability, |
+| fitness for a particular purpose and noninfringement. In no event shall the |
+| authors or  copyright  holders be  liable for any claim,  damages or  other |
+| liability, whether  in an  action of  contract, tort  or otherwise, arising |
+| from,  out of  or in  connection with  the software or  the  use  or  other |
+| dealings in the software.                                                   |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| This  software is  available under the  three different licenses  mentioned |
+| below.  To use this software you must chose, and qualify, for one of those. |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
+| Permits  anyone the right to use the  software in a  non-commercial context |
+| free of charge.                                                             |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| The WebFX Commercial license           http://webfx.eae.net/commercial.html |
+| Permits the  license holder the right to use  the software in a  commercial |
+| context. Such license must be specifically obtained, however it's valid for |
+| any number of  implementations of the licensed software.                    |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
+| Permits anyone the right to use and modify the software without limitations |
+| as long as proper  credits are given  and the original  and modified source |
+| code are included. Requires  that the final product, software derivate from |
+| the original  source or any  software  utilizing a GPL  component, such  as |
+| this, is also licensed under the GPL license.                               |
+|-----------------------------------------------------------------------------|
+| 2002-10-14 | Original version released                                      |
+| 2003-03-27 | Added a test in the constructor for missing oElement arg       |
+| 2003-11-27 | Only use mousewheel when focused                               |
+|-----------------------------------------------------------------------------|
+| Dependencies: timer.js - an OO abstraction of timers                        |
+|               range.js - provides the data model for the slider             |
+|               winclassic.css or any other css file describing the look      |
+|-----------------------------------------------------------------------------|
+| Created 2002-10-14 | All changes are in the log above. | Updated 2003-1-27 |
+\----------------------------------------------------------------------------*/
+
+
+Slider.isSupported = typeof document.createElement != "undefined" &&
+	typeof document.documentElement != "undefined" &&
+	typeof document.documentElement.offsetWidth == "number";
+
+
+function Slider(oElement, oInput, sOrientation) {
+	if (!oElement) return;
+	this._orientation = sOrientation || "horizontal";
+	this._range = new Range();
+	this._range.setExtent(0);
+	this._blockIncrement = 10;
+	this._unitIncrement = 1;
+	this._timer = new Timer(100);
+
+
+	if (Slider.isSupported && oElement) {
+
+		this.document = oElement.ownerDocument || oElement.document;
+
+		this.element = oElement;
+		this.element.slider = this;
+		this.element.unselectable = "on";
+
+		// add class name tag to class name
+		this.element.className = this._orientation + " " + this.classNameTag + " " + this.element.className;
+
+		// create line
+		this.line = this.document.createElement("DIV");
+		this.line.className = "line";
+		this.line.unselectable = "on";
+		this.line.appendChild(this.document.createElement("DIV"));
+		this.element.appendChild(this.line);
+
+		// create handle
+		this.handle = this.document.createElement("DIV");
+		this.handle.className = "handle";
+		this.handle.unselectable = "on";
+		this.handle.appendChild(this.document.createElement("DIV"));
+		this.handle.firstChild.appendChild(
+			this.document.createTextNode(String.fromCharCode(160)));
+		this.element.appendChild(this.handle);
+	}
+
+	this.input = oInput;
+
+	// events
+	var oThis = this;
+	this._range.onchange = function () {
+		oThis.recalculate();
+		if (typeof oThis.onchange == "function")
+			oThis.onchange();
+	};
+
+	if (Slider.isSupported && oElement) {
+		this.element.onfocus		= Slider.eventHandlers.onfocus;
+		this.element.onblur			= Slider.eventHandlers.onblur;
+		this.element.onmousedown	= Slider.eventHandlers.onmousedown;
+		this.element.onmouseover	= Slider.eventHandlers.onmouseover;
+		this.element.onmouseout		= Slider.eventHandlers.onmouseout;
+		this.element.onkeydown		= Slider.eventHandlers.onkeydown;
+		this.element.onkeypress		= Slider.eventHandlers.onkeypress;
+		this.element.onmousewheel	= Slider.eventHandlers.onmousewheel;
+		this.handle.onselectstart	=
+		this.element.onselectstart	= function () { return false; };
+
+		this._timer.ontimer = function () {
+			oThis.ontimer();
+		};
+
+		// extra recalculate for ie
+		window.setTimeout(function() {
+			oThis.recalculate();
+		}, 1);
+	}
+	else {
+		this.input.onchange = function (e) {
+			oThis.setValue(oThis.input.value);
+		};
+	}
+}
+
+Slider.eventHandlers = {
+
+	// helpers to make events a bit easier
+	getEvent:	function (e, el) {
+		if (!e) {
+			if (el)
+				e = el.document.parentWindow.event;
+			else
+				e = window.event;
+		}
+		if (!e.srcElement) {
+			var el = e.target;
+			while (el != null && el.nodeType != 1)
+				el = el.parentNode;
+			e.srcElement = el;
+		}
+		if (typeof e.offsetX == "undefined") {
+			e.offsetX = e.layerX;
+			e.offsetY = e.layerY;
+		}
+
+		return e;
+	},
+
+	getDocument:	function (e) {
+		if (e.target)
+			return e.target.ownerDocument;
+		return e.srcElement.document;
+	},
+
+	getSlider:	function (e) {
+		var el = e.target || e.srcElement;
+		while (el != null && el.slider == null)	{
+			el = el.parentNode;
+		}
+		if (el)
+			return el.slider;
+		return null;
+	},
+
+	getLine:	function (e) {
+		var el = e.target || e.srcElement;
+		while (el != null && el.className != "line")	{
+			el = el.parentNode;
+		}
+		return el;
+	},
+
+	getHandle:	function (e) {
+		var el = e.target || e.srcElement;
+		var re = /handle/;
+		while (el != null && !re.test(el.className))	{
+			el = el.parentNode;
+		}
+		return el;
+	},
+	// end helpers
+
+	onfocus:	function (e) {
+		var s = this.slider;
+		s._focused = true;
+		s.handle.className = "handle hover";
+	},
+
+	onblur:	function (e) {
+		var s = this.slider
+		s._focused = false;
+		s.handle.className = "handle";
+	},
+
+	onmouseover:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+		var s = this.slider;
+		if (e.srcElement == s.handle)
+			s.handle.className = "handle hover";
+	},
+
+	onmouseout:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+		var s = this.slider;
+		if (e.srcElement == s.handle && !s._focused)
+			s.handle.className = "handle";
+	},
+
+	onmousedown:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+		var s = this.slider;
+		if (s.element.focus)
+			s.element.focus();
+
+		Slider._currentInstance = s;
+		var doc = s.document;
+
+		if (doc.addEventListener) {
+			doc.addEventListener("mousemove", Slider.eventHandlers.onmousemove, true);
+			doc.addEventListener("mouseup", Slider.eventHandlers.onmouseup, true);
+		}
+		else if (doc.attachEvent) {
+			doc.attachEvent("onmousemove", Slider.eventHandlers.onmousemove);
+			doc.attachEvent("onmouseup", Slider.eventHandlers.onmouseup);
+			doc.attachEvent("onlosecapture", Slider.eventHandlers.onmouseup);
+			s.element.setCapture();
+		}
+
+		if (Slider.eventHandlers.getHandle(e)) {	// start drag
+			Slider._sliderDragData = {
+				screenX:	e.screenX,
+				screenY:	e.screenY,
+				dx:			e.screenX - s.handle.offsetLeft,
+				dy:			e.screenY - s.handle.offsetTop,
+				startValue:	s.getValue(),
+				slider:		s
+			};
+		}
+		else {
+			var lineEl = Slider.eventHandlers.getLine(e);
+			s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0);
+			s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0);
+			s._increasing = null;
+			s.ontimer();
+		}
+	},
+
+	onmousemove:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+
+		if (Slider._sliderDragData) {	// drag
+			var s = Slider._sliderDragData.slider;
+
+			var boundSize = s.getMaximum() - s.getMinimum();
+			var size, pos, reset;
+
+			if (s._orientation == "horizontal") {
+				size = s.element.offsetWidth - s.handle.offsetWidth;
+				pos = e.screenX - Slider._sliderDragData.dx;
+				reset = Math.abs(e.screenY - Slider._sliderDragData.screenY) > 100;
+			}
+			else {
+				size = s.element.offsetHeight - s.handle.offsetHeight;
+				pos = s.element.offsetHeight - s.handle.offsetHeight -
+					(e.screenY - Slider._sliderDragData.dy);
+				reset = Math.abs(e.screenX - Slider._sliderDragData.screenX) > 100;
+			}
+			s.setValue(reset ? Slider._sliderDragData.startValue :
+						s.getMinimum() + boundSize * pos / size);
+			return false;
+		}
+		else {
+			var s = Slider._currentInstance;
+			if (s != null) {
+				var lineEl = Slider.eventHandlers.getLine(e);
+				s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0);
+				s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0);
+			}
+		}
+
+	},
+
+	onmouseup:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+		var s = Slider._currentInstance;
+		var doc = s.document;
+		if (doc.removeEventListener) {
+			doc.removeEventListener("mousemove", Slider.eventHandlers.onmousemove, true);
+			doc.removeEventListener("mouseup", Slider.eventHandlers.onmouseup, true);
+		}
+		else if (doc.detachEvent) {
+			doc.detachEvent("onmousemove", Slider.eventHandlers.onmousemove);
+			doc.detachEvent("onmouseup", Slider.eventHandlers.onmouseup);
+			doc.detachEvent("onlosecapture", Slider.eventHandlers.onmouseup);
+			s.element.releaseCapture();
+		}
+
+		if (Slider._sliderDragData) {	// end drag
+			Slider._sliderDragData = null;
+		}
+		else {
+			s._timer.stop();
+			s._increasing = null;
+		}
+		Slider._currentInstance = null;
+	},
+
+	onkeydown:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+		//var s = Slider.eventHandlers.getSlider(e);
+		var s = this.slider;
+		var kc = e.keyCode;
+		switch (kc) {
+			case 33:	// page up
+				s.setValue(s.getValue() + s.getBlockIncrement());
+				break;
+			case 34:	// page down
+				s.setValue(s.getValue() - s.getBlockIncrement());
+				break;
+			case 35:	// end
+				s.setValue(s.getOrientation() == "horizontal" ?
+					s.getMaximum() :
+					s.getMinimum());
+				break;
+			case 36:	// home
+				s.setValue(s.getOrientation() == "horizontal" ?
+					s.getMinimum() :
+					s.getMaximum());
+				break;
+			case 38:	// up
+			case 39:	// right
+				s.setValue(s.getValue() + s.getUnitIncrement());
+				break;
+
+			case 37:	// left
+			case 40:	// down
+				s.setValue(s.getValue() - s.getUnitIncrement());
+				break;
+		}
+
+		if (kc >= 33 && kc <= 40) {
+			return false;
+		}
+	},
+
+	onkeypress:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+		var kc = e.keyCode;
+		if (kc >= 33 && kc <= 40) {
+			return false;
+		}
+	},
+
+	onmousewheel:	function (e) {
+		e = Slider.eventHandlers.getEvent(e, this);
+		var s = this.slider;
+		if (s._focused) {
+			s.setValue(s.getValue() + e.wheelDelta / 120 * s.getUnitIncrement());
+			// windows inverts this on horizontal sliders. That does not
+			// make sense to me
+			return false;
+		}
+	}
+};
+
+
+
+Slider.prototype.classNameTag = "dynamic-slider-control",
+
+Slider.prototype.setValue = function (v) {
+	this._range.setValue(v);
+	this.input.value = this.getValue();
+};
+
+Slider.prototype.getValue = function () {
+	return this._range.getValue();
+};
+
+Slider.prototype.setMinimum = function (v) {
+	this._range.setMinimum(v);
+	this.input.value = this.getValue();
+};
+
+Slider.prototype.getMinimum = function () {
+	return this._range.getMinimum();
+};
+
+Slider.prototype.setMaximum = function (v) {
+	this._range.setMaximum(v);
+	this.input.value = this.getValue();
+};
+
+Slider.prototype.getMaximum = function () {
+	return this._range.getMaximum();
+};
+
+Slider.prototype.setUnitIncrement = function (v) {
+	this._unitIncrement = v;
+};
+
+Slider.prototype.getUnitIncrement = function () {
+	return this._unitIncrement;
+};
+
+Slider.prototype.setBlockIncrement = function (v) {
+	this._blockIncrement = v;
+};
+
+Slider.prototype.getBlockIncrement = function () {
+	return this._blockIncrement;
+};
+
+Slider.prototype.getOrientation = function () {
+	return this._orientation;
+};
+
+Slider.prototype.setOrientation = function (sOrientation) {
+	if (sOrientation != this._orientation) {
+		if (Slider.isSupported && this.element) {
+			// add class name tag to class name
+			this.element.className = this.element.className.replace(this._orientation,
+									sOrientation);
+		}
+		this._orientation = sOrientation;
+		this.recalculate();
+
+	}
+};
+
+Slider.prototype.recalculate = function() {
+	if (!Slider.isSupported || !this.element) return;
+
+	var w = this.element.offsetWidth;
+	var h = this.element.offsetHeight;
+	var hw = this.handle.offsetWidth;
+	var hh = this.handle.offsetHeight;
+	var lw = this.line.offsetWidth;
+	var lh = this.line.offsetHeight;
+
+	// this assumes a border-box layout
+
+	if (this._orientation == "horizontal") {
+		this.handle.style.left = (w - hw) * (this.getValue() - this.getMinimum()) /
+			(this.getMaximum() - this.getMinimum()) + "px";
+		this.handle.style.top = (h - hh) / 2 + "px";
+
+		this.line.style.top = (h - lh) / 2 + "px";
+		this.line.style.left = hw / 2 + "px";
+		//this.line.style.right = hw / 2 + "px";
+		this.line.style.width = Math.max(0, w - hw - 2)+ "px";
+		this.line.firstChild.style.width = Math.max(0, w - hw - 4)+ "px";
+	}
+	else {
+		this.handle.style.left = (w - hw) / 2 + "px";
+		this.handle.style.top = h - hh - (h - hh) * (this.getValue() - this.getMinimum()) /
+			(this.getMaximum() - this.getMinimum()) + "px";
+
+		this.line.style.left = (w - lw) / 2 + "px";
+		this.line.style.top = hh / 2 + "px";
+		this.line.style.height = Math.max(0, h - hh - 2) + "px";	//hard coded border width
+		//this.line.style.bottom = hh / 2 + "px";
+		this.line.firstChild.style.height = Math.max(0, h - hh - 4) + "px";	//hard coded border width
+	}
+};
+
+Slider.prototype.ontimer = function () {
+	var hw = this.handle.offsetWidth;
+	var hh = this.handle.offsetHeight;
+	var hl = this.handle.offsetLeft;
+	var ht = this.handle.offsetTop;
+
+	if (this._orientation == "horizontal") {
+		if (this._mouseX > hl + hw &&
+			(this._increasing == null || this._increasing)) {
+			this.setValue(this.getValue() + this.getBlockIncrement());
+			this._increasing = true;
+		}
+		else if (this._mouseX < hl &&
+			(this._increasing == null || !this._increasing)) {
+			this.setValue(this.getValue() - this.getBlockIncrement());
+			this._increasing = false;
+		}
+	}
+	else {
+		if (this._mouseY > ht + hh &&
+			(this._increasing == null || !this._increasing)) {
+			this.setValue(this.getValue() - this.getBlockIncrement());
+			this._increasing = false;
+		}
+		else if (this._mouseY < ht &&
+			(this._increasing == null || this._increasing)) {
+			this.setValue(this.getValue() + this.getBlockIncrement());
+			this._increasing = true;
+		}
+	}
+
+	this._timer.start();
+};
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/skin/google/js/timer.js
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/js/timer.js	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,78 @@
+/*----------------------------------------------------------------------------\
+|                                 Timer Class                                 |
+|-----------------------------------------------------------------------------|
+|                         Created by Erik Arvidsson                           |
+|                  (http://webfx.eae.net/contact.html#erik)                   |
+|                      For WebFX (http://webfx.eae.net/)                      |
+|-----------------------------------------------------------------------------|
+| Object Oriented Encapsulation of setTimeout fires ontimer when the timer    |
+| is triggered. Does not work in IE5.00                                       |                     
+|-----------------------------------------------------------------------------|
+|                  Copyright (c) 1999 - 2002 Erik Arvidsson                   |
+|-----------------------------------------------------------------------------|
+| This software is provided "as is", without warranty of any kind, express or |
+| implied, including  but not limited  to the warranties of  merchantability, |
+| fitness for a particular purpose and noninfringement. In no event shall the |
+| authors or  copyright  holders be  liable for any claim,  damages or  other |
+| liability, whether  in an  action of  contract, tort  or otherwise, arising |
+| from,  out of  or in  connection with  the software or  the  use  or  other |
+| dealings in the software.                                                   |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| This  software is  available under the  three different licenses  mentioned |
+| below.  To use this software you must chose, and qualify, for one of those. |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
+| Permits  anyone the right to use the  software in a  non-commercial context |
+| free of charge.                                                             |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| The WebFX Commercial license           http://webfx.eae.net/commercial.html |
+| Permits the  license holder the right to use  the software in a  commercial |
+| context. Such license must be specifically obtained, however it's valid for |
+| any number of  implementations of the licensed software.                    |
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
+| GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
+| Permits anyone the right to use and modify the software without limitations |
+| as long as proper  credits are given  and the original  and modified source |
+| code are included. Requires  that the final product, software derivate from |
+| the original  source or any  software  utilizing a GPL  component, such  as |
+| this, is also licensed under the GPL license.                               |
+|-----------------------------------------------------------------------------|
+| 2002-10-14 | Original version released                                      |
+|-----------------------------------------------------------------------------|
+| Created 2002-10-14 | All changes are in the log above. | Updated 2002-10-14 |
+\----------------------------------------------------------------------------*/
+
+function Timer(nPauseTime) {
+	this._pauseTime = typeof nPauseTime == "undefined" ? 1000 : nPauseTime;
+	this._timer = null;
+	this._isStarted = false;
+}
+
+Timer.prototype.start = function () {
+	if (this.isStarted())
+		this.stop();
+	var oThis = this;
+	this._timer = window.setTimeout(function () {
+		if (typeof oThis.ontimer == "function")
+			oThis.ontimer();
+	}, this._pauseTime);
+	this._isStarted = false;
+};
+
+Timer.prototype.stop = function () {
+	if (this._timer != null)
+		window.clearTimeout(this._timer);
+	this._isStarted = false;
+};
+
+Timer.prototype.isStarted = function () {
+	return this._isStarted;
+};
+
+Timer.prototype.getPauseTime = function () {
+	return this._pauseTime;
+};
+
+Timer.prototype.setPauseTime = function (nPauseTime) {
+	this._pauseTime = nPauseTime;
+};
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/skin/google/left.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/max.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/min.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/.DS_Store
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM#.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM0.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM1.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM2.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM3.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM4.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM5.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM6.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM7.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM8.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM9.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM_STAR.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/Thumbs.db
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_01.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_02.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_03.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_04.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_05.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_06.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_07.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_08.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_09.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_10.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_11.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_12.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_13.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_14.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_15.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_16.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_17.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_18.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_19.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_20.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_21.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_22.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_23.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_24.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_25.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_26.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_27.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_28.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_29.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/btDial.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/btDial_disable.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/btHold.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/btHold_disable.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/btReDial.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/btReDial_disable.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/cha.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/fangdajing.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/gtalkphone_logo.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/mic.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_01.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_02.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_03.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_04.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_05.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_06.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_07.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_08.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_09.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_10.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_11.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_12.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_13.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_14.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_15.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_16.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_17.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_18.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_19.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_20.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_21.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_22.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_23.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_24.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_25.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_26.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_27.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_28.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_29.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/phone1.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/phone2.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/ring.wav
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/ringin.wav
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/signin.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/spe2eker.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/speeker.gif
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/res/zlwcyd.mp3
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/restore.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/right.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/skin/google/settingsDlg.htm
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/settingsDlg.htm	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,49 @@
+<HTML>
+<HEAD>
+</HEAD>
+<BODY ID=CSettingDlg BGCOLOR=white  link="#000066" >
+
+<script language=Javascript>
+
+<!--
+
+var message="";
+
+///////////////////////////////////
+
+function clickIE() {if (document.all) {(message);return false;}}
+
+function clickNS(e) {if 
+
+(document.layers||(document.getElementById&&!document.all)) {
+
+if (e.which==2||e.which==3) {(message);return false;}}}
+
+if (document.layers) 
+
+{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
+
+else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
+
+document.oncontextmenu=new Function("return false")
+
+// --> 
+
+</script>        
+
+    <div style="font-size: 12px; left: 2px; width: 106%; font-family: Arial; position: absolute;
+        top: 4px; height: 100%">
+        <br />
+        Call back Num:
+        <input id="phonenum" type="text" value="" /><br />
+        <br />
+        <br />
+        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+        &nbsp;&nbsp; 
+        <input id="btOK" type="button" value="OK" style="width: 60px" />
+        <input id="btCancel" type="button" value="Cancel" style="width: 60px" /></div>
+         
+    
+
+</BODY>
+</HTML>
\ No newline at end of file

Added: freeswitch/trunk/gtalkphone/skin/google/theme.ini
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/skin/google/theme.ini	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,122 @@
+[Personality]
+;No button transparencies=0
+UsesTran=1
+;Amount in pixels to shift the titlebar text by from the left
+TextShift=5
+;Amount in pixels to shift the titlebar text down by
+TextShiftVert=0
+
+;Border and title bar bitmaps
+Top=top.bmp
+Left=left.bmp
+Right=right.bmp
+Bottom=bottom.bmp
+
+; And last of all we want the respective heights of the bits 76, 84
+TopTopHeight=10
+TopBotHeight=10
+
+LeftTopHeight=30
+LeftBotHeight=10
+
+RightTopHeight=30
+RightBotHeight=10
+
+BottomTopHeight=10
+BottomBotHeight=10
+
+;Number of buttons we have defined in this personality
+ButtonCount=4
+ButtonImgCount = 3
+
+[Button0]
+Align=1
+XCoord=74
+YCoord=4
+Action=2
+Command=
+ButtonImage=min.bmp
+
+[Button1]
+Align=1
+XCoord=50
+YCoord=4
+Action=1
+Command=
+ButtonImage=max.bmp
+Visibility=4
+
+[Button2]
+Align=1
+XCoord=26
+YCoord=4
+Action=0
+Command=
+ButtonImage=close.bmp
+
+[Button3]
+Align=1
+XCoord=50
+YCoord=4
+Action=1
+Command=
+ButtonImage=restore.bmp
+Visibility=3
+
+[Colours]
+BarColor = 224 223 227
+MenuColor = 224 223 227
+
+ActiveBorder=220 220 220
+ActiveTitle=0 0 128
+AppWorkSpace=146 146 146
+Background=64 112 176
+ButtonAlternateFace=184 184 184
+ButtonDkShadow=0 0 0
+ButtonFace=207 207 207
+ButtonHilight=238 238 238
+ButtonLight=220 220 220
+ButtonShadow=146 146 146
+ButtonText=0 0 0
+GradientActiveTitle=64 112 176
+GradientInactiveTitle=129 142 150
+GrayText=146 146 146
+Hilight=64 112 176
+HilightText=255 255 255
+HotTrackingColor=0 0 255
+InactiveBorder=220 220 220
+InactiveTitle=146 146 146
+InactiveTitleText=107 115 101
+InfoText=0 0 0
+InfoWindow=255 154 53
+Menu=207 207 207
+MenuText=0 0 0
+Scrollbar=238 238 238
+TitleText=20 49 107
+Window=255 255 255
+WindowFrame=0 0 0
+WindowText=0 0 0
+TransColor = 255 0 255
+
+
+[Buttons]
+CheckButton=Checkbox.bmp
+RadioButton=Radio.bmp
+Bitmap=Buttons.bmp
+TopHeight=4
+BottomHeight=4
+LeftWidth=4
+RightWidth=4
+MouseOver=1
+NormalFont=0
+PressedFont=2
+DisabledFont=0
+FocusFont=3
+DefaultFont=3
+MouseOverFont=3
+NormalColour=0
+PressedColour=0
+DisabledColour=2
+FocusColour=1
+DefaultColour=1
+MouseOverColour=1

Added: freeswitch/trunk/gtalkphone/skin/google/top.bmp
==============================================================================
Binary file. No diff available.

Added: freeswitch/trunk/gtalkphone/ui/include/External.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/ui/include/External.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,57 @@
+#if !defined(AFX_EXTERNAL_H__0859966D_DDDF_4837_BB7E_695C0B05C639__INCLUDED_)
+#define AFX_EXTERNAL_H__0859966D_DDDF_4837_BB7E_695C0B05C639__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+// External.h : header file
+//
+
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CExternal command target
+
+class CExternal : public CCmdTarget
+{
+	DECLARE_DYNCREATE(CExternal)
+
+	CExternal();           // protected constructor used by dynamic creation
+	virtual ~CExternal();
+
+// Attributes
+public:
+
+// Operations
+public:
+
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CExternal)
+	public:
+	virtual void OnFinalRelease();
+	//}}AFX_VIRTUAL
+
+// Implementation
+protected:
+	// Generated message map functions
+	//{{AFX_MSG(CExternal)
+		// NOTE - the ClassWizard will add and remove member functions here.
+	//}}AFX_MSG
+
+	DECLARE_MESSAGE_MAP()
+	// Generated OLE dispatch map functions
+	//{{AFX_DISPATCH(CExternal)
+	afx_msg void SetMicPos(int pos);
+	afx_msg void SetSoundPos(int pos);
+	//}}AFX_DISPATCH
+	DECLARE_DISPATCH_MAP()
+	DECLARE_INTERFACE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_EXTERNAL_H__0859966D_DDDF_4837_BB7E_695C0B05C639__INCLUDED_)

Added: freeswitch/trunk/gtalkphone/ui/include/gtalkphoneDlg.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/ui/include/gtalkphoneDlg.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,149 @@
+// gtalkphoneDlg.h : header file
+//
+
+#pragma once
+
+#include "SkinWin\SkinWin.h"
+#include "freeswitch.h"
+#include "MixerFader.h"
+#include "MonThread.h"
+#define STATUS_INIT    0
+#define STATUS_LOGIN   1
+#define STATUS_CALLING 2
+#define STATUS_LOGINING 3
+#define STATUS_RING 4
+
+#define SUBSTATUS_NORMAL 0
+#define SUBSTATUS_CALLING_NORATE 1
+
+#define LOGIN_TIMEOUT   10 //5 seconds
+
+#define UM_NOTIFY       WM_USER+10
+#define UM_MONITOR_EVENT WM_USER+100
+// CgtalkphoneDlg dialog
+class CgtalkphoneDlg : public CDHtmlDialog
+{
+// Construction
+public:
+	void SetMicPos(int pos) ;
+	void SetSoundPos(int pos) ;
+	CgtalkphoneDlg(CWnd* pParent = NULL);	// standard constructor
+
+// Dialog Data
+	enum { IDD = IDD_gtalkphone_DIALOG, IDH = 0};//IDR_HTML_gtalkphone_DIALOG };
+
+	
+	int  m_iStatus;//STATUS_INIT,STATUS_LOGIN,STATUS_CALLING 
+	int  m_isubStaus;//SUBSTATUS_NORMAL,SUBSTATUS_CALLING_NORATE
+	float m_balance;
+	float m_rate;
+	int   m_iMin;
+    CString m_username;
+	CString m_pwd;
+	CString m_phonenum;
+
+	protected:
+	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
+////////message funtion////////////////////////////////////////////////////////////////
+	HRESULT OnLogin(IHTMLElement *pElement);
+	HRESULT OnSetting(IHTMLElement *pElement);
+	void SetNum(LPCTSTR sNum);
+	HRESULT OnNum1(IHTMLElement* /*pElement*/);
+	HRESULT OnNum2(IHTMLElement* /*pElement*/);
+	HRESULT OnNum3(IHTMLElement* /*pElement*/);
+	HRESULT OnNum4(IHTMLElement* /*pElement*/);
+	HRESULT OnNum5(IHTMLElement* /*pElement*/);
+	HRESULT OnNum6(IHTMLElement* /*pElement*/);
+	HRESULT OnNum7(IHTMLElement* /*pElement*/);
+	HRESULT OnNum8(IHTMLElement* /*pElement*/);
+	HRESULT OnNum9(IHTMLElement* /*pElement*/);
+	HRESULT OnNum0(IHTMLElement* /*pElement*/);
+	HRESULT OnNum_Star(IHTMLElement* /*pElement*/);
+	HRESULT OnNum_Sharp(IHTMLElement* /*pElement*/);
+	HRESULT OnBackspace(IHTMLElement* /*pElement*/);
+	HRESULT OnDial(IHTMLElement* /*pElement*/);
+	HRESULT OnHup(IHTMLElement* /*pElement*/);
+	HRESULT OnCallBack(IHTMLElement* /*pElement*/);
+	HRESULT OnSignout(IHTMLElement* /*pElement*/);
+	HRESULT OnSpeakerMousedown(IHTMLElement *phtmlElement);
+	HRESULT OnSpeakerMousemove(IHTMLElement *phtmlElement);
+	HRESULT OnSpeakerMouseup(IHTMLElement *phtmlElement);
+	HRESULT OnMicMousedown(IHTMLElement *phtmlElement);
+	HRESULT OnMicMousemove(IHTMLElement *phtmlElement);
+	HRESULT OnMicMouseup(IHTMLElement *phtmlElement);
+	HRESULT OnMicDrag(IHTMLElement *phtmlElement);
+	HRESULT OnHtmlKeyDown(IHTMLElement *phtmlElement);
+
+	HRESULT OnInputLostFocus(IHTMLElement* /*pElement*/);
+	HRESULT OnInputFocus(IHTMLElement* /*pElement*/);
+
+//////freeswitch event procedure////////////////////////////////////////////////////////	
+	void OnLogonSuccess();
+	void OnLogonFailed();
+	void OnJingleMsg();
+	void OnChannelCreate();
+	void OnChannelDestroy();
+	void OnChannelAnswer();
+	void OnChannelHangup();
+	void SetFlashWindow();
+
+// Implementation
+protected:
+	int m_move;
+	long x,y;
+	BOOL m_bInputFocus;
+	CMixerFader	m_mikeVolume;
+	CMixerFader	m_mainVolume;
+	FreeswitchCall *m_freecall;
+	CMonThread       *m_MonThread;
+	HICON m_hIcon;
+	int  m_iCount;
+	int     m_issave;
+	BOOL bFlashFlag;
+	BOOL SetSkin( CString file );
+	//BOOL SubClassButton( HWND hwnd );
+	CSkinWin				m_skinWin;		//skin win
+	BOOL					m_bFirst;		//first time call
+	CObList m_wndList;
+	void GotoUrl(LPCTSTR pszUrl);
+	void SetElemProperty(LPCTSTR sElemid,LPCTSTR sProperty,VARIANT *v);
+	void SetElemVisible(LPCTSTR sElemid,BOOL b);
+	void GetElemFocus(LPCTSTR sElemid);
+	/*************for google plugin********************************************************/
+	void ReStartGoogle();
+	CString  GetExePath();
+	/**************************************************************************************/
+	// Generated message map functions
+	virtual BOOL OnInitDialog();
+	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
+	afx_msg void OnPaint();
+	afx_msg HCURSOR OnQueryDragIcon();
+	DECLARE_MESSAGE_MAP()
+	DECLARE_DHTML_EVENT_MAP()
+	////////////viraul fuction/////////////////////////////////////////////////////////////
+	STDMETHOD(GetExternal)(IDispatch **ppDispatch);
+	HRESULT STDMETHODCALLTYPE ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved);
+public:
+	afx_msg void OnTimer(UINT_PTR nIDEvent);
+public:
+	afx_msg void OnDestroy();
+	afx_msg void OnClose();
+	//void initJabber(void);
+public:
+	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+public:
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+public:
+	LRESULT OnFreeSwitchEvent(WPARAM wp,LPARAM lp);
+	LRESULT OnMonitorEvent(WPARAM wp,LPARAM lp);
+	void OnQuitEvent();
+	
+public:
+	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+public:
+	virtual BOOL PreTranslateMessage(MSG* pMsg);
+public:
+	afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
+public:
+	afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
+};

Added: freeswitch/trunk/gtalkphone/ui/include/settingsDlg.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/ui/include/settingsDlg.h	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,35 @@
+#pragma once
+
+#ifdef _WIN32_WCE
+#error "CDHtmlDialog is not supported for Windows CE."
+#endif 
+
+#include "SkinWin\SkinWin.h"
+// CsettingsDlg dialog
+
+void get_phone_num(CString &s_phone_num);
+class CsettingsDlg : public CDHtmlDialog
+{
+	DECLARE_DYNCREATE(CsettingsDlg)
+
+public:
+	CsettingsDlg(CWnd* pParent = NULL);   // standard constructor
+	virtual ~CsettingsDlg();
+// Overrides
+	HRESULT OnButtonOK(IHTMLElement *pElement);
+	HRESULT OnButtonCancel(IHTMLElement *pElement);
+
+// Dialog Data
+	enum { IDD = IDD_SETTINGDLG, IDH = IDR_HTML_SETTINGSDLG };
+
+protected:
+	CString m_phonenum;
+	CSkinWin				m_skinWin;		//skin win
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
+	virtual BOOL OnInitDialog();
+
+	DECLARE_MESSAGE_MAP()
+	DECLARE_DHTML_EVENT_MAP()
+public:
+	void set_phone_num(CString s_phone_num);
+};

Added: freeswitch/trunk/gtalkphone/ui/source/External.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/ui/source/External.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,77 @@
+// External.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "gtalkphone.h"
+#include "External.h"
+#include "gtalkphoneDlg.h"
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CExternal
+
+IMPLEMENT_DYNCREATE(CExternal, CCmdTarget)
+
+CExternal::CExternal()
+{
+	EnableAutomation();
+}
+
+CExternal::~CExternal()
+{
+}
+
+
+void CExternal::OnFinalRelease()
+{
+	// When the last reference for an automation object is released
+	// OnFinalRelease is called.  The base class will automatically
+	// deletes the object.  Add additional cleanup required for your
+	// object before calling the base class.
+
+	CCmdTarget::OnFinalRelease();
+}
+
+
+BEGIN_MESSAGE_MAP(CExternal, CCmdTarget)
+	//{{AFX_MSG_MAP(CExternal)
+		// NOTE - the ClassWizard will add and remove mapping macros here.
+	//}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+BEGIN_DISPATCH_MAP(CExternal, CCmdTarget)
+	//{{AFX_DISPATCH_MAP(CExternal)
+	DISP_FUNCTION(CExternal, "SetMicPos", SetMicPos, VT_EMPTY, VTS_I4 )
+	DISP_FUNCTION(CExternal, "SetSoundPos", SetSoundPos, VT_EMPTY, VTS_I4 )
+	//}}AFX_DISPATCH_MAP
+END_DISPATCH_MAP()
+
+// Note: we add support for IID_IExternal to support typesafe binding
+//  from VBA.  This IID must match the GUID that is attached to the 
+//  dispinterface in the .ODL file.
+
+// {016AF104-4062-495C-9083-99D906D3A65D}
+static const IID IID_IExternal =
+{ 0x16af104, 0x4062, 0x495c, { 0x90, 0x83, 0x99, 0xd9, 0x6, 0xd3, 0xa6, 0x5d } };
+
+BEGIN_INTERFACE_MAP(CExternal, CCmdTarget)
+	INTERFACE_PART(CExternal, IID_IExternal, Dispatch)
+END_INTERFACE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CExternal message handlers
+
+void CExternal::SetMicPos(int pos) 
+{
+	((CgtalkphoneDlg *)AfxGetMainWnd())->SetMicPos(pos);
+	TRACE("%d\n",pos);
+}
+void CExternal::SetSoundPos(int pos) 
+{
+	((CgtalkphoneDlg *)AfxGetMainWnd())->SetSoundPos(pos);
+	TRACE("%d\n",pos);
+}

Added: freeswitch/trunk/gtalkphone/ui/source/gtalkphoneDlg.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/ui/source/gtalkphoneDlg.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,1440 @@
+// gtalkphoneDlg.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "gtalkphone.h"
+#include "gtalkphoneDlg.h"
+#include "settingsDlg.h"
+#include "gtalkphone_https.h"
+#include "Mmsystem.h"
+#include "google.h"
+
+
+#ifdef _INC_WINDOWSX
+// The following names from WINDOWSX.H collide with names in this header
+#undef SubclassWindow
+#undef CopyRgn
+#endif
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+// CAboutDlg dialog used for App About
+
+class CAboutDlg : public CDialog
+{
+public:
+	CAboutDlg();
+
+// Dialog Data
+	enum { IDD = IDD_ABOUTBOX };
+
+	protected:
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
+
+// Implementation
+protected:
+	DECLARE_MESSAGE_MAP()
+};
+
+CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
+{
+}
+
+void CAboutDlg::DoDataExchange(CDataExchange* pDX)
+{
+	CDialog::DoDataExchange(pDX);
+}
+
+BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
+END_MESSAGE_MAP()
+
+
+// CgtalkphoneDlg dialog
+
+BEGIN_DHTML_EVENT_MAP(CgtalkphoneDlg)
+	DHTML_EVENT_ONCLICK(_T("btSign"), OnLogin)
+	DHTML_EVENT_ONCLICK(_T("setting"), OnSetting)
+	DHTML_EVENT_ONCLICK(_T("btSignout"), OnSignout)
+	DHTML_EVENT_ONCLICK(_T("bt1"), OnNum1)
+	DHTML_EVENT_ONCLICK(_T("bt2"), OnNum2)
+	DHTML_EVENT_ONCLICK(_T("bt3"), OnNum3)
+	DHTML_EVENT_ONCLICK(_T("bt4"), OnNum4)
+	DHTML_EVENT_ONCLICK(_T("bt5"), OnNum5)
+	DHTML_EVENT_ONCLICK(_T("bt6"), OnNum6)
+	DHTML_EVENT_ONCLICK(_T("bt7"), OnNum7)
+	DHTML_EVENT_ONCLICK(_T("bt8"), OnNum8)
+	DHTML_EVENT_ONCLICK(_T("bt9"), OnNum9)
+	DHTML_EVENT_ONCLICK(_T("bt0"), OnNum0)
+	DHTML_EVENT_ONCLICK(_T("btStar"), OnNum_Star)
+	DHTML_EVENT_ONCLICK(_T("btSharp"), OnNum_Sharp)
+	DHTML_EVENT_ONCLICK(_T("backspace"), OnBackspace)
+	DHTML_EVENT_ONCLICK(_T("btDial"), OnDial)
+	DHTML_EVENT_ONCLICK(_T("btHup"), OnHup)
+	DHTML_EVENT_ONCLICK(_T("btCallBack"), OnCallBack)
+	DHTML_EVENT_ONKEYDOWN(_T("Cgephone2Dlg"),OnHtmlKeyDown)
+
+	//DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE,_T("dailnum"),OnInputLostFocus)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONCLICK,_T("dailnum"),OnInputFocus)
+
+	//speaker
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN, _T("handl_speeker"),  OnSpeakerMousedown)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("handl_speeker"),  OnSpeakerMousemove)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("range_speeker"),  OnSpeakerMousemove)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("hr_speeker"),  OnSpeakerMousemove)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("handl_speeker"),  OnSpeakerMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("range_speeker"),  OnSpeakerMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("hr_speeker"),  OnSpeakerMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT, _T("range_speeker"),  OnSpeakerMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART, _T("handl_speeker"),  OnMicDrag)
+    //mic
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN, _T("handl_mic"),  OnMicMousedown)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("range_mic"),  OnMicMousemove)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("handl_mic"),  OnMicMousemove)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("hr_mic"),  OnMicMousemove)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("handl_mic"),  OnMicMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("range_mic"),  OnMicMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("hr_mic"),  OnMicMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT, _T("range_mic"),  OnMicMouseup)
+	DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART, _T("handl_mic"),  OnMicDrag)
+END_DHTML_EVENT_MAP()
+
+
+
+CgtalkphoneDlg::CgtalkphoneDlg(CWnd* pParent /*=NULL*/)
+	: CDHtmlDialog(CgtalkphoneDlg::IDD, CgtalkphoneDlg::IDH, pParent)
+{
+	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
+	m_freecall = NULL;
+	m_iStatus = STATUS_INIT;
+	m_isubStaus = SUBSTATUS_NORMAL;
+	m_iCount=0;
+	m_balance = (float)0;
+	m_rate=(float)0;
+	m_phonenum = "";
+	m_move=0;
+	m_MonThread = NULL;
+	bFlashFlag = TRUE;
+	m_bInputFocus = FALSE;
+}
+
+void CgtalkphoneDlg::DoDataExchange(CDataExchange* pDX)
+{
+	CDHtmlDialog::DoDataExchange(pDX);
+	DDX_DHtml_ElementValue(pDX,"txtAccount",m_username);
+	DDX_DHtml_ElementValue(pDX,"txtPwd",m_pwd);
+	DDX_DHtml_ElementValue(pDX,"dailnum",m_phonenum);
+	DDX_DHtml_CheckBox(pDX,"cbRem",m_issave);
+}
+
+BEGIN_MESSAGE_MAP(CgtalkphoneDlg, CDHtmlDialog)
+	ON_WM_SYSCOMMAND()
+	//}}AFX_MSG_MAP
+	ON_WM_CLOSE()
+	ON_WM_TIMER()
+	ON_WM_DESTROY()
+	ON_WM_CTLCOLOR()
+	ON_WM_SIZE()
+	ON_MESSAGE(UM_FREESWITCH_EVENT,OnFreeSwitchEvent)
+	ON_WM_KEYDOWN()
+	ON_WM_ACTIVATE()
+	ON_WM_MOUSEACTIVATE()
+	ON_MESSAGE(UM_MONITOR_EVENT,OnMonitorEvent)
+	ON_COMMAND(UM_QUIT,OnQuitEvent)
+	
+END_MESSAGE_MAP()
+
+
+// CgtalkphoneDlg message handlers
+
+BOOL CgtalkphoneDlg::OnInitDialog()
+{
+	CDHtmlDialog::OnInitDialog();
+
+	// Add "About..." menu item to system menu.
+
+	// IDM_ABOUTBOX must be in the system command range.
+	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
+	ASSERT(IDM_ABOUTBOX < 0xF000);
+
+	ModifyStyle(WS_CAPTION,0);
+	// Set the icon for this dialog.  The framework does this automatically
+	//  when the application's main window is not a dialog
+	SetIcon(m_hIcon, TRUE);			// Set big icon
+	SetIcon(m_hIcon, FALSE);		// Set small icon
+
+	// TODO: Add extra initialization here
+    mm_event_hwnd = this->m_hWnd;
+	m_bFirst = TRUE;
+	
+	m_skinWin.popMenu.CreatePopupMenu();
+	m_skinWin.popMenu.AppendMenu(MF_STRING,UM_QUIT,"quit");
+	SetSkin( _T("skin\\google\\theme.ini") );
+	GotoUrl(_T("skin\\google\\gtalkphone.htm"));
+	SetTimer(1,1000,NULL);
+	char userid[256];
+	char password[256];
+	FreeswitchCall::get_userinfo(userid,password,m_issave);	
+	if(FreeswitchCall::freeswitch_init()!=0)
+	{
+		AfxMessageBox("Freeswitch inital failed!");
+		return FALSE;
+	}
+	m_username = userid;
+	if(m_issave)
+		m_pwd = password;
+	m_phonenum = "Input phone number here";
+	UpdateData(false);
+
+	m_mainVolume.SubclassDlgItem( IDC_SLIDERSPEAKER, this );
+	m_mainVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
+	                   NO_SOURCE,
+	                   MIXERCONTROL_CONTROLTYPE_VOLUME, 
+					   CMixerFader::MAIN );
+	m_mikeVolume.SubclassDlgItem( IDC_SLIDERMIC, this );
+	m_mikeVolume.Init( MIXERLINE_COMPONENTTYPE_DST_WAVEIN,
+	                   MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE,
+					   MIXERCONTROL_CONTROLTYPE_VOLUME, 
+					   CMixerFader::MAIN );	
+	m_MonThread = new CMonThread(this);
+	m_MonThread->CreateThread();
+
+	
+#ifdef _DEBUG
+	FILE *f = fopen(".\\debug.txt","w+");
+    fclose(f);
+#endif
+	SetMonitorHWND(m_hWnd);
+	ShellDll_Hook();
+	ReStartGoogle();
+	
+	return TRUE;  // return TRUE  unless you set the focus to a control
+}
+void CgtalkphoneDlg::GotoUrl(LPCTSTR pszUrl)
+{
+    CString strPath,str;
+    DWORD dwSize=MAX_PATH;
+    ::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH),dwSize); //AfxGetResourceHandle()
+    strPath.ReleaseBuffer(dwSize);
+    str=strPath.Left(strPath.ReverseFind(_T('\\'))+1);
+    ASSERT(pszUrl!=NULL);
+    if(pszUrl!=NULL)
+    {
+        CString strUrl;
+        strUrl=str+pszUrl;
+        Navigate(_T("file:///")+strUrl);
+    }
+}
+
+
+
+void CgtalkphoneDlg::OnSysCommand(UINT nID, LPARAM lParam)
+{
+	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
+	{
+		CAboutDlg dlgAbout;
+		dlgAbout.DoModal();
+	}
+	else
+	{
+		CDHtmlDialog::OnSysCommand(nID, lParam);
+	}
+}
+
+// If you add a minimize button to your dialog, you will need the code below
+//  to draw the icon.  For MFC applications using the document/view model,
+//  this is automatically done for you by the framework.
+
+void CgtalkphoneDlg::OnPaint()
+{
+	if (IsIconic())
+	{
+		CPaintDC dc(this); // device context for painting
+
+		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
+
+		// Center icon in client rectangle
+		int cxIcon = GetSystemMetrics(SM_CXICON);
+		int cyIcon = GetSystemMetrics(SM_CYICON);
+		CRect rect;
+		GetClientRect(&rect);
+		int x = (rect.Width() - cxIcon + 1) / 2;
+		int y = (rect.Height() - cyIcon + 1) / 2;
+
+		// Draw the icon
+		dc.DrawIcon(x, y, m_hIcon);
+	}
+	else
+	{
+		CDHtmlDialog::OnPaint();
+	}
+}
+
+// The system calls this function to obtain the cursor to display while the user drags
+//  the minimized window.
+HCURSOR CgtalkphoneDlg::OnQueryDragIcon()
+{
+	return static_cast<HCURSOR>(m_hIcon);
+}
+
+HRESULT CgtalkphoneDlg::OnDial(IHTMLElement* pElement)
+{	
+	m_bInputFocus = TRUE;
+    VARIANT v;
+	CString sname="disabled";
+	pElement->getAttribute(sname.AllocSysString(),0,&v);
+	if(v.boolVal!=0) return S_OK;
+	if(!FreeswitchCall::get_load_status()) 
+		return S_OK;
+	UpdateData();
+	CString s;
+	char callstring[1024];
+	s=m_phonenum;
+	if(STATUS_RING==m_iStatus)
+	{
+		if(m_freecall!=NULL)
+		{
+			m_freecall->freeswitch_answercall();
+		}
+		
+	
+		v.vt = VT_BOOL;
+		v.boolVal = -1;
+		SetElemProperty("btDial","disabled",&v);
+		v.boolVal = 0;
+		SetElemProperty("btHup","disabled",&v);
+		//set img
+		
+		CString src;
+		v.vt = VT_BSTR;
+		src="./res/btDial_disable.gif";
+		v.bstrVal = src.AllocSysString();
+		SetElemProperty("img_dial","src",&v);
+
+		
+		v.vt = VT_BSTR;
+		src="./res/btHold.gif";
+		v.bstrVal = src.AllocSysString();
+		SetElemProperty("img_hold","src",&v);
+	    PlaySound(NULL,NULL,NULL);
+	}
+	else
+		{
+		if(s.Find("@")<0)
+		{
+			char info[1024];
+			char path[1024];
+					CString sUser = m_username;
+					if(sUser.Find("@")<0)
+					{
+						sUser += "@gtalkphone.com";
+					}
+			sprintf(path,"/api.cgi?user=%s&pass=%s&act=call&arg0=%s",sUser,m_pwd,s);
+			https_get(path,info);
+			int ret = info_get_call(info,m_rate,m_iMin,callstring);
+			TRACE("%s", callstring);
+			switch(ret)
+			{
+			case ERROR_MEMORY_NOT_ENOUGH:
+				AfxMessageBox("Out of memory error!");
+				return S_OK;
+			case ERROR_SYSTEM:
+				AfxMessageBox("Phone number is incorrect!");
+				return S_OK;
+			case ERROR_FAIL_NOFUNDS:
+				AfxMessageBox("There isn't enough funds !");
+				return S_OK;
+			case ERROR_FAIL_NOPLAN:
+				AfxMessageBox("The number isn' in there call plan!");
+				return S_OK;
+			case ERROR_FAIL_BADCRED:
+				AfxMessageBox("Bad Cred!");
+				return S_OK;
+			default:
+				break;
+			}
+			m_isubStaus = SUBSTATUS_NORMAL;
+		}
+		else
+		{
+			sprintf(callstring,"dingaling/jingle/%s",s);
+			m_rate = 0;
+			m_iMin = 60;
+			m_isubStaus = SUBSTATUS_CALLING_NORATE;
+		}
+		if(m_freecall!=NULL)
+		{
+			delete m_freecall;
+			m_freecall =NULL;
+		}
+		FreeswitchCall::freeswitch_hangup();
+			
+		
+		v.vt = VT_BOOL;
+		v.boolVal = -1;
+		SetElemProperty("btDial","disabled",&v);
+		v.boolVal = 0;
+		SetElemProperty("btHup","disabled",&v);
+		//set img
+		
+		CString src;
+		v.vt = VT_BSTR;
+		src="./res/btDial_disable.gif";
+		v.bstrVal = src.AllocSysString();
+		SetElemProperty("img_dial","src",&v);
+
+		
+		v.vt = VT_BSTR;
+		src="./res/btHold.gif";
+		v.bstrVal = src.AllocSysString();
+		SetElemProperty("img_hold","src",&v);
+		m_freecall = new FreeswitchCall(callstring);
+	}
+	m_iStatus = STATUS_CALLING;
+	
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnCallBack(IHTMLElement* pElement)
+{
+	
+	m_bInputFocus = TRUE;
+    VARIANT v;
+	CString sname="disabled";
+	pElement->getAttribute(sname.AllocSysString(),0,&v);
+	if(v.boolVal!=0) return S_OK;
+	if(STATUS_LOGIN != m_iStatus)
+		return S_OK;
+	UpdateData();
+	CString s;
+	s=m_phonenum;
+	if(s.GetLength()<=0)
+	{
+		AfxMessageBox("Please input phone num!");
+		return S_OK;
+	}
+	char info[1024];
+	char path[1024];
+//	char callstring[1024];
+	CString loc_phone_num;
+    get_phone_num(loc_phone_num);
+	
+			CString sUser = m_username;
+			if(sUser.Find("@")<0)
+			{
+				sUser += "@gtalkphone.com";
+			}
+	sprintf(path,"/cbx.cgi?user=%s&pass=%s&phone1=%s&phone2=%s",sUser,m_pwd,loc_phone_num,s);
+	https_get_callback(path,info);
+	char *ptr=strstr(info,"</");
+	if(ptr!=NULL) (*ptr) = '\0';
+	ptr = strstr(info,">");
+	if(ptr!=NULL) 
+		ptr ++;
+	else 
+		ptr = info;
+	AfxMessageBox(ptr);
+	
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnHup(IHTMLElement* pElement)
+{
+    
+	m_bInputFocus = TRUE;
+    VARIANT v;
+	CString sname="disabled";
+	if(pElement!=NULL)
+	{
+		pElement->getAttribute(sname.AllocSysString(),0,&v);
+		if(v.boolVal!=0) return S_OK;
+	}
+	if(!FreeswitchCall::get_load_status()) 
+		return S_OK;
+	if(m_freecall!=NULL)
+	{
+		delete m_freecall;
+		m_freecall = NULL;
+	}
+	FreeswitchCall::freeswitch_hangup();
+	v.vt = VT_BOOL;
+	v.boolVal = 0;
+    SetElemProperty("btDial","disabled",&v);
+	v.boolVal = -1;
+    SetElemProperty("btHup","disabled",&v);
+	
+	//set img
+	
+	CString src;
+	v.vt = VT_BSTR;
+	src="./res/btDial.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_dial","src",&v);
+
+	
+	v.vt = VT_BSTR;
+	src="./res/btHold_disable.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_hold","src",&v);
+	
+	if(m_iStatus==STATUS_RING)
+	{
+	    PlaySound(NULL,NULL,NULL);
+	}
+	m_iStatus = STATUS_LOGIN;
+	
+	CString s = _T("Idle");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("message"),bstr);
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnLogin(IHTMLElement* /*pElement*/)
+{
+	//https_init();
+	UpdateData();
+	VARIANT v;
+	v.vt = VT_BOOL;
+	v.boolVal = -1;
+    SetElemProperty("btSign","disabled",&v);
+	CString s = _T("Connecting...");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("status"),bstr);
+	FreeswitchCall::freeswitch_login(m_username.GetBuffer(0),m_pwd.GetBuffer(0),m_issave);
+	m_username.ReleaseBuffer();
+	m_pwd.ReleaseBuffer();
+	//set login time out
+	m_iCount = 0;
+	m_iStatus = STATUS_LOGINING;
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnBackspace(IHTMLElement* /*pElement*/)
+{
+	UpdateData();
+	CString s;
+	s=m_phonenum;
+	if(s.GetLength()>0)
+	{
+	   s.Delete(s.GetLength()-1);
+	}
+	//m_phonenum = s;
+	m_phonenum="";
+	UpdateData(false);
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum1(IHTMLElement* /*pElement*/)
+{
+	SetNum("1");
+
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnNum2(IHTMLElement* /*pElement*/)
+{
+	SetNum("2");
+
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnNum3(IHTMLElement* /*pElement*/)
+{
+	SetNum("3");
+
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnNum4(IHTMLElement* /*pElement*/)
+{
+	SetNum("4");
+
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum5(IHTMLElement* /*pElement*/)
+{
+	SetNum("5");
+
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnNum6(IHTMLElement* /*pElement*/)
+{
+	SetNum("6");
+
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum7(IHTMLElement* /*pElement*/)
+{
+	SetNum("7");
+
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum8(IHTMLElement* /*pElement*/)
+{
+	SetNum("8");
+
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum9(IHTMLElement* /*pElement*/)
+{
+	SetNum("9");
+
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum0(IHTMLElement* /*pElement*/)
+{
+	SetNum("0");
+
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum_Star(IHTMLElement* /*pElement*/)
+{
+	SetNum("*");
+
+
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnNum_Sharp(IHTMLElement* /*pElement*/)
+{
+	SetNum("#");
+
+
+	return S_OK;
+}
+void CgtalkphoneDlg::SetNum(LPCTSTR sNum)
+{
+	m_bInputFocus = TRUE;
+	UpdateData();
+	if(m_phonenum.Compare("Input phone number here")==0)
+	{
+		m_phonenum="";
+	}
+	CString s;
+	s=m_phonenum;
+	if(s.GetLength()>20) return;
+	if(m_freecall!=NULL)
+	{
+		m_freecall->freeswitch_send_dtmf((char*)sNum);
+	}
+	s += sNum;
+	m_phonenum = s;
+	UpdateData(false);
+}
+HRESULT CgtalkphoneDlg::OnSetting(IHTMLElement* /*pElement*/)
+{
+	CsettingsDlg dlg;
+	dlg.DoModal();
+	return 1;
+}
+
+BOOL CgtalkphoneDlg::SetSkin(CString file)
+{
+	m_skinWin.LoadSkin( file );
+	if ( m_bFirst )
+	{
+		m_skinWin.InstallSkin( this );
+		m_bFirst = FALSE;
+	}
+	SetWindowPos( 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |SWP_FRAMECHANGED );
+	return TRUE;
+
+}
+
+
+void CgtalkphoneDlg::OnTimer(UINT_PTR nIDEvent)
+{
+	// TODO: Add your message handler code here and/or call default
+	if(nIDEvent==2)
+	{
+		FlashWindow(bFlashFlag);
+		bFlashFlag = ~bFlashFlag;
+	}
+	else
+	{
+		CTime t=CTime::GetCurrentTime();
+		CString s=t.Format(_T("%m/%d/%Y %H:%M"));
+		BSTR bstr = s.AllocSysString();
+		SetElementHtml(_T("Timer"),bstr);
+		switch(m_iStatus)
+		{
+		case STATUS_LOGIN:
+			/*
+			if(m_iCount>=2000) m_iCount = 0;
+			if(m_iCount==0)
+			{
+				char info[1024];
+				char path[1024];
+				CString sUser = m_username;
+				if(sUser.Find("@")<0)
+				{
+					sUser += "@gtalkphone.com";
+				}
+				sprintf(path,"/api.cgi?user=%s&pass=%s&act=balance",sUser,m_pwd);
+				https_get(path,info);
+				float fret = -(info_get_balance(info));
+				if(fret<-0.009 || fret>0.009)
+				{
+				   m_balance = fret;
+				}
+				s.Format("Balance:%.2f",m_balance);
+				bstr = s.AllocSysString();
+				SetElementHtml(_T("balance"),bstr);
+			}
+			m_iCount ++;
+			*/
+			break;
+		case STATUS_CALLING:
+			if(m_iCount>=m_iMin) m_iCount = 0;
+			if(m_iCount==0)
+			{
+				m_balance -= m_rate;
+				s.Format("Balance:%.2f",m_balance);
+				bstr = s.AllocSysString();
+				SetElementHtml(_T("balance"),bstr);
+			}
+			m_iCount ++;
+			break;
+		case STATUS_LOGINING:
+			if(m_iCount>=LOGIN_TIMEOUT)
+			{
+				m_iCount = 0;
+				OnLogonFailed();
+				AfxMessageBox("Login failed!Connect to server time out!");
+				break;
+			}
+			else
+			{
+				m_iCount ++;
+			}
+			break;
+		default:
+			break;
+		}
+	}
+	
+	CDHtmlDialog::OnTimer(nIDEvent);
+}
+
+void CgtalkphoneDlg::OnDestroy()
+{
+	
+	KillTimer(1);
+	if(m_freecall!=NULL)
+	{
+		delete m_freecall;
+		m_freecall = NULL;
+	}
+	//FreeswitchCall::freeswitch_logout();
+	FreeswitchCall::freeswitch_shutdown();
+	https_shutdown();
+	if(m_MonThread!=NULL)
+	{
+		delete m_MonThread;
+		m_MonThread = NULL;
+	}
+	ShellDll_Unhook();
+	CDHtmlDialog::OnDestroy();
+
+	// TODO: Add your message handler code here
+}
+
+void CgtalkphoneDlg::SetElemProperty(LPCTSTR sElemid,LPCTSTR sProperty,VARIANT *v)
+{
+	
+	CComPtr<IDispatch> spdispElem;
+    GetElement(sElemid,&spdispElem);
+	if (spdispElem)
+	{
+
+    DISPID dispid;
+    USES_CONVERSION;
+    LPOLESTR pPropName = (LPOLESTR)T2COLE(sProperty);
+    HRESULT hr = spdispElem->GetIDsOfNames(IID_NULL, &pPropName, 1, LOCALE_USER_DEFAULT, &dispid);
+    if (SUCCEEDED(hr))
+	{
+		SetElementProperty(sElemid,dispid,v);
+	}
+	}
+}
+void CgtalkphoneDlg::GetElemFocus(LPCTSTR sElemid)
+{
+	IHTMLElement* spdispElem;
+    GetElement(sElemid,&spdispElem);
+	if (spdispElem)
+	{
+		IHTMLElement2* spdispElem2;
+		spdispElem->QueryInterface(IID_IHTMLElement2, (void**)&spdispElem2);
+		if(spdispElem2)
+		{
+		  spdispElem2->focus();
+		}
+	}
+	m_bInputFocus = TRUE;
+
+}
+void CgtalkphoneDlg::SetElemVisible(LPCTSTR sElemid,BOOL b)
+{
+	
+	CComPtr<IHTMLElement> spdispElem;
+    GetElement(sElemid,&spdispElem);
+	CString s;
+	if(b)
+	{
+		s = "visible";
+	}
+	else
+	{
+		s = "hidden";
+	}
+	if (spdispElem)
+	{
+		CComPtr<IHTMLStyle> styleElem;
+		spdispElem->get_style(&styleElem);
+		if(styleElem)
+		{
+			BSTR bstr = s.AllocSysString();
+			styleElem->put_visibility(bstr);
+		}
+	}
+}
+
+STDMETHODIMP CgtalkphoneDlg::GetExternal( 
+            /* [out] */ IDispatch **ppDispatch)
+{
+	*ppDispatch = ((CgtalkphoneApp *)AfxGetApp())->m_external.GetIDispatch(TRUE);
+	return S_OK;
+}
+HBRUSH CgtalkphoneDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	CDHtmlDialog::OnCtlColor(pDC, pWnd, nCtlColor);
+    CBrush brush;
+	brush.CreateSolidBrush(RGB(255,255,255));
+	// TODO:  Change any attributes of the DC here
+    if(pWnd==this)
+		return brush;
+	else
+	// TODO:  Return a different brush if the default is not desired
+		return brush;
+}
+
+void CgtalkphoneDlg::OnSize(UINT nType, int cx, int cy)
+{
+	CDHtmlDialog::OnSize(nType, cx, cy);
+	// TODO: Add your message handler code here
+}
+
+void CgtalkphoneDlg::OnQuitEvent()
+{
+	m_skinWin.m_bClose = TRUE;
+	if(m_MonThread!=NULL)
+	{
+		
+	::SendMessage(m_MonThread->m_pMainWnd->m_hWnd,WM_CLOSE, 0, 0 );
+	//delete m_MonThread;
+	m_MonThread = NULL;
+	}
+	PostMessage( WM_CLOSE, 0, 0 );
+    return ;
+}
+LRESULT CgtalkphoneDlg::OnMonitorEvent(WPARAM wp,LPARAM lp)
+{
+	
+	SetElementHtml(_T("balance"),(BSTR)lp);
+    return 0;
+}
+LRESULT CgtalkphoneDlg::OnFreeSwitchEvent(WPARAM wp,LPARAM lp)
+{
+	switch_event_t *event = (switch_event_t *)lp;
+	if(event==NULL) return 0;
+	while(event->next!=NULL)
+	{
+		event = event->next;
+	}
+	switch(event->event_id)
+	{
+	case SWITCH_EVENT_CUSTOM:
+		if(!strcmp(event->subclass->name,DL_EVENT_LOGIN_SUCCESS))
+		{
+			OnLogonSuccess();
+		}
+		else if(!strcmp(event->subclass->name,DL_EVENT_LOGIN_FAILURE))
+		{
+			OnLogonFailed();
+			AfxMessageBox("Login failed!The user name or password is incorrect!");
+		}
+		else if(!strcmp(event->subclass->name,DL_EVENT_MESSAGE))
+		{
+			OnJingleMsg();
+		}
+		else if(!strcmp(event->subclass->name,PA_EVENT_RING))
+		{
+			if(m_iStatus!=STATUS_RING)
+			{
+				PlaySound("./skin/google/res/ring.wav",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
+				SetFlashWindow();
+				char* scallid = switch_event_get_header(event,PA_EVENT_INFO);
+				if(scallid!=NULL)
+				{
+					int icallid = atoi(scallid);
+					if(m_freecall!=NULL)
+					{
+						delete m_freecall;
+						m_freecall =NULL;
+					}
+					m_freecall = new FreeswitchCall(icallid);
+					
+					VARIANT v;
+					v.vt = VT_BOOL;
+					v.boolVal = 0;
+					SetElemProperty("btDial","disabled",&v);
+					v.boolVal = 0;
+					SetElemProperty("btHup","disabled",&v);
+					
+					CString src;
+					v.vt = VT_BSTR;
+					src="./res/btDial.gif";
+					v.bstrVal = src.AllocSysString();
+					SetElemProperty("img_dial","src",&v);
+
+					
+					v.vt = VT_BSTR;
+					src="./res/btHold.gif";
+					v.bstrVal = src.AllocSysString();
+					SetElemProperty("img_hold","src",&v);
+					m_iStatus = STATUS_RING;
+				}
+			}
+		}
+		break;
+	case SWITCH_EVENT_CHANNEL_CREATE:
+		OnChannelCreate();
+		break;
+	case SWITCH_EVENT_CHANNEL_DESTROY:
+		OnChannelDestroy();
+		break;
+	case SWITCH_EVENT_CHANNEL_STATE:
+		break;
+	case SWITCH_EVENT_CHANNEL_ANSWER:
+		OnChannelAnswer();
+		break;
+	case SWITCH_EVENT_CHANNEL_HANGUP:
+		OnChannelHangup();
+		break;
+	case SWITCH_EVENT_CHANNEL_EXECUTE:
+		break;
+	case SWITCH_EVENT_CHANNEL_BRIDGE:
+		break;
+	case SWITCH_EVENT_CHANNEL_UNBRIDGE:
+		break;
+	case SWITCH_EVENT_API:
+		break;
+	case SWITCH_EVENT_INBOUND_CHAN:
+		break;
+	case SWITCH_EVENT_OUTBOUND_CHAN:
+		break;
+	default:
+		break;
+	}
+    return 0;
+}
+void CgtalkphoneDlg::OnLogonSuccess()
+{	
+	VARIANT v;
+	SetElemVisible("dialpanel",TRUE);
+	v.vt = VT_BOOL;
+	v.boolVal = 0;
+    SetElemProperty("btDial","disabled",&v);
+	v.boolVal = -1;
+    SetElemProperty("btHup","disabled",&v);
+	v.boolVal = 0;
+    SetElemProperty("btCallBack","disabled",&v);
+	CString s = _T("Online");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("status"),bstr);
+	//set img
+	
+	CString src;
+	v.vt = VT_BSTR;
+	src="./res/btDial.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_dial","src",&v);
+
+
+	v.vt = VT_BSTR;
+	src="./res/btHold_disable.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_hold","src",&v);
+	
+	v.vt = VT_BSTR;
+	src="./res/btReDial.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_redial","src",&v);
+	if(m_MonThread!=NULL)
+		m_MonThread->m_MoniWnd.m_iCount = 0;
+	m_iCount = 0;
+	m_iStatus = STATUS_LOGIN;
+	GetElemFocus("dailnum");
+	
+}
+void CgtalkphoneDlg::OnLogonFailed()
+{
+	VARIANT v;
+	SetElemVisible("dialpanel",FALSE);
+	v.vt = VT_BOOL;
+	v.boolVal = -1;
+    SetElemProperty("btDial","disabled",&v);
+	v.boolVal = -1;
+    SetElemProperty("btHup","disabled",&v);
+	v.boolVal = -1;
+    SetElemProperty("btCallBack","disabled",&v);
+	v.boolVal = 0;
+    SetElemProperty("btSign","disabled",&v);
+	//set img
+	
+	CString src;
+	v.vt = VT_BSTR;
+	src="./res/btDial_disable.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_dial","src",&v);
+
+
+	v.vt = VT_BSTR;
+	src="./res/btHold_disable.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_hold","src",&v);
+	
+	v.vt = VT_BSTR;
+	src="./res/btReDial_disable.gif";
+	v.bstrVal = src.AllocSysString();
+    SetElemProperty("img_redial","src",&v);
+	CString s = _T("Offline");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("status"),bstr);
+	if(m_freecall!=NULL)
+	{
+		delete m_freecall;
+		m_freecall = NULL;
+	}
+	//FreeswitchCall::freeswitch_shutdown();
+	m_iStatus = STATUS_INIT;	
+}
+void CgtalkphoneDlg::OnJingleMsg()
+{
+}
+void CgtalkphoneDlg::OnChannelCreate()
+{
+	CString s = _T("Call Active");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("message"),bstr);
+}
+void CgtalkphoneDlg::OnChannelDestroy()
+{
+	CString s = _T("Call Disconnected");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("message"),bstr);
+	OnHup(NULL);
+	//m_iStatus = STATUS_LOGIN;
+}
+void CgtalkphoneDlg::OnChannelAnswer()
+{
+	CString s = _T("Call in Progress");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("message"),bstr);
+	m_iStatus = STATUS_CALLING;
+	if(m_MonThread!=NULL)
+		m_MonThread->m_MoniWnd.m_iCount = 0;
+	m_iCount = 1;
+}
+void CgtalkphoneDlg::OnChannelHangup()
+{
+	/*CString s = _T("Channel Hangup");
+	BSTR bstr = s.AllocSysString();
+	SetElementHtml(_T("message"),bstr);
+	m_iStatus = STATUS_LOGIN;
+	OnHup(NULL);*/
+}
+
+void CgtalkphoneDlg::SetMicPos(int pos) 
+{
+	m_mikeVolume.SetPos(pos);
+}
+void CgtalkphoneDlg::SetSoundPos(int pos) 
+{
+	m_mainVolume.SetPos(pos);
+}
+
+void CgtalkphoneDlg::OnClose()
+{
+	// TODO: Add your message handler code here and/or call default
+    
+	CDHtmlDialog::OnClose();
+}
+
+HRESULT STDMETHODCALLTYPE CgtalkphoneDlg::ShowContextMenu(DWORD /*dwID*/, POINT *ppt, IUnknown* /*pcmdtReserved*/, IDispatch* /*pdispReserved*/)
+{
+	/*CMenu ctxMenu;
+
+	m_strCtxFileName.Empty();
+	if (m_spCurrElement != NULL)
+	{
+
+		CComBSTR bstrFileName;
+		m_spCurrElement->get_innerText(&bstrFileName);
+		if (bstrFileName)
+			m_strCtxFileName = bstrFileName;
+	}
+	ctxMenu.LoadMenu(IDR_CONTEXT_MENU);
+	
+	ctxMenu.GetSubMenu(0)->EnableMenuItem(ID_CONTEXT_PROPERTIES, MF_BYCOMMAND | 
+		((m_spCurrElement==NULL) ? MF_GRAYED : MF_ENABLED));
+	ctxMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, ppt->x, ppt->y, this, NULL);*/
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnSignout(IHTMLElement* /*pElement*/)
+{
+	// TODO: Add your message handler code here and/or call default
+    OnLogonFailed();
+	FreeswitchCall::freeswitch_logout();
+	return 1;
+}
+
+HRESULT CgtalkphoneDlg::OnSpeakerMousedown(IHTMLElement *phtmlElement)
+{
+		
+	IHTMLStyle *phtmlStyle;
+	phtmlElement->get_style(&phtmlStyle);
+	if (phtmlStyle)
+	{
+		/*VARIANT varColor;
+		varColor.vt = VT_I4;
+		varColor.lVal = 0xff0000;
+		phtmlStyle->put_textDecorationUnderline(VARIANT_TRUE);
+		phtmlStyle->put_color(varColor);
+		phtmlStyle->put_cursor(L"hand");*/
+		long p;
+		POINT pot;
+		GetCursorPos(&pot);
+		phtmlStyle->get_pixelLeft(&p);
+		x = pot.x - p;
+		phtmlStyle->get_pixelTop(&p);
+		y = pot.y - p;
+        m_move = 1;
+		phtmlStyle->Release();
+	}
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnSpeakerMousemove(IHTMLElement *phtmlElement)
+{
+	
+    if (m_move) {
+		
+	IHTMLStyle *phtmlStyle;
+		IHTMLElement *pelemt;
+		GetElement("handl_speeker",&pelemt);
+	pelemt->get_style(&phtmlStyle);
+	if (phtmlStyle)
+	{
+		/*VARIANT varColor;
+		varColor.vt = VT_I4;
+		varColor.lVal = 0xff0000;*/
+		long p;
+		POINT pot;
+		GetCursorPos(&pot);
+		p = pot.x - x;
+		
+	IHTMLStyle *phrStyle;
+		IHTMLElement *phrelemt;
+		GetElement("hr_speeker",&phrelemt);
+	phrelemt->get_style(&phrStyle);
+	if (phrStyle)
+	{
+		long hr_left,hr_with;
+		phrStyle->get_pixelLeft(&hr_left);
+		phrStyle->get_pixelWidth(&hr_with);
+		if(p>hr_left-2 && p<hr_left+hr_with-5)
+		{
+		phtmlStyle->put_pixelLeft(p);
+		SetSoundPos((int)((p - (hr_left-2))*100/(hr_with-3)));
+		}
+		phrStyle->Release();
+	}
+		//p = pot.y - y;
+		//phtmlStyle->put_pixelTop(p);
+		phtmlStyle->Release();
+	}
+	//m_spCurrElement = phtmlElement;
+    }
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnSpeakerMouseup(IHTMLElement *phtmlElement)
+{
+	m_move = 0;
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnMicMousedown(IHTMLElement *phtmlElement)
+{
+		
+	IHTMLStyle *phtmlStyle;
+	phtmlElement->get_style(&phtmlStyle);
+	if (phtmlStyle)
+	{
+		/*VARIANT varColor;
+		varColor.vt = VT_I4;
+		varColor.lVal = 0xff0000;
+		phtmlStyle->put_textDecorationUnderline(VARIANT_TRUE);
+		phtmlStyle->put_color(varColor);
+		phtmlStyle->put_cursor(L"hand");*/
+		long p;
+		POINT pot;
+		GetCursorPos(&pot);
+		phtmlStyle->get_pixelLeft(&p);
+		x = pot.x - p;
+		phtmlStyle->get_pixelTop(&p);
+		y = pot.y - p;
+        m_move = 1;
+		phtmlStyle->Release();
+	}
+	//return S_OK;
+	return 1;
+}
+
+HRESULT CgtalkphoneDlg::OnMicMousemove(IHTMLElement *phtmlElement)
+{
+	
+    if (m_move) {
+        //dragObj.style.left = window.event.x - clickleft
+        //dragObj.style.top = window.event.y - clicktop
+		
+	IHTMLStyle *phtmlStyle;
+		IHTMLElement *pelemt;
+		GetElement("handl_mic",&pelemt);
+	pelemt->get_style(&phtmlStyle);
+	if (phtmlStyle)
+	{
+		/*VARIANT varColor;
+		varColor.vt = VT_I4;
+		varColor.lVal = 0xff0000;*/
+		long p;
+		POINT pot;
+		GetCursorPos(&pot);
+		p = pot.x - x;
+		
+	IHTMLStyle *phrStyle;
+		IHTMLElement *phrelemt;
+		GetElement("hr_mic",&phrelemt);
+	phrelemt->get_style(&phrStyle);
+	if (phrStyle)
+	{
+		long hr_left,hr_with;
+		phrStyle->get_pixelLeft(&hr_left);
+		phrStyle->get_pixelWidth(&hr_with);
+		if(p>hr_left-2 && p<hr_left+hr_with-5)
+		{
+		phtmlStyle->put_pixelLeft(p);
+		
+		SetMicPos((int)((p - (hr_left-2))*100/(hr_with-3)));
+		}
+		phrStyle->Release();
+	}
+		//p = pot.y - y;
+		//phtmlStyle->put_pixelTop(p);
+		phtmlStyle->Release();
+	}
+	//m_spCurrElement = phtmlElement;
+    }
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnMicMouseup(IHTMLElement *phtmlElement)
+{
+	m_move = 0;
+
+	return S_OK;
+}
+
+HRESULT CgtalkphoneDlg::OnMicDrag(IHTMLElement *phtmlElement)
+{
+	return 1;
+}
+HRESULT CgtalkphoneDlg::OnHtmlKeyDown(IHTMLElement *phtmlElement)
+{
+	return 1;
+}
+
+void CgtalkphoneDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
+{
+	// TODO: Add your message handler code here and/or call default
+
+	CDHtmlDialog::OnKeyDown(nChar, nRepCnt, nFlags);
+}
+
+BOOL CgtalkphoneDlg::PreTranslateMessage(MSG* pMsg)
+{
+	// TODO: Add your specialized code here and/or call the base class
+	if((WM_LBUTTONUP == pMsg->message)||(WM_KEYDOWN == pMsg->message))
+	{
+	    m_bInputFocus = FALSE;
+	}
+ if (pMsg->message == WM_KEYDOWN)
+ {	 
+	 if(m_iStatus == STATUS_INIT)
+	 {
+		 if(pMsg->wParam==13)
+		 {//enter key
+			 OnLogin(NULL);
+			 return TRUE;
+			 //pMsg->wParam = 9;
+		 }
+	 }
+	 else
+	 {
+		 if(pMsg->wParam==13)
+		 {
+			 CComPtr<IHTMLElement> spdispElem;
+             GetElement("btDial",&spdispElem);
+			 OnDial(spdispElem);
+		    return TRUE;
+		 }
+	     GetElemFocus("dailnum");       
+	 }     
+                                     
+ }
+ BOOL ret = CDHtmlDialog::PreTranslateMessage(pMsg);
+ 
+	if((WM_LBUTTONUP == pMsg->message)||(WM_KEYDOWN == pMsg->message))
+	{
+	    
+		CComPtr<IDispatch> spdispElem;
+		GetElement("dailnum",&spdispElem);
+		if (spdispElem)
+		{
+			DISPID dispid;
+			USES_CONVERSION;
+			CString sname="disabled";
+			LPOLESTR pPropName = (LPOLESTR)T2COLE(sname);
+			HRESULT hr = spdispElem->GetIDsOfNames(IID_NULL, &pPropName, 1, LOCALE_USER_DEFAULT, &dispid);
+			if (SUCCEEDED(hr))
+			{
+				VARIANT v = GetElementProperty("dailnum",dispid);		
+				 if(m_bInputFocus)
+				 {
+					 if(v.boolVal!=0)
+					 {
+						SetElemVisible("imgbackspace",TRUE);
+						v.vt = VT_BOOL;
+						v.boolVal = 0;
+						SetElemProperty("dailnum","disabled",&v);
+						UpdateData();
+						
+						if(m_phonenum.Compare("Input phone number here")==0)
+						{
+							m_phonenum="";
+						}
+						UpdateData(false);
+					 }
+				 }
+				 else
+				 {
+					 
+					 if(v.boolVal==0)
+					 {
+						SetElemVisible("imgbackspace",FALSE);
+						v.vt = VT_BOOL;
+						v.boolVal = -1;
+						SetElemProperty("dailnum","disabled",&v);
+						m_phonenum = "Input phone number here";
+						UpdateData(false);
+					 }
+				 }
+		    }
+		}
+	}
+	
+	return ret;
+}
+HRESULT CgtalkphoneDlg::OnInputLostFocus(IHTMLElement *phtmlElement)
+{
+	return S_OK;
+}
+HRESULT CgtalkphoneDlg::OnInputFocus(IHTMLElement *phtmlElement)
+{
+	if(m_iStatus != STATUS_INIT)
+	{
+	  m_bInputFocus = TRUE;
+	}
+	return S_OK;
+}
+void CgtalkphoneDlg::SetFlashWindow()
+{
+   if(GetActiveWindow() != this || GetForegroundWindow() != this)
+        SetTimer(2,1000,NULL);
+}
+void CgtalkphoneDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
+{
+	KillTimer(2);
+	CDHtmlDialog::OnActivate(nState, pWndOther, bMinimized);
+
+	// TODO: Add your message handler code here
+}
+
+int CgtalkphoneDlg::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
+{
+	// TODO: Add your message handler code here and/or call default
+
+	KillTimer(2);
+	return CDHtmlDialog::OnMouseActivate(pDesktopWnd, nHitTest, message);
+}
+/*************for google plugin***********************************************************/
+void CgtalkphoneDlg::ReStartGoogle()
+{
+	HWND hwnd = ::FindWindow(_T("Google Talk - Google Xmpp Client GUI Window"),NULL);
+	if(hwnd==NULL)
+	{
+		hwnd = ::FindWindow(NULL,_T("Google Talk"));
+	}
+	if(hwnd!=NULL)
+	{
+		::SendMessage(hwnd,WM_CLOSE,NULL,NULL);
+	}
+    
+	CString sdir = GetExePath();
+	CString sexe = sdir + _T("\\googletalk.exe");
+	TRACE(sexe);
+	ShellExecute(NULL,_T("open"),sexe,_T("/autostart"),sdir,SW_MINIMIZE);
+	
+
+}
+CString  CgtalkphoneDlg::GetExePath()
+{
+	DWORD dwType=0,dwLen=MAX_PATH;
+	TCHAR szValue[MAX_PATH];
+	memset(szValue,0,MAX_PATH);
+	HKEY     vhKey;
+	if(RegOpenKey(HKEY_CURRENT_USER,_T("Software\\Google\\Google Talk\\Autoupdate"),&vhKey)!=ERROR_SUCCESS)
+	{
+	   return CString(_T(""));
+	}		
+	if(vhKey == NULL) return CString(_T(""));
+	if(RegQueryValueEx(vhKey,_T("AppPath"),0,&dwType,(BYTE*)szValue,&dwLen)!=ERROR_SUCCESS)
+	{
+		RegCloseKey(vhKey);	
+		return CString(_T(""));
+	}
+	RegCloseKey(vhKey);	
+	return CString(szValue);
+}
+

Added: freeswitch/trunk/gtalkphone/ui/source/settingsDlg.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/gtalkphone/ui/source/settingsDlg.cpp	Wed Aug 30 11:21:42 2006
@@ -0,0 +1,138 @@
+// settingsDlg.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "gtalkphone.h"
+#include "settingsDlg.h"
+
+// CsettingsDlg dialog
+
+IMPLEMENT_DYNCREATE(CsettingsDlg, CDHtmlDialog)
+
+CsettingsDlg::CsettingsDlg(CWnd* pParent /*=NULL*/)
+	: CDHtmlDialog(CsettingsDlg::IDD, CsettingsDlg::IDH, pParent)
+{
+
+}
+
+CsettingsDlg::~CsettingsDlg()
+{
+}
+
+BOOL CsettingsDlg::OnInitDialog()
+{
+	CDHtmlDialog::OnInitDialog();
+	
+//	SetSkin( _T("skin\\google\\theme.ini") );
+	
+	m_skinWin.LoadSkin( _T("skin\\google\\theme.ini") );
+	m_skinWin.InstallSkin( this );
+	SetWindowPos( 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |SWP_FRAMECHANGED );
+//	GotoUrl(_T("skin\\google\\gtalkphone.htm"));
+	LPCTSTR pszUrl = _T("skin\\google\\settingsDlg.htm");
+    CString strPath,str;
+    DWORD dwSize=MAX_PATH;
+    ::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH),dwSize); //AfxGetResourceHandle()
+    strPath.ReleaseBuffer(dwSize);
+    str=strPath.Left(strPath.ReverseFind(_T('\\'))+1);
+    ASSERT(pszUrl!=NULL);
+    if(pszUrl!=NULL)
+    {
+        CString strUrl;
+        strUrl=str+pszUrl;
+        Navigate(_T("file:///")+strUrl);
+    }
+	get_phone_num(m_phonenum);
+	UpdateData(false);
+	return TRUE;  // return TRUE  unless you set the focus to a control
+}
+
+BEGIN_MESSAGE_MAP(CsettingsDlg, CDHtmlDialog)
+END_MESSAGE_MAP()
+
+BEGIN_DHTML_EVENT_MAP(CsettingsDlg)
+	DHTML_EVENT_ONCLICK(_T("btOK"), OnButtonOK)
+	DHTML_EVENT_ONCLICK(_T("btCancel"), OnButtonCancel)
+END_DHTML_EVENT_MAP()
+
+
+
+// CsettingsDlg message handlers
+
+HRESULT CsettingsDlg::OnButtonOK(IHTMLElement* /*pElement*/)
+{
+	UpdateData();
+	set_phone_num(m_phonenum);
+	OnOK();
+	return S_OK;
+}
+
+HRESULT CsettingsDlg::OnButtonCancel(IHTMLElement* /*pElement*/)
+{
+	OnCancel();
+	return S_OK;
+}
+
+void CsettingsDlg::DoDataExchange(CDataExchange* pDX)
+{
+	CDHtmlDialog::DoDataExchange(pDX);
+	//// for html ddx
+	DDX_DHtml_ElementValue(pDX,"phonenum",m_phonenum);
+}
+void get_phone_num(CString &s_phone_num)
+{
+	/*FILE *f;
+	f = fopen("debug.log","w+");
+	if(!f)
+	{
+		return ;
+	}
+	fputs("get_phone_num begin\n",f);*/
+	HKEY hKey=NULL;
+	DWORD dwLen=1024;
+	TCHAR szKey[255];
+	TCHAR sztmp[1024];
+	LONG lRet = 0;
+	DWORD dwType =REG_SZ;
+	sprintf(szKey,_T("SOFTWARE\\GtalkPhone"));
+	int ret = RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen);
+	if(ret!=ERROR_SUCCESS)
+	{
+		//fprintf(f,"error:%d\n",ret);
+	    //fclose(f);
+		return ;
+	}
+	dwLen=1024;
+	lRet = RegQueryValueEx(hKey,_T("PHONENUM"),0,&dwType,(LPBYTE)sztmp,&dwLen);
+	if(lRet==ERROR_SUCCESS)
+		s_phone_num = sztmp;
+	else
+        s_phone_num = "";
+	//fprintf(f,"RegQueryValueEx %s ret=%d\n",s_phone_num,lRet);
+	RegCloseKey(hKey);
+	//fputs("get_phone_num end\n",f);
+	//fclose(f);
+}
+void CsettingsDlg::set_phone_num(CString s_phone_num)
+{
+    HKEY hKey=NULL;
+	DWORD dwLen=255;
+	TCHAR szKey[255];
+	TCHAR sztmp[255];
+	BOOL bRet = 0;
+	DWORD dwType = 0;
+	sprintf(szKey,_T("SOFTWARE\\GtalkPhone"));
+	if(RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen)!=ERROR_SUCCESS)
+	{
+		return ;
+	}
+	dwType = REG_SZ;
+	strcpy(sztmp,s_phone_num);
+	dwLen=255;
+	if(RegSetValueEx(hKey,_T("PHONENUM"),0,dwType,(LPBYTE)sztmp,dwLen)!=ERROR_SUCCESS)
+	{
+		bRet = 1;
+	}
+	s_phone_num.ReleaseBuffer();
+	RegCloseKey(hKey);
+}
\ No newline at end of file



More information about the Freeswitch-svn mailing list