var map;
var map_geocoder;
var map_marker;
var map_placeCollector;
var map_countryCode;
var map_latitude;
var map_longitude;
var map_noMarker = 0;

var map_countries = {
'Afghanistan':['AF',29.377478,60.478443,38.483425,74.879433,33.93911,67.709953],
'Albania':['AL',39.6444968,19.26276,42.66502,21.0578283,41.153332,20.168331],
'Algeria':['DZ',18.9592,-8.6753,37.0909,11.966,28.033886,1.659626],
'Andorra':['AD',42.4287631,1.4087181,42.6548685,1.7864091,42.546245,1.601554],
'Angola':['AO',-18.0421,11.6802,-4.3726,24.0821,-11.202692,17.873887],
'Argentina':['AR',-55.0428713,-73.5719396,-21.7731441,-53.6394283,-38.416097,-63.616672],
'Armenia':['AM',38.830521,43.44978,41.301838,46.630035,40.069099,45.038189],
'Aruba':['AW',12.4118449,-70.0638463,12.6234254,-69.8655679,12.52111,-69.968338],
'Australia':['AU',-44.7779,110.874,-9.2106,159.2029,-25.274398,133.775136],
'Austria':['AT',46.372299,9.530787,49.020712,17.160749,47.516231,14.550072],
'Azerbaijan':['AZ',38.397045,44.771915,41.90564,50.607845,40.143105,47.576927],
'Bahamas':['BS',24.9777537,-77.5546904,25.0917018,-77.2555002,25.03428,-77.39628],
'Bahrain':['BH',25.54224,50.385849,26.282597,50.828693,25.930414,50.637772],
'Bangladesh':['BD',20.585249,88.028336,26.631954,92.67366,23.684994,90.356331],
'Barbados':['BB',13.039844,-59.648922,13.327257,-59.420376,13.193887,-59.543198],
'Belarus':['BY',51.2660243,23.179217,56.1717339,32.7942,53.709807,27.953389],
'Belgium':['BE',49.4972655,2.5456398,51.5050807,6.4079065,50.503887,4.469936],
'Belize':['BZ',15.8874699,-89.2297928,18.4949668,-87.4791218,17.189877,-88.49765],
'Benin':['BJ',6.2257,0.7746,12.4265,3.8517,9.30769,2.315834],
'Bhutan':['BT',26.707632,88.75972,28.323778,92.125198,27.514162,90.433601],
'Bolivia':['BO',-22.896133,-69.640762,-9.680567,-57.458096,-16.290154,-63.588653],
'Bosnia and Herzegovina':['BA',42.5622174,15.7217827,45.2766964,19.6228809,43.915886,17.679076],
'Botswana':['BW',-26.907246,19.999535,-17.780813,29.360781,-22.328474,24.684866],
'Brazil':['BR',-33.751314,-73.991482,5.271921,-32.378187,-14.235004,-51.92528],
'Brunei Darussalam':['BN',4.003095,114.071457,5.047173,115.359444,4.535277,114.727669],
'Bulgaria':['BG',41.2358638,22.3559007,44.2145999,28.6075897,42.733883,25.48583],
'Burkina Faso':['BF',9.4011,-5.5189,15.0826,2.4054,12.238333,-1.561593],
'Burma':['MM',9.60036,92.189278,28.543259,101.176781,21.913965,95.956223],
'Burundi':['BI',-4.4646,28.9931,-2.3101,30.8477,-3.373056,29.918886],
'Cambodia':['KH',9.283256,102.340004,14.686404,107.627716,12.565679,104.990963],
'Cameroon':['CM',1.6502,8.495,12.8286,16.1939,7.369722,12.354722],
'Canada - Alberta':['CAAB',48.996964,-120.001814,60.000435,-110.000445,53.9332706,-116.5765035],
'Canada - British Columbia':['CABC',48.22493,-139.060971,60.000078,-114.054252,53.7266683,-127.6476206],
'Canada - Manitoba':['CAMB',48.998721,-102.009382,60.000283,-88.989166,53.7608608,-98.8138763],
'Canada - New Brunswick':['CANB',44.397161,-69.052647,48.21148,-63.681007,46.5653163,-66.4619164],
'Canada - Newfoundland':['CANL',44.870893,-67.816963,61.185156,-51.053519,48.4027254,-54.6723569],
'Canada - Northwest Territories':['CANT',59.99862,-141.537991,85.294574,-101.999887,72.5926783,-121.0657788],
'Canada - Nova Scotia':['CANS',42.96486,-69.708338,47.316305,-57.841492,44.6922613,-62.6571885],
'Canada - Nunavut':['CANU',51.647999,-120.37248,83.110619,-61.134811,62.6384669,-97.2635952],
'Canada - Ontario':['CAON',41.676329,-95.155919,56.852398,-74.339383,51.253775,-85.3232139],
'Canada - Prince Edward Island':['CAPE',45.884301,-64.524359,47.149166,-61.34093,46.2190582,-62.9158492],
'Canada - Quebec':['CAQC',44.991359,-79.751655,62.72922,-57.100241,52.9399159,-73.5491361],
'Canada - Saskatchewan':['CASK',48.998553,-110.007172,60.012537,-101.362577,52.9399159,-106.4508639],
'Canada - Yukon Territory':['CAYT',59.998851,-141.002851,69.64666,-123.817581,64.2823274,-135],
'Cape Verde':['CV',14.8022,-25.3587,17.1972,-22.6694,16.002082,-24.013197],
'Central African Republic':['CF',2.2239,14.4208,11.0076,27.4634,6.611111,20.939444],
'Chad':['TD',7.4411,13.4758,23.4437,24.0016,15.454166,18.732207],
'Chile':['CL',-55.9797211,-75.7350093,-17.5010616,-66.3920532,-35.675147,-71.542969],
'China':['CN',18.161264,73.557701,53.560856,134.773926,35.86166,104.195397],
'Colombia':['CO',-4.230484,-79.047226,12.4633084,-66.869835,4.570868,-74.297333],
'Comoros':['KM',-12.413821,43.21579,-11.362382,44.538223,-11.875001,43.872219],
'Congo':['CG',-5.0283,11.205,3.7031,18.6515,-0.228021,15.827659],
'Costa Rica':['CR',8.0385132,-85.9505005,11.218689,-82.5535889,9.748917,-83.753428],
'Croatia':['HR',42.3776665,13.4898176,46.5549896,19.4480171,45.1,15.2],
'Cuba':['CU',19.8262501,-84.9520796,23.2770824,-74.1337816,21.521757,-77.781167],
'Cyprus':['CY',34.563511,32.273087,35.701538,34.597919,35.126413,33.429859],
'Czech Republic':['CZ',48.5515315,12.0909912,51.055648,18.8599103,49.817492,15.472962],
"Côte d'Ivoire":['CI',4.357067,-8.599302,10.736642,-2.494897,7.539989,-5.54708],
'Democratic Republic of the Congo':['CD',-13.4557,12.2066,5.3861,31.33,-4.038333,21.758664],
'Denmark':['DK',54.5591331,8.0755852,57.7510766,15.1932158,56.26392,9.501785],
'Djibouti':['DJ',10.9099,41.7734,12.7068,43.417,11.825138,42.590275],
'Dominica':['DM',15.20169,-61.484108,15.631809,-61.244152,15.414999,-61.370976],
'Dominican Republic':['DO',17.470091,-72.003487,19.929859,-68.32,18.735693,-70.162651],
'Ecuador':['EC',-5.0112775,-92.0115585,1.6658335,-75.2196125,-1.831239,-78.183406],
'Egypt':['EG',21.7243,24.6972,31.6642,35.8115,26.820553,30.802498],
'El Salvador':['SV',13.1541384,-90.1248644,14.451372,-87.6815795,13.794185,-88.89653],
'Equatorial Guinea':['GQ',-1.4599,5.6024,3.786,11.3357,1.650801,10.267895],
'Eritrea':['ER',12.3596,36.4388,18.0031,43.1486,15.179384,39.782334],
'Estonia':['EE',57.5093155,21.7643127,59.8220177,28.2100048,58.595272,25.013607],
'Ethiopia':['ET',3.402422,32.999939,14.89155,47.986179,9.145,40.489673],
'Fiji':['FJ',-20.67597,176.879303,-12.480116,-175.010437,-16.578193,179.414413],
'Finland':['FI',59.675274,19.1686845,70.0922241,31.586712,61.92411,25.748151],
'France':['FR',41.3646279,-5.1415925,51.0887708,9.5598311,46.227638,2.213749],
'Gabon':['GA',-3.9788,8.6957,2.3226,14.5023,-0.803689,11.609444],
'Gambia':['GM',13.0643,-16.8251,13.8262,-13.7978,13.443182,-15.310139],
'Georgia':['GE',41.038513,40.010239,43.584541,46.721359,42.315407,43.356892],
'Germany':['DE',47.270127,5.8663566,55.056823,15.0418536,51.165691,10.451526],
'Ghana':['GH',4.736723,-3.25542,11.173301,1.191781,7.946527,-1.023194],
'Greece':['GR',34.8020213,19.3729582,41.7485356,29.6430578,39.074208,21.824312],
'Greenland':['GL',59.777267,-73.263466,83.627419,-11.312319,71.706936,-42.604303],
'Grenada':['GD',11.992374,-61.799976,12.529215,-61.376446,12.262776,-61.604171],
'Guam':['GU',13.240598,144.619247,13.652323,144.953979,13.444304,144.793731],
'Guatemala':['GT',13.7402912,-92.2273073,17.8166367,-88.2215404,15.783471,-90.230759],
'Guinea':['GN',7.1936,-15.0863,12.6762,-7.6411,9.945587,-9.696645],
'Guinea-Bissau':['GW',10.86,-16.7175,12.6808,-13.6365,11.803749,-15.180413],
'Guyana':['GY',1.17508,-61.396271,8.557567,-56.480251,4.860416,-58.93018],
'Haiti':['HT',18.0213894,-74.478922,19.9527431,-71.6090568,18.971187,-72.285215],
'Honduras':['HN',12.982023,-89.3559879,16.5159609,-83.1497945,15.199999,-86.241905],
'Hong Kong':['HK',22.148443,113.835081,22.614177,114.502196,22.396428,114.109497],
'Hungary':['HU',45.737124,16.113387,48.585233,22.8981816,47.162494,19.503304],
'Iceland':['IS',63.286755,-24.546524,66.563774,-13.495815,64.963051,-19.020835],
'India':['IN',6.747135,67.390976,35.504211,97.403297,20.593684,78.96288],
'Indonesia':['ID',-11.00485,95.009331,5.904409,141.021805,-0.789275,113.921327],
'Iran':['IR',25.064087,44.047264,39.777222,63.317459,32.427908,53.688046],
'Iraq':['IQ',29.078844,38.795887,37.37804,48.575909,33.223191,43.679291],
'Ireland':['IE',51.4192154,-10.6195445,55.3828521,-5.9957316,53.41291,-8.24389],
'Israel':['IL',29.49334,34.268009,33.290747,35.69001,31.046051,34.851612],
'Italy':['IT',35.4928765,6.6266397,47.0924248,18.5203619,41.87194,12.56738],
'Jamaica':['JM',17.703554,-78.366638,18.526976,-76.180321,18.109581,-77.297508],
'Japan':['JP',23.9207972,122.91,45.6691047,149.120962,36.204824,138.252924],
'Jordan':['JO',29.185879,34.960011,33.367668,39.301167,30.585164,36.238414],
'Kazakhstan':['KZ',40.936329,46.491856,55.431812,87.31266,48.019573,66.923684],
'Kenya':['KE',-4.678047,33.908859,5.50573,41.899078,-0.023559,37.906193],
'Kiribati':['KI',-11.437038,169.522522,4.724479,-150.208359,-3.370417,-168.734039],
'Kosovo':['CS',41.8569794,20.0467606,43.2739105,21.8070393,42.6026359,20.902977],
'Kuwait':['KW',28.5229435,46.5536117,30.1026472,48.7779426,29.31166,47.481766],
'Kyrgyzstan':['KG',39.172844,69.276619,43.238235,80.28318,41.20438,74.766098],
'Laos':['LA',13.910021,100.093056,22.500399,107.697021,19.85627,102.495496],
'Latvia':['LV',55.6748581,20.9677296,58.0855713,28.2424104,56.879635,24.603189],
'Lebanon':['LB',33.0549366,35.103778,34.6923646,36.6230651,33.854721,35.862285],
'Lesotho':['LS',-30.6756857,27.0113074,-28.5707913,29.4558694,-29.609988,28.233608],
'Liberia':['LR',4.3531,-11.4921,8.5518,-7.3651,6.428055,-9.429499],
'Libya':['LY',19.5013,9.3817,33.1623,25.1371,26.3351,17.228331],
'Liechtenstein':['LI',47.048343,9.471812,47.270647,9.635783,47.166,9.555373],
'Lithuania':['LT',53.8966797,20.9607277,56.4503174,26.8355872,55.169438,23.881275],
'Luxembourg':['LU',49.4480355,5.7356294,50.1829445,6.53097,49.815273,6.129583],
'Macau':['MO',22.109773,113.5287132,22.217159,113.5982433,22.198745,113.543873],
'Macedonia':['MK',40.8537833,20.452518,42.3734055,23.034064,41.608635,21.745275],
'Madagascar':['MG',-25.6079,43.2249,-11.9454,50.4838,-18.766947,46.869107],
'Malawi':['MW',-17.125,32.674,-9.3689,35.9291,-13.254308,34.301525],
'Malaysia':['MY',0.855222,98.935036,7.363407,119.267502,4.210484,101.975766],
'Maldives':['MV',-0.702877,72.638756,7.107704,73.75982,3.202778,73.22068],
'Mali':['ML',10.1595,-12.2426,25.0020452,4.245,17.570692,-3.996166],
'Malta':['MT',35.810291,14.191582,36.082016,14.577627,35.937496,14.375416],
'Marshall Islands':['MH',4.574872,147.630798,14.655169,172.161987,7.131474,171.184478],
'Mauritania':['MR',14.7145,-17.0679,27.2973,-4.8291,21.00789,-10.940835],
'Mauritius':['MU',-20.525717,56.512718,-10.319254,63.500179,-20.348404,57.552152],
'Mexico':['MX',14.5319181,-118.4038571,32.718919,-86.7122178,23.634501,-102.552784],
'Micronesia':['FM',5.259845,138.052811,10.022228,163.034897,7.425554,150.550812],
'Moldova':['MD',45.4669591,26.6163547,48.4911845,30.1634188,47.411631,28.369885],
'Monaco':['MC',43.7247898,7.4091036,43.7519042,7.43948,43.750298,7.412841],
'Mongolia':['MN',41.567638,87.749664,52.154247,119.924301,46.862496,103.846656],
'Montenegro':['ME',41.85569,18.4382991,43.5520706,20.3818493,42.708678,19.37439],
'Morocco':['MA',27.6613,-13.163,35.9233,-1.0011,31.791702,-7.09262],
'Mozambique':['MZ',-26.8687,30.2207,-10.4719,40.843,-18.665695,35.529562],
'Namibia':['NA',-28.9716,11.7156,-16.9599,25.2567,-22.95764,18.49041],
'Nauru':['NR',-0.552322,166.899017,-0.504297,166.945267,-0.522778,166.931503],
'Nepal':['NP',26.356712,80.056282,30.433393,88.199326,28.394857,84.124008],
'Netherlands':['NL',50.750449,3.2976616,53.5757042,7.2276122,52.132633,5.291266],
'Netherlands Antilles':['AN',11.973197,-69.157204,18.070248,-62.943668,12.226079,-69.060087],
'New Caledonia':['NC',-22.714643,163.564667,-19.549765,172.061401,-20.904305,165.618042],
'New Zealand':['NZ',-48.3124,164.9268,-34.1118,180,-40.900557,174.885971],
'Nicaragua':['NI',10.7063236,-87.6907806,15.0279092,-82.7444687,12.865416,-85.207229],
'Niger':['NE',11.6995,0.1663,23.5183,15.9956,17.607789,8.081666],
'Nigeria':['NG',4.277144,2.668432,13.892007,14.680073,9.081999,8.675277],
'North Korea':['KP',37.597309,124.188637,43.006042,130.674866,40.339852,127.510093],
'Norway':['NO',57.9562068,4.388116,71.1969438,31.2089449,60.472024,8.468946],
'Oman':['OM',16.6027106,51.8810978,26.3880356,59.8396883,21.512583,55.923255],
'Pakistan':['PK',23.694683,60.878597,37.097012,77.840904,30.375321,69.345116],
'Palau':['PW',0.9572,125.479691,8.092919,134.723724,7.51498,134.58252],
'Palestine':['PS',29.49334,34.268009,33.290747,35.69001,31.046051,34.851612],
'Panama':['PA',7.203803,-83.0530625,9.6477309,-77.1591644,8.537981,-80.782127],
'Papua New Guinea':['PG',-11.657854,140.842865,-0.877892,159.478195,-6.314993,143.95555],
'Paraguay':['PY',-27.608738,-62.647076,-19.294041,-54.259354,-23.442503,-58.443832],
'Peru':['PE',-18.349728,-81.326744,-0.012977,-68.677986,-9.189967,-75.015152],
'Philippines':['PH',4.613441,116.931564,21.120621,126.60154,12.879721,121.774017],
'Poland':['PL',49.002202,14.122353,54.835641,24.1472013,51.919438,19.145136],
'Portugal':['PT',36.9630652,-9.5467555,42.1542048,-6.1902091,39.399872,-8.224454],
'Puerto Rico':['PR',17.83151,-67.998752,18.568,-65.168504,18.220833,-66.590149],
'Qatar':['QA',24.4714753,50.7327037,26.1845412,51.6607708,25.354826,51.183884],
'Romania':['RO',43.6204445,20.2516708,48.2647804,29.7048964,45.943161,24.96676],
'Russia':['RU',41.1868,19.643335,81.8568204,-169.6563,61.52401,105.318756],
'Rwanda':['RW',-2.840679,28.856794,-1.053481,30.895958,-1.940278,29.873888],
'Saint Kitts and Nevis':['KN',17.0941129,-62.8643565,17.4178064,-62.539796,17.357822,-62.782998],
'Saint Lucia':['LC',13.704778,-61.07415,14.103245,-60.874203,13.909444,-60.978893],
'Saint Vincent and the Grenadines':['VC',12.53017,-61.459255,13.377834,-61.11388,12.984305,-61.287228],
'Samoa':['WS',-14.063534,-172.798599,-13.432207,-171.409317,-13.759029,-172.104629],
'San Marino':['SM',43.8937645,12.4035885,43.9921297,12.5161577,43.94236,12.457777],
'Saudi Arabia':['SA',15.7285279,34.5729179,32.1543537,55.6678255,23.885942,45.079162],
'Senegal':['SN',12.307275,-17.535236,16.691633,-11.355887,14.497401,-14.452362],
'Serbia':['RS',41.8569794,18.841238,46.1938591,23.0063915,44.016521,21.005859],
'Seychelles':['SC',-10.193706,46.199203,-3.711519,56.279507,-4.679574,55.491977],
'Sierra Leone':['SL',6.9287,-13.3076,10.0004,-10.2842,8.460555,-11.779889],
'Singapore':['SG',1.1455021,103.5494673,1.4771815,104.1234466,1.352083,103.819836],
'Slovakia':['SK',47.7313888,16.833182,49.6138237,22.5662056,48.669026,19.699024],
'Slovenia':['SI',45.42151,13.3755107,46.876566,16.6104836,46.151241,14.995463],
'Solomon Islands':['SB',-12.291901,155.508621,-5.078295,168.843506,-9.64571,160.156194],
'Somalia':['SO',-1.6621,40.9921,11.9844,51.413,5.152149,46.199616],
'South Africa':['ZA',-34.8340377,16.4478312,-22.1247237,32.8922934,-30.559482,22.937506],
'South Korea':['KR',33.10611,125.086571,38.612442,131.876663,35.907757,127.766922],
'Spain':['ES',27.6377504,-18.1606948,43.7903881,4.3279851,40.463667,-3.74922],
'Sri Lanka':['LK',5.916833,79.652924,9.831354,81.881279,7.873054,80.771797],
'Sudan':['SD',3.4864,21.8389,23.1538,38.5795,12.862807,30.217636],
'Suriname':['SR',1.831145,-58.086563,6.004546,-53.977493,3.919305,-56.027783],
'Swaziland':['SZ',-27.317,30.7941,-25.7196,32.1367,-26.522503,31.465866],
'Sweden':['SE',55.1365705,10.5922629,69.0600235,24.1773101,60.128161,18.643501],
'Switzerland':['CH',45.8177919,5.955894,47.808381,10.49238,46.818188,8.227512],
'Syria':['SY',32.31068,35.615639,37.319145,42.38504,34.802075,38.996815],
'São Tomé and Príncipe':['ST',-0.014,6.4702,1.7013,7.4655,0.18636,6.613081],
'Taiwan':['TW',21.534847,119.2895508,25.4829512,122.3217773,23.69781,120.960515],
'Tajikistan':['TJ',36.674137,67.387131,41.042244,75.137222,38.861034,71.276093],
'Tanzania':['TZ',-11.745696,29.327168,-0.990736,40.443222,-6.369028,34.888822],
'Thailand':['TH',5.6125306,97.3433653,20.4651903,105.6361069,15.870032,100.992541],
'Timor-Leste':['TL',-9.494489,124.075439,-8.137424,127.345337,-8.874217,125.727539],
'Togo':['TG',6.1044,-0.1473,11.139,1.8067,8.619543,0.824782],
'Tonga':['TO',-22.345718,-176.212631,-15.842108,-173.702484,-21.178986,-175.198242],
'Trinidad and Tobago':['TT',10.0422188,-61.930593,11.3590774,-60.4926851,10.691803,-61.222503],
'Tunisia':['TN',30.2337,7.5134,37.3465,11.5848,33.886917,9.537499],
'Turkey':['TR',35.812692,25.663497,42.106239,44.818124,38.963745,35.243322],
'Turkmenistan':['TM',35.141094,52.441433,42.795551,66.684303,38.969719,59.556278],
'Tuvalu':['TV',-9.436204,176.064865,-5.641982,179.863373,-7.109535,177.64933],
'USA - Alabama':['USAL',30.144425,-88.473228,35.008029,-84.888247,32.3182314,-86.902298],
'USA - Alaska':['USAK',51.175093,172.347848,71.434357,-129.990771,63.588753,-154.4930619],
'USA - American Samoa':['USAS',-14.382478,-171.091888,-11.0497,-169.416077,-14.270972,-170.132217],
'USA - Arizona':['USAZ',31.332178,-114.816591,37.004261,-109.045152,34.0489281,-111.0937311],
'USA - Arkansas':['USAR',33.004106,-94.61771,36.499767,-89.644838,35.20105,-91.8318334],
'USA - California':['USCA',32.528832,-124.482003,42.009519,-114.131212,36.778261,-119.4179324],
'USA - Colorado':['USCO',36.992427,-109.060257,41.003445,-102.041524,39.5500507,-105.7820674],
'USA - Connecticut':['USCT',40.950918,-73.727776,42.050588,-71.786994,41.6032207,-73.087749],
'USA - Delaware':['USDE',38.451038,-75.788758,39.839007,-74.984165,38.9108325,-75.5276699],
'USA - Florida':['USFL',24.396308,-87.634643,31.001056,-79.974307,27.6648274,-81.5157535],
'USA - Georgia':['USGA',30.355644,-85.605166,35.000771,-80.742567,32.1574351,-82.907123],
'USA - Hawaii':['USHI',18.55,-178.443593,28.517269,-154.48,19.8986819,-155.6658568],
'USA - Idaho':['USID',41.987982,-117.243028,49.001121,-111.043496,44.0682019,-114.7420408],
'USA - Illinois':['USIL',36.970298,-91.51308,42.508303,-87.019935,40.6331249,-89.3985283],
'USA - Indiana':['USIN',37.771743,-88.097892,41.761368,-84.78458,40.5512165,-85.6023643],
'USA - Iowa':['USIA',40.375437,-96.639706,43.50102,-90.140061,41.8780025,-93.097702],
'USA - Kansas':['USKS',36.993083,-102.051769,40.003282,-94.588081,39.011902,-98.4842465],
'USA - Kentucky':['USKY',36.497129,-89.57151,39.147359,-81.964971,37.8393332,-84.2700179],
'USA - Louisiana':['USLA',28.855128,-94.043629,33.019544,-88.758389,31.2448234,-92.1450245],
'USA - Maine':['USME',42.917127,-71.084335,47.459687,-66.885075,45.253783,-69.4454689],
'USA - Maryland':['USMD',37.886607,-79.487651,39.723622,-74.986286,39.0457549,-76.6412712],
'USA - Massachusetts':['USMA',41.187054,-73.508143,42.887549,-69.858861,42.4072107,-71.3824374],
'USA - Michigan':['USMI',41.696088,-90.418136,48.306272,-82.122971,44.3148443,-85.6023643],
'USA - Minnesota':['USMN',43.499362,-97.239256,49.384359,-89.483385,46.729553,-94.6858998],
'USA - Mississippi':['USMS',30.146096,-91.655009,34.995968,-88.097889,32.3546679,-89.3985283],
'USA - Missouri':['USMO',35.995476,-95.774704,40.613641,-89.098843,37.9642529,-91.8318334],
'USA - Montana':['USMT',44.35821,-116.050004,49.00139,-104.039563,46.8796822,-110.3625658],
'USA - Nebraska':['USNE',39.999719,-104.053515,43.001708,-95.30829,41.4925374,-99.9018131],
'USA - Nevada':['USNV',35.002086,-120.00574,42.002208,-114.039649,38.8026097,-116.419389],
'USA - New Hampshire':['USNH',42.696978,-72.557247,45.305476,-70.575095,43.1938516,-71.5723953],
'USA - New Jersey':['USNJ',38.788657,-75.563587,41.357424,-73.88506,40.0583238,-74.4056612],
'USA - New Mexico':['USNM',31.332172,-109.050173,37.000294,-103.002065,34.9727305,-105.0323635],
'USA - New York':['USNY',40.477383,-79.76259,45.015851,-71.777492,43.2994285,-74.2179326],
'USA - North Carolina':['USNC',33.752879,-84.32187,36.588118,-75.40012,35.7595731,-79.0192997],
'USA - North Dakota':['USND',45.935021,-104.048915,49.000693,-96.554508,47.5514926,-101.0020119],
'USA - Ohio':['USOH',38.403186,-84.820204,42.327133,-80.518626,40.4172871,-82.907123],
'USA - Oklahoma':['USOK',33.615765,-103.002648,37.002328,-94.431332,35.0077519,-97.092877],
'USA - Oregon':['USOR',41.991795,-124.703541,46.2991,-116.463262,43.8041334,-120.5542012],
'USA - Pennsylvania':['USPA',39.719801,-80.519851,42.516072,-74.689517,41.2033216,-77.1945247],
'USA - Rhode Island':['USRI',41.095834,-71.907259,42.018808,-71.088567,41.5800945,-71.4774291],
'USA - South Carolina':['USSC',32.04683,-83.353955,35.215449,-78.499301,33.836081,-81.1637245],
'USA - South Dakota':['USSD',42.479636,-104.05774,45.945379,-96.43659,43.9695148,-99.9018131],
'USA - Tennessee':['USTN',34.982924,-90.310298,36.678119,-81.646901,35.5174913,-86.5804473],
'USA - Texas':['USTX',25.837377,-106.645646,36.500695,-93.508131,31.9685988,-99.9018131],
'USA - Utah':['USUT',36.997905,-114.052999,42.001619,-109.041059,39.3209801,-111.0937311],
'USA - Vermont':['USVT',42.726853,-73.437741,45.01666,-71.464556,44.5588028,-72.5778415],
'USA - Virginia':['USVA',36.540739,-83.675413,39.466012,-75.16644,37.4315734,-78.6568942],
'USA - Washington':['USWA',45.543542,-124.848975,49.002493,-116.915989,47.7510741,-120.7401386],
'USA - Washington D.C.':['USDC',38.791514,-77.119901,38.99511,-76.909396,38.892091,-77.024055],
'USA - West Virginia':['USWV',37.201483,-82.644739,40.638802,-77.718935,38.5976262,-80.4549026],
'USA - Wisconsin':['USWI',42.491889,-92.889433,47.309715,-86.24955,43.7844397,-88.7878678],
'USA - Wyoming':['USWY',40.994746,-111.056888,45.005904,-104.052236,43.0759678,-107.2902839],
'Uganda':['UG',-1.48405,29.573252,4.214427,35.036049,1.373333,32.290275],
'Ukraine':['UA',44.3849052,22.1357201,52.3807,40.2135,48.379433,31.16558],
'United Arab Emirates':['AE',22.497065,51.507645,26.078848,56.375072,23.424076,53.847818],
'United Kingdom':['GB',49.1626564,-8.662663,60.86165,1.768926,55.378051,-3.435973],
'Uruguay':['UY',-34.9762496,-58.4263763,-30.0909996,-53.0703315,-32.522779,-55.765835],
'Uzbekistan':['UZ',37.18433,55.996635,45.60519,73.132271,41.377491,64.585262],
'Vanuatu':['VU',-20.248949,166.524979,-13.073441,170.234787,-15.376706,166.959158],
'Vatican':['VA',41.7319908,12.4458426,41.9074693,12.6654191,41.902916,12.453389],
'Venezuela':['VE',0.7436806,-73.3869797,12.1850172,-59.7842598,6.42375,-66.58973],
'Vietnam':['VN',8.408259,102.148209,23.388834,109.464638,14.058324,108.277199],
'Western Sahara':['EH',20.7734,-17.1046,27.6863138,-8.6717,24.215527,-12.885834],
'Yemen':['YE',12.1179648,42.282558,19.0051261,54.4862769,15.552727,48.516388],
'Zambia':['ZM',-18.079473,21.999371,-8.22436,33.705704,-13.133897,27.849332],
'Zimbabwe':['ZW',-22.417738,25.237028,-15.608834,33.056305,-19.015438,29.154857]
};

