import  wx, os, cStringIO, base64, tempfile, subprocess, platform, wx.wizard as wiz, re, urllib2, urllib, wx.richtext as rt


ID_M_MSG = 426
ID_M_BXSIZE = 427

docancelwarning = True

#import  images


imgcode="/9j/4AAQSkZJRgABAgEASABIAAD/4QguRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAA\
EaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAdAAAAcgEyAAIA\
AAAUAAAAj4dpAAQAAAABAAAApAAAANAAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG\
9wIEVsZW1lbnRzIDIuMAAyMDA5OjA3OjI5IDIyOjQyOjE5AAAAA6ABAAMAAAAB//8AAKAC\
AAQAAAABAAAAdKADAAQAAAABAAABBAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAA\
EeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAb4AAAA\
AAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9iZV9DTQAC/+\
4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwM\
DAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODh\
QRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAgAA5\
AwEiAAIRAQMRAf/dAAQABP/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQ\
UBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEF\
QVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0l\
XiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cR\
AAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1\
MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1\
VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A8scPTiHNdubJjWJ/NMj6Si\
InXjupVMFjtpe2sQ47nTHtBdt9od7nxsYopKUYnTjskkpOGm5oIZMCddfwSUxSUmOawncw\
PlpAknQkaP8AYW+5qikpSn6z/Bv+Y3/yKgkkp//Q8qSSUq7AzdLGv3NLRun2z+e2C33pKY\
o9lezGqgz6hc4nsI9u1CrsfW/eyA4AjUA8jb+crLmPfiVCTDSSRzAPePknRFiXkgnbzaoc\
QCBGogyAfPT91MkkmpXDSQSPzRJ+/b/FMkixifv2f5rf/JpKf//R8qSRMZ9FdzX5FZuqH0\
qw7YTp/pNr9vu/kpWtZTe5rHtvZW6G2NDtjwD9INsbXZsd/LYkpLiUMc5rnkO0JDAZOhH0\
/wCSrwAOpdBlVsNzbbb7i0Mc4y1jBDRuO4ta381jfzVfx8Z1zuQ1kwXH+Cs4RUL7sOQ+pz\
s9lYLXhvMguGk/uqmui6l0+qrp17xq5gaQPi9rZP3rBDmFpr0DZLg8iXaA7Wf1XOUWUVLz\
1X4z6fJGkkko17//0vKkklOHsLLHM9p1bIgOAO3+19FJTpYOOWUiR7n+4j/qVqVUMNGri5\
8y2odihtZVVWLrjDXt3gHQgHXVv0t/8hWegt/bnUf2fjg1Au91zpIbU2XXZG32O9lbd/oq\
9HgiAL6NQ8UiSA1H49lrnNcC51gId8FzzWOedrPcSYa0DU/JdPnvbZjZP2Bhpa5kUhzt1n\
pg+71H/nZF1X856f6P/BUsXMj02s3Ne4XB2kCG7Y+lv3b9+7/g1DzO8RXRlwbHXqwgxPY6\
JJJKuzP/0/Kk7XubO0kSIPwKZO2eJ2g6OOsf2oSU9P0a7K6hQH3bXOqft9Yj3ERu/wA5aN\
Nd/ScnHzcHaH4rtzGH6MH+drsbO59eQz9Hcue6DlZTTZiUOaGkmzefH2s7/vLQtfscGl4t\
d+cQZ1V3DK4C9emrVyCpGkt5xvVc7Fa6ugmWVvMuYD/gvUH876f0K7v8Iz+c965vqRqOZZ\
6bdsGHeG4fSLVtW27aH3lrjXVG/bE6kN0/zlz91nq2vsjbvcXRzEnhM5mQoR+q7BE2ZFgk\
kkqrYf/U8sqrNtja2loLyGgvcGtE/vPeWsY3+sltGwEOk/nDw8P6yTbHNDxyXt2yZkAFv0\
df5OxJwAY0wQ4yZPBHA2/9JJTewXYzMp+M15dXY6Kry3adPoepXL9m+f7D1dtDa3fonF7B\
pvIgbvBqyMRp9VtkS1hlxH5uoY17v5O97FoSePDsrOAnh8iw5Rr5o83Oc2h2I0D9IQ57vy\
BZqt57R7HzqfbHw7/iqgiRInxUWUnjNsmOuEUpJONhfrIZOsakBMo1z//V8qU7GXtZW61r\
gx7SaS4EAt3Oa41z+Z6rbPo/nqLWucdrQXE8AalODX6bg5rjZI2OBAaB7t4czb7t3t/PSU\
qHbA7TbMRImf6v0laryi0BlwO4HaTwQR++1yq7nGsCBtaSeADLh+99N30E2idGRjsUEA7t\
nqH842Poxp566qqrvUBRcyvJxvobQyxh+kx4k6/yHN/m3qklkNyJVEUAFJJASY/Lokmpf/\
/W8qBIMjQpJJJKUDE+aJZW+lxrtY5lzSQ9jxESBt0+luUG88gaHU/BJzi4lx1J5KSlbiSS\
TJPPmmSSSUpJImTKSSn/2f/tDOZQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAA\
AAAAAAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAQBIAAAAAQABOEJJTQQmAAAAAAAOAAAA\
AAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAA\
AACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklN\
A/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWg\
AAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP//////////////\
//////////////8D6AAAAAD/////////////////////////////A+gAAAAA//////////\
///////////////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQI\
AAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0kAAA\
AGAAAAAAAAAAAAAAEEAAAAdAAAAAoAVQBuAHQAaQB0AGwAZQBkAC0AMQAAAAEAAAAAAAAA\
AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAdAAAAQQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAA\
AAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAA\
AAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG\
9uZwAAAQQAAAAAUmdodGxvbmcAAAB0AAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAA\
AAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAA\
ZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVl\
bnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdD\
EAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAEE\
AAAAAFJnaHRsb25nAAAAdAAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAA\
AAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hU\
TUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2\
xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZl\
cnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG\
9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25n\
AAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAAD\
hCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAzhCSU0EDAAAAAAHFAAAAAEAAAA5AAAA\
gAAAAKwAAFYAAAAG+AAYAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9iZV9DTQAC/+\
4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwM\
DAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODh\
QRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAgAA5\
AwEiAAIRAQMRAf/dAAQABP/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQ\
UBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEF\
QVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0l\
XiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cR\
AAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1\
MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1\
VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A8scPTiHNdubJjWJ/NMj6Si\
InXjupVMFjtpe2sQ47nTHtBdt9od7nxsYopKUYnTjskkpOGm5oIZMCddfwSUxSUmOawncw\
PlpAknQkaP8AYW+5qikpSn6z/Bv+Y3/yKgkkp//Q8qSSUq7AzdLGv3NLRun2z+e2C33pKY\
o9lezGqgz6hc4nsI9u1CrsfW/eyA4AjUA8jb+crLmPfiVCTDSSRzAPePknRFiXkgnbzaoc\
QCBGogyAfPT91MkkmpXDSQSPzRJ+/b/FMkixifv2f5rf/JpKf//R8qSRMZ9FdzX5FZuqH0\
qw7YTp/pNr9vu/kpWtZTe5rHtvZW6G2NDtjwD9INsbXZsd/LYkpLiUMc5rnkO0JDAZOhH0\
/wCSrwAOpdBlVsNzbbb7i0Mc4y1jBDRuO4ta381jfzVfx8Z1zuQ1kwXH+Cs4RUL7sOQ+pz\
s9lYLXhvMguGk/uqmui6l0+qrp17xq5gaQPi9rZP3rBDmFpr0DZLg8iXaA7Wf1XOUWUVLz\
1X4z6fJGkkko17//0vKkklOHsLLHM9p1bIgOAO3+19FJTpYOOWUiR7n+4j/qVqVUMNGri5\
8y2odihtZVVWLrjDXt3gHQgHXVv0t/8hWegt/bnUf2fjg1Au91zpIbU2XXZG32O9lbd/oq\
9HgiAL6NQ8UiSA1H49lrnNcC51gId8FzzWOedrPcSYa0DU/JdPnvbZjZP2Bhpa5kUhzt1n\
pg+71H/nZF1X856f6P/BUsXMj02s3Ne4XB2kCG7Y+lv3b9+7/g1DzO8RXRlwbHXqwgxPY6\
JJJKuzP/0/Kk7XubO0kSIPwKZO2eJ2g6OOsf2oSU9P0a7K6hQH3bXOqft9Yj3ERu/wA5aN\
Nd/ScnHzcHaH4rtzGH6MH+drsbO59eQz9Hcue6DlZTTZiUOaGkmzefH2s7/vLQtfscGl4t\
d+cQZ1V3DK4C9emrVyCpGkt5xvVc7Fa6ugmWVvMuYD/gvUH876f0K7v8Iz+c965vqRqOZZ\
6bdsGHeG4fSLVtW27aH3lrjXVG/bE6kN0/zlz91nq2vsjbvcXRzEnhM5mQoR+q7BE2ZFgk\
kkqrYf/U8sqrNtja2loLyGgvcGtE/vPeWsY3+sltGwEOk/nDw8P6yTbHNDxyXt2yZkAFv0\
df5OxJwAY0wQ4yZPBHA2/9JJTewXYzMp+M15dXY6Kry3adPoepXL9m+f7D1dtDa3fonF7B\
pvIgbvBqyMRp9VtkS1hlxH5uoY17v5O97FoSePDsrOAnh8iw5Rr5o83Oc2h2I0D9IQ57vy\
BZqt57R7HzqfbHw7/iqgiRInxUWUnjNsmOuEUpJONhfrIZOsakBMo1z//V8qU7GXtZW61r\
gx7SaS4EAt3Oa41z+Z6rbPo/nqLWucdrQXE8AalODX6bg5rjZI2OBAaB7t4czb7t3t/PSU\
qHbA7TbMRImf6v0laryi0BlwO4HaTwQR++1yq7nGsCBtaSeADLh+99N30E2idGRjsUEA7t\
nqH842Poxp566qqrvUBRcyvJxvobQyxh+kx4k6/yHN/m3qklkNyJVEUAFJJASY/Lokmpf/\
/W8qBIMjQpJJJKUDE+aJZW+lxrtY5lzSQ9jxESBt0+luUG88gaHU/BJzi4lx1J5KSlbiSS\
TJPPmmSSSUpJImTKSSn/2ThCSU0EIQAAAAAAeQAAAAEBAAAAGABBAGQAbwBiAGUAIABQAG\
gAbwB0AG8AcwBoAG8AcAAgAEUAbABlAG0AZQBuAHQAcwAAABwAQQBkAG8AYgBlACAAUABo\
AG8AdABvAHMAaABvAHAAIABFAGwAZQBtAGUAbgB0AHMAIAAyAC4AMAAAAAEAOEJJTQQGAA\
AAAAAHAAYBAQABAQD/4RPLaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNr\
ZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pgo8P2Fkb2\
JlLXhhcC1maWx0ZXJzIGVzYz0iQ1IiPz4KPHg6eGFwbWV0YSB4bWxuczp4PSdhZG9iZTpu\
czptZXRhLycgeDp4YXB0az0nWE1QIHRvb2xraXQgMi44LjItMzMsIGZyYW1ld29yayAxLj\
UnPgo8cmRmOlJERiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt\
cmRmLXN5bnRheC1ucyMnIHhtbG5zOmlYPSdodHRwOi8vbnMuYWRvYmUuY29tL2lYLzEuMC\
8nPgoKIDxyZGY6RGVzY3JpcHRpb24gYWJvdXQ9J3V1aWQ6ZjY0MmViOTctN2NiMS0xMWRl\
LTk2ZjMtY2Y3NjI0NGRkOGYyJwogIHhtbG5zOnBkZj0naHR0cDovL25zLmFkb2JlLmNvbS\
9wZGYvMS4zLyc+CiAgPCEtLSBwZGY6Q3JlYXRvciBpcyBhbGlhc2VkIC0tPgogPC9yZGY6\
RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiBhYm91dD0ndXVpZDpmNjQyZWI5Ny\
03Y2IxLTExZGUtOTZmMy1jZjc2MjQ0ZGQ4ZjInCiAgeG1sbnM6eGFwPSdodHRwOi8vbnMu\
YWRvYmUuY29tL3hhcC8xLjAvJz4KICA8eGFwOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2\
hvcCBFbGVtZW50cyBmb3IgV2luZG93cywgdmVyc2lvbiAyLjA8L3hhcDpDcmVhdG9yVG9v\
bD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gYWJvdXQ9J3V1aW\
Q6ZjY0MmViOTctN2NiMS0xMWRlLTk2ZjMtY2Y3NjI0NGRkOGYyJwogIHhtbG5zOnhhcE1N\
PSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vJz4KICA8eGFwTU06RG9jdW1lbn\
RJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6ZjY0MmViOTItN2NiMS0xMWRlLTk2ZjMtY2Y3\
NjI0NGRkOGYyPC94YXBNTTpEb2N1bWVudElEPgogPC9yZGY6RGVzY3JpcHRpb24+Cgo8L3\
JkZjpSREY+CjwveDp4YXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC\
AgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0ndyc/Pv/uACFBZG9iZQBk\
QAAAAAEDABADAgMGAAAAAAAAAAAAAAAA/9sAhAACAgICAgICAgICAwICAgMEAwICAwQFBA\
QEBAQFBgUFBQUFBQYGBwcIBwcGCQkKCgkJDAwMDAwMDAwMDAwMDAwMAQMDAwUEBQkGBgkN\
CgkKDQ8ODg4ODw8MDAwMDA8PDAwMDAwMDwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA\
z/wgARCAEEAHQDAREAAhEBAxEB/8QAygABAAEFAQEBAQAAAAAAAAAAAAUBAwQGBwgCCQoB\
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\
KDABJIUUUdg4/4j//Z"


