var map = null;
var geocoder = null;
var stview = null;
var stview_overlay = null;
var stpano = null;
var stpano_loc = null;
var stpano_ov = null;
var shown = false;
var trafficov = null;
var patrolov = null;
var hotzonesov = null;
var filter = 0;;
var filter_days = 0;
var filter_user = "";
var filter_type = "0|1|2|3|4|5|6|20|21|22|23|24|25|26|27|28|29|30|31|32";
var filter_state = "A|Q|P|N|E|S|G";
var filter_level = 122943;
var filter_action = "";
var filter_all = false;
var TrapsterLatCookie = "TrapsterLatCookie";
var TrapsterLngCookie = "TrapsterLngCookie";
var TrapsterZoomCookie = "TrapsterZoomCookie";
var TrapsterTypeCookie = "TrapsterTypeCookie";
var TrapsterFilterCookie = "TrapsterFilterCookie";
var TrapsterFilterTypesCookie = "TrapsterFilterTypesCookie";
var TrapsterFilterStatusCookie = "TrapsterFilterStatusCookie";
var TrapsterFilterLevelCookie = "TrapsterFilterLevelCookie";
var TrapsterLokiCookie = "TrapsterLokiCookie";
var shown_markers = Array();
var gm_conn = null;
var iw_conn = null;
var traps_definition = null;
var clustericons = null;
var animateRun = true;
var markerList = new Array();
var mvmarker = null;
var mvmarkerll = null;
var infowindow = null;
var shift_key = false;
var alt_key = false;
var tooltip = null;
var trap_search_id = null;

// categories
traps_categories = [];
traps_categories[1] = { name: "Enforcement Points" };
traps_categories[2] = { name: "Road Hazards" };
traps_categories[3] = { name: "Most Popular" };