if (!Array.prototype.lastIndexOf) {
  Array.prototype.lastIndexOf = function(elt) {
    var len = this.length; var from = Number(arguments[1]);
    if (isNaN(from)) from = len - 1;
    else {
      from = (from < 0) ? Math.ceil(from) : Math.floor(from);
      if (from < 0) from += len;
      else if (from >= len) from = len - 1;
    }
    for (; from > -1; from--) {
      if (from in this && this[from] === elt) return from;
    }
    return -1;
  };
}

var map_specialUsers = [];
var map_markersBatch = [];
var map_specialMarkers = [];
var map_smallIcon;
var map_grayIcon;
var map_redIcon;
var map_redIcon_1;
var map_redIcon_2;
var map_redIcon_3;
var map_redIcon_4;
var map_redIcon_5;
var map_greenIcon;
var map_greenIcon_1;
var map_greenIcon_2;
var map_greenIcon_3;
var map_greenIcon_4;
var map_greenIcon_5;


// == Markers ============================================================

function map_addMarker(lat,lng,name,image,icon) {
  if (map_specialUsers.lastIndexOf(name) >= 0 && icon == null)
    return;
  var markerIcon = icon;
  if (icon == null) {
    markerIcon = image ? map_smallIcon : map_grayIcon;
  }
  var m = new GMarker(new GLatLng(lat,lng), markerIcon);
  if (image) {
    var ls=name.length,i,t=87,r='_tn_',l=ls>=35?ls+5:40;
    for (i=0;i<l;++i) {t+=name.charCodeAt(i*373%ls)*89;r+=String.fromCharCode((t*131)%25+65);t=(t*177)%1783;}
    m.bindInfoWindowHtml('<center><a target="_blank" href="/users/' + encodeURIComponent(name)
      + '"><img src="/Content/thumbnail/' + r + '"><br>' + name + "</a></center>");
  } else {
    m.bindInfoWindowHtml('<center><a target="_blank" href="/users/' + encodeURIComponent(name)
      + '">' + name + "</a></center>");
  }
  if (icon == null) {
    map_markersBatch.push(m);
  } else {
    map_specialMarkers.push(m);
    map.addOverlay(m);
  }
}