#if 'SE_SIGNED' in os.environ:
#       exit()

global isWin, isMac

isWin=False
isMac=True
page4=None
testingmode=False

ID_CTRL_1=512
ID_CTRL_2=513
ID_CTRL_3=514
ID_CTRL_4=515
ID_CTRL_5=516
ID_AGREE=517

val1 = 0
val2 = 0
val3 = 0
val4 = 0
val5 = 0
val6 = 0

if len(str.split(platform.platform(), "Windows")) > 1:
	isWin=True
	isMac=False

#----------------------------------------------------------------------

def makePageTitle(wizPg, title):
    sizer = wx.BoxSizer(wx.VERTICAL)
    wizPg.SetSizer(sizer)
    if title != "Page 1":
     title = wx.StaticText(wizPg, -1, title)
     title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
     sizer.Add(title, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
     sizer.Add(wx.StaticLine(wizPg, -1), 0, wx.EXPAND|wx.ALL, 5)
    return sizer

#----------------------------------------------------------------------

pulser=None

class TitledPage(wiz.WizardPageSimple):
    def __init__(self, parent, title):
      wiz.WizardPageSimple.__init__(self, parent)
      self.sizer = makePageTitle(self, title)

def TimerHandler(evt):
	global pulser
	pulser=evt.GetEventObject().GetOwner().gauge
	evt.GetEventObject().GetOwner().gauge.Pulse()

global curpage, wizard, superreport, grandsizer
curpage=0
wizard=None
superreport=None
tmpfileloc=""
doneprint=False

whichtime=False

def PollResults(ev):
	global superreport, wizard, ID_M_MSG,isMac,tmpfileloc, doneprint, grandsizer, page4, whichtime, pulser
	if isMac==True and doneprint == False:
		#print "very very good"
		#print superreport.poll()
		if superreport.poll() != False:
			#print "very very very good"
			if doneprint==False:
				#print "very very very very good"
				wx.FindWindowById(ID_M_MSG).SetLabel("\nSubmitting Beta request...")
				wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)
				if whichtime == True:
	#                               #grandsizer.RecalcSizes()
	#                               #print superreport.stdout
	#				#print "TODO: GET POLL RESULT"
	#				#doneprint = True
					report=superreport.stdout.read()
					procReq(report)
					doneprint = True
				whichtime = True
	elif doneprint == False:
		if superreport.poll()==0:
			if doneprint==False:
				wx.FindWindowById(ID_M_MSG).SetLabel("\nSubmitting Beta request...")
				wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)
				if whichtime == True:
					if os.path.exists(tmpfileloc):
						f = open(tmpfileloc, "r")
						report = f.read()
						f.close()
						os.unlink(tmpfileloc)
						procReq(report)
						doneprint = True
				whichtime=True
	else:
				#print "Doneprint is true"
				pass