// traps
traps_definition = [];
traps_definition[0] = {
	name: "Live Police",
	livetrap: true,
	category: 3,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_red/7FF4F83A-02B0-4324-BCFE-0906159238FE.png",35,35,11,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_yellow/AC5D7BA9-A666-47B0-9575-2A8CBA89BCAB.png",35,35,11,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_green/953EFE01-C1A8-4FFF-A4FC-A07FF0D901F6.png",35,35,11,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_burried/5D9C55BA-1175-494B-855F-DE35F6CBDB8A.png",35,35,11,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_newbie/F3717206-D5E0-4E67-977F-D57206F1A502.png",35,35,11,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_quarantined/0C547E28-816B-40FC-B46D-AD911357DB7D.png",35,35,11,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_probated/FA6E967E-ECB0-4131-AB04-0CFBA7563076.png",35,35,11,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_scheduled/7303F1EF-F11D-4F90-AF7C-C6B572A93C96.png",35,35,11,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_aged/299EBCF2-7DDA-45B1-8CEB-D1AC14F1ED93.png",35,35,11,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_red/7FF4F83A-02B0-4324-BCFE-0906159238FE.png",35,35,11,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/lp_red/7FF4F83A-02B0-4324-BCFE-0906159238FE.png",35,35,11,35) }
	]
};
traps_definition[1] = {
	name: "Red Light Camera",
	livetrap: false,
	category: 1,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_red/B763624B-EABD-43DC-AF97-FF8F5BC2677E.png",35,35,11,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_yellow/311D10BC-77D5-48CE-828C-F394B97078B2.png",35,35,11,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_green/46476028-CE61-4B85-8BC6-B35A130CEA52.png",35,35,11,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_burried/E2643FCB-FF2B-4861-B790-5CB93E1A4346.png",35,35,11,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_newbie/5C6C8E58-0BA7-4E27-A3AB-3B3C910DBF56.png",35,35,11,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_quarantined/662D7501-97B2-4898-AB82-A59409D1AC1E.png",35,35,11,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_probated/1A832F81-A83F-4B6E-9397-A8CC34EBA7D3.png",35,35,11,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_pending/0C5ABF5D-74FA-4668-9798-977C717E966A.png",35,35,11,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_scheduled/B9237E8B-4174-45AF-A287-005B97C8E644.png",35,35,11,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_aged/4E2D1404-F607-4FB7-BDCE-CC0990C62388.png",35,35,11,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_red/B763624B-EABD-43DC-AF97-FF8F5BC2677E.png",35,35,11,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/rlc_red/B763624B-EABD-43DC-AF97-FF8F5BC2677E.png",35,35,11,35) }
	]
};
traps_definition[2] = {
	name: "Fixed Speed Camera",
	livetrap: false,
	category: 1,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_red/C5C4FB8F-4CFD-43B6-8A48-974C7DA1B9E4.png",35,35,11,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_yellow/245C24A4-A8C4-4F4F-BAD0-2A522C4473D9.png",35,35,11,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_green/6E0F08C9-608A-4460-959A-F204451573ED.png",35,35,11,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_burried/DE386AAA-2756-48B1-8F11-E4C45BD13072.png",35,35,11,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_newbie/B6A16A68-0093-4018-A208-210D2B001A23.png",35,35,11,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_quarantined/E06BD55E-BFF4-4F6D-B4E9-C0A66EC2D863.png",35,35,11,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_probated/52DDDD22-220B-4C8C-A5D8-84368E6F99BA.png",35,35,11,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_pending/2E2F37AF-32E0-4BB0-86E4-695A2A42B86B.png",35,35,11,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_scheduled/E996B796-2B28-4D20-96AC-E2E0D45C510A.png",35,35,11,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_aged/8437FB99-5267-4C27-AD0D-A7807DE4C4F6.png",35,35,11,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_red/C5C4FB8F-4CFD-43B6-8A48-974C7DA1B9E4.png",35,35,11,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/sc_red/C5C4FB8F-4CFD-43B6-8A48-974C7DA1B9E4.png",35,35,11,35) }
	]
};
traps_definition[3] = {
	name: "Known Enforcement Point",
	livetrap: false,
	category: 1,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_red/C249088C-A922-4506-A01D-87CE68BBC084.png",35,35,11,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_yellow/38AE5C04-4540-4C3A-93EB-B466231CBA60.png",35,35,11,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_green/22DE018F-6762-4E78-8198-FA6E6F350443.png",35,35,11,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_burried/D8818A7B-BD31-4B7B-B621-FB3022EB7A2B.png",35,35,11,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_newbie/BA749FB5-958E-4BD9-878C-8E0D3473D84C.png",35,35,11,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_quarantined/CD5A86F1-DF7F-4881-8E23-306AD628EA10.png",35,35,11,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_probated/10D40D86-3B06-43D3-AF83-6EA267EFF916.png",35,35,11,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_pending/40899CB0-4472-47D9-A435-4F029F4321A4.png",35,35,11,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_scheduled/09750826-1AB7-4817-8DAD-E40CD467C6E5.png",35,35,11,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_aged/06CA2F1A-B75C-404F-942C-BCCC45429CC5.png",35,35,11,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_red/C249088C-A922-4506-A01D-87CE68BBC084.png",35,35,11,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/pohh_red/C249088C-A922-4506-A01D-87CE68BBC084.png",35,35,11,35) }
	]
};
traps_definition[4] = {
	name: "Combo Camera",
	livetrap: false,
	category: 1,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_red/E49CF7D8-9603-4871-8F29-42BF41337C5E.png",35,35,11,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_yellow/0DABF870-AADB-42ED-B869-12FB0EFA3463.png",35,35,11,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_green/D1909FB2-7C16-4851-9FEA-21D3D04E9B38.png",35,35,11,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_burried/B3654733-4CD3-40E4-94A7-4E227178F1D3.png",35,35,11,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_newbie/3D17F71B-5CFC-4939-B057-657BF2E5D64C.png",35,35,11,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_quarantined/552102E0-A421-4CB4-A96C-6CD7149F93B3.png",35,35,11,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_probated/B875A2AD-E520-4DEF-8FDA-580F80336DAB.png",35,35,11,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_pending/5FBEBA28-18AB-4787-BC0A-A3A1D93A4C2E.png",35,35,11,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_scheduled/945E529E-6EBC-4E3D-8694-6BCDB7309136.png",35,35,11,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_aged/4E8AB26E-FAA8-41B5-B1A7-B01390A185F0.png",35,35,11,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_red/E49CF7D8-9603-4871-8F29-42BF41337C5E.png",35,35,11,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/cb_red/E49CF7D8-9603-4871-8F29-42BF41337C5E.png",35,35,11,35) }
	]
};
traps_definition[5] = {
	name: "Mobile Speed Camera",
	livetrap: true,
	category: 3,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_red/9D22AF26-87D8-4D24-B04E-3661EE13393D.png",35,35,11,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_yellow/CCEB7E52-B4F4-41A5-88B7-6AAFEEE3533D.png",35,35,11,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_green/E3D539F6-B67C-46CE-BDCF-F5CE135ED644.png",35,35,11,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_burried/A7D1601B-BF9E-4F1B-B310-587DDA540D24.png",35,35,11,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_newbie/33B207C6-BAEE-4C32-8363-6D13995B2A98.png",35,35,11,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_quarantined/332CE202-3852-4367-8BF4-EE39CF99F17F.png",35,35,11,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_probated/1B496E5E-3143-4633-8FFC-0261231CF646.png",35,35,11,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_scheduled/49D73F93-6153-40CF-B188-E696F1E74EC1.png",35,35,11,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_aged/2A0A95F7-8491-4FDF-916B-F48F7E8FB02B.png",35,35,11,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_red/9D22AF26-87D8-4D24-B04E-3661EE13393D.png",35,35,11,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/msc_red/9D22AF26-87D8-4D24-B04E-3661EE13393D.png",35,35,11,35) }
	]
};
traps_definition[6] = {
	name: "Check Point",
	livetrap: true,
	category: 1,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_red/667C6F43-6EE0-458F-8948-2B5610FD73A5.png",35,35,11,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_yellow/46FEA6D0-8FBE-418B-8EB0-5E5D6CFAF71D.png",35,35,11,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_green/9251AB5C-A210-4F33-BB6C-D965F68676A5.png",35,35,11,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_burried/A1660EB3-E45D-4C28-8FAD-B77D427B9DC1.png",35,35,11,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_newbie/C6908D7E-8F6E-4781-8C62-6DDD3666D4A6.png",35,35,11,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_quarantined/F2DF4E67-3824-47B4-BEAF-5D0C818BD738.png",35,35,11,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_probated/61B2972E-2EB4-482F-B155-6EA182122881.png",35,35,11,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_scheduled/EDD0094A-1046-4593-8E9D-C7E71E039D9E.png",35,35,11,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_aged/03BE1307-26DA-4814-9F96-1E5A396FDFD2.png",35,35,11,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_red/667C6F43-6EE0-458F-8948-2B5610FD73A5.png",35,35,11,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ckp_red/667C6F43-6EE0-458F-8948-2B5610FD73A5.png",35,35,11,35) }
	]
};
traps_definition[20] = {
	name: "Children at play",
	livetrap: true,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/childrenatplay/307D4997-0042-4C35-9546-A19141B1CB01.png",35,35,17,35) }
	]
};
traps_definition[21] = {
	name: "Accident",
	livetrap: true,
	category: 3,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/accident/735DA4C8-E365-4CDE-ACF0-F4D9107F4B6E.png",35,35,17,35) }
	]
};
traps_definition[22] = {
	name: "Brush Fire",
	livetrap: true,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/brushfire/E9F61456-6D54-4D5A-819D-36D6D89D2898.png",35,35,17,35) }
	]
};
traps_definition[23] = {
	name: "Dangerous Intersection",
	livetrap: false,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerintersect/C46F3655-F574-48FB-AC7B-91FF5E9F650E.png",35,35,17,35) }
	]
};
traps_definition[24] = {
	name: "Dangerous Curve",
	livetrap: false,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/dangerouscurve/8583D4B7-592F-4F23-B679-D44F42B0C128.png",35,35,17,35) }
	]
};
traps_definition[25] = {
	name: "Flooded Road",
	livetrap: true,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/flood/DE054486-126D-4D56-8482-A7EB5EF608CB.png",35,35,17,35) }
	]
};
traps_definition[26] = {
	name: "Ice On Road",
	livetrap: true,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/ice/0CC7CD69-BFEC-4401-BFF2-AD90CF19E810.png",35,35,17,35) }
	]
};
traps_definition[27] = {
	name: "Narrow Bridge Ahead",
	livetrap: false,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/narrowbridge/12B64D5B-29B0-4122-8DE0-8DF5DCA559ED.png",35,35,17,35) }
	]
};
traps_definition[28] = {
	name: "Road Closed Ahead",
	livetrap: true,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadclosed/F4743C66-8FCB-4F76-AB4A-8232EE2C1B5D.png",35,35,17,35) }
	]
};
traps_definition[29] = {
	name: "Road Kill",
	livetrap: true,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/roadkill/50F6D9D7-6947-481E-8D4B-753AAECAD9D3.png",35,35,17,35) }
	]
};
traps_definition[30] = {
	name: "Toll Booth",
	livetrap: false,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/tollbooth/F02C35C0-3FCD-4E68-B692-E73303544594.png",35,35,17,35) }
	]
};
traps_definition[31] = {
	name: "Construction zone",
	livetrap: true,
	category: 3,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/construction/DB60CFCD-D69A-4557-8612-BB5881D876A1.png",35,35,17,35) }
	]
};
traps_definition[32] = {
	name: "School Zone",
	livetrap: false,
	category: 2,
	icons: {
		r: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		y: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		g: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		b: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		n: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		k: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		p: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		e: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		s: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35),
		ag: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35)
	},
	levels: [
		{ bit: 1, name: "Validated", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35) },
		{ bit: 2, name: "Law enforcement", icon: createIcon("http://www.trapster.com/storage/APP_ATTRIBUTE/schoolzone/4EFDD2CB-523D-44A0-ABCD-09AC693EE8A6.png",35,35,17,35) }
	]
};