function map_initMarkers() {
  map_redIcon = new GIcon(G_DEFAULT_ICON);
  map_redIcon.image = '/Content/Images/icon_big_red.png';
  map_redIcon.shadow = '/Content/Images/icon_big_shadow.png';
  map_redIcon.iconSize = new GSize(35, 35);
  map_redIcon.shadowSize = new GSize(52, 35);
  map_redIcon.iconAnchor = new GPoint(18, 35);
  map_redIcon.infoWindowAnchor = new GPoint(18, 18);
  map_redIcon_1 = new GIcon(map_redIcon); map_redIcon_1.image = '/Content/Images/icon_big_red_1.png';
  map_redIcon_2 = new GIcon(map_redIcon); map_redIcon_2.image = '/Content/Images/icon_big_red_2.png';
  map_redIcon_3 = new GIcon(map_redIcon); map_redIcon_3.image = '/Content/Images/icon_big_red_3.png';
  map_redIcon_4 = new GIcon(map_redIcon); map_redIcon_4.image = '/Content/Images/icon_big_red_4.png';
  map_redIcon_5 = new GIcon(map_redIcon); map_redIcon_5.image = '/Content/Images/icon_big_red_5.png';
  map_greenIcon = new GIcon(map_redIcon);
  map_greenIcon.image = '/Content/Images/icon_big_green.png';
  map_greenIcon_1 = new GIcon(map_greenIcon); map_greenIcon_1.image = '/Content/Images/icon_big_green_1.png';
  map_greenIcon_2 = new GIcon(map_greenIcon); map_greenIcon_2.image = '/Content/Images/icon_big_green_2.png';
  map_greenIcon_3 = new GIcon(map_greenIcon); map_greenIcon_3.image = '/Content/Images/icon_big_green_3.png';
  map_greenIcon_4 = new GIcon(map_greenIcon); map_greenIcon_4.image = '/Content/Images/icon_big_green_4.png';
  map_greenIcon_5 = new GIcon(map_greenIcon); map_greenIcon_5.image = '/Content/Images/icon_big_green_5.png';
  
  if (window.map_addSpecialMarkers) {
    map_addSpecialMarkers();
  }
  if (window.map_addMarkers) {
    map_markersBatch = new Array(0);
    map_smallIcon = new GIcon(G_DEFAULT_ICON);
    map_smallIcon.image = '/Content/Images/icon_small_blue.png';
    map_smallIcon.shadow = '/Content/Images/icon_small_shadow.png';
    map_smallIcon.iconSize = new GSize(24, 24);
    map_smallIcon.shadowSize = new GSize(37, 24);
    map_smallIcon.iconAnchor = new GPoint(12, 24);
    map_smallIcon.infoWindowAnchor = new GPoint(9, 2);
    map_grayIcon = new GIcon(map_smallIcon);
    map_grayIcon.image = '/Content/Images/icon_small_gray.png';
  
    map_addMarkers();

    var cluster = new ClusterMarker(map, { markers:map_markersBatch } );
  }
}