def procReq(report):
	global val1, val2, val3, val4, val5
	global superreport, wizard, ID_M_MSG,isMac,tmpfileloc, doneprint, grandsizer, page4, whichtime, pulser
	try:
		u = urllib2.urlopen('http://www.philippeterson.com/betas.php',data=urllib.urlencode({'val1': val1, 'val2': val2, 'val3': val3, 'val4': val4, 'val5': val5, 'comprx': base64.b64encode(report)  }))
		mq=u.code
		mj=u.read()
		if mj == "CLOSED":
			wx.FindWindowById(ID_M_MSG).SetLabel("\nBeta signup has been closed.")
			wx.FindWindowById(ID_M_MSG).SetForegroundColour("blue")
			pulser.Show(False)
			wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)
		elif mj == "ACCEPT":
			docancelwarning=False
			wx.MessageBox("You have successfully signed up for the Starry Expanse Beta selection process.\n\nWe will notify you by e-mail if and when you have been accepted as a tester.", "Signup Process Successful!")
			wx.FindWindowById(ID_M_MSG).SetLabel("\nSignup successful!")
			wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)
			pulser.Show(False)
			wx.FindWindowById(wx.ID_CANCEL).Disable()
			wx.FindWindowById(wx.ID_FORWARD).Enable()
		elif mq == 404:
			wx.FindWindowById(ID_M_MSG).SetLabel("\nError: Server no longer available at this address.\nBeta may be closed.  Please visit starryexpanse.wordpress.com for details.")
			wx.FindWindowById(ID_M_MSG).SetForegroundColour("red")
			pulser.Show(False)
			wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)
		elif mq == 200 and mj[:4] == "ERR:":
			party=mj[4:]
			jeux={'0':"the email address you entered was invalid.",'1':"the first name you entered was invalid.",'2':"the last name you entered was invalid.",'3':"your blurb must be between 40 and 3000 characters.","SERR":"a server error occurred.  The error has been logged and reported."}
			wx.FindWindowById(ID_M_MSG).SetLabel("\nThere was an error processing your application:\n"+jeux[party])
			wx.FindWindowById(ID_M_MSG).SetForegroundColour("red")
			wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)
			wx.FindWindowById(wx.ID_BACKWARD).Enable()
			pulser.Show(False)
		else:
			wx.FindWindowById(ID_M_MSG).SetLabel("\nUnknown error.  Please notify us via starryexpanse.wordpress.com.")
			wx.FindWindowById(ID_M_MSG).SetForegroundColour("red")
			pulser.Show(False)
			wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)
	except IOError:
		wx.FindWindowById(ID_M_MSG).SetLabel("\nError: Could not make connection to server.\nPlease close the program and try again.")
		wx.FindWindowById(ID_M_MSG).SetForegroundColour("red")
		pulser.Show(False)
		wx.FindWindowById(ID_M_MSG).Center(wx.HORIZONTAL)