// POHH opacity
traps_definition[3].icons.g_80 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidG_80.png",35,35,11,35);
traps_definition[3].icons.g_50 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidG_50.png",35,35,11,35);
traps_definition[3].icons.g_25 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidG_25.png",35,35,11,35);
traps_definition[3].icons.o_80 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidO_80.png",35,35,11,35);
traps_definition[3].icons.o_50 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidO_50.png",35,35,11,35);
traps_definition[3].icons.o_25 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidO_25.png",35,35,11,35);
traps_definition[3].icons.r_80 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidR_80.png",35,35,11,35);
traps_definition[3].icons.r_50 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidR_50.png",35,35,11,35);
traps_definition[3].icons.r_25 = createIcon("http://www.trapster.com//rl/icons/icon_PoliceHidR_25.png",35,35,11,35);

// consolidate
clustericons = {
	g: createIconAG("http://www.trapster.com/rl/small-green-dot.png"),
	y: createIconAG("http://www.trapster.com/rl/small-yellow-dot.png"),
	r: createIconAG("http://www.trapster.com/rl/small-red-dot.png")
};

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
		if($('trapmap_level_1')) {
			filter_level = getCookieValue(TrapsterFilterLevelCookie);
			if(!filter_level) filter_level = 122943;
			drawFilterLevel(filter_level); 
		}
	}
	return false;
}

function deleteTrap(trapid)
{
	if((moderator < 5) && !window.confirm("Are you sure you want to delete this trap?")) return;
	var url = "rl/deltrap.php?id="+trapid;
	GDownloadUrl(url, function(data, responseCode) {
		if (data.indexOf("ERROR") != -1)
			alert("Error deleting this trap");
		else updateMap(); //window.location.reload();
	});
}

function moveTrap(trapid)
{
	var ll = mvmarker.getLatLng();

	var url = "rl/movetrap.php?id="+trapid+"&lat="+ll.lat()+"&lng="+ll.lng();
	GDownloadUrl(url, function(data, responseCode) {
		if (data.indexOf("ERROR") != -1)
			alert("Error moving this trap");
		updateMap(); //window.location.reload();
	});

	mvmarker = null;
}

function abortMove()
{
	if(mvmarker)
	{
		mvmarker.closeInfoWindow();
		mvmarker.setLatLng(mvmarkerll);
		mvmarker = null;
	}
}

function load(){
	var DLAT = 37;
	var DLNG = -95;
	var ZOOM = 3;
	var TYPE = G_NORMAL_MAP;
	
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("trapmap"));
		map.setCenter(new GLatLng(DLAT, DLNG), ZOOM);
		map.setMapType(TYPE);
		map.disableDoubleClickZoom();
		map.disableDragging();
		map.disableScrollWheelZoom();
		map.addControl(new TControlMapButtons());

		geocoder = new GClientGeocoder();
		stview = new GStreetviewClient();
		stview_overlay = new GStreetviewOverlay();
		GEvent.addListener(map, "click", function(ov){
			if(ov) animateRun = false;
			else load_trapmap();
		});
		
		// get infowindow object
		infowindow = map.getInfoWindow();
		GEvent.addListener(infowindow, "maximizeend", loadTrapInfo );
		GEvent.addListener(infowindow, "restoreclick", function () {
			if(stpano) bubble_close_stv();
		});
		
		// add tooltip overlay
		tooltip = new ToolTipOverlay();
		map.addOverlay(tooltip);
		
		// display last trap
		showTrap(last_trap[0],last_trap[1],last_trap[2],last_trap[3],last_trap[4],last_trap[5],true);
	}
}

function showTrap(lat,lng,objtype,numvotes,trapid,maxlev,feed) {
	var conf = null;
	if(feed) {
		if(!animateRun) return;
		
		// build icon and get trap type name
		objtypestr = traps_definition[objtype].name;
        if (numvotes < 1) theIcon = traps_definition[objtype].icons.b;
        else if (numvotes < 2) theIcon = traps_definition[objtype].icons.g;
        else if (numvotes < 5) theIcon = traps_definition[objtype].icons.y;
        else theIcon = traps_definition[objtype].icons.r;

		// check levels
		for(var l=0;l<traps_definition[objtype].levels.length;l++) {
		       if(maxlev & (1 << (traps_definition[objtype].levels[l].bit - 1))) {
			       theIcon = traps_definition[objtype].levels[l].icon;
			       conf = traps_definition[objtype].levels[l].name.toLowerCase();
		       }
		}

		// build bubble title
		if(!conf) {
			if(numvotes < 1) conf = "no confidence";
			else if (numvotes < 2) conf = "low confidence";
			else if (numvotes < 5) conf = "medium confidence";
			else conf = "high confidence";
		}
		var title = '<b>'+objtypestr+'</b> - <i>'+conf+'</i>';
		
		// close current infowindow
		map.getInfoWindow().hide();
		
		// clear markers
		clearMarkers();
		
		// move to trap location and create marker
		map.setCenter(new GLatLng(lat,lng));
		trap_search_id = trapid;
		shown_markers.push(createMarker(new GLatLng(lat,lng),theIcon,trapid,false,buildOverviewStr(),title,buildContentStr(),"A"));
	}
	else {
		if(animateRun) {
			animateRun = false;
			load_trapmap();
		}
		// close current infowindow
		map.getInfoWindow().hide();

		// move to trap location and refresh map
		map.setCenter(new GLatLng(lat,lng),15);
		trap_search_id = trapid;
		updateMap();
	}
}