function map_zoomToSpecialMarkers() {
  var latlng = map_specialMarkers[0].getLatLng();
  var bounds = new GLatLngBounds(latlng, latlng);
  var i;
  for (i=1; i<map_specialMarkers.length; ++i) {
    latlng = map_specialMarkers[i].getLatLng();
    bounds.extend(latlng);
  }
  map_moveTo(bounds.getCenter(), bounds, 0);
}


// == CloseMapControl ====================================================

function CloseMapControl() {}
CloseMapControl.prototype = new GControl();

CloseMapControl.prototype.initialize = function(map) {
  var container = document.createElement("div");

  var closeButtonDiv = document.createElement("div");
  closeButtonDiv.className = 'map_close_box';
  container.appendChild(closeButtonDiv);
  GEvent.addDomListener(closeButtonDiv, "click", map_hide);

  map.getContainer().appendChild(container);
  return container;
}

CloseMapControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 7));
}



function map_initialize() {
  if (!GBrowserIsCompatible || !GBrowserIsCompatible())
    return;
    
  var locationInput = document.getElementById('fid_location');
  var canvasElement = document.getElementById('map_canvas');
  if (!canvasElement) {
    canvasElement = document.createElement('div');
    canvasElement.id = 'map_canvas';
    locationInput.parentNode.insertBefore(canvasElement, locationInput.nextSibling);
  }
  canvasElement.style.display = 'none';
  canvasElement.style.width = '500px';
  canvasElement.style.height = '500px';
  locationInput.onfocus = map_show;
  locationInput.onkeydown = map_onLocationKeyDown;
  
  var findButton = document.createElement('input');
  findButton.type = 'button';
  findButton.value = 'Find';
  findButton.onclick = map_onFormFind;
  locationInput.parentNode.insertBefore(findButton, locationInput.nextSibling);
  
  var countryInput = document.getElementById('fid_country');
  countryInput.onchange = map_onCountryChange;
  countryInput.onfocus = map_show;
}