def GetResults():
	global wizard,superreport,isMac,tmpfileloc
	if isMac==True:
		superreport=subprocess.Popen(["system_profiler", "-detailLevel", "full", "SPHardwareDataType", "SPNetworkDataType", "SPSoftwareDataType", "SPAudioDataType", "SPDisplaysDataType", "SPMemoryDataType", "SPNetworkLocationDataType"], stdout=subprocess.PIPE)
	else:
		f = tempfile.NamedTemporaryFile()
		tmpfileloc=f.name+".txt"
		f.close()
		#print "calling command: ", "dxdiag", "/t "+tmpfileloc
		superreport=subprocess.Popen(["dxdiag", "/t", tmpfileloc])

	wizard.Bind(wx.EVT_IDLE, PollResults)
	#wx.Bind()
	#f = tempfile.NamedTemporaryFile()
	#tmpfileloc=f.name
	#f.close()
	#os.system("system_profiler -detailLevel full SPHardwareDataType SPNetworkDataType SPSoftwareDataType SPAudioDataType SPDisplaysDataType SPMemoryDataType SPNetworkLocationDataType > "+tmpfileloc)
	#f = open(tmpfileloc, "r")
	#report = f.read()
	#f.close()
	#os.unlink(tmpfileloc)
	#print report

def OnWizPageChanged(evt):
	global curpage, ID_AGREE
	if evt.GetDirection():
	    curpage += 1
	else:
	    curpage -= 1

	if curpage == 3:
		wx.FindWindowById(wx.ID_FORWARD).Disable()
		wx.FindWindowById(ID_AGREE).SetValue(False)
	else:
		wx.FindWindowById(wx.ID_FORWARD).Enable()
	
	if curpage == 4:
		wx.FindWindowById(wx.ID_FORWARD).Disable()
		wx.FindWindowById(wx.ID_BACKWARD).Disable()
		wx.CallLater(1, GetResults)
		
	
	#page = evt.GetPage()
	#self.log.write("OnWizPageChanged: %s, %s\n" % (dir, page.__class__))