function load_trapmap() {
	var LAT = 37;
	var LNG = -95;
	var ZOOM = 2;
	if(mylat && mylng) {
		LAT = mylat;
		LNG = mylng;
		if(accuracy == 1) ZOOM = 13;
		else ZOOM = 4;
	}
	TYPE = G_NORMAL_MAP;
	
	if($("get_started")) $("get_started").src = "new/images/map_buttons_06_over.png";

	animateRun = false;
	if (GBrowserIsCompatible()) {
		// initialize map
		GEvent.clearListeners(map,"click");
		map.enableDoubleClickZoom();
		map.enableDragging();
		map.addControl(new GLargeMapControl(),new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(5,35)));
		map.addControl(new GScaleControl());
		map.setCenter(new GLatLng(LAT,LNG),ZOOM);
		trafficov = new GTrafficOverlay({incidents: true});
		map.addOverlay(trafficov);

		// setup event listeners
        GEvent.addListener(map, "dragend", updateMap);
        GEvent.addListener(map, "zoomend", updateMap);

		if(moderator > 0)
		{
			// monitor shift+alt keys
			document.onkeydown = document.onkeyup = document.onmousemove = function (e)
			{
				if(window.event) e = window.event;

				shift_key = e.shiftKey;
				alt_key = e.altKey;
			}
		}

		// show traps
		showObjects();
	}
}

function updateMap()
{
	if(!mvmarker && map.getInfoWindow().isHidden()) showObjects();
}

function createIcon(image) {
	var myIcon = new GIcon();

	myIcon.image = image;
	myIcon.shadow = "";
	myIcon.iconSize = new GSize(35, 35);
	myIcon.iconAnchor = new GPoint(11, 35);
	myIcon.infoWindowAnchor = new GPoint(15, 3);

	return myIcon;
}

function createIconAG(image) {
	myIcon = new GIcon();

	myIcon.image = image;
	myIcon.iconSize = new GSize(15,15 );
	myIcon.iconAnchor = new GPoint(7, 7);
	myIcon.infoWindowAnchor = new GPoint(7, 1);

	return myIcon;
}

function createConsolidateMarker(point, myIcon, total) {
       	var marker = new GMarker(point, myIcon);

	GEvent.addListener(marker, "click", function() {
               abortMove();
               marker.openInfoWindow('<center><b>'+total+' traps</b><br>There are '+total+' traps in this area.<br>Zoom in to see them individually.</center>');
       	});

	GEvent.addListener(marker,"mouseover", function () {
		tooltip.display('There are '+total+' traps in this area. Zoom in to see them individually.',this);
	});
	GEvent.addListener(marker,"mouseout", function () {
		tooltip.hide();
	});
	
       	map.addOverlay(marker);

	return marker;
}

function createMarker(point, myIcon, trapid, drag, overview, title, content, status) {
	var marker = new GMarker(point, {icon: myIcon, draggable: drag} );

	marker.trapID = trapid;
	marker.maxTitle = title;
	marker.maxContent = content;
	marker.status = status;

	GEvent.addListener(marker,"mouseover", function () {
		tooltip.display(title+"<br/><em>Click to view more information",this);
	});
	GEvent.addListener(marker,"mouseout", function () {
                tooltip.hide();
        });

	GEvent.addListener(marker, "click", function() {
		abortMove();
		if(shift_key && alt_key && (moderator > 0)) deleteTrap(trapid)
		else if(!shift_key && alt_key && (moderator >= 5) && (this.status =="N" || this.status == "Q" || this.status == "E")) bubble_approve_trap(trapid);
		else
		{
			map.getInfoWindow().maximizeURL = url = "rl/trapinfo.php?v=2&id="+this.trapID;
			loadTrapOverview(this);
		}

		shift_key = alt_key = false;
	});
	GEvent.addListener(marker,"dblclick", function () { return false; });

	GEvent.addListener(marker, "dragstart", function() {
		if(mvmarker != this)
		{	
			abortMove();
			mvmarker = this;
			mvmarkerll = this.getLatLng();
		}
		marker.closeInfoWindow();	
	});

	GEvent.addListener(marker, "dragend", function() {
		var	html = '<p align="center">Do you really want to move this trap?<br/><input type="button" value="Yes" onClick="moveTrap('+this.trapID+')"> <input type="button" value="No" onClick="abortMove()"></p>';
		this.openInfoWindow(html);
	});

	GEvent.addListener(marker, "infowindowbeforeclose", function () {
		if(stpano) bubble_close_stv();
	});

	map.addOverlay(marker);
	
    if(trap_search_id == trapid)
    {
        trap_search_id = null;
        map.getInfoWindow().maximizeURL = url = "rl/trapinfo.php?v=2&id="+trapid;
        loadTrapOverview(marker);
    }

	return marker;
}