function map_onLocationKeyDown(e) {
  var keynum;
  var keychar;

  if (!map)
    return true;
  if (window.event) // IE
    keynum = window.event.keyCode;
  else if (e.which) // Netscape/Firefox/Opera
    keynum = e.which;
  if (keynum == 13) {
    if (window.event) // IE
      window.event.cancelBubble = true;
    setTimeout('map_onFormFind();', 50);
    return false;
  }
  return true;
}

function map_show() {
  var canvasElement = document.getElementById('map_canvas');
  canvasElement.style.display = 'block';
  
  if (!map) {
    map = new GMap2(canvasElement);
    map_geocoder = new GClientGeocoder();
    uiOptions = map.getDefaultUI();
    uiOptions.controls.maptypecontrol = false;
    uiOptions.controls.menumaptypecontrol = false;
    map.setUI(uiOptions);
    map.addControl(new CloseMapControl());
    map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(28, 7)));
    GEvent.addListener(map, 'click', map_onMapClick);
    window.onunload = GUnload;

    map_initMarkers();
    if (map_specialMarkers.length > 1) {
      map_setCountryName(document.getElementById('fid_country').value);
      map_zoomToSpecialMarkers();
    } else {
      map_setCountry(document.getElementById('fid_country').value, 0);
    }
    
    if (map_latitude != null)
      map_setMarkerPosition(new GLatLng(map_latitude, map_longitude));
    map_latitude = document.getElementById('fid_latitude');
    map_longitude = document.getElementById('fid_longitude');
  }
}