def togFoBac(a):
	if a.IsChecked() == True:
		wx.FindWindowById(wx.ID_FORWARD).Enable()
	else:
		wx.FindWindowById(wx.ID_FORWARD).Disable()

def GetError(pag):
	global ID_CTRL_1, ID_CTRL_2, ID_CTRL_3, ID_CTRL_4, ID_CTRL_5, val1, val2, val3, val4, val5, val6
	val1=wx.FindWindowById(ID_CTRL_1).GetValue()
	val2=wx.FindWindowById(ID_CTRL_2).GetValue()
	val3=wx.FindWindowById(ID_CTRL_3).GetLabel()
	val4=wx.FindWindowById(ID_CTRL_4).GetValue()
	val5=wx.FindWindowById(ID_CTRL_5).GetValue()
	retarr=[]
	if not re.match("^[\w\s\-]{2,20}$", val1) or re.search("\d+", val1):
		retarr.append(" enter a valid first name.")
	if not re.match("^[\w\s\-]{2,20}$", val2) or re.search("\d+", val2):
		retarr.append(" enter a valid last name.")
	if not re.match("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$", val4):
		retarr.append(" enter a valid e-mail address.")
	if len(val5) < 40:
		retarr.append(" tell us enough about yourself. :-)")
	if len(val5) > 3000:
		retarr.append(" tell us just a little bit less about yourself. :-P")
	return retarr