function loadTrapOverview(marker){
	GEvent.clearListeners(marker, "infowindowopen");
	GEvent.clearListeners(marker, "infowindowbeforeclose");
	marker.openInfoWindowHtml(buildOverviewStr());
	
	stview.getNearestPanorama(marker.getLatLng(), function(data){
		var has_stview;
		var url;
		
		if (data.code != 200) 
			has_stview = "N";
		else 
			has_stview = "Y";
		
		url = "rl/trapinfo.php?v=2&id=" + marker.trapID + "&o=y&stv=" + has_stview;
		if (iw_conn) 
			iw_conn.abort();
		iw_conn = new Ajax.Request(url, {
			method: 'get',
			onComplete: function(transport){
				var data = transport.responseText;
				marker.closeInfoWindow();
				if (has_stview == "Y") {
					GEvent.addListener(marker, "infowindowopen", function(){
						var pov;
						var loc;
						
						info = document.stview_small_frm.data.value.split("|");
						if (info.length == 5) {
							pov = new Object();
							pov.yaw = parseFloat(info[0]);
							pov.pitch = parseFloat(info[1]);
							pov.zoom = parseFloat(info[2]);
							loc = new GLatLng(info[3], info[4]);
						}
						else {
							pov = null;
							loc = new GLatLng(info[0], info[1]);
						}
						
						if (!stpano_ov) {
							stpano_ov = new GStreetviewPanorama($("stview_small"));
							GEvent.addListener(stpano_ov, "error", function(errorCode){
								stpano_ov.remove();
								if (errorCode == 603) {
									$("stview_small").innerHTML = "<br>You need to have flash player installed in order to view street view";
									$("stview_small_overlay").hide();
								}
							});
						}
						else 
							stpano_ov.setContainer($("stview_small"));
						stpano_ov.setLocationAndPOV(loc, pov);
					});
					GEvent.addListener(marker, "infowindowbeforeclose", function(){
						if (stpano_ov) {
							stpano_ov.remove();
							stpano_ov = null;
						}
					});
				}
				marker.openInfoWindowHtml(data, {
					maxTitle: marker.maxTitle,
					maxContent: marker.maxContent
				});
			}
		});
	});
}
function clearMarkers() {
	for(var i=0;i<shown_markers.length;i++)
	{
		map.removeOverlay(shown_markers[i]);
		shown_markers[i] = null;
	}

	shown_markers = Array();
}

function getMarkersUrl(find)
{
	var     size = map.getSize();
	var     zoom = map.getZoom();
	var 	width = size.width;
	var 	height =size.height;
	var     bounds = map.getBounds();
	var 	blat = bounds.getSouthWest().lat();
	var 	blng = bounds.getSouthWest().lng();
	var 	tlat = bounds.getNorthEast().lat();
	var	tlng = bounds.getNorthEast().lng();

	return 'rl/getmarkers.php?f='+filter+'&df='+filter_days+'&af='+filter_action+'&uf='+filter_user+'&tf='+filter_type+'&sf='+filter_state+'&lf='+filter_level+'&w='+width+'&h='+height+'&z='+zoom+(find?'&find=Y':'&blat='+blat+'&blng='+blng+'&tlat='+tlat+'&tlng='+tlng)+(filter_all?"&all=Y":"");
}

function showObjects() {
	if(map.getZoom() <= 4) trafficov.hide();
	else if(!trafficov.isHidden) trafficov.show();

	var getDataFileRequest = GXmlHttp.create();

	if(gm_conn) gm_conn.abort();
	$("loading_points").show();
	gm_conn = new Ajax.Request(getMarkersUrl(false), {
		method: 'get',
		onComplete: function(transport) {
			var xmlDoc = transport.responseXML;
			var markers = xmlDoc.documentElement.getElementsByTagName("marker");
			if (shown == true) {
				clearMarkers();
			}
			for (var i = 0; i < markers.length; i++) {
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var theIcon;
				var numvotes = markers[i].getAttribute("num");
				var maxlev = markers[i].getAttribute("maxlev");
				var objtype = parseInt(markers[i].getAttribute("type"));
				var trapid = markers[i].getAttribute("id");
				var canmove = markers[i].getAttribute('canmove');
				var status = markers[i].getAttribute('status');
				var opacity = parseInt(markers[i].getAttribute('opacity'));
				var conf = null;

                if(trapid == 0)
                {
                    if(maxlev < 2) theIcon = clustericons.g;
					else if(maxlev < 5) theIcon = clustericons.y;
					else theIcon = clustericons.r;

                    shown_markers.push(createConsolidateMarker(point,theIcon,numvotes));
                    continue;
                }
				else
				{
					if(!traps_definition[objtype]) continue; // invalid type

					objtypestr = traps_definition[objtype].name;
	                if (numvotes < 1) theIcon = traps_definition[objtype].icons.b;
	                else if(status == "N") theIcon = traps_definition[objtype].icons.n;
	                else if(status == "Q") theIcon = traps_definition[objtype].icons.k;
	                else if(status == "P") theIcon = traps_definition[objtype].icons.p;
	                else if(status == "E" && traps_definition[objtype].icons.e) theIcon = traps_definition[objtype].icons.e;
	                else if(status == "S") theIcon = traps_definition[objtype].icons.s;
			else if(status == "G" && traps_definition[objtype].icons.ag) theIcon = traps_definition[objtype].icons.ag;
			else {
                    		if (numvotes < 2) theIcon = traps_definition[objtype].icons.g;
                    		else if (numvotes < 5) theIcon = traps_definition[objtype].icons.y;
                    		else theIcon = traps_definition[objtype].icons.r;

				// check levels
				for(var l=0;l<traps_definition[objtype].levels.length;l++) {
				       if(maxlev & (1 << (traps_definition[objtype].levels[l].bit - 1))) {
					       theIcon = traps_definition[objtype].levels[l].icon;
					       conf = traps_definition[objtype].levels[l].name.toLowerCase();
				       }
				}
			}

                        // check opacity
                        if(objtype == 3 && (status == "A" || status == "G") && numvotes >= 1) {
                                if(opacity <= 25) {
                                        if (numvotes < 2) theIcon = traps_definition[objtype].icons.g_25;
                                        else if (numvotes < 5) theIcon = traps_definition[objtype].icons.o_25;
                                        else theIcon = traps_definition[objtype].icons.r_25;
                                }
                                else if(opacity <= 50) {
                                        if (numvotes < 2) theIcon = traps_definition[objtype].icons.g_50;
                                        else if (numvotes < 5) theIcon = traps_definition[objtype].icons.o_50;
                                        else theIcon = traps_definition[objtype].icons.r_50;
                                }
                                else if(opacity <= 75) {
                                        if (numvotes < 2) theIcon = traps_definition[objtype].icons.g_80;
                                        else if (numvotes < 5) theIcon = traps_definition[objtype].icons.o_80;
                                        else theIcon = traps_definition[objtype].icons.r_80;
                                }
                                                }

				}

				if(!conf) {
					if(numvotes < 1) conf = "no confidence";
					else if (numvotes < 2) conf = "low confidence";
					else if (numvotes < 5) conf = "medium confidence";
					else conf = "high confidence";
				}
				if(status == "G") conf = "expired";

				var title = '<b>'+objtypestr+'</b> - <i>'+conf+'</i>';
				var overview = buildOverviewStr();
				var content = buildContentStr();
				shown_markers.push(createMarker(point, theIcon, trapid, (canmove == "Y"), overview, title, content, status));
			}
			$("loading_points").hide();
		}
	});
	shown = true;
}