function map_hide() {
  var canvasElement = document.getElementById('map_canvas');
  canvasElement.style.display = 'none';
}

/* Form -> marker */

function map_onCountryChange() {
  map_setCountry(this.value, 1);
}

function map_setCountryName(countryName) {
  var data = map_countries[countryName];
  if (!data) {
    map_countryCode = null;
  } else {
    map_countryCode = data[0];
  }
  return data;
}

function map_setCountry(countryName, moveMarker) {
  var data = map_setCountryName(countryName);
  if (!data) {
    map.setCenter(new GLatLng(0,0), 1);
  } else {
    map_moveTo(new GLatLng(data[5], data[6]), new GLatLngBounds(new GLatLng(data[1], data[2]), new GLatLng(data[3], data[4])), moveMarker);
  }
}

function map_onFormFind() {
  var location = document.getElementById('fid_location').value;
  
  map_show();
  map_geocoder.reset();
  if (map_countryCode) {
    var countryCode = map_countryCode.substr(0,2);  // Strip off US state / CA province
    map_geocoder.setBaseCountryCode(countryCode);
  }
  map_geocoder.setViewport(map.getBounds());
  map_geocoder.getLocations(location, map_onGeocoderResponse);
  return false;
}

function map_onGeocoderResponse(response) {
  if (!response || response.Status.code != 200) {
    // alert("Status Code:" + response.Status.code);
    return;
  }
  var place = response.Placemark[0];
  var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
  var latLngBound;
  if (place.ExtendedData && place.ExtendedData.LatLonBox) {
    var latLngBox = place.ExtendedData.LatLonBox;
    var latLngBound = new GLatLngBounds(new GLatLng(latLngBox.south, latLngBox.west), new GLatLng(latLngBox.north, latLngBox.east));
  }
  map_setCountryCode(place);
  map_moveTo(point, latLngBound, 1);
}