def OnWizPageChanging(evt):
	global curpage, testingmode
	page = evt.GetPage()
	if curpage==2 and evt.GetDirection():
		errs=GetError(page)
		if len(errs) == 1 and testingmode == False:
			wx.MessageBox("Please"+errs[0], "Alert")
			evt.Veto()
		elif len(errs) > 0 and testingmode == False:
			stra="\n   - You did not".join(errs)
			wx.MessageBox("We could not continue for several reasons:\n   - You did not"+stra, "Alert")
			evt.Veto()
		


def OnWizFinished(evt):
	os.environ['SE_SIGNED'] = 'true'
	

def DoSimp():
	# Create the wizard and the pages
	#imgj=wx.Image("side.jpg", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
	global imgcode, ID_CTRL_1, ID_CTRL_2, ID_CTRL_3, ID_CTRL_4, ID_CTRL_5
	data=base64.b64decode(imgcode)
	# convert to a data stream
	stream = cStringIO.StringIO(data)
	# convert to a bitmap
	imgj = wx.BitmapFromImage( wx.ImageFromStream( stream ))

	jowid=355
	jomarg=12
	global wizard, page4, ID_AGREE
	wizard = wiz.Wizard(None, -1, "Starry Expanse Beta Signup", imgj)
	wizard.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, OnWizPageChanged)
	wizard.Bind(wiz.EVT_WIZARD_PAGE_CHANGING, OnWizPageChanging)
	page1 = TitledPage(wizard, "Page 1")
	page2 = TitledPage(wizard, "Step 1: General Information")
	page3 = TitledPage(wizard, "Step 2: User Agreement")
	page4 = TitledPage(wizard, "Step 3: Data Collection")
	#self.page1 = page1
	
	countries=("Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Central African Republic", "Chad", "Chile", "China", "Colombia", "Comoros", "Congo (Brazzaville)", "D.R. of the Congo", "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Fiji", "Finland", "France", "Gabon", "Gambia", "The", "Georgia", "Germany", "Ghana", "Greece", "Grenada", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "North Korea", "South Korea", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Mauritania", "Mauritius", "Mexico", "Micronesia", "Moldova", "Monaco", "Mongolia", "Montenegro", "Morocco", "Mozambique", "Myanmar (Burma)", "Namibia", "Nauru", "Nepal", "Netherlands", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Poland", "Portugal", "Qatar", "Romania", "Russia", "Rwanda", "Saint Kitts and Nevis", "Saint Lucia", "Saint Vincent", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "Spain", "Sri Lanka", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Western Sahara", "Yemen", "Zambia", "Zimbabwe")
	
	page2.countrychoice=wx.Choice(page2, ID_CTRL_3, choices=countries)
	page2.countrychoice.SetSelection(185)
	
	page2.grdlst=wx.FlexGridSizer(5,2,8,4)
	page2.grdlst.Add(wx.StaticText(page2, wx.ID_ANY, label="First Name:"), 0, wx.ALIGN_RIGHT | wx.ALL, 3)
	page2.grdlst.Add(wx.TextCtrl(page2, ID_CTRL_1), 0, wx.EXPAND | wx.RIGHT, 10)
	wx.FindWindowById(ID_CTRL_1).SetFocus()
	page2.grdlst.Add(wx.StaticText(page2, wx.ID_ANY, label="Last Name:"), 0, wx.ALIGN_RIGHT | wx.ALL, 3)
	page2.grdlst.Add(wx.TextCtrl(page2, ID_CTRL_2), 0, wx.EXPAND | wx.RIGHT, 10)
	page2.grdlst.Add(wx.StaticText(page2, wx.ID_ANY, label="Country of Residence:"), 0, wx.ALIGN_RIGHT | wx.ALL, 3)
	page2.grdlst.Add(page2.countrychoice, 0, wx.RIGHT | wx.EXPAND, 10)
	page2.grdlst.Add(wx.StaticText(page2, wx.ID_ANY, label="E-mail Address:"), 0, wx.ALIGN_RIGHT | wx.ALL, 3)
	page2.grdlst.Add(wx.TextCtrl(page2, ID_CTRL_4), 0, wx.EXPAND | wx.RIGHT, 10)
	page2.grdlst.Add(wx.StaticText(page2, wx.ID_ANY, label="Tell us about yourself\n(and any beta-testing\nexperience you've had):", style=wx.ALIGN_RIGHT), 1, wx.ALIGN_RIGHT | wx.ALL, 3)
	page2.grdlst.Add(wx.TextCtrl(page2, ID_CTRL_5, style=wx.TE_MULTILINE), 1, wx.EXPAND | wx.RIGHT, 10)
	page2.grdlst.AddGrowableCol(1)
	page2.grdlst.AddGrowableRow(4)
	page2.sizer.Add(page2.grdlst, 1, wx.ALIGN_RIGHT | wx.EXPAND, 0)


	page3.grdlst=wx.FlexGridSizer(3,1,8,4)
	page3.grdlst.Add(wx.StaticText(page3, wx.ID_ANY, label="To participate in the Starry Expanse Beta round, you must agree to the\nterms and conditions set forth below."), 0, wx.ALIGN_LEFT | wx.ALL, 3)
	wt=rt.RichTextCtrl(page3, wx.ID_ANY, value="")
	wt.BeginBold()
	wt.WriteText("""Please remember that this project is not necessarily Cyan-sanctioned. In fact, we are probably infringing on some copyrights.

If Cyan finds out about the Starry Expanse Project (and disapproves), chances are we will have to stop. So please, please don't take us public before we're ready.""")
	wt.EndBold()
	wt.WriteText("""

     1. You will not reveal the status of your acceptance into the beta test, nor will you reveal any details regarding materials to be tested.
     2. You will not discuss or reveal any details related to the materials to be tested with anybody outside the beta test. This includes individuals who applied to be a beta tester but were denied.
     3. You will not discuss or reveal any details related to the materials to be tested in any public place, including but not limited to public forums, chat rooms, online games.

The Starry Expanse Team reserves the right to revoke your status as a beta tester if you are found to be in violation of any of the above terms.""")
	page3.grdlst.Add(wt, 0, wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 3)
	mkd=wx.CheckBox(page3, ID_AGREE, label="I agree to these conditions")
	mkd.Bind(wx.EVT_CHECKBOX, togFoBac)
	page3.grdlst.Add(mkd, 0, wx.ALIGN_BOTTOM | wx.ALIGN_LEFT | wx.ALL, 3)
	page3.grdlst.AddGrowableRow(1)
	page3.sizer.Add(page3.grdlst, 1, wx.ALIGN_RIGHT | wx.EXPAND, 0)
	
	
	thestat=wx.StaticText(page1, -1, """Welcome!

This wizard will guide you through the signup process for the \
Starry Expanse Beta.  Please keep in mind that not all applicants \
will be selected, and that a diagnostic profile of your system will \
be sent as part of your application.""")
	thestat.Wrap(jowid)


	page1.sizer.Add(thestat, 0, wx.LEFT|wx.RIGHT, jomarg)


	if isMac == True:

	  sswarning=wx.StaticText(page1, -1, """
ATTENTION MAC USERS!

You must have some sort of URU installation set up and working in order to beta \
test.  Whether it be a third-party hack such as 'Crossover Games' \
or an accessible installation of Windows, be aware that we do NOT \
provide any kind of support for issues related to such improvised \
systems for running URU.""")

	  sswarning2=wx.StaticText(page1, -1, """
That being said, we find it appropriate to inform you that two of \
our three core developers develop for URU on Mac themselves.""")

	  sswarning.SetForegroundColour("red")
	  page1.sizer.Add(sswarning, 0, wx.LEFT|wx.RIGHT, jomarg)
	  page1.sizer.Add(sswarning2, 0, wx.LEFT|wx.RIGHT, jomarg)
	  sswarning.Wrap(jowid)
	  sswarning2.Wrap(jowid)


	wizard.FitToPage(page1)
	global grandsizer
	grandsizer=page4.sizer
	page4.sizer.Add(wx.StaticText(page4, ID_M_MSG, "\nGenerating diagnostic system report..."), 0, wx.ALIGN_CENTER | wx.ALL, 20)
	page4.gauge=wx.Gauge(page4, -1, 50, (110, 95), (250, 25))
	page4.sizer.Add(page4.gauge, 0, wx.ALIGN_CENTER, 0)
	page4.Bind(wx.EVT_TIMER, TimerHandler)
	page4.timer = wx.Timer(page4)
	page4.timer.Start(50)
	


	# Use the convenience Chain function to connect the pages
	wiz.WizardPageSimple_Chain(page1, page2)
	wiz.WizardPageSimple_Chain(page2, page3)
	#print wx.FindWindowById(wx.ID_FORWARD).SetFocusFromKbd()
	wiz.WizardPageSimple_Chain(page3, page4)

	wizard.GetPageAreaSizer().Add(page1)
	if wizard.RunWizard(page1):
	    wizard.Destroy()
	else:
	    global docancelwarning
	    if docancelwarning == True:
	     wx.MessageBox("The signup process was canceled.", "Signup Canceled")
	    wizard.Destroy()

q=wx.PySimpleApp()

DoSimp()

q.MainLoop()