function buildOverviewStr()
{
	return '<div id="trap_overview" class="mapinfowindow"><p>Loading...</p></div>';
}

function showMoreInformations(trapid,tab,stview,stview_comment)
{
	// if tab is comment, check if we should display comment/street view (only if logged in)
	//if(isLoggedIn())
	{
		if(tab == "c")
		{
			if(stview)
			{
				stview_data = stview.split('|');
				if(stview_data.length == 5)
				{
					// display street view comment
					map.getInfoWindow().onShowContent = function () {
						bubble_view_stv(stview,stview_comment);
					};
				}
				else if(stview_data.length == 2)
				{
					// show comment box
					map.getInfoWindow().onShowContent = function () {
						bubble_show_comment(trapid,stview_data[0],stview_data[1]);
					};
				}
			}
		}
	}
	map.getInfoWindow().maximizeURL = "rl/trapinfo.php?v=2&id="+trapid+"&t="+tab;
	map.getInfoWindow().maximize();

	return false;
}

function buildContentStr()
{
	return '<div id="trap_fullinfo" class="mapfullinfowindow"><p>Loading...</p></div>';
}

function loadTrapInfo()
{
	var url = map.getInfoWindow().maximizeURL;
	GDownloadUrl(url, function(data, responseCode) {
		window.setTimeout(function () {
			if($("trap_fullinfo"))
			{
				$("trap_fullinfo").innerHTML = data;

				if(map.getInfoWindow().onShowContent)
				{
					map.getInfoWindow().onShowContent();
					map.getInfoWindow().onShowContent = null;
				}
			}
		},0);
	});
}

function showAddress(address) {
	if (geocoder) {
		geocoder.getLocations(address, function (data) {
			if(data.Status.code == 200) {
				// get the first one in the list
				var point = new GLatLng(data.Placemark[0].Point.coordinates[1],data.Placemark[0].Point.coordinates[0]);
				var m = new GMarker(point);
				GEvent.addListener(m,"infowindowclose",function () {
					map.removeOverlay(this);
				});

                                var currentZoom = map.getZoom();

				map.setCenter(point,13);
				map.addOverlay(m);
				window.setTimeout(function () {
					if(currentZoom == 13) updateMap();
					m.openInfoWindowHtml("<strong>Address:</strong><br/><br/>"+data.Placemark[0].address);
				},0);
				
			}
			else alert("Address "+address+" not found");
		});
	}
}

function goclick(address) {
	if (address == "" || address == "  ")
		alert("Please enter an address");
	else {
		abortMove();
		showAddress(address);
	}
}
function isLoggedIn() {
	return logged_in;
}

function loginclick() {
	var obj = document.getElementById("logindlg");
	obj.style.visibility = "visible";
}

function getCookieValue(cookieName) {
	var istart = document.cookie.indexOf(cookieName);
	if (istart == -1)
		return "";
	istart += cookieName.length + 1; // for the "="
	var iend = document.cookie.indexOf(";", istart);
	if (iend == -1)
		iend = document.cookie.length; // must be last cookie
	return document.cookie.substring(istart, iend);
}

function getReportURL() {
  if (isLoggedIn())
	return "reporttrap.html";
  else
	return "login.html";
}

function saveZoom() {
	//if (!isLoggedIn())
	//	return;

	var cntr = map.getCenter();
	var mtype;

	switch (map.getCurrentMapType()) {
		case G_SATELLITE_MAP:
			mtype = "s";
			break;
		case G_HYBRID_MAP:
			mtype = "h";
			break;
		default:
			mtype = "n";
	}


	document.cookie = TrapsterLatCookie + "=" + (cntr.lat()).toString() + "; domain=." + my_domain;
	document.cookie = TrapsterLngCookie + "=" + (cntr.lng()).toString() + "; domain=." + my_domain;
	document.cookie = TrapsterZoomCookie + "=" + (map.getZoom()).toString() + "; domain=." + my_domain;
	document.cookie = TrapsterTypeCookie + "=" + mtype + "; domain=." + my_domain;

	// loki cookie is permanent (1 year)
	if(document.getElementById("lokiEnabled"))
	{
		var date = new Date();
		date.setTime(date.getTime()+(365*24*60*60*1000));

		if(document.getElementById("lokiEnabled").checked) lokiCookie = "Y";
		else lokiCookie = "N";

		document.cookie = TrapsterLokiCookie + "=" + lokiCookie + "; expires=" + date.toGMTString() + "; domain=."+ my_domain;
	}
}

function toggleFS()
{
	window.open("/rl/Trapster.php?fs=Y","trapmap",'left=0,top=0,resizable,scrollbars=yes');
	return false;
}

//
// bubble helpers
//

function bubble_select_tab(tab)
{
	// disable all tabls
	$$("[rel=bubble_tab]").each(function (obj) { obj.className = "tabOff"; });
	$$("[rel=tab_content]").each(Element.hide);
	if($(tab+"_tab")) $(tab+"_tab").className = "tabOn";
	$(tab+"_content").show();

	return false;
}

function bubble_send_abuse() {
        $("abuse_message").value = trim($F("abuse_message"));

        if($F("abuse_message") == '') {
                alert("Please enter your message");
                $("abuse_message").select();
                return;
        }else {
                new Ajax.Request('abuse.php', {method:'post', postBody:Form.serialize("abuse_form"), evalScripts:true,
                        onComplete:function(r){
				alert(r.responseText);
				if (r.responseText.indexOf("success") != -1) bubble_select_tab("voters");
                        }
                });
        }
}