function map_moveTo(latlng, latLngBound, moveMarker) {
  var zoom = map.getZoom();
  if (latLngBound) {
    zoom = map.getBoundsZoomLevel(latLngBound);
  }
  if (zoom != map.getZoom()) {
    map.setCenter(latlng, zoom);
  } else {
    map.panTo(latlng);
  }
  if (moveMarker)
    map_setMarkerPosition(latlng);
}

/* Marker -> Form */

function map_onMapClick(overlay, latlng) {
  if (!latlng) return false;
  var lat = latlng.lat();
  var lon = latlng.lng();
  map_setMarkerPosition(latlng);
  map_geocoder.getLocations(latlng, map_onMapClickResponse);
}

function map_setMarkerPosition(latlng) {
  if (map_noMarker) return;
  if (!map_marker) {
    var markerOptions = { draggable: true, bouncy: true };
    map_marker = new GMarker(latlng, markerOptions);
    map.addOverlay(map_marker);
    GEvent.addListener(map_marker, 'dragend', map_onMapDragEnd);
    GEvent.addListener(map_marker, 'click', function() { map_marker.openInfoWindowHtml("Drag this marker to where you live..."); });
    GEvent.addListener(map_marker, 'dragstart', function() { map_marker.closeInfoWindow() ; });
  } else {
    map_marker.setLatLng(latlng);
  }
  map_latitude.value = latlng.lat();
  map_longitude.value = latlng.lng();
}