function bubble_enable_user() {
	var	uname = $("abuse_uname_field").value;
	var 	remove = window.confirm("Do you want to restore ALL traps and votes of the user \""+uname+"\"?");

	if(window.confirm("Are you sure you want to re-enable the user \""+uname+"\"?"+(remove?" All traps and votes of the user \""+uname+"\" will be restored!":"")))
	{
		GDownloadUrl("rl/moderators.php?cmd=enable&user="+uname+"&restore="+(remove?"Y":"N"), function(data, responseCode) {
			if (data == "OK")
			{
				window.alert("User \""+uname+"\" successfully re-enabled");
				bubble_select_tab("voters");
			}
			else window.alert(data);
		});
	}
	else window.alert("Operation ABORTED! User \""+uname+"\" was NOT re-enabled!");
}

function bubble_disable_user() {
	var	uname = $("abuse_uname_field").value;
	var 	remove = window.confirm("Do you want to remove ALL traps and votes of the user \""+uname+"\"?");

	if(window.confirm("Are you sure you want to disable the user \""+uname+"\"?"+(remove?" All traps and votes of the user \""+uname+"\" will be removed from the system!":"")))
	{
		GDownloadUrl("rl/moderators.php?cmd=disable&user="+uname+"&remove="+(remove?"Y":"N"), function(data, responseCode) {
			if (data == "OK")
			{
				window.alert("User \""+uname+"\" successfully disabled");
				bubble_select_tab("voters");
			}
			else window.alert(data);
		});
	}
	else window.alert("Operation ABORTED! User \""+uname+"\" was NOT disabled!");
}

function bubble_add_quarantine(word) {
	var	uname = $("abuse_uname_field").value;
	var 	remove = window.confirm("Do you want move all previous traps of the user \""+uname+"\" to "+word+"?");

	if(window.confirm("Are you sure you want to add the user \""+uname+"\" to "+word+"?"+(remove?" All previous traps of the user \""+uname+"\" will be moved to "+word+"!":"")))
	{
		GDownloadUrl("rl/moderators.php?cmd=aquarantine&user="+uname+"&move="+(remove?"Y":"N"), function(data, responseCode) {
			if (data == "OK")
			{
				window.alert("User successfully \""+uname+"\" added to "+word+"");
				bubble_select_tab("voters");
			}
			else window.alert(data);
		});
	}
	else window.alert("Operation ABORTED! User \""+uname+"\" was NOT added to "+word+"!");
}

function bubble_del_quarantine(word) {
	var	uname = $("abuse_uname_field").value;
	var 	remove = window.confirm("Do you want move all previous traps of the user \""+uname+"\" out of "+word+"?");

	if(window.confirm("Are you sure you want to remove the user \""+uname+"\" from "+word+"?"+(remove?" All previous traps of the user \""+uname+"\" will be moved out of "+word+"!":"")))
	{
		GDownloadUrl("rl/moderators.php?cmd=rquarantine&user="+uname+"&move="+(remove?"Y":"N"), function(data, responseCode) {
			if (data == "OK")
			{
				window.alert("User successfully \""+uname+"\" removed from "+word+"");
				bubble_select_tab("voters");
			}
			else window.alert(data);
		});
	}
	else window.alert("Operation ABORTED! User \""+uname+"\" was NOT removed from "+word+"!");
}

function bubble_send_pm() {
        $("pm_message").value = trim($F("pm_message"));
        $("pm_uname").value = trim($F("pm_uname"));

        if($F("pm_uname") == '') {
                alert("Please enter an username");
                $("pm_uname").select()
        }
        else if($F("pm_message") == '') {
                alert("Please enter your message");
                $("pm_message").select();
                return;
        }else {
                new Ajax.Request('private-messages.php', {method:'post', postBody:Form.serialize("pm_form"), evalScripts:true,
                        onComplete:function(r){
                                alert(r.responseText);

				$("pm_message").value = "";
                        }
                });
        }
}

function bubble_go_abuse(uname,max,trapid)
{
	if(max)
	{
		map.getInfoWindow().maximizeURL = "rl/trapinfo.php?id="+trapid+"&t=a&u="+uname;
		map.getInfoWindow().maximize();
	}
	else
	{
		// clear abuse
		$("abuse_content").innerHTML = "Loading...";
		bubble_select_tab("abuse");

		GDownloadUrl("rl/userinfo.php?t="+trapid+"&u="+uname,function(data,responseCode) {
			$("abuse_content").innerHTML = data;
		});
	}

	return false;
}

function bubble_go_pm(uname,max,trapid)
{
	if(max)
	{
		map.getInfoWindow().maximizeURL = "rl/trapinfo.php?id="+trapid+"&t=p&u="+uname;
		map.getInfoWindow().maximize();
	}
	else
	{
		bubble_select_tab("pm");
		if (isLoggedIn()) {
			$("pm_uname").value = uname;
			$("pm_message").value = "";
			$("pm_message").select();
		}
	}

	return false;
}

function bubble_send_comment(trapid) {
        $("comment_msg").value = trim($F("comment_msg"));
        if($F("comment_msg") == '') {
                alert("Please enter your comment");
                $("comment_msg").select();
                return;
        }else {
		// attach stview, if requested
		bubble_do_attach_stv();

                new Ajax.Request('rl/comments_post.php', {method:'post', postBody:Form.serialize("comments_form"), evalScripts:true,
                        onComplete:function(r){
				if (r.responseText.indexOf("posted") == -1) alert(r.responseText);
				else 
				{
					bubble_close_stv();

					map.getInfoWindow().maximizeURL = "rl/trapinfo.php?id="+trapid+"&t=c";
					loadTrapInfo();
				}
                        }
                });
        }
}

function bubble_show_vote(up,trapid,traptype)
{
	if(!isLoggedIn())
	{
		alert("You must be logged in to rate this trap");
		return false;
	}

	if(moderator < 5) {
		if($("bubble_overview")) $("bubble_overview").hide();
		if($("bubble_fullview")) $("bubble_fullview").hide();
		$("voteconfirm").show();
		$("votebutton").onclick = function (ev) { return bubble_vote(up,trapid); };
		$("votetext").innerHTML = "To the best of my knowledge there <b>"+(up?"IS":"ISN'T")+"</b> a valid trap of type '<i>"+traptype+"</i>' at this location.";
	}
	else return bubble_vote(up,trapid);

	return false;
}

function bubble_vote(up,trapid)
{
        var vote;

	if(up) vote = "Y";
	else vote = "N";

	var url = "rl/vote.php?id="+trapid+"&vote="+vote;
	GDownloadUrl(url, function(data, responseCode) {
		if (data.indexOf("OK") == -1) {
			alert(data);
			$("voteconfirm").hide();
			if ($("bubble_overview")) 
				$("bubble_overview").show();
			if ($("bubble_fullview")) 
				$("bubble_fullview").show();
		}
		else {
			map.getInfoWindow().hide();
			updateMap();
		}
	});

	return false;
}

function bubble_show_comment(trapid,lat,lng)
{
	// prepare screen
	$("new_comment_form").show();
	$("attach_stview_row").hide();
	$("ckb_attach_stview").checked = false;
	$("stv_close").hide();
	$("streetview").hide();
	$("bubble_fullview").hide();
	$("new_comment_streetview").show();

	// show loading message
	$("streetview_error").innerHTML = "Loading street view...";	
	$("streetview_error").show();
	
	var latlng = new GLatLng(lat,lng);
	// check if SV is avaibale
	stview.getNearestPanorama(latlng,function (data) {
		if(data.code != 200) 
		{
			if(data.code == 500) $("streetview_error").innerHTML = "There was a problem opening street view for this location";
			else $("streetview_error").innerHTML = "There's no street view available at this location";
		}
		else
		{
			// show street view
			$("streetview_error").hide();
			$("streetview").className = "stv_attach";
			$("streetview").show();
			$("attach_stview_row").show();
	
			pov = data.location.pov;
			loc = data.location.latlng;

			stpano = new GStreetviewPanorama($("streetview"));
			GEvent.addListener(stpano,"error",handle_comment_stv_error);
			GEvent.addListener(stpano,"initialized",function (l) { stpano_loc = l.latlng; });
			stpano_loc = loc;
			stpano.setLocationAndPOV(loc,pov);
		}
	});
	
	return false;
}
function handle_comment_stv_error(errorCode)
{
	if(errorCode == 603)
	{
		$("streetview").hide();
		$("streetview_error").innerHTML = "You need to have flash player installed in order to view street view";
		$("streetview_error").show();
	}
}

function bubble_cancel_comment()
{
	return bubble_close_stv();
}

function bubble_view_stv(info,comment)
{
	// prepare screen
	$("new_comment_form").hide();
	$("stv_close").show();
	$("bubble_fullview").hide();
	$("new_comment_streetview").show();

	$("streetview").className = "stv_view";
	$("streetview").show();

	$("streetview_error").innerHTML = comment;
	$("streetview_error").show();

	info = info.split("|");

	var pov = new Object();
	pov.yaw = parseFloat(info[0]);
	pov.pitch = parseFloat(info[1]);
	pov.zoom = parseFloat(info[2]);

	var loc = new GLatLng(info[3],info[4]);

	stpano = new GStreetviewPanorama($("streetview"));
	GEvent.addListener(stpano,"error",handle_comment_stv_error);
	stpano.setLocationAndPOV(loc,pov);

	return false;
}

function bubble_do_attach_stv()
{
	if(stpano && $("ckb_attach_stview").checked)
	{
		var	pov = stpano.getPOV();

		$("attached_stview").value = pov.yaw+"|"+pov.pitch+"|"+pov.zoom+"|"+stpano_loc.lat()+"|"+stpano_loc.lng();
	}
}

function bubble_close_stv()
{
	if(stpano)
	{
		stpano.remove();
		stpano = null;
		stpano_loc = null;
	}

	$("new_comment_streetview").hide();
	$("bubble_fullview").show();

	return false;
}

function bubble_changeTrapType(id,ctype)
{
	var	ntype = $("new_trap_type").value;
	var	ntname = $("new_trap_type").options[$("new_trap_type").selectedIndex].innerHTML;

	if(ctype == ntype) alert("This trap is already of type \""+ntname+"\"");
	else
	{
		if(window.confirm("Are you sure you want to change this trap type to \""+ntname+"\"?"))
		{
			GDownloadUrl("rl/moderators.php?cmd=traptype&trapid="+id+"&type="+ntype, function(data, responseCode) {
				if (data == "OK")
				{
					window.alert("Trap type successfully changed!");
					updateMap();
				}
				else window.alert(data);
			});
		}
	}
}

function bubble_del_vote(id,user)
{
	if(window.confirm("Are you sure you want to delete this vote?"))
	{
		GDownloadUrl("rl/moderators.php?cmd=delvote&trapid="+id+"&user="+user, function(data, responseCode) {
			if (data == "OK")
			{
				window.alert("Vote successfully deleted!");
				updateMap();
			}
			else window.alert(data);
		});
	}

	return false;
}

function bubble_approve_trap(id)
{
	if((moderator >= 5) || window.confirm("Are you sure you want to approve this trap?"))
	{
		GDownloadUrl("rl/moderators.php?cmd=approvetrap&trapid="+id, function(data, responseCode) {
			if(data == "OK")
			{
				if(moderator < 5) window.alert("Trap successfully approved!");
				updateMap();
			}
			else window.alert(data);
		});
	}
}

function bubble_quarantine_trap(id){
	if (window.confirm("Are you sure you want to move this trap to probation?")) {
		GDownloadUrl("rl/moderators.php?cmd=quarantinetrap&trapid=" + id, function(data, responseCode){
			if (data == "OK") {
				window.alert("Trap successfully moved to probation!");
				updateMap();
			}
			else 
				window.alert(data);
		});
	}
}

function bubble_undelete_trap(id){
	if (window.confirm("Are you sure you want to un-delete this trap?")) {
		GDownloadUrl("rl/moderators.php?cmd=undeltrap&trapid=" + id, function(data, responseCode){
			if (data == "OK") {
				window.alert("Trap successfully un-deleted!");
				updateMap();
			}
			else 
				window.alert(data);
		});
	}
}