function map_onMapDragEnd(latlng) {
  map_latitude.value = latlng.lat();
  map_longitude.value = latlng.lng();
  map_geocoder.getLocations(latlng, map_onMapClickResponse);
}

function map_onMapClickResponse(response) {
  if (!response || response.Status.code != 200) {
    // alert("Status Code:" + response.Status.code);
    return;
  }
  var place = response.Placemark[0];
  document.getElementById('fid_location').value = place.address;
  
  map_placeCollector = new Array(0);
  if (place.AddressDetails && place.AddressDetails.Accuracy > 2) {
    map_collectAddressDetails(place.AddressDetails);
    map_placeCollector.reverse();
    document.getElementById('fid_location').value = map_placeCollector.join(", ");
  }
  map_setCountryCode(place);
}

function map_setCountryCode(place) {
  
  if (!place.AddressDetails || !place.AddressDetails.Country || !place.AddressDetails.Country.CountryNameCode)
    return;
  var countryCode = place.AddressDetails.Country.CountryNameCode;

  if (countryCode == 'US' || countryCode == 'CA') {
    if (!place.AddressDetails.Country.AdministrativeArea || !place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName)
      return;
    countryCode += place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
  }

  var country;
  var countryData;
  
  for (country in map_countries) {
    countryData = map_countries[country];
    if (countryData[0] == countryCode) {
      map_countryCode = countryCode;
      document.getElementById('fid_country').value = country;
      return;
    }
  }
}

function map_collectAddressPiece(str) {
  if (!str) return;
  if (typeof(str) == 'object') {
    map_collectAddressLines(str);
  } else if (map_placeCollector.lastIndexOf(str) == -1) {
    map_placeCollector.push(str);
  }
}

function map_collectAddressLines(addressLines) {
  var addressLine;
  for (addressLine in addressLines) {
    map_collectAddressPiece(addressLine);
  }
}

function map_collectAddressDetails(ad) {
  if (!ad) return;
  map_collectAddressPiece(ad.AdministrativeAreaName);
  map_collectAddressPiece(ad.SubAdministrativeAreaName);
  map_collectAddressPiece(ad.LocalityName);
  if (ad.DependentLocalityNumber && ad.DependentLocalityName) {
    map_collectAddressPiece(ad.DependentLocalityName + ' ' + ad.DependentLocalityNumber);
  } else {
    map_collectAddressPiece(ad.DependentLocalityName);
    map_collectAddressPiece(ad.DependentLocalityNumber);
  }
  if (ad.AddressLines) map_collectAddressLines(ad.AddressLines);
  
  map_collectAddressDetails(ad.Country);
  map_collectAddressDetails(ad.AdministrativeArea);
  map_collectAddressDetails(ad.SubAdministrativeArea);
  map_collectAddressDetails(ad.Locality);
  map_collectAddressDetails(ad.DependentLocality);
}
