WP Google Map Plugin - Version 3.0.8

Version Description

Download this release

Release Info

Developer flippercode
Plugin Icon 128x128 WP Google Map Plugin
Version 3.0.8
Comparing to
See all releases

Version 3.0.8

Files changed (559) hide show
  1. assets/css/backend.css +716 -0
  2. assets/css/bootstrap.min.flat.css +8389 -0
  3. assets/css/fonts/icomoon.eot +0 -0
  4. assets/css/fonts/icomoon.svg +15 -0
  5. assets/css/fonts/icomoon.ttf +0 -0
  6. assets/css/fonts/icomoon.woff +0 -0
  7. assets/css/frontend.css +19 -0
  8. assets/images/default_marker.png +0 -0
  9. assets/images/grid.png +0 -0
  10. assets/images/helpdesk.png +0 -0
  11. assets/images/icons/accident.png +0 -0
  12. assets/images/icons/administration.png +0 -0
  13. assets/images/icons/aestheticscenter.png +0 -0
  14. assets/images/icons/agriculture.png +0 -0
  15. assets/images/icons/agriculture2.png +0 -0
  16. assets/images/icons/agriculture3.png +0 -0
  17. assets/images/icons/agriculture4.png +0 -0
  18. assets/images/icons/aircraft-small.png +0 -0
  19. assets/images/icons/airplane-sport.png +0 -0
  20. assets/images/icons/airplane-tourism.png +0 -0
  21. assets/images/icons/airport-apron.png +0 -0
  22. assets/images/icons/airport-runway.png +0 -0
  23. assets/images/icons/airport-terminal.png +0 -0
  24. assets/images/icons/airport.png +0 -0
  25. assets/images/icons/amphitheater-tourism.png +0 -0
  26. assets/images/icons/amphitheater.png +0 -0
  27. assets/images/icons/ancientmonument.png +0 -0
  28. assets/images/icons/ancienttemple.png +0 -0
  29. assets/images/icons/ancienttempleruin.png +0 -0
  30. assets/images/icons/animals.png +0 -0
  31. assets/images/icons/anniversary.png +0 -0
  32. assets/images/icons/apartment.png +0 -0
  33. assets/images/icons/aquarium.png +0 -0
  34. assets/images/icons/arch.png +0 -0
  35. assets/images/icons/archery.png +0 -0
  36. assets/images/icons/artgallery.png +0 -0
  37. assets/images/icons/atm.png +0 -0
  38. assets/images/icons/atv.png +0 -0
  39. assets/images/icons/audio.png +0 -0
  40. assets/images/icons/australianfootball.png +0 -0
  41. assets/images/icons/bags.png +0 -0
  42. assets/images/icons/bank.png +0 -0
  43. assets/images/icons/bankeuro.png +0 -0
  44. assets/images/icons/bankpound.png +0 -0
  45. assets/images/icons/bar.png +0 -0
  46. assets/images/icons/baseball.png +0 -0
  47. assets/images/icons/basketball.png +0 -0
  48. assets/images/icons/baskteball2.png +0 -0
  49. assets/images/icons/beach.png +0 -0
  50. assets/images/icons/beautiful.png +0 -0
  51. assets/images/icons/bench.png +0 -0
  52. assets/images/icons/bicycleparking.png +0 -0
  53. assets/images/icons/bigcity.png +0 -0
  54. assets/images/icons/billiard.png +0 -0
  55. assets/images/icons/bobsleigh.png +0 -0
  56. assets/images/icons/bomb.png +0 -0
  57. assets/images/icons/bookstore.png +0 -0
  58. assets/images/icons/bowling.png +0 -0
  59. assets/images/icons/boxing.png +0 -0
  60. assets/images/icons/bread.png +0 -0
  61. assets/images/icons/bridge.png +0 -0
  62. assets/images/icons/bridgemodern.png +0 -0
  63. assets/images/icons/bullfight.png +0 -0
  64. assets/images/icons/bungalow.png +0 -0
  65. assets/images/icons/bus.png +0 -0
  66. assets/images/icons/butcher.png +0 -0
  67. assets/images/icons/cabin.png +0 -0
  68. assets/images/icons/cablecar.png +0 -0
  69. assets/images/icons/camping.png +0 -0
  70. assets/images/icons/campingsite.png +0 -0
  71. assets/images/icons/canoe.png +0 -0
  72. assets/images/icons/car.png +0 -0
  73. assets/images/icons/carrental.png +0 -0
  74. assets/images/icons/carrepair.png +0 -0
  75. assets/images/icons/carwash.png +0 -0
  76. assets/images/icons/casino.png +0 -0
  77. assets/images/icons/castle.png +0 -0
  78. assets/images/icons/cathedral.png +0 -0
  79. assets/images/icons/cathedral2.png +0 -0
  80. assets/images/icons/cave.png +0 -0
  81. assets/images/icons/cemetary.png +0 -0
  82. assets/images/icons/chapel.png +0 -0
  83. assets/images/icons/church.png +0 -0
  84. assets/images/icons/church2.png +0 -0
  85. assets/images/icons/cinema.png +0 -0
  86. assets/images/icons/circus.png +0 -0
  87. assets/images/icons/citysquare.png +0 -0
  88. assets/images/icons/climbing.png +0 -0
  89. assets/images/icons/clothes-female.png +0 -0
  90. assets/images/icons/clothes-male.png +0 -0
  91. assets/images/icons/clothes.png +0 -0
  92. assets/images/icons/clouds.png +0 -0
  93. assets/images/icons/cloudsun.png +0 -0
  94. assets/images/icons/club.png +0 -0
  95. assets/images/icons/cluster.png +0 -0
  96. assets/images/icons/cluster2.png +0 -0
  97. assets/images/icons/cluster3.png +0 -0
  98. assets/images/icons/cluster4.png +0 -0
  99. assets/images/icons/cluster5.png +0 -0
  100. assets/images/icons/cocktail.png +0 -0
  101. assets/images/icons/coffee.png +0 -0
  102. assets/images/icons/communitycentre.png +0 -0
  103. assets/images/icons/company.png +0 -0
  104. assets/images/icons/computer.png +0 -0
  105. assets/images/icons/concessionaire.png +0 -0
  106. assets/images/icons/conference.png +0 -0
  107. assets/images/icons/construction.png +0 -0
  108. assets/images/icons/convenience.png +0 -0
  109. assets/images/icons/convent.png +0 -0
  110. assets/images/icons/corral.png +0 -0
  111. assets/images/icons/country.png +0 -0
  112. assets/images/icons/court.png +0 -0
  113. assets/images/icons/cricket.png +0 -0
  114. assets/images/icons/cross.png +0 -0
  115. assets/images/icons/crossingguard.png +0 -0
  116. assets/images/icons/cruise.png +0 -0
  117. assets/images/icons/currencyexchange.png +0 -0
  118. assets/images/icons/customs.png +0 -0
  119. assets/images/icons/cycling.png +0 -0
  120. assets/images/icons/cyclingfeedarea.png +0 -0
  121. assets/images/icons/cyclingmountain1.png +0 -0
  122. assets/images/icons/cyclingmountain2.png +0 -0
  123. assets/images/icons/cyclingmountain3.png +0 -0
  124. assets/images/icons/cyclingmountain4.png +0 -0
  125. assets/images/icons/cyclingmountainnotrated.png +0 -0
  126. assets/images/icons/cyclingsport.png +0 -0
  127. assets/images/icons/cyclingsprint.png +0 -0
  128. assets/images/icons/cyclinguncategorized.png +0 -0
  129. assets/images/icons/dam.png +0 -0
  130. assets/images/icons/dancinghall.png +0 -0
  131. assets/images/icons/dates.png +0 -0
  132. assets/images/icons/daycare.png +0 -0
  133. assets/images/icons/days-dim.png +0 -0
  134. assets/images/icons/days-dom.png +0 -0
  135. assets/images/icons/days-jeu.png +0 -0
  136. assets/images/icons/days-jue.png +0 -0
  137. assets/images/icons/days-lun.png +0 -0
  138. assets/images/icons/days-mar.png +0 -0
  139. assets/images/icons/days-mer.png +0 -0
  140. assets/images/icons/days-mie.png +0 -0
  141. assets/images/icons/days-qua.png +0 -0
  142. assets/images/icons/days-qui.png +0 -0
  143. assets/images/icons/days-sab.png +0 -0
  144. assets/images/icons/days-sam.png +0 -0
  145. assets/images/icons/days-seg.png +0 -0
  146. assets/images/icons/days-sex.png +0 -0
  147. assets/images/icons/days-ter.png +0 -0
  148. assets/images/icons/days-ven.png +0 -0
  149. assets/images/icons/days-vie.png +0 -0
  150. assets/images/icons/dentist.png +0 -0
  151. assets/images/icons/deptstore.png +0 -0
  152. assets/images/icons/disability.png +0 -0
  153. assets/images/icons/disabledparking.png +0 -0
  154. assets/images/icons/diving.png +0 -0
  155. assets/images/icons/doctor.png +0 -0
  156. assets/images/icons/dog-leash.png +0 -0
  157. assets/images/icons/dog-offleash.png +0 -0
  158. assets/images/icons/door.png +0 -0
  159. assets/images/icons/down.png +0 -0
  160. assets/images/icons/downleft.png +0 -0
  161. assets/images/icons/downright.png +0 -0
  162. assets/images/icons/downthenleft.png +0 -0
  163. assets/images/icons/downthenright.png +0 -0
  164. assets/images/icons/drinkingfountain.png +0 -0
  165. assets/images/icons/drinkingwater.png +0 -0
  166. assets/images/icons/drugs.png +0 -0
  167. assets/images/icons/elevator.png +0 -0
  168. assets/images/icons/embassy.png +0 -0
  169. assets/images/icons/entrance.png +0 -0
  170. assets/images/icons/escalator-down.png +0 -0
  171. assets/images/icons/escalator-up.png +0 -0
  172. assets/images/icons/exit.png +0 -0
  173. assets/images/icons/expert.png +0 -0
  174. assets/images/icons/explosion.png +0 -0
  175. assets/images/icons/factory.png +0 -0
  176. assets/images/icons/fallingrocks.png +0 -0
  177. assets/images/icons/family.png +0 -0
  178. assets/images/icons/farm.png +0 -0
  179. assets/images/icons/fastfood.png +0 -0
  180. assets/images/icons/festival.png +0 -0
  181. assets/images/icons/findajob.png +0 -0
  182. assets/images/icons/findjob.png +0 -0
  183. assets/images/icons/fire-extinguisher.png +0 -0
  184. assets/images/icons/fire.png +0 -0
  185. assets/images/icons/firemen.png +0 -0
  186. assets/images/icons/fireworks.png +0 -0
  187. assets/images/icons/firstaid.png +0 -0
  188. assets/images/icons/fishing.png +0 -0
  189. assets/images/icons/fishingshop.png +0 -0
  190. assets/images/icons/fitnesscenter.png +0 -0
  191. assets/images/icons/fjord.png +0 -0
  192. assets/images/icons/flood.png +0 -0
  193. assets/images/icons/flowers.png +0 -0
  194. assets/images/icons/followpath.png +0 -0
  195. assets/images/icons/foodtruck.png +0 -0
  196. assets/images/icons/forest.png +0 -0
  197. assets/images/icons/fortress.png +0 -0
  198. assets/images/icons/fossils.png +0 -0
  199. assets/images/icons/fountain.png +0 -0
  200. assets/images/icons/friday.png +0 -0
  201. assets/images/icons/friends.png +0 -0
  202. assets/images/icons/garden.png +0 -0
  203. assets/images/icons/gateswalls.png +0 -0
  204. assets/images/icons/gazstation.png +0 -0
  205. assets/images/icons/geyser.png +0 -0
  206. assets/images/icons/gifts.png +0 -0
  207. assets/images/icons/girlfriend.png +0 -0
  208. assets/images/icons/glacier.png +0 -0
  209. assets/images/icons/golf.png +0 -0
  210. assets/images/icons/gondola.png +0 -0
  211. assets/images/icons/google-map-default-icon.png +0 -0
  212. assets/images/icons/gourmet.png +0 -0
  213. assets/images/icons/grocery.png +0 -0
  214. assets/images/icons/gun.png +0 -0
  215. assets/images/icons/gym.png +0 -0
  216. assets/images/icons/hairsalon.png +0 -0
  217. assets/images/icons/handball.png +0 -0
  218. assets/images/icons/hanggliding.png +0 -0
  219. assets/images/icons/hats.png +0 -0
  220. assets/images/icons/headstone.png +0 -0
  221. assets/images/icons/headstonejewish.png +0 -0
  222. assets/images/icons/helicopter.png +0 -0
  223. assets/images/icons/highway.png +0 -0
  224. assets/images/icons/hiking-tourism.png +0 -0
  225. assets/images/icons/hiking.png +0 -0
  226. assets/images/icons/historicalquarter.png +0 -0
  227. assets/images/icons/home.png +0 -0
  228. assets/images/icons/horseriding.png +0 -0
  229. assets/images/icons/hospital.png +0 -0
  230. assets/images/icons/hostel.png +0 -0
  231. assets/images/icons/hotairballoon.png +0 -0
  232. assets/images/icons/hotel.png +0 -0
  233. assets/images/icons/hotel1star.png +0 -0
  234. assets/images/icons/hotel2stars.png +0 -0
  235. assets/images/icons/hotel3stars.png +0 -0
  236. assets/images/icons/hotel4stars.png +0 -0
  237. assets/images/icons/hotel5stars.png +0 -0
  238. assets/images/icons/hunting.png +0 -0
  239. assets/images/icons/icecream.png +0 -0
  240. assets/images/icons/icehockey.png +0 -0
  241. assets/images/icons/iceskating.png +0 -0
  242. assets/images/icons/info.png +0 -0
  243. assets/images/icons/jewelry.png +0 -0
  244. assets/images/icons/jewishquarter.png +0 -0
  245. assets/images/icons/jogging.png +0 -0
  246. assets/images/icons/judo.png +0 -0
  247. assets/images/icons/justice.png +0 -0
  248. assets/images/icons/karate.png +0 -0
  249. assets/images/icons/karting.png +0 -0
  250. assets/images/icons/kayak.png +0 -0
  251. assets/images/icons/laboratory.png +0 -0
  252. assets/images/icons/lake.png +0 -0
  253. assets/images/icons/laundromat.png +0 -0
  254. assets/images/icons/left.png +0 -0
  255. assets/images/icons/leftthendown.png +0 -0
  256. assets/images/icons/leftthenup.png +0 -0
  257. assets/images/icons/library.png +0 -0
  258. assets/images/icons/lighthouse.png +0 -0
  259. assets/images/icons/liquor.png +0 -0
  260. assets/images/icons/lock.png +0 -0
  261. assets/images/icons/lockerrental.png +0 -0
  262. assets/images/icons/magicshow.png +0 -0
  263. assets/images/icons/mainroad.png +0 -0
  264. assets/images/icons/massage.png +0 -0
  265. assets/images/icons/military.png +0 -0
  266. assets/images/icons/mine.png +0 -0
  267. assets/images/icons/mobilephonetower.png +0 -0
  268. assets/images/icons/modernmonument.png +0 -0
  269. assets/images/icons/moderntower.png +0 -0
  270. assets/images/icons/monastery.png +0 -0
  271. assets/images/icons/monday.png +0 -0
  272. assets/images/icons/monument.png +0 -0
  273. assets/images/icons/mosque.png +0 -0
  274. assets/images/icons/motorbike.png +0 -0
  275. assets/images/icons/motorcycle.png +0 -0
  276. assets/images/icons/movierental.png +0 -0
  277. assets/images/icons/museum-archeological.png +0 -0
  278. assets/images/icons/museum-art.png +0 -0
  279. assets/images/icons/museum-crafts.png +0 -0
  280. assets/images/icons/museum-historical.png +0 -0
  281. assets/images/icons/museum-naval.png +0 -0
  282. assets/images/icons/museum-science.png +0 -0
  283. assets/images/icons/museum-war.png +0 -0
  284. assets/images/icons/museum.png +0 -0
  285. assets/images/icons/music-classical.png +0 -0
  286. assets/images/icons/music-hiphop.png +0 -0
  287. assets/images/icons/music-live.png +0 -0
  288. assets/images/icons/music-rock.png +0 -0
  289. assets/images/icons/music.png +0 -0
  290. assets/images/icons/nanny.png +0 -0
  291. assets/images/icons/newsagent.png +0 -0
  292. assets/images/icons/nordicski.png +0 -0
  293. assets/images/icons/nursery.png +0 -0
  294. assets/images/icons/observatory.png +0 -0
  295. assets/images/icons/oilpumpjack.png +0 -0
  296. assets/images/icons/olympicsite.png +0 -0
  297. assets/images/icons/ophthalmologist.png +0 -0
  298. assets/images/icons/pagoda.png +0 -0
  299. assets/images/icons/paint.png +0 -0
  300. assets/images/icons/palace.png +0 -0
  301. assets/images/icons/panoramic.png +0 -0
  302. assets/images/icons/panoramic180.png +0 -0
  303. assets/images/icons/park-urban.png +0 -0
  304. assets/images/icons/park.png +0 -0
  305. assets/images/icons/parkandride.png +0 -0
  306. assets/images/icons/parking.png +0 -0
  307. assets/images/icons/party.png +0 -0
  308. assets/images/icons/patisserie.png +0 -0
  309. assets/images/icons/pedestriancrossing.png +0 -0
  310. assets/images/icons/pens.png +0 -0
  311. assets/images/icons/perfumery.png +0 -0
  312. assets/images/icons/personalwatercraft.png +0 -0
  313. assets/images/icons/petroglyphs.png +0 -0
  314. assets/images/icons/pets.png +0 -0
  315. assets/images/icons/phones.png +0 -0
  316. assets/images/icons/photo.png +0 -0
  317. assets/images/icons/photodown.png +0 -0
  318. assets/images/icons/photodownleft.png +0 -0
  319. assets/images/icons/photodownright.png +0 -0
  320. assets/images/icons/photography.png +0 -0
  321. assets/images/icons/photoleft.png +0 -0
  322. assets/images/icons/photoright.png +0 -0
  323. assets/images/icons/photoup.png +0 -0
  324. assets/images/icons/photoupleft.png +0 -0
  325. assets/images/icons/photoupright.png +0 -0
  326. assets/images/icons/picnic.png +0 -0
  327. assets/images/icons/pin_blue.png +0 -0
  328. assets/images/icons/pin_green.png +0 -0
  329. assets/images/icons/pizza.png +0 -0
  330. assets/images/icons/places-unvisited.png +0 -0
  331. assets/images/icons/places-visited.png +0 -0
  332. assets/images/icons/planecrash.png +0 -0
  333. assets/images/icons/playground.png +0 -0
  334. assets/images/icons/poker.png +0 -0
  335. assets/images/icons/police.png +0 -0
  336. assets/images/icons/police2.png +0 -0
  337. assets/images/icons/pool-indoor.png +0 -0
  338. assets/images/icons/pool.png +0 -0
  339. assets/images/icons/port.png +0 -0
  340. assets/images/icons/postal.png +0 -0
  341. assets/images/icons/powerlinepole.png +0 -0
  342. assets/images/icons/powerplant.png +0 -0
  343. assets/images/icons/powersubstation.png +0 -0
  344. assets/images/icons/prison.png +0 -0
  345. assets/images/icons/publicart.png +0 -0
  346. assets/images/icons/racing.png +0 -0
  347. assets/images/icons/radiation.png +0 -0
  348. assets/images/icons/rain.png +0 -0
  349. assets/images/icons/rattlesnake.png +0 -0
  350. assets/images/icons/realestate.png +0 -0
  351. assets/images/icons/recycle.png +0 -0
  352. assets/images/icons/regroup.png +0 -0
  353. assets/images/icons/resort.png +0 -0
  354. assets/images/icons/restaurant-barbecue.png +0 -0
  355. assets/images/icons/restaurant-buffet.png +0 -0
  356. assets/images/icons/restaurant-fish.png +0 -0
  357. assets/images/icons/restaurant-romantic.png +0 -0
  358. assets/images/icons/restaurant.png +0 -0
  359. assets/images/icons/restaurantafrican.png +0 -0
  360. assets/images/icons/restaurantchinese.png +0 -0
  361. assets/images/icons/restaurantfishchips.png +0 -0
  362. assets/images/icons/restaurantgourmet.png +0 -0
  363. assets/images/icons/restaurantgreek.png +0 -0
  364. assets/images/icons/restaurantindian.png +0 -0
  365. assets/images/icons/restaurantitalian.png +0 -0
  366. assets/images/icons/restaurantjapanese.png +0 -0
  367. assets/images/icons/restaurantkebab.png +0 -0
  368. assets/images/icons/restaurantkorean.png +0 -0
  369. assets/images/icons/restaurantmediterranean.png +0 -0
  370. assets/images/icons/restaurantmexican.png +0 -0
  371. assets/images/icons/restaurantthai.png +0 -0
  372. assets/images/icons/restaurantturkish.png +0 -0
  373. assets/images/icons/revolution.png +0 -0
  374. assets/images/icons/right.png +0 -0
  375. assets/images/icons/rightthendown.png +0 -0
  376. assets/images/icons/rightthenup.png +0 -0
  377. assets/images/icons/riparian.png +0 -0
  378. assets/images/icons/ropescourse.png +0 -0
  379. assets/images/icons/rowboat.png +0 -0
  380. assets/images/icons/rugby.png +0 -0
  381. assets/images/icons/ruins.png +0 -0
  382. assets/images/icons/sailboat-sport.png +0 -0
  383. assets/images/icons/sailboat-tourism.png +0 -0
  384. assets/images/icons/sailboat.png +0 -0
  385. assets/images/icons/satursday.png +0 -0
  386. assets/images/icons/sauna.png +0 -0
  387. assets/images/icons/school.png +0 -0
  388. assets/images/icons/schrink.png +0 -0
  389. assets/images/icons/sciencecenter.png +0 -0
  390. assets/images/icons/seals.png +0 -0
  391. assets/images/icons/seniorsite.png +0 -0
  392. assets/images/icons/shelter-picnic.png +0 -0
  393. assets/images/icons/shelter-sleeping.png +0 -0
  394. assets/images/icons/shoes.png +0 -0
  395. assets/images/icons/shoppingmall.png +0 -0
  396. assets/images/icons/shore.png +0 -0
  397. assets/images/icons/shower.png +0 -0
  398. assets/images/icons/sight.png +0 -0
  399. assets/images/icons/skateboarding.png +0 -0
  400. assets/images/icons/skiing.png +0 -0
  401. assets/images/icons/skijump.png +0 -0
  402. assets/images/icons/skilift.png +0 -0
  403. assets/images/icons/smallcity.png +0 -0
  404. assets/images/icons/smokingarea.png +0 -0
  405. assets/images/icons/sneakers.png +0 -0
  406. assets/images/icons/snow.png +0 -0
  407. assets/images/icons/snowboarding.png +0 -0
  408. assets/images/icons/snowmobiling.png +0 -0
  409. assets/images/icons/snowshoeing.png +0 -0
  410. assets/images/icons/soccer.png +0 -0
  411. assets/images/icons/soccer2.png +0 -0
  412. assets/images/icons/spaceport.png +0 -0
  413. assets/images/icons/speed100.png +0 -0
  414. assets/images/icons/speed110.png +0 -0
  415. assets/images/icons/speed120.png +0 -0
  416. assets/images/icons/speed130.png +0 -0
  417. assets/images/icons/speed20.png +0 -0
  418. assets/images/icons/speed30.png +0 -0
  419. assets/images/icons/speed40.png +0 -0
  420. assets/images/icons/speed50.png +0 -0
  421. assets/images/icons/speed60.png +0 -0
  422. assets/images/icons/speed70.png +0 -0
  423. assets/images/icons/speed80.png +0 -0
  424. assets/images/icons/speed90.png +0 -0
  425. assets/images/icons/speedhump.png +0 -0
  426. assets/images/icons/spelunking.png +0 -0
  427. assets/images/icons/stadium.png +0 -0
  428. assets/images/icons/statue.png +0 -0
  429. assets/images/icons/steamtrain.png +0 -0
  430. assets/images/icons/stop.png +0 -0
  431. assets/images/icons/stoplight.png +0 -0
  432. assets/images/icons/strike.png +0 -0
  433. assets/images/icons/strike1.png +0 -0
  434. assets/images/icons/subway.png +0 -0
  435. assets/images/icons/sun.png +0 -0
  436. assets/images/icons/sunday.png +0 -0
  437. assets/images/icons/supermarket.png +0 -0
  438. assets/images/icons/surfing.png +0 -0
  439. assets/images/icons/suv.png +0 -0
  440. assets/images/icons/synagogue.png +0 -0
  441. assets/images/icons/tailor.png +0 -0
  442. assets/images/icons/tapas.png +0 -0
  443. assets/images/icons/taxi.png +0 -0
  444. assets/images/icons/taxiway.png +0 -0
  445. assets/images/icons/teahouse.png +0 -0
  446. assets/images/icons/telephone.png +0 -0
  447. assets/images/icons/templehindu.png +0 -0
  448. assets/images/icons/tennis.png +0 -0
  449. assets/images/icons/tennis2.png +0 -0
  450. assets/images/icons/tent.png +0 -0
  451. assets/images/icons/terrace.png +0 -0
  452. assets/images/icons/text.png +0 -0
  453. assets/images/icons/textiles.png +0 -0
  454. assets/images/icons/theater.png +0 -0
  455. assets/images/icons/themepark.png +0 -0
  456. assets/images/icons/thunder.png +0 -0
  457. assets/images/icons/thursday.png +0 -0
  458. assets/images/icons/toilets.png +0 -0
  459. assets/images/icons/tollstation.png +0 -0
  460. assets/images/icons/tools.png +0 -0
  461. assets/images/icons/tower.png +0 -0
  462. assets/images/icons/toys.png +0 -0
  463. assets/images/icons/trafficenforcementcamera.png +0 -0
  464. assets/images/icons/train.png +0 -0
  465. assets/images/icons/tram.png +0 -0
  466. assets/images/icons/trash.png +0 -0
  467. assets/images/icons/truck.png +0 -0
  468. assets/images/icons/tuesday.png +0 -0
  469. assets/images/icons/tunnel.png +0 -0
  470. assets/images/icons/turnleft.png +0 -0
  471. assets/images/icons/turnright.png +0 -0
  472. assets/images/icons/university.png +0 -0
  473. assets/images/icons/up.png +0 -0
  474. assets/images/icons/upleft.png +0 -0
  475. assets/images/icons/upright.png +0 -0
  476. assets/images/icons/upthenleft.png +0 -0
  477. assets/images/icons/upthenright.png +0 -0
  478. assets/images/icons/usfootball.png +0 -0
  479. assets/images/icons/vespa.png +0 -0
  480. assets/images/icons/vet.png +0 -0
  481. assets/images/icons/video.png +0 -0
  482. assets/images/icons/videogames.png +0 -0
  483. assets/images/icons/villa-tourism.png +0 -0
  484. assets/images/icons/villa.png +0 -0
  485. assets/images/icons/waitingroom.png +0 -0
  486. assets/images/icons/water.png +0 -0
  487. assets/images/icons/waterfall.png +0 -0
  488. assets/images/icons/watermill.png +0 -0
  489. assets/images/icons/waterpark.png +0 -0
  490. assets/images/icons/waterskiing.png +0 -0
  491. assets/images/icons/watertower.png +0 -0
  492. assets/images/icons/waterwell.png +0 -0
  493. assets/images/icons/waterwellpump.png +0 -0
  494. assets/images/icons/wedding.png +0 -0
  495. assets/images/icons/wednesday.png +0 -0
  496. assets/images/icons/wetland.png +0 -0
  497. assets/images/icons/white1.png +0 -0
  498. assets/images/icons/white20.png +0 -0
  499. assets/images/icons/wifi.png +0 -0
  500. assets/images/icons/windmill.png +0 -0
  501. assets/images/icons/windsurfing.png +0 -0
  502. assets/images/icons/windturbine.png +0 -0
  503. assets/images/icons/winery.png +0 -0
  504. assets/images/icons/wineyard.png +0 -0
  505. assets/images/icons/workoffice.png +0 -0
  506. assets/images/icons/world.png +0 -0
  507. assets/images/icons/worldheritagesite.png +0 -0
  508. assets/images/icons/yoga.png +0 -0
  509. assets/images/icons/youthhostel.png +0 -0
  510. assets/images/icons/zipline.png +0 -0
  511. assets/images/icons/zoo.png +0 -0
  512. assets/images/list.png +0 -0
  513. assets/images/loader.gif +0 -0
  514. assets/images/nav.png +0 -0
  515. assets/images/print.png +0 -0
  516. assets/images/sort_asc.png +0 -0
  517. assets/images/sort_asc_disabled.png +0 -0
  518. assets/images/sort_both.png +0 -0
  519. assets/images/sort_desc.png +0 -0
  520. assets/images/sort_desc_disabled.png +0 -0
  521. assets/images/wpgmp-toggle-sprite.png +0 -0
  522. assets/js/backend.js +4 -0
  523. assets/js/maps.js +307 -0
  524. core/abstract.factory.php +24 -0
  525. core/class.controller-factory.php +42 -0
  526. core/class.controller.php +178 -0
  527. core/class.database.php +86 -0
  528. core/class.map-widget.php +96 -0
  529. core/class.model-factory.php +42 -0
  530. core/class.model.php +323 -0
  531. core/class.tabular.php +743 -0
  532. core/class.template.php +844 -0
  533. core/class.validation.php +793 -0
  534. lang/wp-google-map-plugin-en_US.mo +0 -0
  535. lang/wp-google-map-plugin-en_US.po +937 -0
  536. modules/group_map/model.group_map.php +141 -0
  537. modules/group_map/views/form.php +85 -0
  538. modules/group_map/views/manage.php +71 -0
  539. modules/location/model.location.php +378 -0
  540. modules/location/views/form.php +294 -0
  541. modules/location/views/manage.php +30 -0
  542. modules/map/model.map.php +207 -0
  543. modules/map/views/form.php +55 -0
  544. modules/map/views/manage.php +67 -0
  545. modules/map/views/map-forms/control-position-style-form.php +70 -0
  546. modules/map/views/map-forms/control-setting-form.php +59 -0
  547. modules/map/views/map-forms/general-setting-form.php +134 -0
  548. modules/map/views/map-forms/layers-form.php +47 -0
  549. modules/map/views/map-forms/locations-form.php +66 -0
  550. modules/map/views/map-forms/map-center-settings.php +26 -0
  551. modules/map/views/map-forms/street-view-setting-form.php +83 -0
  552. modules/overview/model.overview.php +28 -0
  553. modules/overview/views/view.php +101 -0
  554. modules/settings/model.settings.php +58 -0
  555. modules/settings/views/manage.php +90 -0
  556. modules/shortcode/model.shortcode.php +30 -0
  557. modules/shortcode/views/put-wpgmp.php +210 -0
  558. readme.txt +253 -0
  559. wp-google-map-plugin.php +711 -0
assets/css/backend.css ADDED
@@ -0,0 +1,716 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ background: none !important;
3
+ }
4
+
5
+ .container {
6
+ font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
7
+ font-size: 15px;
8
+ line-height: 1.42857143;
9
+ color: #2c3e50;
10
+ background-color: #ffffff;
11
+ }
12
+
13
+ .wpgmp-overview .hiderow {
14
+ display: none;
15
+ }
16
+
17
+ .form-horizontal .radio,
18
+ .form-horizontal .checkbox,
19
+ .form-horizontal .radio-inline,
20
+ .form-horizontal .checkbox-inline {
21
+ padding-top: 0px;
22
+ }
23
+
24
+ .toplevel_page_wpgmp_view_overview .wpgmp-overview a {
25
+ color: #3498DB;
26
+ text-decoration: none;
27
+ }
28
+
29
+ .alert-success a,
30
+ .alert-info a,
31
+ .alert-danger a {
32
+ color: #fff;
33
+ }
34
+
35
+ .alert-success a:focus {
36
+ color: #fff;
37
+ }
38
+
39
+ .wpgmp-overview h4.alert.alert-info {
40
+ margin-left: -15px;
41
+ margin-right: -15px;
42
+ }
43
+
44
+ .wpgmp_or {
45
+ width: 100%;
46
+ text-align: center;
47
+ border-bottom: 1px solid #000;
48
+ line-height: 0.1em;
49
+ margin: 10px 0 20px;
50
+ }
51
+
52
+ .wpgmp_or span {
53
+ background: #fff;
54
+ padding: 0 10px;
55
+ }
56
+
57
+ .wp-color-result {
58
+ height: 24px !important;
59
+ }
60
+
61
+ .wpgmp-shape-delete {
62
+ cursor: pointer;
63
+ float: right;
64
+ margin-right: 0px;
65
+ }
66
+ /*
67
+ * Table styles
68
+ */
69
+
70
+ table.dataTable {
71
+ width: 100%;
72
+ margin: 0 auto;
73
+ clear: both;
74
+ border-collapse: separate;
75
+ border-spacing: 0;
76
+ /*
77
+ * Header and footer styles
78
+ */
79
+ /*
80
+ * Body styles
81
+ */
82
+ }
83
+
84
+ table.dataTable thead th,
85
+ table.dataTable tfoot th {
86
+ font-weight: bold;
87
+ }
88
+
89
+ table.dataTable thead th,
90
+ table.dataTable thead td {
91
+ padding: 12px 12px;
92
+ border-top: 1px solid #e8ebec;
93
+ border-bottom: 1px solid #e8ebec;
94
+ }
95
+
96
+ table.dataTable thead th:active,
97
+ table.dataTable thead td:active {
98
+ outline: none;
99
+ }
100
+
101
+ table.dataTable tfoot th,
102
+ table.dataTable tfoot td {
103
+ padding: 10px 18px 6px 18px;
104
+ }
105
+
106
+ table.dataTable thead .sorting_asc,
107
+ table.dataTable thead .sorting_desc,
108
+ table.dataTable thead .sorting {
109
+ cursor: pointer;
110
+ *cursor: hand;
111
+ }
112
+
113
+ table.dataTable thead .nosort {
114
+ background: none !important;
115
+ }
116
+
117
+ div.dataTables_length select[name="wpgmp_google_map_data_table_length"],
118
+ div.dataTables_length select[name="wpgmp_google_map_route_data_table_length"] {
119
+ border: 1px solid #dddddd;
120
+ border-radius: 0px;
121
+ box-shadow: none !important;
122
+ color: #555555;
123
+ transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
124
+ }
125
+
126
+ table.dataTable thead .sorting {
127
+ background: url("../images/sort_both.png") no-repeat center right;
128
+ }
129
+
130
+ table.dataTable thead .sorting_asc {
131
+ background: url("../images/sort_asc.png") no-repeat center right;
132
+ }
133
+
134
+ table.dataTable thead .sorting_desc {
135
+ background: url("../images/sort_desc.png") no-repeat center right;
136
+ }
137
+
138
+ table.dataTable thead .sorting_asc_disabled {
139
+ background: url("../images/sort_asc_disabled.png") no-repeat center right;
140
+ }
141
+
142
+ table.dataTable thead .sorting_desc_disabled {
143
+ background: url("../images/sort_desc_disabled.png") no-repeat center right;
144
+ }
145
+
146
+ table.dataTable tbody tr.selected {
147
+ background-color: #b0bed9;
148
+ }
149
+
150
+ table.dataTable tbody th,
151
+ table.dataTable tbody td {
152
+ padding: 12px 12px;
153
+ border-bottom: 1px solid #e8ebec;
154
+ }
155
+
156
+ table.dataTable.row-border tbody th,
157
+ table.dataTable.row-border tbody td,
158
+ table.dataTable.display tbody th,
159
+ table.dataTable.display tbody td {
160
+ border-top: 1px solid #dddddd;
161
+ }
162
+
163
+ table.dataTable.row-border tbody tr:first-child th,
164
+ table.dataTable.row-border tbody tr:first-child td,
165
+ table.dataTable.display tbody tr:first-child th,
166
+ table.dataTable.display tbody tr:first-child td {
167
+ border-top: none;
168
+ }
169
+
170
+ table.dataTable.cell-border tbody th,
171
+ table.dataTable.cell-border tbody td {
172
+ border-top: 1px solid #dddddd;
173
+ border-right: 1px solid #dddddd;
174
+ }
175
+
176
+ table.dataTable.cell-border tbody tr th:first-child,
177
+ table.dataTable.cell-border tbody tr td:first-child {
178
+ border-left: 1px solid #dddddd;
179
+ }
180
+
181
+ table.dataTable.cell-border tbody tr:first-child th,
182
+ table.dataTable.cell-border tbody tr:first-child td {
183
+ border-top: none;
184
+ }
185
+
186
+ table.dataTable.stripe tbody tr.odd,
187
+ table.dataTable.display tbody tr.odd {
188
+ background-color: #f9f9f9;
189
+ }
190
+
191
+ table.dataTable.stripe tbody tr.odd.selected,
192
+ table.dataTable.display tbody tr.odd.selected {
193
+ background-color: #abb9d3;
194
+ }
195
+
196
+ table.dataTable.hover tbody tr:hover,
197
+ table.dataTable.hover tbody tr.odd:hover,
198
+ table.dataTable.hover tbody tr.even:hover,
199
+ table.dataTable.display tbody tr:hover,
200
+ table.dataTable.display tbody tr.odd:hover,
201
+ table.dataTable.display tbody tr.even:hover {
202
+ background-color: whitesmoke;
203
+ }
204
+
205
+ table.dataTable.hover tbody tr:hover.selected,
206
+ table.dataTable.hover tbody tr.odd:hover.selected,
207
+ table.dataTable.hover tbody tr.even:hover.selected,
208
+ table.dataTable.display tbody tr:hover.selected,
209
+ table.dataTable.display tbody tr.odd:hover.selected,
210
+ table.dataTable.display tbody tr.even:hover.selected {
211
+ background-color: #a9b7d1;
212
+ }
213
+
214
+ table.dataTable.order-column tbody tr > .sorting_1,
215
+ table.dataTable.order-column tbody tr > .sorting_2,
216
+ table.dataTable.order-column tbody tr > .sorting_3,
217
+ table.dataTable.display tbody tr > .sorting_1,
218
+ table.dataTable.display tbody tr > .sorting_2,
219
+ table.dataTable.display tbody tr > .sorting_3 {
220
+ background-color: #f9f9f9;
221
+ }
222
+
223
+ table.dataTable.order-column tbody tr.selected > .sorting_1,
224
+ table.dataTable.order-column tbody tr.selected > .sorting_2,
225
+ table.dataTable.order-column tbody tr.selected > .sorting_3,
226
+ table.dataTable.display tbody tr.selected > .sorting_1,
227
+ table.dataTable.display tbody tr.selected > .sorting_2,
228
+ table.dataTable.display tbody tr.selected > .sorting_3 {
229
+ background-color: #acbad4;
230
+ }
231
+
232
+ table.dataTable.display tbody tr.odd > .sorting_1,
233
+ table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
234
+ background-color: #f1f1f1;
235
+ }
236
+
237
+ table.dataTable.display tbody tr.odd > .sorting_2,
238
+ table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
239
+ background-color: #f3f3f3;
240
+ }
241
+
242
+ table.dataTable.display tbody tr.odd > .sorting_3,
243
+ table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
244
+ background-color: whitesmoke;
245
+ }
246
+
247
+ table.dataTable.display tbody tr.odd.selected > .sorting_1,
248
+ table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
249
+ background-color: #a6b3cd;
250
+ }
251
+
252
+ table.dataTable.display tbody tr.odd.selected > .sorting_2,
253
+ table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
254
+ background-color: #a7b5ce;
255
+ }
256
+
257
+ table.dataTable.display tbody tr.odd.selected > .sorting_3,
258
+ table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
259
+ background-color: #a9b6d0;
260
+ }
261
+
262
+ table.dataTable.display tbody tr.even > .sorting_1,
263
+ table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
264
+ background-color: #f9f9f9;
265
+ }
266
+
267
+ table.dataTable.display tbody tr.even > .sorting_2,
268
+ table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
269
+ background-color: #fbfbfb;
270
+ }
271
+
272
+ table.dataTable.display tbody tr.even > .sorting_3,
273
+ table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
274
+ background-color: #fdfdfd;
275
+ }
276
+
277
+ table.dataTable.display tbody tr.even.selected > .sorting_1,
278
+ table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
279
+ background-color: #acbad4;
280
+ }
281
+
282
+ table.dataTable.display tbody tr.even.selected > .sorting_2,
283
+ table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
284
+ background-color: #adbbd6;
285
+ }
286
+
287
+ table.dataTable.display tbody tr.even.selected > .sorting_3,
288
+ table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
289
+ background-color: #afbdd8;
290
+ }
291
+
292
+ table.dataTable.display tbody tr:hover > .sorting_1,
293
+ table.dataTable.display tbody tr.odd:hover > .sorting_1,
294
+ table.dataTable.display tbody tr.even:hover > .sorting_1,
295
+ table.dataTable.order-column.hover tbody tr:hover > .sorting_1,
296
+ table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1,
297
+ table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 {
298
+ background-color: #eaeaea;
299
+ }
300
+
301
+ table.dataTable.display tbody tr:hover > .sorting_2,
302
+ table.dataTable.display tbody tr.odd:hover > .sorting_2,
303
+ table.dataTable.display tbody tr.even:hover > .sorting_2,
304
+ table.dataTable.order-column.hover tbody tr:hover > .sorting_2,
305
+ table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2,
306
+ table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 {
307
+ background-color: #ebebeb;
308
+ }
309
+
310
+ table.dataTable.display tbody tr:hover > .sorting_3,
311
+ table.dataTable.display tbody tr.odd:hover > .sorting_3,
312
+ table.dataTable.display tbody tr.even:hover > .sorting_3,
313
+ table.dataTable.order-column.hover tbody tr:hover > .sorting_3,
314
+ table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3,
315
+ table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 {
316
+ background-color: #eeeeee;
317
+ }
318
+
319
+ table.dataTable.display tbody tr:hover.selected > .sorting_1,
320
+ table.dataTable.display tbody tr.odd:hover.selected > .sorting_1,
321
+ table.dataTable.display tbody tr.even:hover.selected > .sorting_1,
322
+ table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1,
323
+ table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1,
324
+ table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 {
325
+ background-color: #a1aec7;
326
+ }
327
+
328
+ table.dataTable.display tbody tr:hover.selected > .sorting_2,
329
+ table.dataTable.display tbody tr.odd:hover.selected > .sorting_2,
330
+ table.dataTable.display tbody tr.even:hover.selected > .sorting_2,
331
+ table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2,
332
+ table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2,
333
+ table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 {
334
+ background-color: #a2afc8;
335
+ }
336
+
337
+ table.dataTable.display tbody tr:hover.selected > .sorting_3,
338
+ table.dataTable.display tbody tr.odd:hover.selected > .sorting_3,
339
+ table.dataTable.display tbody tr.even:hover.selected > .sorting_3,
340
+ table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3,
341
+ table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3,
342
+ table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 {
343
+ background-color: #a4b2cb;
344
+ }
345
+
346
+ table.dataTable.no-footer {
347
+ margin-bottom: 5px;
348
+ padding-top: 10px;
349
+ }
350
+
351
+ table.dataTable.nowrap th,
352
+ table.dataTable.nowrap td {
353
+ white-space: nowrap;
354
+ }
355
+
356
+ table.dataTable.compact thead th,
357
+ table.dataTable.compact thead td {
358
+ padding: 5px 9px;
359
+ }
360
+
361
+ table.dataTable.compact tfoot th,
362
+ table.dataTable.compact tfoot td {
363
+ padding: 5px 9px 3px 9px;
364
+ }
365
+
366
+ table.dataTable.compact tbody th,
367
+ table.dataTable.compact tbody td {
368
+ padding: 4px 5px;
369
+ }
370
+
371
+ table.dataTable th.dt-left,
372
+ table.dataTable td.dt-left {
373
+ text-align: left;
374
+ }
375
+
376
+ table.dataTable th.dt-center,
377
+ table.dataTable td.dt-center,
378
+ table.dataTable td.dataTables_empty {
379
+ text-align: center;
380
+ }
381
+
382
+ table.dataTable th.dt-right,
383
+ table.dataTable td.dt-right {
384
+ text-align: right;
385
+ }
386
+
387
+ table.dataTable th.dt-justify,
388
+ table.dataTable td.dt-justify {
389
+ text-align: justify;
390
+ }
391
+
392
+ table.dataTable th.dt-nowrap,
393
+ table.dataTable td.dt-nowrap {
394
+ white-space: nowrap;
395
+ }
396
+
397
+ table.dataTable thead th.dt-head-left,
398
+ table.dataTable thead td.dt-head-left,
399
+ table.dataTable tfoot th.dt-head-left,
400
+ table.dataTable tfoot td.dt-head-left {
401
+ text-align: left;
402
+ }
403
+
404
+ table.dataTable thead th.dt-head-center,
405
+ table.dataTable thead td.dt-head-center,
406
+ table.dataTable tfoot th.dt-head-center,
407
+ table.dataTable tfoot td.dt-head-center {
408
+ text-align: center;
409
+ }
410
+
411
+ table.dataTable thead th.dt-head-right,
412
+ table.dataTable thead td.dt-head-right,
413
+ table.dataTable tfoot th.dt-head-right,
414
+ table.dataTable tfoot td.dt-head-right {
415
+ text-align: right;
416
+ }
417
+
418
+ table.dataTable thead th.dt-head-justify,
419
+ table.dataTable thead td.dt-head-justify,
420
+ table.dataTable tfoot th.dt-head-justify,
421
+ table.dataTable tfoot td.dt-head-justify {
422
+ text-align: justify;
423
+ }
424
+
425
+ table.dataTable thead th.dt-head-nowrap,
426
+ table.dataTable thead td.dt-head-nowrap,
427
+ table.dataTable tfoot th.dt-head-nowrap,
428
+ table.dataTable tfoot td.dt-head-nowrap {
429
+ white-space: nowrap;
430
+ }
431
+
432
+ table.dataTable tbody th.dt-body-left,
433
+ table.dataTable tbody td.dt-body-left {
434
+ text-align: left;
435
+ }
436
+
437
+ table.dataTable tbody th.dt-body-center,
438
+ table.dataTable tbody td.dt-body-center {
439
+ text-align: center;
440
+ }
441
+
442
+ table.dataTable tbody th.dt-body-right,
443
+ table.dataTable tbody td.dt-body-right {
444
+ text-align: right;
445
+ }
446
+
447
+ table.dataTable tbody th.dt-body-justify,
448
+ table.dataTable tbody td.dt-body-justify {
449
+ text-align: justify;
450
+ }
451
+
452
+ table.dataTable tbody th.dt-body-nowrap,
453
+ table.dataTable tbody td.dt-body-nowrap {
454
+ white-space: nowrap;
455
+ }
456
+
457
+ table.dataTable,
458
+ table.dataTable th,
459
+ table.dataTable td {
460
+ -webkit-box-sizing: content-box;
461
+ -moz-box-sizing: content-box;
462
+ box-sizing: content-box;
463
+ }
464
+ /*
465
+ * Control feature layout
466
+ */
467
+
468
+ .dataTables_wrapper {
469
+ position: relative;
470
+ clear: both;
471
+ *zoom: 1;
472
+ zoom: 1;
473
+ }
474
+
475
+ .dataTables_wrapper .dataTables_length {
476
+ float: left;
477
+ }
478
+
479
+ .dataTables_wrapper .dataTables_filter {
480
+ float: right;
481
+ text-align: right;
482
+ }
483
+
484
+ .dataTables_wrapper .dataTables_filter input {
485
+ margin-left: 0.5em;
486
+ border: 1px solid #dddddd;
487
+ border-radius: 0px;
488
+ box-shadow: none !important;
489
+ color: #555555;
490
+ font-size: 14px;
491
+ padding: 8px 12px;
492
+ transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
493
+ }
494
+
495
+ .dataTables_wrapper .dataTables_info {
496
+ clear: both;
497
+ float: left;
498
+ padding-top: 0.755em;
499
+ }
500
+
501
+ .dataTables_wrapper .dataTables_paginate {
502
+ float: right;
503
+ text-align: right;
504
+ padding-top: 0.25em;
505
+ }
506
+
507
+ .dataTables_wrapper .dataTables_paginate .paginate_button {
508
+ box-sizing: border-box;
509
+ display: inline-block;
510
+ min-width: 1.5em;
511
+ padding: 0.5em 1em;
512
+ margin-left: 2px;
513
+ text-align: center;
514
+ text-decoration: none !important;
515
+ cursor: pointer;
516
+ *cursor: hand;
517
+ color: #333333 !important;
518
+ border: 1px solid transparent;
519
+ }
520
+
521
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current,
522
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
523
+ color: #333333 !important;
524
+ border: 1px solid #EEEEEE;
525
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #BFBFBF), color-stop(100%, gainsboro));
526
+ /* Chrome,Safari4+ */
527
+
528
+ background: -webkit-linear-gradient(top, #BFBFBF 0%, gainsboro 100%);
529
+ /* Chrome10+,Safari5.1+ */
530
+
531
+ background: -moz-linear-gradient(top, #BFBFBF 0%, gainsboro 100%);
532
+ /* FF3.6+ */
533
+
534
+ background: -ms-linear-gradient(top, #BFBFBF 0%, gainsboro 100%);
535
+ /* IE10+ */
536
+
537
+ background: -o-linear-gradient(top, #BFBFBF 0%, gainsboro 100%);
538
+ /* Opera 11.10+ */
539
+
540
+ background: linear-gradient(to bottom, #BFBFBF 0%, gainsboro 100%);
541
+ /* W3C */
542
+ }
543
+
544
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
545
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,
546
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
547
+ cursor: default;
548
+ color: #666 !important;
549
+ border: 1px solid transparent;
550
+ background: transparent;
551
+ box-shadow: none;
552
+ }
553
+
554
+ .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
555
+ color: white !important;
556
+ border: 1px solid #EEEEEE;
557
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #BFBFBF), color-stop(100%, #BFBFBF));
558
+ /* Chrome,Safari4+ */
559
+
560
+ background: -webkit-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
561
+ /* Chrome10+,Safari5.1+ */
562
+
563
+ background: -moz-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
564
+ /* FF3.6+ */
565
+
566
+ background: -ms-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
567
+ /* IE10+ */
568
+
569
+ background: -o-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
570
+ /* Opera 11.10+ */
571
+
572
+ background: linear-gradient(to bottom, #BFBFBF 0%, #BFBFBF 100%);
573
+ /* W3C */
574
+ }
575
+
576
+ .dataTables_wrapper .dataTables_paginate .paginate_button:active {
577
+ outline: none;
578
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #BFBFBF), color-stop(100%, #BFBFBF));
579
+ /* Chrome,Safari4+ */
580
+
581
+ background: -webkit-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
582
+ /* Chrome10+,Safari5.1+ */
583
+
584
+ background: -moz-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
585
+ /* FF3.6+ */
586
+
587
+ background: -ms-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
588
+ /* IE10+ */
589
+
590
+ background: -o-linear-gradient(top, #BFBFBF 0%, #BFBFBF 100%);
591
+ /* Opera 11.10+ */
592
+
593
+ background: linear-gradient(to bottom, #BFBFBF 0%, #BFBFBF 100%);
594
+ /* W3C */
595
+
596
+ box-shadow: inset 0 0 3px #111;
597
+ }
598
+
599
+ .dataTables_wrapper .dataTables_processing {
600
+ position: absolute;
601
+ top: 50%;
602
+ left: 50%;
603
+ width: 100%;
604
+ height: 40px;
605
+ margin-left: -50%;
606
+ margin-top: -25px;
607
+ padding-top: 20px;
608
+ text-align: center;
609
+ font-size: 1.2em;
610
+ background-color: white;
611
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
612
+ /* Chrome,Safari4+ */
613
+
614
+ background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
615
+ /* Chrome10+,Safari5.1+ */
616
+
617
+ background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
618
+ /* FF3.6+ */
619
+
620
+ background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
621
+ /* IE10+ */
622
+
623
+ background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
624
+ /* Opera 11.10+ */
625
+
626
+ background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
627
+ /* W3C */
628
+ }
629
+
630
+ .dataTables_wrapper .dataTables_length,
631
+ .dataTables_wrapper .dataTables_filter,
632
+ .dataTables_wrapper .dataTables_info,
633
+ .dataTables_wrapper .dataTables_processing,
634
+ .dataTables_wrapper .dataTables_paginate {
635
+ color: #666666;
636
+ }
637
+
638
+ .dataTables_wrapper .dataTables_scroll {
639
+ clear: both;
640
+ }
641
+
642
+ .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
643
+ *margin-top: -1px;
644
+ -webkit-overflow-scrolling: touch;
645
+ }
646
+
647
+ .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,
648
+ .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {
649
+ height: 0;
650
+ overflow: hidden;
651
+ margin: 0 !important;
652
+ padding: 0 !important;
653
+ }
654
+
655
+ .dataTables_wrapper.no-footer .dataTables_scrollBody {
656
+ border-bottom: 1px solid #111111;
657
+ }
658
+
659
+ .dataTables_wrapper.no-footer div.dataTables_scrollHead table,
660
+ .dataTables_wrapper.no-footer div.dataTables_scrollBody table {
661
+ border-bottom: none;
662
+ }
663
+
664
+ .dataTables_wrapper:after {
665
+ visibility: hidden;
666
+ display: block;
667
+ content: "";
668
+ clear: both;
669
+ height: 0;
670
+ }
671
+
672
+ @media screen and (max-width: 767px) {
673
+ .dataTables_wrapper .dataTables_info,
674
+ .dataTables_wrapper .dataTables_paginate {
675
+ float: none;
676
+ text-align: center;
677
+ }
678
+ .dataTables_wrapper .dataTables_paginate {
679
+ margin-top: 0.5em;
680
+ }
681
+ }
682
+
683
+ @media screen and (max-width: 640px) {
684
+ .dataTables_wrapper .dataTables_length,
685
+ .dataTables_wrapper .dataTables_filter {
686
+ float: none;
687
+ text-align: center;
688
+ }
689
+ .dataTables_wrapper .dataTables_filter {
690
+ margin-top: 0.5em;
691
+ }
692
+ }
693
+
694
+ .wpgmp_location_selection h4 {
695
+ float: left;
696
+ }
697
+
698
+ .wpgmp_location_selection select {
699
+ float: right;
700
+ color: #000000;
701
+ }
702
+
703
+ .helpdask-bootom {
704
+ position: fixed;
705
+ right: 30px;
706
+ bottom: 5px;
707
+ border-radius: 5px;
708
+ padding: 0px;
709
+ background: url(../images/helpdesk.png) no-repeat;
710
+ width: 150px;
711
+ height: 83px;
712
+ color: #fff;
713
+ font-size: 0px;
714
+ display: block;
715
+ opacity: 1;
716
+ }
assets/css/bootstrap.min.flat.css ADDED
@@ -0,0 +1,8389 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");
2
+ /*!
3
+ * bootswatch v3.3.5
4
+ * Homepage: http://bootswatch.com
5
+ * Copyright 2012-2015 Thomas Park
6
+ * Licensed under MIT
7
+ * Based on Bootstrap
8
+ */
9
+ /*!
10
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
11
+ * Copyright 2011-2015 Twitter, Inc.
12
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
13
+ */
14
+ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
15
+
16
+ html {
17
+ font-family: sans-serif;
18
+ -ms-text-size-adjust: 100%;
19
+ -webkit-text-size-adjust: 100%
20
+ }
21
+
22
+ body {
23
+ margin: 0
24
+ }
25
+
26
+ article,
27
+ aside,
28
+ details,
29
+ figcaption,
30
+ figure,
31
+ footer,
32
+ header,
33
+ hgroup,
34
+ main,
35
+ menu,
36
+ nav,
37
+ section,
38
+ summary {
39
+ display: block
40
+ }
41
+
42
+ audio,
43
+ canvas,
44
+ progress,
45
+ video {
46
+ display: inline-block;
47
+ vertical-align: baseline
48
+ }
49
+
50
+ audio:not([controls]) {
51
+ display: none;
52
+ height: 0
53
+ }
54
+
55
+ [hidden],
56
+ template {
57
+ display: none
58
+ }
59
+
60
+ a {
61
+ background-color: transparent
62
+ }
63
+
64
+ a:active,
65
+ a:hover {
66
+ outline: 0
67
+ }
68
+
69
+ abbr[title] {
70
+ border-bottom: 1px dotted
71
+ }
72
+
73
+ b,
74
+ strong {
75
+ font-weight: bold
76
+ }
77
+
78
+ dfn {
79
+ font-style: italic
80
+ }
81
+
82
+ h1 {
83
+ font-size: 2em;
84
+ margin: 0.67em 0
85
+ }
86
+
87
+ mark {
88
+ background: #ff0;
89
+ color: #000
90
+ }
91
+
92
+ small {
93
+ font-size: 80%
94
+ }
95
+
96
+ sub,
97
+ sup {
98
+ font-size: 75%;
99
+ line-height: 0;
100
+ position: relative;
101
+ vertical-align: baseline
102
+ }
103
+
104
+ sup {
105
+ top: -0.5em
106
+ }
107
+
108
+ sub {
109
+ bottom: -0.25em
110
+ }
111
+
112
+ img {
113
+ border: 0
114
+ }
115
+
116
+ svg:not(:root) {
117
+ overflow: hidden
118
+ }
119
+
120
+ figure {
121
+ margin: 1em 40px
122
+ }
123
+
124
+ hr {
125
+ -webkit-box-sizing: content-box;
126
+ -moz-box-sizing: content-box;
127
+ box-sizing: content-box;
128
+ height: 0
129
+ }
130
+
131
+ pre {
132
+ overflow: auto
133
+ }
134
+
135
+ code,
136
+ kbd,
137
+ pre,
138
+ samp {
139
+ font-family: monospace, monospace;
140
+ font-size: 1em
141
+ }
142
+
143
+ button,
144
+ input,
145
+ optgroup,
146
+ select,
147
+ textarea {
148
+ color: inherit;
149
+ font: inherit;
150
+ margin: 0
151
+ }
152
+
153
+ button {
154
+ overflow: visible
155
+ }
156
+
157
+ button,
158
+ select {
159
+ text-transform: none
160
+ }
161
+
162
+ button,
163
+ html input[type="button"],
164
+ input[type="reset"],
165
+ input[type="submit"] {
166
+ -webkit-appearance: button;
167
+ cursor: pointer
168
+ }
169
+
170
+ button[disabled],
171
+ html input[disabled] {
172
+ cursor: default
173
+ }
174
+
175
+ button::-moz-focus-inner,
176
+ input::-moz-focus-inner {
177
+ border: 0;
178
+ padding: 0
179
+ }
180
+
181
+ input {
182
+ line-height: normal
183
+ }
184
+
185
+ input[type="checkbox"],
186
+ input[type="radio"] {
187
+ -webkit-box-sizing: border-box;
188
+ -moz-box-sizing: border-box;
189
+ box-sizing: border-box;
190
+ padding: 0
191
+ }
192
+
193
+ input[type="number"]::-webkit-inner-spin-button,
194
+ input[type="number"]::-webkit-outer-spin-button {
195
+ height: auto
196
+ }
197
+
198
+ input[type="search"] {
199
+ -webkit-appearance: textfield;
200
+ -webkit-box-sizing: content-box;
201
+ -moz-box-sizing: content-box;
202
+ box-sizing: content-box
203
+ }
204
+
205
+ input[type="search"]::-webkit-search-cancel-button,
206
+ input[type="search"]::-webkit-search-decoration {
207
+ -webkit-appearance: none
208
+ }
209
+
210
+ fieldset {
211
+ border: 1px solid #c0c0c0;
212
+ margin: 0 2px;
213
+ padding: 0.35em 0.625em 0.75em
214
+ }
215
+
216
+ legend {
217
+ border: 0;
218
+ padding: 0
219
+ }
220
+
221
+ textarea {
222
+ overflow: auto
223
+ }
224
+
225
+ optgroup {
226
+ font-weight: bold
227
+ }
228
+
229
+ table {
230
+ border-collapse: collapse;
231
+ border-spacing: 0
232
+ }
233
+
234
+ td,
235
+ th {
236
+ padding: 0
237
+ }
238
+ /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
239
+
240
+ @media print {
241
+ *,
242
+ *:before,
243
+ *:after {
244
+ background: transparent !important;
245
+ color: #000 !important;
246
+ -webkit-box-shadow: none !important;
247
+ box-shadow: none !important;
248
+ text-shadow: none !important
249
+ }
250
+ a,
251
+ a:visited {
252
+ text-decoration: underline
253
+ }
254
+ a[href]:after {
255
+ content: " (" attr(href) ")"
256
+ }
257
+ abbr[title]:after {
258
+ content: " (" attr(title) ")"
259
+ }
260
+ a[href^="#"]:after,
261
+ a[href^="javascript:"]:after {
262
+ content: ""
263
+ }
264
+ pre,
265
+ blockquote {
266
+ border: 1px solid #999;
267
+ page-break-inside: avoid
268
+ }
269
+ thead {
270
+ display: table-header-group
271
+ }
272
+ tr,
273
+ img {
274
+ page-break-inside: avoid
275
+ }
276
+ img {
277
+ max-width: 100% !important
278
+ }
279
+ p,
280
+ h2,
281
+ h3 {
282
+ orphans: 3;
283
+ widows: 3
284
+ }
285
+ h2,
286
+ h3 {
287
+ page-break-after: avoid
288
+ }
289
+ .navbar {
290
+ display: none
291
+ }
292
+ .btn>.caret,
293
+ .dropup>.btn>.caret {
294
+ border-top-color: #000 !important
295
+ }
296
+ .label {
297
+ border: 1px solid #000
298
+ }
299
+ .table {
300
+ border-collapse: collapse !important
301
+ }
302
+ .table td,
303
+ .table th {
304
+ background-color: #fff !important
305
+ }
306
+ .table-bordered th,
307
+ .table-bordered td {
308
+ border: 1px solid #ddd !important
309
+ }
310
+ }
311
+
312
+ @font-face {
313
+ font-family: 'Glyphicons Halflings';
314
+ src: url('../fonts/glyphicons-halflings-regular.eot');
315
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')
316
+ }
317
+
318
+ .glyphicon {
319
+ position: relative;
320
+ top: 1px;
321
+ display: inline-block;
322
+ font-family: 'Glyphicons Halflings';
323
+ font-style: normal;
324
+ font-weight: normal;
325
+ line-height: 1;
326
+ -webkit-font-smoothing: antialiased;
327
+ -moz-osx-font-smoothing: grayscale
328
+ }
329
+
330
+ .glyphicon-asterisk:before {
331
+ content: "\2a"
332
+ }
333
+
334
+ .glyphicon-plus:before {
335
+ content: "\2b"
336
+ }
337
+
338
+ .glyphicon-euro:before,
339
+ .glyphicon-eur:before {
340
+ content: "\20ac"
341
+ }
342
+
343
+ .glyphicon-minus:before {
344
+ content: "\2212"
345
+ }
346
+
347
+ .glyphicon-cloud:before {
348
+ content: "\2601"
349
+ }
350
+
351
+ .glyphicon-envelope:before {
352
+ content: "\2709"
353
+ }
354
+
355
+ .glyphicon-pencil:before {
356
+ content: "\270f"
357
+ }
358
+
359
+ .glyphicon-glass:before {
360
+ content: "\e001"
361
+ }
362
+
363
+ .glyphicon-music:before {
364
+ content: "\e002"
365
+ }
366
+
367
+ .glyphicon-search:before {
368
+ content: "\e003"
369
+ }
370
+
371
+ .glyphicon-heart:before {
372
+ content: "\e005"
373
+ }
374
+
375
+ .glyphicon-star:before {
376
+ content: "\e006"
377
+ }
378
+
379
+ .glyphicon-star-empty:before {
380
+ content: "\e007"
381
+ }
382
+
383
+ .glyphicon-user:before {
384
+ content: "\e008"
385
+ }
386
+
387
+ .glyphicon-film:before {
388
+ content: "\e009"
389
+ }
390
+
391
+ .glyphicon-th-large:before {
392
+ content: "\e010"
393
+ }
394
+
395
+ .glyphicon-th:before {
396
+ content: "\e011"
397
+ }
398
+
399
+ .glyphicon-th-list:before {
400
+ content: "\e012"
401
+ }
402
+
403
+ .glyphicon-ok:before {
404
+ content: "\e013"
405
+ }
406
+
407
+ .glyphicon-remove:before {
408
+ content: "\e014"
409
+ }
410
+
411
+ .glyphicon-zoom-in:before {
412
+ content: "\e015"
413
+ }
414
+
415
+ .glyphicon-zoom-out:before {
416
+ content: "\e016"
417
+ }
418
+
419
+ .glyphicon-off:before {
420
+ content: "\e017"
421
+ }
422
+
423
+ .glyphicon-signal:before {
424
+ content: "\e018"
425
+ }
426
+
427
+ .glyphicon-cog:before {
428
+ content: "\e019"
429
+ }
430
+
431
+ .glyphicon-trash:before {
432
+ content: "\e020"
433
+ }
434
+
435
+ .glyphicon-home:before {
436
+ content: "\e021"
437
+ }
438
+
439
+ .glyphicon-file:before {
440
+ content: "\e022"
441
+ }
442
+
443
+ .glyphicon-time:before {
444
+ content: "\e023"
445
+ }
446
+
447
+ .glyphicon-road:before {
448
+ content: "\e024"
449
+ }
450
+
451
+ .glyphicon-download-alt:before {
452
+ content: "\e025"
453
+ }
454
+
455
+ .glyphicon-download:before {
456
+ content: "\e026"
457
+ }
458
+
459
+ .glyphicon-upload:before {
460
+ content: "\e027"
461
+ }
462
+
463
+ .glyphicon-inbox:before {
464
+ content: "\e028"
465
+ }
466
+
467
+ .glyphicon-play-circle:before {
468
+ content: "\e029"
469
+ }
470
+
471
+ .glyphicon-repeat:before {
472
+ content: "\e030"
473
+ }
474
+
475
+ .glyphicon-refresh:before {
476
+ content: "\e031"
477
+ }
478
+
479
+ .glyphicon-list-alt:before {
480
+ content: "\e032"
481
+ }
482
+
483
+ .glyphicon-lock:before {
484
+ content: "\e033"
485
+ }
486
+
487
+ .glyphicon-flag:before {
488
+ content: "\e034"
489
+ }
490
+
491
+ .glyphicon-headphones:before {
492
+ content: "\e035"
493
+ }
494
+
495
+ .glyphicon-volume-off:before {
496
+ content: "\e036"
497
+ }
498
+
499
+ .glyphicon-volume-down:before {
500
+ content: "\e037"
501
+ }
502
+
503
+ .glyphicon-volume-up:before {
504
+ content: "\e038"
505
+ }
506
+
507
+ .glyphicon-qrcode:before {
508
+ content: "\e039"
509
+ }
510
+
511
+ .glyphicon-barcode:before {
512
+ content: "\e040"
513
+ }
514
+
515
+ .glyphicon-tag:before {
516
+ content: "\e041"
517
+ }
518
+
519
+ .glyphicon-tags:before {
520
+ content: "\e042"
521
+ }
522
+
523
+ .glyphicon-book:before {
524
+ content: "\e043"
525
+ }
526
+
527
+ .glyphicon-bookmark:before {
528
+ content: "\e044"
529
+ }
530
+
531
+ .glyphicon-print:before {
532
+ content: "\e045"
533
+ }
534
+
535
+ .glyphicon-camera:before {
536
+ content: "\e046"
537
+ }
538
+
539
+ .glyphicon-font:before {
540
+ content: "\e047"
541
+ }
542
+
543
+ .glyphicon-bold:before {
544
+ content: "\e048"
545
+ }
546
+
547
+ .glyphicon-italic:before {
548
+ content: "\e049"
549
+ }
550
+
551
+ .glyphicon-text-height:before {
552
+ content: "\e050"
553
+ }
554
+
555
+ .glyphicon-text-width:before {
556
+ content: "\e051"
557
+ }
558
+
559
+ .glyphicon-align-left:before {
560
+ content: "\e052"
561
+ }
562
+
563
+ .glyphicon-align-center:before {
564
+ content: "\e053"
565
+ }
566
+
567
+ .glyphicon-align-right:before {
568
+ content: "\e054"
569
+ }
570
+
571
+ .glyphicon-align-justify:before {
572
+ content: "\e055"
573
+ }
574
+
575
+ .glyphicon-list:before {
576
+ content: "\e056"
577
+ }
578
+
579
+ .glyphicon-indent-left:before {
580
+ content: "\e057"
581
+ }
582
+
583
+ .glyphicon-indent-right:before {
584
+ content: "\e058"
585
+ }
586
+
587
+ .glyphicon-facetime-video:before {
588
+ content: "\e059"
589
+ }
590
+
591
+ .glyphicon-picture:before {
592
+ content: "\e060"
593
+ }
594
+
595
+ .glyphicon-map-marker:before {
596
+ content: "\e062"
597
+ }
598
+
599
+ .glyphicon-adjust:before {
600
+ content: "\e063"
601
+ }
602
+
603
+ .glyphicon-tint:before {
604
+ content: "\e064"
605
+ }
606
+
607
+ .glyphicon-edit:before {
608
+ content: "\e065"
609
+ }
610
+
611
+ .glyphicon-share:before {
612
+ content: "\e066"
613
+ }
614
+
615
+ .glyphicon-check:before {
616
+ content: "\e067"
617
+ }
618
+
619
+ .glyphicon-move:before {
620
+ content: "\e068"
621
+ }
622
+
623
+ .glyphicon-step-backward:before {
624
+ content: "\e069"
625
+ }
626
+
627
+ .glyphicon-fast-backward:before {
628
+ content: "\e070"
629
+ }
630
+
631
+ .glyphicon-backward:before {
632
+ content: "\e071"
633
+ }
634
+
635
+ .glyphicon-play:before {
636
+ content: "\e072"
637
+ }
638
+
639
+ .glyphicon-pause:before {
640
+ content: "\e073"
641
+ }
642
+
643
+ .glyphicon-stop:before {
644
+ content: "\e074"
645
+ }
646
+
647
+ .glyphicon-forward:before {
648
+ content: "\e075"
649
+ }
650
+
651
+ .glyphicon-fast-forward:before {
652
+ content: "\e076"
653
+ }
654
+
655
+ .glyphicon-step-forward:before {
656
+ content: "\e077"
657
+ }
658
+
659
+ .glyphicon-eject:before {
660
+ content: "\e078"
661
+ }
662
+
663
+ .glyphicon-chevron-left:before {
664
+ content: "\e079"
665
+ }
666
+
667
+ .glyphicon-chevron-right:before {
668
+ content: "\e080"
669
+ }
670
+
671
+ .glyphicon-plus-sign:before {
672
+ content: "\e081"
673
+ }
674
+
675
+ .glyphicon-minus-sign:before {
676
+ content: "\e082"
677
+ }
678
+
679
+ .glyphicon-remove-sign:before {
680
+ content: "\e083"
681
+ }
682
+
683
+ .glyphicon-ok-sign:before {
684
+ content: "\e084"
685
+ }
686
+
687
+ .glyphicon-question-sign:before {
688
+ content: "\e085"
689
+ }
690
+
691
+ .glyphicon-info-sign:before {
692
+ content: "\e086"
693
+ }
694
+
695
+ .glyphicon-screenshot:before {
696
+ content: "\e087"
697
+ }
698
+
699
+ .glyphicon-remove-circle:before {
700
+ content: "\e088"
701
+ }
702
+
703
+ .glyphicon-ok-circle:before {
704
+ content: "\e089"
705
+ }
706
+
707
+ .glyphicon-ban-circle:before {
708
+ content: "\e090"
709
+ }
710
+
711
+ .glyphicon-arrow-left:before {
712
+ content: "\e091"
713
+ }
714
+
715
+ .glyphicon-arrow-right:before {
716
+ content: "\e092"
717
+ }
718
+
719
+ .glyphicon-arrow-up:before {
720
+ content: "\e093"
721
+ }
722
+
723
+ .glyphicon-arrow-down:before {
724
+ content: "\e094"
725
+ }
726
+
727
+ .glyphicon-share-alt:before {
728
+ content: "\e095"
729
+ }
730
+
731
+ .glyphicon-resize-full:before {
732
+ content: "\e096"
733
+ }
734
+
735
+ .glyphicon-resize-small:before {
736
+ content: "\e097"
737
+ }
738
+
739
+ .glyphicon-exclamation-sign:before {
740
+ content: "\e101"
741
+ }
742
+
743
+ .glyphicon-gift:before {
744
+ content: "\e102"
745
+ }
746
+
747
+ .glyphicon-leaf:before {
748
+ content: "\e103"
749
+ }
750
+
751
+ .glyphicon-fire:before {
752
+ content: "\e104"
753
+ }
754
+
755
+ .glyphicon-eye-open:before {
756
+ content: "\e105"
757
+ }
758
+
759
+ .glyphicon-eye-close:before {
760
+ content: "\e106"
761
+ }
762
+
763
+ .glyphicon-warning-sign:before {
764
+ content: "\e107"
765
+ }
766
+
767
+ .glyphicon-plane:before {
768
+ content: "\e108"
769
+ }
770
+
771
+ .glyphicon-calendar:before {
772
+ content: "\e109"
773
+ }
774
+
775
+ .glyphicon-random:before {
776
+ content: "\e110"
777
+ }
778
+
779
+ .glyphicon-comment:before {
780
+ content: "\e111"
781
+ }
782
+
783
+ .glyphicon-magnet:before {
784
+ content: "\e112"
785
+ }
786
+
787
+ .glyphicon-chevron-up:before {
788
+ content: "\e113"
789
+ }
790
+
791
+ .glyphicon-chevron-down:before {
792
+ content: "\e114"
793
+ }
794
+
795
+ .glyphicon-retweet:before {
796
+ content: "\e115"
797
+ }
798
+
799
+ .glyphicon-shopping-cart:before {
800
+ content: "\e116"
801
+ }
802
+
803
+ .glyphicon-folder-close:before {
804
+ content: "\e117"
805
+ }
806
+
807
+ .glyphicon-folder-open:before {
808
+ content: "\e118"
809
+ }
810
+
811
+ .glyphicon-resize-vertical:before {
812
+ content: "\e119"
813
+ }
814
+
815
+ .glyphicon-resize-horizontal:before {
816
+ content: "\e120"
817
+ }
818
+
819
+ .glyphicon-hdd:before {
820
+ content: "\e121"
821
+ }
822
+
823
+ .glyphicon-bullhorn:before {
824
+ content: "\e122"
825
+ }
826
+
827
+ .glyphicon-bell:before {
828
+ content: "\e123"
829
+ }
830
+
831
+ .glyphicon-certificate:before {
832
+ content: "\e124"
833
+ }
834
+
835
+ .glyphicon-thumbs-up:before {
836
+ content: "\e125"
837
+ }
838
+
839
+ .glyphicon-thumbs-down:before {
840
+ content: "\e126"
841
+ }
842
+
843
+ .glyphicon-hand-right:before {
844
+ content: "\e127"
845
+ }
846
+
847
+ .glyphicon-hand-left:before {
848
+ content: "\e128"
849
+ }
850
+
851
+ .glyphicon-hand-up:before {
852
+ content: "\e129"
853
+ }
854
+
855
+ .glyphicon-hand-down:before {
856
+ content: "\e130"
857
+ }
858
+
859
+ .glyphicon-circle-arrow-right:before {
860
+ content: "\e131"
861
+ }
862
+
863
+ .glyphicon-circle-arrow-left:before {
864
+ content: "\e132"
865
+ }
866
+
867
+ .glyphicon-circle-arrow-up:before {
868
+ content: "\e133"
869
+ }
870
+
871
+ .glyphicon-circle-arrow-down:before {
872
+ content: "\e134"
873
+ }
874
+
875
+ .glyphicon-globe:before {
876
+ content: "\e135"
877
+ }
878
+
879
+ .glyphicon-wrench:before {
880
+ content: "\e136"
881
+ }
882
+
883
+ .glyphicon-tasks:before {
884
+ content: "\e137"
885
+ }
886
+
887
+ .glyphicon-filter:before {
888
+ content: "\e138"
889
+ }
890
+
891
+ .glyphicon-briefcase:before {
892
+ content: "\e139"
893
+ }
894
+
895
+ .glyphicon-fullscreen:before {
896
+ content: "\e140"
897
+ }
898
+
899
+ .glyphicon-dashboard:before {
900
+ content: "\e141"
901
+ }
902
+
903
+ .glyphicon-paperclip:before {
904
+ content: "\e142"
905
+ }
906
+
907
+ .glyphicon-heart-empty:before {
908
+ content: "\e143"
909
+ }
910
+
911
+ .glyphicon-link:before {
912
+ content: "\e144"
913
+ }
914
+
915
+ .glyphicon-phone:before {
916
+ content: "\e145"
917
+ }
918
+
919
+ .glyphicon-pushpin:before {
920
+ content: "\e146"
921
+ }
922
+
923
+ .glyphicon-usd:before {
924
+ content: "\e148"
925
+ }
926
+
927
+ .glyphicon-gbp:before {
928
+ content: "\e149"
929
+ }
930
+
931
+ .glyphicon-sort:before {
932
+ content: "\e150"
933
+ }
934
+
935
+ .glyphicon-sort-by-alphabet:before {
936
+ content: "\e151"
937
+ }
938
+
939
+ .glyphicon-sort-by-alphabet-alt:before {
940
+ content: "\e152"
941
+ }
942
+
943
+ .glyphicon-sort-by-order:before {
944
+ content: "\e153"
945
+ }
946
+
947
+ .glyphicon-sort-by-order-alt:before {
948
+ content: "\e154"
949
+ }
950
+
951
+ .glyphicon-sort-by-attributes:before {
952
+ content: "\e155"
953
+ }
954
+
955
+ .glyphicon-sort-by-attributes-alt:before {
956
+ content: "\e156"
957
+ }
958
+
959
+ .glyphicon-unchecked:before {
960
+ content: "\e157"
961
+ }
962
+
963
+ .glyphicon-expand:before {
964
+ content: "\e158"
965
+ }
966
+
967
+ .glyphicon-collapse-down:before {
968
+ content: "\e159"
969
+ }
970
+
971
+ .glyphicon-collapse-up:before {
972
+ content: "\e160"
973
+ }
974
+
975
+ .glyphicon-log-in:before {
976
+ content: "\e161"
977
+ }
978
+
979
+ .glyphicon-flash:before {
980
+ content: "\e162"
981
+ }
982
+
983
+ .glyphicon-log-out:before {
984
+ content: "\e163"
985
+ }
986
+
987
+ .glyphicon-new-window:before {
988
+ content: "\e164"
989
+ }
990
+
991
+ .glyphicon-record:before {
992
+ content: "\e165"
993
+ }
994
+
995
+ .glyphicon-save:before {
996
+ content: "\e166"
997
+ }
998
+
999
+ .glyphicon-open:before {
1000
+ content: "\e167"
1001
+ }
1002
+
1003
+ .glyphicon-saved:before {
1004
+ content: "\e168"
1005
+ }
1006
+
1007
+ .glyphicon-import:before {
1008
+ content: "\e169"
1009
+ }
1010
+
1011
+ .glyphicon-export:before {
1012
+ content: "\e170"
1013
+ }
1014
+
1015
+ .glyphicon-send:before {
1016
+ content: "\e171"
1017
+ }
1018
+
1019
+ .glyphicon-floppy-disk:before {
1020
+ content: "\e172"
1021
+ }
1022
+
1023
+ .glyphicon-floppy-saved:before {
1024
+ content: "\e173"
1025
+ }
1026
+
1027
+ .glyphicon-floppy-remove:before {
1028
+ content: "\e174"
1029
+ }
1030
+
1031
+ .glyphicon-floppy-save:before {
1032
+ content: "\e175"
1033
+ }
1034
+
1035
+ .glyphicon-floppy-open:before {
1036
+ content: "\e176"
1037
+ }
1038
+
1039
+ .glyphicon-credit-card:before {
1040
+ content: "\e177"
1041
+ }
1042
+
1043
+ .glyphicon-transfer:before {
1044
+ content: "\e178"
1045
+ }
1046
+
1047
+ .glyphicon-cutlery:before {
1048
+ content: "\e179"
1049
+ }
1050
+
1051
+ .glyphicon-header:before {
1052
+ content: "\e180"
1053
+ }
1054
+
1055
+ .glyphicon-compressed:before {
1056
+ content: "\e181"
1057
+ }
1058
+
1059
+ .glyphicon-earphone:before {
1060
+ content: "\e182"
1061
+ }
1062
+
1063
+ .glyphicon-phone-alt:before {
1064
+ content: "\e183"
1065
+ }
1066
+
1067
+ .glyphicon-tower:before {
1068
+ content: "\e184"
1069
+ }
1070
+
1071
+ .glyphicon-stats:before {
1072
+ content: "\e185"
1073
+ }
1074
+
1075
+ .glyphicon-sd-video:before {
1076
+ content: "\e186"
1077
+ }
1078
+
1079
+ .glyphicon-hd-video:before {
1080
+ content: "\e187"
1081
+ }
1082
+
1083
+ .glyphicon-subtitles:before {
1084
+ content: "\e188"
1085
+ }
1086
+
1087
+ .glyphicon-sound-stereo:before {
1088
+ content: "\e189"
1089
+ }
1090
+
1091
+ .glyphicon-sound-dolby:before {
1092
+ content: "\e190"
1093
+ }
1094
+
1095
+ .glyphicon-sound-5-1:before {
1096
+ content: "\e191"
1097
+ }
1098
+
1099
+ .glyphicon-sound-6-1:before {
1100
+ content: "\e192"
1101
+ }
1102
+
1103
+ .glyphicon-sound-7-1:before {
1104
+ content: "\e193"
1105
+ }
1106
+
1107
+ .glyphicon-copyright-mark:before {
1108
+ content: "\e194"
1109
+ }
1110
+
1111
+ .glyphicon-registration-mark:before {
1112
+ content: "\e195"
1113
+ }
1114
+
1115
+ .glyphicon-cloud-download:before {
1116
+ content: "\e197"
1117
+ }
1118
+
1119
+ .glyphicon-cloud-upload:before {
1120
+ content: "\e198"
1121
+ }
1122
+
1123
+ .glyphicon-tree-conifer:before {
1124
+ content: "\e199"
1125
+ }
1126
+
1127
+ .glyphicon-tree-deciduous:before {
1128
+ content: "\e200"
1129
+ }
1130
+
1131
+ .glyphicon-cd:before {
1132
+ content: "\e201"
1133
+ }
1134
+
1135
+ .glyphicon-save-file:before {
1136
+ content: "\e202"
1137
+ }
1138
+
1139
+ .glyphicon-open-file:before {
1140
+ content: "\e203"
1141
+ }
1142
+
1143
+ .glyphicon-level-up:before {
1144
+ content: "\e204"
1145
+ }
1146
+
1147
+ .glyphicon-copy:before {
1148
+ content: "\e205"
1149
+ }
1150
+
1151
+ .glyphicon-paste:before {
1152
+ content: "\e206"
1153
+ }
1154
+
1155
+ .glyphicon-alert:before {
1156
+ content: "\e209"
1157
+ }
1158
+
1159
+ .glyphicon-equalizer:before {
1160
+ content: "\e210"
1161
+ }
1162
+
1163
+ .glyphicon-king:before {
1164
+ content: "\e211"
1165
+ }
1166
+
1167
+ .glyphicon-queen:before {
1168
+ content: "\e212"
1169
+ }
1170
+
1171
+ .glyphicon-pawn:before {
1172
+ content: "\e213"
1173
+ }
1174
+
1175
+ .glyphicon-bishop:before {
1176
+ content: "\e214"
1177
+ }
1178
+
1179
+ .glyphicon-knight:before {
1180
+ content: "\e215"
1181
+ }
1182
+
1183
+ .glyphicon-baby-formula:before {
1184
+ content: "\e216"
1185
+ }
1186
+
1187
+ .glyphicon-tent:before {
1188
+ content: "\26fa"
1189
+ }
1190
+
1191
+ .glyphicon-blackboard:before {
1192
+ content: "\e218"
1193
+ }
1194
+
1195
+ .glyphicon-bed:before {
1196
+ content: "\e219"
1197
+ }
1198
+
1199
+ .glyphicon-apple:before {
1200
+ content: "\f8ff"
1201
+ }
1202
+
1203
+ .glyphicon-erase:before {
1204
+ content: "\e221"
1205
+ }
1206
+
1207
+ .glyphicon-hourglass:before {
1208
+ content: "\231b"
1209
+ }
1210
+
1211
+ .glyphicon-lamp:before {
1212
+ content: "\e223"
1213
+ }
1214
+
1215
+ .glyphicon-duplicate:before {
1216
+ content: "\e224"
1217
+ }
1218
+
1219
+ .glyphicon-piggy-bank:before {
1220
+ content: "\e225"
1221
+ }
1222
+
1223
+ .glyphicon-scissors:before {
1224
+ content: "\e226"
1225
+ }
1226
+
1227
+ .glyphicon-bitcoin:before {
1228
+ content: "\e227"
1229
+ }
1230
+
1231
+ .glyphicon-btc:before {
1232
+ content: "\e227"
1233
+ }
1234
+
1235
+ .glyphicon-xbt:before {
1236
+ content: "\e227"
1237
+ }
1238
+
1239
+ .glyphicon-yen:before {
1240
+ content: "\00a5"
1241
+ }
1242
+
1243
+ .glyphicon-jpy:before {
1244
+ content: "\00a5"
1245
+ }
1246
+
1247
+ .glyphicon-ruble:before {
1248
+ content: "\20bd"
1249
+ }
1250
+
1251
+ .glyphicon-rub:before {
1252
+ content: "\20bd"
1253
+ }
1254
+
1255
+ .glyphicon-scale:before {
1256
+ content: "\e230"
1257
+ }
1258
+
1259
+ .glyphicon-ice-lolly:before {
1260
+ content: "\e231"
1261
+ }
1262
+
1263
+ .glyphicon-ice-lolly-tasted:before {
1264
+ content: "\e232"
1265
+ }
1266
+
1267
+ .glyphicon-education:before {
1268
+ content: "\e233"
1269
+ }
1270
+
1271
+ .glyphicon-option-horizontal:before {
1272
+ content: "\e234"
1273
+ }
1274
+
1275
+ .glyphicon-option-vertical:before {
1276
+ content: "\e235"
1277
+ }
1278
+
1279
+ .glyphicon-menu-hamburger:before {
1280
+ content: "\e236"
1281
+ }
1282
+
1283
+ .glyphicon-modal-window:before {
1284
+ content: "\e237"
1285
+ }
1286
+
1287
+ .glyphicon-oil:before {
1288
+ content: "\e238"
1289
+ }
1290
+
1291
+ .glyphicon-grain:before {
1292
+ content: "\e239"
1293
+ }
1294
+
1295
+ .glyphicon-sunglasses:before {
1296
+ content: "\e240"
1297
+ }
1298
+
1299
+ .glyphicon-text-size:before {
1300
+ content: "\e241"
1301
+ }
1302
+
1303
+ .glyphicon-text-color:before {
1304
+ content: "\e242"
1305
+ }
1306
+
1307
+ .glyphicon-text-background:before {
1308
+ content: "\e243"
1309
+ }
1310
+
1311
+ .glyphicon-object-align-top:before {
1312
+ content: "\e244"
1313
+ }
1314
+
1315
+ .glyphicon-object-align-bottom:before {
1316
+ content: "\e245"
1317
+ }
1318
+
1319
+ .glyphicon-object-align-horizontal:before {
1320
+ content: "\e246"
1321
+ }
1322
+
1323
+ .glyphicon-object-align-left:before {
1324
+ content: "\e247"
1325
+ }
1326
+
1327
+ .glyphicon-object-align-vertical:before {
1328
+ content: "\e248"
1329
+ }
1330
+
1331
+ .glyphicon-object-align-right:before {
1332
+ content: "\e249"
1333
+ }
1334
+
1335
+ .glyphicon-triangle-right:before {
1336
+ content: "\e250"
1337
+ }
1338
+
1339
+ .glyphicon-triangle-left:before {
1340
+ content: "\e251"
1341
+ }
1342
+
1343
+ .glyphicon-triangle-bottom:before {
1344
+ content: "\e252"
1345
+ }
1346
+
1347
+ .glyphicon-triangle-top:before {
1348
+ content: "\e253"
1349
+ }
1350
+
1351
+ .glyphicon-console:before {
1352
+ content: "\e254"
1353
+ }
1354
+
1355
+ .glyphicon-superscript:before {
1356
+ content: "\e255"
1357
+ }
1358
+
1359
+ .glyphicon-subscript:before {
1360
+ content: "\e256"
1361
+ }
1362
+
1363
+ .glyphicon-menu-left:before {
1364
+ content: "\e257"
1365
+ }
1366
+
1367
+ .glyphicon-menu-right:before {
1368
+ content: "\e258"
1369
+ }
1370
+
1371
+ .glyphicon-menu-down:before {
1372
+ content: "\e259"
1373
+ }
1374
+
1375
+ .glyphicon-menu-up:before {
1376
+ content: "\e260"
1377
+ }
1378
+
1379
+ * {
1380
+ -webkit-box-sizing: border-box;
1381
+ -moz-box-sizing: border-box;
1382
+ box-sizing: border-box
1383
+ }
1384
+
1385
+ *:before,
1386
+ *:after {
1387
+ -webkit-box-sizing: border-box;
1388
+ -moz-box-sizing: border-box;
1389
+ box-sizing: border-box
1390
+ }
1391
+
1392
+ html {
1393
+ font-size: 10px;
1394
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
1395
+ }
1396
+
1397
+ body {
1398
+ font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
1399
+ font-size: 15px;
1400
+ line-height: 1.42857143;
1401
+ color: #2c3e50;
1402
+ background-color: #ffffff
1403
+ }
1404
+
1405
+ input,
1406
+ button,
1407
+ select,
1408
+ textarea {
1409
+ font-family: inherit;
1410
+ font-size: inherit;
1411
+ line-height: inherit
1412
+ }
1413
+
1414
+ a {
1415
+ color: #555;
1416
+ text-decoration: none
1417
+ }
1418
+
1419
+ a:hover,
1420
+ a:focus {
1421
+ color: #3498db;
1422
+ text-decoration: underline
1423
+ }
1424
+
1425
+ a:focus {
1426
+ outline: thin dotted;
1427
+ outline: 5px auto -webkit-focus-ring-color;
1428
+ outline-offset: -2px
1429
+ }
1430
+
1431
+ figure {
1432
+ margin: 0
1433
+ }
1434
+
1435
+ img {
1436
+ vertical-align: middle
1437
+ }
1438
+
1439
+ .img-responsive,
1440
+ .thumbnail>img,
1441
+ .thumbnail a>img,
1442
+ .carousel-inner>.item>img,
1443
+ .carousel-inner>.item>a>img {
1444
+ display: block;
1445
+ max-width: 100%;
1446
+ height: auto
1447
+ }
1448
+
1449
+ .img-rounded {
1450
+ border-radius: 6px
1451
+ }
1452
+
1453
+ .img-thumbnail {
1454
+ padding: 4px;
1455
+ line-height: 1.42857143;
1456
+ background-color: #ffffff;
1457
+ border: 1px solid #ecf0f1;
1458
+ border-radius: 4px;
1459
+ -webkit-transition: all .2s ease-in-out;
1460
+ -o-transition: all .2s ease-in-out;
1461
+ transition: all .2s ease-in-out;
1462
+ display: inline-block;
1463
+ max-width: 100%;
1464
+ height: auto
1465
+ }
1466
+
1467
+ .img-circle {
1468
+ border-radius: 50%
1469
+ }
1470
+
1471
+ hr {
1472
+ margin-top: 21px;
1473
+ margin-bottom: 21px;
1474
+ border: 0;
1475
+ border-top: 1px solid #ecf0f1
1476
+ }
1477
+
1478
+ .sr-only {
1479
+ position: absolute;
1480
+ width: 1px;
1481
+ height: 1px;
1482
+ margin: -1px;
1483
+ padding: 0;
1484
+ overflow: hidden;
1485
+ clip: rect(0, 0, 0, 0);
1486
+ border: 0
1487
+ }
1488
+
1489
+ .sr-only-focusable:active,
1490
+ .sr-only-focusable:focus {
1491
+ position: static;
1492
+ width: auto;
1493
+ height: auto;
1494
+ margin: 0;
1495
+ overflow: visible;
1496
+ clip: auto
1497
+ }
1498
+
1499
+ [role="button"] {
1500
+ cursor: pointer
1501
+ }
1502
+
1503
+ h1,
1504
+ h2,
1505
+ h3,
1506
+ h4,
1507
+ h5,
1508
+ h6,
1509
+ .h1,
1510
+ .h2,
1511
+ .h3,
1512
+ .h4,
1513
+ .h5,
1514
+ .h6 {
1515
+ font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
1516
+ font-weight: 400;
1517
+ line-height: 1.1;
1518
+ color: inherit
1519
+ }
1520
+
1521
+ h1 small,
1522
+ h2 small,
1523
+ h3 small,
1524
+ h4 small,
1525
+ h5 small,
1526
+ h6 small,
1527
+ .h1 small,
1528
+ .h2 small,
1529
+ .h3 small,
1530
+ .h4 small,
1531
+ .h5 small,
1532
+ .h6 small,
1533
+ h1 .small,
1534
+ h2 .small,
1535
+ h3 .small,
1536
+ h4 .small,
1537
+ h5 .small,
1538
+ h6 .small,
1539
+ .h1 .small,
1540
+ .h2 .small,
1541
+ .h3 .small,
1542
+ .h4 .small,
1543
+ .h5 .small,
1544
+ .h6 .small {
1545
+ font-weight: normal;
1546
+ line-height: 1;
1547
+ color: #b4bcc2
1548
+ }
1549
+
1550
+ h1,
1551
+ .h1,
1552
+ h2,
1553
+ .h2,
1554
+ h3,
1555
+ .h3 {
1556
+ margin-top: 21px;
1557
+ margin-bottom: 10.5px
1558
+ }
1559
+
1560
+ h1 small,
1561
+ .h1 small,
1562
+ h2 small,
1563
+ .h2 small,
1564
+ h3 small,
1565
+ .h3 small,
1566
+ h1 .small,
1567
+ .h1 .small,
1568
+ h2 .small,
1569
+ .h2 .small,
1570
+ h3 .small,
1571
+ .h3 .small {
1572
+ font-size: 65%
1573
+ }
1574
+
1575
+ h4,
1576
+ .h4,
1577
+ h5,
1578
+ .h5,
1579
+ h6,
1580
+ .h6 {
1581
+ margin-top: 10.5px;
1582
+ margin-bottom: 10.5px
1583
+ }
1584
+
1585
+ h4 small,
1586
+ .h4 small,
1587
+ h5 small,
1588
+ .h5 small,
1589
+ h6 small,
1590
+ .h6 small,
1591
+ h4 .small,
1592
+ .h4 .small,
1593
+ h5 .small,
1594
+ .h5 .small,
1595
+ h6 .small,
1596
+ .h6 .small {
1597
+ font-size: 75%
1598
+ }
1599
+
1600
+ h1,
1601
+ .h1 {
1602
+ font-size: 39px
1603
+ }
1604
+
1605
+ h2,
1606
+ .h2 {
1607
+ font-size: 32px
1608
+ }
1609
+
1610
+ h3,
1611
+ .h3 {
1612
+ font-size: 26px
1613
+ }
1614
+
1615
+ h4,
1616
+ .h4 {
1617
+ font-size: 16px
1618
+ }
1619
+
1620
+ h5,
1621
+ .h5 {
1622
+ font-size: 15px
1623
+ }
1624
+
1625
+ h6,
1626
+ .h6 {
1627
+ font-size: 13px
1628
+ }
1629
+
1630
+ p {
1631
+ margin: 0 0 10.5px
1632
+ }
1633
+
1634
+ .lead {
1635
+ margin-bottom: 21px;
1636
+ font-size: 17px;
1637
+ font-weight: 300;
1638
+ line-height: 1.4
1639
+ }
1640
+
1641
+ @media (min-width: 768px) {
1642
+ .lead {
1643
+ font-size: 22.5px
1644
+ }
1645
+ }
1646
+
1647
+ small,
1648
+ .small {
1649
+ font-size: 86%
1650
+ }
1651
+
1652
+ mark,
1653
+ .mark {
1654
+ background-color: #f39c12;
1655
+ padding: .2em
1656
+ }
1657
+
1658
+ .text-left {
1659
+ text-align: left
1660
+ }
1661
+
1662
+ .text-right {
1663
+ text-align: right
1664
+ }
1665
+
1666
+ .text-center {
1667
+ text-align: center
1668
+ }
1669
+
1670
+ .text-justify {
1671
+ text-align: justify
1672
+ }
1673
+
1674
+ .text-nowrap {
1675
+ white-space: nowrap
1676
+ }
1677
+
1678
+ .text-lowercase {
1679
+ text-transform: lowercase
1680
+ }
1681
+
1682
+ .text-uppercase {
1683
+ text-transform: uppercase
1684
+ }
1685
+
1686
+ .text-capitalize {
1687
+ text-transform: capitalize
1688
+ }
1689
+
1690
+ .text-muted {
1691
+ color: #b4bcc2
1692
+ }
1693
+
1694
+ .text-primary {
1695
+ color: #2c3e50
1696
+ }
1697
+
1698
+ a.text-primary:hover,
1699
+ a.text-primary:focus {
1700
+ color: #1a242f
1701
+ }
1702
+
1703
+ .text-success {
1704
+ color: #ffffff
1705
+ }
1706
+
1707
+ a.text-success:hover,
1708
+ a.text-success:focus {
1709
+ color: #e6e6e6
1710
+ }
1711
+
1712
+ .text-info {
1713
+ color: #ffffff
1714
+ }
1715
+
1716
+ a.text-info:hover,
1717
+ a.text-info:focus {
1718
+ color: #e6e6e6
1719
+ }
1720
+
1721
+ .text-warning {
1722
+ color: #ffffff
1723
+ }
1724
+
1725
+ a.text-warning:hover,
1726
+ a.text-warning:focus {
1727
+ color: #e6e6e6
1728
+ }
1729
+
1730
+ .text-danger {
1731
+ color: #ffffff
1732
+ }
1733
+
1734
+ a.text-danger:hover,
1735
+ a.text-danger:focus {
1736
+ color: #e6e6e6
1737
+ }
1738
+
1739
+ .bg-primary {
1740
+ color: #fff;
1741
+ background-color: #2c3e50
1742
+ }
1743
+
1744
+ a.bg-primary:hover,
1745
+ a.bg-primary:focus {
1746
+ background-color: #1a242f
1747
+ }
1748
+
1749
+ .bg-success {
1750
+ background-color: #18bc9c
1751
+ }
1752
+
1753
+ a.bg-success:hover,
1754
+ a.bg-success:focus {
1755
+ background-color: #128f76
1756
+ }
1757
+
1758
+ .bg-info {
1759
+ background-color: #3498db
1760
+ }
1761
+
1762
+ a.bg-info:hover,
1763
+ a.bg-info:focus {
1764
+ background-color: #217dbb
1765
+ }
1766
+
1767
+ .bg-warning {
1768
+ background-color: #f39c12
1769
+ }
1770
+
1771
+ a.bg-warning:hover,
1772
+ a.bg-warning:focus {
1773
+ background-color: #c87f0a
1774
+ }
1775
+
1776
+ .bg-danger {
1777
+ background-color: #e74c3c
1778
+ }
1779
+
1780
+ a.bg-danger:hover,
1781
+ a.bg-danger:focus {
1782
+ background-color: #d62c1a
1783
+ }
1784
+
1785
+ .page-header {
1786
+ padding-bottom: 9.5px;
1787
+ margin: 42px 0 21px;
1788
+ border-bottom: 1px solid transparent
1789
+ }
1790
+
1791
+ ul,
1792
+ ol {
1793
+ margin-top: 0;
1794
+ margin-bottom: 10.5px
1795
+ }
1796
+
1797
+ ul ul,
1798
+ ol ul,
1799
+ ul ol,
1800
+ ol ol {
1801
+ margin-bottom: 0
1802
+ }
1803
+
1804
+ .list-unstyled {
1805
+ padding-left: 0;
1806
+ list-style: none
1807
+ }
1808
+
1809
+ .list-inline {
1810
+ padding-left: 0;
1811
+ list-style: none;
1812
+ margin-left: -5px
1813
+ }
1814
+
1815
+ .list-inline>li {
1816
+ display: inline-block;
1817
+ padding-left: 5px;
1818
+ padding-right: 5px
1819
+ }
1820
+
1821
+ dl {
1822
+ margin-top: 0;
1823
+ margin-bottom: 21px
1824
+ }
1825
+
1826
+ dt,
1827
+ dd {
1828
+ line-height: 1.42857143
1829
+ }
1830
+
1831
+ dt {
1832
+ font-weight: bold
1833
+ }
1834
+
1835
+ dd {
1836
+ margin-left: 0
1837
+ }
1838
+
1839
+ @media (min-width: 768px) {
1840
+ .dl-horizontal dt {
1841
+ float: left;
1842
+ width: 160px;
1843
+ clear: left;
1844
+ text-align: right;
1845
+ overflow: hidden;
1846
+ text-overflow: ellipsis;
1847
+ white-space: nowrap
1848
+ }
1849
+ .dl-horizontal dd {
1850
+ margin-left: 180px
1851
+ }
1852
+ }
1853
+
1854
+ abbr[title],
1855
+ abbr[data-original-title] {
1856
+ cursor: help;
1857
+ border-bottom: 1px dotted #b4bcc2
1858
+ }
1859
+
1860
+ .initialism {
1861
+ font-size: 90%;
1862
+ text-transform: uppercase
1863
+ }
1864
+
1865
+ blockquote {
1866
+ padding: 10.5px 21px;
1867
+ margin: 0 0 21px;
1868
+ font-size: 18.75px;
1869
+ border-left: 5px solid #ecf0f1
1870
+ }
1871
+
1872
+ blockquote p:last-child,
1873
+ blockquote ul:last-child,
1874
+ blockquote ol:last-child {
1875
+ margin-bottom: 0
1876
+ }
1877
+
1878
+ blockquote footer,
1879
+ blockquote small,
1880
+ blockquote .small {
1881
+ display: block;
1882
+ font-size: 80%;
1883
+ line-height: 1.42857143;
1884
+ color: #b4bcc2
1885
+ }
1886
+
1887
+ blockquote footer:before,
1888
+ blockquote small:before,
1889
+ blockquote .small:before {
1890
+ content: '\2014 \00A0'
1891
+ }
1892
+
1893
+ .blockquote-reverse,
1894
+ blockquote.pull-right {
1895
+ padding-right: 15px;
1896
+ padding-left: 0;
1897
+ border-right: 5px solid #ecf0f1;
1898
+ border-left: 0;
1899
+ text-align: right
1900
+ }
1901
+
1902
+ .blockquote-reverse footer:before,
1903
+ blockquote.pull-right footer:before,
1904
+ .blockquote-reverse small:before,
1905
+ blockquote.pull-right small:before,
1906
+ .blockquote-reverse .small:before,
1907
+ blockquote.pull-right .small:before {
1908
+ content: ''
1909
+ }
1910
+
1911
+ .blockquote-reverse footer:after,
1912
+ blockquote.pull-right footer:after,
1913
+ .blockquote-reverse small:after,
1914
+ blockquote.pull-right small:after,
1915
+ .blockquote-reverse .small:after,
1916
+ blockquote.pull-right .small:after {
1917
+ content: '\00A0 \2014'
1918
+ }
1919
+
1920
+ address {
1921
+ margin-bottom: 21px;
1922
+ font-style: normal;
1923
+ line-height: 1.42857143
1924
+ }
1925
+
1926
+ code,
1927
+ kbd,
1928
+ pre,
1929
+ samp {
1930
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace
1931
+ }
1932
+
1933
+ code {
1934
+ padding: 2px 4px;
1935
+ font-size: 90%;
1936
+ color: #c7254e;
1937
+ background-color: #f9f2f4;
1938
+ border-radius: 4px
1939
+ }
1940
+
1941
+ kbd {
1942
+ padding: 2px 4px;
1943
+ font-size: 90%;
1944
+ color: #ffffff;
1945
+ background-color: #333333;
1946
+ border-radius: 3px;
1947
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
1948
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25)
1949
+ }
1950
+
1951
+ kbd kbd {
1952
+ padding: 0;
1953
+ font-size: 100%;
1954
+ font-weight: bold;
1955
+ -webkit-box-shadow: none;
1956
+ box-shadow: none
1957
+ }
1958
+
1959
+ pre {
1960
+ display: block;
1961
+ padding: 10px;
1962
+ margin: 0 0 10.5px;
1963
+ font-size: 14px;
1964
+ line-height: 1.42857143;
1965
+ word-break: break-all;
1966
+ word-wrap: break-word;
1967
+ color: #7b8a8b;
1968
+ background-color: #ecf0f1;
1969
+ border: 1px solid #cccccc;
1970
+ border-radius: 4px
1971
+ }
1972
+
1973
+ pre code {
1974
+ padding: 0;
1975
+ font-size: inherit;
1976
+ color: inherit;
1977
+ white-space: pre-wrap;
1978
+ background-color: transparent;
1979
+ border-radius: 0
1980
+ }
1981
+
1982
+ .pre-scrollable {
1983
+ max-height: 340px;
1984
+ overflow-y: scroll
1985
+ }
1986
+
1987
+ .container {
1988
+ margin-right: auto;
1989
+ margin-left: auto;
1990
+ padding-left: 15px;
1991
+ padding-right: 15px
1992
+ }
1993
+
1994
+ @media (min-width: 768px) {
1995
+ .container {
1996
+ width: 750px
1997
+ }
1998
+ }
1999
+
2000
+ @media (min-width: 992px) {
2001
+ .container {
2002
+ width: 970px
2003
+ }
2004
+ }
2005
+
2006
+ @media (min-width: 1200px) {
2007
+ .container {
2008
+ width: 1170px
2009
+ }
2010
+ }
2011
+
2012
+ .container-fluid {
2013
+ margin-right: auto;
2014
+ margin-left: auto;
2015
+ padding-left: 15px;
2016
+ padding-right: 15px
2017
+ }
2018
+
2019
+ .row {
2020
+ margin-left: -15px;
2021
+ margin-right: -15px
2022
+ }
2023
+
2024
+ .col-xs-1,
2025
+ .col-sm-1,
2026
+ .col-md-1,
2027
+ .col-lg-1,
2028
+ .col-xs-2,
2029
+ .col-sm-2,
2030
+ .col-md-2,
2031
+ .col-lg-2,
2032
+ .col-xs-3,
2033
+ .col-sm-3,
2034
+ .col-md-3,
2035
+ .col-lg-3,
2036
+ .col-xs-4,
2037
+ .col-sm-4,
2038
+ .col-md-4,
2039
+ .col-lg-4,
2040
+ .col-xs-5,
2041
+ .col-sm-5,
2042
+ .col-md-5,
2043
+ .col-lg-5,
2044
+ .col-xs-6,
2045
+ .col-sm-6,
2046
+ .col-md-6,
2047
+ .col-lg-6,
2048
+ .col-xs-7,
2049
+ .col-sm-7,
2050
+ .col-md-7,
2051
+ .col-lg-7,
2052
+ .col-xs-8,
2053
+ .col-sm-8,
2054
+ .col-md-8,
2055
+ .col-lg-8,
2056
+ .col-xs-9,
2057
+ .col-sm-9,
2058
+ .col-md-9,
2059
+ .col-lg-9,
2060
+ .col-xs-10,
2061
+ .col-sm-10,
2062
+ .col-md-10,
2063
+ .col-lg-10,
2064
+ .col-xs-11,
2065
+ .col-sm-11,
2066
+ .col-md-11,
2067
+ .col-lg-11,
2068
+ .col-xs-12,
2069
+ .col-sm-12,
2070
+ .col-md-12,
2071
+ .col-lg-12 {
2072
+ position: relative;
2073
+ min-height: 1px;
2074
+ padding-left: 15px;
2075
+ padding-right: 15px
2076
+ }
2077
+
2078
+ .col-xs-1,
2079
+ .col-xs-2,
2080
+ .col-xs-3,
2081
+ .col-xs-4,
2082
+ .col-xs-5,
2083
+ .col-xs-6,
2084
+ .col-xs-7,
2085
+ .col-xs-8,
2086
+ .col-xs-9,
2087
+ .col-xs-10,
2088
+ .col-xs-11,
2089
+ .col-xs-12 {
2090
+ float: left
2091
+ }
2092
+
2093
+ .col-xs-12 {
2094
+ width: 100%
2095
+ }
2096
+
2097
+ .col-xs-11 {
2098
+ width: 91.66666667%
2099
+ }
2100
+
2101
+ .col-xs-10 {
2102
+ width: 83.33333333%
2103
+ }
2104
+
2105
+ .col-xs-9 {
2106
+ width: 75%
2107
+ }
2108
+
2109
+ .col-xs-8 {
2110
+ width: 66.66666667%
2111
+ }
2112
+
2113
+ .col-xs-7 {
2114
+ width: 58.33333333%
2115
+ }
2116
+
2117
+ .col-xs-6 {
2118
+ width: 50%
2119
+ }
2120
+
2121
+ .col-xs-5 {
2122
+ width: 41.66666667%
2123
+ }
2124
+
2125
+ .col-xs-4 {
2126
+ width: 33.33333333%
2127
+ }
2128
+
2129
+ .col-xs-3 {
2130
+ width: 25%
2131
+ }
2132
+
2133
+ .col-xs-2 {
2134
+ width: 16.66666667%
2135
+ }
2136
+
2137
+ .col-xs-1 {
2138
+ width: 8.33333333%
2139
+ }
2140
+
2141
+ .col-xs-pull-12 {
2142
+ right: 100%
2143
+ }
2144
+
2145
+ .col-xs-pull-11 {
2146
+ right: 91.66666667%
2147
+ }
2148
+
2149
+ .col-xs-pull-10 {
2150
+ right: 83.33333333%
2151
+ }
2152
+
2153
+ .col-xs-pull-9 {
2154
+ right: 75%
2155
+ }
2156
+
2157
+ .col-xs-pull-8 {
2158
+ right: 66.66666667%
2159
+ }
2160
+
2161
+ .col-xs-pull-7 {
2162
+ right: 58.33333333%
2163
+ }
2164
+
2165
+ .col-xs-pull-6 {
2166
+ right: 50%
2167
+ }
2168
+
2169
+ .col-xs-pull-5 {
2170
+ right: 41.66666667%
2171
+ }
2172
+
2173
+ .col-xs-pull-4 {
2174
+ right: 33.33333333%
2175
+ }
2176
+
2177
+ .col-xs-pull-3 {
2178
+ right: 25%
2179
+ }
2180
+
2181
+ .col-xs-pull-2 {
2182
+ right: 16.66666667%
2183
+ }
2184
+
2185
+ .col-xs-pull-1 {
2186
+ right: 8.33333333%
2187
+ }
2188
+
2189
+ .col-xs-pull-0 {
2190
+ right: auto
2191
+ }
2192
+
2193
+ .col-xs-push-12 {
2194
+ left: 100%
2195
+ }
2196
+
2197
+ .col-xs-push-11 {
2198
+ left: 91.66666667%
2199
+ }
2200
+
2201
+ .col-xs-push-10 {
2202
+ left: 83.33333333%
2203
+ }
2204
+
2205
+ .col-xs-push-9 {
2206
+ left: 75%
2207
+ }
2208
+
2209
+ .col-xs-push-8 {
2210
+ left: 66.66666667%
2211
+ }
2212
+
2213
+ .col-xs-push-7 {
2214
+ left: 58.33333333%
2215
+ }
2216
+
2217
+ .col-xs-push-6 {
2218
+ left: 50%
2219
+ }
2220
+
2221
+ .col-xs-push-5 {
2222
+ left: 41.66666667%
2223
+ }
2224
+
2225
+ .col-xs-push-4 {
2226
+ left: 33.33333333%
2227
+ }
2228
+
2229
+ .col-xs-push-3 {
2230
+ left: 25%
2231
+ }
2232
+
2233
+ .col-xs-push-2 {
2234
+ left: 16.66666667%
2235
+ }
2236
+
2237
+ .col-xs-push-1 {
2238
+ left: 8.33333333%
2239
+ }
2240
+
2241
+ .col-xs-push-0 {
2242
+ left: auto
2243
+ }
2244
+
2245
+ .col-xs-offset-12 {
2246
+ margin-left: 100%
2247
+ }
2248
+
2249
+ .col-xs-offset-11 {
2250
+ margin-left: 91.66666667%
2251
+ }
2252
+
2253
+ .col-xs-offset-10 {
2254
+ margin-left: 83.33333333%
2255
+ }
2256
+
2257
+ .col-xs-offset-9 {
2258
+ margin-left: 75%
2259
+ }
2260
+
2261
+ .col-xs-offset-8 {
2262
+ margin-left: 66.66666667%
2263
+ }
2264
+
2265
+ .col-xs-offset-7 {
2266
+ margin-left: 58.33333333%
2267
+ }
2268
+
2269
+ .col-xs-offset-6 {
2270
+ margin-left: 50%
2271
+ }
2272
+
2273
+ .col-xs-offset-5 {
2274
+ margin-left: 41.66666667%
2275
+ }
2276
+
2277
+ .col-xs-offset-4 {
2278
+ margin-left: 33.33333333%
2279
+ }
2280
+
2281
+ .col-xs-offset-3 {
2282
+ margin-left: 25%
2283
+ }
2284
+
2285
+ .col-xs-offset-2 {
2286
+ margin-left: 16.66666667%
2287
+ }
2288
+
2289
+ .col-xs-offset-1 {
2290
+ margin-left: 8.33333333%
2291
+ }
2292
+
2293
+ .col-xs-offset-0 {
2294
+ margin-left: 0%
2295
+ }
2296
+
2297
+ @media (min-width: 768px) {
2298
+ .col-sm-1,
2299
+ .col-sm-2,
2300
+ .col-sm-3,
2301
+ .col-sm-4,
2302
+ .col-sm-5,
2303
+ .col-sm-6,
2304
+ .col-sm-7,
2305
+ .col-sm-8,
2306
+ .col-sm-9,
2307
+ .col-sm-10,
2308
+ .col-sm-11,
2309
+ .col-sm-12 {
2310
+ float: left
2311
+ }
2312
+ .col-sm-12 {
2313
+ width: 100%
2314
+ }
2315
+ .col-sm-11 {
2316
+ width: 91.66666667%
2317
+ }
2318
+ .col-sm-10 {
2319
+ width: 83.33333333%
2320
+ }
2321
+ .col-sm-9 {
2322
+ width: 75%
2323
+ }
2324
+ .col-sm-8 {
2325
+ width: 66.66666667%
2326
+ }
2327
+ .col-sm-7 {
2328
+ width: 58.33333333%
2329
+ }
2330
+ .col-sm-6 {
2331
+ width: 50%
2332
+ }
2333
+ .col-sm-5 {
2334
+ width: 41.66666667%
2335
+ }
2336
+ .col-sm-4 {
2337
+ width: 33.33333333%
2338
+ }
2339
+ .col-sm-3 {
2340
+ width: 25%
2341
+ }
2342
+ .col-sm-2 {
2343
+ width: 16.66666667%
2344
+ }
2345
+ .col-sm-1 {
2346
+ width: 8.33333333%
2347
+ }
2348
+ .col-sm-pull-12 {
2349
+ right: 100%
2350
+ }
2351
+ .col-sm-pull-11 {
2352
+ right: 91.66666667%
2353
+ }
2354
+ .col-sm-pull-10 {
2355
+ right: 83.33333333%
2356
+ }
2357
+ .col-sm-pull-9 {
2358
+ right: 75%
2359
+ }
2360
+ .col-sm-pull-8 {
2361
+ right: 66.66666667%
2362
+ }
2363
+ .col-sm-pull-7 {
2364
+ right: 58.33333333%
2365
+ }
2366
+ .col-sm-pull-6 {
2367
+ right: 50%
2368
+ }
2369
+ .col-sm-pull-5 {
2370
+ right: 41.66666667%
2371
+ }
2372
+ .col-sm-pull-4 {
2373
+ right: 33.33333333%
2374
+ }
2375
+ .col-sm-pull-3 {
2376
+ right: 25%
2377
+ }
2378
+ .col-sm-pull-2 {
2379
+ right: 16.66666667%
2380
+ }
2381
+ .col-sm-pull-1 {
2382
+ right: 8.33333333%
2383
+ }
2384
+ .col-sm-pull-0 {
2385
+ right: auto
2386
+ }
2387
+ .col-sm-push-12 {
2388
+ left: 100%
2389
+ }
2390
+ .col-sm-push-11 {
2391
+ left: 91.66666667%
2392
+ }
2393
+ .col-sm-push-10 {
2394
+ left: 83.33333333%
2395
+ }
2396
+ .col-sm-push-9 {
2397
+ left: 75%
2398
+ }
2399
+ .col-sm-push-8 {
2400
+ left: 66.66666667%
2401
+ }
2402
+ .col-sm-push-7 {
2403
+ left: 58.33333333%
2404
+ }
2405
+ .col-sm-push-6 {
2406
+ left: 50%
2407
+ }
2408
+ .col-sm-push-5 {
2409
+ left: 41.66666667%
2410
+ }
2411
+ .col-sm-push-4 {
2412
+ left: 33.33333333%
2413
+ }
2414
+ .col-sm-push-3 {
2415
+ left: 25%
2416
+ }
2417
+ .col-sm-push-2 {
2418
+ left: 16.66666667%
2419
+ }
2420
+ .col-sm-push-1 {
2421
+ left: 8.33333333%
2422
+ }
2423
+ .col-sm-push-0 {
2424
+ left: auto
2425
+ }
2426
+ .col-sm-offset-12 {
2427
+ margin-left: 100%
2428
+ }
2429
+ .col-sm-offset-11 {
2430
+ margin-left: 91.66666667%
2431
+ }
2432
+ .col-sm-offset-10 {
2433
+ margin-left: 83.33333333%
2434
+ }
2435
+ .col-sm-offset-9 {
2436
+ margin-left: 75%
2437
+ }
2438
+ .col-sm-offset-8 {
2439
+ margin-left: 66.66666667%
2440
+ }
2441
+ .col-sm-offset-7 {
2442
+ margin-left: 58.33333333%
2443
+ }
2444
+ .col-sm-offset-6 {
2445
+ margin-left: 50%
2446
+ }
2447
+ .col-sm-offset-5 {
2448
+ margin-left: 41.66666667%
2449
+ }
2450
+ .col-sm-offset-4 {
2451
+ margin-left: 33.33333333%
2452
+ }
2453
+ .col-sm-offset-3 {
2454
+ margin-left: 25%
2455
+ }
2456
+ .col-sm-offset-2 {
2457
+ margin-left: 16.66666667%
2458
+ }
2459
+ .col-sm-offset-1 {
2460
+ margin-left: 8.33333333%
2461
+ }
2462
+ .col-sm-offset-0 {
2463
+ margin-left: 0%
2464
+ }
2465
+ }
2466
+
2467
+ @media (min-width: 992px) {
2468
+ .col-md-1,
2469
+ .col-md-2,
2470
+ .col-md-3,
2471
+ .col-md-4,
2472
+ .col-md-5,
2473
+ .col-md-6,
2474
+ .col-md-7,
2475
+ .col-md-8,
2476
+ .col-md-9,
2477
+ .col-md-10,
2478
+ .col-md-11,
2479
+ .col-md-12 {
2480
+ float: left
2481
+ }
2482
+ .col-md-12 {
2483
+ width: 100%
2484
+ }
2485
+ .col-md-11 {
2486
+ width: 91.66666667%
2487
+ }
2488
+ .col-md-10 {
2489
+ width: 83.33333333%
2490
+ }
2491
+ .col-md-9 {
2492
+ width: 75%
2493
+ }
2494
+ .col-md-8 {
2495
+ width: 66.66666667%
2496
+ }
2497
+ .col-md-7 {
2498
+ width: 58.33333333%
2499
+ }
2500
+ .col-md-6 {
2501
+ width: 50%
2502
+ }
2503
+ .col-md-5 {
2504
+ width: 41.66666667%
2505
+ }
2506
+ .col-md-4 {
2507
+ width: 33.33333333%
2508
+ }
2509
+ .col-md-3 {
2510
+ width: 25%
2511
+ }
2512
+ .col-md-2 {
2513
+ width: 16.66666667%
2514
+ }
2515
+ .col-md-1 {
2516
+ width: 8.33333333%
2517
+ }
2518
+ .col-md-pull-12 {
2519
+ right: 100%
2520
+ }
2521
+ .col-md-pull-11 {
2522
+ right: 91.66666667%
2523
+ }
2524
+ .col-md-pull-10 {
2525
+ right: 83.33333333%
2526
+ }
2527
+ .col-md-pull-9 {
2528
+ right: 75%
2529
+ }
2530
+ .col-md-pull-8 {
2531
+ right: 66.66666667%
2532
+ }
2533
+ .col-md-pull-7 {
2534
+ right: 58.33333333%
2535
+ }
2536
+ .col-md-pull-6 {
2537
+ right: 50%
2538
+ }
2539
+ .col-md-pull-5 {
2540
+ right: 41.66666667%
2541
+ }
2542
+ .col-md-pull-4 {
2543
+ right: 33.33333333%
2544
+ }
2545
+ .col-md-pull-3 {
2546
+ right: 25%
2547
+ }
2548
+ .col-md-pull-2 {
2549
+ right: 16.66666667%
2550
+ }
2551
+ .col-md-pull-1 {
2552
+ right: 8.33333333%
2553
+ }
2554
+ .col-md-pull-0 {
2555
+ right: auto
2556
+ }
2557
+ .col-md-push-12 {
2558
+ left: 100%
2559
+ }
2560
+ .col-md-push-11 {
2561
+ left: 91.66666667%
2562
+ }
2563
+ .col-md-push-10 {
2564
+ left: 83.33333333%
2565
+ }
2566
+ .col-md-push-9 {
2567
+ left: 75%
2568
+ }
2569
+ .col-md-push-8 {
2570
+ left: 66.66666667%
2571
+ }
2572
+ .col-md-push-7 {
2573
+ left: 58.33333333%
2574
+ }
2575
+ .col-md-push-6 {
2576
+ left: 50%
2577
+ }
2578
+ .col-md-push-5 {
2579
+ left: 41.66666667%
2580
+ }
2581
+ .col-md-push-4 {
2582
+ left: 33.33333333%
2583
+ }
2584
+ .col-md-push-3 {
2585
+ left: 25%
2586
+ }
2587
+ .col-md-push-2 {
2588
+ left: 16.66666667%
2589
+ }
2590
+ .col-md-push-1 {
2591
+ left: 8.33333333%
2592
+ }
2593
+ .col-md-push-0 {
2594
+ left: auto
2595
+ }
2596
+ .col-md-offset-12 {
2597
+ margin-left: 100%
2598
+ }
2599
+ .col-md-offset-11 {
2600
+ margin-left: 91.66666667%
2601
+ }
2602
+ .col-md-offset-10 {
2603
+ margin-left: 83.33333333%
2604
+ }
2605
+ .col-md-offset-9 {
2606
+ margin-left: 75%
2607
+ }
2608
+ .col-md-offset-8 {
2609
+ margin-left: 66.66666667%
2610
+ }
2611
+ .col-md-offset-7 {
2612
+ margin-left: 58.33333333%
2613
+ }
2614
+ .col-md-offset-6 {
2615
+ margin-left: 50%
2616
+ }
2617
+ .col-md-offset-5 {
2618
+ margin-left: 41.66666667%
2619
+ }
2620
+ .col-md-offset-4 {
2621
+ margin-left: 33.33333333%
2622
+ }
2623
+ .col-md-offset-3 {
2624
+ margin-left: 25%
2625
+ }
2626
+ .col-md-offset-2 {
2627
+ margin-left: 16.66666667%
2628
+ }
2629
+ .col-md-offset-1 {
2630
+ margin-left: 8.33333333%
2631
+ }
2632
+ .col-md-offset-0 {
2633
+ margin-left: 0%
2634
+ }
2635
+ }
2636
+
2637
+ @media (min-width: 1200px) {
2638
+ .col-lg-1,
2639
+ .col-lg-2,
2640
+ .col-lg-3,
2641
+ .col-lg-4,
2642
+ .col-lg-5,
2643
+ .col-lg-6,
2644
+ .col-lg-7,
2645
+ .col-lg-8,
2646
+ .col-lg-9,
2647
+ .col-lg-10,
2648
+ .col-lg-11,
2649
+ .col-lg-12 {
2650
+ float: left
2651
+ }
2652
+ .col-lg-12 {
2653
+ width: 100%
2654
+ }
2655
+ .col-lg-11 {
2656
+ width: 91.66666667%
2657
+ }
2658
+ .col-lg-10 {
2659
+ width: 83.33333333%
2660
+ }
2661
+ .col-lg-9 {
2662
+ width: 75%
2663
+ }
2664
+ .col-lg-8 {
2665
+ width: 66.66666667%
2666
+ }
2667
+ .col-lg-7 {
2668
+ width: 58.33333333%
2669
+ }
2670
+ .col-lg-6 {
2671
+ width: 50%
2672
+ }
2673
+ .col-lg-5 {
2674
+ width: 41.66666667%
2675
+ }
2676
+ .col-lg-4 {
2677
+ width: 33.33333333%
2678
+ }
2679
+ .col-lg-3 {
2680
+ width: 25%
2681
+ }
2682
+ .col-lg-2 {
2683
+ width: 16.66666667%
2684
+ }
2685
+ .col-lg-1 {
2686
+ width: 8.33333333%
2687
+ }
2688
+ .col-lg-pull-12 {
2689
+ right: 100%
2690
+ }
2691
+ .col-lg-pull-11 {
2692
+ right: 91.66666667%
2693
+ }
2694
+ .col-lg-pull-10 {
2695
+ right: 83.33333333%
2696
+ }
2697
+ .col-lg-pull-9 {
2698
+ right: 75%
2699
+ }
2700
+ .col-lg-pull-8 {
2701
+ right: 66.66666667%
2702
+ }
2703
+ .col-lg-pull-7 {
2704
+ right: 58.33333333%
2705
+ }
2706
+ .col-lg-pull-6 {
2707
+ right: 50%
2708
+ }
2709
+ .col-lg-pull-5 {
2710
+ right: 41.66666667%
2711
+ }
2712
+ .col-lg-pull-4 {
2713
+ right: 33.33333333%
2714
+ }
2715
+ .col-lg-pull-3 {
2716
+ right: 25%
2717
+ }
2718
+ .col-lg-pull-2 {
2719
+ right: 16.66666667%
2720
+ }
2721
+ .col-lg-pull-1 {
2722
+ right: 8.33333333%
2723
+ }
2724
+ .col-lg-pull-0 {
2725
+ right: auto
2726
+ }
2727
+ .col-lg-push-12 {
2728
+ left: 100%
2729
+ }
2730
+ .col-lg-push-11 {
2731
+ left: 91.66666667%
2732
+ }
2733
+ .col-lg-push-10 {
2734
+ left: 83.33333333%
2735
+ }
2736
+ .col-lg-push-9 {
2737
+ left: 75%
2738
+ }
2739
+ .col-lg-push-8 {
2740
+ left: 66.66666667%
2741
+ }
2742
+ .col-lg-push-7 {
2743
+ left: 58.33333333%
2744
+ }
2745
+ .col-lg-push-6 {
2746
+ left: 50%
2747
+ }
2748
+ .col-lg-push-5 {
2749
+ left: 41.66666667%
2750
+ }
2751
+ .col-lg-push-4 {
2752
+ left: 33.33333333%
2753
+ }
2754
+ .col-lg-push-3 {
2755
+ left: 25%
2756
+ }
2757
+ .col-lg-push-2 {
2758
+ left: 16.66666667%
2759
+ }
2760
+ .col-lg-push-1 {
2761
+ left: 8.33333333%
2762
+ }
2763
+ .col-lg-push-0 {
2764
+ left: auto
2765
+ }
2766
+ .col-lg-offset-12 {
2767
+ margin-left: 100%
2768
+ }
2769
+ .col-lg-offset-11 {
2770
+ margin-left: 91.66666667%
2771
+ }
2772
+ .col-lg-offset-10 {
2773
+ margin-left: 83.33333333%
2774
+ }
2775
+ .col-lg-offset-9 {
2776
+ margin-left: 75%
2777
+ }
2778
+ .col-lg-offset-8 {
2779
+ margin-left: 66.66666667%
2780
+ }
2781
+ .col-lg-offset-7 {
2782
+ margin-left: 58.33333333%
2783
+ }
2784
+ .col-lg-offset-6 {
2785
+ margin-left: 50%
2786
+ }
2787
+ .col-lg-offset-5 {
2788
+ margin-left: 41.66666667%
2789
+ }
2790
+ .col-lg-offset-4 {
2791
+ margin-left: 33.33333333%
2792
+ }
2793
+ .col-lg-offset-3 {
2794
+ margin-left: 25%
2795
+ }
2796
+ .col-lg-offset-2 {
2797
+ margin-left: 16.66666667%
2798
+ }
2799
+ .col-lg-offset-1 {
2800
+ margin-left: 8.33333333%
2801
+ }
2802
+ .col-lg-offset-0 {
2803
+ margin-left: 0%
2804
+ }
2805
+ }
2806
+
2807
+ table {
2808
+ background-color: transparent
2809
+ }
2810
+
2811
+ caption {
2812
+ padding-top: 8px;
2813
+ padding-bottom: 8px;
2814
+ color: #b4bcc2;
2815
+ text-align: left
2816
+ }
2817
+
2818
+ th {
2819
+ text-align: left
2820
+ }
2821
+
2822
+ .table {
2823
+ width: 100%;
2824
+ max-width: 100%;
2825
+ margin-bottom: 21px
2826
+ }
2827
+
2828
+ .table>thead>tr>th,
2829
+ .table>tbody>tr>th,
2830
+ .table>tfoot>tr>th,
2831
+ .table>thead>tr>td,
2832
+ .table>tbody>tr>td,
2833
+ .table>tfoot>tr>td {
2834
+ padding: 8px;
2835
+ line-height: 1.42857143;
2836
+ vertical-align: top;
2837
+ border-top: 1px solid #ecf0f1
2838
+ }
2839
+
2840
+ .table>thead>tr>th {
2841
+ vertical-align: bottom;
2842
+ border-bottom: 2px solid #ecf0f1
2843
+ }
2844
+
2845
+ .table>caption+thead>tr:first-child>th,
2846
+ .table>colgroup+thead>tr:first-child>th,
2847
+ .table>thead:first-child>tr:first-child>th,
2848
+ .table>caption+thead>tr:first-child>td,
2849
+ .table>colgroup+thead>tr:first-child>td,
2850
+ .table>thead:first-child>tr:first-child>td {
2851
+ border-top: 0
2852
+ }
2853
+
2854
+ .table>tbody+tbody {
2855
+ border-top: 2px solid #ecf0f1
2856
+ }
2857
+
2858
+ .table .table {
2859
+ background-color: #ffffff
2860
+ }
2861
+
2862
+ .table-condensed>thead>tr>th,
2863
+ .table-condensed>tbody>tr>th,
2864
+ .table-condensed>tfoot>tr>th,
2865
+ .table-condensed>thead>tr>td,
2866
+ .table-condensed>tbody>tr>td,
2867
+ .table-condensed>tfoot>tr>td {
2868
+ padding: 5px
2869
+ }
2870
+
2871
+ .table-bordered {
2872
+ border: 1px solid #ecf0f1
2873
+ }
2874
+
2875
+ .table-bordered>thead>tr>th,
2876
+ .table-bordered>tbody>tr>th,
2877
+ .table-bordered>tfoot>tr>th,
2878
+ .table-bordered>thead>tr>td,
2879
+ .table-bordered>tbody>tr>td,
2880
+ .table-bordered>tfoot>tr>td {
2881
+ border: 1px solid #ecf0f1
2882
+ }
2883
+
2884
+ .table-bordered>thead>tr>th,
2885
+ .table-bordered>thead>tr>td {
2886
+ border-bottom-width: 2px
2887
+ }
2888
+
2889
+ .table-striped>tbody>tr:nth-of-type(odd) {
2890
+ background-color: #f9f9f9
2891
+ }
2892
+
2893
+ .table-hover>tbody>tr:hover {
2894
+ background-color: #ecf0f1
2895
+ }
2896
+
2897
+ table col[class*="col-"] {
2898
+ position: static;
2899
+ float: none;
2900
+ display: table-column
2901
+ }
2902
+
2903
+ table td[class*="col-"],
2904
+ table th[class*="col-"] {
2905
+ position: static;
2906
+ float: none;
2907
+ display: table-cell
2908
+ }
2909
+
2910
+ .table>thead>tr>td.active,
2911
+ .table>tbody>tr>td.active,
2912
+ .table>tfoot>tr>td.active,
2913
+ .table>thead>tr>th.active,
2914
+ .table>tbody>tr>th.active,
2915
+ .table>tfoot>tr>th.active,
2916
+ .table>thead>tr.active>td,
2917
+ .table>tbody>tr.active>td,
2918
+ .table>tfoot>tr.active>td,
2919
+ .table>thead>tr.active>th,
2920
+ .table>tbody>tr.active>th,
2921
+ .table>tfoot>tr.active>th {
2922
+ background-color: #ecf0f1
2923
+ }
2924
+
2925
+ .table-hover>tbody>tr>td.active:hover,
2926
+ .table-hover>tbody>tr>th.active:hover,
2927
+ .table-hover>tbody>tr.active:hover>td,
2928
+ .table-hover>tbody>tr:hover>.active,
2929
+ .table-hover>tbody>tr.active:hover>th {
2930
+ background-color: #dde4e6
2931
+ }
2932
+
2933
+ .table>thead>tr>td.success,
2934
+ .table>tbody>tr>td.success,
2935
+ .table>tfoot>tr>td.success,
2936
+ .table>thead>tr>th.success,
2937
+ .table>tbody>tr>th.success,
2938
+ .table>tfoot>tr>th.success,
2939
+ .table>thead>tr.success>td,
2940
+ .table>tbody>tr.success>td,
2941
+ .table>tfoot>tr.success>td,
2942
+ .table>thead>tr.success>th,
2943
+ .table>tbody>tr.success>th,
2944
+ .table>tfoot>tr.success>th {
2945
+ background-color: #18bc9c
2946
+ }
2947
+
2948
+ .table-hover>tbody>tr>td.success:hover,
2949
+ .table-hover>tbody>tr>th.success:hover,
2950
+ .table-hover>tbody>tr.success:hover>td,
2951
+ .table-hover>tbody>tr:hover>.success,
2952
+ .table-hover>tbody>tr.success:hover>th {
2953
+ background-color: #15a589
2954
+ }
2955
+
2956
+ .table>thead>tr>td.info,
2957
+ .table>tbody>tr>td.info,
2958
+ .table>tfoot>tr>td.info,
2959
+ .table>thead>tr>th.info,
2960
+ .table>tbody>tr>th.info,
2961
+ .table>tfoot>tr>th.info,
2962
+ .table>thead>tr.info>td,
2963
+ .table>tbody>tr.info>td,
2964
+ .table>tfoot>tr.info>td,
2965
+ .table>thead>tr.info>th,
2966
+ .table>tbody>tr.info>th,
2967
+ .table>tfoot>tr.info>th {
2968
+ background-color: #3498db
2969
+ }
2970
+
2971
+ .table-hover>tbody>tr>td.info:hover,
2972
+ .table-hover>tbody>tr>th.info:hover,
2973
+ .table-hover>tbody>tr.info:hover>td,
2974
+ .table-hover>tbody>tr:hover>.info,
2975
+ .table-hover>tbody>tr.info:hover>th {
2976
+ background-color: #258cd1
2977
+ }
2978
+
2979
+ .table>thead>tr>td.warning,
2980
+ .table>tbody>tr>td.warning,
2981
+ .table>tfoot>tr>td.warning,
2982
+ .table>thead>tr>th.warning,
2983
+ .table>tbody>tr>th.warning,
2984
+ .table>tfoot>tr>th.warning,
2985
+ .table>thead>tr.warning>td,
2986
+ .table>tbody>tr.warning>td,
2987
+ .table>tfoot>tr.warning>td,
2988
+ .table>thead>tr.warning>th,
2989
+ .table>tbody>tr.warning>th,
2990
+ .table>tfoot>tr.warning>th {
2991
+ background-color: #f39c12
2992
+ }
2993
+
2994
+ .table-hover>tbody>tr>td.warning:hover,
2995
+ .table-hover>tbody>tr>th.warning:hover,
2996
+ .table-hover>tbody>tr.warning:hover>td,
2997
+ .table-hover>tbody>tr:hover>.warning,
2998
+ .table-hover>tbody>tr.warning:hover>th {
2999
+ background-color: #e08e0b
3000
+ }
3001
+
3002
+ .table>thead>tr>td.danger,
3003
+ .table>tbody>tr>td.danger,
3004
+ .table>tfoot>tr>td.danger,
3005
+ .table>thead>tr>th.danger,
3006
+ .table>tbody>tr>th.danger,
3007
+ .table>tfoot>tr>th.danger,
3008
+ .table>thead>tr.danger>td,
3009
+ .table>tbody>tr.danger>td,
3010
+ .table>tfoot>tr.danger>td,
3011
+ .table>thead>tr.danger>th,
3012
+ .table>tbody>tr.danger>th,
3013
+ .table>tfoot>tr.danger>th {
3014
+ background-color: #e74c3c
3015
+ }
3016
+
3017
+ .table-hover>tbody>tr>td.danger:hover,
3018
+ .table-hover>tbody>tr>th.danger:hover,
3019
+ .table-hover>tbody>tr.danger:hover>td,
3020
+ .table-hover>tbody>tr:hover>.danger,
3021
+ .table-hover>tbody>tr.danger:hover>th {
3022
+ background-color: #e43725
3023
+ }
3024
+
3025
+ .table-responsive {
3026
+ overflow-x: auto;
3027
+ min-height: 0.01%
3028
+ }
3029
+
3030
+ @media screen and (max-width: 767px) {
3031
+ .table-responsive {
3032
+ width: 100%;
3033
+ margin-bottom: 15.75px;
3034
+ overflow-y: hidden;
3035
+ -ms-overflow-style: -ms-autohiding-scrollbar;
3036
+ border: 1px solid #ecf0f1
3037
+ }
3038
+ .table-responsive>.table {
3039
+ margin-bottom: 0
3040
+ }
3041
+ .table-responsive>.table>thead>tr>th,
3042
+ .table-responsive>.table>tbody>tr>th,
3043
+ .table-responsive>.table>tfoot>tr>th,
3044
+ .table-responsive>.table>thead>tr>td,
3045
+ .table-responsive>.table>tbody>tr>td,
3046
+ .table-responsive>.table>tfoot>tr>td {
3047
+ white-space: nowrap
3048
+ }
3049
+ .table-responsive>.table-bordered {
3050
+ border: 0
3051
+ }
3052
+ .table-responsive>.table-bordered>thead>tr>th:first-child,
3053
+ .table-responsive>.table-bordered>tbody>tr>th:first-child,
3054
+ .table-responsive>.table-bordered>tfoot>tr>th:first-child,
3055
+ .table-responsive>.table-bordered>thead>tr>td:first-child,
3056
+ .table-responsive>.table-bordered>tbody>tr>td:first-child,
3057
+ .table-responsive>.table-bordered>tfoot>tr>td:first-child {
3058
+ border-left: 0
3059
+ }
3060
+ .table-responsive>.table-bordered>thead>tr>th:last-child,
3061
+ .table-responsive>.table-bordered>tbody>tr>th:last-child,
3062
+ .table-responsive>.table-bordered>tfoot>tr>th:last-child,
3063
+ .table-responsive>.table-bordered>thead>tr>td:last-child,
3064
+ .table-responsive>.table-bordered>tbody>tr>td:last-child,
3065
+ .table-responsive>.table-bordered>tfoot>tr>td:last-child {
3066
+ border-right: 0
3067
+ }
3068
+ .table-responsive>.table-bordered>tbody>tr:last-child>th,
3069
+ .table-responsive>.table-bordered>tfoot>tr:last-child>th,
3070
+ .table-responsive>.table-bordered>tbody>tr:last-child>td,
3071
+ .table-responsive>.table-bordered>tfoot>tr:last-child>td {
3072
+ border-bottom: 0
3073
+ }
3074
+ }
3075
+
3076
+ fieldset {
3077
+ padding: 0;
3078
+ margin: 0;
3079
+ border: 0;
3080
+ min-width: 0
3081
+ }
3082
+
3083
+ legend {
3084
+ display: block;
3085
+ width: 100%;
3086
+ padding: 0;
3087
+ margin-bottom: 21px;
3088
+ font-size: 22.5px;
3089
+ line-height: inherit;
3090
+ color: #2c3e50;
3091
+ border: 0;
3092
+ border-bottom: 1px solid transparent
3093
+ }
3094
+
3095
+ label {
3096
+ display: inline-block;
3097
+ max-width: 100%;
3098
+ margin-bottom: 5px;
3099
+ font-weight: bold
3100
+ }
3101
+
3102
+ input[type="search"] {
3103
+ -webkit-box-sizing: border-box;
3104
+ -moz-box-sizing: border-box;
3105
+ box-sizing: border-box
3106
+ }
3107
+
3108
+ input[type="radio"],
3109
+ input[type="checkbox"] {
3110
+ margin: 4px 0 0;
3111
+ margin-top: 1px \9;
3112
+ line-height: normal
3113
+ }
3114
+
3115
+ input[type="file"] {
3116
+ display: block
3117
+ }
3118
+
3119
+ input[type="range"] {
3120
+ display: block;
3121
+ width: 100%
3122
+ }
3123
+
3124
+ select[multiple],
3125
+ select[size] {
3126
+ height: auto
3127
+ }
3128
+
3129
+ input[type="file"]:focus,
3130
+ input[type="radio"]:focus,
3131
+ input[type="checkbox"]:focus {
3132
+ outline: thin dotted;
3133
+ outline: 5px auto -webkit-focus-ring-color;
3134
+ outline-offset: -2px
3135
+ }
3136
+
3137
+ output {
3138
+ display: block;
3139
+ padding-top: 11px;
3140
+ font-size: 15px;
3141
+ line-height: 1.42857143;
3142
+ color: #2c3e50
3143
+ }
3144
+
3145
+ .form-control {
3146
+ display: block;
3147
+ width: 100%;
3148
+ height: 32px;
3149
+ padding: 10px 15px;
3150
+ font-size: 15px;
3151
+ line-height: 1.42857143;
3152
+ color: #2c3e50;
3153
+ background-color: #ffffff;
3154
+ background-image: none;
3155
+ border: 1px solid #dce4ec;
3156
+ border-radius: 4px;
3157
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3158
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3159
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
3160
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
3161
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s
3162
+ }
3163
+
3164
+ .form-control:focus {
3165
+ border-color: #2c3e50;
3166
+ outline: 0;
3167
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(44, 62, 80, 0.6);
3168
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(44, 62, 80, 0.6)
3169
+ }
3170
+
3171
+ .form-control::-moz-placeholder {
3172
+ color: #acb6c0;
3173
+ opacity: 1
3174
+ }
3175
+
3176
+ .form-control:-ms-input-placeholder {
3177
+ color: #acb6c0
3178
+ }
3179
+
3180
+ .form-control::-webkit-input-placeholder {
3181
+ color: #acb6c0
3182
+ }
3183
+
3184
+ .form-control[disabled],
3185
+ .form-control[readonly],
3186
+ fieldset[disabled] .form-control {
3187
+ background-color: #ecf0f1;
3188
+ opacity: 1
3189
+ }
3190
+
3191
+ .form-control[disabled],
3192
+ fieldset[disabled] .form-control {
3193
+ cursor: not-allowed
3194
+ }
3195
+
3196
+ textarea.form-control {
3197
+ height: auto
3198
+ }
3199
+
3200
+ input[type="search"] {
3201
+ -webkit-appearance: none
3202
+ }
3203
+
3204
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
3205
+ input[type="date"].form-control,
3206
+ input[type="time"].form-control,
3207
+ input[type="datetime-local"].form-control,
3208
+ input[type="month"].form-control {
3209
+ line-height: 45px
3210
+ }
3211
+ input[type="date"].input-sm,
3212
+ input[type="time"].input-sm,
3213
+ input[type="datetime-local"].input-sm,
3214
+ input[type="month"].input-sm,
3215
+ .input-group-sm input[type="date"],
3216
+ .input-group-sm input[type="time"],
3217
+ .input-group-sm input[type="datetime-local"],
3218
+ .input-group-sm input[type="month"] {
3219
+ line-height: 35px
3220
+ }
3221
+ input[type="date"].input-lg,
3222
+ input[type="time"].input-lg,
3223
+ input[type="datetime-local"].input-lg,
3224
+ input[type="month"].input-lg,
3225
+ .input-group-lg input[type="date"],
3226
+ .input-group-lg input[type="time"],
3227
+ .input-group-lg input[type="datetime-local"],
3228
+ .input-group-lg input[type="month"] {
3229
+ line-height: 66px
3230
+ }
3231
+ }
3232
+
3233
+ .form-group {
3234
+ margin-bottom: 15px
3235
+ }
3236
+
3237
+ .radio,
3238
+ .checkbox {
3239
+ position: relative;
3240
+ display: block;
3241
+ margin-top: 10px;
3242
+ margin-bottom: 10px
3243
+ }
3244
+
3245
+ .radio label,
3246
+ .checkbox label {
3247
+ min-height: 21px;
3248
+ padding-left: 20px;
3249
+ margin-bottom: 0;
3250
+ font-weight: normal;
3251
+ cursor: pointer
3252
+ }
3253
+
3254
+ .radio input[type="radio"],
3255
+ .radio-inline input[type="radio"],
3256
+ .checkbox input[type="checkbox"],
3257
+ .checkbox-inline input[type="checkbox"] {
3258
+ position: absolute;
3259
+ margin-left: -20px;
3260
+ margin-top: 4px \9
3261
+ }
3262
+
3263
+ .radio+.radio,
3264
+ .checkbox+.checkbox {
3265
+ margin-top: -5px
3266
+ }
3267
+
3268
+ .radio-inline,
3269
+ .checkbox-inline {
3270
+ position: relative;
3271
+ display: inline-block;
3272
+ padding-left: 20px;
3273
+ margin-bottom: 0;
3274
+ vertical-align: middle;
3275
+ font-weight: normal;
3276
+ cursor: pointer
3277
+ }
3278
+
3279
+ .radio-inline+.radio-inline,
3280
+ .checkbox-inline+.checkbox-inline {
3281
+ margin-top: 0;
3282
+ margin-left: 10px
3283
+ }
3284
+
3285
+ input[type="radio"][disabled],
3286
+ input[type="checkbox"][disabled],
3287
+ input[type="radio"].disabled,
3288
+ input[type="checkbox"].disabled,
3289
+ fieldset[disabled] input[type="radio"],
3290
+ fieldset[disabled] input[type="checkbox"] {
3291
+ cursor: not-allowed
3292
+ }
3293
+
3294
+ .radio-inline.disabled,
3295
+ .checkbox-inline.disabled,
3296
+ fieldset[disabled] .radio-inline,
3297
+ fieldset[disabled] .checkbox-inline {
3298
+ cursor: not-allowed
3299
+ }
3300
+
3301
+ .radio.disabled label,
3302
+ .checkbox.disabled label,
3303
+ fieldset[disabled] .radio label,
3304
+ fieldset[disabled] .checkbox label {
3305
+ cursor: not-allowed
3306
+ }
3307
+
3308
+ .form-control-static {
3309
+ padding-top: 11px;
3310
+ padding-bottom: 11px;
3311
+ margin-bottom: 0;
3312
+ min-height: 36px
3313
+ }
3314
+
3315
+ .form-control-static.input-lg,
3316
+ .form-control-static.input-sm {
3317
+ padding-left: 0;
3318
+ padding-right: 0
3319
+ }
3320
+
3321
+ .input-sm {
3322
+ height: 35px;
3323
+ padding: 6px 9px;
3324
+ font-size: 13px;
3325
+ line-height: 1.5;
3326
+ border-radius: 3px
3327
+ }
3328
+
3329
+ select.input-sm {
3330
+ height: 35px;
3331
+ line-height: 35px
3332
+ }
3333
+
3334
+ textarea.input-sm,
3335
+ select[multiple].input-sm {
3336
+ height: auto
3337
+ }
3338
+
3339
+ .form-group-sm .form-control {
3340
+ height: 35px;
3341
+ padding: 6px 9px;
3342
+ font-size: 13px;
3343
+ line-height: 1.5;
3344
+ border-radius: 3px
3345
+ }
3346
+
3347
+ .form-group-sm select.form-control {
3348
+ height: 35px;
3349
+ line-height: 35px
3350
+ }
3351
+
3352
+ .form-group-sm textarea.form-control,
3353
+ .form-group-sm select[multiple].form-control {
3354
+ height: auto
3355
+ }
3356
+
3357
+ .form-group-sm .form-control-static {
3358
+ height: 35px;
3359
+ min-height: 34px;
3360
+ padding: 7px 9px;
3361
+ font-size: 13px;
3362
+ line-height: 1.5
3363
+ }
3364
+
3365
+ .input-lg {
3366
+ height: 66px;
3367
+ padding: 18px 27px;
3368
+ font-size: 19px;
3369
+ line-height: 1.3333333;
3370
+ border-radius: 6px
3371
+ }
3372
+
3373
+ select.input-lg {
3374
+ height: 66px;
3375
+ line-height: 66px
3376
+ }
3377
+
3378
+ textarea.input-lg,
3379
+ select[multiple].input-lg {
3380
+ height: auto
3381
+ }
3382
+
3383
+ .form-group-lg .form-control {
3384
+ height: 66px;
3385
+ padding: 18px 27px;
3386
+ font-size: 19px;
3387
+ line-height: 1.3333333;
3388
+ border-radius: 6px
3389
+ }
3390
+
3391
+ .form-group-lg select.form-control {
3392
+ height: 66px;
3393
+ line-height: 66px
3394
+ }
3395
+
3396
+ .form-group-lg textarea.form-control,
3397
+ .form-group-lg select[multiple].form-control {
3398
+ height: auto
3399
+ }
3400
+
3401
+ .form-group-lg .form-control-static {
3402
+ height: 66px;
3403
+ min-height: 40px;
3404
+ padding: 19px 27px;
3405
+ font-size: 19px;
3406
+ line-height: 1.3333333
3407
+ }
3408
+
3409
+ .has-feedback {
3410
+ position: relative
3411
+ }
3412
+
3413
+ .has-feedback .form-control {
3414
+ padding-right: 56.25px
3415
+ }
3416
+
3417
+ .form-control-feedback {
3418
+ position: absolute;
3419
+ top: 0;
3420
+ right: 0;
3421
+ z-index: 2;
3422
+ display: block;
3423
+ width: 45px;
3424
+ height: 45px;
3425
+ line-height: 45px;
3426
+ text-align: center;
3427
+ pointer-events: none
3428
+ }
3429
+
3430
+ .input-lg+.form-control-feedback,
3431
+ .input-group-lg+.form-control-feedback,
3432
+ .form-group-lg .form-control+.form-control-feedback {
3433
+ width: 66px;
3434
+ height: 66px;
3435
+ line-height: 66px
3436
+ }
3437
+
3438
+ .input-sm+.form-control-feedback,
3439
+ .input-group-sm+.form-control-feedback,
3440
+ .form-group-sm .form-control+.form-control-feedback {
3441
+ width: 35px;
3442
+ height: 35px;
3443
+ line-height: 35px
3444
+ }
3445
+
3446
+ .has-success .help-block,
3447
+ .has-success .control-label,
3448
+ .has-success .radio,
3449
+ .has-success .checkbox,
3450
+ .has-success .radio-inline,
3451
+ .has-success .checkbox-inline,
3452
+ .has-success.radio label,
3453
+ .has-success.checkbox label,
3454
+ .has-success.radio-inline label,
3455
+ .has-success.checkbox-inline label {
3456
+ color: #ffffff
3457
+ }
3458
+
3459
+ .has-success .form-control {
3460
+ border-color: #ffffff;
3461
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3462
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075)
3463
+ }
3464
+
3465
+ .has-success .form-control:focus {
3466
+ border-color: #e6e6e6;
3467
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fff;
3468
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fff
3469
+ }
3470
+
3471
+ .has-success .input-group-addon {
3472
+ color: #ffffff;
3473
+ border-color: #ffffff;
3474
+ background-color: #18bc9c
3475
+ }
3476
+
3477
+ .has-success .form-control-feedback {
3478
+ color: #ffffff
3479
+ }
3480
+
3481
+ .has-warning .help-block,
3482
+ .has-warning .control-label,
3483
+ .has-warning .radio,
3484
+ .has-warning .checkbox,
3485
+ .has-warning .radio-inline,
3486
+ .has-warning .checkbox-inline,
3487
+ .has-warning.radio label,
3488
+ .has-warning.checkbox label,
3489
+ .has-warning.radio-inline label,
3490
+ .has-warning.checkbox-inline label {
3491
+ color: #ffffff
3492
+ }
3493
+
3494
+ .has-warning .form-control {
3495
+ border-color: #ffffff;
3496
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3497
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075)
3498
+ }
3499
+
3500
+ .has-warning .form-control:focus {
3501
+ border-color: #e6e6e6;
3502
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fff;
3503
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fff
3504
+ }
3505
+
3506
+ .has-warning .input-group-addon {
3507
+ color: #ffffff;
3508
+ border-color: #ffffff;
3509
+ background-color: #f39c12
3510
+ }
3511
+
3512
+ .has-warning .form-control-feedback {
3513
+ color: #ffffff
3514
+ }
3515
+
3516
+ .has-error .help-block,
3517
+ .has-error .control-label,
3518
+ .has-error .radio,
3519
+ .has-error .checkbox,
3520
+ .has-error .radio-inline,
3521
+ .has-error .checkbox-inline,
3522
+ .has-error.radio label,
3523
+ .has-error.checkbox label,
3524
+ .has-error.radio-inline label,
3525
+ .has-error.checkbox-inline label {
3526
+ color: #ffffff
3527
+ }
3528
+
3529
+ .has-error .form-control {
3530
+ border-color: #ffffff;
3531
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3532
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075)
3533
+ }
3534
+
3535
+ .has-error .form-control:focus {
3536
+ border-color: #e6e6e6;
3537
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fff;
3538
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fff
3539
+ }
3540
+
3541
+ .has-error .input-group-addon {
3542
+ color: #ffffff;
3543
+ border-color: #ffffff;
3544
+ background-color: #e74c3c
3545
+ }
3546
+
3547
+ .has-error .form-control-feedback {
3548
+ color: #ffffff
3549
+ }
3550
+
3551
+ .has-feedback label~.form-control-feedback {
3552
+ top: 26px
3553
+ }
3554
+
3555
+ .has-feedback label.sr-only~.form-control-feedback {
3556
+ top: 0
3557
+ }
3558
+
3559
+ .help-block {
3560
+ display: block;
3561
+ margin-top: 5px;
3562
+ margin-bottom: 10px;
3563
+ color: #597ea2
3564
+ }
3565
+
3566
+ @media (min-width: 768px) {
3567
+ .form-inline .form-group {
3568
+ display: inline-block;
3569
+ margin-bottom: 0;
3570
+ vertical-align: middle
3571
+ }
3572
+ .form-inline .form-control {
3573
+ display: inline-block;
3574
+ width: auto;
3575
+ vertical-align: middle
3576
+ }
3577
+ .form-inline .form-control-static {
3578
+ display: inline-block
3579
+ }
3580
+ .form-inline .input-group {
3581
+ display: inline-table;
3582
+ vertical-align: middle
3583
+ }
3584
+ .form-inline .input-group .input-group-addon,
3585
+ .form-inline .input-group .input-group-btn,
3586
+ .form-inline .input-group .form-control {
3587
+ width: auto
3588
+ }
3589
+ .form-inline .input-group>.form-control {
3590
+ width: 100%
3591
+ }
3592
+ .form-inline .control-label {
3593
+ margin-bottom: 0;
3594
+ vertical-align: middle
3595
+ }
3596
+ .form-inline .radio,
3597
+ .form-inline .checkbox {
3598
+ display: inline-block;
3599
+ margin-top: 0;
3600
+ margin-bottom: 0;
3601
+ vertical-align: middle
3602
+ }
3603
+ .form-inline .radio label,
3604
+ .form-inline .checkbox label {
3605
+ padding-left: 0
3606
+ }
3607
+ .form-inline .radio input[type="radio"],
3608
+ .form-inline .checkbox input[type="checkbox"] {
3609
+ position: relative;
3610
+ margin-left: 0
3611
+ }
3612
+ .form-inline .has-feedback .form-control-feedback {
3613
+ top: 0
3614
+ }
3615
+ }
3616
+
3617
+ .form-horizontal .radio,
3618
+ .form-horizontal .checkbox,
3619
+ .form-horizontal .radio-inline,
3620
+ .form-horizontal .checkbox-inline {
3621
+ margin-top: 0;
3622
+ margin-bottom: 0;
3623
+ padding-top: 11px
3624
+ }
3625
+
3626
+ .form-horizontal .radio,
3627
+ .form-horizontal .checkbox {
3628
+ min-height: 32px
3629
+ }
3630
+
3631
+ @media (min-width: 768px) {
3632
+ .form-horizontal .control-label {
3633
+ text-align: right;
3634
+ margin-bottom: 0;
3635
+ padding-top: 11px
3636
+ }
3637
+ }
3638
+
3639
+ .form-horizontal .has-feedback .form-control-feedback {
3640
+ right: 15px
3641
+ }
3642
+
3643
+ @media (min-width: 768px) {
3644
+ .form-horizontal .form-group-lg .control-label {
3645
+ padding-top: 24.9999994px;
3646
+ font-size: 19px
3647
+ }
3648
+ }
3649
+
3650
+ @media (min-width: 768px) {
3651
+ .form-horizontal .form-group-sm .control-label {
3652
+ padding-top: 7px;
3653
+ font-size: 13px
3654
+ }
3655
+ }
3656
+
3657
+ .btn {
3658
+ display: inline-block;
3659
+ margin-bottom: 0;
3660
+ font-weight: normal;
3661
+ text-align: center;
3662
+ vertical-align: middle;
3663
+ -ms-touch-action: manipulation;
3664
+ touch-action: manipulation;
3665
+ cursor: pointer;
3666
+ background-image: none;
3667
+ border: 1px solid transparent;
3668
+ white-space: nowrap;
3669
+ padding: 10px 15px;
3670
+ font-size: 15px;
3671
+ line-height: 1.42857143;
3672
+ border-radius: 4px;
3673
+ -webkit-user-select: none;
3674
+ -moz-user-select: none;
3675
+ -ms-user-select: none;
3676
+ user-select: none
3677
+ }
3678
+
3679
+ .btn:focus,
3680
+ .btn:active:focus,
3681
+ .btn.active:focus,
3682
+ .btn.focus,
3683
+ .btn:active.focus,
3684
+ .btn.active.focus {
3685
+ outline: thin dotted;
3686
+ outline: 5px auto -webkit-focus-ring-color;
3687
+ outline-offset: -2px
3688
+ }
3689
+
3690
+ .btn:hover,
3691
+ .btn:focus,
3692
+ .btn.focus {
3693
+ color: #ffffff;
3694
+ text-decoration: none
3695
+ }
3696
+
3697
+ .btn:active,
3698
+ .btn.active {
3699
+ outline: 0;
3700
+ background-image: none;
3701
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3702
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125)
3703
+ }
3704
+
3705
+ .btn.disabled,
3706
+ .btn[disabled],
3707
+ fieldset[disabled] .btn {
3708
+ cursor: not-allowed;
3709
+ opacity: 0.65;
3710
+ filter: alpha(opacity=65);
3711
+ -webkit-box-shadow: none;
3712
+ box-shadow: none
3713
+ }
3714
+
3715
+ a.btn.disabled,
3716
+ fieldset[disabled] a.btn {
3717
+ pointer-events: none
3718
+ }
3719
+
3720
+ .btn-default {
3721
+ color: #ffffff;
3722
+ background-color: #95a5a6;
3723
+ border-color: #95a5a6
3724
+ }
3725
+
3726
+ .btn-default:focus,
3727
+ .btn-default.focus {
3728
+ color: #ffffff;
3729
+ background-color: #798d8f;
3730
+ border-color: #566566
3731
+ }
3732
+
3733
+ .btn-default:hover {
3734
+ color: #ffffff;
3735
+ background-color: #798d8f;
3736
+ border-color: #74898a
3737
+ }
3738
+
3739
+ .btn-default:active,
3740
+ .btn-default.active,
3741
+ .open>.dropdown-toggle.btn-default {
3742
+ color: #ffffff;
3743
+ background-color: #798d8f;
3744
+ border-color: #74898a
3745
+ }
3746
+
3747
+ .btn-default:active:hover,
3748
+ .btn-default.active:hover,
3749
+ .open>.dropdown-toggle.btn-default:hover,
3750
+ .btn-default:active:focus,
3751
+ .btn-default.active:focus,
3752
+ .open>.dropdown-toggle.btn-default:focus,
3753
+ .btn-default:active.focus,
3754
+ .btn-default.active.focus,
3755
+ .open>.dropdown-toggle.btn-default.focus {
3756
+ color: #ffffff;
3757
+ background-color: #687b7c;
3758
+ border-color: #566566
3759
+ }
3760
+
3761
+ .btn-default:active,
3762
+ .btn-default.active,
3763
+ .open>.dropdown-toggle.btn-default {
3764
+ background-image: none
3765
+ }
3766
+
3767
+ .btn-default.disabled,
3768
+ .btn-default[disabled],
3769
+ fieldset[disabled] .btn-default,
3770
+ .btn-default.disabled:hover,
3771
+ .btn-default[disabled]:hover,
3772
+ fieldset[disabled] .btn-default:hover,
3773
+ .btn-default.disabled:focus,
3774
+ .btn-default[disabled]:focus,
3775
+ fieldset[disabled] .btn-default:focus,
3776
+ .btn-default.disabled.focus,
3777
+ .btn-default[disabled].focus,
3778
+ fieldset[disabled] .btn-default.focus,
3779
+ .btn-default.disabled:active,
3780
+ .btn-default[disabled]:active,
3781
+ fieldset[disabled] .btn-default:active,
3782
+ .btn-default.disabled.active,
3783
+ .btn-default[disabled].active,
3784
+ fieldset[disabled] .btn-default.active {
3785
+ background-color: #95a5a6;
3786
+ border-color: #95a5a6
3787
+ }
3788
+
3789
+ .btn-default .badge {
3790
+ color: #95a5a6;
3791
+ background-color: #ffffff
3792
+ }
3793
+
3794
+ .btn-primary {
3795
+ color: #ffffff;
3796
+ background-color: #3498DB;
3797
+ border-color: #3498DB
3798
+ }
3799
+
3800
+ .btn-primary:focus,
3801
+ .btn-primary.focus {
3802
+ color: #ffffff;
3803
+ background-color: #1a242f;
3804
+ border-color: #000000
3805
+ }
3806
+
3807
+ .btn-primary:hover {
3808
+ color: #ffffff;
3809
+ background-color: #1a242f;
3810
+ border-color: #161f29
3811
+ }
3812
+
3813
+ .btn-primary:active,
3814
+ .btn-primary.active,
3815
+ .open>.dropdown-toggle.btn-primary {
3816
+ color: #ffffff;
3817
+ background-color: #1a242f;
3818
+ border-color: #161f29
3819
+ }
3820
+
3821
+ .btn-primary:active:hover,
3822
+ .btn-primary.active:hover,
3823
+ .open>.dropdown-toggle.btn-primary:hover,
3824
+ .btn-primary:active:focus,
3825
+ .btn-primary.active:focus,
3826
+ .open>.dropdown-toggle.btn-primary:focus,
3827
+ .btn-primary:active.focus,
3828
+ .btn-primary.active.focus,
3829
+ .open>.dropdown-toggle.btn-primary.focus {
3830
+ color: #ffffff;
3831
+ background-color: #0d1318;
3832
+ border-color: #000000
3833
+ }
3834
+
3835
+ .btn-primary:active,
3836
+ .btn-primary.active,
3837
+ .open>.dropdown-toggle.btn-primary {
3838
+ background-image: none
3839
+ }
3840
+
3841
+ .btn-primary.disabled,
3842
+ .btn-primary[disabled],
3843
+ fieldset[disabled] .btn-primary,
3844
+ .btn-primary.disabled:hover,
3845
+ .btn-primary[disabled]:hover,
3846
+ fieldset[disabled] .btn-primary:hover,
3847
+ .btn-primary.disabled:focus,
3848
+ .btn-primary[disabled]:focus,
3849
+ fieldset[disabled] .btn-primary:focus,
3850
+ .btn-primary.disabled.focus,
3851
+ .btn-primary[disabled].focus,
3852
+ fieldset[disabled] .btn-primary.focus,
3853
+ .btn-primary.disabled:active,
3854
+ .btn-primary[disabled]:active,
3855
+ fieldset[disabled] .btn-primary:active,
3856
+ .btn-primary.disabled.active,
3857
+ .btn-primary[disabled].active,
3858
+ fieldset[disabled] .btn-primary.active {
3859
+ background-color: #2c3e50;
3860
+ border-color: #2c3e50
3861
+ }
3862
+
3863
+ .btn-primary .badge {
3864
+ color: #2c3e50;
3865
+ background-color: #ffffff
3866
+ }
3867
+
3868
+ .btn-success {
3869
+ color: #ffffff;
3870
+ background-color: #18bc9c;
3871
+ border-color: #18bc9c
3872
+ }
3873
+
3874
+ .btn-success:focus,
3875
+ .btn-success.focus {
3876
+ color: #ffffff;
3877
+ background-color: #128f76;
3878
+ border-color: #0a4b3e
3879
+ }
3880
+
3881
+ .btn-success:hover {
3882
+ color: #ffffff;
3883
+ background-color: #128f76;
3884
+ border-color: #11866f
3885
+ }
3886
+
3887
+ .btn-success:active,
3888
+ .btn-success.active,
3889
+ .open>.dropdown-toggle.btn-success {
3890
+ color: #ffffff;
3891
+ background-color: #128f76;
3892
+ border-color: #11866f
3893
+ }
3894
+
3895
+ .btn-success:active:hover,
3896
+ .btn-success.active:hover,
3897
+ .open>.dropdown-toggle.btn-success:hover,
3898
+ .btn-success:active:focus,
3899
+ .btn-success.active:focus,
3900
+ .open>.dropdown-toggle.btn-success:focus,
3901
+ .btn-success:active.focus,
3902
+ .btn-success.active.focus,
3903
+ .open>.dropdown-toggle.btn-success.focus {
3904
+ color: #ffffff;
3905
+ background-color: #0e6f5c;
3906
+ border-color: #0a4b3e
3907
+ }
3908
+
3909
+ .btn-success:active,
3910
+ .btn-success.active,
3911
+ .open>.dropdown-toggle.btn-success {
3912
+ background-image: none
3913
+ }
3914
+
3915
+ .btn-success.disabled,
3916
+ .btn-success[disabled],
3917
+ fieldset[disabled] .btn-success,
3918
+ .btn-success.disabled:hover,
3919
+ .btn-success[disabled]:hover,
3920
+ fieldset[disabled] .btn-success:hover,
3921
+ .btn-success.disabled:focus,
3922
+ .btn-success[disabled]:focus,
3923
+ fieldset[disabled] .btn-success:focus,
3924
+ .btn-success.disabled.focus,
3925
+ .btn-success[disabled].focus,
3926
+ fieldset[disabled] .btn-success.focus,
3927
+ .btn-success.disabled:active,
3928
+ .btn-success[disabled]:active,
3929
+ fieldset[disabled] .btn-success:active,
3930
+ .btn-success.disabled.active,
3931
+ .btn-success[disabled].active,
3932
+ fieldset[disabled] .btn-success.active {
3933
+ background-color: #18bc9c;
3934
+ border-color: #18bc9c
3935
+ }
3936
+
3937
+ .btn-success .badge {
3938
+ color: #18bc9c;
3939
+ background-color: #ffffff
3940
+ }
3941
+
3942
+ .btn-info {
3943
+ color: #ffffff;
3944
+ background-color: #3498db;
3945
+ border-color: #3498db
3946
+ }
3947
+
3948
+ .btn-info:focus,
3949
+ .btn-info.focus {
3950
+ color: #ffffff;
3951
+ background-color: #217dbb;
3952
+ border-color: #16527a
3953
+ }
3954
+
3955
+ .btn-info:hover {
3956
+ color: #ffffff;
3957
+ background-color: #217dbb;
3958
+ border-color: #2077b2
3959
+ }
3960
+
3961
+ .btn-info:active,
3962
+ .btn-info.active,
3963
+ .open>.dropdown-toggle.btn-info {
3964
+ color: #ffffff;
3965
+ background-color: #217dbb;
3966
+ border-color: #2077b2
3967
+ }
3968
+
3969
+ .btn-info:active:hover,
3970
+ .btn-info.active:hover,
3971
+ .open>.dropdown-toggle.btn-info:hover,
3972
+ .btn-info:active:focus,
3973
+ .btn-info.active:focus,
3974
+ .open>.dropdown-toggle.btn-info:focus,
3975
+ .btn-info:active.focus,
3976
+ .btn-info.active.focus,
3977
+ .open>.dropdown-toggle.btn-info.focus {
3978
+ color: #ffffff;
3979
+ background-color: #1c699d;
3980
+ border-color: #16527a
3981
+ }
3982
+
3983
+ .btn-info:active,
3984
+ .btn-info.active,
3985
+ .open>.dropdown-toggle.btn-info {
3986
+ background-image: none
3987
+ }
3988
+
3989
+ .btn-info.disabled,
3990
+ .btn-info[disabled],
3991
+ fieldset[disabled] .btn-info,
3992
+ .btn-info.disabled:hover,
3993
+ .btn-info[disabled]:hover,
3994
+ fieldset[disabled] .btn-info:hover,
3995
+ .btn-info.disabled:focus,
3996
+ .btn-info[disabled]:focus,
3997
+ fieldset[disabled] .btn-info:focus,
3998
+ .btn-info.disabled.focus,
3999
+ .btn-info[disabled].focus,
4000
+ fieldset[disabled] .btn-info.focus,
4001
+ .btn-info.disabled:active,
4002
+ .btn-info[disabled]:active,
4003
+ fieldset[disabled] .btn-info:active,
4004
+ .btn-info.disabled.active,
4005
+ .btn-info[disabled].active,
4006
+ fieldset[disabled] .btn-info.active {
4007
+ background-color: #3498db;
4008
+ border-color: #3498db
4009
+ }
4010
+
4011
+ .btn-info .badge {
4012
+ color: #3498db;
4013
+ background-color: #ffffff
4014
+ }
4015
+
4016
+ .btn-warning {
4017
+ color: #ffffff;
4018
+ background-color: #f39c12;
4019
+ border-color: #f39c12
4020
+ }
4021
+
4022
+ .btn-warning:focus,
4023
+ .btn-warning.focus {
4024
+ color: #ffffff;
4025
+ background-color: #c87f0a;
4026
+ border-color: #7f5006
4027
+ }
4028
+
4029
+ .btn-warning:hover {
4030
+ color: #ffffff;
4031
+ background-color: #c87f0a;
4032
+ border-color: #be780a
4033
+ }
4034
+
4035
+ .btn-warning:active,
4036
+ .btn-warning.active,
4037
+ .open>.dropdown-toggle.btn-warning {
4038
+ color: #ffffff;
4039
+ background-color: #c87f0a;
4040
+ border-color: #be780a
4041
+ }
4042
+
4043
+ .btn-warning:active:hover,
4044
+ .btn-warning.active:hover,
4045
+ .open>.dropdown-toggle.btn-warning:hover,
4046
+ .btn-warning:active:focus,
4047
+ .btn-warning.active:focus,
4048
+ .open>.dropdown-toggle.btn-warning:focus,
4049
+ .btn-warning:active.focus,
4050
+ .btn-warning.active.focus,
4051
+ .open>.dropdown-toggle.btn-warning.focus {
4052
+ color: #ffffff;
4053
+ background-color: #a66908;
4054
+ border-color: #7f5006
4055
+ }
4056
+
4057
+ .btn-warning:active,
4058
+ .btn-warning.active,
4059
+ .open>.dropdown-toggle.btn-warning {
4060
+ background-image: none
4061
+ }
4062
+
4063
+ .btn-warning.disabled,
4064
+ .btn-warning[disabled],
4065
+ fieldset[disabled] .btn-warning,
4066
+ .btn-warning.disabled:hover,
4067
+ .btn-warning[disabled]:hover,
4068
+ fieldset[disabled] .btn-warning:hover,
4069
+ .btn-warning.disabled:focus,
4070
+ .btn-warning[disabled]:focus,
4071
+ fieldset[disabled] .btn-warning:focus,
4072
+ .btn-warning.disabled.focus,
4073
+ .btn-warning[disabled].focus,
4074
+ fieldset[disabled] .btn-warning.focus,
4075
+ .btn-warning.disabled:active,
4076
+ .btn-warning[disabled]:active,
4077
+ fieldset[disabled] .btn-warning:active,
4078
+ .btn-warning.disabled.active,
4079
+ .btn-warning[disabled].active,
4080
+ fieldset[disabled] .btn-warning.active {
4081
+ background-color: #f39c12;
4082
+ border-color: #f39c12
4083
+ }
4084
+
4085
+ .btn-warning .badge {
4086
+ color: #f39c12;
4087
+ background-color: #ffffff
4088
+ }
4089
+
4090
+ .btn-danger {
4091
+ color: #ffffff;
4092
+ background-color: #e74c3c;
4093
+ border-color: #e74c3c
4094
+ }
4095
+
4096
+ .btn-danger:focus,
4097
+ .btn-danger.focus {
4098
+ color: #ffffff;
4099
+ background-color: #d62c1a;
4100
+ border-color: #921e12
4101
+ }
4102
+
4103
+ .btn-danger:hover {
4104
+ color: #ffffff;
4105
+ background-color: #d62c1a;
4106
+ border-color: #cd2a19
4107
+ }
4108
+
4109
+ .btn-danger:active,
4110
+ .btn-danger.active,
4111
+ .open>.dropdown-toggle.btn-danger {
4112
+ color: #ffffff;
4113
+ background-color: #d62c1a;
4114
+ border-color: #cd2a19
4115
+ }
4116
+
4117
+ .btn-danger:active:hover,
4118
+ .btn-danger.active:hover,
4119
+ .open>.dropdown-toggle.btn-danger:hover,
4120
+ .btn-danger:active:focus,
4121
+ .btn-danger.active:focus,
4122
+ .open>.dropdown-toggle.btn-danger:focus,
4123
+ .btn-danger:active.focus,
4124
+ .btn-danger.active.focus,
4125
+ .open>.dropdown-toggle.btn-danger.focus {
4126
+ color: #ffffff;
4127
+ background-color: #b62516;
4128
+ border-color: #921e12
4129
+ }
4130
+
4131
+ .btn-danger:active,
4132
+ .btn-danger.active,
4133
+ .open>.dropdown-toggle.btn-danger {
4134
+ background-image: none
4135
+ }
4136
+
4137
+ .btn-danger.disabled,
4138
+ .btn-danger[disabled],
4139
+ fieldset[disabled] .btn-danger,
4140
+ .btn-danger.disabled:hover,
4141
+ .btn-danger[disabled]:hover,
4142
+ fieldset[disabled] .btn-danger:hover,
4143
+ .btn-danger.disabled:focus,
4144
+ .btn-danger[disabled]:focus,
4145
+ fieldset[disabled] .btn-danger:focus,
4146
+ .btn-danger.disabled.focus,
4147
+ .btn-danger[disabled].focus,
4148
+ fieldset[disabled] .btn-danger.focus,
4149
+ .btn-danger.disabled:active,
4150
+ .btn-danger[disabled]:active,
4151
+ fieldset[disabled] .btn-danger:active,
4152
+ .btn-danger.disabled.active,
4153
+ .btn-danger[disabled].active,
4154
+ fieldset[disabled] .btn-danger.active {
4155
+ background-color: #e74c3c;
4156
+ border-color: #e74c3c
4157
+ }
4158
+
4159
+ .btn-danger .badge {
4160
+ color: #e74c3c;
4161
+ background-color: #ffffff
4162
+ }
4163
+
4164
+ .btn-link {
4165
+ color: #18bc9c;
4166
+ font-weight: normal;
4167
+ border-radius: 0
4168
+ }
4169
+
4170
+ .btn-link,
4171
+ .btn-link:active,
4172
+ .btn-link.active,
4173
+ .btn-link[disabled],
4174
+ fieldset[disabled] .btn-link {
4175
+ background-color: transparent;
4176
+ -webkit-box-shadow: none;
4177
+ box-shadow: none
4178
+ }
4179
+
4180
+ .btn-link,
4181
+ .btn-link:hover,
4182
+ .btn-link:focus,
4183
+ .btn-link:active {
4184
+ border-color: transparent
4185
+ }
4186
+
4187
+ .btn-link:hover,
4188
+ .btn-link:focus {
4189
+ color: #18bc9c;
4190
+ text-decoration: underline;
4191
+ background-color: transparent
4192
+ }
4193
+
4194
+ .btn-link[disabled]:hover,
4195
+ fieldset[disabled] .btn-link:hover,
4196
+ .btn-link[disabled]:focus,
4197
+ fieldset[disabled] .btn-link:focus {
4198
+ color: #b4bcc2;
4199
+ text-decoration: none
4200
+ }
4201
+
4202
+ .btn-lg,
4203
+ .btn-group-lg>.btn {
4204
+ padding: 18px 27px;
4205
+ font-size: 19px;
4206
+ line-height: 1.3333333;
4207
+ border-radius: 6px
4208
+ }
4209
+
4210
+ .btn-sm,
4211
+ .btn-group-sm>.btn {
4212
+ padding: 6px 9px;
4213
+ font-size: 13px;
4214
+ line-height: 1.5;
4215
+ border-radius: 3px
4216
+ }
4217
+
4218
+ .btn-xs,
4219
+ .btn-group-xs>.btn {
4220
+ padding: 1px 5px;
4221
+ font-size: 13px;
4222
+ line-height: 1.5;
4223
+ border-radius: 3px
4224
+ }
4225
+
4226
+ .btn-block {
4227
+ display: block;
4228
+ width: 100%
4229
+ }
4230
+
4231
+ .btn-block+.btn-block {
4232
+ margin-top: 5px
4233
+ }
4234
+
4235
+ input[type="submit"].btn-block,
4236
+ input[type="reset"].btn-block,
4237
+ input[type="button"].btn-block {
4238
+ width: 100%
4239
+ }
4240
+
4241
+ .fade {
4242
+ opacity: 0;
4243
+ -webkit-transition: opacity 0.15s linear;
4244
+ -o-transition: opacity 0.15s linear;
4245
+ transition: opacity 0.15s linear
4246
+ }
4247
+
4248
+ .fade.in {
4249
+ opacity: 1
4250
+ }
4251
+
4252
+ .collapse {
4253
+ display: none
4254
+ }
4255
+
4256
+ .collapse.in {
4257
+ display: block
4258
+ }
4259
+
4260
+ tr.collapse.in {
4261
+ display: table-row
4262
+ }
4263
+
4264
+ tbody.collapse.in {
4265
+ display: table-row-group
4266
+ }
4267
+
4268
+ .collapsing {
4269
+ position: relative;
4270
+ height: 0;
4271
+ overflow: hidden;
4272
+ -webkit-transition-property: height, visibility;
4273
+ -o-transition-property: height, visibility;
4274
+ transition-property: height, visibility;
4275
+ -webkit-transition-duration: 0.35s;
4276
+ -o-transition-duration: 0.35s;
4277
+ transition-duration: 0.35s;
4278
+ -webkit-transition-timing-function: ease;
4279
+ -o-transition-timing-function: ease;
4280
+ transition-timing-function: ease
4281
+ }
4282
+
4283
+ .caret {
4284
+ display: inline-block;
4285
+ width: 0;
4286
+ height: 0;
4287
+ margin-left: 2px;
4288
+ vertical-align: middle;
4289
+ border-top: 4px dashed;
4290
+ border-top: 4px solid \9;
4291
+ border-right: 4px solid transparent;
4292
+ border-left: 4px solid transparent
4293
+ }
4294
+
4295
+ .dropup,
4296
+ .dropdown {
4297
+ position: relative
4298
+ }
4299
+
4300
+ .dropdown-toggle:focus {
4301
+ outline: 0
4302
+ }
4303
+
4304
+ .dropdown-menu {
4305
+ position: absolute;
4306
+ top: 100%;
4307
+ left: 0;
4308
+ z-index: 1000;
4309
+ display: none;
4310
+ float: left;
4311
+ min-width: 160px;
4312
+ padding: 5px 0;
4313
+ margin: 2px 0 0;
4314
+ list-style: none;
4315
+ font-size: 15px;
4316
+ text-align: left;
4317
+ background-color: #ffffff;
4318
+ border: 1px solid #cccccc;
4319
+ border: 1px solid rgba(0, 0, 0, 0.15);
4320
+ border-radius: 4px;
4321
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
4322
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
4323
+ -webkit-background-clip: padding-box;
4324
+ background-clip: padding-box
4325
+ }
4326
+
4327
+ .dropdown-menu.pull-right {
4328
+ right: 0;
4329
+ left: auto
4330
+ }
4331
+
4332
+ .dropdown-menu .divider {
4333
+ height: 1px;
4334
+ margin: 9.5px 0;
4335
+ overflow: hidden;
4336
+ background-color: #e5e5e5
4337
+ }
4338
+
4339
+ .dropdown-menu>li>a {
4340
+ display: block;
4341
+ padding: 3px 20px;
4342
+ clear: both;
4343
+ font-weight: normal;
4344
+ line-height: 1.42857143;
4345
+ color: #7b8a8b;
4346
+ white-space: nowrap
4347
+ }
4348
+
4349
+ .dropdown-menu>li>a:hover,
4350
+ .dropdown-menu>li>a:focus {
4351
+ text-decoration: none;
4352
+ color: #ffffff;
4353
+ background-color: #2c3e50
4354
+ }
4355
+
4356
+ .dropdown-menu>.active>a,
4357
+ .dropdown-menu>.active>a:hover,
4358
+ .dropdown-menu>.active>a:focus {
4359
+ color: #ffffff;
4360
+ text-decoration: none;
4361
+ outline: 0;
4362
+ background-color: #2c3e50
4363
+ }
4364
+
4365
+ .dropdown-menu>.disabled>a,
4366
+ .dropdown-menu>.disabled>a:hover,
4367
+ .dropdown-menu>.disabled>a:focus {
4368
+ color: #b4bcc2
4369
+ }
4370
+
4371
+ .dropdown-menu>.disabled>a:hover,
4372
+ .dropdown-menu>.disabled>a:focus {
4373
+ text-decoration: none;
4374
+ background-color: transparent;
4375
+ background-image: none;
4376
+ filter: progid: DXImageTransform.Microsoft.gradient(enabled=false);
4377
+ cursor: not-allowed
4378
+ }
4379
+
4380
+ .open>.dropdown-menu {
4381
+ display: block
4382
+ }
4383
+
4384
+ .open>a {
4385
+ outline: 0
4386
+ }
4387
+
4388
+ .dropdown-menu-right {
4389
+ left: auto;
4390
+ right: 0
4391
+ }
4392
+
4393
+ .dropdown-menu-left {
4394
+ left: 0;
4395
+ right: auto
4396
+ }
4397
+
4398
+ .dropdown-header {
4399
+ display: block;
4400
+ padding: 3px 20px;
4401
+ font-size: 13px;
4402
+ line-height: 1.42857143;
4403
+ color: #b4bcc2;
4404
+ white-space: nowrap
4405
+ }
4406
+
4407
+ .dropdown-backdrop {
4408
+ position: fixed;
4409
+ left: 0;
4410
+ right: 0;
4411
+ bottom: 0;
4412
+ top: 0;
4413
+ z-index: 990
4414
+ }
4415
+
4416
+ .pull-right>.dropdown-menu {
4417
+ right: 0;
4418
+ left: auto
4419
+ }
4420
+
4421
+ .dropup .caret,
4422
+ .navbar-fixed-bottom .dropdown .caret {
4423
+ border-top: 0;
4424
+ border-bottom: 4px dashed;
4425
+ border-bottom: 4px solid \9;
4426
+ content: ""
4427
+ }
4428
+
4429
+ .dropup .dropdown-menu,
4430
+ .navbar-fixed-bottom .dropdown .dropdown-menu {
4431
+ top: auto;
4432
+ bottom: 100%;
4433
+ margin-bottom: 2px
4434
+ }
4435
+
4436
+ @media (min-width: 768px) {
4437
+ .navbar-right .dropdown-menu {
4438
+ left: auto;
4439
+ right: 0
4440
+ }
4441
+ .navbar-right .dropdown-menu-left {
4442
+ left: 0;
4443
+ right: auto
4444
+ }
4445
+ }
4446
+
4447
+ .btn-group,
4448
+ .btn-group-vertical {
4449
+ position: relative;
4450
+ display: inline-block;
4451
+ vertical-align: middle
4452
+ }
4453
+
4454
+ .btn-group>.btn,
4455
+ .btn-group-vertical>.btn {
4456
+ position: relative;
4457
+ float: left
4458
+ }
4459
+
4460
+ .btn-group>.btn:hover,
4461
+ .btn-group-vertical>.btn:hover,
4462
+ .btn-group>.btn:focus,
4463
+ .btn-group-vertical>.btn:focus,
4464
+ .btn-group>.btn:active,
4465
+ .btn-group-vertical>.btn:active,
4466
+ .btn-group>.btn.active,
4467
+ .btn-group-vertical>.btn.active {
4468
+ z-index: 2
4469
+ }
4470
+
4471
+ .btn-group .btn+.btn,
4472
+ .btn-group .btn+.btn-group,
4473
+ .btn-group .btn-group+.btn,
4474
+ .btn-group .btn-group+.btn-group {
4475
+ margin-left: -1px
4476
+ }
4477
+
4478
+ .btn-toolbar {
4479
+ margin-left: -5px
4480
+ }
4481
+
4482
+ .btn-toolbar .btn,
4483
+ .btn-toolbar .btn-group,
4484
+ .btn-toolbar .input-group {
4485
+ float: left
4486
+ }
4487
+
4488
+ .btn-toolbar>.btn,
4489
+ .btn-toolbar>.btn-group,
4490
+ .btn-toolbar>.input-group {
4491
+ margin-left: 5px
4492
+ }
4493
+
4494
+ .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
4495
+ border-radius: 0
4496
+ }
4497
+
4498
+ .btn-group>.btn:first-child {
4499
+ margin-left: 0
4500
+ }
4501
+
4502
+ .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) {
4503
+ border-bottom-right-radius: 0;
4504
+ border-top-right-radius: 0
4505
+ }
4506
+
4507
+ .btn-group>.btn:last-child:not(:first-child),
4508
+ .btn-group>.dropdown-toggle:not(:first-child) {
4509
+ border-bottom-left-radius: 0;
4510
+ border-top-left-radius: 0
4511
+ }
4512
+
4513
+ .btn-group>.btn-group {
4514
+ float: left
4515
+ }
4516
+
4517
+ .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn {
4518
+ border-radius: 0
4519
+ }
4520
+
4521
+ .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,
4522
+ .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle {
4523
+ border-bottom-right-radius: 0;
4524
+ border-top-right-radius: 0
4525
+ }
4526
+
4527
+ .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child {
4528
+ border-bottom-left-radius: 0;
4529
+ border-top-left-radius: 0
4530
+ }
4531
+
4532
+ .btn-group .dropdown-toggle:active,
4533
+ .btn-group.open .dropdown-toggle {
4534
+ outline: 0
4535
+ }
4536
+
4537
+ .btn-group>.btn+.dropdown-toggle {
4538
+ padding-left: 8px;
4539
+ padding-right: 8px
4540
+ }
4541
+
4542
+ .btn-group>.btn-lg+.dropdown-toggle {
4543
+ padding-left: 12px;
4544
+ padding-right: 12px
4545
+ }
4546
+
4547
+ .btn-group.open .dropdown-toggle {
4548
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
4549
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125)
4550
+ }
4551
+
4552
+ .btn-group.open .dropdown-toggle.btn-link {
4553
+ -webkit-box-shadow: none;
4554
+ box-shadow: none
4555
+ }
4556
+
4557
+ .btn .caret {
4558
+ margin-left: 0
4559
+ }
4560
+
4561
+ .btn-lg .caret {
4562
+ border-width: 5px 5px 0;
4563
+ border-bottom-width: 0
4564
+ }
4565
+
4566
+ .dropup .btn-lg .caret {
4567
+ border-width: 0 5px 5px
4568
+ }
4569
+
4570
+ .btn-group-vertical>.btn,
4571
+ .btn-group-vertical>.btn-group,
4572
+ .btn-group-vertical>.btn-group>.btn {
4573
+ display: block;
4574
+ float: none;
4575
+ width: 100%;
4576
+ max-width: 100%
4577
+ }
4578
+
4579
+ .btn-group-vertical>.btn-group>.btn {
4580
+ float: none
4581
+ }
4582
+
4583
+ .btn-group-vertical>.btn+.btn,
4584
+ .btn-group-vertical>.btn+.btn-group,
4585
+ .btn-group-vertical>.btn-group+.btn,
4586
+ .btn-group-vertical>.btn-group+.btn-group {
4587
+ margin-top: -1px;
4588
+ margin-left: 0
4589
+ }
4590
+
4591
+ .btn-group-vertical>.btn:not(:first-child):not(:last-child) {
4592
+ border-radius: 0
4593
+ }
4594
+
4595
+ .btn-group-vertical>.btn:first-child:not(:last-child) {
4596
+ border-top-right-radius: 4px;
4597
+ border-bottom-right-radius: 0;
4598
+ border-bottom-left-radius: 0
4599
+ }
4600
+
4601
+ .btn-group-vertical>.btn:last-child:not(:first-child) {
4602
+ border-bottom-left-radius: 4px;
4603
+ border-top-right-radius: 0;
4604
+ border-top-left-radius: 0
4605
+ }
4606
+
4607
+ .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn {
4608
+ border-radius: 0
4609
+ }
4610
+
4611
+ .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,
4612
+ .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle {
4613
+ border-bottom-right-radius: 0;
4614
+ border-bottom-left-radius: 0
4615
+ }
4616
+
4617
+ .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child {
4618
+ border-top-right-radius: 0;
4619
+ border-top-left-radius: 0
4620
+ }
4621
+
4622
+ .btn-group-justified {
4623
+ display: table;
4624
+ width: 100%;
4625
+ table-layout: fixed;
4626
+ border-collapse: separate
4627
+ }
4628
+
4629
+ .btn-group-justified>.btn,
4630
+ .btn-group-justified>.btn-group {
4631
+ float: none;
4632
+ display: table-cell;
4633
+ width: 1%
4634
+ }
4635
+
4636
+ .btn-group-justified>.btn-group .btn {
4637
+ width: 100%
4638
+ }
4639
+
4640
+ .btn-group-justified>.btn-group .dropdown-menu {
4641
+ left: auto
4642
+ }
4643
+
4644
+ [data-toggle="buttons"]>.btn input[type="radio"],
4645
+ [data-toggle="buttons"]>.btn-group>.btn input[type="radio"],
4646
+ [data-toggle="buttons"]>.btn input[type="checkbox"],
4647
+ [data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"] {
4648
+ position: absolute;
4649
+ clip: rect(0, 0, 0, 0);
4650
+ pointer-events: none
4651
+ }
4652
+
4653
+ .input-group {
4654
+ position: relative;
4655
+ display: table;
4656
+ border-collapse: separate
4657
+ }
4658
+
4659
+ .input-group[class*="col-"] {
4660
+ float: none;
4661
+ padding-left: 0;
4662
+ padding-right: 0
4663
+ }
4664
+
4665
+ .input-group .form-control {
4666
+ position: relative;
4667
+ z-index: 2;
4668
+ float: left;
4669
+ width: 100%;
4670
+ margin-bottom: 0
4671
+ }
4672
+
4673
+ .input-group-lg>.form-control,
4674
+ .input-group-lg>.input-group-addon,
4675
+ .input-group-lg>.input-group-btn>.btn {
4676
+ height: 66px;
4677
+ padding: 18px 27px;
4678
+ font-size: 19px;
4679
+ line-height: 1.3333333;
4680
+ border-radius: 6px
4681
+ }
4682
+
4683
+ select.input-group-lg>.form-control,
4684
+ select.input-group-lg>.input-group-addon,
4685
+ select.input-group-lg>.input-group-btn>.btn {
4686
+ height: 66px;
4687
+ line-height: 66px
4688
+ }
4689
+
4690
+ textarea.input-group-lg>.form-control,
4691
+ textarea.input-group-lg>.input-group-addon,
4692
+ textarea.input-group-lg>.input-group-btn>.btn,
4693
+ select[multiple].input-group-lg>.form-control,
4694
+ select[multiple].input-group-lg>.input-group-addon,
4695
+ select[multiple].input-group-lg>.input-group-btn>.btn {
4696
+ height: auto
4697
+ }
4698
+
4699
+ .input-group-sm>.form-control,
4700
+ .input-group-sm>.input-group-addon,
4701
+ .input-group-sm>.input-group-btn>.btn {
4702
+ height: 35px;
4703
+ padding: 6px 9px;
4704
+ font-size: 13px;
4705
+ line-height: 1.5;
4706
+ border-radius: 3px
4707
+ }
4708
+
4709
+ select.input-group-sm>.form-control,
4710
+ select.input-group-sm>.input-group-addon,
4711
+ select.input-group-sm>.input-group-btn>.btn {
4712
+ height: 35px;
4713
+ line-height: 35px
4714
+ }
4715
+
4716
+ textarea.input-group-sm>.form-control,
4717
+ textarea.input-group-sm>.input-group-addon,
4718
+ textarea.input-group-sm>.input-group-btn>.btn,
4719
+ select[multiple].input-group-sm>.form-control,
4720
+ select[multiple].input-group-sm>.input-group-addon,
4721
+ select[multiple].input-group-sm>.input-group-btn>.btn {
4722
+ height: auto
4723
+ }
4724
+
4725
+ .input-group-addon,
4726
+ .input-group-btn,
4727
+ .input-group .form-control {
4728
+ display: table-cell
4729
+ }
4730
+
4731
+ .input-group-addon:not(:first-child):not(:last-child),
4732
+ .input-group-btn:not(:first-child):not(:last-child),
4733
+ .input-group .form-control:not(:first-child):not(:last-child) {
4734
+ border-radius: 0
4735
+ }
4736
+
4737
+ .input-group-addon,
4738
+ .input-group-btn {
4739
+ width: 1%;
4740
+ white-space: nowrap;
4741
+ vertical-align: middle
4742
+ }
4743
+
4744
+ .input-group-addon {
4745
+ padding: 10px 15px;
4746
+ font-size: 15px;
4747
+ font-weight: normal;
4748
+ line-height: 1;
4749
+ color: #2c3e50;
4750
+ text-align: center;
4751
+ background-color: #ecf0f1;
4752
+ border: 1px solid #dce4ec;
4753
+ border-radius: 4px
4754
+ }
4755
+
4756
+ .input-group-addon.input-sm {
4757
+ padding: 6px 9px;
4758
+ font-size: 13px;
4759
+ border-radius: 3px
4760
+ }
4761
+
4762
+ .input-group-addon.input-lg {
4763
+ padding: 18px 27px;
4764
+ font-size: 19px;
4765
+ border-radius: 6px
4766
+ }
4767
+
4768
+ .input-group-addon input[type="radio"],
4769
+ .input-group-addon input[type="checkbox"] {
4770
+ margin-top: 0
4771
+ }
4772
+
4773
+ .input-group .form-control:first-child,
4774
+ .input-group-addon:first-child,
4775
+ .input-group-btn:first-child>.btn,
4776
+ .input-group-btn:first-child>.btn-group>.btn,
4777
+ .input-group-btn:first-child>.dropdown-toggle,
4778
+ .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),
4779
+ .input-group-btn:last-child>.btn-group:not(:last-child)>.btn {
4780
+ border-bottom-right-radius: 0;
4781
+ border-top-right-radius: 0
4782
+ }
4783
+
4784
+ .input-group-addon:first-child {
4785
+ border-right: 0
4786
+ }
4787
+
4788
+ .input-group .form-control:last-child,
4789
+ .input-group-addon:last-child,
4790
+ .input-group-btn:last-child>.btn,
4791
+ .input-group-btn:last-child>.btn-group>.btn,
4792
+ .input-group-btn:last-child>.dropdown-toggle,
4793
+ .input-group-btn:first-child>.btn:not(:first-child),
4794
+ .input-group-btn:first-child>.btn-group:not(:first-child)>.btn {
4795
+ border-bottom-left-radius: 0;
4796
+ border-top-left-radius: 0
4797
+ }
4798
+
4799
+ .input-group-addon:last-child {
4800
+ border-left: 0
4801
+ }
4802
+
4803
+ .input-group-btn {
4804
+ position: relative;
4805
+ font-size: 0;
4806
+ white-space: nowrap
4807
+ }
4808
+
4809
+ .input-group-btn>.btn {
4810
+ position: relative
4811
+ }
4812
+
4813
+ .input-group-btn>.btn+.btn {
4814
+ margin-left: -1px
4815
+ }
4816
+
4817
+ .input-group-btn>.btn:hover,
4818
+ .input-group-btn>.btn:focus,
4819
+ .input-group-btn>.btn:active {
4820
+ z-index: 2
4821
+ }
4822
+
4823
+ .input-group-btn:first-child>.btn,
4824
+ .input-group-btn:first-child>.btn-group {
4825
+ margin-right: -1px
4826
+ }
4827
+
4828
+ .input-group-btn:last-child>.btn,
4829
+ .input-group-btn:last-child>.btn-group {
4830
+ z-index: 2;
4831
+ margin-left: -1px
4832
+ }
4833
+
4834
+ .nav {
4835
+ margin-bottom: 0;
4836
+ padding-left: 0;
4837
+ list-style: none
4838
+ }
4839
+
4840
+ .nav>li {
4841
+ position: relative;
4842
+ display: block
4843
+ }
4844
+
4845
+ .nav>li>a {
4846
+ position: relative;
4847
+ display: block;
4848
+ padding: 10px 15px
4849
+ }
4850
+
4851
+ .nav>li>a:hover,
4852
+ .nav>li>a:focus {
4853
+ text-decoration: none;
4854
+ background-color: #ecf0f1
4855
+ }
4856
+
4857
+ .nav>li.disabled>a {
4858
+ color: #b4bcc2
4859
+ }
4860
+
4861
+ .nav>li.disabled>a:hover,
4862
+ .nav>li.disabled>a:focus {
4863
+ color: #b4bcc2;
4864
+ text-decoration: none;
4865
+ background-color: transparent;
4866
+ cursor: not-allowed
4867
+ }
4868
+
4869
+ .nav .open>a,
4870
+ .nav .open>a:hover,
4871
+ .nav .open>a:focus {
4872
+ background-color: #ecf0f1;
4873
+ border-color: #18bc9c
4874
+ }
4875
+
4876
+ .nav .nav-divider {
4877
+ height: 1px;
4878
+ margin: 9.5px 0;
4879
+ overflow: hidden;
4880
+ background-color: #e5e5e5
4881
+ }
4882
+
4883
+ .nav>li>a>img {
4884
+ max-width: none
4885
+ }
4886
+
4887
+ .nav-tabs {
4888
+ border-bottom: 1px solid #ecf0f1
4889
+ }
4890
+
4891
+ .nav-tabs>li {
4892
+ float: left;
4893
+ margin-bottom: -1px
4894
+ }
4895
+
4896
+ .nav-tabs>li>a {
4897
+ margin-right: 2px;
4898
+ line-height: 1.42857143;
4899
+ border: 1px solid transparent;
4900
+ border-radius: 4px 4px 0 0
4901
+ }
4902
+
4903
+ .nav-tabs>li>a:hover {
4904
+ border-color: #ecf0f1 #ecf0f1 #ecf0f1
4905
+ }
4906
+
4907
+ .nav-tabs>li.active>a,
4908
+ .nav-tabs>li.active>a:hover,
4909
+ .nav-tabs>li.active>a:focus {
4910
+ color: #2c3e50;
4911
+ background-color: #ffffff;
4912
+ border: 1px solid #ecf0f1;
4913
+ border-bottom-color: transparent;
4914
+ cursor: default
4915
+ }
4916
+
4917
+ .nav-tabs.nav-justified {
4918
+ width: 100%;
4919
+ border-bottom: 0
4920
+ }
4921
+
4922
+ .nav-tabs.nav-justified>li {
4923
+ float: none
4924
+ }
4925
+
4926
+ .nav-tabs.nav-justified>li>a {
4927
+ text-align: center;
4928
+ margin-bottom: 5px
4929
+ }
4930
+
4931
+ .nav-tabs.nav-justified>.dropdown .dropdown-menu {
4932
+ top: auto;
4933
+ left: auto
4934
+ }
4935
+
4936
+ @media (min-width: 768px) {
4937
+ .nav-tabs.nav-justified>li {
4938
+ display: table-cell;
4939
+ width: 1%
4940
+ }
4941
+ .nav-tabs.nav-justified>li>a {
4942
+ margin-bottom: 0
4943
+ }
4944
+ }
4945
+
4946
+ .nav-tabs.nav-justified>li>a {
4947
+ margin-right: 0;
4948
+ border-radius: 4px
4949
+ }
4950
+
4951
+ .nav-tabs.nav-justified>.active>a,
4952
+ .nav-tabs.nav-justified>.active>a:hover,
4953
+ .nav-tabs.nav-justified>.active>a:focus {
4954
+ border: 1px solid #ecf0f1
4955
+ }
4956
+
4957
+ @media (min-width: 768px) {
4958
+ .nav-tabs.nav-justified>li>a {
4959
+ border-bottom: 1px solid #ecf0f1;
4960
+ border-radius: 4px 4px 0 0
4961
+ }
4962
+ .nav-tabs.nav-justified>.active>a,
4963
+ .nav-tabs.nav-justified>.active>a:hover,
4964
+ .nav-tabs.nav-justified>.active>a:focus {
4965
+ border-bottom-color: #ffffff
4966
+ }
4967
+ }
4968
+
4969
+ .nav-pills>li {
4970
+ float: left
4971
+ }
4972
+
4973
+ .nav-pills>li>a {
4974
+ border-radius: 4px
4975
+ }
4976
+
4977
+ .nav-pills>li+li {
4978
+ margin-left: 2px
4979
+ }
4980
+
4981
+ .nav-pills>li.active>a,
4982
+ .nav-pills>li.active>a:hover,
4983
+ .nav-pills>li.active>a:focus {
4984
+ color: #ffffff;
4985
+ background-color: #2c3e50
4986
+ }
4987
+
4988
+ .nav-stacked>li {
4989
+ float: none
4990
+ }
4991
+
4992
+ .nav-stacked>li+li {
4993
+ margin-top: 2px;
4994
+ margin-left: 0
4995
+ }
4996
+
4997
+ .nav-justified {
4998
+ width: 100%
4999
+ }
5000
+
5001
+ .nav-justified>li {
5002
+ float: none
5003
+ }
5004
+
5005
+ .nav-justified>li>a {
5006
+ text-align: center;
5007
+ margin-bottom: 5px
5008
+ }
5009
+
5010
+ .nav-justified>.dropdown .dropdown-menu {
5011
+ top: auto;
5012
+ left: auto
5013
+ }
5014
+
5015
+ @media (min-width: 768px) {
5016
+ .nav-justified>li {
5017
+ display: table-cell;
5018
+ width: 1%
5019
+ }
5020
+ .nav-justified>li>a {
5021
+ margin-bottom: 0
5022
+ }
5023
+ }
5024
+
5025
+ .nav-tabs-justified {
5026
+ border-bottom: 0
5027
+ }
5028
+
5029
+ .nav-tabs-justified>li>a {
5030
+ margin-right: 0;
5031
+ border-radius: 4px
5032
+ }
5033
+
5034
+ .nav-tabs-justified>.active>a,
5035
+ .nav-tabs-justified>.active>a:hover,
5036
+ .nav-tabs-justified>.active>a:focus {
5037
+ border: 1px solid #ecf0f1
5038
+ }
5039
+
5040
+ @media (min-width: 768px) {
5041
+ .nav-tabs-justified>li>a {
5042
+ border-bottom: 1px solid #ecf0f1;
5043
+ border-radius: 4px 4px 0 0
5044
+ }
5045
+ .nav-tabs-justified>.active>a,
5046
+ .nav-tabs-justified>.active>a:hover,
5047
+ .nav-tabs-justified>.active>a:focus {
5048
+ border-bottom-color: #ffffff
5049
+ }
5050
+ }
5051
+
5052
+ .tab-content>.tab-pane {
5053
+ display: none
5054
+ }
5055
+
5056
+ .tab-content>.active {
5057
+ display: block
5058
+ }
5059
+
5060
+ .nav-tabs .dropdown-menu {
5061
+ margin-top: -1px;
5062
+ border-top-right-radius: 0;
5063
+ border-top-left-radius: 0
5064
+ }
5065
+
5066
+ .navbar {
5067
+ position: relative;
5068
+ min-height: 60px;
5069
+ margin-bottom: 21px;
5070
+ border: 1px solid transparent
5071
+ }
5072
+
5073
+ @media (min-width: 768px) {
5074
+ .navbar {
5075
+ border-radius: 4px
5076
+ }
5077
+ }
5078
+
5079
+ @media (min-width: 768px) {
5080
+ .navbar-header {
5081
+ float: left
5082
+ }
5083
+ }
5084
+
5085
+ .navbar-collapse {
5086
+ overflow-x: visible;
5087
+ padding-right: 15px;
5088
+ padding-left: 15px;
5089
+ border-top: 1px solid transparent;
5090
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
5091
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
5092
+ -webkit-overflow-scrolling: touch
5093
+ }
5094
+
5095
+ .navbar-collapse.in {
5096
+ overflow-y: auto
5097
+ }
5098
+
5099
+ @media (min-width: 768px) {
5100
+ .navbar-collapse {
5101
+ width: auto;
5102
+ border-top: 0;
5103
+ -webkit-box-shadow: none;
5104
+ box-shadow: none
5105
+ }
5106
+ .navbar-collapse.collapse {
5107
+ display: block !important;
5108
+ height: auto !important;
5109
+ padding-bottom: 0;
5110
+ overflow: visible !important
5111
+ }
5112
+ .navbar-collapse.in {
5113
+ overflow-y: visible
5114
+ }
5115
+ .navbar-fixed-top .navbar-collapse,
5116
+ .navbar-static-top .navbar-collapse,
5117
+ .navbar-fixed-bottom .navbar-collapse {
5118
+ padding-left: 0;
5119
+ padding-right: 0
5120
+ }
5121
+ }
5122
+
5123
+ .navbar-fixed-top .navbar-collapse,
5124
+ .navbar-fixed-bottom .navbar-collapse {
5125
+ max-height: 340px
5126
+ }
5127
+
5128
+ @media (max-device-width: 480px) and (orientation: landscape) {
5129
+ .navbar-fixed-top .navbar-collapse,
5130
+ .navbar-fixed-bottom .navbar-collapse {
5131
+ max-height: 200px
5132
+ }
5133
+ }
5134
+
5135
+ .container>.navbar-header,
5136
+ .container-fluid>.navbar-header,
5137
+ .container>.navbar-collapse,
5138
+ .container-fluid>.navbar-collapse {
5139
+ margin-right: -15px;
5140
+ margin-left: -15px
5141
+ }
5142
+
5143
+ @media (min-width: 768px) {
5144
+ .container>.navbar-header,
5145
+ .container-fluid>.navbar-header,
5146
+ .container>.navbar-collapse,
5147
+ .container-fluid>.navbar-collapse {
5148
+ margin-right: 0;
5149
+ margin-left: 0
5150
+ }
5151
+ }
5152
+
5153
+ .navbar-static-top {
5154
+ z-index: 1000;
5155
+ border-width: 0 0 1px
5156
+ }
5157
+
5158
+ @media (min-width: 768px) {
5159
+ .navbar-static-top {
5160
+ border-radius: 0
5161
+ }
5162
+ }
5163
+
5164
+ .navbar-fixed-top,
5165
+ .navbar-fixed-bottom {
5166
+ position: fixed;
5167
+ right: 0;
5168
+ left: 0;
5169
+ z-index: 1030
5170
+ }
5171
+
5172
+ @media (min-width: 768px) {
5173
+ .navbar-fixed-top,
5174
+ .navbar-fixed-bottom {
5175
+ border-radius: 0
5176
+ }
5177
+ }
5178
+
5179
+ .navbar-fixed-top {
5180
+ top: 0;
5181
+ border-width: 0 0 1px
5182
+ }
5183
+
5184
+ .navbar-fixed-bottom {
5185
+ bottom: 0;
5186
+ margin-bottom: 0;
5187
+ border-width: 1px 0 0
5188
+ }
5189
+
5190
+ .navbar-brand {
5191
+ float: left;
5192
+ padding: 19.5px 15px;
5193
+ font-size: 19px;
5194
+ line-height: 21px;
5195
+ height: 60px
5196
+ }
5197
+
5198
+ .navbar-brand:hover,
5199
+ .navbar-brand:focus {
5200
+ text-decoration: none
5201
+ }
5202
+
5203
+ .navbar-brand>img {
5204
+ display: block
5205
+ }
5206
+
5207
+ @media (min-width: 768px) {
5208
+ .navbar>.container .navbar-brand,
5209
+ .navbar>.container-fluid .navbar-brand {
5210
+ margin-left: -15px
5211
+ }
5212
+ }
5213
+
5214
+ .navbar-toggle {
5215
+ position: relative;
5216
+ float: right;
5217
+ margin-right: 15px;
5218
+ padding: 9px 10px;
5219
+ margin-top: 13px;
5220
+ margin-bottom: 13px;
5221
+ background-color: transparent;
5222
+ background-image: none;
5223
+ border: 1px solid transparent;
5224
+ border-radius: 4px
5225
+ }
5226
+
5227
+ .navbar-toggle:focus {
5228
+ outline: 0
5229
+ }
5230
+
5231
+ .navbar-toggle .icon-bar {
5232
+ display: block;
5233
+ width: 22px;
5234
+ height: 2px;
5235
+ border-radius: 1px
5236
+ }
5237
+
5238
+ .navbar-toggle .icon-bar+.icon-bar {
5239
+ margin-top: 4px
5240
+ }
5241
+
5242
+ @media (min-width: 768px) {
5243
+ .navbar-toggle {
5244
+ display: none
5245
+ }
5246
+ }
5247
+
5248
+ .navbar-nav {
5249
+ margin: 9.75px -15px
5250
+ }
5251
+
5252
+ .navbar-nav>li>a {
5253
+ padding-top: 10px;
5254
+ padding-bottom: 10px;
5255
+ line-height: 21px
5256
+ }
5257
+
5258
+ @media (max-width: 767px) {
5259
+ .navbar-nav .open .dropdown-menu {
5260
+ position: static;
5261
+ float: none;
5262
+ width: auto;
5263
+ margin-top: 0;
5264
+ background-color: transparent;
5265
+ border: 0;
5266
+ -webkit-box-shadow: none;
5267
+ box-shadow: none
5268
+ }
5269
+ .navbar-nav .open .dropdown-menu>li>a,
5270
+ .navbar-nav .open .dropdown-menu .dropdown-header {
5271
+ padding: 5px 15px 5px 25px
5272
+ }
5273
+ .navbar-nav .open .dropdown-menu>li>a {
5274
+ line-height: 21px
5275
+ }
5276
+ .navbar-nav .open .dropdown-menu>li>a:hover,
5277
+ .navbar-nav .open .dropdown-menu>li>a:focus {
5278
+ background-image: none
5279
+ }
5280
+ }
5281
+
5282
+ @media (min-width: 768px) {
5283
+ .navbar-nav {
5284
+ float: left;
5285
+ margin: 0
5286
+ }
5287
+ .navbar-nav>li {
5288
+ float: left
5289
+ }
5290
+ .navbar-nav>li>a {
5291
+ padding-top: 19.5px;
5292
+ padding-bottom: 19.5px
5293
+ }
5294
+ }
5295
+
5296
+ .navbar-form {
5297
+ margin-left: -15px;
5298
+ margin-right: -15px;
5299
+ padding: 10px 15px;
5300
+ border-top: 1px solid transparent;
5301
+ border-bottom: 1px solid transparent;
5302
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
5303
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
5304
+ margin-top: 7.5px;
5305
+ margin-bottom: 7.5px
5306
+ }
5307
+
5308
+ @media (min-width: 768px) {
5309
+ .navbar-form .form-group {
5310
+ display: inline-block;
5311
+ margin-bottom: 0;
5312
+ vertical-align: middle
5313
+ }
5314
+ .navbar-form .form-control {
5315
+ display: inline-block;
5316
+ width: auto;
5317
+ vertical-align: middle
5318
+ }
5319
+ .navbar-form .form-control-static {
5320
+ display: inline-block
5321
+ }
5322
+ .navbar-form .input-group {
5323
+ display: inline-table;
5324
+ vertical-align: middle
5325
+ }
5326
+ .navbar-form .input-group .input-group-addon,
5327
+ .navbar-form .input-group .input-group-btn,
5328
+ .navbar-form .input-group .form-control {
5329
+ width: auto
5330
+ }
5331
+ .navbar-form .input-group>.form-control {
5332
+ width: 100%
5333
+ }
5334
+ .navbar-form .control-label {
5335
+ margin-bottom: 0;
5336
+ vertical-align: middle
5337
+ }
5338
+ .navbar-form .radio,
5339
+ .navbar-form .checkbox {
5340
+ display: inline-block;
5341
+ margin-top: 0;
5342
+ margin-bottom: 0;
5343
+ vertical-align: middle
5344
+ }
5345
+ .navbar-form .radio label,
5346
+ .navbar-form .checkbox label {
5347
+ padding-left: 0
5348
+ }
5349
+ .navbar-form .radio input[type="radio"],
5350
+ .navbar-form .checkbox input[type="checkbox"] {
5351
+ position: relative;
5352
+ margin-left: 0
5353
+ }
5354
+ .navbar-form .has-feedback .form-control-feedback {
5355
+ top: 0
5356
+ }
5357
+ }
5358
+
5359
+ @media (max-width: 767px) {
5360
+ .navbar-form .form-group {
5361
+ margin-bottom: 5px
5362
+ }
5363
+ .navbar-form .form-group:last-child {
5364
+ margin-bottom: 0
5365
+ }
5366
+ }
5367
+
5368
+ @media (min-width: 768px) {
5369
+ .navbar-form {
5370
+ width: auto;
5371
+ border: 0;
5372
+ margin-left: 0;
5373
+ margin-right: 0;
5374
+ padding-top: 0;
5375
+ padding-bottom: 0;
5376
+ -webkit-box-shadow: none;
5377
+ box-shadow: none
5378
+ }
5379
+ }
5380
+
5381
+ .navbar-nav>li>.dropdown-menu {
5382
+ margin-top: 0;
5383
+ border-top-right-radius: 0;
5384
+ border-top-left-radius: 0
5385
+ }
5386
+
5387
+ .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu {
5388
+ margin-bottom: 0;
5389
+ border-top-right-radius: 4px;
5390
+ border-top-left-radius: 4px;
5391
+ border-bottom-right-radius: 0;
5392
+ border-bottom-left-radius: 0
5393
+ }
5394
+
5395
+ .navbar-btn {
5396
+ margin-top: 7.5px;
5397
+ margin-bottom: 7.5px
5398
+ }
5399
+
5400
+ .navbar-btn.btn-sm {
5401
+ margin-top: 12.5px;
5402
+ margin-bottom: 12.5px
5403
+ }
5404
+
5405
+ .navbar-btn.btn-xs {
5406
+ margin-top: 19px;
5407
+ margin-bottom: 19px
5408
+ }
5409
+
5410
+ .navbar-text {
5411
+ margin-top: 19.5px;
5412
+ margin-bottom: 19.5px
5413
+ }
5414
+
5415
+ @media (min-width: 768px) {
5416
+ .navbar-text {
5417
+ float: left;
5418
+ margin-left: 15px;
5419
+ margin-right: 15px
5420
+ }
5421
+ }
5422
+
5423
+ @media (min-width: 768px) {
5424
+ .navbar-left {
5425
+ float: left !important
5426
+ }
5427
+ .navbar-right {
5428
+ float: right !important;
5429
+ margin-right: -15px
5430
+ }
5431
+ .navbar-right~.navbar-right {
5432
+ margin-right: 0
5433
+ }
5434
+ }
5435
+
5436
+ .navbar-default {
5437
+ background-color: #2c3e50;
5438
+ border-color: transparent
5439
+ }
5440
+
5441
+ .navbar-default .navbar-brand {
5442
+ color: #ffffff
5443
+ }
5444
+
5445
+ .navbar-default .navbar-brand:hover,
5446
+ .navbar-default .navbar-brand:focus {
5447
+ color: #18bc9c;
5448
+ background-color: transparent
5449
+ }
5450
+
5451
+ .navbar-default .navbar-text {
5452
+ color: #777777
5453
+ }
5454
+
5455
+ .navbar-default .navbar-nav>li>a {
5456
+ color: #ffffff
5457
+ }
5458
+
5459
+ .navbar-default .navbar-nav>li>a:hover,
5460
+ .navbar-default .navbar-nav>li>a:focus {
5461
+ color: #18bc9c;
5462
+ background-color: transparent
5463
+ }
5464
+
5465
+ .navbar-default .navbar-nav>.active>a,
5466
+ .navbar-default .navbar-nav>.active>a:hover,
5467
+ .navbar-default .navbar-nav>.active>a:focus {
5468
+ color: #ffffff;
5469
+ background-color: #1a242f
5470
+ }
5471
+
5472
+ .navbar-default .navbar-nav>.disabled>a,
5473
+ .navbar-default .navbar-nav>.disabled>a:hover,
5474
+ .navbar-default .navbar-nav>.disabled>a:focus {
5475
+ color: #cccccc;
5476
+ background-color: transparent
5477
+ }
5478
+
5479
+ .navbar-default .navbar-toggle {
5480
+ border-color: #1a242f
5481
+ }
5482
+
5483
+ .navbar-default .navbar-toggle:hover,
5484
+ .navbar-default .navbar-toggle:focus {
5485
+ background-color: #1a242f
5486
+ }
5487
+
5488
+ .navbar-default .navbar-toggle .icon-bar {
5489
+ background-color: #ffffff
5490
+ }
5491
+
5492
+ .navbar-default .navbar-collapse,
5493
+ .navbar-default .navbar-form {
5494
+ border-color: transparent
5495
+ }
5496
+
5497
+ .navbar-default .navbar-nav>.open>a,
5498
+ .navbar-default .navbar-nav>.open>a:hover,
5499
+ .navbar-default .navbar-nav>.open>a:focus {
5500
+ background-color: #1a242f;
5501
+ color: #ffffff
5502
+ }
5503
+
5504
+ @media (max-width: 767px) {
5505
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a {
5506
+ color: #ffffff
5507
+ }
5508
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,
5509
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus {
5510
+ color: #18bc9c;
5511
+ background-color: transparent
5512
+ }
5513
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a,
5514
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,
5515
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus {
5516
+ color: #ffffff;
5517
+ background-color: #1a242f
5518
+ }
5519
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,
5520
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,
5521
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus {
5522
+ color: #cccccc;
5523
+ background-color: transparent
5524
+ }
5525
+ }
5526
+
5527
+ .navbar-default .navbar-link {
5528
+ color: #ffffff
5529
+ }
5530
+
5531
+ .navbar-default .navbar-link:hover {
5532
+ color: #18bc9c
5533
+ }
5534
+
5535
+ .navbar-default .btn-link {
5536
+ color: #ffffff
5537
+ }
5538
+
5539
+ .navbar-default .btn-link:hover,
5540
+ .navbar-default .btn-link:focus {
5541
+ color: #18bc9c
5542
+ }
5543
+
5544
+ .navbar-default .btn-link[disabled]:hover,
5545
+ fieldset[disabled] .navbar-default .btn-link:hover,
5546
+ .navbar-default .btn-link[disabled]:focus,
5547
+ fieldset[disabled] .navbar-default .btn-link:focus {
5548
+ color: #cccccc
5549
+ }
5550
+
5551
+ .navbar-inverse {
5552
+ background-color: #18bc9c;
5553
+ border-color: transparent
5554
+ }
5555
+
5556
+ .navbar-inverse .navbar-brand {
5557
+ color: #ffffff
5558
+ }
5559
+
5560
+ .navbar-inverse .navbar-brand:hover,
5561
+ .navbar-inverse .navbar-brand:focus {
5562
+ color: #2c3e50;
5563
+ background-color: transparent
5564
+ }
5565
+
5566
+ .navbar-inverse .navbar-text {
5567
+ color: #ffffff
5568
+ }
5569
+
5570
+ .navbar-inverse .navbar-nav>li>a {
5571
+ color: #ffffff
5572
+ }
5573
+
5574
+ .navbar-inverse .navbar-nav>li>a:hover,
5575
+ .navbar-inverse .navbar-nav>li>a:focus {
5576
+ color: #2c3e50;
5577
+ background-color: transparent
5578
+ }
5579
+
5580
+ .navbar-inverse .navbar-nav>.active>a,
5581
+ .navbar-inverse .navbar-nav>.active>a:hover,
5582
+ .navbar-inverse .navbar-nav>.active>a:focus {
5583
+ color: #ffffff;
5584
+ background-color: #15a589
5585
+ }
5586
+
5587
+ .navbar-inverse .navbar-nav>.disabled>a,
5588
+ .navbar-inverse .navbar-nav>.disabled>a:hover,
5589
+ .navbar-inverse .navbar-nav>.disabled>a:focus {
5590
+ color: #cccccc;
5591
+ background-color: transparent
5592
+ }
5593
+
5594
+ .navbar-inverse .navbar-toggle {
5595
+ border-color: #128f76
5596
+ }
5597
+
5598
+ .navbar-inverse .navbar-toggle:hover,
5599
+ .navbar-inverse .navbar-toggle:focus {
5600
+ background-color: #128f76
5601
+ }
5602
+
5603
+ .navbar-inverse .navbar-toggle .icon-bar {
5604
+ background-color: #ffffff
5605
+ }
5606
+
5607
+ .navbar-inverse .navbar-collapse,
5608
+ .navbar-inverse .navbar-form {
5609
+ border-color: #149c82
5610
+ }
5611
+
5612
+ .navbar-inverse .navbar-nav>.open>a,
5613
+ .navbar-inverse .navbar-nav>.open>a:hover,
5614
+ .navbar-inverse .navbar-nav>.open>a:focus {
5615
+ background-color: #15a589;
5616
+ color: #ffffff
5617
+ }
5618
+
5619
+ @media (max-width: 767px) {
5620
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header {
5621
+ border-color: transparent
5622
+ }
5623
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
5624
+ background-color: transparent
5625
+ }
5626
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a {
5627
+ color: #ffffff
5628
+ }
5629
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,
5630
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus {
5631
+ color: #2c3e50;
5632
+ background-color: transparent
5633
+ }
5634
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,
5635
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,
5636
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus {
5637
+ color: #ffffff;
5638
+ background-color: #15a589
5639
+ }
5640
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,
5641
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,
5642
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus {
5643
+ color: #cccccc;
5644
+ background-color: transparent
5645
+ }
5646
+ }
5647
+
5648
+ .navbar-inverse .navbar-link {
5649
+ color: #ffffff
5650
+ }
5651
+
5652
+ .navbar-inverse .navbar-link:hover {
5653
+ color: #2c3e50
5654
+ }
5655
+
5656
+ .navbar-inverse .btn-link {
5657
+ color: #ffffff
5658
+ }
5659
+
5660
+ .navbar-inverse .btn-link:hover,
5661
+ .navbar-inverse .btn-link:focus {
5662
+ color: #2c3e50
5663
+ }
5664
+
5665
+ .navbar-inverse .btn-link[disabled]:hover,
5666
+ fieldset[disabled] .navbar-inverse .btn-link:hover,
5667
+ .navbar-inverse .btn-link[disabled]:focus,
5668
+ fieldset[disabled] .navbar-inverse .btn-link:focus {
5669
+ color: #cccccc
5670
+ }
5671
+
5672
+ .breadcrumb {
5673
+ padding: 8px 15px;
5674
+ margin-bottom: 21px;
5675
+ list-style: none;
5676
+ background-color: #ecf0f1;
5677
+ border-radius: 4px
5678
+ }
5679
+
5680
+ .breadcrumb>li {
5681
+ display: inline-block
5682
+ }
5683
+
5684
+ .breadcrumb>li+li:before {
5685
+ content: "/\00a0";
5686
+ padding: 0 5px;
5687
+ color: #cccccc
5688
+ }
5689
+
5690
+ .breadcrumb>.active {
5691
+ color: #95a5a6
5692
+ }
5693
+
5694
+ .pagination {
5695
+ display: inline-block;
5696
+ padding-left: 0;
5697
+ margin: 21px 0;
5698
+ border-radius: 4px
5699
+ }
5700
+
5701
+ .pagination>li {
5702
+ display: inline
5703
+ }
5704
+
5705
+ .pagination>li>a,
5706
+ .pagination>li>span {
5707
+ position: relative;
5708
+ float: left;
5709
+ padding: 10px 15px;
5710
+ line-height: 1.42857143;
5711
+ text-decoration: none;
5712
+ color: #ffffff;
5713
+ background-color: #18bc9c;
5714
+ border: 1px solid transparent;
5715
+ margin-left: -1px
5716
+ }
5717
+
5718
+ .pagination>li:first-child>a,
5719
+ .pagination>li:first-child>span {
5720
+ margin-left: 0;
5721
+ border-bottom-left-radius: 4px;
5722
+ border-top-left-radius: 4px
5723
+ }
5724
+
5725
+ .pagination>li:last-child>a,
5726
+ .pagination>li:last-child>span {
5727
+ border-bottom-right-radius: 4px;
5728
+ border-top-right-radius: 4px
5729
+ }
5730
+
5731
+ .pagination>li>a:hover,
5732
+ .pagination>li>span:hover,
5733
+ .pagination>li>a:focus,
5734
+ .pagination>li>span:focus {
5735
+ z-index: 3;
5736
+ color: #ffffff;
5737
+ background-color: #0f7864;
5738
+ border-color: transparent
5739
+ }
5740
+
5741
+ .pagination>.active>a,
5742
+ .pagination>.active>span,
5743
+ .pagination>.active>a:hover,
5744
+ .pagination>.active>span:hover,
5745
+ .pagination>.active>a:focus,
5746
+ .pagination>.active>span:focus {
5747
+ z-index: 2;
5748
+ color: #ffffff;
5749
+ background-color: #0f7864;
5750
+ border-color: transparent;
5751
+ cursor: default
5752
+ }
5753
+
5754
+ .pagination>.disabled>span,
5755
+ .pagination>.disabled>span:hover,
5756
+ .pagination>.disabled>span:focus,
5757
+ .pagination>.disabled>a,
5758
+ .pagination>.disabled>a:hover,
5759
+ .pagination>.disabled>a:focus {
5760
+ color: #ecf0f1;
5761
+ background-color: #3be6c4;
5762
+ border-color: transparent;
5763
+ cursor: not-allowed
5764
+ }
5765
+
5766
+ .pagination-lg>li>a,
5767
+ .pagination-lg>li>span {
5768
+ padding: 18px 27px;
5769
+ font-size: 19px;
5770
+ line-height: 1.3333333
5771
+ }
5772
+
5773
+ .pagination-lg>li:first-child>a,
5774
+ .pagination-lg>li:first-child>span {
5775
+ border-bottom-left-radius: 6px;
5776
+ border-top-left-radius: 6px
5777
+ }
5778
+
5779
+ .pagination-lg>li:last-child>a,
5780
+ .pagination-lg>li:last-child>span {
5781
+ border-bottom-right-radius: 6px;
5782
+ border-top-right-radius: 6px
5783
+ }
5784
+
5785
+ .pagination-sm>li>a,
5786
+ .pagination-sm>li>span {
5787
+ padding: 6px 9px;
5788
+ font-size: 13px;
5789
+ line-height: 1.5
5790
+ }
5791
+
5792
+ .pagination-sm>li:first-child>a,
5793
+ .pagination-sm>li:first-child>span {
5794
+ border-bottom-left-radius: 3px;
5795
+ border-top-left-radius: 3px
5796
+ }
5797
+
5798
+ .pagination-sm>li:last-child>a,
5799
+ .pagination-sm>li:last-child>span {
5800
+ border-bottom-right-radius: 3px;
5801
+ border-top-right-radius: 3px
5802
+ }
5803
+
5804
+ .pager {
5805
+ padding-left: 0;
5806
+ margin: 21px 0;
5807
+ list-style: none;
5808
+ text-align: center
5809
+ }
5810
+
5811
+ .pager li {
5812
+ display: inline
5813
+ }
5814
+
5815
+ .pager li>a,
5816
+ .pager li>span {
5817
+ display: inline-block;
5818
+ padding: 5px 14px;
5819
+ background-color: #18bc9c;
5820
+ border: 1px solid transparent;
5821
+ border-radius: 15px
5822
+ }
5823
+
5824
+ .pager li>a:hover,
5825
+ .pager li>a:focus {
5826
+ text-decoration: none;
5827
+ background-color: #0f7864
5828
+ }
5829
+
5830
+ .pager .next>a,
5831
+ .pager .next>span {
5832
+ float: right
5833
+ }
5834
+
5835
+ .pager .previous>a,
5836
+ .pager .previous>span {
5837
+ float: left
5838
+ }
5839
+
5840
+ .pager .disabled>a,
5841
+ .pager .disabled>a:hover,
5842
+ .pager .disabled>a:focus,
5843
+ .pager .disabled>span {
5844
+ color: #ffffff;
5845
+ background-color: #18bc9c;
5846
+ cursor: not-allowed
5847
+ }
5848
+
5849
+ .label {
5850
+ display: inline;
5851
+ padding: .2em .6em .3em;
5852
+ font-size: 75%;
5853
+ font-weight: bold;
5854
+ line-height: 1;
5855
+ color: #ffffff;
5856
+ text-align: center;
5857
+ white-space: nowrap;
5858
+ vertical-align: baseline;
5859
+ border-radius: .25em
5860
+ }
5861
+
5862
+ a.label:hover,
5863
+ a.label:focus {
5864
+ color: #ffffff;
5865
+ text-decoration: none;
5866
+ cursor: pointer
5867
+ }
5868
+
5869
+ .label:empty {
5870
+ display: none
5871
+ }
5872
+
5873
+ .btn .label {
5874
+ position: relative;
5875
+ top: -1px
5876
+ }
5877
+
5878
+ .label-default {
5879
+ background-color: #95a5a6
5880
+ }
5881
+
5882
+ .label-default[href]:hover,
5883
+ .label-default[href]:focus {
5884
+ background-color: #798d8f
5885
+ }
5886
+
5887
+ .label-primary {
5888
+ background-color: #2c3e50
5889
+ }
5890
+
5891
+ .label-primary[href]:hover,
5892
+ .label-primary[href]:focus {
5893
+ background-color: #1a242f
5894
+ }
5895
+
5896
+ .label-success {
5897
+ background-color: #18bc9c
5898
+ }
5899
+
5900
+ .label-success[href]:hover,
5901
+ .label-success[href]:focus {
5902
+ background-color: #128f76
5903
+ }
5904
+
5905
+ .label-info {
5906
+ background-color: #3498db
5907
+ }
5908
+
5909
+ .label-info[href]:hover,
5910
+ .label-info[href]:focus {
5911
+ background-color: #217dbb
5912
+ }
5913
+
5914
+ .label-warning {
5915
+ background-color: #f39c12
5916
+ }
5917
+
5918
+ .label-warning[href]:hover,
5919
+ .label-warning[href]:focus {
5920
+ background-color: #c87f0a
5921
+ }
5922
+
5923
+ .label-danger {
5924
+ background-color: #e74c3c
5925
+ }
5926
+
5927
+ .label-danger[href]:hover,
5928
+ .label-danger[href]:focus {
5929
+ background-color: #d62c1a
5930
+ }
5931
+
5932
+ .badge {
5933
+ display: inline-block;
5934
+ min-width: 10px;
5935
+ padding: 3px 7px;
5936
+ font-size: 13px;
5937
+ font-weight: bold;
5938
+ color: #ffffff;
5939
+ line-height: 1;
5940
+ vertical-align: middle;
5941
+ white-space: nowrap;
5942
+ text-align: center;
5943
+ background-color: #2c3e50;
5944
+ border-radius: 10px
5945
+ }
5946
+
5947
+ .badge:empty {
5948
+ display: none
5949
+ }
5950
+
5951
+ .btn .badge {
5952
+ position: relative;
5953
+ top: -1px
5954
+ }
5955
+
5956
+ .btn-xs .badge,
5957
+ .btn-group-xs>.btn .badge {
5958
+ top: 0;
5959
+ padding: 1px 5px
5960
+ }
5961
+
5962
+ a.badge:hover,
5963
+ a.badge:focus {
5964
+ color: #ffffff;
5965
+ text-decoration: none;
5966
+ cursor: pointer
5967
+ }
5968
+
5969
+ .list-group-item.active>.badge,
5970
+ .nav-pills>.active>a>.badge {
5971
+ color: #2c3e50;
5972
+ background-color: #ffffff
5973
+ }
5974
+
5975
+ .list-group-item>.badge {
5976
+ float: right
5977
+ }
5978
+
5979
+ .list-group-item>.badge+.badge {
5980
+ margin-right: 5px
5981
+ }
5982
+
5983
+ .nav-pills>li>a>.badge {
5984
+ margin-left: 3px
5985
+ }
5986
+
5987
+ .jumbotron {
5988
+ padding-top: 30px;
5989
+ padding-bottom: 30px;
5990
+ margin-bottom: 30px;
5991
+ color: inherit;
5992
+ background-color: #ecf0f1
5993
+ }
5994
+
5995
+ .jumbotron h1,
5996
+ .jumbotron .h1 {
5997
+ color: inherit
5998
+ }
5999
+
6000
+ .jumbotron p {
6001
+ margin-bottom: 15px;
6002
+ font-size: 23px;
6003
+ font-weight: 200
6004
+ }
6005
+
6006
+ .jumbotron>hr {
6007
+ border-top-color: #cfd9db
6008
+ }
6009
+
6010
+ .container .jumbotron,
6011
+ .container-fluid .jumbotron {
6012
+ border-radius: 6px
6013
+ }
6014
+
6015
+ .jumbotron .container {
6016
+ max-width: 100%
6017
+ }
6018
+
6019
+ @media screen and (min-width: 768px) {
6020
+ .jumbotron {
6021
+ padding-top: 48px;
6022
+ padding-bottom: 48px
6023
+ }
6024
+ .container .jumbotron,
6025
+ .container-fluid .jumbotron {
6026
+ padding-left: 60px;
6027
+ padding-right: 60px
6028
+ }
6029
+ .jumbotron h1,
6030
+ .jumbotron .h1 {
6031
+ font-size: 68px
6032
+ }
6033
+ }
6034
+
6035
+ .thumbnail {
6036
+ display: block;
6037
+ padding: 4px;
6038
+ margin-bottom: 21px;
6039
+ line-height: 1.42857143;
6040
+ background-color: #ffffff;
6041
+ border: 1px solid #ecf0f1;
6042
+ border-radius: 4px;
6043
+ -webkit-transition: border .2s ease-in-out;
6044
+ -o-transition: border .2s ease-in-out;
6045
+ transition: border .2s ease-in-out
6046
+ }
6047
+
6048
+ .thumbnail>img,
6049
+ .thumbnail a>img {
6050
+ margin-left: auto;
6051
+ margin-right: auto
6052
+ }
6053
+
6054
+ a.thumbnail:hover,
6055
+ a.thumbnail:focus,
6056
+ a.thumbnail.active {
6057
+ border-color: #18bc9c
6058
+ }
6059
+
6060
+ .thumbnail .caption {
6061
+ padding: 9px;
6062
+ color: #2c3e50
6063
+ }
6064
+
6065
+ .alert {
6066
+ padding: 10px;
6067
+ margin-bottom: 21px;
6068
+ }
6069
+
6070
+ .alert h4 {
6071
+ margin-top: 0;
6072
+ color: inherit
6073
+ }
6074
+
6075
+ .alert .alert-link {
6076
+ font-weight: bold
6077
+ }
6078
+
6079
+ .alert>p,
6080
+ .alert>ul {
6081
+ margin-bottom: 0
6082
+ }
6083
+
6084
+ .alert>p+p {
6085
+ margin-top: 5px
6086
+ }
6087
+
6088
+ .alert-dismissable,
6089
+ .alert-dismissible {
6090
+ padding-right: 35px
6091
+ }
6092
+
6093
+ .alert-dismissable .close,
6094
+ .alert-dismissible .close {
6095
+ position: relative;
6096
+ top: -2px;
6097
+ right: -21px;
6098
+ color: inherit
6099
+ }
6100
+
6101
+ .alert-success {
6102
+ background-color: #18bc9c;
6103
+ border-color: #18bc9c;
6104
+ color: #ffffff
6105
+ }
6106
+
6107
+ .alert-success hr {
6108
+ border-top-color: #15a589
6109
+ }
6110
+
6111
+ .alert-success .alert-link {
6112
+ color: #e6e6e6
6113
+ }
6114
+
6115
+ .alert-info {
6116
+ background-color: #3498db;
6117
+ border-color: #3498db;
6118
+ color: #ffffff
6119
+ }
6120
+
6121
+ .alert-info hr {
6122
+ border-top-color: #258cd1
6123
+ }
6124
+
6125
+ .alert-info .alert-link {
6126
+ color: #e6e6e6
6127
+ }
6128
+
6129
+ .alert-warning {
6130
+ background-color: #f39c12;
6131
+ border-color: #f39c12;
6132
+ color: #ffffff
6133
+ }
6134
+
6135
+ .alert-warning hr {
6136
+ border-top-color: #e08e0b
6137
+ }
6138
+
6139
+ .alert-warning .alert-link {
6140
+ color: #e6e6e6
6141
+ }
6142
+
6143
+ .alert-danger {
6144
+ background-color: #e74c3c;
6145
+ border-color: #e74c3c;
6146
+ color: #ffffff
6147
+ }
6148
+
6149
+ .alert-danger hr {
6150
+ border-top-color: #e43725
6151
+ }
6152
+
6153
+ .alert-danger .alert-link {
6154
+ color: #e6e6e6
6155
+ }
6156
+
6157
+ @-webkit-keyframes progress-bar-stripes {
6158
+ from {
6159
+ background-position: 40px 0
6160
+ }
6161
+ to {
6162
+ background-position: 0 0
6163
+ }
6164
+ }
6165
+
6166
+ @-o-keyframes progress-bar-stripes {
6167
+ from {
6168
+ background-position: 40px 0
6169
+ }
6170
+ to {
6171
+ background-position: 0 0
6172
+ }
6173
+ }
6174
+
6175
+ @keyframes progress-bar-stripes {
6176
+ from {
6177
+ background-position: 40px 0
6178
+ }
6179
+ to {
6180
+ background-position: 0 0
6181
+ }
6182
+ }
6183
+
6184
+ .progress {
6185
+ overflow: hidden;
6186
+ height: 21px;
6187
+ margin-bottom: 21px;
6188
+ background-color: #ecf0f1;
6189
+ border-radius: 4px;
6190
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
6191
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1)
6192
+ }
6193
+
6194
+ .progress-bar {
6195
+ float: left;
6196
+ width: 0%;
6197
+ height: 100%;
6198
+ font-size: 13px;
6199
+ line-height: 21px;
6200
+ color: #ffffff;
6201
+ text-align: center;
6202
+ background-color: #2c3e50;
6203
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
6204
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
6205
+ -webkit-transition: width 0.6s ease;
6206
+ -o-transition: width 0.6s ease;
6207
+ transition: width 0.6s ease
6208
+ }
6209
+
6210
+ .progress-striped .progress-bar,
6211
+ .progress-bar-striped {
6212
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6213
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6214
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6215
+ -webkit-background-size: 40px 40px;
6216
+ background-size: 40px 40px
6217
+ }
6218
+
6219
+ .progress.active .progress-bar,
6220
+ .progress-bar.active {
6221
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
6222
+ -o-animation: progress-bar-stripes 2s linear infinite;
6223
+ animation: progress-bar-stripes 2s linear infinite
6224
+ }
6225
+
6226
+ .progress-bar-success {
6227
+ background-color: #18bc9c
6228
+ }
6229
+
6230
+ .progress-striped .progress-bar-success {
6231
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6232
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6233
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
6234
+ }
6235
+
6236
+ .progress-bar-info {
6237
+ background-color: #3498db
6238
+ }
6239
+
6240
+ .progress-striped .progress-bar-info {
6241
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6242
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6243
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
6244
+ }
6245
+
6246
+ .progress-bar-warning {
6247
+ background-color: #f39c12
6248
+ }
6249
+
6250
+ .progress-striped .progress-bar-warning {
6251
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6252
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6253
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
6254
+ }
6255
+
6256
+ .progress-bar-danger {
6257
+ background-color: #e74c3c
6258
+ }
6259
+
6260
+ .progress-striped .progress-bar-danger {
6261
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6262
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
6263
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
6264
+ }
6265
+
6266
+ .media {
6267
+ margin-top: 15px
6268
+ }
6269
+
6270
+ .media:first-child {
6271
+ margin-top: 0
6272
+ }
6273
+
6274
+ .media,
6275
+ .media-body {
6276
+ zoom: 1;
6277
+ overflow: hidden
6278
+ }
6279
+
6280
+ .media-body {
6281
+ width: 10000px
6282
+ }
6283
+
6284
+ .media-object {
6285
+ display: block
6286
+ }
6287
+
6288
+ .media-object.img-thumbnail {
6289
+ max-width: none
6290
+ }
6291
+
6292
+ .media-right,
6293
+ .media>.pull-right {
6294
+ padding-left: 10px
6295
+ }
6296
+
6297
+ .media-left,
6298
+ .media>.pull-left {
6299
+ padding-right: 10px
6300
+ }
6301
+
6302
+ .media-left,
6303
+ .media-right,
6304
+ .media-body {
6305
+ display: table-cell;
6306
+ vertical-align: top
6307
+ }
6308
+
6309
+ .media-middle {
6310
+ vertical-align: middle
6311
+ }
6312
+
6313
+ .media-bottom {
6314
+ vertical-align: bottom
6315
+ }
6316
+
6317
+ .media-heading {
6318
+ margin-top: 0;
6319
+ margin-bottom: 5px
6320
+ }
6321
+
6322
+ .media-list {
6323
+ padding-left: 0;
6324
+ list-style: none
6325
+ }
6326
+
6327
+ .list-group {
6328
+ margin-bottom: 20px;
6329
+ padding-left: 0
6330
+ }
6331
+
6332
+ .list-group-item {
6333
+ position: relative;
6334
+ display: block;
6335
+ padding: 10px 15px;
6336
+ margin-bottom: -1px;
6337
+ background-color: #ffffff;
6338
+ border: 1px solid #ecf0f1
6339
+ }
6340
+
6341
+ .list-group-item:first-child {
6342
+ border-top-right-radius: 4px;
6343
+ border-top-left-radius: 4px
6344
+ }
6345
+
6346
+ .list-group-item:last-child {
6347
+ margin-bottom: 0;
6348
+ border-bottom-right-radius: 4px;
6349
+ border-bottom-left-radius: 4px
6350
+ }
6351
+
6352
+ a.list-group-item,
6353
+ button.list-group-item {
6354
+ color: #555555
6355
+ }
6356
+
6357
+ a.list-group-item .list-group-item-heading,
6358
+ button.list-group-item .list-group-item-heading {
6359
+ color: #333333
6360
+ }
6361
+
6362
+ a.list-group-item:hover,
6363
+ button.list-group-item:hover,
6364
+ a.list-group-item:focus,
6365
+ button.list-group-item:focus {
6366
+ text-decoration: none;
6367
+ color: #555555;
6368
+ background-color: #ecf0f1
6369
+ }
6370
+
6371
+ button.list-group-item {
6372
+ width: 100%;
6373
+ text-align: left
6374
+ }
6375
+
6376
+ .list-group-item.disabled,
6377
+ .list-group-item.disabled:hover,
6378
+ .list-group-item.disabled:focus {
6379
+ background-color: #ecf0f1;
6380
+ color: #b4bcc2;
6381
+ cursor: not-allowed
6382
+ }
6383
+
6384
+ .list-group-item.disabled .list-group-item-heading,
6385
+ .list-group-item.disabled:hover .list-group-item-heading,
6386
+ .list-group-item.disabled:focus .list-group-item-heading {
6387
+ color: inherit
6388
+ }
6389
+
6390
+ .list-group-item.disabled .list-group-item-text,
6391
+ .list-group-item.disabled:hover .list-group-item-text,
6392
+ .list-group-item.disabled:focus .list-group-item-text {
6393
+ color: #b4bcc2
6394
+ }
6395
+
6396
+ .list-group-item.active,
6397
+ .list-group-item.active:hover,
6398
+ .list-group-item.active:focus {
6399
+ z-index: 2;
6400
+ color: #ffffff;
6401
+ background-color: #2c3e50;
6402
+ border-color: #2c3e50
6403
+ }
6404
+
6405
+ .list-group-item.active .list-group-item-heading,
6406
+ .list-group-item.active:hover .list-group-item-heading,
6407
+ .list-group-item.active:focus .list-group-item-heading,
6408
+ .list-group-item.active .list-group-item-heading>small,
6409
+ .list-group-item.active:hover .list-group-item-heading>small,
6410
+ .list-group-item.active:focus .list-group-item-heading>small,
6411
+ .list-group-item.active .list-group-item-heading>.small,
6412
+ .list-group-item.active:hover .list-group-item-heading>.small,
6413
+ .list-group-item.active:focus .list-group-item-heading>.small {
6414
+ color: inherit
6415
+ }
6416
+
6417
+ .list-group-item.active .list-group-item-text,
6418
+ .list-group-item.active:hover .list-group-item-text,
6419
+ .list-group-item.active:focus .list-group-item-text {
6420
+ color: #8aa4be
6421
+ }
6422
+
6423
+ .list-group-item-success {
6424
+ color: #ffffff;
6425
+ background-color: #18bc9c
6426
+ }
6427
+
6428
+ a.list-group-item-success,
6429
+ button.list-group-item-success {
6430
+ color: #ffffff
6431
+ }
6432
+
6433
+ a.list-group-item-success .list-group-item-heading,
6434
+ button.list-group-item-success .list-group-item-heading {
6435
+ color: inherit
6436
+ }
6437
+
6438
+ a.list-group-item-success:hover,
6439
+ button.list-group-item-success:hover,
6440
+ a.list-group-item-success:focus,
6441
+ button.list-group-item-success:focus {
6442
+ color: #ffffff;
6443
+ background-color: #15a589
6444
+ }
6445
+
6446
+ a.list-group-item-success.active,
6447
+ button.list-group-item-success.active,
6448
+ a.list-group-item-success.active:hover,
6449
+ button.list-group-item-success.active:hover,
6450
+ a.list-group-item-success.active:focus,
6451
+ button.list-group-item-success.active:focus {
6452
+ color: #fff;
6453
+ background-color: #ffffff;
6454
+ border-color: #ffffff
6455
+ }
6456
+
6457
+ .list-group-item-info {
6458
+ color: #ffffff;
6459
+ background-color: #3498db
6460
+ }
6461
+
6462
+ a.list-group-item-info,
6463
+ button.list-group-item-info {
6464
+ color: #ffffff
6465
+ }
6466
+
6467
+ a.list-group-item-info .list-group-item-heading,
6468
+ button.list-group-item-info .list-group-item-heading {
6469
+ color: inherit
6470
+ }
6471
+
6472
+ a.list-group-item-info:hover,
6473
+ button.list-group-item-info:hover,
6474
+ a.list-group-item-info:focus,
6475
+ button.list-group-item-info:focus {
6476
+ color: #ffffff;
6477
+ background-color: #258cd1
6478
+ }
6479
+
6480
+ a.list-group-item-info.active,
6481
+ button.list-group-item-info.active,
6482
+ a.list-group-item-info.active:hover,
6483
+ button.list-group-item-info.active:hover,
6484
+ a.list-group-item-info.active:focus,
6485
+ button.list-group-item-info.active:focus {
6486
+ color: #fff;
6487
+ background-color: #ffffff;
6488
+ border-color: #ffffff
6489
+ }
6490
+
6491
+ .list-group-item-warning {
6492
+ color: #ffffff;
6493
+ background-color: #f39c12
6494
+ }
6495
+
6496
+ a.list-group-item-warning,
6497
+ button.list-group-item-warning {
6498
+ color: #ffffff
6499
+ }
6500
+
6501
+ a.list-group-item-warning .list-group-item-heading,
6502
+ button.list-group-item-warning .list-group-item-heading {
6503
+ color: inherit
6504
+ }
6505
+
6506
+ a.list-group-item-warning:hover,
6507
+ button.list-group-item-warning:hover,
6508
+ a.list-group-item-warning:focus,
6509
+ button.list-group-item-warning:focus {
6510
+ color: #ffffff;
6511
+ background-color: #e08e0b
6512
+ }
6513
+
6514
+ a.list-group-item-warning.active,
6515
+ button.list-group-item-warning.active,
6516
+ a.list-group-item-warning.active:hover,
6517
+ button.list-group-item-warning.active:hover,
6518
+ a.list-group-item-warning.active:focus,
6519
+ button.list-group-item-warning.active:focus {
6520
+ color: #fff;
6521
+ background-color: #ffffff;
6522
+ border-color: #ffffff
6523
+ }
6524
+
6525
+ .list-group-item-danger {
6526
+ color: #ffffff;
6527
+ background-color: #e74c3c
6528
+ }
6529
+
6530
+ a.list-group-item-danger,
6531
+ button.list-group-item-danger {
6532
+ color: #ffffff
6533
+ }
6534
+
6535
+ a.list-group-item-danger .list-group-item-heading,
6536
+ button.list-group-item-danger .list-group-item-heading {
6537
+ color: inherit
6538
+ }
6539
+
6540
+ a.list-group-item-danger:hover,
6541
+ button.list-group-item-danger:hover,
6542
+ a.list-group-item-danger:focus,
6543
+ button.list-group-item-danger:focus {
6544
+ color: #ffffff;
6545
+ background-color: #e43725
6546
+ }
6547
+
6548
+ a.list-group-item-danger.active,
6549
+ button.list-group-item-danger.active,
6550
+ a.list-group-item-danger.active:hover,
6551
+ button.list-group-item-danger.active:hover,
6552
+ a.list-group-item-danger.active:focus,
6553
+ button.list-group-item-danger.active:focus {
6554
+ color: #fff;
6555
+ background-color: #ffffff;
6556
+ border-color: #ffffff
6557
+ }
6558
+
6559
+ .list-group-item-heading {
6560
+ margin-top: 0;
6561
+ margin-bottom: 5px
6562
+ }
6563
+
6564
+ .list-group-item-text {
6565
+ margin-bottom: 0;
6566
+ line-height: 1.3
6567
+ }
6568
+
6569
+ .panel {
6570
+ margin-bottom: 21px;
6571
+ background-color: #ffffff;
6572
+ border: 1px solid transparent;
6573
+ border-radius: 4px;
6574
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
6575
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05)
6576
+ }
6577
+
6578
+ .panel-body {
6579
+ padding: 15px
6580
+ }
6581
+
6582
+ .panel-heading {
6583
+ padding: 10px 15px;
6584
+ border-bottom: 1px solid transparent;
6585
+ border-top-right-radius: 3px;
6586
+ border-top-left-radius: 3px
6587
+ }
6588
+
6589
+ .panel-heading>.dropdown .dropdown-toggle {
6590
+ color: inherit
6591
+ }
6592
+
6593
+ .panel-title {
6594
+ margin-top: 0;
6595
+ margin-bottom: 0;
6596
+ font-size: 17px;
6597
+ color: inherit
6598
+ }
6599
+
6600
+ .panel-title>a,
6601
+ .panel-title>small,
6602
+ .panel-title>.small,
6603
+ .panel-title>small>a,
6604
+ .panel-title>.small>a {
6605
+ color: inherit
6606
+ }
6607
+
6608
+ .panel-footer {
6609
+ padding: 10px 15px;
6610
+ background-color: #ecf0f1;
6611
+ border-top: 1px solid #ecf0f1;
6612
+ border-bottom-right-radius: 3px;
6613
+ border-bottom-left-radius: 3px
6614
+ }
6615
+
6616
+ .panel>.list-group,
6617
+ .panel>.panel-collapse>.list-group {
6618
+ margin-bottom: 0
6619
+ }
6620
+
6621
+ .panel>.list-group .list-group-item,
6622
+ .panel>.panel-collapse>.list-group .list-group-item {
6623
+ border-width: 1px 0;
6624
+ border-radius: 0
6625
+ }
6626
+
6627
+ .panel>.list-group:first-child .list-group-item:first-child,
6628
+ .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child {
6629
+ border-top: 0;
6630
+ border-top-right-radius: 3px;
6631
+ border-top-left-radius: 3px
6632
+ }
6633
+
6634
+ .panel>.list-group:last-child .list-group-item:last-child,
6635
+ .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child {
6636
+ border-bottom: 0;
6637
+ border-bottom-right-radius: 3px;
6638
+ border-bottom-left-radius: 3px
6639
+ }
6640
+
6641
+ .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child {
6642
+ border-top-right-radius: 0;
6643
+ border-top-left-radius: 0
6644
+ }
6645
+
6646
+ .panel-heading+.list-group .list-group-item:first-child {
6647
+ border-top-width: 0
6648
+ }
6649
+
6650
+ .list-group+.panel-footer {
6651
+ border-top-width: 0
6652
+ }
6653
+
6654
+ .panel>.table,
6655
+ .panel>.table-responsive>.table,
6656
+ .panel>.panel-collapse>.table {
6657
+ margin-bottom: 0
6658
+ }
6659
+
6660
+ .panel>.table caption,
6661
+ .panel>.table-responsive>.table caption,
6662
+ .panel>.panel-collapse>.table caption {
6663
+ padding-left: 15px;
6664
+ padding-right: 15px
6665
+ }
6666
+
6667
+ .panel>.table:first-child,
6668
+ .panel>.table-responsive:first-child>.table:first-child {
6669
+ border-top-right-radius: 3px;
6670
+ border-top-left-radius: 3px
6671
+ }
6672
+
6673
+ .panel>.table:first-child>thead:first-child>tr:first-child,
6674
+ .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,
6675
+ .panel>.table:first-child>tbody:first-child>tr:first-child,
6676
+ .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child {
6677
+ border-top-left-radius: 3px;
6678
+ border-top-right-radius: 3px
6679
+ }
6680
+
6681
+ .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,
6682
+ .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,
6683
+ .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,
6684
+ .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,
6685
+ .panel>.table:first-child>thead:first-child>tr:first-child th:first-child,
6686
+ .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,
6687
+ .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,
6688
+ .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child {
6689
+ border-top-left-radius: 3px
6690
+ }
6691
+
6692
+ .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,
6693
+ .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,
6694
+ .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,
6695
+ .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,
6696
+ .panel>.table:first-child>thead:first-child>tr:first-child th:last-child,
6697
+ .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,
6698
+ .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,
6699
+ .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child {
6700
+ border-top-right-radius: 3px
6701
+ }
6702
+
6703
+ .panel>.table:last-child,
6704
+ .panel>.table-responsive:last-child>.table:last-child {
6705
+ border-bottom-right-radius: 3px;
6706
+ border-bottom-left-radius: 3px
6707
+ }
6708
+
6709
+ .panel>.table:last-child>tbody:last-child>tr:last-child,
6710
+ .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,
6711
+ .panel>.table:last-child>tfoot:last-child>tr:last-child,
6712
+ .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child {
6713
+ border-bottom-left-radius: 3px;
6714
+ border-bottom-right-radius: 3px
6715
+ }
6716
+
6717
+ .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,
6718
+ .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,
6719
+ .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,
6720
+ .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,
6721
+ .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,
6722
+ .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,
6723
+ .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,
6724
+ .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child {
6725
+ border-bottom-left-radius: 3px
6726
+ }
6727
+
6728
+ .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,
6729
+ .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,
6730
+ .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,
6731
+ .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,
6732
+ .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,
6733
+ .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,
6734
+ .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,
6735
+ .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child {
6736
+ border-bottom-right-radius: 3px
6737
+ }
6738
+
6739
+ .panel>.panel-body+.table,
6740
+ .panel>.panel-body+.table-responsive,
6741
+ .panel>.table+.panel-body,
6742
+ .panel>.table-responsive+.panel-body {
6743
+ border-top: 1px solid #ecf0f1
6744
+ }
6745
+
6746
+ .panel>.table>tbody:first-child>tr:first-child th,
6747
+ .panel>.table>tbody:first-child>tr:first-child td {
6748
+ border-top: 0
6749
+ }
6750
+
6751
+ .panel>.table-bordered,
6752
+ .panel>.table-responsive>.table-bordered {
6753
+ border: 0
6754
+ }
6755
+
6756
+ .panel>.table-bordered>thead>tr>th:first-child,
6757
+ .panel>.table-responsive>.table-bordered>thead>tr>th:first-child,
6758
+ .panel>.table-bordered>tbody>tr>th:first-child,
6759
+ .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,
6760
+ .panel>.table-bordered>tfoot>tr>th:first-child,
6761
+ .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,
6762
+ .panel>.table-bordered>thead>tr>td:first-child,
6763
+ .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,
6764
+ .panel>.table-bordered>tbody>tr>td:first-child,
6765
+ .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,
6766
+ .panel>.table-bordered>tfoot>tr>td:first-child,
6767
+ .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child {
6768
+ border-left: 0
6769
+ }
6770
+
6771
+ .panel>.table-bordered>thead>tr>th:last-child,
6772
+ .panel>.table-responsive>.table-bordered>thead>tr>th:last-child,
6773
+ .panel>.table-bordered>tbody>tr>th:last-child,
6774
+ .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,
6775
+ .panel>.table-bordered>tfoot>tr>th:last-child,
6776
+ .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,
6777
+ .panel>.table-bordered>thead>tr>td:last-child,
6778
+ .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,
6779
+ .panel>.table-bordered>tbody>tr>td:last-child,
6780
+ .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,
6781
+ .panel>.table-bordered>tfoot>tr>td:last-child,
6782
+ .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child {
6783
+ border-right: 0
6784
+ }
6785
+
6786
+ .panel>.table-bordered>thead>tr:first-child>td,
6787
+ .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,
6788
+ .panel>.table-bordered>tbody>tr:first-child>td,
6789
+ .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,
6790
+ .panel>.table-bordered>thead>tr:first-child>th,
6791
+ .panel>.table-responsive>.table-bordered>thead>tr:first-child>th,
6792
+ .panel>.table-bordered>tbody>tr:first-child>th,
6793
+ .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th {
6794
+ border-bottom: 0
6795
+ }
6796
+
6797
+ .panel>.table-bordered>tbody>tr:last-child>td,
6798
+ .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,
6799
+ .panel>.table-bordered>tfoot>tr:last-child>td,
6800
+ .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,
6801
+ .panel>.table-bordered>tbody>tr:last-child>th,
6802
+ .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,
6803
+ .panel>.table-bordered>tfoot>tr:last-child>th,
6804
+ .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th {
6805
+ border-bottom: 0
6806
+ }
6807
+
6808
+ .panel>.table-responsive {
6809
+ border: 0;
6810
+ margin-bottom: 0
6811
+ }
6812
+
6813
+ .panel-group {
6814
+ margin-bottom: 21px
6815
+ }
6816
+
6817
+ .panel-group .panel {
6818
+ margin-bottom: 0;
6819
+ border-radius: 4px
6820
+ }
6821
+
6822
+ .panel-group .panel+.panel {
6823
+ margin-top: 5px
6824
+ }
6825
+
6826
+ .panel-group .panel-heading {
6827
+ border-bottom: 0
6828
+ }
6829
+
6830
+ .panel-group .panel-heading+.panel-collapse>.panel-body,
6831
+ .panel-group .panel-heading+.panel-collapse>.list-group {
6832
+ border-top: 1px solid #ecf0f1
6833
+ }
6834
+
6835
+ .panel-group .panel-footer {
6836
+ border-top: 0
6837
+ }
6838
+
6839
+ .panel-group .panel-footer+.panel-collapse .panel-body {
6840
+ border-bottom: 1px solid #ecf0f1
6841
+ }
6842
+
6843
+ .panel-default {
6844
+ border-color: #ecf0f1
6845
+ }
6846
+
6847
+ .panel-default>.panel-heading {
6848
+ color: #2c3e50;
6849
+ background-color: #ecf0f1;
6850
+ border-color: #ecf0f1
6851
+ }
6852
+
6853
+ .panel-default>.panel-heading+.panel-collapse>.panel-body {
6854
+ border-top-color: #ecf0f1
6855
+ }
6856
+
6857
+ .panel-default>.panel-heading .badge {
6858
+ color: #ecf0f1;
6859
+ background-color: #2c3e50
6860
+ }
6861
+
6862
+ .panel-default>.panel-footer+.panel-collapse>.panel-body {
6863
+ border-bottom-color: #ecf0f1
6864
+ }
6865
+
6866
+ .panel-primary {
6867
+ border-color: #2c3e50
6868
+ }
6869
+
6870
+ .panel-primary>.panel-heading {
6871
+ color: #ffffff;
6872
+ background-color: #2c3e50;
6873
+ border-color: #2c3e50
6874
+ }
6875
+
6876
+ .panel-primary>.panel-heading+.panel-collapse>.panel-body {
6877
+ border-top-color: #2c3e50
6878
+ }
6879
+
6880
+ .panel-primary>.panel-heading .badge {
6881
+ color: #2c3e50;
6882
+ background-color: #ffffff
6883
+ }
6884
+
6885
+ .panel-primary>.panel-footer+.panel-collapse>.panel-body {
6886
+ border-bottom-color: #2c3e50
6887
+ }
6888
+
6889
+ .panel-success {
6890
+ border-color: #18bc9c
6891
+ }
6892
+
6893
+ .panel-success>.panel-heading {
6894
+ color: #ffffff;
6895
+ background-color: #18bc9c;
6896
+ border-color: #18bc9c
6897
+ }
6898
+
6899
+ .panel-success>.panel-heading+.panel-collapse>.panel-body {
6900
+ border-top-color: #18bc9c
6901
+ }
6902
+
6903
+ .panel-success>.panel-heading .badge {
6904
+ color: #18bc9c;
6905
+ background-color: #ffffff
6906
+ }
6907
+
6908
+ .panel-success>.panel-footer+.panel-collapse>.panel-body {
6909
+ border-bottom-color: #18bc9c
6910
+ }
6911
+
6912
+ .panel-info {
6913
+ border-color: #3498db
6914
+ }
6915
+
6916
+ .panel-info>.panel-heading {
6917
+ color: #ffffff;
6918
+ background-color: #3498db;
6919
+ border-color: #3498db
6920
+ }
6921
+
6922
+ .panel-info>.panel-heading+.panel-collapse>.panel-body {
6923
+ border-top-color: #3498db
6924
+ }
6925
+
6926
+ .panel-info>.panel-heading .badge {
6927
+ color: #3498db;
6928
+ background-color: #ffffff
6929
+ }
6930
+
6931
+ .panel-info>.panel-footer+.panel-collapse>.panel-body {
6932
+ border-bottom-color: #3498db
6933
+ }
6934
+
6935
+ .panel-warning {
6936
+ border-color: #f39c12
6937
+ }
6938
+
6939
+ .panel-warning>.panel-heading {
6940
+ color: #ffffff;
6941
+ background-color: #f39c12;
6942
+ border-color: #f39c12
6943
+ }
6944
+
6945
+ .panel-warning>.panel-heading+.panel-collapse>.panel-body {
6946
+ border-top-color: #f39c12
6947
+ }
6948
+
6949
+ .panel-warning>.panel-heading .badge {
6950
+ color: #f39c12;
6951
+ background-color: #ffffff
6952
+ }
6953
+
6954
+ .panel-warning>.panel-footer+.panel-collapse>.panel-body {
6955
+ border-bottom-color: #f39c12
6956
+ }
6957
+
6958
+ .panel-danger {
6959
+ border-color: #e74c3c
6960
+ }
6961
+
6962
+ .panel-danger>.panel-heading {
6963
+ color: #ffffff;
6964
+ background-color: #e74c3c;
6965
+ border-color: #e74c3c
6966
+ }
6967
+
6968
+ .panel-danger>.panel-heading+.panel-collapse>.panel-body {
6969
+ border-top-color: #e74c3c
6970
+ }
6971
+
6972
+ .panel-danger>.panel-heading .badge {
6973
+ color: #e74c3c;
6974
+ background-color: #ffffff
6975
+ }
6976
+
6977
+ .panel-danger>.panel-footer+.panel-collapse>.panel-body {
6978
+ border-bottom-color: #e74c3c
6979
+ }
6980
+
6981
+ .embed-responsive {
6982
+ position: relative;
6983
+ display: block;
6984
+ height: 0;
6985
+ padding: 0;
6986
+ overflow: hidden
6987
+ }
6988
+
6989
+ .embed-responsive .embed-responsive-item,
6990
+ .embed-responsive iframe,
6991
+ .embed-responsive embed,
6992
+ .embed-responsive object,
6993
+ .embed-responsive video {
6994
+ position: absolute;
6995
+ top: 0;
6996
+ left: 0;
6997
+ bottom: 0;
6998
+ height: 100%;
6999
+ width: 100%;
7000
+ border: 0
7001
+ }
7002
+
7003
+ .embed-responsive-16by9 {
7004
+ padding-bottom: 56.25%
7005
+ }
7006
+
7007
+ .embed-responsive-4by3 {
7008
+ padding-bottom: 75%
7009
+ }
7010
+
7011
+ .well {
7012
+ min-height: 20px;
7013
+ padding: 19px;
7014
+ margin-bottom: 20px;
7015
+ background-color: #ecf0f1;
7016
+ border: 1px solid transparent;
7017
+ border-radius: 4px;
7018
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
7019
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05)
7020
+ }
7021
+
7022
+ .well blockquote {
7023
+ border-color: #ddd;
7024
+ border-color: rgba(0, 0, 0, 0.15)
7025
+ }
7026
+
7027
+ .well-lg {
7028
+ padding: 24px;
7029
+ border-radius: 6px
7030
+ }
7031
+
7032
+ .well-sm {
7033
+ padding: 9px;
7034
+ border-radius: 3px
7035
+ }
7036
+
7037
+ .close {
7038
+ float: right;
7039
+ font-size: 22.5px;
7040
+ font-weight: bold;
7041
+ line-height: 1;
7042
+ color: #000000;
7043
+ text-shadow: none;
7044
+ opacity: 0.2;
7045
+ filter: alpha(opacity=20)
7046
+ }
7047
+
7048
+ .close:hover,
7049
+ .close:focus {
7050
+ color: #000000;
7051
+ text-decoration: none;
7052
+ cursor: pointer;
7053
+ opacity: 0.5;
7054
+ filter: alpha(opacity=50)
7055
+ }
7056
+
7057
+ button.close {
7058
+ padding: 0;
7059
+ cursor: pointer;
7060
+ background: transparent;
7061
+ border: 0;
7062
+ -webkit-appearance: none
7063
+ }
7064
+
7065
+ .modal-open {
7066
+ overflow: hidden
7067
+ }
7068
+
7069
+ .modal {
7070
+ display: none;
7071
+ overflow: hidden;
7072
+ position: fixed;
7073
+ top: 0;
7074
+ right: 0;
7075
+ bottom: 0;
7076
+ left: 0;
7077
+ z-index: 1050;
7078
+ -webkit-overflow-scrolling: touch;
7079
+ outline: 0
7080
+ }
7081
+
7082
+ .modal.fade .modal-dialog {
7083
+ -webkit-transform: translate(0, -25%);
7084
+ -ms-transform: translate(0, -25%);
7085
+ -o-transform: translate(0, -25%);
7086
+ transform: translate(0, -25%);
7087
+ -webkit-transition: -webkit-transform .3s ease-out;
7088
+ -o-transition: -o-transform .3s ease-out;
7089
+ transition: transform .3s ease-out
7090
+ }
7091
+
7092
+ .modal.in .modal-dialog {
7093
+ -webkit-transform: translate(0, 0);
7094
+ -ms-transform: translate(0, 0);
7095
+ -o-transform: translate(0, 0);
7096
+ transform: translate(0, 0)
7097
+ }
7098
+
7099
+ .modal-open .modal {
7100
+ overflow-x: hidden;
7101
+ overflow-y: auto
7102
+ }
7103
+
7104
+ .modal-dialog {
7105
+ position: relative;
7106
+ width: auto;
7107
+ margin: 10px
7108
+ }
7109
+
7110
+ .modal-content {
7111
+ position: relative;
7112
+ background-color: #ffffff;
7113
+ border: 1px solid #999999;
7114
+ border: 1px solid rgba(0, 0, 0, 0.2);
7115
+ border-radius: 6px;
7116
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
7117
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
7118
+ -webkit-background-clip: padding-box;
7119
+ background-clip: padding-box;
7120
+ outline: 0
7121
+ }
7122
+
7123
+ .modal-backdrop {
7124
+ position: fixed;
7125
+ top: 0;
7126
+ right: 0;
7127
+ bottom: 0;
7128
+ left: 0;
7129
+ z-index: 1040;
7130
+ background-color: #000000
7131
+ }
7132
+
7133
+ .modal-backdrop.fade {
7134
+ opacity: 0;
7135
+ filter: alpha(opacity=0)
7136
+ }
7137
+
7138
+ .modal-backdrop.in {
7139
+ opacity: 0.5;
7140
+ filter: alpha(opacity=50)
7141
+ }
7142
+
7143
+ .modal-header {
7144
+ padding: 15px;
7145
+ border-bottom: 1px solid #e5e5e5;
7146
+ min-height: 16.42857143px
7147
+ }
7148
+
7149
+ .modal-header .close {
7150
+ margin-top: -2px
7151
+ }
7152
+
7153
+ .modal-title {
7154
+ margin: 0;
7155
+ line-height: 1.42857143
7156
+ }
7157
+
7158
+ .modal-body {
7159
+ position: relative;
7160
+ padding: 20px
7161
+ }
7162
+
7163
+ .modal-footer {
7164
+ padding: 20px;
7165
+ text-align: right;
7166
+ border-top: 1px solid #e5e5e5
7167
+ }
7168
+
7169
+ .modal-footer .btn+.btn {
7170
+ margin-left: 5px;
7171
+ margin-bottom: 0
7172
+ }
7173
+
7174
+ .modal-footer .btn-group .btn+.btn {
7175
+ margin-left: -1px
7176
+ }
7177
+
7178
+ .modal-footer .btn-block+.btn-block {
7179
+ margin-left: 0
7180
+ }
7181
+
7182
+ .modal-scrollbar-measure {
7183
+ position: absolute;
7184
+ top: -9999px;
7185
+ width: 50px;
7186
+ height: 50px;
7187
+ overflow: scroll
7188
+ }
7189
+
7190
+ @media (min-width: 768px) {
7191
+ .modal-dialog {
7192
+ width: 600px;
7193
+ margin: 30px auto
7194
+ }
7195
+ .modal-content {
7196
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
7197
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5)
7198
+ }
7199
+ .modal-sm {
7200
+ width: 300px
7201
+ }
7202
+ }
7203
+
7204
+ @media (min-width: 992px) {
7205
+ .modal-lg {
7206
+ width: 900px
7207
+ }
7208
+ }
7209
+
7210
+ .tooltip {
7211
+ position: absolute;
7212
+ z-index: 1070;
7213
+ display: block;
7214
+ font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
7215
+ font-style: normal;
7216
+ font-weight: normal;
7217
+ letter-spacing: normal;
7218
+ line-break: auto;
7219
+ line-height: 1.42857143;
7220
+ text-align: left;
7221
+ text-align: start;
7222
+ text-decoration: none;
7223
+ text-shadow: none;
7224
+ text-transform: none;
7225
+ white-space: normal;
7226
+ word-break: normal;
7227
+ word-spacing: normal;
7228
+ word-wrap: normal;
7229
+ font-size: 13px;
7230
+ opacity: 0;
7231
+ filter: alpha(opacity=0)
7232
+ }
7233
+
7234
+ .tooltip.in {
7235
+ opacity: 0.9;
7236
+ filter: alpha(opacity=90)
7237
+ }
7238
+
7239
+ .tooltip.top {
7240
+ margin-top: -3px;
7241
+ padding: 5px 0
7242
+ }
7243
+
7244
+ .tooltip.right {
7245
+ margin-left: 3px;
7246
+ padding: 0 5px
7247
+ }
7248
+
7249
+ .tooltip.bottom {
7250
+ margin-top: 3px;
7251
+ padding: 5px 0
7252
+ }
7253
+
7254
+ .tooltip.left {
7255
+ margin-left: -3px;
7256
+ padding: 0 5px
7257
+ }
7258
+
7259
+ .tooltip-inner {
7260
+ max-width: 200px;
7261
+ padding: 3px 8px;
7262
+ color: #ffffff;
7263
+ text-align: center;
7264
+ background-color: #000000;
7265
+ border-radius: 4px
7266
+ }
7267
+
7268
+ .tooltip-arrow {
7269
+ position: absolute;
7270
+ width: 0;
7271
+ height: 0;
7272
+ border-color: transparent;
7273
+ border-style: solid
7274
+ }
7275
+
7276
+ .tooltip.top .tooltip-arrow {
7277
+ bottom: 0;
7278
+ left: 50%;
7279
+ margin-left: -5px;
7280
+ border-width: 5px 5px 0;
7281
+ border-top-color: #000000
7282
+ }
7283
+
7284
+ .tooltip.top-left .tooltip-arrow {
7285
+ bottom: 0;
7286
+ right: 5px;
7287
+ margin-bottom: -5px;
7288
+ border-width: 5px 5px 0;
7289
+ border-top-color: #000000
7290
+ }
7291
+
7292
+ .tooltip.top-right .tooltip-arrow {
7293
+ bottom: 0;
7294
+ left: 5px;
7295
+ margin-bottom: -5px;
7296
+ border-width: 5px 5px 0;
7297
+ border-top-color: #000000
7298
+ }
7299
+
7300
+ .tooltip.right .tooltip-arrow {
7301
+ top: 50%;
7302
+ left: 0;
7303
+ margin-top: -5px;
7304
+ border-width: 5px 5px 5px 0;
7305
+ border-right-color: #000000
7306
+ }
7307
+
7308
+ .tooltip.left .tooltip-arrow {
7309
+ top: 50%;
7310
+ right: 0;
7311
+ margin-top: -5px;
7312
+ border-width: 5px 0 5px 5px;
7313
+ border-left-color: #000000
7314
+ }
7315
+
7316
+ .tooltip.bottom .tooltip-arrow {
7317
+ top: 0;
7318
+ left: 50%;
7319
+ margin-left: -5px;
7320
+ border-width: 0 5px 5px;
7321
+ border-bottom-color: #000000
7322
+ }
7323
+
7324
+ .tooltip.bottom-left .tooltip-arrow {
7325
+ top: 0;
7326
+ right: 5px;
7327
+ margin-top: -5px;
7328
+ border-width: 0 5px 5px;
7329
+ border-bottom-color: #000000
7330
+ }
7331
+
7332
+ .tooltip.bottom-right .tooltip-arrow {
7333
+ top: 0;
7334
+ left: 5px;
7335
+ margin-top: -5px;
7336
+ border-width: 0 5px 5px;
7337
+ border-bottom-color: #000000
7338
+ }
7339
+
7340
+ .popover {
7341
+ position: absolute;
7342
+ top: 0;
7343
+ left: 0;
7344
+ z-index: 1060;
7345
+ display: none;
7346
+ max-width: 276px;
7347
+ padding: 1px;
7348
+ font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
7349
+ font-style: normal;
7350
+ font-weight: normal;
7351
+ letter-spacing: normal;
7352
+ line-break: auto;
7353
+ line-height: 1.42857143;
7354
+ text-align: left;
7355
+ text-align: start;
7356
+ text-decoration: none;
7357
+ text-shadow: none;
7358
+ text-transform: none;
7359
+ white-space: normal;
7360
+ word-break: normal;
7361
+ word-spacing: normal;
7362
+ word-wrap: normal;
7363
+ font-size: 15px;
7364
+ background-color: #ffffff;
7365
+ -webkit-background-clip: padding-box;
7366
+ background-clip: padding-box;
7367
+ border: 1px solid #cccccc;
7368
+ border: 1px solid rgba(0, 0, 0, 0.2);
7369
+ border-radius: 6px;
7370
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
7371
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2)
7372
+ }
7373
+
7374
+ .popover.top {
7375
+ margin-top: -10px
7376
+ }
7377
+
7378
+ .popover.right {
7379
+ margin-left: 10px
7380
+ }
7381
+
7382
+ .popover.bottom {
7383
+ margin-top: 10px
7384
+ }
7385
+
7386
+ .popover.left {
7387
+ margin-left: -10px
7388
+ }
7389
+
7390
+ .popover-title {
7391
+ margin: 0;
7392
+ padding: 8px 14px;
7393
+ font-size: 15px;
7394
+ background-color: #f7f7f7;
7395
+ border-bottom: 1px solid #ebebeb;
7396
+ border-radius: 5px 5px 0 0
7397
+ }
7398
+
7399
+ .popover-content {
7400
+ padding: 9px 14px
7401
+ }
7402
+
7403
+ .popover>.arrow,
7404
+ .popover>.arrow:after {
7405
+ position: absolute;
7406
+ display: block;
7407
+ width: 0;
7408
+ height: 0;
7409
+ border-color: transparent;
7410
+ border-style: solid
7411
+ }
7412
+
7413
+ .popover>.arrow {
7414
+ border-width: 11px
7415
+ }
7416
+
7417
+ .popover>.arrow:after {
7418
+ border-width: 10px;
7419
+ content: ""
7420
+ }
7421
+
7422
+ .popover.top>.arrow {
7423
+ left: 50%;
7424
+ margin-left: -11px;
7425
+ border-bottom-width: 0;
7426
+ border-top-color: #999999;
7427
+ border-top-color: rgba(0, 0, 0, 0.25);
7428
+ bottom: -11px
7429
+ }
7430
+
7431
+ .popover.top>.arrow:after {
7432
+ content: " ";
7433
+ bottom: 1px;
7434
+ margin-left: -10px;
7435
+ border-bottom-width: 0;
7436
+ border-top-color: #ffffff
7437
+ }
7438
+
7439
+ .popover.right>.arrow {
7440
+ top: 50%;
7441
+ left: -11px;
7442
+ margin-top: -11px;
7443
+ border-left-width: 0;
7444
+ border-right-color: #999999;
7445
+ border-right-color: rgba(0, 0, 0, 0.25)
7446
+ }
7447
+
7448
+ .popover.right>.arrow:after {
7449
+ content: " ";
7450
+ left: 1px;
7451
+ bottom: -10px;
7452
+ border-left-width: 0;
7453
+ border-right-color: #ffffff
7454
+ }
7455
+
7456
+ .popover.bottom>.arrow {
7457
+ left: 50%;
7458
+ margin-left: -11px;
7459
+ border-top-width: 0;
7460
+ border-bottom-color: #999999;
7461
+ border-bottom-color: rgba(0, 0, 0, 0.25);
7462
+ top: -11px
7463
+ }
7464
+
7465
+ .popover.bottom>.arrow:after {
7466
+ content: " ";
7467
+ top: 1px;
7468
+ margin-left: -10px;
7469
+ border-top-width: 0;
7470
+ border-bottom-color: #ffffff
7471
+ }
7472
+
7473
+ .popover.left>.arrow {
7474
+ top: 50%;
7475
+ right: -11px;
7476
+ margin-top: -11px;
7477
+ border-right-width: 0;
7478
+ border-left-color: #999999;
7479
+ border-left-color: rgba(0, 0, 0, 0.25)
7480
+ }
7481
+
7482
+ .popover.left>.arrow:after {
7483
+ content: " ";
7484
+ right: 1px;
7485
+ border-right-width: 0;
7486
+ border-left-color: #ffffff;
7487
+ bottom: -10px
7488
+ }
7489
+
7490
+ .carousel {
7491
+ position: relative
7492
+ }
7493
+
7494
+ .carousel-inner {
7495
+ position: relative;
7496
+ overflow: hidden;
7497
+ width: 100%
7498
+ }
7499
+
7500
+ .carousel-inner>.item {
7501
+ display: none;
7502
+ position: relative;
7503
+ -webkit-transition: .6s ease-in-out left;
7504
+ -o-transition: .6s ease-in-out left;
7505
+ transition: .6s ease-in-out left
7506
+ }
7507
+
7508
+ .carousel-inner>.item>img,
7509
+ .carousel-inner>.item>a>img {
7510
+ line-height: 1
7511
+ }
7512
+
7513
+ @media all and (transform-3d),
7514
+ (-webkit-transform-3d) {
7515
+ .carousel-inner>.item {
7516
+ -webkit-transition: -webkit-transform .6s ease-in-out;
7517
+ -o-transition: -o-transform .6s ease-in-out;
7518
+ transition: transform .6s ease-in-out;
7519
+ -webkit-backface-visibility: hidden;
7520
+ backface-visibility: hidden;
7521
+ -webkit-perspective: 1000px;
7522
+ perspective: 1000px
7523
+ }
7524
+ .carousel-inner>.item.next,
7525
+ .carousel-inner>.item.active.right {
7526
+ -webkit-transform: translate3d(100%, 0, 0);
7527
+ transform: translate3d(100%, 0, 0);
7528
+ left: 0
7529
+ }
7530
+ .carousel-inner>.item.prev,
7531
+ .carousel-inner>.item.active.left {
7532
+ -webkit-transform: translate3d(-100%, 0, 0);
7533
+ transform: translate3d(-100%, 0, 0);
7534
+ left: 0
7535
+ }
7536
+ .carousel-inner>.item.next.left,
7537
+ .carousel-inner>.item.prev.right,
7538
+ .carousel-inner>.item.active {
7539
+ -webkit-transform: translate3d(0, 0, 0);
7540
+ transform: translate3d(0, 0, 0);
7541
+ left: 0
7542
+ }
7543
+ }
7544
+
7545
+ .carousel-inner>.active,
7546
+ .carousel-inner>.next,
7547
+ .carousel-inner>.prev {
7548
+ display: block
7549
+ }
7550
+
7551
+ .carousel-inner>.active {
7552
+ left: 0
7553
+ }
7554
+
7555
+ .carousel-inner>.next,
7556
+ .carousel-inner>.prev {
7557
+ position: absolute;
7558
+ top: 0;
7559
+ width: 100%
7560
+ }
7561
+
7562
+ .carousel-inner>.next {
7563
+ left: 100%
7564
+ }
7565
+
7566
+ .carousel-inner>.prev {
7567
+ left: -100%
7568
+ }
7569
+
7570
+ .carousel-inner>.next.left,
7571
+ .carousel-inner>.prev.right {
7572
+ left: 0
7573
+ }
7574
+
7575
+ .carousel-inner>.active.left {
7576
+ left: -100%
7577
+ }
7578
+
7579
+ .carousel-inner>.active.right {
7580
+ left: 100%
7581
+ }
7582
+
7583
+ .carousel-control {
7584
+ position: absolute;
7585
+ top: 0;
7586
+ left: 0;
7587
+ bottom: 0;
7588
+ width: 15%;
7589
+ opacity: 0.5;
7590
+ filter: alpha(opacity=50);
7591
+ font-size: 20px;
7592
+ color: #ffffff;
7593
+ text-align: center;
7594
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6)
7595
+ }
7596
+
7597
+ .carousel-control.left {
7598
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
7599
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
7600
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
7601
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
7602
+ background-repeat: repeat-x;
7603
+ filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)
7604
+ }
7605
+
7606
+ .carousel-control.right {
7607
+ left: auto;
7608
+ right: 0;
7609
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
7610
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
7611
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
7612
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
7613
+ background-repeat: repeat-x;
7614
+ filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)
7615
+ }
7616
+
7617
+ .carousel-control:hover,
7618
+ .carousel-control:focus {
7619
+ outline: 0;
7620
+ color: #ffffff;
7621
+ text-decoration: none;
7622
+ opacity: 0.9;
7623
+ filter: alpha(opacity=90)
7624
+ }
7625
+
7626
+ .carousel-control .icon-prev,
7627
+ .carousel-control .icon-next,
7628
+ .carousel-control .glyphicon-chevron-left,
7629
+ .carousel-control .glyphicon-chevron-right {
7630
+ position: absolute;
7631
+ top: 50%;
7632
+ margin-top: -10px;
7633
+ z-index: 5;
7634
+ display: inline-block
7635
+ }
7636
+
7637
+ .carousel-control .icon-prev,
7638
+ .carousel-control .glyphicon-chevron-left {
7639
+ left: 50%;
7640
+ margin-left: -10px
7641
+ }
7642
+
7643
+ .carousel-control .icon-next,
7644
+ .carousel-control .glyphicon-chevron-right {
7645
+ right: 50%;
7646
+ margin-right: -10px
7647
+ }
7648
+
7649
+ .carousel-control .icon-prev,
7650
+ .carousel-control .icon-next {
7651
+ width: 20px;
7652
+ height: 20px;
7653
+ line-height: 1;
7654
+ font-family: serif
7655
+ }
7656
+
7657
+ .carousel-control .icon-prev:before {
7658
+ content: '\2039'
7659
+ }
7660
+
7661
+ .carousel-control .icon-next:before {
7662
+ content: '\203a'
7663
+ }
7664
+
7665
+ .carousel-indicators {
7666
+ position: absolute;
7667
+ bottom: 10px;
7668
+ left: 50%;
7669
+ z-index: 15;
7670
+ width: 60%;
7671
+ margin-left: -30%;
7672
+ padding-left: 0;
7673
+ list-style: none;
7674
+ text-align: center
7675
+ }
7676
+
7677
+ .carousel-indicators li {
7678
+ display: inline-block;
7679
+ width: 10px;
7680
+ height: 10px;
7681
+ margin: 1px;
7682
+ text-indent: -999px;
7683
+ border: 1px solid #ffffff;
7684
+ border-radius: 10px;
7685
+ cursor: pointer;
7686
+ background-color: #000 \9;
7687
+ background-color: rgba(0, 0, 0, 0)
7688
+ }
7689
+
7690
+ .carousel-indicators .active {
7691
+ margin: 0;
7692
+ width: 12px;
7693
+ height: 12px;
7694
+ background-color: #ffffff
7695
+ }
7696
+
7697
+ .carousel-caption {
7698
+ position: absolute;
7699
+ left: 15%;
7700
+ right: 15%;
7701
+ bottom: 20px;
7702
+ z-index: 10;
7703
+ padding-top: 20px;
7704
+ padding-bottom: 20px;
7705
+ color: #ffffff;
7706
+ text-align: center;
7707
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6)
7708
+ }
7709
+
7710
+ .carousel-caption .btn {
7711
+ text-shadow: none
7712
+ }
7713
+
7714
+ @media screen and (min-width: 768px) {
7715
+ .carousel-control .glyphicon-chevron-left,
7716
+ .carousel-control .glyphicon-chevron-right,
7717
+ .carousel-control .icon-prev,
7718
+ .carousel-control .icon-next {
7719
+ width: 30px;
7720
+ height: 30px;
7721
+ margin-top: -15px;
7722
+ font-size: 30px
7723
+ }
7724
+ .carousel-control .glyphicon-chevron-left,
7725
+ .carousel-control .icon-prev {
7726
+ margin-left: -15px
7727
+ }
7728
+ .carousel-control .glyphicon-chevron-right,
7729
+ .carousel-control .icon-next {
7730
+ margin-right: -15px
7731
+ }
7732
+ .carousel-caption {
7733
+ left: 20%;
7734
+ right: 20%;
7735
+ padding-bottom: 30px
7736
+ }
7737
+ .carousel-indicators {
7738
+ bottom: 20px
7739
+ }
7740
+ }
7741
+
7742
+ .clearfix:before,
7743
+ .clearfix:after,
7744
+ .dl-horizontal dd:before,
7745
+ .dl-horizontal dd:after,
7746
+ .container:before,
7747
+ .container:after,
7748
+ .container-fluid:before,
7749
+ .container-fluid:after,
7750
+ .row:before,
7751
+ .row:after,
7752
+ .form-horizontal .form-group:before,
7753
+ .form-horizontal .form-group:after,
7754
+ .btn-toolbar:before,
7755
+ .btn-toolbar:after,
7756
+ .btn-group-vertical>.btn-group:before,
7757
+ .btn-group-vertical>.btn-group:after,
7758
+ .nav:before,
7759
+ .nav:after,
7760
+ .navbar:before,
7761
+ .navbar:after,
7762
+ .navbar-header:before,
7763
+ .navbar-header:after,
7764
+ .navbar-collapse:before,
7765
+ .navbar-collapse:after,
7766
+ .pager:before,
7767
+ .pager:after,
7768
+ .panel-body:before,
7769
+ .panel-body:after,
7770
+ .modal-footer:before,
7771
+ .modal-footer:after {
7772
+ content: " ";
7773
+ display: table
7774
+ }
7775
+
7776
+ .clearfix:after,
7777
+ .dl-horizontal dd:after,
7778
+ .container:after,
7779
+ .container-fluid:after,
7780
+ .row:after,
7781
+ .form-horizontal .form-group:after,
7782
+ .btn-toolbar:after,
7783
+ .btn-group-vertical>.btn-group:after,
7784
+ .nav:after,
7785
+ .navbar:after,
7786
+ .navbar-header:after,
7787
+ .navbar-collapse:after,
7788
+ .pager:after,
7789
+ .panel-body:after,
7790
+ .modal-footer:after {
7791
+ clear: both
7792
+ }
7793
+
7794
+ .center-block {
7795
+ display: block;
7796
+ margin-left: auto;
7797
+ margin-right: auto
7798
+ }
7799
+
7800
+ .pull-right {
7801
+ float: right !important
7802
+ }
7803
+
7804
+ .pull-left {
7805
+ float: left !important
7806
+ }
7807
+
7808
+ .hide {
7809
+ display: none !important
7810
+ }
7811
+
7812
+ .show {
7813
+ display: block !important
7814
+ }
7815
+
7816
+ .invisible {
7817
+ visibility: hidden
7818
+ }
7819
+
7820
+ .text-hide {
7821
+ font: 0/0 a;
7822
+ color: transparent;
7823
+ text-shadow: none;
7824
+ background-color: transparent;
7825
+ border: 0
7826
+ }
7827
+
7828
+ .hidden {
7829
+ display: none !important
7830
+ }
7831
+
7832
+ .affix {
7833
+ position: fixed
7834
+ }
7835
+
7836
+ @-ms-viewport {
7837
+ width: device-width
7838
+ }
7839
+
7840
+ .visible-xs,
7841
+ .visible-sm,
7842
+ .visible-md,
7843
+ .visible-lg {
7844
+ display: none !important
7845
+ }
7846
+
7847
+ .visible-xs-block,
7848
+ .visible-xs-inline,
7849
+ .visible-xs-inline-block,
7850
+ .visible-sm-block,
7851
+ .visible-sm-inline,
7852
+ .visible-sm-inline-block,
7853
+ .visible-md-block,
7854
+ .visible-md-inline,
7855
+ .visible-md-inline-block,
7856
+ .visible-lg-block,
7857
+ .visible-lg-inline,
7858
+ .visible-lg-inline-block {
7859
+ display: none !important
7860
+ }
7861
+
7862
+ @media (max-width: 767px) {
7863
+ .visible-xs {
7864
+ display: block !important
7865
+ }
7866
+ table.visible-xs {
7867
+ display: table !important
7868
+ }
7869
+ tr.visible-xs {
7870
+ display: table-row !important
7871
+ }
7872
+ th.visible-xs,
7873
+ td.visible-xs {
7874
+ display: table-cell !important
7875
+ }
7876
+ }
7877
+
7878
+ @media (max-width: 767px) {
7879
+ .visible-xs-block {
7880
+ display: block !important
7881
+ }
7882
+ }
7883
+
7884
+ @media (max-width: 767px) {
7885
+ .visible-xs-inline {
7886
+ display: inline !important
7887
+ }
7888
+ }
7889
+
7890
+ @media (max-width: 767px) {
7891
+ .visible-xs-inline-block {
7892
+ display: inline-block !important
7893
+ }
7894
+ }
7895
+
7896
+ @media (min-width: 768px) and (max-width: 991px) {
7897
+ .visible-sm {
7898
+ display: block !important
7899
+ }
7900
+ table.visible-sm {
7901
+ display: table !important
7902
+ }
7903
+ tr.visible-sm {
7904
+ display: table-row !important
7905
+ }
7906
+ th.visible-sm,
7907
+ td.visible-sm {
7908
+ display: table-cell !important
7909
+ }
7910
+ }
7911
+
7912
+ @media (min-width: 768px) and (max-width: 991px) {
7913
+ .visible-sm-block {
7914
+ display: block !important
7915
+ }
7916
+ }
7917
+
7918
+ @media (min-width: 768px) and (max-width: 991px) {
7919
+ .visible-sm-inline {
7920
+ display: inline !important
7921
+ }
7922
+ }
7923
+
7924
+ @media (min-width: 768px) and (max-width: 991px) {
7925
+ .visible-sm-inline-block {
7926
+ display: inline-block !important
7927
+ }
7928
+ }
7929
+
7930
+ @media (min-width: 992px) and (max-width: 1199px) {
7931
+ .visible-md {
7932
+ display: block !important
7933
+ }
7934
+ table.visible-md {
7935
+ display: table !important
7936
+ }
7937
+ tr.visible-md {
7938
+ display: table-row !important
7939
+ }
7940
+ th.visible-md,
7941
+ td.visible-md {
7942
+ display: table-cell !important
7943
+ }
7944
+ }
7945
+
7946
+ @media (min-width: 992px) and (max-width: 1199px) {
7947
+ .visible-md-block {
7948
+ display: block !important
7949
+ }
7950
+ }
7951
+
7952
+ @media (min-width: 992px) and (max-width: 1199px) {
7953
+ .visible-md-inline {
7954
+ display: inline !important
7955
+ }
7956
+ }
7957
+
7958
+ @media (min-width: 992px) and (max-width: 1199px) {
7959
+ .visible-md-inline-block {
7960
+ display: inline-block !important
7961
+ }
7962
+ }
7963
+
7964
+ @media (min-width: 1200px) {
7965
+ .visible-lg {
7966
+ display: block !important
7967
+ }
7968
+ table.visible-lg {
7969
+ display: table !important
7970
+ }
7971
+ tr.visible-lg {
7972
+ display: table-row !important
7973
+ }
7974
+ th.visible-lg,
7975
+ td.visible-lg {
7976
+ display: table-cell !important
7977
+ }
7978
+ }
7979
+
7980
+ @media (min-width: 1200px) {
7981
+ .visible-lg-block {
7982
+ display: block !important
7983
+ }
7984
+ }
7985
+
7986
+ @media (min-width: 1200px) {
7987
+ .visible-lg-inline {
7988
+ display: inline !important
7989
+ }
7990
+ }
7991
+
7992
+ @media (min-width: 1200px) {
7993
+ .visible-lg-inline-block {
7994
+ display: inline-block !important
7995
+ }
7996
+ }
7997
+
7998
+ @media (max-width: 767px) {
7999
+ .hidden-xs {
8000
+ display: none !important
8001
+ }
8002
+ }
8003
+
8004
+ @media (min-width: 768px) and (max-width: 991px) {
8005
+ .hidden-sm {
8006
+ display: none !important
8007
+ }
8008
+ }
8009
+
8010
+ @media (min-width: 992px) and (max-width: 1199px) {
8011
+ .hidden-md {
8012
+ display: none !important
8013
+ }
8014
+ }
8015
+
8016
+ @media (min-width: 1200px) {
8017
+ .hidden-lg {
8018
+ display: none !important
8019
+ }
8020
+ }
8021
+
8022
+ .visible-print {
8023
+ display: none !important
8024
+ }
8025
+
8026
+ @media print {
8027
+ .visible-print {
8028
+ display: block !important
8029
+ }
8030
+ table.visible-print {
8031
+ display: table !important
8032
+ }
8033
+ tr.visible-print {
8034
+ display: table-row !important
8035
+ }
8036
+ th.visible-print,
8037
+ td.visible-print {
8038
+ display: table-cell !important
8039
+ }
8040
+ }
8041
+
8042
+ .visible-print-block {
8043
+ display: none !important
8044
+ }
8045
+
8046
+ @media print {
8047
+ .visible-print-block {
8048
+ display: block !important
8049
+ }
8050
+ }
8051
+
8052
+ .visible-print-inline {
8053
+ display: none !important
8054
+ }
8055
+
8056
+ @media print {
8057
+ .visible-print-inline {
8058
+ display: inline !important
8059
+ }
8060
+ }
8061
+
8062
+ .visible-print-inline-block {
8063
+ display: none !important
8064
+ }
8065
+
8066
+ @media print {
8067
+ .visible-print-inline-block {
8068
+ display: inline-block !important
8069
+ }
8070
+ }
8071
+
8072
+ @media print {
8073
+ .hidden-print {
8074
+ display: none !important
8075
+ }
8076
+ }
8077
+
8078
+ .navbar {
8079
+ border-width: 0
8080
+ }
8081
+
8082
+ .navbar-default .badge {
8083
+ background-color: #fff;
8084
+ color: #2c3e50
8085
+ }
8086
+
8087
+ .navbar-inverse .badge {
8088
+ background-color: #fff;
8089
+ color: #18bc9c
8090
+ }
8091
+
8092
+ .navbar-brand {
8093
+ line-height: 1
8094
+ }
8095
+
8096
+ .btn {
8097
+ border-width: 2px
8098
+ }
8099
+
8100
+ .btn:active {
8101
+ -webkit-box-shadow: none;
8102
+ box-shadow: none
8103
+ }
8104
+
8105
+ .btn-group.open .dropdown-toggle {
8106
+ -webkit-box-shadow: none;
8107
+ box-shadow: none
8108
+ }
8109
+
8110
+ .text-primary,
8111
+ .text-primary:hover {
8112
+ color: #2c3e50
8113
+ }
8114
+
8115
+ .text-success,
8116
+ .text-success:hover {
8117
+ color: #18bc9c
8118
+ }
8119
+
8120
+ .text-danger,
8121
+ .text-danger:hover {
8122
+ color: #e74c3c
8123
+ }
8124
+
8125
+ .text-warning,
8126
+ .text-warning:hover {
8127
+ color: #f39c12
8128
+ }
8129
+
8130
+ .text-info,
8131
+ .text-info:hover {
8132
+ color: #3498db
8133
+ }
8134
+
8135
+ table a:not(.btn),
8136
+ .table a:not(.btn) {
8137
+ text-decoration: underline
8138
+ }
8139
+
8140
+ table .dropdown-menu a,
8141
+ .table .dropdown-menu a {
8142
+ text-decoration: none
8143
+ }
8144
+
8145
+ table .success,
8146
+ .table .success,
8147
+ table .warning,
8148
+ .table .warning,
8149
+ table .danger,
8150
+ .table .danger,
8151
+ table .info,
8152
+ .table .info {
8153
+ color: #fff
8154
+ }
8155
+
8156
+ table .success>th>a,
8157
+ .table .success>th>a,
8158
+ table .warning>th>a,
8159
+ .table .warning>th>a,
8160
+ table .danger>th>a,
8161
+ .table .danger>th>a,
8162
+ table .info>th>a,
8163
+ .table .info>th>a,
8164
+ table .success>td>a,
8165
+ .table .success>td>a,
8166
+ table .warning>td>a,
8167
+ .table .warning>td>a,
8168
+ table .danger>td>a,
8169
+ .table .danger>td>a,
8170
+ table .info>td>a,
8171
+ .table .info>td>a,
8172
+ table .success>a,
8173
+ .table .success>a,
8174
+ table .warning>a,
8175
+ .table .warning>a,
8176
+ table .danger>a,
8177
+ .table .danger>a,
8178
+ table .info>a,
8179
+ .table .info>a {
8180
+ color: #fff
8181
+ }
8182
+
8183
+ table>thead>tr>th,
8184
+ .table>thead>tr>th,
8185
+ table>tbody>tr>th,
8186
+ .table>tbody>tr>th,
8187
+ table>tfoot>tr>th,
8188
+ .table>tfoot>tr>th,
8189
+ table>thead>tr>td,
8190
+ .table>thead>tr>td,
8191
+ table>tbody>tr>td,
8192
+ .table>tbody>tr>td,
8193
+ table>tfoot>tr>td,
8194
+ .table>tfoot>tr>td {
8195
+ border: none
8196
+ }
8197
+
8198
+ table-bordered>thead>tr>th,
8199
+ .table-bordered>thead>tr>th,
8200
+ table-bordered>tbody>tr>th,
8201
+ .table-bordered>tbody>tr>th,
8202
+ table-bordered>tfoot>tr>th,
8203
+ .table-bordered>tfoot>tr>th,
8204
+ table-bordered>thead>tr>td,
8205
+ .table-bordered>thead>tr>td,
8206
+ table-bordered>tbody>tr>td,
8207
+ .table-bordered>tbody>tr>td,
8208
+ table-bordered>tfoot>tr>td,
8209
+ .table-bordered>tfoot>tr>td {
8210
+ border: 1px solid #ecf0f1
8211
+ }
8212
+
8213
+ .form-control,
8214
+ input {
8215
+ border-width: 2px;
8216
+ -webkit-box-shadow: none;
8217
+ box-shadow: none
8218
+ }
8219
+
8220
+ .form-control:focus,
8221
+ input:focus {
8222
+ -webkit-box-shadow: none;
8223
+ box-shadow: none
8224
+ }
8225
+
8226
+ .has-warning .help-block,
8227
+ .has-warning .control-label,
8228
+ .has-warning .radio,
8229
+ .has-warning .checkbox,
8230
+ .has-warning .radio-inline,
8231
+ .has-warning .checkbox-inline,
8232
+ .has-warning.radio label,
8233
+ .has-warning.checkbox label,
8234
+ .has-warning.radio-inline label,
8235
+ .has-warning.checkbox-inline label,
8236
+ .has-warning .form-control-feedback {
8237
+ color: #f39c12
8238
+ }
8239
+
8240
+ .has-warning .form-control,
8241
+ .has-warning .form-control:focus {
8242
+ border: 2px solid #f39c12
8243
+ }
8244
+
8245
+ .has-warning .input-group-addon {
8246
+ border-color: #f39c12
8247
+ }
8248
+
8249
+ .has-error .help-block,
8250
+ .has-error .control-label,
8251
+ .has-error .radio,
8252
+ .has-error .checkbox,
8253
+ .has-error .radio-inline,
8254
+ .has-error .checkbox-inline,
8255
+ .has-error.radio label,
8256
+ .has-error.checkbox label,
8257
+ .has-error.radio-inline label,
8258
+ .has-error.checkbox-inline label,
8259
+ .has-error .form-control-feedback {
8260
+ color: #e74c3c
8261
+ }
8262
+
8263
+ .has-error .form-control,
8264
+ .has-error .form-control:focus {
8265
+ border: 2px solid #e74c3c
8266
+ }
8267
+
8268
+ .has-error .input-group-addon {
8269
+ border-color: #e74c3c
8270
+ }
8271
+
8272
+ .has-success .help-block,
8273
+ .has-success .control-label,
8274
+ .has-success .radio,
8275
+ .has-success .checkbox,
8276
+ .has-success .radio-inline,
8277
+ .has-success .checkbox-inline,
8278
+ .has-success.radio label,
8279
+ .has-success.checkbox label,
8280
+ .has-success.radio-inline label,
8281
+ .has-success.checkbox-inline label,
8282
+ .has-success .form-control-feedback {
8283
+ color: #18bc9c
8284
+ }
8285
+
8286
+ .has-success .form-control,
8287
+ .has-success .form-control:focus {
8288
+ border: 2px solid #18bc9c
8289
+ }
8290
+
8291
+ .has-success .input-group-addon {
8292
+ border-color: #18bc9c
8293
+ }
8294
+
8295
+ .nav .open>a,
8296
+ .nav .open>a:hover,
8297
+ .nav .open>a:focus {
8298
+ border-color: transparent
8299
+ }
8300
+
8301
+ .pager a,
8302
+ .pager a:hover {
8303
+ color: #fff
8304
+ }
8305
+
8306
+ .pager .disabled>a,
8307
+ .pager .disabled>a:hover,
8308
+ .pager .disabled>a:focus,
8309
+ .pager .disabled>span {
8310
+ background-color: #3be6c4
8311
+ }
8312
+
8313
+ .close {
8314
+ color: #fff;
8315
+ text-decoration: none;
8316
+ opacity: 0.4
8317
+ }
8318
+
8319
+ .close:hover,
8320
+ .close:focus {
8321
+ color: #fff;
8322
+ opacity: 1
8323
+ }
8324
+
8325
+ .alert .alert-link {
8326
+ color: #fff;
8327
+ text-decoration: underline
8328
+ }
8329
+
8330
+ .progress {
8331
+ height: 10px;
8332
+ -webkit-box-shadow: none;
8333
+ box-shadow: none
8334
+ }
8335
+
8336
+ .progress .progress-bar {
8337
+ font-size: 10px;
8338
+ line-height: 10px
8339
+ }
8340
+
8341
+ .well {
8342
+ -webkit-box-shadow: none;
8343
+ box-shadow: none
8344
+ }
8345
+
8346
+ a.list-group-item.active,
8347
+ a.list-group-item.active:hover,
8348
+ a.list-group-item.active:focus {
8349
+ border-color: #ecf0f1
8350
+ }
8351
+
8352
+ a.list-group-item-success.active {
8353
+ background-color: #18bc9c
8354
+ }
8355
+
8356
+ a.list-group-item-success.active:hover,
8357
+ a.list-group-item-success.active:focus {
8358
+ background-color: #15a589
8359
+ }
8360
+
8361
+ a.list-group-item-warning.active {
8362
+ background-color: #f39c12
8363
+ }
8364
+
8365
+ a.list-group-item-warning.active:hover,
8366
+ a.list-group-item-warning.active:focus {
8367
+ background-color: #e08e0b
8368
+ }
8369
+
8370
+ a.list-group-item-danger.active {
8371
+ background-color: #e74c3c
8372
+ }
8373
+
8374
+ a.list-group-item-danger.active:hover,
8375
+ a.list-group-item-danger.active:focus {
8376
+ background-color: #e43725
8377
+ }
8378
+
8379
+ .panel-default .close {
8380
+ color: #2c3e50
8381
+ }
8382
+
8383
+ .modal .close {
8384
+ color: #2c3e50
8385
+ }
8386
+
8387
+ .popover {
8388
+ color: #2c3e50
8389
+ }
assets/css/fonts/icomoon.eot ADDED
Binary file
assets/css/fonts/icomoon.svg ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by IcoMoon</metadata>
5
+ <defs>
6
+ <font id="icomoon" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
+ <glyph unicode="&#xe600;" d="M960-64h-896c-35.344 0-64 28.624-64 64v896c0 35.376 28.656 64 64 64h640l-128-128h-448v-768h768v448l128 128v-640c0-35.376-28.656-64-64-64zM256 192v192l576 576h64l128-128v-64l-576-576h-192zM544 416l352 352-64 64-352-352 64-64zM384 384l-64-64v-64h64l64 64-64 64z" />
11
+ <glyph unicode="&#xe601;" d="M896 768h-768v-640h768v640zM1024 896v0-896h-1024v896h1024zM832 192h-640v128l192 320 263-320 185 128v-64zM640 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96z" />
12
+ <glyph unicode="&#xe604;" d="M304 352c0-114.876 93.124-208 208-208s208 93.124 208 208-93.124 208-208 208-208-93.124-208-208zM960 704h-224c-16 64-32 128-96 128h-256c-64 0-80-64-96-128h-224c-35.2 0-64-28.8-64-64v-576c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v576c0 35.2-28.8 64-64 64zM512 68c-156.85 0-284 127.148-284 284 0 156.85 127.15 284 284 284 156.852 0 284-127.15 284-284 0-156.852-127.146-284-284-284zM960 512h-128v64h128v-64z" />
13
+ <glyph unicode="&#xe607;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM768 613.49l-165.488-165.49 165.488-165.488v-90.512h-90.512l-165.488 165.488-165.49-165.488h-90.51v90.512l165.49 165.488-165.49 165.49v90.51h90.51l165.49-165.49 165.488 165.49h90.512v-90.51z" />
14
+ <glyph unicode="&#xe608;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM416 128l-212 276 94 98 118-150 370 302 46-46-416-480z" />
15
+ </font></defs></svg>
assets/css/fonts/icomoon.ttf ADDED
Binary file
assets/css/fonts/icomoon.woff ADDED
Binary file
assets/css/frontend.css ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wpgmp_map img {
2
+ max-width: none !important;
3
+ padding: 0px !important;
4
+ }
5
+
6
+ .wpgmp_map div {
7
+ -moz-box-sizing: content-box;
8
+ -webkit-box-sizing: content-box;
9
+ box-sizing: content-box;
10
+ }
11
+
12
+ .wpgmp_map_container {
13
+ position: relative;
14
+ }
15
+
16
+ .wpgmp_map_container .gm-style-iw {
17
+ min-height: 50px!important;
18
+ min-width: 150px!important;
19
+ }
assets/images/default_marker.png ADDED
Binary file
assets/images/grid.png ADDED
Binary file
assets/images/helpdesk.png ADDED
Binary file
assets/images/icons/accident.png ADDED
Binary file
assets/images/icons/administration.png ADDED
Binary file
assets/images/icons/aestheticscenter.png ADDED
Binary file
assets/images/icons/agriculture.png ADDED
Binary file
assets/images/icons/agriculture2.png ADDED
Binary file
assets/images/icons/agriculture3.png ADDED
Binary file
assets/images/icons/agriculture4.png ADDED
Binary file
assets/images/icons/aircraft-small.png ADDED
Binary file
assets/images/icons/airplane-sport.png ADDED
Binary file
assets/images/icons/airplane-tourism.png ADDED
Binary file
assets/images/icons/airport-apron.png ADDED
Binary file
assets/images/icons/airport-runway.png ADDED
Binary file
assets/images/icons/airport-terminal.png ADDED
Binary file
assets/images/icons/airport.png ADDED
Binary file
assets/images/icons/amphitheater-tourism.png ADDED
Binary file
assets/images/icons/amphitheater.png ADDED
Binary file
assets/images/icons/ancientmonument.png ADDED
Binary file
assets/images/icons/ancienttemple.png ADDED
Binary file
assets/images/icons/ancienttempleruin.png ADDED
Binary file
assets/images/icons/animals.png ADDED
Binary file
assets/images/icons/anniversary.png ADDED
Binary file
assets/images/icons/apartment.png ADDED
Binary file
assets/images/icons/aquarium.png ADDED
Binary file
assets/images/icons/arch.png ADDED
Binary file
assets/images/icons/archery.png ADDED
Binary file
assets/images/icons/artgallery.png ADDED
Binary file
assets/images/icons/atm.png ADDED
Binary file
assets/images/icons/atv.png ADDED
Binary file
assets/images/icons/audio.png ADDED
Binary file
assets/images/icons/australianfootball.png ADDED
Binary file
assets/images/icons/bags.png ADDED
Binary file
assets/images/icons/bank.png ADDED
Binary file
assets/images/icons/bankeuro.png ADDED
Binary file
assets/images/icons/bankpound.png ADDED
Binary file
assets/images/icons/bar.png ADDED
Binary file
assets/images/icons/baseball.png ADDED
Binary file
assets/images/icons/basketball.png ADDED
Binary file
assets/images/icons/baskteball2.png ADDED
Binary file
assets/images/icons/beach.png ADDED
Binary file
assets/images/icons/beautiful.png ADDED
Binary file
assets/images/icons/bench.png ADDED
Binary file
assets/images/icons/bicycleparking.png ADDED
Binary file
assets/images/icons/bigcity.png ADDED
Binary file
assets/images/icons/billiard.png ADDED
Binary file
assets/images/icons/bobsleigh.png ADDED
Binary file
assets/images/icons/bomb.png ADDED
Binary file
assets/images/icons/bookstore.png ADDED
Binary file
assets/images/icons/bowling.png ADDED
Binary file
assets/images/icons/boxing.png ADDED
Binary file
assets/images/icons/bread.png ADDED
Binary file
assets/images/icons/bridge.png ADDED
Binary file
assets/images/icons/bridgemodern.png ADDED
Binary file
assets/images/icons/bullfight.png ADDED
Binary file
assets/images/icons/bungalow.png ADDED
Binary file
assets/images/icons/bus.png ADDED
Binary file
assets/images/icons/butcher.png ADDED
Binary file
assets/images/icons/cabin.png ADDED
Binary file
assets/images/icons/cablecar.png ADDED
Binary file
assets/images/icons/camping.png ADDED
Binary file
assets/images/icons/campingsite.png ADDED
Binary file
assets/images/icons/canoe.png ADDED
Binary file
assets/images/icons/car.png ADDED
Binary file
assets/images/icons/carrental.png ADDED
Binary file
assets/images/icons/carrepair.png ADDED
Binary file
assets/images/icons/carwash.png ADDED
Binary file
assets/images/icons/casino.png ADDED
Binary file
assets/images/icons/castle.png ADDED
Binary file
assets/images/icons/cathedral.png ADDED
Binary file
assets/images/icons/cathedral2.png ADDED
Binary file
assets/images/icons/cave.png ADDED
Binary file
assets/images/icons/cemetary.png ADDED
Binary file
assets/images/icons/chapel.png ADDED
Binary file
assets/images/icons/church.png ADDED
Binary file
assets/images/icons/church2.png ADDED
Binary file
assets/images/icons/cinema.png ADDED
Binary file
assets/images/icons/circus.png ADDED
Binary file
assets/images/icons/citysquare.png ADDED
Binary file
assets/images/icons/climbing.png ADDED
Binary file
assets/images/icons/clothes-female.png ADDED
Binary file
assets/images/icons/clothes-male.png ADDED
Binary file
assets/images/icons/clothes.png ADDED
Binary file
assets/images/icons/clouds.png ADDED
Binary file
assets/images/icons/cloudsun.png ADDED
Binary file
assets/images/icons/club.png ADDED
Binary file
assets/images/icons/cluster.png ADDED
Binary file
assets/images/icons/cluster2.png ADDED
Binary file
assets/images/icons/cluster3.png ADDED
Binary file
assets/images/icons/cluster4.png ADDED
Binary file
assets/images/icons/cluster5.png ADDED
Binary file
assets/images/icons/cocktail.png ADDED
Binary file
assets/images/icons/coffee.png ADDED
Binary file
assets/images/icons/communitycentre.png ADDED
Binary file
assets/images/icons/company.png ADDED
Binary file
assets/images/icons/computer.png ADDED
Binary file
assets/images/icons/concessionaire.png ADDED
Binary file
assets/images/icons/conference.png ADDED
Binary file
assets/images/icons/construction.png ADDED
Binary file
assets/images/icons/convenience.png ADDED
Binary file
assets/images/icons/convent.png ADDED
Binary file
assets/images/icons/corral.png ADDED
Binary file
assets/images/icons/country.png ADDED
Binary file
assets/images/icons/court.png ADDED
Binary file
assets/images/icons/cricket.png ADDED
Binary file
assets/images/icons/cross.png ADDED
Binary file
assets/images/icons/crossingguard.png ADDED
Binary file
assets/images/icons/cruise.png ADDED
Binary file
assets/images/icons/currencyexchange.png ADDED
Binary file
assets/images/icons/customs.png ADDED
Binary file
assets/images/icons/cycling.png ADDED
Binary file
assets/images/icons/cyclingfeedarea.png ADDED
Binary file
assets/images/icons/cyclingmountain1.png ADDED
Binary file
assets/images/icons/cyclingmountain2.png ADDED
Binary file
assets/images/icons/cyclingmountain3.png ADDED
Binary file
assets/images/icons/cyclingmountain4.png ADDED
Binary file
assets/images/icons/cyclingmountainnotrated.png ADDED
Binary file
assets/images/icons/cyclingsport.png ADDED
Binary file
assets/images/icons/cyclingsprint.png ADDED
Binary file
assets/images/icons/cyclinguncategorized.png ADDED
Binary file
assets/images/icons/dam.png ADDED
Binary file
assets/images/icons/dancinghall.png ADDED
Binary file
assets/images/icons/dates.png ADDED
Binary file
assets/images/icons/daycare.png ADDED
Binary file
assets/images/icons/days-dim.png ADDED
Binary file
assets/images/icons/days-dom.png ADDED
Binary file
assets/images/icons/days-jeu.png ADDED
Binary file
assets/images/icons/days-jue.png ADDED
Binary file
assets/images/icons/days-lun.png ADDED
Binary file
assets/images/icons/days-mar.png ADDED
Binary file
assets/images/icons/days-mer.png ADDED
Binary file
assets/images/icons/days-mie.png ADDED
Binary file
assets/images/icons/days-qua.png ADDED
Binary file
assets/images/icons/days-qui.png ADDED
Binary file
assets/images/icons/days-sab.png ADDED
Binary file
assets/images/icons/days-sam.png ADDED
Binary file
assets/images/icons/days-seg.png ADDED
Binary file
assets/images/icons/days-sex.png ADDED
Binary file
assets/images/icons/days-ter.png ADDED
Binary file
assets/images/icons/days-ven.png ADDED
Binary file
assets/images/icons/days-vie.png ADDED
Binary file
assets/images/icons/dentist.png ADDED
Binary file
assets/images/icons/deptstore.png ADDED
Binary file
assets/images/icons/disability.png ADDED
Binary file
assets/images/icons/disabledparking.png ADDED
Binary file
assets/images/icons/diving.png ADDED
Binary file
assets/images/icons/doctor.png ADDED
Binary file
assets/images/icons/dog-leash.png ADDED
Binary file
assets/images/icons/dog-offleash.png ADDED
Binary file
assets/images/icons/door.png ADDED
Binary file
assets/images/icons/down.png ADDED
Binary file
assets/images/icons/downleft.png ADDED
Binary file
assets/images/icons/downright.png ADDED
Binary file
assets/images/icons/downthenleft.png ADDED
Binary file
assets/images/icons/downthenright.png ADDED
Binary file
assets/images/icons/drinkingfountain.png ADDED
Binary file
assets/images/icons/drinkingwater.png ADDED
Binary file
assets/images/icons/drugs.png ADDED
Binary file
assets/images/icons/elevator.png ADDED
Binary file
assets/images/icons/embassy.png ADDED
Binary file
assets/images/icons/entrance.png ADDED
Binary file
assets/images/icons/escalator-down.png ADDED
Binary file
assets/images/icons/escalator-up.png ADDED
Binary file
assets/images/icons/exit.png ADDED
Binary file
assets/images/icons/expert.png ADDED
Binary file
assets/images/icons/explosion.png ADDED
Binary file
assets/images/icons/factory.png ADDED
Binary file
assets/images/icons/fallingrocks.png ADDED
Binary file
assets/images/icons/family.png ADDED
Binary file
assets/images/icons/farm.png ADDED
Binary file
assets/images/icons/fastfood.png ADDED
Binary file
assets/images/icons/festival.png ADDED
Binary file
assets/images/icons/findajob.png ADDED
Binary file
assets/images/icons/findjob.png ADDED
Binary file
assets/images/icons/fire-extinguisher.png ADDED
Binary file
assets/images/icons/fire.png ADDED
Binary file
assets/images/icons/firemen.png ADDED
Binary file
assets/images/icons/fireworks.png ADDED
Binary file
assets/images/icons/firstaid.png ADDED
Binary file
assets/images/icons/fishing.png ADDED
Binary file
assets/images/icons/fishingshop.png ADDED
Binary file
assets/images/icons/fitnesscenter.png ADDED
Binary file
assets/images/icons/fjord.png ADDED
Binary file
assets/images/icons/flood.png ADDED
Binary file
assets/images/icons/flowers.png ADDED
Binary file
assets/images/icons/followpath.png ADDED
Binary file
assets/images/icons/foodtruck.png ADDED
Binary file
assets/images/icons/forest.png ADDED
Binary file
assets/images/icons/fortress.png ADDED
Binary file
assets/images/icons/fossils.png ADDED
Binary file
assets/images/icons/fountain.png ADDED
Binary file
assets/images/icons/friday.png ADDED
Binary file
assets/images/icons/friends.png ADDED
Binary file
assets/images/icons/garden.png ADDED
Binary file
assets/images/icons/gateswalls.png ADDED
Binary file
assets/images/icons/gazstation.png ADDED
Binary file
assets/images/icons/geyser.png ADDED
Binary file
assets/images/icons/gifts.png ADDED
Binary file
assets/images/icons/girlfriend.png ADDED
Binary file
assets/images/icons/glacier.png ADDED
Binary file
assets/images/icons/golf.png ADDED
Binary file
assets/images/icons/gondola.png ADDED
Binary file
assets/images/icons/google-map-default-icon.png ADDED
Binary file
assets/images/icons/gourmet.png ADDED
Binary file
assets/images/icons/grocery.png ADDED
Binary file
assets/images/icons/gun.png ADDED
Binary file
assets/images/icons/gym.png ADDED
Binary file
assets/images/icons/hairsalon.png ADDED
Binary file
assets/images/icons/handball.png ADDED
Binary file
assets/images/icons/hanggliding.png ADDED
Binary file
assets/images/icons/hats.png ADDED
Binary file
assets/images/icons/headstone.png ADDED
Binary file
assets/images/icons/headstonejewish.png ADDED
Binary file
assets/images/icons/helicopter.png ADDED
Binary file
assets/images/icons/highway.png ADDED
Binary file
assets/images/icons/hiking-tourism.png ADDED
Binary file
assets/images/icons/hiking.png ADDED
Binary file
assets/images/icons/historicalquarter.png ADDED
Binary file
assets/images/icons/home.png ADDED
Binary file
assets/images/icons/horseriding.png ADDED
Binary file
assets/images/icons/hospital.png ADDED
Binary file
assets/images/icons/hostel.png ADDED
Binary file
assets/images/icons/hotairballoon.png ADDED
Binary file
assets/images/icons/hotel.png ADDED
Binary file
assets/images/icons/hotel1star.png ADDED
Binary file
assets/images/icons/hotel2stars.png ADDED
Binary file
assets/images/icons/hotel3stars.png ADDED
Binary file
assets/images/icons/hotel4stars.png ADDED
Binary file
assets/images/icons/hotel5stars.png ADDED
Binary file
assets/images/icons/hunting.png ADDED
Binary file
assets/images/icons/icecream.png ADDED
Binary file
assets/images/icons/icehockey.png ADDED
Binary file
assets/images/icons/iceskating.png ADDED
Binary file
assets/images/icons/info.png ADDED
Binary file
assets/images/icons/jewelry.png ADDED
Binary file
assets/images/icons/jewishquarter.png ADDED
Binary file
assets/images/icons/jogging.png ADDED
Binary file
assets/images/icons/judo.png ADDED
Binary file
assets/images/icons/justice.png ADDED
Binary file
assets/images/icons/karate.png ADDED
Binary file
assets/images/icons/karting.png ADDED
Binary file
assets/images/icons/kayak.png ADDED
Binary file
assets/images/icons/laboratory.png ADDED
Binary file
assets/images/icons/lake.png ADDED
Binary file
assets/images/icons/laundromat.png ADDED
Binary file
assets/images/icons/left.png ADDED
Binary file
assets/images/icons/leftthendown.png ADDED
Binary file
assets/images/icons/leftthenup.png ADDED
Binary file
assets/images/icons/library.png ADDED
Binary file
assets/images/icons/lighthouse.png ADDED
Binary file
assets/images/icons/liquor.png ADDED
Binary file
assets/images/icons/lock.png ADDED
Binary file
assets/images/icons/lockerrental.png ADDED
Binary file
assets/images/icons/magicshow.png ADDED
Binary file
assets/images/icons/mainroad.png ADDED
Binary file
assets/images/icons/massage.png ADDED
Binary file
assets/images/icons/military.png ADDED
Binary file
assets/images/icons/mine.png ADDED
Binary file
assets/images/icons/mobilephonetower.png ADDED
Binary file
assets/images/icons/modernmonument.png ADDED
Binary file
assets/images/icons/moderntower.png ADDED
Binary file
assets/images/icons/monastery.png ADDED
Binary file
assets/images/icons/monday.png ADDED
Binary file
assets/images/icons/monument.png ADDED
Binary file
assets/images/icons/mosque.png ADDED
Binary file
assets/images/icons/motorbike.png ADDED
Binary file
assets/images/icons/motorcycle.png ADDED
Binary file
assets/images/icons/movierental.png ADDED
Binary file
assets/images/icons/museum-archeological.png ADDED
Binary file
assets/images/icons/museum-art.png ADDED
Binary file
assets/images/icons/museum-crafts.png ADDED
Binary file
assets/images/icons/museum-historical.png ADDED
Binary file
assets/images/icons/museum-naval.png ADDED
Binary file
assets/images/icons/museum-science.png ADDED
Binary file
assets/images/icons/museum-war.png ADDED
Binary file
assets/images/icons/museum.png ADDED
Binary file
assets/images/icons/music-classical.png ADDED
Binary file
assets/images/icons/music-hiphop.png ADDED
Binary file
assets/images/icons/music-live.png ADDED
Binary file
assets/images/icons/music-rock.png ADDED
Binary file
assets/images/icons/music.png ADDED
Binary file
assets/images/icons/nanny.png ADDED
Binary file
assets/images/icons/newsagent.png ADDED
Binary file
assets/images/icons/nordicski.png ADDED
Binary file
assets/images/icons/nursery.png ADDED
Binary file
assets/images/icons/observatory.png ADDED
Binary file
assets/images/icons/oilpumpjack.png ADDED
Binary file
assets/images/icons/olympicsite.png ADDED
Binary file
assets/images/icons/ophthalmologist.png ADDED
Binary file
assets/images/icons/pagoda.png ADDED
Binary file
assets/images/icons/paint.png ADDED
Binary file
assets/images/icons/palace.png ADDED
Binary file
assets/images/icons/panoramic.png ADDED
Binary file
assets/images/icons/panoramic180.png ADDED
Binary file
assets/images/icons/park-urban.png ADDED
Binary file
assets/images/icons/park.png ADDED
Binary file
assets/images/icons/parkandride.png ADDED
Binary file
assets/images/icons/parking.png ADDED
Binary file
assets/images/icons/party.png ADDED
Binary file
assets/images/icons/patisserie.png ADDED
Binary file
assets/images/icons/pedestriancrossing.png ADDED
Binary file
assets/images/icons/pens.png ADDED
Binary file
assets/images/icons/perfumery.png ADDED
Binary file
assets/images/icons/personalwatercraft.png ADDED
Binary file
assets/images/icons/petroglyphs.png ADDED
Binary file
assets/images/icons/pets.png ADDED
Binary file
assets/images/icons/phones.png ADDED
Binary file
assets/images/icons/photo.png ADDED
Binary file
assets/images/icons/photodown.png ADDED
Binary file
assets/images/icons/photodownleft.png ADDED
Binary file
assets/images/icons/photodownright.png ADDED
Binary file
assets/images/icons/photography.png ADDED
Binary file
assets/images/icons/photoleft.png ADDED
Binary file
assets/images/icons/photoright.png ADDED
Binary file
assets/images/icons/photoup.png ADDED
Binary file
assets/images/icons/photoupleft.png ADDED
Binary file
assets/images/icons/photoupright.png ADDED
Binary file
assets/images/icons/picnic.png ADDED
Binary file
assets/images/icons/pin_blue.png ADDED
Binary file
assets/images/icons/pin_green.png ADDED
Binary file
assets/images/icons/pizza.png ADDED
Binary file
assets/images/icons/places-unvisited.png ADDED
Binary file
assets/images/icons/places-visited.png ADDED
Binary file
assets/images/icons/planecrash.png ADDED
Binary file
assets/images/icons/playground.png ADDED
Binary file
assets/images/icons/poker.png ADDED
Binary file
assets/images/icons/police.png ADDED
Binary file
assets/images/icons/police2.png ADDED
Binary file
assets/images/icons/pool-indoor.png ADDED
Binary file
assets/images/icons/pool.png ADDED
Binary file
assets/images/icons/port.png ADDED
Binary file
assets/images/icons/postal.png ADDED
Binary file
assets/images/icons/powerlinepole.png ADDED
Binary file
assets/images/icons/powerplant.png ADDED
Binary file
assets/images/icons/powersubstation.png ADDED
Binary file
assets/images/icons/prison.png ADDED
Binary file
assets/images/icons/publicart.png ADDED
Binary file
assets/images/icons/racing.png ADDED
Binary file
assets/images/icons/radiation.png ADDED
Binary file
assets/images/icons/rain.png ADDED
Binary file
assets/images/icons/rattlesnake.png ADDED
Binary file
assets/images/icons/realestate.png ADDED
Binary file
assets/images/icons/recycle.png ADDED
Binary file
assets/images/icons/regroup.png ADDED
Binary file
assets/images/icons/resort.png ADDED
Binary file
assets/images/icons/restaurant-barbecue.png ADDED
Binary file
assets/images/icons/restaurant-buffet.png ADDED
Binary file
assets/images/icons/restaurant-fish.png ADDED
Binary file
assets/images/icons/restaurant-romantic.png ADDED
Binary file
assets/images/icons/restaurant.png ADDED
Binary file
assets/images/icons/restaurantafrican.png ADDED
Binary file
assets/images/icons/restaurantchinese.png ADDED
Binary file
assets/images/icons/restaurantfishchips.png ADDED
Binary file
assets/images/icons/restaurantgourmet.png ADDED
Binary file
assets/images/icons/restaurantgreek.png ADDED
Binary file
assets/images/icons/restaurantindian.png ADDED
Binary file
assets/images/icons/restaurantitalian.png ADDED
Binary file
assets/images/icons/restaurantjapanese.png ADDED
Binary file
assets/images/icons/restaurantkebab.png ADDED
Binary file
assets/images/icons/restaurantkorean.png ADDED
Binary file
assets/images/icons/restaurantmediterranean.png ADDED
Binary file
assets/images/icons/restaurantmexican.png ADDED
Binary file
assets/images/icons/restaurantthai.png ADDED
Binary file
assets/images/icons/restaurantturkish.png ADDED
Binary file
assets/images/icons/revolution.png ADDED
Binary file
assets/images/icons/right.png ADDED
Binary file
assets/images/icons/rightthendown.png ADDED
Binary file
assets/images/icons/rightthenup.png ADDED
Binary file
assets/images/icons/riparian.png ADDED
Binary file
assets/images/icons/ropescourse.png ADDED
Binary file
assets/images/icons/rowboat.png ADDED
Binary file
assets/images/icons/rugby.png ADDED
Binary file
assets/images/icons/ruins.png ADDED
Binary file
assets/images/icons/sailboat-sport.png ADDED
Binary file
assets/images/icons/sailboat-tourism.png ADDED
Binary file
assets/images/icons/sailboat.png ADDED
Binary file
assets/images/icons/satursday.png ADDED
Binary file
assets/images/icons/sauna.png ADDED
Binary file
assets/images/icons/school.png ADDED
Binary file
assets/images/icons/schrink.png ADDED
Binary file
assets/images/icons/sciencecenter.png ADDED
Binary file
assets/images/icons/seals.png ADDED
Binary file
assets/images/icons/seniorsite.png ADDED
Binary file
assets/images/icons/shelter-picnic.png ADDED
Binary file
assets/images/icons/shelter-sleeping.png ADDED
Binary file
assets/images/icons/shoes.png ADDED
Binary file
assets/images/icons/shoppingmall.png ADDED
Binary file
assets/images/icons/shore.png ADDED
Binary file
assets/images/icons/shower.png ADDED
Binary file
assets/images/icons/sight.png ADDED
Binary file
assets/images/icons/skateboarding.png ADDED
Binary file
assets/images/icons/skiing.png ADDED
Binary file
assets/images/icons/skijump.png ADDED
Binary file
assets/images/icons/skilift.png ADDED
Binary file
assets/images/icons/smallcity.png ADDED
Binary file
assets/images/icons/smokingarea.png ADDED
Binary file
assets/images/icons/sneakers.png ADDED
Binary file
assets/images/icons/snow.png ADDED
Binary file
assets/images/icons/snowboarding.png ADDED
Binary file
assets/images/icons/snowmobiling.png ADDED
Binary file
assets/images/icons/snowshoeing.png ADDED
Binary file
assets/images/icons/soccer.png ADDED
Binary file
assets/images/icons/soccer2.png ADDED
Binary file
assets/images/icons/spaceport.png ADDED
Binary file
assets/images/icons/speed100.png ADDED
Binary file
assets/images/icons/speed110.png ADDED
Binary file
assets/images/icons/speed120.png ADDED
Binary file
assets/images/icons/speed130.png ADDED
Binary file
assets/images/icons/speed20.png ADDED
Binary file
assets/images/icons/speed30.png ADDED
Binary file
assets/images/icons/speed40.png ADDED
Binary file
assets/images/icons/speed50.png ADDED
Binary file
assets/images/icons/speed60.png ADDED
Binary file
assets/images/icons/speed70.png ADDED
Binary file
assets/images/icons/speed80.png ADDED
Binary file
assets/images/icons/speed90.png ADDED
Binary file
assets/images/icons/speedhump.png ADDED
Binary file
assets/images/icons/spelunking.png ADDED
Binary file
assets/images/icons/stadium.png ADDED
Binary file
assets/images/icons/statue.png ADDED
Binary file
assets/images/icons/steamtrain.png ADDED
Binary file
assets/images/icons/stop.png ADDED
Binary file
assets/images/icons/stoplight.png ADDED
Binary file
assets/images/icons/strike.png ADDED
Binary file
assets/images/icons/strike1.png ADDED
Binary file
assets/images/icons/subway.png ADDED
Binary file
assets/images/icons/sun.png ADDED
Binary file
assets/images/icons/sunday.png ADDED
Binary file
assets/images/icons/supermarket.png ADDED
Binary file
assets/images/icons/surfing.png ADDED
Binary file
assets/images/icons/suv.png ADDED
Binary file
assets/images/icons/synagogue.png ADDED
Binary file
assets/images/icons/tailor.png ADDED
Binary file
assets/images/icons/tapas.png ADDED
Binary file
assets/images/icons/taxi.png ADDED
Binary file
assets/images/icons/taxiway.png ADDED
Binary file
assets/images/icons/teahouse.png ADDED
Binary file
assets/images/icons/telephone.png ADDED
Binary file
assets/images/icons/templehindu.png ADDED
Binary file
assets/images/icons/tennis.png ADDED
Binary file
assets/images/icons/tennis2.png ADDED
Binary file
assets/images/icons/tent.png ADDED
Binary file
assets/images/icons/terrace.png ADDED
Binary file
assets/images/icons/text.png ADDED
Binary file
assets/images/icons/textiles.png ADDED
Binary file
assets/images/icons/theater.png ADDED
Binary file
assets/images/icons/themepark.png ADDED
Binary file
assets/images/icons/thunder.png ADDED
Binary file
assets/images/icons/thursday.png ADDED
Binary file
assets/images/icons/toilets.png ADDED
Binary file
assets/images/icons/tollstation.png ADDED
Binary file
assets/images/icons/tools.png ADDED
Binary file
assets/images/icons/tower.png ADDED
Binary file
assets/images/icons/toys.png ADDED
Binary file
assets/images/icons/trafficenforcementcamera.png ADDED
Binary file
assets/images/icons/train.png ADDED
Binary file
assets/images/icons/tram.png ADDED
Binary file
assets/images/icons/trash.png ADDED
Binary file
assets/images/icons/truck.png ADDED
Binary file
assets/images/icons/tuesday.png ADDED
Binary file
assets/images/icons/tunnel.png ADDED
Binary file
assets/images/icons/turnleft.png ADDED
Binary file
assets/images/icons/turnright.png ADDED
Binary file
assets/images/icons/university.png ADDED
Binary file
assets/images/icons/up.png ADDED
Binary file
assets/images/icons/upleft.png ADDED
Binary file
assets/images/icons/upright.png ADDED
Binary file
assets/images/icons/upthenleft.png ADDED
Binary file
assets/images/icons/upthenright.png ADDED
Binary file
assets/images/icons/usfootball.png ADDED
Binary file
assets/images/icons/vespa.png ADDED
Binary file
assets/images/icons/vet.png ADDED
Binary file
assets/images/icons/video.png ADDED
Binary file
assets/images/icons/videogames.png ADDED
Binary file
assets/images/icons/villa-tourism.png ADDED
Binary file
assets/images/icons/villa.png ADDED
Binary file
assets/images/icons/waitingroom.png ADDED
Binary file
assets/images/icons/water.png ADDED
Binary file
assets/images/icons/waterfall.png ADDED
Binary file
assets/images/icons/watermill.png ADDED
Binary file
assets/images/icons/waterpark.png ADDED
Binary file
assets/images/icons/waterskiing.png ADDED
Binary file
assets/images/icons/watertower.png ADDED
Binary file
assets/images/icons/waterwell.png ADDED
Binary file
assets/images/icons/waterwellpump.png ADDED
Binary file
assets/images/icons/wedding.png ADDED
Binary file
assets/images/icons/wednesday.png ADDED
Binary file
assets/images/icons/wetland.png ADDED
Binary file
assets/images/icons/white1.png ADDED
Binary file
assets/images/icons/white20.png ADDED
Binary file
assets/images/icons/wifi.png ADDED
Binary file
assets/images/icons/windmill.png ADDED
Binary file
assets/images/icons/windsurfing.png ADDED
Binary file
assets/images/icons/windturbine.png ADDED
Binary file
assets/images/icons/winery.png ADDED
Binary file
assets/images/icons/wineyard.png ADDED
Binary file
assets/images/icons/workoffice.png ADDED
Binary file
assets/images/icons/world.png ADDED
Binary file
assets/images/icons/worldheritagesite.png ADDED
Binary file
assets/images/icons/yoga.png ADDED
Binary file
assets/images/icons/youthhostel.png ADDED
Binary file
assets/images/icons/zipline.png ADDED
Binary file
assets/images/icons/zoo.png ADDED
Binary file
assets/images/list.png ADDED
Binary file
assets/images/loader.gif ADDED
Binary file
assets/images/nav.png ADDED
Binary file
assets/images/print.png ADDED
Binary file
assets/images/sort_asc.png ADDED
Binary file
assets/images/sort_asc_disabled.png ADDED
Binary file
assets/images/sort_both.png ADDED
Binary file
assets/images/sort_desc.png ADDED
Binary file
assets/images/sort_desc_disabled.png ADDED
Binary file
assets/images/wpgmp-toggle-sprite.png ADDED
Binary file
assets/js/backend.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ function send_icon_to_map(t,e){wpgmp_image_id=jQuery("#"+e),jQuery(wpgmp_image_id).find(".remove_image").show(),jQuery(wpgmp_image_id).find("img.selected_image").attr("src",t);var r=jQuery(wpgmp_image_id).find(".choose_image").data("target");jQuery(wpgmp_image_id).find('input[name="'+r+'"]').val(t),jQuery("#temp_image").remove(),tb_remove()}function ClusterIcon(t,e){t.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.cluster_=t,this.className_=t.getMarkerClusterer().getClusterClass(),this.styles_=e,this.center_=null,this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(t.getMap())}function Cluster(t){this.markerClusterer_=t,this.map_=t.getMap(),this.gridSize_=t.getGridSize(),this.minClusterSize_=t.getMinimumClusterSize(),this.averageCenter_=t.getAverageCenter(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,t.getStyles())}function MarkerClusterer(t,e,r){this.extend(MarkerClusterer,google.maps.OverlayView),e=e||[],r=r||{},this.markers_=[],this.clusters_=[],this.listeners_=[],this.activeMap_=null,this.ready_=!1,this.gridSize_=r.gridSize||60,this.minClusterSize_=r.minimumClusterSize||2,this.maxZoom_=r.maxZoom||null,this.styles_=r.styles||[],this.title_=r.title||"",this.zoomOnClick_=!0,void 0!==r.zoomOnClick&&(this.zoomOnClick_=r.zoomOnClick),this.averageCenter_=!1,void 0!==r.averageCenter&&(this.averageCenter_=r.averageCenter),this.ignoreHidden_=!1,void 0!==r.ignoreHidden&&(this.ignoreHidden_=r.ignoreHidden),this.enableRetinaIcons_=!1,void 0!==r.enableRetinaIcons&&(this.enableRetinaIcons_=r.enableRetinaIcons),this.imagePath_=r.imagePath||MarkerClusterer.IMAGE_PATH,this.imageExtension_=r.imageExtension||MarkerClusterer.IMAGE_EXTENSION,this.imageSizes_=r.imageSizes||MarkerClusterer.IMAGE_SIZES,this.calculator_=r.calculator||MarkerClusterer.CALCULATOR,this.batchSize_=r.batchSize||MarkerClusterer.BATCH_SIZE,this.batchSizeIE_=r.batchSizeIE||MarkerClusterer.BATCH_SIZE_IE,this.clusterClass_=r.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(this.batchSize_=this.batchSizeIE_),this.setupStyles_(),this.addMarkers(e,!0),this.setMap(t)}jQuery(document).ready(function(t){var e="";t("body").on("click",".repeat_button",function(){for(var e=t(this).parent().parent(),r=t(e).clone(),n=t(r).find("input[type='text']"),a=0;a<n.length;a++){var i=t(n[a]).attr("name"),s=new RegExp(/\[([0-9]+)\]/i),o=s.exec(i),l=parseInt(o[1])+1,u=i.replace(/\[([0-9]+)\]/i,"["+l+"]");t(n[a]).attr("name",u)}t(r).find("input[type='text']").val(""),t(e).find(".repeat_button").text("Remove"),t(e).find(".repeat_button").removeClass("repeat_button").addClass("repeat_remove_button"),t(e).after(t(r))}),t("body").on("click",".repeat_remove_button",function(){var e=t(this).parent().parent(),r=t(e).clone();t(e).remove();var n=t(r).find("input[type='text']");t.each(n,function(){var e=t(this).attr("name"),r=e.replace(/\[([0-9]+)\]/i,"");t.each(t("*[name^='"+r+"']"),function(r){e=t(this).attr("name");var n=e.replace(/\[([0-9]+)\]/i,"["+r+"]");t(this).attr("name",n)})})}),t("span.delete a").click(function(){return confirm("Are you sure to delete item?")?!0:!1}),t("div.wpgmp_form_horizontal .wpgmp_add_more_fields").click(function(){var e=t(".form-group").length+1,r=t('<div class="row form-group"><div class="col-md-8"><input placeholder="Enter name here..." class="form-control" type="text" name="name[]" id="txtbox'+e+'" /></div><div class="col-md-2"><a href="javascript:void(0);" class="btn btn-danger btn-xs wpgmp_remove_more_fields">Remove</a></div></div>');return r.hide(),t(".form-group:last").after(r),r.fadeIn("slow"),!1}),t("div.wpgmp_form_horizontal").on("click",".wpgmp_remove_more_fields",function(){var e=confirm("Are you sure you want to delete ? ");if(1==e){var r=t(this).attr("id");return t(this).parent().parent().css("background-color","#FF6C6C"),t(this).parent().parent().css("padding-top","5px"),t(this).parent().parent().fadeOut("slow",function(){t(this).remove(),t(".label-numbers").each(function(e){t(this).text(e+1)})}),jQuery.ajax({type:"POST",url:wpgmp_local.urlforajax,data:{action:"wpgmp_ajax_operation",id:r},beforeSend:function(){},success:function(){}}),!1}return!1}),window.send_to_editor_default=window.send_to_editor,t(".choose_image").click(function(){var r="icon_hidden_input";return e=t(this).parent().parent().attr("id",r),window.send_to_editor=window.attach_image,tb_show("","media-upload.php?post_ID=0&target="+r+"&type=image&TB_iframe=true"),!1}),window.attach_image=function(r){t("body").append('<div id="temp_image">'+r+"</div>");var n=t("#temp_image").find("img");imgurl=n.attr("src"),imgclass=n.attr("class"),imgid=parseInt(imgclass.replace(/\D/g,""),10),t(e).find(".remove_image").show(),t(e).find("img.selected_image").attr("src",imgurl);var a=t(e).find(".choose_image").data("target");t(e).find('input[name="'+a+'"]').val(imgurl);try{tb_remove()}catch(i){}t("#temp_image").remove(),window.send_to_editor=window.send_to_editor_default},t(".remove_image").click(function(){return e=t(this).parent().parent(),t(e).find(".selected_image").attr("src",""),t(e).find('input[name="'+t(this).data("target")+'"]').val(""),t(this).hide(),!1}),t(".wpgmp_check_backup").click(function(){var e=confirm("Overwrite existing google maps database?.");if(1==e){var r=t(this).data("backup");return t(this).closest("form").find("input[name='row_id']").val(r),t(this).closest("form").find("input[name='operation']").val("import_backup"),t(this).closest("form").submit(),!0}return!1}),t("select[name='map_id']").change(function(){t(this).closest("form").submit()}),t("select[name='filter_location']").change(function(e){e.preventDefault();var r=t(this).val();r>0?(t("tr[class^='filter_group_cat']").hide(),t(".filter_group_cat"+t(this).val()).show("slow")):t("tr[class^='filter_group_cat']").show("slow")}),t(".wpgmp_search_input").keyup(function(){map_id=t(this).attr("rel"),t(".wpgmp_locations_listing[rel='"+map_id+"']").addClass("wpgmp_loading"),wpgmp_filter_locations(map_id,1)}),t(".wpgmp_toggle_container").click(function(){t(".wpgmp_toggle_main_container").toggle("slow"),t(this).text("Hide"==t(this).text()?"Show":"Hide")}),t(".wpgmp_mcurrent_loction").click(function(){wpgmp_get_current_location()}),t(".wpgmp-select-all").click(function(){var e=t(".wpgmp-select-all").prop("checked");e?t(this).closest("table").find(".wpgmp-location-checkbox").prop("checked",!0):t(this).closest("table").find(".wpgmp-location-checkbox").prop("checked",!1)}),t(".wpgmp-location-checkbox").click(function(){t(".wpgmp-location-checkbox").length==t(".wpgmp-location-checkbox:checked").length?t(".wpgmp-select-all").prop("checked",!0):t(".wpgmp-select-all").prop("checked",!1)});{var r=t("#wpgmp_google_map_data_table").dataTable({lengthMenu:[[10,25,50,100,200,500,-1],[10,25,50,100,200,500,"All"]],order:[[1,"desc"]],aoColumns:[{sWidth:"5%",bSortable:!1},{sWidth:"40%"},{sWidth:"30%"},{sWidth:"20%"}]});t("#wpgmp_google_map_route_data_table").dataTable({lengthMenu:[[10,25,50,100,200,500,-1],[10,25,50,100,200,500,"All"]],aoColumns:[{sWidth:"10%"},{sWidth:"35%"},{sWidth:"35%"},{sWidth:"20%"}]})}t('input[name="save_entity_data"]').click(function(){var e=r.$('input[type="checkbox"]:checked'),n=[];return e.length>0&&(t.each(e,function(e,r){n.push(t(r).val())}),t('input[name="map_locations"]').val(n)),!0}),t('select[name="select_all"]').change(function(){"select_all"==t(this).val()?t('input[name="map_locations[]"]').attr("checked",!0):t('input[name="map_locations[]"]').attr("checked",!1)}),t('input[name="save_route_data"]').click(function(){var e=r.$('input[type="checkbox"]:checked'),n=[];return e.length>0&&(t.each(e,function(e,r){n.push(t(r).val())}),t('input[name="route_way_points"]').val(n)),!0}),t(".switch_onoff").change(function(){var e=t(this).data("target");"radio"==t(this).attr("type")&&(t(e).closest(".form-group").hide(),e+="_"+t(this).val()),t(this).is(":checked")?t(e).closest(".form-group").show():(t(e).closest(".form-group").hide(),t(e).hasClass("switch_onoff")&&(t(e).attr("checked",!1),t(e).trigger("change")))}),t.each(t(".switch_onoff"),function(){1==t(this).is(":checked")&&t(this).trigger("change")}),t(".wpgmp-overview .color").wpColorPicker()}),ClusterIcon.prototype.onAdd=function(){var t,e,r=this;this.div_=document.createElement("div"),this.div_.className=this.className_,this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",function(){e=t}),google.maps.event.addDomListener(this.div_,"mousedown",function(){t=!0,e=!1}),google.maps.event.addDomListener(this.div_,"click",function(n){if(t=!1,!e){var a,i,s=r.cluster_.getMarkerClusterer();google.maps.event.trigger(s,"click",r.cluster_),google.maps.event.trigger(s,"clusterclick",r.cluster_),s.getZoomOnClick()&&(i=s.getMaxZoom(),a=r.cluster_.getBounds(),s.getMap().fitBounds(a),setTimeout(function(){s.getMap().fitBounds(a),null!==i&&s.getMap().getZoom()>i&&s.getMap().setZoom(i+1)},100)),n.cancelBubble=!0,n.stopPropagation&&n.stopPropagation()}}),google.maps.event.addDomListener(this.div_,"mouseover",function(){var t=r.cluster_.getMarkerClusterer();google.maps.event.trigger(t,"mouseover",r.cluster_)}),google.maps.event.addDomListener(this.div_,"mouseout",function(){var t=r.cluster_.getMarkerClusterer();google.maps.event.trigger(t,"mouseout",r.cluster_)})},ClusterIcon.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},ClusterIcon.prototype.draw=function(){if(this.visible_){var t=this.getPosFromLatLng_(this.center_);this.div_.style.top=t.y+"px",this.div_.style.left=t.x+"px"}},ClusterIcon.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},ClusterIcon.prototype.show=function(){if(this.div_){var t="",e=this.backgroundPosition_.split(" "),r=parseInt(e[0].replace(/^\s+|\s+$/g,""),10),n=parseInt(e[1].replace(/^\s+|\s+$/g,""),10),a=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(a),t="<img src='"+this.url_+"' style='position: absolute; top: "+n+"px; left: "+r+"px; ",this.cluster_.getMarkerClusterer().enableRetinaIcons_||(t+="clip: rect("+-1*n+"px, "+(-1*r+this.width_)+"px, "+(-1*n+this.height_)+"px, "+-1*r+"px);"),t+="'>",this.div_.innerHTML=t+"<div style='position: absolute;top: "+this.anchorText_[0]+"px;left: "+this.anchorText_[1]+"px;color: "+this.textColor_+";font-size: "+this.textSize_+"px;font-family: "+this.fontFamily_+";font-weight: "+this.fontWeight_+";font-style: "+this.fontStyle_+";text-decoration: "+this.textDecoration_+";text-align: center;width: "+this.width_+"px;line-height:"+this.height_+"px;'>"+this.sums_.text+"</div>",this.div_.title="undefined"==typeof this.sums_.title||""===this.sums_.title?this.cluster_.getMarkerClusterer().getTitle():this.sums_.title,this.div_.style.display=""}this.visible_=!0},ClusterIcon.prototype.useStyle=function(t){this.sums_=t;var e=Math.max(0,t.index-1);e=Math.min(this.styles_.length-1,e);var r=this.styles_[e];this.url_=r.url,this.height_=r.height,this.width_=r.width,this.anchorText_=r.anchorText||[0,0],this.anchorIcon_=r.anchorIcon||[parseInt(this.height_/2,10),parseInt(this.width_/2,10)],this.textColor_=r.textColor||"black",this.textSize_=r.textSize||11,this.textDecoration_=r.textDecoration||"none",this.fontWeight_=r.fontWeight||"bold",this.fontStyle_=r.fontStyle||"normal",this.fontFamily_=r.fontFamily||"Arial,sans-serif",this.backgroundPosition_=r.backgroundPosition||"0 0"},ClusterIcon.prototype.setCenter=function(t){this.center_=t},ClusterIcon.prototype.createCss=function(t){var e=[];return e.push("cursor: pointer;"),e.push("position: absolute; top: "+t.y+"px; left: "+t.x+"px;"),e.push("width: "+this.width_+"px; height: "+this.height_+"px;"),e.join("")},ClusterIcon.prototype.getPosFromLatLng_=function(t){var e=this.getProjection().fromLatLngToDivPixel(t);return e.x-=this.anchorIcon_[1],e.y-=this.anchorIcon_[0],e.x=parseInt(e.x,10),e.y=parseInt(e.y,10),e},Cluster.prototype.getSize=function(){return this.markers_.length},Cluster.prototype.getMarkers=function(){return this.markers_},Cluster.prototype.getCenter=function(){return this.center_},Cluster.prototype.getMap=function(){return this.map_},Cluster.prototype.getMarkerClusterer=function(){return this.markerClusterer_},Cluster.prototype.getBounds=function(){var t,e=new google.maps.LatLngBounds(this.center_,this.center_),r=this.getMarkers();for(t=0;t<r.length;t++)e.extend(r[t].getPosition());return e},Cluster.prototype.remove=function(){this.clusterIcon_.setMap(null),this.markers_=[],delete this.markers_},Cluster.prototype.addMarker=function(t){var e,r,n;if(this.isMarkerAlreadyAdded_(t))return!1;if(this.center_){if(this.averageCenter_){var a=this.markers_.length+1,i=(this.center_.lat()*(a-1)+t.getPosition().lat())/a,s=(this.center_.lng()*(a-1)+t.getPosition().lng())/a;this.center_=new google.maps.LatLng(i,s),this.calculateBounds_()}}else this.center_=t.getPosition(),this.calculateBounds_();if(t.isAdded=!0,this.markers_.push(t),r=this.markers_.length,n=this.markerClusterer_.getMaxZoom(),null!==n&&this.map_.getZoom()>n)t.getMap()!==this.map_&&t.setMap(this.map_);else if(r<this.minClusterSize_)t.getMap()!==this.map_&&t.setMap(this.map_);else if(r===this.minClusterSize_)for(e=0;r>e;e++)this.markers_[e].setMap(null);else t.setMap(null);return this.updateIcon_(),!0},Cluster.prototype.isMarkerInClusterBounds=function(t){return this.bounds_.contains(t.getPosition())},Cluster.prototype.calculateBounds_=function(){var t=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(t)},Cluster.prototype.updateIcon_=function(){var t=this.markers_.length,e=this.markerClusterer_.getMaxZoom();if(null!==e&&this.map_.getZoom()>e)return void this.clusterIcon_.hide();if(t<this.minClusterSize_)return void this.clusterIcon_.hide();var r=this.markerClusterer_.getStyles().length,n=this.markerClusterer_.getCalculator()(this.markers_,r);this.clusterIcon_.setCenter(this.center_),this.clusterIcon_.useStyle(n),this.clusterIcon_.show()},Cluster.prototype.isMarkerAlreadyAdded_=function(t){var e;if(this.markers_.indexOf)return-1!==this.markers_.indexOf(t);for(e=0;e<this.markers_.length;e++)if(t===this.markers_[e])return!0;return!1},MarkerClusterer.prototype.onAdd=function(){var t=this;this.activeMap_=this.getMap(),this.ready_=!0,this.repaint(),this.listeners_=[google.maps.event.addListener(this.getMap(),"zoom_changed",function(){t.resetViewport_(!1),(this.getZoom()===(this.get("minZoom")||0)||this.getZoom()===this.get("maxZoom"))&&google.maps.event.trigger(this,"idle")}),google.maps.event.addListener(this.getMap(),"idle",function(){t.redraw_()})]},MarkerClusterer.prototype.onRemove=function(){var t;for(t=0;t<this.markers_.length;t++)this.markers_[t].getMap()!==this.activeMap_&&this.markers_[t].setMap(this.activeMap_);for(t=0;t<this.clusters_.length;t++)this.clusters_[t].remove();for(this.clusters_=[],t=0;t<this.listeners_.length;t++)google.maps.event.removeListener(this.listeners_[t]);this.listeners_=[],this.activeMap_=null,this.ready_=!1},MarkerClusterer.prototype.draw=function(){},MarkerClusterer.prototype.setupStyles_=function(){var t,e;if(!(this.styles_.length>0))for(t=0;t<this.imageSizes_.length;t++)e=this.imageSizes_[t],this.styles_.push({url:this.imagePath_+(t+1)+"."+this.imageExtension_,height:e,width:e})},MarkerClusterer.prototype.fitMapToMarkers=function(){var t,e=this.getMarkers(),r=new google.maps.LatLngBounds;for(t=0;t<e.length;t++)r.extend(e[t].getPosition());this.getMap().fitBounds(r)},MarkerClusterer.prototype.getGridSize=function(){return this.gridSize_},MarkerClusterer.prototype.setGridSize=function(t){this.gridSize_=t},MarkerClusterer.prototype.getMinimumClusterSize=function(){return this.minClusterSize_},MarkerClusterer.prototype.setMinimumClusterSize=function(t){this.minClusterSize_=t},MarkerClusterer.prototype.getMaxZoom=function(){return this.maxZoom_},MarkerClusterer.prototype.setMaxZoom=function(t){this.maxZoom_=t},MarkerClusterer.prototype.getStyles=function(){return this.styles_},MarkerClusterer.prototype.setStyles=function(t){this.styles_=t},MarkerClusterer.prototype.getTitle=function(){return this.title_},MarkerClusterer.prototype.setTitle=function(t){this.title_=t},MarkerClusterer.prototype.getZoomOnClick=function(){return this.zoomOnClick_},MarkerClusterer.prototype.setZoomOnClick=function(t){this.zoomOnClick_=t},MarkerClusterer.prototype.getAverageCenter=function(){return this.averageCenter_},MarkerClusterer.prototype.setAverageCenter=function(t){this.averageCenter_=t},MarkerClusterer.prototype.getIgnoreHidden=function(){return this.ignoreHidden_},MarkerClusterer.prototype.setIgnoreHidden=function(t){this.ignoreHidden_=t},MarkerClusterer.prototype.getEnableRetinaIcons=function(){return this.enableRetinaIcons_},MarkerClusterer.prototype.setEnableRetinaIcons=function(t){this.enableRetinaIcons_=t},MarkerClusterer.prototype.getImageExtension=function(){return this.imageExtension_},MarkerClusterer.prototype.setImageExtension=function(t){this.imageExtension_=t},MarkerClusterer.prototype.getImagePath=function(){return this.imagePath_},MarkerClusterer.prototype.setImagePath=function(t){this.imagePath_=t},MarkerClusterer.prototype.getImageSizes=function(){return this.imageSizes_},MarkerClusterer.prototype.setImageSizes=function(t){this.imageSizes_=t},MarkerClusterer.prototype.getCalculator=function(){return this.calculator_},MarkerClusterer.prototype.setCalculator=function(t){this.calculator_=t},MarkerClusterer.prototype.getBatchSizeIE=function(){return this.batchSizeIE_},MarkerClusterer.prototype.setBatchSizeIE=function(t){this.batchSizeIE_=t},MarkerClusterer.prototype.getClusterClass=function(){return this.clusterClass_},MarkerClusterer.prototype.setClusterClass=function(t){this.clusterClass_=t},MarkerClusterer.prototype.getMarkers=function(){return this.markers_},MarkerClusterer.prototype.getTotalMarkers=function(){return this.markers_.length},MarkerClusterer.prototype.getClusters=function(){return this.clusters_},MarkerClusterer.prototype.getTotalClusters=function(){return this.clusters_.length},MarkerClusterer.prototype.addMarker=function(t,e){this.pushMarkerTo_(t),e||this.redraw_()},MarkerClusterer.prototype.addMarkers=function(t,e){var r;for(r in t)t.hasOwnProperty(r)&&this.pushMarkerTo_(t[r]);e||this.redraw_()},MarkerClusterer.prototype.pushMarkerTo_=function(t){if(t.getDraggable()){var e=this;google.maps.event.addListener(t,"dragend",function(){e.ready_&&(this.isAdded=!1,e.repaint())})}t.isAdded=!1,this.markers_.push(t)},MarkerClusterer.prototype.removeMarker=function(t,e){var r=this.removeMarker_(t);return!e&&r&&this.repaint(),r},MarkerClusterer.prototype.removeMarkers=function(t,e){var r,n,a=!1;for(r=0;r<t.length;r++)n=this.removeMarker_(t[r]),a=a||n;return!e&&a&&this.repaint(),a},MarkerClusterer.prototype.removeMarker_=function(t){var e,r=-1;if(this.markers_.indexOf)r=this.markers_.indexOf(t);else for(e=0;e<this.markers_.length;e++)if(t===this.markers_[e]){r=e;break}return-1===r?!1:(t.setMap(null),this.markers_.splice(r,1),!0)},MarkerClusterer.prototype.clearMarkers=function(){this.resetViewport_(!0),this.markers_=[]},MarkerClusterer.prototype.repaint=function(){var t=this.clusters_.slice();this.clusters_=[],this.resetViewport_(!1),this.redraw_(),setTimeout(function(){var e;for(e=0;e<t.length;e++)t[e].remove()},0)},MarkerClusterer.prototype.getExtendedBounds=function(t){var e=this.getProjection(),r=new google.maps.LatLng(t.getNorthEast().lat(),t.getNorthEast().lng()),n=new google.maps.LatLng(t.getSouthWest().lat(),t.getSouthWest().lng()),a=e.fromLatLngToDivPixel(r);a.x+=this.gridSize_,a.y-=this.gridSize_;var i=e.fromLatLngToDivPixel(n);i.x-=this.gridSize_,i.y+=this.gridSize_;var s=e.fromDivPixelToLatLng(a),o=e.fromDivPixelToLatLng(i);return t.extend(s),t.extend(o),t},MarkerClusterer.prototype.redraw_=function(){this.createClusters_(0)},MarkerClusterer.prototype.resetViewport_=function(t){var e,r;for(e=0;e<this.clusters_.length;e++)this.clusters_[e].remove();for(this.clusters_=[],e=0;e<this.markers_.length;e++)r=this.markers_[e],r.isAdded=!1,t&&r.setMap(null)},MarkerClusterer.prototype.distanceBetweenPoints_=function(t,e){var r=6371,n=(e.lat()-t.lat())*Math.PI/180,a=(e.lng()-t.lng())*Math.PI/180,i=Math.sin(n/2)*Math.sin(n/2)+Math.cos(t.lat()*Math.PI/180)*Math.cos(e.lat()*Math.PI/180)*Math.sin(a/2)*Math.sin(a/2),s=2*Math.atan2(Math.sqrt(i),Math.sqrt(1-i)),o=r*s;return o},MarkerClusterer.prototype.isMarkerInBounds_=function(t,e){return e.contains(t.getPosition())},MarkerClusterer.prototype.addToClosestCluster_=function(t){var e,r,n,a,i=4e4,s=null;for(e=0;e<this.clusters_.length;e++)n=this.clusters_[e],a=n.getCenter(),a&&(r=this.distanceBetweenPoints_(a,t.getPosition()),i>r&&(i=r,s=n));s&&s.isMarkerInClusterBounds(t)?s.addMarker(t):(n=new Cluster(this),n.addMarker(t),this.clusters_.push(n))},MarkerClusterer.prototype.createClusters_=function(t){var e,r,n,a=this;if(this.ready_){0===t&&(google.maps.event.trigger(this,"clusteringbegin",this),"undefined"!=typeof this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),n=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));var i=this.getExtendedBounds(n),s=Math.min(t+this.batchSize_,this.markers_.length);for(e=t;s>e;e++)r=this.markers_[e],!r.isAdded&&this.isMarkerInBounds_(r,i)&&(!this.ignoreHidden_||this.ignoreHidden_&&r.getVisible())&&this.addToClosestCluster_(r);s<this.markers_.length?this.timerRefStatic=setTimeout(function(){a.createClusters_(s)},0):(delete this.timerRefStatic,google.maps.event.trigger(this,"clusteringend",this))}},MarkerClusterer.prototype.extend=function(t,e){return function(t){var e;for(e in t.prototype)this.prototype[e]=t.prototype[e];return this}.apply(t,[e])},MarkerClusterer.CALCULATOR=function(t,e){for(var r=0,n="",a=t.length.toString(),i=a;0!==i;)i=parseInt(i/10,10),r++;return r=Math.min(r,e),{text:a,index:r,title:n}},MarkerClusterer.BATCH_SIZE=2e3,MarkerClusterer.BATCH_SIZE_IE=500,MarkerClusterer.IMAGE_PATH="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclustererplus/images/m",MarkerClusterer.IMAGE_EXTENSION="png",MarkerClusterer.IMAGE_SIZES=[53,56,66,78,90],function(t,e,r){var n=function(n){function a(t){var e,r,i={};n.each(t,function(n){(e=n.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(e[1]+" ")&&(r=n.replace(e[0],e[2].toLowerCase()),i[r]=n,"o"===e[1]&&a(t[n]))}),t._hungarianMap=i}function i(t,e,s){t._hungarianMap||a(t);var o;n.each(e,function(a){o=t._hungarianMap[a],o===r||!s&&e[o]!==r||("o"===o.charAt(0)?(e[o]||(e[o]={}),n.extend(!0,e[o],e[a]),i(t[o],e[o],s)):e[o]=e[a])})}function s(t){var e=Ve.defaults.oLanguage,r=t.sZeroRecords;!t.sEmptyTable&&r&&"No data available in table"===e.sEmptyTable&&Re(t,t,"sZeroRecords","sEmptyTable"),!t.sLoadingRecords&&r&&"Loading..."===e.sLoadingRecords&&Re(t,t,"sZeroRecords","sLoadingRecords"),t.sInfoThousands&&(t.sThousands=t.sInfoThousands),(t=t.sDecimal)&&Ue(t)}function o(t){if(fr(t,"ordering","bSort"),fr(t,"orderMulti","bSortMulti"),fr(t,"orderClasses","bSortClasses"),fr(t,"orderCellsTop","bSortCellsTop"),fr(t,"order","aaSorting"),fr(t,"orderFixed","aaSortingFixed"),fr(t,"paging","bPaginate"),fr(t,"pagingType","sPaginationType"),fr(t,"pageLength","iDisplayLength"),fr(t,"searching","bFilter"),"boolean"==typeof t.sScrollX&&(t.sScrollX=t.sScrollX?"100%":""),t=t.aoSearchCols)for(var e=0,r=t.length;r>e;e++)t[e]&&i(Ve.models.oSearch,t[e])}function l(t){fr(t,"orderable","bSortable"),fr(t,"orderData","aDataSort"),fr(t,"orderSequence","asSorting"),fr(t,"orderDataType","sortDataType");var e=t.aDataSort;e&&!n.isArray(e)&&(t.aDataSort=[e])}function u(t){var t=t.oBrowser,e=n("<div/>").css({position:"fixed",top:0,left:0,height:1,width:1,overflow:"hidden"}).append(n("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(n('<div class="test"/>').css({width:"100%",height:10}))).appendTo("body"),r=e.find(".test");t.bScrollOversize=100===r[0].offsetWidth,t.bScrollbarLeft=1!==Math.round(r.offset().left),t.bBounding=e[0].getBoundingClientRect().width?!0:!1,e.remove()}function c(t,e,n,a,i,s){var o,l=!1;for(n!==r&&(o=n,l=!0);a!==i;)t.hasOwnProperty(a)&&(o=l?e(o,t[a],a,t):t[a],l=!0,a+=s);return o}function h(t,r){var a=Ve.defaults.column,i=t.aoColumns.length,a=n.extend({},Ve.models.oColumn,a,{nTh:r?r:e.createElement("th"),sTitle:a.sTitle?a.sTitle:r?r.innerHTML:"",aDataSort:a.aDataSort?a.aDataSort:[i],mData:a.mData?a.mData:i,idx:i});t.aoColumns.push(a),a=t.aoPreSearchCols,a[i]=n.extend({},Ve.models.oSearch,a[i]),d(t,i,n(r).data())}function d(t,e,a){var e=t.aoColumns[e],s=t.oClasses,o=n(e.nTh);if(!e.sWidthOrig){e.sWidthOrig=o.attr("width")||null;var u=(o.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);u&&(e.sWidthOrig=u[1])}a!==r&&null!==a&&(l(a),i(Ve.defaults.column,a),a.mDataProp!==r&&!a.mData&&(a.mData=a.mDataProp),a.sType&&(e._sManualType=a.sType),a.className&&!a.sClass&&(a.sClass=a.className),n.extend(e,a),Re(e,a,"sWidth","sWidthOrig"),a.iDataSort!==r&&(e.aDataSort=[a.iDataSort]),Re(e,a,"aDataSort"));var c=e.mData,h=x(c),d=e.mRender?x(e.mRender):null,a=function(t){return"string"==typeof t&&-1!==t.indexOf("@")};e._bAttrSrc=n.isPlainObject(c)&&(a(c.sort)||a(c.type)||a(c.filter)),e.fnGetData=function(t,e,n){var a=h(t,e,r,n);return d&&e?d(a,e,t,n):a},e.fnSetData=function(t,e,r){return T(c)(t,e,r)},"number"!=typeof c&&(t._rowReadObject=!0),t.oFeatures.bSort||(e.bSortable=!1,o.addClass(s.sSortableNone)),t=-1!==n.inArray("asc",e.asSorting),a=-1!==n.inArray("desc",e.asSorting),e.bSortable&&(t||a)?t&&!a?(e.sSortingClass=s.sSortableAsc,e.sSortingClassJUI=s.sSortJUIAscAllowed):!t&&a?(e.sSortingClass=s.sSortableDesc,e.sSortingClassJUI=s.sSortJUIDescAllowed):(e.sSortingClass=s.sSortable,e.sSortingClassJUI=s.sSortJUI):(e.sSortingClass=s.sSortableNone,e.sSortingClassJUI="")}function f(t){if(!1!==t.oFeatures.bAutoWidth){var e=t.aoColumns;me(t);for(var r=0,n=e.length;n>r;r++)e[r].nTh.style.width=e[r].sWidth}e=t.oScroll,(""!==e.sY||""!==e.sX)&&pe(t),Oe(t,null,"column-sizing",[t])}function p(t,e){var r=_(t,"bVisible");return"number"==typeof r[e]?r[e]:null}function g(t,e){var r=_(t,"bVisible"),r=n.inArray(e,r);return-1!==r?r:null}function m(t){return _(t,"bVisible").length}function _(t,e){var r=[];return n.map(t.aoColumns,function(t,n){t[e]&&r.push(n)}),r}function b(t){var e,n,a,i,s,o,l,u,c,h=t.aoColumns,d=t.aoData,f=Ve.ext.type.detect;for(e=0,n=h.length;n>e;e++)if(l=h[e],c=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){for(a=0,i=f.length;i>a;a++){for(s=0,o=d.length;o>s&&(c[s]===r&&(c[s]=C(t,s,e,"type")),u=f[a](c[s],t),u||a===f.length-1)&&"html"!==u;s++);if(u){l.sType=u;break}}l.sType||(l.sType="string")}}function v(t,e,a,i){var s,o,l,u,c,d,f=t.aoColumns;if(e)for(s=e.length-1;s>=0;s--){d=e[s];var p=d.targets!==r?d.targets:d.aTargets;for(n.isArray(p)||(p=[p]),o=0,l=p.length;l>o;o++)if("number"==typeof p[o]&&0<=p[o]){for(;f.length<=p[o];)h(t);i(p[o],d)}else if("number"==typeof p[o]&&0>p[o])i(f.length+p[o],d);else if("string"==typeof p[o])for(u=0,c=f.length;c>u;u++)("_all"==p[o]||n(f[u].nTh).hasClass(p[o]))&&i(u,d)}if(a)for(s=0,t=a.length;t>s;s++)i(s,a[s])}function S(t,e,a,i){var s=t.aoData.length,o=n.extend(!0,{},Ve.models.oRow,{src:a?"dom":"data",idx:s});o._aData=e,t.aoData.push(o);for(var l=t.aoColumns,u=0,c=l.length;c>u;u++)a&&D(t,s,u,C(t,s,u)),l[u].sType=null;return t.aiDisplayMaster.push(s),e=t.rowIdFn(e),e!==r&&(t.aIds[e]=o),(a||!t.oFeatures.bDeferRender)&&P(t,s,a,i),s}function y(t,e){var r;return e instanceof n||(e=n(e)),e.map(function(e,n){return r=L(t,n),S(t,r.data,n,r.cells)})}function C(t,e,n,a){var i=t.iDraw,s=t.aoColumns[n],o=t.aoData[e]._aData,l=s.sDefaultContent,n=s.fnGetData(o,a,{settings:t,row:e,col:n});if(n===r)return t.iDrawError!=i&&null===l&&(Fe(t,0,"Requested unknown parameter "+("function"==typeof s.mData?"{function}":"'"+s.mData+"'")+" for row "+e,4),t.iDrawError=i),l;if(n!==o&&null!==n||null===l){if("function"==typeof n)return n.call(o)}else n=l;return null===n&&"display"==a?"":n}function D(t,e,r,n){t.aoColumns[r].fnSetData(t.aoData[e]._aData,n,{settings:t,row:e,col:r})}function w(t){return n.map(t.match(/(\\.|[^\.])+/g)||[""],function(t){return t.replace(/\\./g,".")})}function x(t){if(n.isPlainObject(t)){var e={};return n.each(t,function(t,r){r&&(e[t]=x(r))}),function(t,n,a,i){var s=e[n]||e._;return s!==r?s(t,n,a,i):t}}if(null===t)return function(t){return t};if("function"==typeof t)return function(e,r,n,a){return t(e,r,n,a)};if("string"==typeof t&&(-1!==t.indexOf(".")||-1!==t.indexOf("[")||-1!==t.indexOf("("))){var a=function(t,e,n){var i,s;if(""!==n){s=w(n);for(var o=0,l=s.length;l>o;o++){if(n=s[o].match(pr),i=s[o].match(gr),n){for(s[o]=s[o].replace(pr,""),""!==s[o]&&(t=t[s[o]]),i=[],s.splice(0,o+1),s=s.join("."),o=0,l=t.length;l>o;o++)i.push(a(t[o],e,s));t=n[0].substring(1,n[0].length-1),t=""===t?i:i.join(t);break}if(i)s[o]=s[o].replace(gr,""),t=t[s[o]]();else{if(null===t||t[s[o]]===r)return r;t=t[s[o]]}}}return t};return function(e,r){return a(e,r,t)}}return function(e){return e[t]}}function T(t){if(n.isPlainObject(t))return T(t._);if(null===t)return function(){};if("function"==typeof t)return function(e,r,n){t(e,"set",r,n)};if("string"==typeof t&&(-1!==t.indexOf(".")||-1!==t.indexOf("[")||-1!==t.indexOf("("))){var e=function(t,n,a){var i,a=w(a);i=a[a.length-1];for(var s,o,l=0,u=a.length-1;u>l;l++){if(s=a[l].match(pr),o=a[l].match(gr),s){for(a[l]=a[l].replace(pr,""),t[a[l]]=[],i=a.slice(),i.splice(0,l+1),s=i.join("."),o=0,u=n.length;u>o;o++)i={},e(i,n[o],s),t[a[l]].push(i);return}o&&(a[l]=a[l].replace(gr,""),t=t[a[l]](n)),(null===t[a[l]]||t[a[l]]===r)&&(t[a[l]]={}),t=t[a[l]]}i.match(gr)?t[i.replace(gr,"")](n):t[i.replace(pr,"")]=n};return function(r,n){return e(r,n,t)}}return function(e,r){e[t]=r}}function I(t){return lr(t.aoData,"_aData")}function k(t){t.aoData.length=0,t.aiDisplayMaster.length=0,t.aiDisplay.length=0}function M(t,e,n){for(var a=-1,i=0,s=t.length;s>i;i++)t[i]==e?a=i:t[i]>e&&t[i]--;-1!=a&&n===r&&t.splice(a,1)}function A(t,e,n,a){var i,s=t.aoData[e],o=function(r,n){for(;r.childNodes.length;)r.removeChild(r.firstChild);r.innerHTML=C(t,e,n,"display")};if("dom"!==n&&(n&&"auto"!==n||"dom"!==s.src)){var l=s.anCells;if(l)if(a!==r)o(l[a],a);else for(n=0,i=l.length;i>n;n++)o(l[n],n)}else s._aData=L(t,s,a,a===r?r:s._aData).data;if(s._aSortData=null,s._aFilterData=null,o=t.aoColumns,a!==r)o[a].sType=null;else{for(n=0,i=o.length;i>n;n++)o[n].sType=null;F(t,s)}}function L(t,e,a,i){var s,o,l,u=[],c=e.firstChild,h=0,d=t.aoColumns,f=t._rowReadObject,i=i||f?{}:[],p=function(t,e){if("string"==typeof t){var r=t.indexOf("@");-1!==r&&(r=t.substring(r+1),T(t)(i,e.getAttribute(r)))}},g=function(t){(a===r||a===h)&&(o=d[h],l=n.trim(t.innerHTML),o&&o._bAttrSrc?(T(o.mData._)(i,l),p(o.mData.sort,t),p(o.mData.type,t),p(o.mData.filter,t)):f?(o._setter||(o._setter=T(o.mData)),o._setter(i,l)):i[h]=l),h++};if(c)for(;c;)s=c.nodeName.toUpperCase(),("TD"==s||"TH"==s)&&(g(c),u.push(c)),c=c.nextSibling;else for(u=e.anCells,c=0,s=u.length;s>c;c++)g(u[c]);return(e=e.getAttribute("id"))&&T(t.rowId)(i,e),{data:i,cells:u}}function P(t,r,n,a){var i,s,o,l,u,c=t.aoData[r],h=c._aData,d=[];if(null===c.nTr){for(i=n||e.createElement("tr"),c.nTr=i,c.anCells=d,i._DT_RowIndex=r,F(t,c),l=0,u=t.aoColumns.length;u>l;l++)o=t.aoColumns[l],s=n?a[l]:e.createElement(o.sCellType),d.push(s),(!n||o.mRender||o.mData!==l)&&(s.innerHTML=C(t,r,l,"display")),o.sClass&&(s.className+=" "+o.sClass),o.bVisible&&!n?i.appendChild(s):!o.bVisible&&n&&s.parentNode.removeChild(s),o.fnCreatedCell&&o.fnCreatedCell.call(t.oInstance,s,C(t,r,l),h,r,l);
2
+ Oe(t,"aoRowCreatedCallback",null,[i,h,r])}c.nTr.setAttribute("role","row")}function F(t,e){var r=e.nTr,a=e._aData;if(r){var i=t.rowIdFn(a);i&&(r.id=i),a.DT_RowClass&&(i=a.DT_RowClass.split(" "),e.__rowc=e.__rowc?dr(e.__rowc.concat(i)):i,n(r).removeClass(e.__rowc.join(" ")).addClass(a.DT_RowClass)),a.DT_RowAttr&&n(r).attr(a.DT_RowAttr),a.DT_RowData&&n(r).data(a.DT_RowData)}}function R(t){var e,r,a,i,s,o=t.nTHead,l=t.nTFoot,u=0===n("th, td",o).length,c=t.oClasses,h=t.aoColumns;for(u&&(i=n("<tr/>").appendTo(o)),e=0,r=h.length;r>e;e++)s=h[e],a=n(s.nTh).addClass(s.sClass),u&&a.appendTo(i),t.oFeatures.bSort&&(a.addClass(s.sSortingClass),!1!==s.bSortable&&(a.attr("tabindex",t.iTabIndex).attr("aria-controls",t.sTableId),Ie(t,s.nTh,e))),s.sTitle!=a[0].innerHTML&&a.html(s.sTitle),Be(t,"header")(t,a,s,c);if(u&&N(t.aoHeader,o),n(o).find(">tr").attr("role","row"),n(o).find(">tr>th, >tr>td").addClass(c.sHeaderTH),n(l).find(">tr>th, >tr>td").addClass(c.sFooterTH),null!==l)for(t=t.aoFooter[0],e=0,r=t.length;r>e;e++)s=h[e],s.nTf=t[e].cell,s.sClass&&n(s.nTf).addClass(s.sClass)}function j(t,e,a){var i,s,o,l,u=[],c=[],h=t.aoColumns.length;if(e){for(a===r&&(a=!1),i=0,s=e.length;s>i;i++){for(u[i]=e[i].slice(),u[i].nTr=e[i].nTr,o=h-1;o>=0;o--)!t.aoColumns[o].bVisible&&!a&&u[i].splice(o,1);c.push([])}for(i=0,s=u.length;s>i;i++){if(t=u[i].nTr)for(;o=t.firstChild;)t.removeChild(o);for(o=0,e=u[i].length;e>o;o++)if(l=h=1,c[i][o]===r){for(t.appendChild(u[i][o].cell),c[i][o]=1;u[i+h]!==r&&u[i][o].cell==u[i+h][o].cell;)c[i+h][o]=1,h++;for(;u[i][o+l]!==r&&u[i][o].cell==u[i][o+l].cell;){for(a=0;h>a;a++)c[i+a][o+l]=1;l++}n(u[i][o].cell).attr("rowspan",h).attr("colspan",l)}}}}function H(t){var e=Oe(t,"aoPreDrawCallback","preDraw",[t]);if(-1!==n.inArray(!1,e))de(t,!1);else{var e=[],a=0,i=t.asStripeClasses,s=i.length,o=t.oLanguage,l=t.iInitDisplayStart,u="ssp"==We(t),c=t.aiDisplay;t.bDrawing=!0,l!==r&&-1!==l&&(t._iDisplayStart=u?l:l>=t.fnRecordsDisplay()?0:l,t.iInitDisplayStart=-1);var l=t._iDisplayStart,h=t.fnDisplayEnd();if(t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,de(t,!1);else if(u){if(!t.bDestroying&&!z(t))return}else t.iDraw++;if(0!==c.length)for(o=u?t.aoData.length:h,u=u?0:l;o>u;u++){var d=c[u],f=t.aoData[d];if(null===f.nTr&&P(t,d),d=f.nTr,0!==s){var p=i[a%s];f._sRowStripe!=p&&(n(d).removeClass(f._sRowStripe).addClass(p),f._sRowStripe=p)}Oe(t,"aoRowCallback",null,[d,f._aData,a,u]),e.push(d),a++}else a=o.sZeroRecords,1==t.iDraw&&"ajax"==We(t)?a=o.sLoadingRecords:o.sEmptyTable&&0===t.fnRecordsTotal()&&(a=o.sEmptyTable),e[0]=n("<tr/>",{"class":s?i[0]:""}).append(n("<td />",{valign:"top",colSpan:m(t),"class":t.oClasses.sRowEmpty}).html(a))[0];Oe(t,"aoHeaderCallback","header",[n(t.nTHead).children("tr")[0],I(t),l,h,c]),Oe(t,"aoFooterCallback","footer",[n(t.nTFoot).children("tr")[0],I(t),l,h,c]),i=n(t.nTBody),i.children().detach(),i.append(n(e)),Oe(t,"aoDrawCallback","draw",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}}function E(t,e){var r=t.oFeatures,n=r.bFilter;r.bSort&&we(t),n?Z(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),!0!==e&&(t._iDisplayStart=0),t._drawHold=e,H(t),t._drawHold=!1}function O(t){var e=t.oClasses,r=n(t.nTable),r=n("<div/>").insertBefore(r),a=t.oFeatures,i=n("<div/>",{id:t.sTableId+"_wrapper","class":e.sWrapper+(t.nTFoot?"":" "+e.sNoFooter)});t.nHolding=r[0],t.nTableWrapper=i[0],t.nTableReinsertBefore=t.nTable.nextSibling;for(var s,o,l,u,c,h,d=t.sDom.split(""),f=0;f<d.length;f++){if(s=null,o=d[f],"<"==o){if(l=n("<div/>")[0],u=d[f+1],"'"==u||'"'==u){for(c="",h=2;d[f+h]!=u;)c+=d[f+h],h++;"H"==c?c=e.sJUIHeader:"F"==c&&(c=e.sJUIFooter),-1!=c.indexOf(".")?(u=c.split("."),l.id=u[0].substr(1,u[0].length-1),l.className=u[1]):"#"==c.charAt(0)?l.id=c.substr(1,c.length-1):l.className=c,f+=h}i.append(l),i=n(l)}else if(">"==o)i=i.parent();else if("l"==o&&a.bPaginate&&a.bLengthChange)s=le(t);else if("f"==o&&a.bFilter)s=X(t);else if("r"==o&&a.bProcessing)s=he(t);else if("t"==o)s=fe(t);else if("i"==o&&a.bInfo)s=re(t);else if("p"==o&&a.bPaginate)s=ue(t);else if(0!==Ve.ext.feature.length)for(l=Ve.ext.feature,h=0,u=l.length;u>h;h++)if(o==l[h].cFeature){s=l[h].fnInit(t);break}s&&(l=t.aanFeatures,l[o]||(l[o]=[]),l[o].push(s),i.append(s))}r.replaceWith(i),t.nHolding=null}function N(t,e){var r,a,i,s,o,l,u,c,h,d,f=n(e).children("tr");for(t.splice(0,t.length),i=0,l=f.length;l>i;i++)t.push([]);for(i=0,l=f.length;l>i;i++)for(r=f[i],a=r.firstChild;a;){if("TD"==a.nodeName.toUpperCase()||"TH"==a.nodeName.toUpperCase()){for(c=1*a.getAttribute("colspan"),h=1*a.getAttribute("rowspan"),c=c&&0!==c&&1!==c?c:1,h=h&&0!==h&&1!==h?h:1,s=0,o=t[i];o[s];)s++;for(u=s,d=1===c?!0:!1,o=0;c>o;o++)for(s=0;h>s;s++)t[i+s][u+o]={cell:a,unique:d},t[i+s].nTr=r}a=a.nextSibling}}function B(t,e,r){var n=[];r||(r=t.aoHeader,e&&(r=[],N(r,e)));for(var e=0,a=r.length;a>e;e++)for(var i=0,s=r[e].length;s>i;i++)!r[e][i].unique||n[i]&&t.bSortCellsTop||(n[i]=r[e][i].cell);return n}function W(t,e,r){if(Oe(t,"aoServerParams","serverParams",[e]),e&&n.isArray(e)){var a={},i=/(.*?)\[\]$/;n.each(e,function(t,e){var r=e.name.match(i);r?(r=r[0],a[r]||(a[r]=[]),a[r].push(e.value)):a[e.name]=e.value}),e=a}var s,o=t.ajax,l=t.oInstance,u=function(e){Oe(t,null,"xhr",[t,e,t.jqXHR]),r(e)};if(n.isPlainObject(o)&&o.data){s=o.data;var c=n.isFunction(s)?s(e,t):s,e=n.isFunction(s)&&c?c:n.extend(!0,e,c);delete o.data}c={data:e,success:function(e){var r=e.error||e.sError;r&&Fe(t,0,r),t.json=e,u(e)},dataType:"json",cache:!1,type:t.sServerMethod,error:function(e,r){var a=Oe(t,null,"xhr",[t,null,t.jqXHR]);-1===n.inArray(!0,a)&&("parsererror"==r?Fe(t,0,"Invalid JSON response",1):4===e.readyState&&Fe(t,0,"Ajax error",7)),de(t,!1)}},t.oAjaxData=e,Oe(t,null,"preXhr",[t,e]),t.fnServerData?t.fnServerData.call(l,t.sAjaxSource,n.map(e,function(t,e){return{name:e,value:t}}),u,t):t.sAjaxSource||"string"==typeof o?t.jqXHR=n.ajax(n.extend(c,{url:o||t.sAjaxSource})):n.isFunction(o)?t.jqXHR=o.call(l,e,u,t):(t.jqXHR=n.ajax(n.extend(c,o)),o.data=s)}function z(t){return t.bAjaxDataGet?(t.iDraw++,de(t,!0),W(t,U(t),function(e){J(t,e)}),!1):!0}function U(t){var e,r,a,i,s=t.aoColumns,o=s.length,l=t.oFeatures,u=t.oPreviousSearch,c=t.aoPreSearchCols,h=[],d=De(t);e=t._iDisplayStart,r=!1!==l.bPaginate?t._iDisplayLength:-1;var f=function(t,e){h.push({name:t,value:e})};f("sEcho",t.iDraw),f("iColumns",o),f("sColumns",lr(s,"sName").join(",")),f("iDisplayStart",e),f("iDisplayLength",r);var p={draw:t.iDraw,columns:[],order:[],start:e,length:r,search:{value:u.sSearch,regex:u.bRegex}};for(e=0;o>e;e++)a=s[e],i=c[e],r="function"==typeof a.mData?"function":a.mData,p.columns.push({data:r,name:a.sName,searchable:a.bSearchable,orderable:a.bSortable,search:{value:i.sSearch,regex:i.bRegex}}),f("mDataProp_"+e,r),l.bFilter&&(f("sSearch_"+e,i.sSearch),f("bRegex_"+e,i.bRegex),f("bSearchable_"+e,a.bSearchable)),l.bSort&&f("bSortable_"+e,a.bSortable);return l.bFilter&&(f("sSearch",u.sSearch),f("bRegex",u.bRegex)),l.bSort&&(n.each(d,function(t,e){p.order.push({column:e.col,dir:e.dir}),f("iSortCol_"+t,e.col),f("sSortDir_"+t,e.dir)}),f("iSortingCols",d.length)),s=Ve.ext.legacy.ajax,null===s?t.sAjaxSource?h:p:s?h:p}function J(t,e){var n=V(t,e),a=e.sEcho!==r?e.sEcho:e.draw,i=e.iTotalRecords!==r?e.iTotalRecords:e.recordsTotal,s=e.iTotalDisplayRecords!==r?e.iTotalDisplayRecords:e.recordsFiltered;if(a){if(1*a<t.iDraw)return;t.iDraw=1*a}for(k(t),t._iRecordsTotal=parseInt(i,10),t._iRecordsDisplay=parseInt(s,10),a=0,i=n.length;i>a;a++)S(t,n[a]);t.aiDisplay=t.aiDisplayMaster.slice(),t.bAjaxDataGet=!1,H(t),t._bInitComplete||se(t,e),t.bAjaxDataGet=!0,de(t,!1)}function V(t,e){var a=n.isPlainObject(t.ajax)&&t.ajax.dataSrc!==r?t.ajax.dataSrc:t.sAjaxDataProp;return"data"===a?e.aaData||e[a]:""!==a?x(a)(e):e}function X(t){var r=t.oClasses,a=t.sTableId,i=t.oLanguage,s=t.oPreviousSearch,o=t.aanFeatures,l='<input type="search" class="'+r.sFilterInput+'"/>',u=i.sSearch,u=u.match(/_INPUT_/)?u.replace("_INPUT_",l):u+l,r=n("<div/>",{id:o.f?null:a+"_filter","class":r.sFilter}).append(n("<label/>").append(u)),o=function(){var e=this.value?this.value:"";e!=s.sSearch&&(Z(t,{sSearch:e,bRegex:s.bRegex,bSmart:s.bSmart,bCaseInsensitive:s.bCaseInsensitive}),t._iDisplayStart=0,H(t))},l=null!==t.searchDelay?t.searchDelay:"ssp"===We(t)?400:0,c=n("input",r).val(s.sSearch).attr("placeholder",i.sSearchPlaceholder).bind("keyup.DT search.DT input.DT paste.DT cut.DT",l?_e(o,l):o).bind("keypress.DT",function(t){return 13==t.keyCode?!1:void 0}).attr("aria-controls",a);return n(t.nTable).on("search.dt.DT",function(r,n){if(t===n)try{c[0]!==e.activeElement&&c.val(s.sSearch)}catch(a){}}),r[0]}function Z(t,e,n){var a=t.oPreviousSearch,i=t.aoPreSearchCols,s=function(t){a.sSearch=t.sSearch,a.bRegex=t.bRegex,a.bSmart=t.bSmart,a.bCaseInsensitive=t.bCaseInsensitive};if(b(t),"ssp"!=We(t)){for($(t,e.sSearch,n,e.bEscapeRegex!==r?!e.bEscapeRegex:e.bRegex,e.bSmart,e.bCaseInsensitive),s(e),e=0;e<i.length;e++)q(t,i[e].sSearch,e,i[e].bEscapeRegex!==r?!i[e].bEscapeRegex:i[e].bRegex,i[e].bSmart,i[e].bCaseInsensitive);G(t)}else s(e);t.bFiltered=!0,Oe(t,null,"search",[t])}function G(t){for(var e,r,n=Ve.ext.search,a=t.aiDisplay,i=0,s=n.length;s>i;i++){for(var o=[],l=0,u=a.length;u>l;l++)r=a[l],e=t.aoData[r],n[i](t,e._aFilterData,r,e._aData,l)&&o.push(r);a.length=0,a.push.apply(a,o)}}function q(t,e,r,n,a,i){if(""!==e)for(var s=t.aiDisplay,n=Q(e,n,a,i),a=s.length-1;a>=0;a--)e=t.aoData[s[a]]._aFilterData[r],n.test(e)||s.splice(a,1)}function $(t,e,r,n,a,i){var s,n=Q(e,n,a,i),a=t.oPreviousSearch.sSearch,i=t.aiDisplayMaster;if(0!==Ve.ext.search.length&&(r=!0),s=K(t),0>=e.length)t.aiDisplay=i.slice();else for((s||r||a.length>e.length||0!==e.indexOf(a)||t.bSorted)&&(t.aiDisplay=i.slice()),e=t.aiDisplay,r=e.length-1;r>=0;r--)n.test(t.aoData[e[r]]._sFilterRow)||e.splice(r,1)}function Q(t,e,r,a){return t=e?t:Y(t),r&&(t="^(?=.*?"+n.map(t.match(/"[^"]+"|[^ ]+/g)||[""],function(t){if('"'===t.charAt(0))var e=t.match(/^"(.*)"$/),t=e?e[1]:t;return t.replace('"',"")}).join(")(?=.*?")+").*$"),RegExp(t,a?"i":"")}function Y(t){return t.replace(er,"\\$1")}function K(t){var e,r,n,a,i,s,o,l,u=t.aoColumns,c=Ve.ext.type.search;for(e=!1,r=0,a=t.aoData.length;a>r;r++)if(l=t.aoData[r],!l._aFilterData){for(s=[],n=0,i=u.length;i>n;n++)e=u[n],e.bSearchable?(o=C(t,r,n,"filter"),c[e.sType]&&(o=c[e.sType](o)),null===o&&(o=""),"string"!=typeof o&&o.toString&&(o=o.toString())):o="",o.indexOf&&-1!==o.indexOf("&")&&(mr.innerHTML=o,o=_r?mr.textContent:mr.innerText),o.replace&&(o=o.replace(/[\r\n]/g,"")),s.push(o);l._aFilterData=s,l._sFilterRow=s.join(" "),e=!0}return e}function te(t){return{search:t.sSearch,smart:t.bSmart,regex:t.bRegex,caseInsensitive:t.bCaseInsensitive}}function ee(t){return{sSearch:t.search,bSmart:t.smart,bRegex:t.regex,bCaseInsensitive:t.caseInsensitive}}function re(t){var e=t.sTableId,r=t.aanFeatures.i,a=n("<div/>",{"class":t.oClasses.sInfo,id:r?null:e+"_info"});return r||(t.aoDrawCallback.push({fn:ne,sName:"information"}),a.attr("role","status").attr("aria-live","polite"),n(t.nTable).attr("aria-describedby",e+"_info")),a[0]}function ne(t){var e=t.aanFeatures.i;if(0!==e.length){var r=t.oLanguage,a=t._iDisplayStart+1,i=t.fnDisplayEnd(),s=t.fnRecordsTotal(),o=t.fnRecordsDisplay(),l=o?r.sInfo:r.sInfoEmpty;o!==s&&(l+=" "+r.sInfoFiltered),l+=r.sInfoPostFix,l=ae(t,l),r=r.fnInfoCallback,null!==r&&(l=r.call(t.oInstance,t,a,i,s,o,l)),n(e).html(l)}}function ae(t,e){var r=t.fnFormatNumber,n=t._iDisplayStart+1,a=t._iDisplayLength,i=t.fnRecordsDisplay(),s=-1===a;return e.replace(/_START_/g,r.call(t,n)).replace(/_END_/g,r.call(t,t.fnDisplayEnd())).replace(/_MAX_/g,r.call(t,t.fnRecordsTotal())).replace(/_TOTAL_/g,r.call(t,i)).replace(/_PAGE_/g,r.call(t,s?1:Math.ceil(n/a))).replace(/_PAGES_/g,r.call(t,s?1:Math.ceil(i/a)))}function ie(t){var e,r,n,a=t.iInitDisplayStart,i=t.aoColumns;r=t.oFeatures;var s=t.bDeferLoading;if(t.bInitialised){for(O(t),R(t),j(t,t.aoHeader),j(t,t.aoFooter),de(t,!0),r.bAutoWidth&&me(t),e=0,r=i.length;r>e;e++)n=i[e],n.sWidth&&(n.nTh.style.width=ye(n.sWidth));Oe(t,null,"preInit",[t]),E(t),i=We(t),("ssp"!=i||s)&&("ajax"==i?W(t,[],function(r){var n=V(t,r);for(e=0;e<n.length;e++)S(t,n[e]);t.iInitDisplayStart=a,E(t),de(t,!1),se(t,r)},t):(de(t,!1),se(t)))}else setTimeout(function(){ie(t)},200)}function se(t,e){t._bInitComplete=!0,(e||t.oInit.aaData)&&f(t),Oe(t,"aoInitComplete","init",[t,e])}function oe(t,e){var r=parseInt(e,10);t._iDisplayLength=r,Ne(t),Oe(t,null,"length",[t,r])}function le(t){for(var e=t.oClasses,r=t.sTableId,a=t.aLengthMenu,i=n.isArray(a[0]),s=i?a[0]:a,a=i?a[1]:a,i=n("<select/>",{name:r+"_length","aria-controls":r,"class":e.sLengthSelect}),o=0,l=s.length;l>o;o++)i[0][o]=new Option(a[o],s[o]);var u=n("<div><label/></div>").addClass(e.sLength);return t.aanFeatures.l||(u[0].id=r+"_length"),u.children().append(t.oLanguage.sLengthMenu.replace("_MENU_",i[0].outerHTML)),n("select",u).val(t._iDisplayLength).bind("change.DT",function(){oe(t,n(this).val()),H(t)}),n(t.nTable).bind("length.dt.DT",function(e,r,a){t===r&&n("select",u).val(a)}),u[0]}function ue(t){var e=t.sPaginationType,r=Ve.ext.pager[e],a="function"==typeof r,i=function(t){H(t)},e=n("<div/>").addClass(t.oClasses.sPaging+e)[0],s=t.aanFeatures;return a||r.fnInit(t,e,i),s.p||(e.id=t.sTableId+"_paginate",t.aoDrawCallback.push({fn:function(t){if(a){var e,n=t._iDisplayStart,o=t._iDisplayLength,l=t.fnRecordsDisplay(),u=-1===o,n=u?0:Math.ceil(n/o),o=u?1:Math.ceil(l/o),l=r(n,o),u=0;for(e=s.p.length;e>u;u++)Be(t,"pageButton")(t,s.p[u],u,l,n,o)}else r.fnUpdate(t,i)},sName:"pagination"})),e}function ce(t,e,r){var n=t._iDisplayStart,a=t._iDisplayLength,i=t.fnRecordsDisplay();return 0===i||-1===a?n=0:"number"==typeof e?(n=e*a,n>i&&(n=0)):"first"==e?n=0:"previous"==e?(n=a>=0?n-a:0,0>n&&(n=0)):"next"==e?i>n+a&&(n+=a):"last"==e?n=Math.floor((i-1)/a)*a:Fe(t,0,"Unknown paging action: "+e,5),e=t._iDisplayStart!==n,t._iDisplayStart=n,e&&(Oe(t,null,"page",[t]),r&&H(t)),e}function he(t){return n("<div/>",{id:t.aanFeatures.r?null:t.sTableId+"_processing","class":t.oClasses.sProcessing}).html(t.oLanguage.sProcessing).insertBefore(t.nTable)[0]}function de(t,e){t.oFeatures.bProcessing&&n(t.aanFeatures.r).css("display",e?"block":"none"),Oe(t,null,"processing",[t,e])}function fe(t){var e=n(t.nTable);e.attr("role","grid");var r=t.oScroll;if(""===r.sX&&""===r.sY)return t.nTable;var a=r.sX,i=r.sY,s=t.oClasses,o=e.children("caption"),l=o.length?o[0]._captionSide:null,u=n(e[0].cloneNode(!1)),c=n(e[0].cloneNode(!1)),h=e.children("tfoot");r.sX&&"100%"===e.attr("width")&&e.removeAttr("width"),h.length||(h=null),u=n("<div/>",{"class":s.sScrollWrapper}).append(n("<div/>",{"class":s.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:a?a?ye(a):null:"100%"}).append(n("<div/>",{"class":s.sScrollHeadInner}).css({"box-sizing":"content-box",width:r.sXInner||"100%"}).append(u.removeAttr("id").css("margin-left",0).append("top"===l?o:null).append(e.children("thead"))))).append(n("<div/>",{"class":s.sScrollBody}).css({position:"relative",overflow:"auto",width:a?ye(a):null}).append(e)),h&&u.append(n("<div/>",{"class":s.sScrollFoot}).css({overflow:"hidden",border:0,width:a?a?ye(a):null:"100%"}).append(n("<div/>",{"class":s.sScrollFootInner}).append(c.removeAttr("id").css("margin-left",0).append("bottom"===l?o:null).append(e.children("tfoot")))));var e=u.children(),d=e[0],s=e[1],f=h?e[2]:null;return a&&n(s).on("scroll.DT",function(){var t=this.scrollLeft;d.scrollLeft=t,h&&(f.scrollLeft=t)}),n(s).css(i&&r.bCollapse?"max-height":"height",i),t.nScrollHead=d,t.nScrollBody=s,t.nScrollFoot=f,t.aoDrawCallback.push({fn:pe,sName:"scrolling"}),u[0]}function pe(t){var e,r,a,i,s,o=t.oScroll,l=o.sX,u=o.sXInner,c=o.sY,o=o.iBarWidth,h=n(t.nScrollHead),d=h[0].style,f=h.children("div"),g=f[0].style,m=f.children("table"),f=t.nScrollBody,_=n(f),b=f.style,v=n(t.nScrollFoot).children("div"),S=v.children("table"),y=n(t.nTHead),C=n(t.nTable),D=C[0],w=D.style,x=t.nTFoot?n(t.nTFoot):null,T=t.oBrowser,I=T.bScrollOversize,k=[],M=[],A=[],L=function(t){t=t.style,t.paddingTop="0",t.paddingBottom="0",t.borderTopWidth="0",t.borderBottomWidth="0",t.height=0};C.children("thead, tfoot").remove(),i=y.clone().prependTo(C),y=y.find("tr"),r=i.find("tr"),i.find("th, td").removeAttr("tabindex"),x&&(a=x.clone().prependTo(C),e=x.find("tr"),a=a.find("tr")),l||(b.width="100%",h[0].style.width="100%"),n.each(B(t,i),function(e,r){s=p(t,e),r.style.width=t.aoColumns[s].sWidth}),x&&ge(function(t){t.style.width=""},a),h=C.outerWidth(),""===l?(w.width="100%",I&&(C.find("tbody").height()>f.offsetHeight||"scroll"==_.css("overflow-y"))&&(w.width=ye(C.outerWidth()-o)),h=C.outerWidth()):""!==u&&(w.width=ye(u),h=C.outerWidth()),ge(L,r),ge(function(t){A.push(t.innerHTML),k.push(ye(n(t).css("width")))},r),ge(function(t,e){t.style.width=k[e]},y),n(r).height(0),x&&(ge(L,a),ge(function(t){M.push(ye(n(t).css("width")))},a),ge(function(t,e){t.style.width=M[e]},e),n(a).height(0)),ge(function(t,e){t.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+A[e]+"</div>",t.style.width=k[e]},r),x&&ge(function(t,e){t.innerHTML="",t.style.width=M[e]},a),C.outerWidth()<h?(e=f.scrollHeight>f.offsetHeight||"scroll"==_.css("overflow-y")?h+o:h,I&&(f.scrollHeight>f.offsetHeight||"scroll"==_.css("overflow-y"))&&(w.width=ye(e-o)),(""===l||""!==u)&&Fe(t,1,"Possible column misalignment",6)):e="100%",b.width=ye(e),d.width=ye(e),x&&(t.nScrollFoot.style.width=ye(e)),!c&&I&&(b.height=ye(D.offsetHeight+o)),l=C.outerWidth(),m[0].style.width=ye(l),g.width=ye(l),u=C.height()>f.clientHeight||"scroll"==_.css("overflow-y"),c="padding"+(T.bScrollbarLeft?"Left":"Right"),g[c]=u?o+"px":"0px",x&&(S[0].style.width=ye(l),v[0].style.width=ye(l),v[0].style[c]=u?o+"px":"0px"),_.scroll(),!t.bSorted&&!t.bFiltered||t._drawHold||(f.scrollTop=0)}function ge(t,e,r){for(var n,a,i=0,s=0,o=e.length;o>s;){for(n=e[s].firstChild,a=r?r[s].firstChild:null;n;)1===n.nodeType&&(r?t(n,a,i):t(n,i),i++),n=n.nextSibling,a=r?a.nextSibling:null;s++}}function me(e){var r,a,i,s=e.nTable,o=e.aoColumns,l=e.oScroll,u=l.sY,c=l.sX,h=l.sXInner,d=o.length,p=_(e,"bVisible"),g=n("th",e.nTHead),b=s.getAttribute("width"),v=s.parentNode,S=!1;for(i=e.oBrowser,l=i.bScrollOversize,(r=s.style.width)&&-1!==r.indexOf("%")&&(b=r),r=0;r<p.length;r++)a=o[p[r]],null!==a.sWidth&&(a.sWidth=be(a.sWidthOrig,v),S=!0);if(l||!S&&!c&&!u&&d==m(e)&&d==g.length)for(r=0;d>r;r++)o[r].sWidth=ye(g.eq(r).width());else{d=n(s).clone().css("visibility","hidden").removeAttr("id"),d.find("tbody tr").remove();var y=n("<tr/>").appendTo(d.find("tbody"));for(d.find("thead, tfoot").remove(),d.append(n(e.nTHead).clone()).append(n(e.nTFoot).clone()),d.find("tfoot th, tfoot td").css("width",""),g=B(e,d.find("thead")[0]),r=0;r<p.length;r++)a=o[p[r]],g[r].style.width=null!==a.sWidthOrig&&""!==a.sWidthOrig?ye(a.sWidthOrig):"";if(e.aoData.length)for(r=0;r<p.length;r++)S=p[r],a=o[S],n(ve(e,S)).clone(!1).append(a.sContentPadding).appendTo(y);if(S=n("<div/>").css(c||u?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(d).appendTo(v),c&&h?d.width(h):c?(d.css("width","auto"),d.width()<v.clientWidth&&d.width(v.clientWidth)):u?d.width(v.clientWidth):b&&d.width(b),c){for(r=h=0;r<p.length;r++)a=o[p[r]],u=i.bBounding?g[r].getBoundingClientRect().width:n(g[r]).outerWidth(),h+=null===a.sWidthOrig?u:parseInt(a.sWidth,10)+u-n(g[r]).width();d.width(ye(h)),s.style.width=ye(h)}for(r=0;r<p.length;r++)a=o[p[r]],(i=n(g[r]).width())&&(a.sWidth=ye(i));s.style.width=ye(d.css("width")),S.remove()}b&&(s.style.width=ye(b)),!b&&!c||e._reszEvt||(s=function(){n(t).bind("resize.DT-"+e.sInstance,_e(function(){f(e)}))},l?setTimeout(s,1e3):s(),e._reszEvt=!0)}function _e(t,e){var n,a,i=e!==r?e:200;return function(){var e=this,s=+new Date,o=arguments;n&&n+i>s?(clearTimeout(a),a=setTimeout(function(){n=r,t.apply(e,o)},i)):(n=s,t.apply(e,o))}}function be(t,r){if(!t)return 0;var a=n("<div/>").css("width",ye(t)).appendTo(r||e.body),i=a[0].offsetWidth;return a.remove(),i}function ve(t,e){var r=Se(t,e);if(0>r)return null;var a=t.aoData[r];return a.nTr?a.anCells[e]:n("<td/>").html(C(t,r,e,"display"))[0]}function Se(t,e){for(var r,n=-1,a=-1,i=0,s=t.aoData.length;s>i;i++)r=C(t,i,e,"display")+"",r=r.replace(br,""),r.length>n&&(n=r.length,a=i);return a}function ye(t){return null===t?"0px":"number"==typeof t?0>t?"0px":t+"px":t.match(/\d$/)?t+"px":t}function Ce(){var t=Ve.__scrollbarWidth;if(t===r){var e=n("<p/>").css({position:"absolute",top:0,left:0,width:"100%",height:150,padding:0,overflow:"scroll",visibility:"hidden"}).appendTo("body"),t=e[0].offsetWidth-e[0].clientWidth;Ve.__scrollbarWidth=t,e.remove()}return t}function De(t){var e,a,i,s,o,l,u=[],c=t.aoColumns;e=t.aaSortingFixed,a=n.isPlainObject(e);var h=[];for(i=function(t){t.length&&!n.isArray(t[0])?h.push(t):h.push.apply(h,t)},n.isArray(e)&&i(e),a&&e.pre&&i(e.pre),i(t.aaSorting),a&&e.post&&i(e.post),t=0;t<h.length;t++)for(l=h[t][0],i=c[l].aDataSort,e=0,a=i.length;a>e;e++)s=i[e],o=c[s].sType||"string",h[t]._idx===r&&(h[t]._idx=n.inArray(h[t][1],c[s].asSorting)),u.push({src:l,col:s,dir:h[t][1],index:h[t]._idx,type:o,formatter:Ve.ext.type.order[o+"-pre"]});return u}function we(t){var e,r,n,a,i=[],s=Ve.ext.type.order,o=t.aoData,l=0,u=t.aiDisplayMaster;for(b(t),a=De(t),e=0,r=a.length;r>e;e++)n=a[e],n.formatter&&l++,Me(t,n.col);if("ssp"!=We(t)&&0!==a.length){for(e=0,r=u.length;r>e;e++)i[u[e]]=e;u.sort(l===a.length?function(t,e){var r,n,s,l,u=a.length,c=o[t]._aSortData,h=o[e]._aSortData;for(s=0;u>s;s++)if(l=a[s],r=c[l.col],n=h[l.col],r=n>r?-1:r>n?1:0,0!==r)return"asc"===l.dir?r:-r;return r=i[t],n=i[e],n>r?-1:r>n?1:0}:function(t,e){var r,n,l,u,c=a.length,h=o[t]._aSortData,d=o[e]._aSortData;for(l=0;c>l;l++)if(u=a[l],r=h[u.col],n=d[u.col],u=s[u.type+"-"+u.dir]||s["string-"+u.dir],r=u(r,n),0!==r)return r;return r=i[t],n=i[e],n>r?-1:r>n?1:0})}t.bSorted=!0}function xe(t){for(var e,r,n=t.aoColumns,a=De(t),t=t.oLanguage.oAria,i=0,s=n.length;s>i;i++){r=n[i];var o=r.asSorting;e=r.sTitle.replace(/<.*?>/g,"");var l=r.nTh;l.removeAttribute("aria-sort"),r.bSortable&&(0<a.length&&a[0].col==i?(l.setAttribute("aria-sort","asc"==a[0].dir?"ascending":"descending"),r=o[a[0].index+1]||o[0]):r=o[0],e+="asc"===r?t.sSortAscending:t.sSortDescending),l.setAttribute("aria-label",e)}}function Te(t,e,a,i){var s=t.aaSorting,o=t.aoColumns[e].asSorting,l=function(t,e){var a=t._idx;return a===r&&(a=n.inArray(t[1],o)),a+1<o.length?a+1:e?null:0};"number"==typeof s[0]&&(s=t.aaSorting=[s]),a&&t.oFeatures.bSortMulti?(a=n.inArray(e,lr(s,"0")),-1!==a?(e=l(s[a],!0),null===e&&1===s.length&&(e=0),null===e?s.splice(a,1):(s[a][1]=o[e],s[a]._idx=e)):(s.push([e,o[0],0]),s[s.length-1]._idx=0)):s.length&&s[0][0]==e?(e=l(s[0]),s.length=1,s[0][1]=o[e],s[0]._idx=e):(s.length=0,s.push([e,o[0]]),s[0]._idx=0),E(t),"function"==typeof i&&i(t)}function Ie(t,e,r,n){var a=t.aoColumns[r];He(e,{},function(e){!1!==a.bSortable&&(t.oFeatures.bProcessing?(de(t,!0),setTimeout(function(){Te(t,r,e.shiftKey,n),"ssp"!==We(t)&&de(t,!1)},0)):Te(t,r,e.shiftKey,n))})}function ke(t){var e,r,a=t.aLastSort,i=t.oClasses.sSortColumn,s=De(t),o=t.oFeatures;if(o.bSort&&o.bSortClasses){for(o=0,e=a.length;e>o;o++)r=a[o].src,n(lr(t.aoData,"anCells",r)).removeClass(i+(2>o?o+1:3));for(o=0,e=s.length;e>o;o++)r=s[o].src,n(lr(t.aoData,"anCells",r)).addClass(i+(2>o?o+1:3))}t.aLastSort=s}function Me(t,e){var r,n=t.aoColumns[e],a=Ve.ext.order[n.sSortDataType];a&&(r=a.call(t.oInstance,t,e,g(t,e)));for(var i,s=Ve.ext.type.order[n.sType+"-pre"],o=0,l=t.aoData.length;l>o;o++)n=t.aoData[o],n._aSortData||(n._aSortData=[]),(!n._aSortData[e]||a)&&(i=a?r[o]:C(t,o,e,"sort"),n._aSortData[e]=s?s(i):i)}function Ae(t){if(t.oFeatures.bStateSave&&!t.bDestroying){var e={time:+new Date,start:t._iDisplayStart,length:t._iDisplayLength,order:n.extend(!0,[],t.aaSorting),search:te(t.oPreviousSearch),columns:n.map(t.aoColumns,function(e,r){return{visible:e.bVisible,search:te(t.aoPreSearchCols[r])}})};Oe(t,"aoStateSaveParams","stateSaveParams",[t,e]),t.oSavedState=e,t.fnStateSaveCallback.call(t.oInstance,t,e)}}function Le(t){var e,a,i=t.aoColumns;if(t.oFeatures.bStateSave){var s=t.fnStateLoadCallback.call(t.oInstance,t);if(s&&s.time&&(e=Oe(t,"aoStateLoadParams","stateLoadParams",[t,s]),-1===n.inArray(!1,e)&&(e=t.iStateDuration,!(e>0&&s.time<+new Date-1e3*e)&&i.length===s.columns.length))){for(t.oLoadedState=n.extend(!0,{},s),s.start!==r&&(t._iDisplayStart=s.start,t.iInitDisplayStart=s.start),s.length!==r&&(t._iDisplayLength=s.length),s.order!==r&&(t.aaSorting=[],n.each(s.order,function(e,r){t.aaSorting.push(r[0]>=i.length?[0,r[1]]:r)})),s.search!==r&&n.extend(t.oPreviousSearch,ee(s.search)),e=0,a=s.columns.length;a>e;e++){var o=s.columns[e];o.visible!==r&&(i[e].bVisible=o.visible),o.search!==r&&n.extend(t.aoPreSearchCols[e],ee(o.search))}Oe(t,"aoStateLoaded","stateLoaded",[t,s])}}}function Pe(t){var e=Ve.settings,t=n.inArray(t,lr(e,"nTable"));return-1!==t?e[t]:null}function Fe(e,r,n,a){if(n="DataTables warning: "+(e?"table id="+e.sTableId+" - ":"")+n,a&&(n+=". For more information about this error, please see http://datatables.net/tn/"+a),r)t.console&&console.log&&console.log(n);else if(r=Ve.ext,r=r.sErrMode||r.errMode,e&&Oe(e,null,"error",[e,a,n]),"alert"==r)alert(n);else{if("throw"==r)throw Error(n);"function"==typeof r&&r(e,a,n)}}function Re(t,e,a,i){n.isArray(a)?n.each(a,function(r,a){n.isArray(a)?Re(t,e,a[0],a[1]):Re(t,e,a)}):(i===r&&(i=a),e[a]!==r&&(t[i]=e[a]))}function je(t,e,r){var a,i;for(i in e)e.hasOwnProperty(i)&&(a=e[i],n.isPlainObject(a)?(n.isPlainObject(t[i])||(t[i]={}),n.extend(!0,t[i],a)):t[i]=r&&"data"!==i&&"aaData"!==i&&n.isArray(a)?a.slice():a);return t}function He(t,e,r){n(t).bind("click.DT",e,function(e){t.blur(),r(e)}).bind("keypress.DT",e,function(t){13===t.which&&(t.preventDefault(),r(t))}).bind("selectstart.DT",function(){return!1})}function Ee(t,e,r,n){r&&t[e].push({fn:r,sName:n})}function Oe(t,e,r,a){var i=[];return e&&(i=n.map(t[e].slice().reverse(),function(e){return e.fn.apply(t.oInstance,a)})),null!==r&&(e=n.Event(r+".dt"),n(t.nTable).trigger(e,a),i.push(e.result)),i}function Ne(t){var e=t._iDisplayStart,r=t.fnDisplayEnd(),n=t._iDisplayLength;e>=r&&(e=r-n),e-=e%n,(-1===n||0>e)&&(e=0),t._iDisplayStart=e}function Be(t,e){var r=t.renderer,a=Ve.ext.renderer[e];return n.isPlainObject(r)&&r[e]?a[r[e]]||a._:"string"==typeof r?a[r]||a._:a._}function We(t){return t.oFeatures.bServerSide?"ssp":t.ajax||t.sAjaxSource?"ajax":"dom"}function ze(t,e){var r=[],r=jr.numbers_length,n=Math.floor(r/2);return r>=e?r=cr(0,e):n>=t?(r=cr(0,r-2),r.push("ellipsis"),r.push(e-1)):(t>=e-1-n?r=cr(e-(r-2),e):(r=cr(t-n+2,t+n-1),r.push("ellipsis"),r.push(e-1)),r.splice(0,0,"ellipsis"),r.splice(0,0,0)),r.DT_el="span",r}function Ue(t){n.each({num:function(e){return Hr(e,t)},"num-fmt":function(e){return Hr(e,t,rr)},"html-num":function(e){return Hr(e,t,Ye)},"html-num-fmt":function(e){return Hr(e,t,Ye,rr)}},function(e,r){Xe.type.order[e+t+"-pre"]=r,e.match(/^html\-/)&&(Xe.type.search[e+t]=Xe.type.search.html)})}function Je(t){return function(){var e=[Pe(this[Ve.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return Ve.ext.internal[t].apply(this,e)}}var Ve,Xe,Ze,Ge,qe,$e={},Qe=/[\r\n]/g,Ye=/<.*?>/g,Ke=/^[\w\+\-]/,tr=/[\w\+\-]$/,er=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),rr=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi,nr=function(t){return t&&!0!==t&&"-"!==t?!1:!0},ar=function(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null},ir=function(t,e){return $e[e]||($e[e]=RegExp(Y(e),"g")),"string"==typeof t&&"."!==e?t.replace(/\./g,"").replace($e[e],"."):t},sr=function(t,e,r){var n="string"==typeof t;return nr(t)?!0:(e&&n&&(t=ir(t,e)),r&&n&&(t=t.replace(rr,"")),!isNaN(parseFloat(t))&&isFinite(t))},or=function(t,e,r){return nr(t)?!0:(nr(t)||"string"==typeof t)&&sr(t.replace(Ye,""),e,r)?!0:null},lr=function(t,e,n){var a=[],i=0,s=t.length;if(n!==r)for(;s>i;i++)t[i]&&t[i][e]&&a.push(t[i][e][n]);else for(;s>i;i++)t[i]&&a.push(t[i][e]);return a},ur=function(t,e,n,a){var i=[],s=0,o=e.length;if(a!==r)for(;o>s;s++)t[e[s]][n]&&i.push(t[e[s]][n][a]);else for(;o>s;s++)i.push(t[e[s]][n]);return i},cr=function(t,e){var n,a=[];e===r?(e=0,n=t):(n=e,e=t);for(var i=e;n>i;i++)a.push(i);return a},hr=function(t){for(var e=[],r=0,n=t.length;n>r;r++)t[r]&&e.push(t[r]);return e},dr=function(t){var e,r,n,a=[],i=t.length,s=0;r=0;t:for(;i>r;r++){for(e=t[r],n=0;s>n;n++)if(a[n]===e)continue t;a.push(e),s++}return a},fr=function(t,e,n){t[e]!==r&&(t[n]=t[e])},pr=/\[.*?\]$/,gr=/\(\)$/,mr=n("<div>")[0],_r=mr.textContent!==r,br=/<.*?>/g;Ve=function(t){this.$=function(t,e){return this.api(!0).$(t,e)},this._=function(t,e){return this.api(!0).rows(t,e).data()},this.api=function(t){return new Ze(t?Pe(this[Xe.iApiIndex]):this)},this.fnAddData=function(t,e){var a=this.api(!0),i=n.isArray(t)&&(n.isArray(t[0])||n.isPlainObject(t[0]))?a.rows.add(t):a.row.add(t);return(e===r||e)&&a.draw(),i.flatten().toArray()},this.fnAdjustColumnSizing=function(t){var e=this.api(!0).columns.adjust(),n=e.settings()[0],a=n.oScroll;t===r||t?e.draw(!1):(""!==a.sX||""!==a.sY)&&pe(n)},this.fnClearTable=function(t){var e=this.api(!0).clear();(t===r||t)&&e.draw()},this.fnClose=function(t){this.api(!0).row(t).child.hide()},this.fnDeleteRow=function(t,e,n){var a=this.api(!0),t=a.rows(t),i=t.settings()[0],s=i.aoData[t[0][0]];return t.remove(),e&&e.call(this,i,s),(n===r||n)&&a.draw(),s},this.fnDestroy=function(t){this.api(!0).destroy(t)},this.fnDraw=function(t){this.api(!0).draw(t)},this.fnFilter=function(t,e,n,a,i,s){i=this.api(!0),null===e||e===r?i.search(t,n,a,s):i.column(e).search(t,n,a,s),i.draw()},this.fnGetData=function(t,e){var n=this.api(!0);if(t!==r){var a=t.nodeName?t.nodeName.toLowerCase():"";return e!==r||"td"==a||"th"==a?n.cell(t,e).data():n.row(t).data()||null}return n.data().toArray()},this.fnGetNodes=function(t){var e=this.api(!0);return t!==r?e.row(t).node():e.rows().nodes().flatten().toArray()},this.fnGetPosition=function(t){var e=this.api(!0),r=t.nodeName.toUpperCase();return"TR"==r?e.row(t).index():"TD"==r||"TH"==r?(t=e.cell(t).index(),[t.row,t.columnVisible,t.column]):null},this.fnIsOpen=function(t){return this.api(!0).row(t).child.isShown()},this.fnOpen=function(t,e,r){return this.api(!0).row(t).child(e,r).show().child()[0]},this.fnPageChange=function(t,e){var n=this.api(!0).page(t);(e===r||e)&&n.draw(!1)},this.fnSetColumnVis=function(t,e,n){t=this.api(!0).column(t).visible(e),(n===r||n)&&t.columns.adjust().draw()},this.fnSettings=function(){return Pe(this[Xe.iApiIndex])},this.fnSort=function(t){this.api(!0).order(t).draw()},this.fnSortListener=function(t,e,r){this.api(!0).order.listener(t,e,r)},this.fnUpdate=function(t,e,n,a,i){var s=this.api(!0);return n===r||null===n?s.row(e).data(t):s.cell(e,n).data(t),(i===r||i)&&s.columns.adjust(),(a===r||a)&&s.draw(),0},this.fnVersionCheck=Xe.fnVersionCheck;var e=this,a=t===r,c=this.length;a&&(t={}),this.oApi=this.internal=Xe.internal;for(var f in Ve.ext.internal)f&&(this[f]=Je(f));return this.each(function(){var f,p={},p=c>1?je(p,t,!0):t,g=0,m=this.getAttribute("id"),_=!1,b=Ve.defaults,C=n(this);if("table"!=this.nodeName.toLowerCase())Fe(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{o(b),l(b.column),i(b,b,!0),i(b.column,b.column,!0),i(b,n.extend(p,C.data()));var D=Ve.settings,g=0;for(f=D.length;f>g;g++){var w=D[g];if(w.nTable==this||w.nTHead.parentNode==this||w.nTFoot&&w.nTFoot.parentNode==this){if(g=p.bRetrieve!==r?p.bRetrieve:b.bRetrieve,a||g)return w.oInstance;if(p.bDestroy!==r?p.bDestroy:b.bDestroy){w.oInstance.fnDestroy();break}return void Fe(w,0,"Cannot reinitialise DataTable",3)}if(w.sTableId==this.id){D.splice(g,1);break}}(null===m||""===m)&&(this.id=m="DataTables_Table_"+Ve.ext._unique++);var T=n.extend(!0,{},Ve.models.oSettings,{sDestroyWidth:C[0].style.width,sInstance:m,sTableId:m});T.nTable=this,T.oApi=e.internal,T.oInit=p,D.push(T),T.oInstance=1===e.length?e:C.dataTable(),o(p),p.oLanguage&&s(p.oLanguage),p.aLengthMenu&&!p.iDisplayLength&&(p.iDisplayLength=n.isArray(p.aLengthMenu[0])?p.aLengthMenu[0][0]:p.aLengthMenu[0]),p=je(n.extend(!0,{},b),p),Re(T.oFeatures,p,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" ")),Re(T,p,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"],["bJQueryUI","bJUI"]]),Re(T.oScroll,p,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]),Re(T.oLanguage,p,"fnInfoCallback"),Ee(T,"aoDrawCallback",p.fnDrawCallback,"user"),Ee(T,"aoServerParams",p.fnServerParams,"user"),Ee(T,"aoStateSaveParams",p.fnStateSaveParams,"user"),Ee(T,"aoStateLoadParams",p.fnStateLoadParams,"user"),Ee(T,"aoStateLoaded",p.fnStateLoaded,"user"),Ee(T,"aoRowCallback",p.fnRowCallback,"user"),Ee(T,"aoRowCreatedCallback",p.fnCreatedRow,"user"),Ee(T,"aoHeaderCallback",p.fnHeaderCallback,"user"),Ee(T,"aoFooterCallback",p.fnFooterCallback,"user"),Ee(T,"aoInitComplete",p.fnInitComplete,"user"),Ee(T,"aoPreDrawCallback",p.fnPreDrawCallback,"user"),T.rowIdFn=x(p.rowId),m=T.oClasses,p.bJQueryUI?(n.extend(m,Ve.ext.oJUIClasses,p.oClasses),p.sDom===b.sDom&&"lfrtip"===b.sDom&&(T.sDom='<"H"lfr>t<"F"ip>'),T.renderer?n.isPlainObject(T.renderer)&&!T.renderer.header&&(T.renderer.header="jqueryui"):T.renderer="jqueryui"):n.extend(m,Ve.ext.classes,p.oClasses),C.addClass(m.sTable),(""!==T.oScroll.sX||""!==T.oScroll.sY)&&(T.oScroll.iBarWidth=Ce()),T.iInitDisplayStart===r&&(T.iInitDisplayStart=p.iDisplayStart,T._iDisplayStart=p.iDisplayStart),null!==p.iDeferLoading&&(T.bDeferLoading=!0,g=n.isArray(p.iDeferLoading),T._iRecordsDisplay=g?p.iDeferLoading[0]:p.iDeferLoading,T._iRecordsTotal=g?p.iDeferLoading[1]:p.iDeferLoading);
3
+ var I=T.oLanguage;n.extend(!0,I,p.oLanguage),""!==I.sUrl&&(n.ajax({dataType:"json",url:I.sUrl,success:function(t){s(t),i(b.oLanguage,t),n.extend(!0,I,t),ie(T)},error:function(){ie(T)}}),_=!0),null===p.asStripeClasses&&(T.asStripeClasses=[m.sStripeOdd,m.sStripeEven]);var g=T.asStripeClasses,k=C.children("tbody").find("tr").eq(0);if(-1!==n.inArray(!0,n.map(g,function(t){return k.hasClass(t)}))&&(n("tbody tr",this).removeClass(g.join(" ")),T.asDestroyStripes=g.slice()),D=[],g=this.getElementsByTagName("thead"),0!==g.length&&(N(T.aoHeader,g[0]),D=B(T)),null===p.aoColumns)for(w=[],g=0,f=D.length;f>g;g++)w.push(null);else w=p.aoColumns;for(g=0,f=w.length;f>g;g++)h(T,D?D[g]:null);if(v(T,p.aoColumnDefs,w,function(t,e){d(T,t,e)}),k.length){var M=function(t,e){return null!==t.getAttribute("data-"+e)?e:null};n.each(L(T,k[0]).cells,function(t,e){var n=T.aoColumns[t];if(n.mData===t){var a=M(e,"sort")||M(e,"order"),i=M(e,"filter")||M(e,"search");(null!==a||null!==i)&&(n.mData={_:t+".display",sort:null!==a?t+".@data-"+a:r,type:null!==a?t+".@data-"+a:r,filter:null!==i?t+".@data-"+i:r},d(T,t))}})}var A=T.oFeatures;if(p.bStateSave&&(A.bStateSave=!0,Le(T,p),Ee(T,"aoDrawCallback",Ae,"state_save")),p.aaSorting===r)for(D=T.aaSorting,g=0,f=D.length;f>g;g++)D[g][1]=T.aoColumns[g].asSorting[0];if(ke(T),A.bSort&&Ee(T,"aoDrawCallback",function(){if(T.bSorted){var t=De(T),e={};n.each(t,function(t,r){e[r.src]=r.dir}),Oe(T,null,"order",[T,t,e]),xe(T)}}),Ee(T,"aoDrawCallback",function(){(T.bSorted||"ssp"===We(T)||A.bDeferRender)&&ke(T)},"sc"),u(T),g=C.children("caption").each(function(){this._captionSide=C.css("caption-side")}),f=C.children("thead"),0===f.length&&(f=n("<thead/>").appendTo(this)),T.nTHead=f[0],f=C.children("tbody"),0===f.length&&(f=n("<tbody/>").appendTo(this)),T.nTBody=f[0],f=C.children("tfoot"),0===f.length&&0<g.length&&(""!==T.oScroll.sX||""!==T.oScroll.sY)&&(f=n("<tfoot/>").appendTo(this)),0===f.length||0===f.children().length?C.addClass(m.sNoFooter):0<f.length&&(T.nTFoot=f[0],N(T.aoFooter,T.nTFoot)),p.aaData)for(g=0;g<p.aaData.length;g++)S(T,p.aaData[g]);else(T.bDeferLoading||"dom"==We(T))&&y(T,n(T.nTBody).children("tr"));T.aiDisplay=T.aiDisplayMaster.slice(),T.bInitialised=!0,!1===_&&ie(T)}}),e=null,this};var vr=[],Sr=Array.prototype,yr=function(t){var e,r,a=Ve.settings,i=n.map(a,function(t){return t.nTable});return t?t.nTable&&t.oApi?[t]:t.nodeName&&"table"===t.nodeName.toLowerCase()?(e=n.inArray(t,i),-1!==e?[a[e]]:null):t&&"function"==typeof t.settings?t.settings().toArray():("string"==typeof t?r=n(t):t instanceof n&&(r=t),r?r.map(function(){return e=n.inArray(this,i),-1!==e?a[e]:null}).toArray():void 0):[]};Ze=function(t,e){if(!(this instanceof Ze))return new Ze(t,e);var r=[],a=function(t){(t=yr(t))&&r.push.apply(r,t)};if(n.isArray(t))for(var i=0,s=t.length;s>i;i++)a(t[i]);else a(t);this.context=dr(r),e&&this.push.apply(this,e.toArray?e.toArray():e),this.selector={rows:null,cols:null,opts:null},Ze.extend(this,this,vr)},Ve.Api=Ze,Ze.prototype={any:function(){return 0!==this.count()},concat:Sr.concat,context:[],count:function(){return this.flatten().length},each:function(t){for(var e=0,r=this.length;r>e;e++)t.call(this,this[e],e,this);return this},eq:function(t){var e=this.context;return e.length>t?new Ze(e[t],this[t]):null},filter:function(t){var e=[];if(Sr.filter)e=Sr.filter.call(this,t,this);else for(var r=0,n=this.length;n>r;r++)t.call(this,this[r],r,this)&&e.push(this[r]);return new Ze(this.context,e)},flatten:function(){var t=[];return new Ze(this.context,t.concat.apply(t,this.toArray()))},join:Sr.join,indexOf:Sr.indexOf||function(t,e){for(var r=e||0,n=this.length;n>r;r++)if(this[r]===t)return r;return-1},iterator:function(t,e,n,a){var i,s,o,l,u,c,h,d=[],f=this.context,p=this.selector;for("string"==typeof t&&(a=n,n=e,e=t,t=!1),s=0,o=f.length;o>s;s++){var g=new Ze(f[s]);if("table"===e)i=n.call(g,f[s],s),i!==r&&d.push(i);else if("columns"===e||"rows"===e)i=n.call(g,f[s],this[s],s),i!==r&&d.push(i);else if("column"===e||"column-rows"===e||"row"===e||"cell"===e)for(h=this[s],"column-rows"===e&&(c=Tr(f[s],p.opts)),l=0,u=h.length;u>l;l++)i=h[l],i="cell"===e?n.call(g,f[s],i.row,i.column,s,l):n.call(g,f[s],i,s,l,c),i!==r&&d.push(i)}return d.length||a?(t=new Ze(f,t?d.concat.apply([],d):d),e=t.selector,e.rows=p.rows,e.cols=p.cols,e.opts=p.opts,t):this},lastIndexOf:Sr.lastIndexOf||function(){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(t){var e=[];if(Sr.map)e=Sr.map.call(this,t,this);else for(var r=0,n=this.length;n>r;r++)e.push(t.call(this,this[r],r));return new Ze(this.context,e)},pluck:function(t){return this.map(function(e){return e[t]})},pop:Sr.pop,push:Sr.push,reduce:Sr.reduce||function(t,e){return c(this,t,e,0,this.length,1)},reduceRight:Sr.reduceRight||function(t,e){return c(this,t,e,this.length-1,-1,-1)},reverse:Sr.reverse,selector:null,shift:Sr.shift,sort:Sr.sort,splice:Sr.splice,toArray:function(){return Sr.slice.call(this)},to$:function(){return n(this)},toJQuery:function(){return n(this)},unique:function(){return new Ze(this.context,dr(this))},unshift:Sr.unshift},Ze.extend=function(t,e,r){if(r.length&&e&&(e instanceof Ze||e.__dt_wrapper)){var a,i,s,o=function(t,e,r){return function(){var n=e.apply(t,arguments);return Ze.extend(n,n,r.methodExt),n}};for(a=0,i=r.length;i>a;a++)s=r[a],e[s.name]="function"==typeof s.val?o(t,s.val,s):n.isPlainObject(s.val)?{}:s.val,e[s.name].__dt_wrapper=!0,Ze.extend(t,e[s.name],s.propExt)}},Ze.register=Ge=function(t,e){if(n.isArray(t))for(var r=0,a=t.length;a>r;r++)Ze.register(t[r],e);else for(var i,s,o=t.split("."),l=vr,r=0,a=o.length;a>r;r++){i=(s=-1!==o[r].indexOf("()"))?o[r].replace("()",""):o[r];var u;t:{u=0;for(var c=l.length;c>u;u++)if(l[u].name===i){u=l[u];break t}u=null}u||(u={name:i,val:{},methodExt:[],propExt:[]},l.push(u)),r===a-1?u.val=e:l=s?u.methodExt:u.propExt}},Ze.registerPlural=qe=function(t,e,a){Ze.register(t,a),Ze.register(e,function(){var t=a.apply(this,arguments);return t===this?this:t instanceof Ze?t.length?n.isArray(t[0])?new Ze(t.context,t[0]):t[0]:r:t})},Ge("tables()",function(t){var e;if(t){e=Ze;var r=this.context;if("number"==typeof t)t=[r[t]];else var a=n.map(r,function(t){return t.nTable}),t=n(a).filter(t).map(function(){var t=n.inArray(this,a);return r[t]}).toArray();e=new e(t)}else e=this;return e}),Ge("table()",function(t){var t=this.tables(t),e=t.context;return e.length?new Ze(e[0]):t}),qe("tables().nodes()","table().node()",function(){return this.iterator("table",function(t){return t.nTable},1)}),qe("tables().body()","table().body()",function(){return this.iterator("table",function(t){return t.nTBody},1)}),qe("tables().header()","table().header()",function(){return this.iterator("table",function(t){return t.nTHead},1)}),qe("tables().footer()","table().footer()",function(){return this.iterator("table",function(t){return t.nTFoot},1)}),qe("tables().containers()","table().container()",function(){return this.iterator("table",function(t){return t.nTableWrapper},1)}),Ge("draw()",function(t){return this.iterator("table",function(e){"page"===t?H(e):("string"==typeof t&&(t="full-hold"===t?!1:!0),E(e,!1===t))})}),Ge("page()",function(t){return t===r?this.page.info().page:this.iterator("table",function(e){ce(e,t)})}),Ge("page.info()",function(){if(0===this.context.length)return r;var t=this.context[0],e=t._iDisplayStart,n=t._iDisplayLength,a=t.fnRecordsDisplay(),i=-1===n;return{page:i?0:Math.floor(e/n),pages:i?1:Math.ceil(a/n),start:e,end:t.fnDisplayEnd(),length:n,recordsTotal:t.fnRecordsTotal(),recordsDisplay:a,serverSide:"ssp"===We(t)}}),Ge("page.len()",function(t){return t===r?0!==this.context.length?this.context[0]._iDisplayLength:r:this.iterator("table",function(e){oe(e,t)})});var Cr=function(t,e,r){if(r){var n=new Ze(t);n.one("draw",function(){r(n.ajax.json())})}if("ssp"==We(t))E(t,e);else{de(t,!0);var a=t.jqXHR;a&&4!==a.readyState&&a.abort(),W(t,[],function(r){k(t);for(var r=V(t,r),n=0,a=r.length;a>n;n++)S(t,r[n]);E(t,e),de(t,!1)})}};Ge("ajax.json()",function(){var t=this.context;return 0<t.length?t[0].json:void 0}),Ge("ajax.params()",function(){var t=this.context;return 0<t.length?t[0].oAjaxData:void 0}),Ge("ajax.reload()",function(t,e){return this.iterator("table",function(r){Cr(r,!1===e,t)})}),Ge("ajax.url()",function(t){var e=this.context;return t===r?0===e.length?r:(e=e[0],e.ajax?n.isPlainObject(e.ajax)?e.ajax.url:e.ajax:e.sAjaxSource):this.iterator("table",function(e){n.isPlainObject(e.ajax)?e.ajax.url=t:e.ajax=t})}),Ge("ajax.url().load()",function(t,e){return this.iterator("table",function(r){Cr(r,!1===e,t)})});var Dr=function(t,e,a,i,s){var o,l,u,c,h,d,f=[];for(u=typeof e,e&&"string"!==u&&"function"!==u&&e.length!==r||(e=[e]),u=0,c=e.length;c>u;u++)for(l=e[u]&&e[u].split?e[u].split(","):[e[u]],h=0,d=l.length;d>h;h++)(o=a("string"==typeof l[h]?n.trim(l[h]):l[h]))&&o.length&&f.push.apply(f,o);if(t=Xe.selector[t],t.length)for(u=0,c=t.length;c>u;u++)f=t[u](i,s,f);return f},wr=function(t){return t||(t={}),t.filter&&t.search===r&&(t.search=t.filter),n.extend({search:"none",order:"current",page:"all"},t)},xr=function(t){for(var e=0,r=t.length;r>e;e++)if(0<t[e].length)return t[0]=t[e],t[0].length=1,t.length=1,t.context=[t.context[e]],t;return t.length=0,t},Tr=function(t,e){var r,a,i,s=[],o=t.aiDisplay;r=t.aiDisplayMaster;var l=e.search;if(a=e.order,i=e.page,"ssp"==We(t))return"removed"===l?[]:cr(0,r.length);if("current"==i)for(r=t._iDisplayStart,a=t.fnDisplayEnd();a>r;r++)s.push(o[r]);else if("current"==a||"applied"==a)s="none"==l?r.slice():"applied"==l?o.slice():n.map(r,function(t){return-1===n.inArray(t,o)?t:null});else if("index"==a||"original"==a)for(r=0,a=t.aoData.length;a>r;r++)"none"==l?s.push(r):(i=n.inArray(r,o),(-1===i&&"removed"==l||i>=0&&"applied"==l)&&s.push(r));return s};Ge("rows()",function(t,e){t===r?t="":n.isPlainObject(t)&&(e=t,t="");var e=wr(e),a=this.iterator("table",function(a){var i=e;return Dr("row",t,function(t){var e=ar(t);if(null!==e&&!i)return[e];var s=Tr(a,i);return null!==e&&-1!==n.inArray(e,s)?[e]:t?"function"==typeof t?n.map(s,function(e){var r=a.aoData[e];return t(e,r._aData,r.nTr)?e:null}):(e=hr(ur(a.aoData,s,"nTr")),t.nodeName&&-1!==n.inArray(t,e)?[t._DT_RowIndex]:"string"==typeof t&&"#"===t.charAt(0)&&(s=a.aIds[t.replace(/^#/,"")],s!==r)?[s.idx]:n(e).filter(t).map(function(){return this._DT_RowIndex}).toArray()):s},a,i)},1);return a.selector.rows=t,a.selector.opts=e,a}),Ge("rows().nodes()",function(){return this.iterator("row",function(t,e){return t.aoData[e].nTr||r},1)}),Ge("rows().data()",function(){return this.iterator(!0,"rows",function(t,e){return ur(t.aoData,e,"_aData")},1)}),qe("rows().cache()","row().cache()",function(t){return this.iterator("row",function(e,r){var n=e.aoData[r];return"search"===t?n._aFilterData:n._aSortData},1)}),qe("rows().invalidate()","row().invalidate()",function(t){return this.iterator("row",function(e,r){A(e,r,t)})}),qe("rows().indexes()","row().index()",function(){return this.iterator("row",function(t,e){return e},1)}),qe("rows().ids()","row().id()",function(t){for(var e=[],r=this.context,n=0,a=r.length;a>n;n++)for(var i=0,s=this[n].length;s>i;i++){var o=r[n].rowIdFn(r[n].aoData[this[n][i]]._aData);e.push((!0===t?"#":"")+o)}return new Ze(r,e)}),qe("rows().remove()","row().remove()",function(){var t=this;return this.iterator("row",function(e,r,n){var a=e.aoData;a.splice(r,1);for(var i=0,s=a.length;s>i;i++)null!==a[i].nTr&&(a[i].nTr._DT_RowIndex=i);M(e.aiDisplayMaster,r),M(e.aiDisplay,r),M(t[n],r,!1),Ne(e)}),this.iterator("table",function(t){for(var e=0,r=t.aoData.length;r>e;e++)t.aoData[e].idx=e}),this}),Ge("rows.add()",function(t){var e=this.iterator("table",function(e){var r,n,a,i=[];for(n=0,a=t.length;a>n;n++)r=t[n],i.push(r.nodeName&&"TR"===r.nodeName.toUpperCase()?y(e,r)[0]:S(e,r));return i},1),r=this.rows(-1);return r.pop(),r.push.apply(r,e.toArray()),r}),Ge("row()",function(t,e){return xr(this.rows(t,e))}),Ge("row().data()",function(t){var e=this.context;return t===r?e.length&&this.length?e[0].aoData[this[0]]._aData:r:(e[0].aoData[this[0]]._aData=t,A(e[0],this[0],"data"),this)}),Ge("row().node()",function(){var t=this.context;return t.length&&this.length?t[0].aoData[this[0]].nTr||null:null}),Ge("row.add()",function(t){t instanceof n&&t.length&&(t=t[0]);var e=this.iterator("table",function(e){return t.nodeName&&"TR"===t.nodeName.toUpperCase()?y(e,t)[0]:S(e,t)});return this.row(e[0])});var Ir=function(t,e){var n=t.context;n.length&&(n=n[0].aoData[e!==r?e:t[0]])&&n._details&&(n._details.remove(),n._detailsShow=r,n._details=r)},kr=function(t,e){var r=t.context;if(r.length&&t.length){var n=r[0].aoData[t[0]];if(n._details){(n._detailsShow=e)?n._details.insertAfter(n.nTr):n._details.detach();var a=r[0],i=new Ze(a),s=a.aoData;i.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details"),0<lr(s,"_details").length&&(i.on("draw.dt.DT_details",function(t,e){a===e&&i.rows({page:"current"}).eq(0).each(function(t){t=s[t],t._detailsShow&&t._details.insertAfter(t.nTr)})}),i.on("column-visibility.dt.DT_details",function(t,e){if(a===e)for(var r,n=m(e),i=0,o=s.length;o>i;i++)r=s[i],r._details&&r._details.children("td[colspan]").attr("colspan",n)}),i.on("destroy.dt.DT_details",function(t,e){if(a===e)for(var r=0,n=s.length;n>r;r++)s[r]._details&&Ir(i,r)}))}}};Ge("row().child()",function(t,e){var a=this.context;if(t===r)return a.length&&this.length?a[0].aoData[this[0]]._details:r;if(!0===t)this.child.show();else if(!1===t)Ir(this);else if(a.length&&this.length){var i=a[0],a=a[0].aoData[this[0]],s=[],o=function(t,e){if(n.isArray(t)||t instanceof n)for(var r=0,a=t.length;a>r;r++)o(t[r],e);else t.nodeName&&"tr"===t.nodeName.toLowerCase()?s.push(t):(r=n("<tr><td/></tr>").addClass(e),n("td",r).addClass(e).html(t)[0].colSpan=m(i),s.push(r[0]))};o(t,e),a._details&&a._details.remove(),a._details=n(s),a._detailsShow&&a._details.insertAfter(a.nTr)}return this}),Ge(["row().child.show()","row().child().show()"],function(){return kr(this,!0),this}),Ge(["row().child.hide()","row().child().hide()"],function(){return kr(this,!1),this}),Ge(["row().child.remove()","row().child().remove()"],function(){return Ir(this),this}),Ge("row().child.isShown()",function(){var t=this.context;return t.length&&this.length?t[0].aoData[this[0]]._detailsShow||!1:!1});var Mr=/^(.+):(name|visIdx|visible)$/,Ar=function(t,e,r,n,a){for(var r=[],n=0,i=a.length;i>n;n++)r.push(C(t,a[n],e));return r};Ge("columns()",function(t,e){t===r?t="":n.isPlainObject(t)&&(e=t,t="");var e=wr(e),a=this.iterator("table",function(r){var a=t,i=e,s=r.aoColumns,o=lr(s,"sName"),l=lr(s,"nTh");return Dr("column",a,function(t){var e=ar(t);if(""===t)return cr(s.length);if(null!==e)return[e>=0?e:s.length+e];if("function"==typeof t){var a=Tr(r,i);return n.map(s,function(e,n){return t(n,Ar(r,n,0,0,a),l[n])?n:null})}var u="string"==typeof t?t.match(Mr):"";if(!u)return n(l).filter(t).map(function(){return n.inArray(this,l)}).toArray();switch(u[2]){case"visIdx":case"visible":if(e=parseInt(u[1],10),0>e){var c=n.map(s,function(t,e){return t.bVisible?e:null});return[c[c.length+e]]}return[p(r,e)];case"name":return n.map(o,function(t,e){return t===u[1]?e:null})}},r,i)},1);return a.selector.cols=t,a.selector.opts=e,a}),qe("columns().header()","column().header()",function(){return this.iterator("column",function(t,e){return t.aoColumns[e].nTh},1)}),qe("columns().footer()","column().footer()",function(){return this.iterator("column",function(t,e){return t.aoColumns[e].nTf},1)}),qe("columns().data()","column().data()",function(){return this.iterator("column-rows",Ar,1)}),qe("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(t,e){return t.aoColumns[e].mData},1)}),qe("columns().cache()","column().cache()",function(t){return this.iterator("column-rows",function(e,r,n,a,i){return ur(e.aoData,i,"search"===t?"_aFilterData":"_aSortData",r)},1)}),qe("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(t,e,r,n,a){return ur(t.aoData,a,"anCells",e)},1)}),qe("columns().visible()","column().visible()",function(t,e){return this.iterator("column",function(a,i){if(t===r)return a.aoColumns[i].bVisible;var s,o,l,u=a.aoColumns,c=u[i],h=a.aoData;if(t!==r&&c.bVisible!==t){if(t){var d=n.inArray(!0,lr(u,"bVisible"),i+1);for(s=0,o=h.length;o>s;s++)l=h[s].nTr,u=h[s].anCells,l&&l.insertBefore(u[i],u[d]||null)}else n(lr(a.aoData,"anCells",i)).detach();c.bVisible=t,j(a,a.aoHeader),j(a,a.aoFooter),(e===r||e)&&(f(a),(a.oScroll.sX||a.oScroll.sY)&&pe(a)),Oe(a,null,"column-visibility",[a,i,t]),Ae(a)}})}),qe("columns().indexes()","column().index()",function(t){return this.iterator("column",function(e,r){return"visible"===t?g(e,r):r},1)}),Ge("columns.adjust()",function(){return this.iterator("table",function(t){f(t)},1)}),Ge("column.index()",function(t,e){if(0!==this.context.length){var r=this.context[0];if("fromVisible"===t||"toData"===t)return p(r,e);if("fromData"===t||"toVisible"===t)return g(r,e)}}),Ge("column()",function(t,e){return xr(this.columns(t,e))}),Ge("cells()",function(t,e,a){if(n.isPlainObject(t)&&(t.row===r?(a=t,t=null):(a=e,e=null)),n.isPlainObject(e)&&(a=e,e=null),null===e||e===r)return this.iterator("table",function(e){var i,s,o,l,u,c,h,d=t,f=wr(a),p=e.aoData,g=Tr(e,f),m=hr(ur(p,g,"anCells")),_=n([].concat.apply([],m)),b=e.aoColumns.length;return Dr("cell",d,function(t){var a="function"==typeof t;if(null===t||t===r||a){for(s=[],o=0,l=g.length;l>o;o++)for(i=g[o],u=0;b>u;u++)c={row:i,column:u},a?(h=e.aoData[i],t(c,C(e,i,u),h.anCells?h.anCells[u]:null)&&s.push(c)):s.push(c);return s}return n.isPlainObject(t)?[t]:_.filter(t).map(function(t,e){return i=e.parentNode._DT_RowIndex,{row:i,column:n.inArray(e,p[i].anCells)}}).toArray()},e,f)});var i,s,o,l,u,c=this.columns(e,a),h=this.rows(t,a),d=this.iterator("table",function(t,e){for(i=[],s=0,o=h[e].length;o>s;s++)for(l=0,u=c[e].length;u>l;l++)i.push({row:h[e][s],column:c[e][l]});return i},1);return n.extend(d.selector,{cols:e,rows:t,opts:a}),d}),qe("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(t,e,n){return(t=t.aoData[e].anCells)?t[n]:r},1)}),Ge("cells().data()",function(){return this.iterator("cell",function(t,e,r){return C(t,e,r)},1)}),qe("cells().cache()","cell().cache()",function(t){return t="search"===t?"_aFilterData":"_aSortData",this.iterator("cell",function(e,r,n){return e.aoData[r][t][n]},1)}),qe("cells().render()","cell().render()",function(t){return this.iterator("cell",function(e,r,n){return C(e,r,n,t)},1)}),qe("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(t,e,r){return{row:e,column:r,columnVisible:g(t,r)}},1)}),qe("cells().invalidate()","cell().invalidate()",function(t){return this.iterator("cell",function(e,r,n){A(e,r,t,n)})}),Ge("cell()",function(t,e,r){return xr(this.cells(t,e,r))}),Ge("cell().data()",function(t){var e=this.context,n=this[0];return t===r?e.length&&n.length?C(e[0],n[0].row,n[0].column):r:(D(e[0],n[0].row,n[0].column,t),A(e[0],n[0].row,"data",n[0].column),this)}),Ge("order()",function(t,e){var a=this.context;return t===r?0!==a.length?a[0].aaSorting:r:("number"==typeof t?t=[[t,e]]:n.isArray(t[0])||(t=Array.prototype.slice.call(arguments)),this.iterator("table",function(e){e.aaSorting=t.slice()}))}),Ge("order.listener()",function(t,e,r){return this.iterator("table",function(n){Ie(n,t,e,r)})}),Ge(["columns().order()","column().order()"],function(t){var e=this;return this.iterator("table",function(r,a){var i=[];n.each(e[a],function(e,r){i.push([r,t])}),r.aaSorting=i})}),Ge("search()",function(t,e,a,i){var s=this.context;return t===r?0!==s.length?s[0].oPreviousSearch.sSearch:r:this.iterator("table",function(r){r.oFeatures.bFilter&&Z(r,n.extend({},r.oPreviousSearch,{sSearch:t+"",bRegex:null===e?!1:e,bSmart:null===a?!0:a,bCaseInsensitive:null===i?!0:i}),1)})}),qe("columns().search()","column().search()",function(t,e,a,i){return this.iterator("column",function(s,o){var l=s.aoPreSearchCols;return t===r?l[o].sSearch:void(s.oFeatures.bFilter&&(n.extend(l[o],{sSearch:t+"",bRegex:null===e?!1:e,bSmart:null===a?!0:a,bCaseInsensitive:null===i?!0:i}),Z(s,s.oPreviousSearch,1)))})}),Ge("state()",function(){return this.context.length?this.context[0].oSavedState:null}),Ge("state.clear()",function(){return this.iterator("table",function(t){t.fnStateSaveCallback.call(t.oInstance,t,{})})}),Ge("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null}),Ge("state.save()",function(){return this.iterator("table",function(t){Ae(t)})}),Ve.versionCheck=Ve.fnVersionCheck=function(t){for(var e,r,n=Ve.version.split("."),t=t.split("."),a=0,i=t.length;i>a;a++)if(e=parseInt(n[a],10)||0,r=parseInt(t[a],10)||0,e!==r)return e>r;return!0},Ve.isDataTable=Ve.fnIsDataTable=function(t){var e=n(t).get(0),r=!1;return n.each(Ve.settings,function(t,a){var i=a.nScrollHead?n("table",a.nScrollHead)[0]:null,s=a.nScrollFoot?n("table",a.nScrollFoot)[0]:null;(a.nTable===e||i===e||s===e)&&(r=!0)}),r},Ve.tables=Ve.fnTables=function(t){var e=!1;n.isPlainObject(t)&&(e=t.api,t=t.visible);var r=n.map(Ve.settings,function(e){return!t||t&&n(e.nTable).is(":visible")?e.nTable:void 0});return e?new Ze(r):r},Ve.util={throttle:_e,escapeRegex:Y},Ve.camelToHungarian=i,Ge("$()",function(t,e){var r=this.rows(e).nodes(),r=n(r);return n([].concat(r.filter(t).toArray(),r.find(t).toArray()))}),n.each(["on","one","off"],function(t,e){Ge(e+"()",function(){var t=Array.prototype.slice.call(arguments);t[0].match(/\.dt\b/)||(t[0]+=".dt");var r=n(this.tables().nodes());return r[e].apply(r,t),this})}),Ge("clear()",function(){return this.iterator("table",function(t){k(t)})}),Ge("settings()",function(){return new Ze(this.context,this.context)}),Ge("init()",function(){var t=this.context;return t.length?t[0].oInit:null}),Ge("data()",function(){return this.iterator("table",function(t){return lr(t.aoData,"_aData")}).flatten()}),Ge("destroy()",function(e){return e=e||!1,this.iterator("table",function(r){var a,i=r.nTableWrapper.parentNode,s=r.oClasses,o=r.nTable,l=r.nTBody,u=r.nTHead,c=r.nTFoot,h=n(o),l=n(l),d=n(r.nTableWrapper),f=n.map(r.aoData,function(t){return t.nTr});r.bDestroying=!0,Oe(r,"aoDestroyCallback","destroy",[r]),e||new Ze(r).columns().visible(!0),d.unbind(".DT").find(":not(tbody *)").unbind(".DT"),n(t).unbind(".DT-"+r.sInstance),o!=u.parentNode&&(h.children("thead").detach(),h.append(u)),c&&o!=c.parentNode&&(h.children("tfoot").detach(),h.append(c)),r.aaSorting=[],r.aaSortingFixed=[],ke(r),n(f).removeClass(r.asStripeClasses.join(" ")),n("th, td",u).removeClass(s.sSortable+" "+s.sSortableAsc+" "+s.sSortableDesc+" "+s.sSortableNone),r.bJUI&&(n("th span."+s.sSortIcon+", td span."+s.sSortIcon,u).detach(),n("th, td",u).each(function(){var t=n("div."+s.sSortJUIWrapper,this);n(this).append(t.contents()),t.detach()})),l.children().detach(),l.append(f),u=e?"remove":"detach",h[u](),d[u](),!e&&i&&(i.insertBefore(o,r.nTableReinsertBefore),h.css("width",r.sDestroyWidth).removeClass(s.sTable),(a=r.asDestroyStripes.length)&&l.children().each(function(t){n(this).addClass(r.asDestroyStripes[t%a])})),i=n.inArray(r,Ve.settings),-1!==i&&Ve.settings.splice(i,1)})}),n.each(["column","row","cell"],function(t,e){Ge(e+"s().every()",function(t){return this.iterator(e,function(n,a,i,s,o){t.call(new Ze(n)[e](a,"cell"===e?i:r),a,i,s,o)})})}),Ge("i18n()",function(t,e,a){var i=this.context[0],t=x(t)(i.oLanguage);return t===r&&(t=e),a!==r&&n.isPlainObject(t)&&(t=t[a]!==r?t[a]:t._),t.replace("%d",a)}),Ve.version="1.10.8",Ve.settings=[],Ve.models={},Ve.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0},Ve.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1},Ve.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},Ve.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(t){try{return JSON.parse((-1===t.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+t.sInstance+"_"+location.pathname))}catch(e){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(t,e){try{(-1===t.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+t.sInstance+"_"+location.pathname,JSON.stringify(e))}catch(r){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:n.extend({},Ve.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"},a(Ve.defaults),Ve.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null},a(Ve.defaults.column),Ve.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:r,oAjaxData:r,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==We(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==We(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var t=this._iDisplayLength,e=this._iDisplayStart,r=e+t,n=this.aiDisplay.length,a=this.oFeatures,i=a.bPaginate;return a.bServerSide?!1===i||-1===t?e+n:Math.min(e+t,this._iRecordsDisplay):!i||r>n||-1===t?n:r},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null},Ve.ext=Xe={buttons:{},classes:{},errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:Ve.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:Ve.version},n.extend(Xe,{afnFiltering:Xe.search,aTypes:Xe.type.detect,ofnSearch:Xe.type.search,oSort:Xe.type.order,afnSortData:Xe.order,aoFeatures:Xe.feature,oApi:Xe.internal,oStdClasses:Xe.classes,oPagination:Xe.pager}),n.extend(Ve.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Lr="",Lr="",Pr=Lr+"ui-state-default",Fr=Lr+"css_right ui-icon ui-icon-",Rr=Lr+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";n.extend(Ve.ext.oJUIClasses,Ve.ext.classes,{sPageButton:"fg-button ui-button "+Pr,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:Pr+" sorting_asc",sSortDesc:Pr+" sorting_desc",sSortable:Pr+" sorting",sSortableAsc:Pr+" sorting_asc_disabled",sSortableDesc:Pr+" sorting_desc_disabled",sSortableNone:Pr+" sorting_disabled",sSortJUIAsc:Fr+"triangle-1-n",sSortJUIDesc:Fr+"triangle-1-s",sSortJUI:Fr+"carat-2-n-s",sSortJUIAscAllowed:Fr+"carat-1-n",sSortJUIDescAllowed:Fr+"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+Pr,sScrollFoot:"dataTables_scrollFoot "+Pr,sHeaderTH:Pr,sFooterTH:Pr,sJUIHeader:Rr+" ui-corner-tl ui-corner-tr",sJUIFooter:Rr+" ui-corner-bl ui-corner-br"});var jr=Ve.ext.pager;n.extend(jr,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(t,e){return[ze(t,e)]},simple_numbers:function(t,e){return["previous",ze(t,e),"next"]},full_numbers:function(t,e){return["first","previous",ze(t,e),"next","last"]},_numbers:ze,numbers_length:7}),n.extend(!0,Ve.ext.renderer,{pageButton:{_:function(t,r,a,i,s,o){var l,u,c,h=t.oClasses,d=t.oLanguage.oPaginate,f=0,p=function(e,r){var i,c,g,m,_=function(e){ce(t,e.data.action,!0)};for(i=0,c=r.length;c>i;i++)if(m=r[i],n.isArray(m))g=n("<"+(m.DT_el||"div")+"/>").appendTo(e),p(g,m);else{switch(l=null,u="",m){case"ellipsis":e.append('<span class="ellipsis">&#x2026;</span>');break;case"first":l=d.sFirst,u=m+(s>0?"":" "+h.sPageButtonDisabled);break;case"previous":l=d.sPrevious,u=m+(s>0?"":" "+h.sPageButtonDisabled);
4
+ break;case"next":l=d.sNext,u=m+(o-1>s?"":" "+h.sPageButtonDisabled);break;case"last":l=d.sLast,u=m+(o-1>s?"":" "+h.sPageButtonDisabled);break;default:l=m+1,u=s===m?h.sPageButtonActive:""}null!==l&&(g=n("<a>",{"class":h.sPageButton+" "+u,"aria-controls":t.sTableId,"data-dt-idx":f,tabindex:t.iTabIndex,id:0===a&&"string"==typeof m?t.sTableId+"_"+m:null}).html(l).appendTo(e),He(g,{action:m},_),f++)}};try{c=n(r).find(e.activeElement).data("dt-idx")}catch(g){}p(n(r).empty(),i),c&&n(r).find("[data-dt-idx="+c+"]").focus()}}}),n.extend(Ve.ext.type.detect,[function(t,e){var r=e.oLanguage.sDecimal;return sr(t,r)?"num"+r:null},function(t){if(!(!t||t instanceof Date||Ke.test(t)&&tr.test(t)))return null;var e=Date.parse(t);return null!==e&&!isNaN(e)||nr(t)?"date":null},function(t,e){var r=e.oLanguage.sDecimal;return sr(t,r,!0)?"num-fmt"+r:null},function(t,e){var r=e.oLanguage.sDecimal;return or(t,r)?"html-num"+r:null},function(t,e){var r=e.oLanguage.sDecimal;return or(t,r,!0)?"html-num-fmt"+r:null},function(t){return nr(t)||"string"==typeof t&&-1!==t.indexOf("<")?"html":null}]),n.extend(Ve.ext.type.search,{html:function(t){return nr(t)?t:"string"==typeof t?t.replace(Qe," ").replace(Ye,""):""},string:function(t){return nr(t)?t:"string"==typeof t?t.replace(Qe," "):t}});var Hr=function(t,e,r,n){return 0===t||t&&"-"!==t?(e&&(t=ir(t,e)),t.replace&&(r&&(t=t.replace(r,"")),n&&(t=t.replace(n,""))),1*t):-1/0};return n.extend(Xe.type.order,{"date-pre":function(t){return Date.parse(t)||0},"html-pre":function(t){return nr(t)?"":t.replace?t.replace(/<.*?>/g,"").toLowerCase():t+""},"string-pre":function(t){return nr(t)?"":"string"==typeof t?t.toLowerCase():t.toString?t.toString():""},"string-asc":function(t,e){return e>t?-1:t>e?1:0},"string-desc":function(t,e){return e>t?1:t>e?-1:0}}),Ue(""),n.extend(!0,Ve.ext.renderer,{header:{_:function(t,e,r,a){n(t.nTable).on("order.dt.DT",function(n,i,s,o){t===i&&(n=r.idx,e.removeClass(r.sSortingClass+" "+a.sSortAsc+" "+a.sSortDesc).addClass("asc"==o[n]?a.sSortAsc:"desc"==o[n]?a.sSortDesc:r.sSortingClass))})},jqueryui:function(t,e,r,a){n("<div/>").addClass(a.sSortJUIWrapper).append(e.contents()).append(n("<span/>").addClass(a.sSortIcon+" "+r.sSortingClassJUI)).appendTo(e),n(t.nTable).on("order.dt.DT",function(n,i,s,o){t===i&&(n=r.idx,e.removeClass(a.sSortAsc+" "+a.sSortDesc).addClass("asc"==o[n]?a.sSortAsc:"desc"==o[n]?a.sSortDesc:r.sSortingClass),e.find("span."+a.sSortIcon).removeClass(a.sSortJUIAsc+" "+a.sSortJUIDesc+" "+a.sSortJUI+" "+a.sSortJUIAscAllowed+" "+a.sSortJUIDescAllowed).addClass("asc"==o[n]?a.sSortJUIAsc:"desc"==o[n]?a.sSortJUIDesc:r.sSortingClassJUI))})}}}),Ve.render={number:function(t,e,r,n,a){return{display:function(i){if("number"!=typeof i&&"string"!=typeof i)return i;var s=0>i?"-":"",i=Math.abs(parseFloat(i)),o=parseInt(i,10),i=r?e+(i-o).toFixed(r).substring(2):"";return s+(n||"")+o.toString().replace(/\B(?=(\d{3})+(?!\d))/g,t)+i+(a||"")}}}},n.extend(Ve.ext.internal,{_fnExternApiFunc:Je,_fnBuildAjax:W,_fnAjaxUpdate:z,_fnAjaxParameters:U,_fnAjaxUpdateDraw:J,_fnAjaxDataSrc:V,_fnAddColumn:h,_fnColumnOptions:d,_fnAdjustColumnSizing:f,_fnVisibleToColumnIndex:p,_fnColumnIndexToVisible:g,_fnVisbleColumns:m,_fnGetColumns:_,_fnColumnTypes:b,_fnApplyColumnDefs:v,_fnHungarianMap:a,_fnCamelToHungarian:i,_fnLanguageCompat:s,_fnBrowserDetect:u,_fnAddData:S,_fnAddTr:y,_fnNodeToDataIndex:function(t,e){return e._DT_RowIndex!==r?e._DT_RowIndex:null},_fnNodeToColumnIndex:function(t,e,r){return n.inArray(r,t.aoData[e].anCells)},_fnGetCellData:C,_fnSetCellData:D,_fnSplitObjNotation:w,_fnGetObjectDataFn:x,_fnSetObjectDataFn:T,_fnGetDataMaster:I,_fnClearTable:k,_fnDeleteIndex:M,_fnInvalidate:A,_fnGetRowElements:L,_fnCreateTr:P,_fnBuildHead:R,_fnDrawHead:j,_fnDraw:H,_fnReDraw:E,_fnAddOptionsHtml:O,_fnDetectHeader:N,_fnGetUniqueThs:B,_fnFeatureHtmlFilter:X,_fnFilterComplete:Z,_fnFilterCustom:G,_fnFilterColumn:q,_fnFilter:$,_fnFilterCreateSearch:Q,_fnEscapeRegex:Y,_fnFilterData:K,_fnFeatureHtmlInfo:re,_fnUpdateInfo:ne,_fnInfoMacros:ae,_fnInitialise:ie,_fnInitComplete:se,_fnLengthChange:oe,_fnFeatureHtmlLength:le,_fnFeatureHtmlPaginate:ue,_fnPageChange:ce,_fnFeatureHtmlProcessing:he,_fnProcessingDisplay:de,_fnFeatureHtmlTable:fe,_fnScrollDraw:pe,_fnApplyToChildren:ge,_fnCalculateColumnWidths:me,_fnThrottle:_e,_fnConvertToWidth:be,_fnGetWidestNode:ve,_fnGetMaxLenString:Se,_fnStringToCss:ye,_fnScrollBarWidth:Ce,_fnSortFlatten:De,_fnSort:we,_fnSortAria:xe,_fnSortListener:Te,_fnSortAttachListener:Ie,_fnSortingClasses:ke,_fnSortData:Me,_fnSaveState:Ae,_fnLoadState:Le,_fnSettingsFromNode:Pe,_fnLog:Fe,_fnMap:Re,_fnBindAction:He,_fnCallbackReg:Ee,_fnCallbackFire:Oe,_fnLengthOverflow:Ne,_fnRenderer:Be,_fnDataSource:We,_fnRowAttributes:F,_fnCalculateEnd:function(){}}),n.fn.dataTable=Ve,n.fn.dataTableSettings=Ve.settings,n.fn.dataTableExt=Ve.ext,n.fn.DataTable=function(t){return n(this).dataTable(t).api()},n.each(Ve,function(t,e){n.fn.DataTable[t]=e}),n.fn.dataTable};"function"==typeof define&&define.amd?define("datatables",["jquery"],n):"object"==typeof exports?module.exports=n(require("jquery")):jQuery&&!jQuery.fn.dataTable&&n(jQuery)}(window,document);
assets/js/maps.js ADDED
@@ -0,0 +1,307 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ! function($, window, document, undefined) {
2
+ function Map_Control(e) {
3
+ this.options = e
4
+ }
5
+
6
+ function overlay_generator(e, o) {
7
+ this.tileSize = e, this.overlay_options = o
8
+ }
9
+
10
+ function GoogleMaps(e, o) {
11
+ var t;
12
+ console.log(o), this.element = e, this.map_data = $.extend({}, {}, o), t = this.map_data.map_options, this.settings = $.extend({
13
+ zoom: "5",
14
+ map_type_id: "ROADMAP",
15
+ scroll_wheel: !0,
16
+ map_visual_refresh: !1,
17
+ pan_control: "true",
18
+ pan_control_position: "TOP_LEFT",
19
+ zoom_control: !0,
20
+ zoom_control_style: "SMALL",
21
+ zoom_control_position: "TOP_LEFT",
22
+ map_type_control: !0,
23
+ map_type_control_style: "HORIZONTAL_BAR",
24
+ map_type_control_position: "RIGHT_TOP",
25
+ scale_control: !0,
26
+ street_view_control: !0,
27
+ street_view_control_position: "TOP_LEFT",
28
+ overview_map_control: !0,
29
+ center_lat: "40.6153983",
30
+ center_lng: "-74.2535216",
31
+ draggable: !0
32
+ }, {}, t), this.container = $("div[rel='" + $(this.element).attr("id") + "']"), this.directionsService = new google.maps.DirectionsService, this.directionsDisplay = new google.maps.DirectionsRenderer, this.drawingmanager = new Object, this.geocoder = new google.maps.Geocoder, this.places = new Array, this.show_places = new Array, this.categories = new Object, this.all_shapes = [], this.wpgmp_polylines = [], this.wpgmp_polygons = [], this.wpgmp_circles = [], this.wpgmp_shape_events = [], this.wpgmp_rectangles = [], this.per_page_value, this.current_amenities = new Array, this.route_directions = new Array, this.init()
33
+ }
34
+ Map_Control.prototype.create_element = function(e, o, t) {
35
+ var a = document.createElement("div");
36
+ a.style.backgroundColor = "#fff", a.style.border = "2px solid #fff", a.style.borderRadius = "3px", a.style.boxShadow = "0 2px 6px rgba(0,0,0,.3)", a.style.cursor = "pointer", a.style.marginBottom = "22px", a.style.textAlign = "center", a.title = "Click to recenter the map", e.appendChild(a);
37
+ var n = document.createElement("div");
38
+ n.style.color = "rgb(25,25,25)", n.style.fontFamily = "Roboto,Arial,sans-serif", n.style.fontSize = "16px", n.style.lineHeight = "38px", n.style.paddingLeft = "5px", n.style.paddingRight = "5px", n.innerHTML = t, a.appendChild(n), google.maps.event.addDomListener(a, "click", function() {
39
+ o.setCenter(new google.maps.LatLng(41.85, -87.65))
40
+ })
41
+ }, overlay_generator.prototype.getTile = function(e, o, t) {
42
+ var a = t.createElement("div");
43
+ return a.innerHTML = e, a.style.width = "200px", a.style.height = "300px", a.style.fontSize = this.overlay_options.font_size + "px", a.style.borderStyle = this.overlay_options.border_style, a.style.borderWidth = this.overlay_options.border_width + "px", a.style.borderColor = this.overlay_options.border_color, a
44
+ }, GoogleMaps.prototype = {
45
+ init: function() {
46
+ var map_obj = this,
47
+ center = new google.maps.LatLng(map_obj.settings.center_lat, map_obj.settings.center_lng);
48
+ map_obj.map = new google.maps.Map(map_obj.element, {
49
+ zoom: parseInt(map_obj.settings.zoom),
50
+ center: center,
51
+ scrollwheel: "false" != map_obj.settings.scroll_wheel,
52
+ panControl: 1 == map_obj.settings.pan_control,
53
+ panControlOptions: {
54
+ position: eval("google.maps.ControlPosition." + map_obj.settings.pan_control_position)
55
+ },
56
+ zoomControl: 1 == map_obj.settings.zoom_control,
57
+ zoomControlOptions: {
58
+ style: eval("google.maps.ZoomControlStyle." + map_obj.settings.zoom_control_style),
59
+ position: eval("google.maps.ControlPosition." + map_obj.settings.zoom_control_position)
60
+ },
61
+ mapTypeControl: 1 == map_obj.settings.map_type_control,
62
+ mapTypeControlOptions: {
63
+ style: eval("google.maps.MapTypeControlStyle." + map_obj.settings.map_type_control_style),
64
+ position: eval("google.maps.ControlPosition." + map_obj.settings.map_type_control_position)
65
+ },
66
+ scaleControl: 1 == map_obj.settings.scale_control,
67
+ streetViewControl: 1 == map_obj.settings.street_view_control,
68
+ streetViewControlOptions: {
69
+ position: eval("google.maps.ControlPosition." + map_obj.settings.street_view_control_position)
70
+ },
71
+ overviewMapControl: 1 == map_obj.settings.overview_map_control,
72
+ overviewMapControlOptions: {
73
+ opened: map_obj.settings.overview_map_control
74
+ },
75
+ draggable: map_obj.settings.draggable,
76
+ mapTypeId: eval("google.maps.MapTypeId." + map_obj.settings.map_type_id),
77
+ styles: eval(map_obj.map_data.styles)
78
+ }), map_obj.map_loaded(), map_obj.responsive_map(), map_obj.create_markers(), map_obj.display_markers(), "undefined" != typeof map_obj.map_data.street_view && map_obj.set_streetview(center), "undefined" != typeof map_obj.map_data.bicyle_layer && map_obj.set_bicyle_layer(), "undefined" != typeof map_obj.map_data.traffic_layer && map_obj.set_traffic_layer(), "undefined" != typeof map_obj.map_data.transit_layer && map_obj.set_transit_layer(), "45" == typeof map_obj.settings.display_45_imagery && map_obj.set_45_imagery(), typeof map_obj.map_data.map_visual_refresh === !0 && map_obj.set_visual_refresh(), $(map_obj.container).on("click", ".place_title", function() {
79
+ map_obj.open_infowindow($(this).data("marker")), $("html, body").animate({
80
+ scrollTop: $(map_obj.container).offset().top
81
+ }, 500)
82
+ }), map_obj.google_auto_suggest($(".wpgmp_auto_suggest")), 1 == map_obj.settings.show_center_circle && map_obj.show_center_circle()
83
+ },
84
+ createMarker: function(e) {
85
+ var o = this,
86
+ t = o.map,
87
+ a = (e.geometry.location, {
88
+ url: e.icon,
89
+ size: new google.maps.Size(25, 25),
90
+ scaledSize: new google.maps.Size(25, 25)
91
+ });
92
+ e.marker = new google.maps.Marker({
93
+ map: t,
94
+ position: e.geometry.location,
95
+ icon: a
96
+ }), google.maps.event.addListener(e.marker, "click", function() {
97
+ o.amenity_infowindow.setContent(e.name), o.amenity_infowindow.open(t, this)
98
+ }), o.current_amenities.push(e)
99
+ },
100
+ get_user_position: function(e, o) {
101
+ var t = this;
102
+ t.user_lat_lng ? e && e(t.user_lat_lng) : navigator.geolocation.getCurrentPosition(function(o) {
103
+ t.user_lat_lng = new google.maps.LatLng(o.coords.latitude, o.coords.longitude), e && e(t.user_lat_lng)
104
+ }, function(e) {
105
+ o && o(e)
106
+ }, {
107
+ enableHighAccuracy: !0,
108
+ timeout: 5e3,
109
+ maximumAge: 0
110
+ })
111
+ },
112
+ marker_bind: function(e) {
113
+ map_obj = this, google.maps.event.addListener(e, "drag", function() {
114
+ var o = e.getPosition();
115
+ map_obj.geocoder.geocode({
116
+ latLng: o
117
+ }, function(e, o) {
118
+ if (o == google.maps.GeocoderStatus.OK && ($("#googlemap_address").val(e[0].formatted_address), $(".google_city").val(map_obj.wpgmp_finddata(e[0], "administrative_area_level_3") || map_obj.wpgmp_finddata(e[0], "locality")), $(".google_state").val(map_obj.wpgmp_finddata(e[0], "administrative_area_level_1")), $(".google_country").val(map_obj.wpgmp_finddata(e[0], "country")), e[0].address_components))
119
+ for (var t = 0; t < e[0].address_components.length; t++)
120
+ for (var a = 0; a < e[0].address_components[t].types.length; a++) "postal_code" == e[0].address_components[t].types[a] && (wpgmp_zip_code = e[0].address_components[t].long_name, $(".google_postal_code").val(wpgmp_zip_code))
121
+ }), $(".google_latitude").val(o.lat()), $(".google_longitude").val(o.lng())
122
+ })
123
+ },
124
+ google_auto_suggest: function(e) {
125
+ var o = this;
126
+ e.each(function() {
127
+ var e = this,
128
+ t = new google.maps.places.Autocomplete(this);
129
+ if (t.bindTo("bounds", o.map), "location_address" == $(this).attr("name")) {
130
+ var a = (new google.maps.InfoWindow, new google.maps.Marker({
131
+ map: o.map,
132
+ draggable: !0,
133
+ anchorPoint: new google.maps.Point(0, -29)
134
+ }));
135
+ o.marker_bind(a), google.maps.event.addListener(t, "place_changed", function() {
136
+ var e = t.getPlace();
137
+ if (e.geometry) {
138
+ if (e.geometry.viewport ? o.map.fitBounds(e.geometry.viewport) : (o.map.setCenter(e.geometry.location), o.map.setZoom(17)), $(".google_latitude").val(e.geometry.location.lat()), $(".google_longitude").val(e.geometry.location.lng()), $(".google_city").val(o.wpgmp_finddata(e, "administrative_area_level_3") || o.wpgmp_finddata(e, "locality")), $(".google_state").val(o.wpgmp_finddata(e, "administrative_area_level_1")), $(".google_country").val(o.wpgmp_finddata(e, "country")), e.address_components)
139
+ for (var n = 0; n < e.address_components.length; n++)
140
+ for (var i = 0; i < e.address_components[n].types.length; i++) "postal_code" == e.address_components[n].types[i] && (wpgmp_zip_code = e.address_components[n].long_name, $(".google_postal_code").val(wpgmp_zip_code));
141
+ a.setPosition(e.geometry.location), a.setVisible(!0)
142
+ }
143
+ })
144
+ } else google.maps.event.addListener(t, "place_changed", function() {
145
+ var o = t.getPlace();
146
+ o.geometry && ($().val(o.geometry.location.lat()), $(e).data("longitude", o.geometry.location.lng()), $(e).data("latitude", o.geometry.location.lat()))
147
+ })
148
+ })
149
+ },
150
+ wpgmp_finddata: function(e, o) {
151
+ var t = "";
152
+ for (i = 0; i < e.address_components.length; ++i) {
153
+ var a = e.address_components[i];
154
+ $.each(a.types, function(e, n) {
155
+ n == o && (t = a.long_name)
156
+ })
157
+ }
158
+ return t
159
+ },
160
+ open_infowindow: function(e) {
161
+ var o = this;
162
+ $.each(this.map_data.places, function(t, a) {
163
+ parseInt(a.id) == parseInt(e) && 1 == a.marker.visible ? (a.infowindow.open(o.map, a.marker), console.log(a)) : a.infowindow.close()
164
+ })
165
+ },
166
+ place_info: function(e) {
167
+ var o;
168
+ return $.each(this.places, function(t, a) {
169
+ parseInt(a.id) == parseInt(e) && (o = a)
170
+ }), o
171
+ },
172
+ event_listener: function(e, o, t) {
173
+ google.maps.event.addListener(e, o, t)
174
+ },
175
+ set_visual_refresh: function() {
176
+ google.maps.visualRefresh = !0
177
+ },
178
+ set_45_imagery: function() {
179
+ this.map.setTilt(45)
180
+ },
181
+ set_bicyle_layer: function() {
182
+ var e = new google.maps.BicyclingLayer;
183
+ e.setMap(this.map)
184
+ },
185
+ set_traffic_layer: function() {
186
+ var e = new google.maps.TrafficLayer;
187
+ e.setMap(this.map)
188
+ },
189
+ set_transit_layer: function() {
190
+ var e = new google.maps.TransitLayer;
191
+ e.setMap(this.map)
192
+ },
193
+ set_streetview: function(e) {
194
+ var o = {
195
+ position: e,
196
+ addressControlOptions: {
197
+ position: google.maps.ControlPosition.BOTTOM_CENTER
198
+ },
199
+ linksControl: this.map_data.street_view.links_control,
200
+ panControl: this.map_data.street_view.street_view_pan_control,
201
+ zoomControlOptions: {
202
+ style: google.maps.ZoomControlStyle.SMALL
203
+ },
204
+ enableCloseButton: this.map_data.street_view.street_view_close_button
205
+ };
206
+ "" != this.map_data.street_view.pov_heading && (o.pov = {
207
+ heading: parseInt(this.map_data.street_view.pov_heading),
208
+ pitch: parseInt(this.map_data.street_view.pov_pitch)
209
+ }), new google.maps.StreetViewPanorama(this.element, o)
210
+ },
211
+ map_loaded: function() {
212
+ var e = this,
213
+ o = e.map;
214
+ google.maps.event.addListenerOnce(o, "idle", function() {
215
+ var e = o.getCenter();
216
+ google.maps.event.trigger(o, "resize"), o.setCenter(e)
217
+ }), "true" == e.settings.center_by_nearest && e.center_by_nearest()
218
+ },
219
+ responsive_map: function() {
220
+ var e = this,
221
+ o = e.map;
222
+ google.maps.event.addDomListener(window, "resize", function() {
223
+ var e = o.getCenter();
224
+ google.maps.event.trigger(o, "resize"), o.setCenter(e), o.getBounds()
225
+ })
226
+ },
227
+ create_markers: function() {
228
+ var e = this,
229
+ o = e.map_data.places;
230
+ $.each(o, function(o, t) {
231
+ if (t.location.lat && t.location.lng) {
232
+ t.marker = new google.maps.Marker({
233
+ position: new google.maps.LatLng(parseFloat(t.location.lat), parseFloat(t.location.lng)),
234
+ icon: t.location.icon,
235
+ url: t.url,
236
+ draggable: t.location.draggable,
237
+ animation: google.maps.Animation.DROP,
238
+ map: e.map
239
+ }), 1 == e.settings.infowindow_filter_only && (t.marker.visible = !1, t.marker.setVisible(!1)), "edit_location" == e.map_data.page && e.marker_bind(t.marker);
240
+ var a = [];
241
+ if ("undefined" != typeof t.categories)
242
+ for (var n in t.categories) a.push(t.categories[n].name);
243
+ var i = "";
244
+ if (e.settings.infowindow_setting) {
245
+ var s = {
246
+ "{location_id}": t.id,
247
+ "{location_title}": t.title,
248
+ "{location_address}": t.address,
249
+ "{location_latitude}": t.location.lat,
250
+ "{location_longitude}": t.location.lng,
251
+ "{location_city}": t.location.city,
252
+ "{location_state}": t.location.state,
253
+ "{location_country}": t.location.country,
254
+ "{location_postal_code}": t.location.postal_code,
255
+ "{location_zoom}": t.location.zoom,
256
+ "{location_icon}": t.location.icon,
257
+ "{location_categories}": a.join(","),
258
+ "{location_message}": t.content
259
+ };
260
+ if ("undefined" != typeof t.location.extra_fields)
261
+ for (var r in t.location.extra_fields) s["{" + r + "}"] = t.location.extra_fields[r];
262
+ var l = e.settings.infowindow_setting.replace(/{[^{}]+}/g, function(e) {
263
+ return e in s ? s[e] : ""
264
+ });
265
+ i = l
266
+ }
267
+ "" == i && (i = '<div class="wpgmp_infowindow">' + t.content + "</div>"), t.infowindow = new google.maps.InfoWindow({
268
+ content: i
269
+ }), "true" == t.location.infowindow_default_open ? e.openInfoWindow(t) : "true" == e.settings.default_infowindow_open && e.openInfoWindow(t);
270
+ var p = e.settings.infowindow_open_event;
271
+ e.event_listener(t.marker, p, function() {
272
+ e.openInfoWindow(t)
273
+ }), e.places.push(t)
274
+ }
275
+ })
276
+ },
277
+ display_markers: function() {
278
+ var e = this;
279
+ e.show_places = [], e.categories = [];
280
+ for (var o = new Object, t = 0; t < e.places.length; t++) e.places[t].marker.setMap(e.map), 1 == e.places[t].marker.visible && e.show_places.push(this.places[t]), "undefined" != typeof e.places[t].categories && $.each(e.places[t].categories, function(e, t) {
281
+ "undefined" == typeof o[t.name] && (o[t.name] = t)
282
+ });
283
+ this.categories = o
284
+ },
285
+ get_current_location: function(e, o) {
286
+ var t = this;
287
+ "undefined" == typeof t.user_location ? navigator.geolocation.getCurrentPosition(function(o) {
288
+ t.user_location = new google.maps.LatLng(o.coords.latitude, o.coords.longitude), e && e(t.user_location)
289
+ }, function(e) {
290
+ o && o(e)
291
+ }, {
292
+ enableHighAccuracy: !0,
293
+ timeout: 5e3,
294
+ maximumAge: 0
295
+ }) : e && e(t.user_location)
296
+ },
297
+ openInfoWindow: function(e) {
298
+ $.each(this.places, function(e, o) {
299
+ o.infowindow.close()
300
+ }), "custom_link" == e.location.redirect_url ? "yes" == e.location.open_new_tab ? window.open(e.location.redirect_custom_link, "_blank") : window.open(e.location.redirect_custom_link, "_self") : e.infowindow.open(this.map, e.marker)
301
+ }
302
+ }, $.fn.maps = function(e, o) {
303
+ return this.each(function() {
304
+ $.data(this, "wpgmp_maps") || $.data(this, "wpgmp_maps", new GoogleMaps(this, e, o))
305
+ }), this
306
+ }
307
+ }(jQuery, window, document);
core/abstract.factory.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Factory Classes
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package Core
6
+ */
7
+
8
+ if ( ! class_exists( 'AbstractFactoryWPGMP' ) ) {
9
+
10
+ /**
11
+ * Factory Class Abstract
12
+ * @author Flipper Code <hello@flippercode.com>
13
+ * @version 3.0.0
14
+ * @package Core
15
+ */
16
+ abstract class AbstractFactgoryWPGMP {
17
+ /**
18
+ * Abstrct create object
19
+ * @param string $object Object Type.
20
+ * @return object Return class object.
21
+ */
22
+ abstract public function create_object($object);
23
+ }
24
+ }
core/class.controller-factory.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Controller Factory Class
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package Core
6
+ */
7
+
8
+ if ( ! class_exists( 'FactoryControllerWPGMP' ) ) {
9
+
10
+ /**
11
+ * Controller Factory Class
12
+ * @author Flipper Code <hello@flippercode.com>
13
+ * @version 3.0.0
14
+ * @package Core
15
+ */
16
+ class FactoryControllerWPGMP extends AbstractFactgoryWPGMP {
17
+ /**
18
+ * FactoryController constructer.
19
+ */
20
+ public function __construct() {
21
+ }
22
+ /**
23
+ * Create controller object by passing object type.
24
+ * @param string $objectType Object Type.
25
+ * @return object Return class object.
26
+ */
27
+ public function create_object($objectType) {
28
+
29
+ switch ( $objectType ) {
30
+
31
+ default : if ( file_exists( WPGMP_CORE_CONTROLLER_CLASS ) ) {
32
+ require_once( WPGMP_CORE_CONTROLLER_CLASS ); }
33
+ if ( class_exists( 'WPGMP_Core_Controller' ) ) {
34
+ return new WPGMP_Core_Controller( $objectType ); }
35
+ break;
36
+
37
+ }
38
+
39
+ }
40
+
41
+ }
42
+ }
core/class.controller.php ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Controller class
4
+ * @author Flipper Code<hello@flippercode.com>
5
+ * @version 3.0.0
6
+ * @package Core
7
+ */
8
+
9
+ if ( ! class_exists( 'WPGMP_Core_Controller' ) ) {
10
+
11
+ /**
12
+ * Controller class to display views.
13
+ * @author: Flipper Code<hello@flippercode.com>
14
+ * @version: 3.0.0
15
+ * @package: Maps
16
+ */
17
+ class WPGMP_Core_Controller {
18
+
19
+ /**
20
+ * Store object type
21
+ * @var String
22
+ */
23
+ private $entity;
24
+ /**
25
+ * Store entity object return by factory
26
+ * @var Object
27
+ */
28
+ private $entityObj;
29
+ /**
30
+ * Store properties of the $entity object.
31
+ * @var Array
32
+ */
33
+ private $entityObjProperties;
34
+
35
+ /**
36
+ * Intialize controller properties
37
+ * @param String $objectType Pass type of the Object.
38
+ */
39
+ function __construct($objectType) {
40
+
41
+ $this->entity = $objectType;
42
+ if ( file_exists( WPGMP_MODEL.$this->entity.'/model.'.$this->entity.'.php' ) ) {
43
+ $factoryObject = new FactoryModelWPGMP();
44
+ $this->entityObj = $factoryObject->create_object( $this->entity );
45
+ if ( is_object( $this->entityObj ) ) {
46
+ $this->entityObjProperties = get_object_vars( $this->entityObj ); }
47
+ }
48
+
49
+ }
50
+ /**
51
+ * Load requested views.
52
+ * @param String $view View name.
53
+ * @param array $options View Options.
54
+ */
55
+ public function display($view, $options = array()) {
56
+
57
+ $response = $this->do_action();
58
+
59
+ switch ( $view ) {
60
+ default : $view = $view.'.php';
61
+ }
62
+
63
+ if ( ! empty( $view ) ) {
64
+ return include( WPGMP_MODEL. "{$this->entity}/views/".$view );
65
+ }
66
+ }
67
+ /**
68
+ * Return entity name.
69
+ * @return String Type of entity.
70
+ */
71
+ protected function get_entity() {
72
+ return $this->entity;}
73
+ /**
74
+ * Handle form submissions
75
+ * @param string $action Action name.
76
+ * @return [type] Success or Failure response.
77
+ */
78
+ protected function do_action( $action = '' ) {
79
+
80
+ global $wpdb;
81
+
82
+ try {
83
+ if ( isset( $_POST['operation'] ) and sanitize_text_field( wp_unslash( $_POST['operation'] ) ) != '' ) {
84
+ $operation = sanitize_text_field( wp_unslash( $_POST['operation'] ) );
85
+ $response = $this->entityObj->$operation();
86
+ }
87
+ } catch (Exception $e) {
88
+ $response['error'] = $e->getMessage();
89
+ }
90
+
91
+ return $response;
92
+ }
93
+ /**
94
+ * Handle Add & Edit operations.
95
+ * @return Array Success or Failure response.
96
+ */
97
+ protected function action_add_edit() {
98
+
99
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
100
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); }
101
+
102
+ if ( ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
103
+
104
+ die( 'Cheating...' );
105
+
106
+ }
107
+
108
+ $response = array();
109
+ // Ignore changes in these class variables while setting up class object for insertion/updation.
110
+ $properties_to_ignore = array( 'validations','table','unique' );
111
+
112
+ foreach ( $properties_to_ignore as $classproperty ) {
113
+
114
+ if ( array_key_exists( $classproperty,$this->entityObjProperties ) ) {
115
+ unset( $this->entityObjProperties[ $classproperty ] ); }
116
+ }
117
+
118
+ foreach ( @$this->entityObjProperties as $key => $val ) {
119
+
120
+ if ( isset( $_POST[ $key ] ) and ! is_array( $_POST[ $key ] ) ) {
121
+ $post_key = sanitize_text_field( wp_unslash( $_POST[ $key ] ) );
122
+ } else {
123
+ $post_key = array_map( 'esc_attr', (array) wp_unslash( $_POST[ $key ] ) );
124
+
125
+ }
126
+
127
+ if ( isset( $post_key ) ) {
128
+ @$this->entityObj->set_val( $key,$post_key );
129
+ }
130
+ }
131
+
132
+ if ( isset( $_POST['entityID'] ) ) {
133
+ // Setting value of Id field in case of edit.
134
+ $this->entityObj->set_val( $this->entity.'_id',intval( wp_unslash( $_POST['entityID'] ) ) ); }
135
+
136
+ if ( $this->entityObj->save() > 0 ) {
137
+
138
+ $current_obj_name = ucfirst( $this->entity );
139
+ if ( isset( $_GET['doaction'] ) and 'edit' == $_GET['doaction'] ) {
140
+ $response['success'] = __( $current_obj_name.' updated successfully.',WPGMP_TEXT_DOMAIN );
141
+ } else { $response['success'] = __( $current_obj_name.' added successfully. You can manage your '.$current_obj_name.'s <a href="'.admin_url( 'admin.php?page=wpgmp_manage_'.$this->entity ).'">here</a>.', WPGMP_TEXT_DOMAIN ); }
142
+
143
+ $_POST = array();
144
+ }
145
+
146
+ return $response;
147
+ }
148
+ /**
149
+ * Handle import locations action.
150
+ * @return Array Success or Failure Information.
151
+ */
152
+ public function action_import_location() {
153
+ $response = $this->entityObj->import_location();
154
+ return $response; }
155
+ /**
156
+ * Handle Backup action.
157
+ * @return Array Success or Failure Information.
158
+ */
159
+ public function action_take_backup() {
160
+ $response = $this->entityObj->take_backup();
161
+ return $response; }
162
+ /**
163
+ * Handle upload backup action.
164
+ * @return Array Success or Failure Information.
165
+ */
166
+ public function action_upload_backup() {
167
+ $response = $this->entityObj->upload_backup();
168
+ return $response; }
169
+ /**
170
+ * Handle import backup action.
171
+ * @return Array Success or Failure Information.
172
+ */
173
+ public function action_import_backup() {
174
+ $response = $this->entityObj->import_backup();
175
+ return $response; }
176
+
177
+ }
178
+ }
core/class.database.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPGMP_Database class file.
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package Core
6
+ */
7
+
8
+ if ( ! class_exists( 'WPGMP_Database' ) ) {
9
+
10
+ /**
11
+ * Class : WPGMP_Database
12
+ * @author Flipper Code <hello@flippercode.com>
13
+ * @package Maps
14
+ */
15
+ class WPGMP_Database {
16
+ /**
17
+ * Connection reference.
18
+ * @var [type]
19
+ */
20
+ public $connection;
21
+ /**
22
+ * Intialize connection string.
23
+ */
24
+ function __construct() {
25
+
26
+ global $wpdb;
27
+ $this->connection = $wpdb;
28
+ }
29
+ /**
30
+ * Connect to database.
31
+ * @return string Connection reference.
32
+ */
33
+ public static function connect() {
34
+
35
+ global $wpdb;
36
+ return $wpdb;
37
+ }
38
+ /**
39
+ * Read query over connection.
40
+ * @param string $query SQL Query.
41
+ * @param string $connection Connection String.
42
+ * @return object Records cursor.
43
+ */
44
+ public static function reader($query, $connection) {
45
+
46
+ $cursor = $connection->get_results( $query );
47
+ return $cursor;
48
+ }
49
+ /**
50
+ * Execute delete query.
51
+ * @param string $query SQL Query.
52
+ * @param string $connection Connection String.
53
+ * @return boolean True or False.
54
+ */
55
+ public static function non_query($query, $connection) {
56
+
57
+ $result = $connection->query( $query );
58
+
59
+ if ( 0 == $result or 'FALSE' == $result ) {
60
+ return false;
61
+ }
62
+
63
+ return $result;
64
+ }
65
+ /**
66
+ * Insert or Update records
67
+ * @param string $table Table Name.
68
+ * @param array $data Data array.
69
+ * @param string $where Condition.
70
+ * @return int Insert ID or Update Status.
71
+ */
72
+ public static function insert_or_update($table, $data, $where = '') {
73
+
74
+ global $wpdb;
75
+ $wpdb->show_errors();
76
+ if ( ! is_array( $where ) ) {
77
+ $wpdb->insert( $table, $data );
78
+ $result = $wpdb->insert_id;
79
+ return $result;
80
+ } else { $result = $wpdb->update( $table, $data, $where );
81
+ return $result;
82
+ }
83
+
84
+ }
85
+ }
86
+ }
core/class.map-widget.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPGMP_Google_Map_Widget_Class File.
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package CORE
6
+ */
7
+
8
+ if ( ! class_exists( 'WPGMP_Google_Map_Widget_Class' ) ) {
9
+
10
+ /**
11
+ * Initilize google map widget.
12
+ * @author Flipper Code <hello@flippercode.com>
13
+ * @version 3.0.0
14
+ * @package Maps
15
+ */
16
+ class WPGMP_Google_Map_Widget_Class extends WP_Widget {
17
+ /**
18
+ * Initlize parent constructer.
19
+ */
20
+ public function __construct() {
21
+
22
+ parent::__construct(
23
+ 'WPGMP_Google_Map_Widget_Class',
24
+ 'WP Google Map Plugin',
25
+ array( 'description' => __( 'A widget to display google maps' , WPGMP_TEXT_DOMAIN ) )
26
+ );
27
+ }
28
+ /**
29
+ * Display widget at frontend.
30
+ * @param array $args Widget Arguments.
31
+ * @param int $instance Instance of Widget.
32
+ */
33
+ function widget( $args, $instance ) {
34
+
35
+ global $wpdb,$map;
36
+ extract( $args );
37
+
38
+ $map_id = apply_filters( 'widget_title', empty( $instance['map_id'] ) ? '' : $instance['map_id'], $instance, $this->id_base );
39
+ $map_title = apply_filters( 'widget_text', empty( $instance['map_title'] ) ? '' : $instance['map_title'], $instance );
40
+ echo $before_widget;
41
+ if ( ! empty( $map_title ) ) {
42
+ echo $before_title.$map_title.$after_title; }
43
+
44
+ if ( ! empty( $map_id ) ) {
45
+ echo do_shortcode( '[put_wpgm id='.$map_id.']' ); }
46
+ echo $after_widget;
47
+ }
48
+ /**
49
+ * Update widget options.
50
+ * @param array $new_instance New Options values.
51
+ * @param array $old_instance Old Options values.
52
+ * @return array Modified Options values.
53
+ */
54
+ function update( $new_instance, $old_instance ) {
55
+
56
+ $instance = $old_instance;
57
+ $instance['map_title'] = strip_tags( $new_instance['map_title'] );
58
+ $instance['map_id'] = strip_tags( $new_instance['map_id'] );
59
+ return $instance;
60
+ }
61
+ /**
62
+ * Backend Widget Form.
63
+ * @param array $instance Widget options values.
64
+ */
65
+ function form( $instance ) {
66
+
67
+ global $wpdb,$map;
68
+ $map_records = $wpdb->get_results( 'SELECT * FROM '.TBL_MAP.'' );
69
+ ?>
70
+ <p>
71
+ <label for="<?php echo $this->get_field_id( 'map_title' );?>">
72
+ <?php _e( 'Title:' , WPGMP_TEXT_DOMAIN );?>
73
+ </label>
74
+ <input type="text" value="<?php echo $instance['map_title']; ?>" name="<?php echo $this->get_field_name( 'map_title' ); ?>" class="widefat" style="margin-top:6px;">
75
+ </p>
76
+ <p>
77
+ <label for="<?php echo $this->get_field_id( 'map_id' );?>">
78
+ <?php _e( 'Select Your Map:' , WPGMP_TEXT_DOMAIN );?>
79
+ </label>
80
+ <select id="<?php echo $this->get_field_id( 'map_id' ); ?>" name="<?php echo $this->get_field_name( 'map_id' ); ?>" class="widefat" style="margin-top:6px;">
81
+ <option value=""><?php _e( 'Select map', WPGMP_TEXT_DOMAIN ) ?></option>
82
+ <?php
83
+ if ( ! empty( $map_records ) ) {
84
+ foreach ( $map_records as $key => $map_record ) {
85
+ ?>
86
+ <option value="<?php echo $map_record->map_id; ?>"<?php selected( $map_record->map_id,$instance['map_id'] ); ?>><?php echo $map_record->map_title; ?></option>
87
+ <?php
88
+ }
89
+ }
90
+ ?>
91
+ </select>
92
+ </p>
93
+ <?php
94
+ }
95
+ }
96
+ }
core/class.model-factory.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Model Factory Class
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package Core
6
+ */
7
+
8
+ if ( ! class_exists( 'FactoryModelWPGMP' ) ) {
9
+
10
+ /**
11
+ * Model Factory Class
12
+ * @author Flipper Code <hello@flippercode.com>
13
+ * @version 3.0.0
14
+ * @package Core
15
+ */
16
+ class FactoryModelWPGMP extends AbstractFactgoryWPGMP {
17
+ /**
18
+ * FactoryModel constructer.
19
+ */
20
+ public function __construct() {
21
+
22
+ }
23
+ /**
24
+ * Create model object by passing object type.
25
+ * @param string $objectType Object Type.
26
+ * @return object Return class object.
27
+ */
28
+ public function create_object($objectType) {
29
+ switch ( $objectType ) {
30
+
31
+ default:
32
+ require_once( WPGMP_MODEL.$objectType.'/model.'.$objectType.'.php' );
33
+ $object = 'WPGMP_Model_'.$objectType;
34
+
35
+ return new $object();
36
+ break;
37
+ }
38
+
39
+ }
40
+
41
+ }
42
+ }
core/class.model.php ADDED
@@ -0,0 +1,323 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Model base class
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @version 3.0.0
6
+ * @package Maps
7
+ */
8
+
9
+ if ( ! class_exists( 'WPGMP_Model_Base' ) ) {
10
+
11
+ /**
12
+ * Model base class
13
+ * @author Flipper Code <hello@flippercode.com>
14
+ * @version 3.0.0
15
+ * @package Maps
16
+ */
17
+ class WPGMP_Model_Base {
18
+ /**
19
+ * Errors container.
20
+ * @var array
21
+ */
22
+ protected $errors = array();
23
+ /**
24
+ * Success message container.
25
+ * @var array
26
+ */
27
+ protected $success = array();
28
+ /**
29
+ * Hold query to be executed.
30
+ * @var string
31
+ */
32
+ private $query = '';
33
+ /**
34
+ * Table name assoicated to the model class.
35
+ * @var string
36
+ */
37
+ public $table = '';
38
+ /**
39
+ * Unique field name of the model table.
40
+ * @var [type]
41
+ */
42
+ public $unique;
43
+ /**
44
+ * Navigations releated to the model.
45
+ * @var array
46
+ */
47
+ public $navigation = array( '' );
48
+ /**
49
+ * Model class constructer.
50
+ */
51
+ private function __construct() {
52
+
53
+ }
54
+ /**
55
+ * Assign value to property.
56
+ * @param string $property Property Name.
57
+ * @param string $value Property Value.
58
+ */
59
+ function set_val($property, $value) {
60
+
61
+ if ( is_array( $value ) ) {
62
+ $this->{$property} = $value; } elseif ($this->valid( $property,$value ))
63
+ $this->{$property} = $value;
64
+ }
65
+ /**
66
+ * Validate property value before assign.
67
+ * @param string $property Property Name.
68
+ * @param string $value Property Value.
69
+ * @return boolean True or False.
70
+ */
71
+ function valid($property, $value) {
72
+
73
+ if ( property_exists( $this, $property ) ) {
74
+
75
+ $validator = new WPGMP_Validator();
76
+
77
+ if ( isset( $this->validations[ $property ] ) ) {
78
+
79
+ foreach ( $this->validations[ $property ] as $type => $message ) {
80
+
81
+ $validator->add( $property,$value,$type,$message );
82
+ }
83
+
84
+ $errors = $validator->validate();
85
+
86
+ if ( $errors ) {
87
+ $this->errors[ $property ] = $errors[ $property ];
88
+ return false;
89
+ } else {
90
+ return true;
91
+ }
92
+ } else {
93
+ return true;
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * Validate all property together.
99
+ * @param array $data Property name and value pair.
100
+ * @return boolean True or False.
101
+ */
102
+ function verify($data = array()) {
103
+
104
+ if ( isset( $this->validations ) ) {
105
+
106
+ foreach ( $this->validations as $field => $checkup ) {
107
+ $validator = new WPGMP_Validator();
108
+ foreach ( $checkup as $property => $message ) {
109
+ $validator->add( $field,$data[ $field ],$property,$message );
110
+ }
111
+ $errors = $validator->validate();
112
+ if ( $errors ) {
113
+ $this->errors[ $field ] = $errors[ $field ];
114
+ }
115
+ }
116
+
117
+ if ( $errors ) {
118
+ return false;
119
+ } else {
120
+ return true;
121
+ }
122
+ } else {
123
+ return true;
124
+ }
125
+
126
+ }
127
+ /**
128
+ * Retrive records from database based on conditional array.
129
+ * @param string $table Table name.
130
+ * @param array $fcv_array Conditional Array.
131
+ * @param string $sortBy Sort by.
132
+ * @param boolean $ascending Order by.
133
+ * @param string $limit Limit.
134
+ */
135
+ function get($table = '', $fcv_array = array(), $sortBy = '', $ascending = true, $limit = '') {
136
+
137
+ $connection = WPGMP_Database::connect();
138
+
139
+ $sqlLimit = ('' != $limit ? "LIMIT $limit" : '');
140
+ $this->query = "SELECT * FROM $this->table ";
141
+ $ruleList = array();
142
+ $objects = array();
143
+
144
+ if ( count( $fcv_array ) > 0 ) {
145
+
146
+ $this->query .= ' WHERE ';
147
+
148
+ for ( $i = 0, $c = count( $fcv_array ); $i < $c; $i++ ) {
149
+
150
+ if ( count( $fcv_array[ $i ] ) == 1 ) {
151
+ $this->query .= ' '.$fcv_array[ $i ][0].' ';
152
+ continue;
153
+ } else {
154
+ if ( $i > 0 && count( $fcv_array[ $i -1 ] ) != 1 ) {
155
+ $this->query .= ' AND ';
156
+ }
157
+ if ( isset( $this->pog_attribute_type[ $fcv_array[ $i ][0] ]['db_attributes'] ) && 'NUMERIC' != $this->pog_attribute_type[ $fcv_array[ $i ][0] ]['db_attributes'][0] && 'SET' != $this->pog_attribute_type[ $fcv_array[ $i ][0] ]['db_attributes'][0] ) {
158
+ if ( 1 == $GLOBALS['configuration']['db_encoding'] ) {
159
+ $value = $this->is_column( $fcv_array[ $i ][2] ) ? 'BASE64_DECODE('.$fcv_array[ $i ][2].')' : "'".$fcv_array[ $i ][2]."'";
160
+ $this->query .= 'BASE64_DECODE(`'.$fcv_array[ $i ][0].'`) '.$fcv_array[ $i ][1].' '.$value;
161
+ } else {
162
+ $value = $this->is_column( $fcv_array[ $i ][2] ) ? $fcv_array[ $i ][2] : "'".$this->escape( $fcv_array[ $i ][2] )."'";
163
+ $this->query .= '`'.$fcv_array[ $i ][0].'` '.$fcv_array[ $i ][1].' '.$value;
164
+ }
165
+ } else {
166
+
167
+ $value = $this->is_column( $fcv_array[ $i ][2] ) ? $fcv_array[ $i ][2] : "'".$fcv_array[ $i ][2]."'";
168
+ if ( 'in' == strtolower( $fcv_array[ $i ][1] ) ) {
169
+ $value = str_replace( "'",'',$value );
170
+ $value = '('.$value.')';
171
+ }
172
+ $this->query .= '`'.$fcv_array[ $i ][0].'` '.$fcv_array[ $i ][1].' '.$value;
173
+ }
174
+ }
175
+ }
176
+ }
177
+
178
+ if ( ! empty( $sortBy ) ) {
179
+ if ( isset( $this->pog_attribute_type[ $sortBy ]['db_attributes'] ) && 'NUMERIC' != $this->pog_attribute_type[ $sortBy ]['db_attributes'][0] && 'SET' != $this->pog_attribute_type[ $sortBy ]['db_attributes'][0] ) {
180
+ if ( 1 == $GLOBALS['configuration']['db_encoding'] ) {
181
+ $sortBy = "BASE64_DECODE($sortBy) ";
182
+ } else {
183
+ $sortBy = "$sortBy ";
184
+ }
185
+ } else {
186
+ $sortBy = "$sortBy ";
187
+ }
188
+ } else {
189
+ $sortBy = $this->unique;
190
+ }
191
+
192
+ $this->query .= ' ORDER BY '.$sortBy.' '.($ascending ? 'ASC' : 'DESC')." $sqlLimit";
193
+
194
+ $thisObjectName = get_class( $this );
195
+ $cursors = WPGMP_Database::reader( $this->query, $connection );
196
+
197
+ return $cursors;
198
+ }
199
+ /**
200
+ * Query to be executed.
201
+ * @param string $query SQL Query.
202
+ * @return array Records.
203
+ */
204
+ function query($query) {
205
+
206
+ $this->query = $query;
207
+ $connection = WPGMP_Database::connect();
208
+ $thisObjectName = get_class( $this );
209
+ $cursors = WPGMP_Database::reader( $this->query, $connection );
210
+
211
+ if ( ! empty( $cursors ) ) {
212
+
213
+ foreach ( $cursors as $row ) {
214
+
215
+ $obj = new $thisObjectName();
216
+ $obj->fill( $row );
217
+ $objects[] = $obj;
218
+ }
219
+
220
+ return $objects;
221
+ }
222
+ }
223
+ /**
224
+ * Validate file extension.
225
+ * @param string $file_name File Name.
226
+ * @return boolean True or False.
227
+ */
228
+ public function wpgmp_validate_extension($file_name) {
229
+
230
+ $ext_array = array( '.csv', '.xml', '.json', '.xls' );
231
+ $extension = strtolower( strrchr( $file_name,'.' ) );
232
+ $ext_count = count( $ext_array );
233
+
234
+ if ( ! $file_name ) {
235
+ return false;
236
+ } else {
237
+ if ( ! $ext_array ) {
238
+ return true;
239
+ } else {
240
+ foreach ( $ext_array as $value ) {
241
+ $first_char = substr( $value,0,1 );
242
+ if ( '.' <> $first_char ) {
243
+ $extensions[] = '.'.strtolower( $value );
244
+ } else {
245
+ $extensions[] = strtolower( $value );
246
+ }
247
+ }
248
+
249
+ foreach ( $extensions as $value ) {
250
+ if ( $value == $extension ) {
251
+ $valid_extension = 'TRUE';
252
+ }
253
+ }
254
+
255
+ if ( $valid_extension ) {
256
+ return true;
257
+ } else {
258
+ return false;
259
+ }
260
+ }
261
+ }
262
+ }
263
+ /**
264
+ * Throw errors in try block.
265
+ * @throws Exception User custom Errors.
266
+ */
267
+ protected function throw_errors() {
268
+
269
+ if ( isset( $this->errors ) and is_array( $this->errors ) ) {
270
+
271
+ throw new Exception( implode( '<br>',$this->errors ) );
272
+
273
+ }
274
+ }
275
+
276
+ /**
277
+ * This function will try to encode $text to base64, except when $text is a number. This allows us to Escape all data before they're inserted in the database, regardless of attribute type.
278
+ * @param string $text String.
279
+ * @return string encoded to base64.
280
+ */
281
+ public function escape($text) {
282
+
283
+ return @mysql_real_escape_string( $text );
284
+ }
285
+ /**
286
+ * Check if column name.
287
+ * @param string $value Column name.
288
+ * @return boolean True or False.
289
+ */
290
+ public static function is_column($value) {
291
+
292
+ if ( strlen( $value ) > 2 ) {
293
+ if ( substr( $value, 0, 1 ) == '`' && substr( $value, strlen( $value ) - 1, 1 ) == '`' ) {
294
+ return true;
295
+ }
296
+ return false;
297
+ }
298
+
299
+ return false;
300
+ }
301
+ /**
302
+ * Convert XML to array.
303
+ * @param string $xml XML nodes.
304
+ * @return array Array nodes.
305
+ */
306
+ public function wpgmp_xml_2array($xml) {
307
+
308
+ $arr = array();
309
+
310
+ foreach ( $xml->children() as $r ) {
311
+ $t = array();
312
+ if ( count( $r->children() ) == 0 ) {
313
+ $arr[ $r->getName() ] = strval( $r );
314
+ } else {
315
+ $arr[ $r->getName() ][] = $this->wpgmp_xml_2array( $r );
316
+ }
317
+ }
318
+
319
+ return $arr;
320
+ }
321
+
322
+ }
323
+ }
core/class.tabular.php ADDED
@@ -0,0 +1,743 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WP_List_Table_Helper Class File.
4
+ * @package Core
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ */
7
+
8
+ if ( ! class_exists( 'WP_List_Table' ) ) {
9
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' ); }
10
+
11
+ /**
12
+ * Extend WP_LIST_TABLE to simplify table listing.
13
+ * @package Core
14
+ * @author Flipper Code <hello@flippercode.com>
15
+ */
16
+ class WP_List_Table_Helper extends WP_List_Table {
17
+
18
+ /**
19
+ * Table name.
20
+ * @var string
21
+ */
22
+ var $table;
23
+ /**
24
+ * Custom SQL Query to fetch records.
25
+ * @var string
26
+ */
27
+ var $sql;
28
+ /**
29
+ * Action over records.
30
+ * @var array
31
+ */
32
+ var $actions = array( 'edit','delete' );
33
+ /**
34
+ * Timestamp Column in table.
35
+ * @var string
36
+ */
37
+ var $currenttimestamp_field;
38
+ /**
39
+ * Text Domain for multilingual.
40
+ * @var string
41
+ */
42
+ var $textdomain;
43
+ /**
44
+ * Singular label.
45
+ * @var string
46
+ */
47
+ var $singular_label;
48
+ /**
49
+ * Plural lable.
50
+ * @var string
51
+ */
52
+ var $plural_label;
53
+ /**
54
+ * Show add navigation at the top.
55
+ * @var boolean
56
+ */
57
+ var $show_add_button = true;
58
+ /**
59
+ * Ajax based listing
60
+ * @var boolean
61
+ */
62
+ var $ajax = false;
63
+ /**
64
+ * Columns to be displayed.
65
+ * @var array
66
+ */
67
+ var $columns;
68
+ /**
69
+ * Columns to be sortable.
70
+ * @var array
71
+ */
72
+ var $sortable;
73
+ /**
74
+ * Fields to be hide.
75
+ * @var array
76
+ */
77
+ var $hidden;
78
+ /**
79
+ * Records per page.
80
+ * @var integer
81
+ */
82
+ var $per_page = 10;
83
+ /**
84
+ * Slug for the manage page.
85
+ * @var string
86
+ */
87
+ var $admin_listing_page_name;
88
+ /**
89
+ * Slug for the add or edit page.
90
+ * @var string
91
+ */
92
+ var $admin_add_page_name;
93
+ /**
94
+ * Response
95
+ * @var string
96
+ */
97
+ var $response;
98
+ /**
99
+ * Display string at the top of the table.
100
+ * @var string
101
+ */
102
+ var $toptext;
103
+ /**
104
+ * Display string at the bottom of the table.
105
+ * @var [type]
106
+ */
107
+ var $bottomtext;
108
+ /**
109
+ * Primary column of the table.
110
+ * @var string
111
+ */
112
+ var $primary_col;
113
+ /**
114
+ * Column where to display actions navigation.
115
+ * @var string
116
+ */
117
+ var $col_showing_links;
118
+ /**
119
+ * Call external function when actions executed.
120
+ * @var array
121
+ */
122
+ var $extra_processing_on_actions;
123
+ /**
124
+ * Current action name.
125
+ * @var string
126
+ */
127
+ var $now_action;
128
+ /**
129
+ * Table prefix.
130
+ * @var string
131
+ */
132
+ var $prefix;
133
+ /**
134
+ * Current page's records.
135
+ * @var array
136
+ */
137
+ var $found_data;
138
+ /**
139
+ * Total # of records.
140
+ * @var int
141
+ */
142
+ var $items;
143
+ /**
144
+ * All Records.
145
+ * @var array
146
+ */
147
+ var $data;
148
+ /**
149
+ * Columns to be excluded in search.
150
+ * @var array
151
+ */
152
+ var $searchExclude;
153
+ /**
154
+ * Actions executed in bulk action.
155
+ * @var array
156
+ */
157
+ var $bulk_actions;
158
+
159
+ /**
160
+ * Constructer method
161
+ * @param array $tableinfo Listing configurations.
162
+ */
163
+ public function __construct($tableinfo) {
164
+
165
+ global $wpdb;
166
+ $this->prefix = $wpdb->prefix;
167
+
168
+ foreach ( $tableinfo as $key => $value ) { // Initialise constuctor based provided values to class variables.
169
+ $this->$key = $tableinfo[ $key ];
170
+ }
171
+
172
+ parent::__construct( array(
173
+ 'singular' => __( $this->singular_label, $this->textdomain ),
174
+ 'plural' => __( $this->plural_label, $this->textdomain ),
175
+ 'ajax' => $this->ajax,
176
+ ) );
177
+
178
+ $this->init_listing();
179
+
180
+ }
181
+ /**
182
+ * Initialize table listing.
183
+ */
184
+ public function init_listing() {
185
+
186
+ if ( ! empty( $this->currenttimestamp_field ) ) { // Load extra resources if we want to show time based filters in listing table.
187
+
188
+ wp_enqueue_script( 'jquery-ui-datepicker' );
189
+ wp_enqueue_style( 'jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' );
190
+
191
+ }
192
+ $this->prepare_items();
193
+
194
+ if ( ! empty( $_GET['doaction'] ) and ! empty( $_GET[ $this->primary_col ] ) ) {
195
+ $this->now_action = $function_name = sanitize_text_field( wp_unslash( $_GET['doaction'] ) );
196
+ if ( false != strpos( sanitize_text_field( wp_unslash( $_GET['doaction'] ) ), '-' ) ) {
197
+ $function_name = str_replace( '-','',$function_name ); }
198
+ $this->$function_name();
199
+
200
+ } else {
201
+ $this->listing();
202
+ }
203
+
204
+ }
205
+ /**
206
+ * Edit action.
207
+ */
208
+ public function edit() {
209
+
210
+ }
211
+ /**
212
+ * Delete action.
213
+ */
214
+ public function delete() {
215
+
216
+ global $wpdb;
217
+ $id = intval( $_GET[ $this->primary_col ] );
218
+ $this->do_extra_processing_on_actions( $id );
219
+ $query = "DELETE FROM {$this->table} WHERE {$this->primary_col} = ".$_GET[ $this->primary_col ];
220
+ $del = $wpdb->query( $query );
221
+ $this->prepare_items();
222
+ $this->response['success'] = __( 'Selected '.ucwords( $this->singular_label ).' Deleted Successfully.', $this->textdomain );
223
+ $this->listing();
224
+
225
+ }
226
+ /**
227
+ * Late Static Binding for calling the methods in child class.
228
+ * @param int $id Record ID.
229
+ */
230
+ public function do_extra_processing_on_actions($id) {
231
+
232
+ if ( ! empty( $this->extra_processing_on_actions ) ) {
233
+
234
+ if ( in_array( $this->now_action,$this->extra_processing_on_actions ) ) {
235
+
236
+ $function_to_call = 'process_'.$this->now_action;
237
+ //static::$function_to_call($id); // Late Static Binding.
238
+
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Display records listing.
244
+ */
245
+ public function listing() {
246
+ ?>
247
+
248
+ <div class="container">
249
+ <div class="row">
250
+ <div class="col-md-12">
251
+ <div class="wpgmp_menu_title">
252
+ <h4 class="alert alert-info"><?php _e( 'Manage '.ucwords( $this->plural_label ), $this->textdomain );?></h4>
253
+ </div>
254
+ <div class="wpgmp-overview">
255
+ <?php $this->show_notification( $this->response ); ?>
256
+ <fieldset>
257
+ <form method="post" action="<?php echo admin_url( 'admin.php?page='.$this->admin_listing_page_name ); ?>">
258
+ <?php
259
+ $this->search_box( 'search', 'search_id' );
260
+ $this->display();
261
+ ?>
262
+ <input type="hidden" name="row_id" value="" />
263
+ <input type="hidden" name="operation" value="" />
264
+ <?php wp_nonce_field( 'wpgmp-nonce','_wpnonce',true,true ); ?>
265
+ </form>
266
+ </fieldset>
267
+ </div>
268
+ </br>
269
+ </div>
270
+ </div>
271
+ </div>
272
+ <?php }
273
+ /**
274
+ * Reset primary column ID.
275
+ */
276
+ public function unset_id_field() {
277
+
278
+ if ( array_key_exists( $this->primary_col, $this->columns ) ) { unset( $this->columns[ $this->primary_col ] ); }
279
+ }
280
+ /**
281
+ * Get sortable columns.
282
+ * @return array Sortable columns names.
283
+ */
284
+ function get_sortable_columns() {
285
+
286
+ if ( empty( $this->sortable ) ) {
287
+
288
+ $sortable_columns[ $this->primary_col ] = array( $this->primary_col,false );
289
+ } else {
290
+
291
+ foreach ( $this->sortable as $sortable ) {
292
+ $sortable_columns[ $sortable ] = array( $sortable,false );
293
+ }
294
+ }
295
+ return $sortable_columns;
296
+ }
297
+ /**
298
+ * Get columns to be displayed.
299
+ * @return array Columns names.
300
+ */
301
+ function get_columns() {
302
+
303
+ $columns = array( 'cb' => '<input type="checkbox" />' );
304
+
305
+ if ( ! empty( $this->sql ) ) {
306
+ global $wpdb;
307
+ $results = $wpdb->get_results( $this->sql ) or die( mysql_error() );
308
+ foreach ( $results[0] as $column_name => $column_value ) { // Get all columns by provided returned by sql query(Preparing Columns Array).
309
+ $this->columns[ $column_name ] = $column_name;
310
+ }
311
+ } else {
312
+ if ( empty( $this->columns ) ) {
313
+ global $wpdb;
314
+ foreach ( $wpdb->get_col( 'DESC ' . $this->table, 0 ) as $column_name ) { // Query all column name usind DESC (Preparing Columns Array).
315
+ $this->columns[ $column_name ] = $column_name;
316
+ }
317
+ }
318
+ }
319
+
320
+ $this->unset_id_field(); // Preventing Id field to showup in Listing.
321
+
322
+ // This is how we initialise all columns dynamically instead of statically (normally we write each column name here) in get_columns function definition :).
323
+ foreach ( $this->columns as $dbcolname => $collabel ) {
324
+ $columns[ $dbcolname ] = __( $collabel, $this->textdomain );
325
+ }
326
+
327
+ return $columns;
328
+ }
329
+ /**
330
+ * Column where to display actions.
331
+ * @param array $item Record.
332
+ * @param string $column_name Column name.
333
+ * @return string Column output.
334
+ */
335
+ function column_default( $item, $column_name ) {
336
+
337
+ // Return Default values from db except current timestamp field. If currenttimestamp_field is encountered return formatted value.
338
+ if ( ! empty( $this->currenttimestamp_field ) and $column_name == $this->currenttimestamp_field ) {
339
+ $return = date( 'F j, Y',strtotime( $item->$column_name ) );
340
+ } else if ( $column_name == $this->col_showing_links ) {
341
+
342
+ $actions = array();
343
+ foreach ( $this->actions as $action ) {
344
+ $action_slug = sanitize_title( $action );
345
+ $action_label = ucwords( $action );
346
+ if ( 'delete' == $action_slug ) {
347
+ $actions[ $action_slug ] = sprintf( '<a href="?page=%s&doaction=%s&'.$this->primary_col.'=%s">'.$action_label.'</a>',$this->admin_listing_page_name,$action_slug,$item->{$this->primary_col} ); } else if ( 'edit' == $action_slug ) {
348
+ $actions[ $action_slug ] = sprintf( '<a href="?page=%s&doaction=%s&'.$this->primary_col.'=%s">'.$action_label.'</a>',$this->admin_add_page_name,$action_slug,$item->{$this->primary_col} );
349
+ } else { $actions[ $action_slug ] = sprintf( '<a href="?page=%s&doaction=%s&'.$this->primary_col.'=%s">'.$action_label.'</a>',$this->admin_listing_page_name,$action_slug,$item->{$this->primary_col} ); }
350
+ }
351
+ return sprintf( '%1$s %2$s', $item->{$this->col_showing_links}, $this->row_actions( $actions ) );
352
+
353
+ } else {
354
+ $return = $item->$column_name;
355
+ }
356
+ return $return;
357
+ }
358
+
359
+ /**
360
+ * Checkbox for each record.
361
+ * @param array $item Record
362
+ * @return string Checkbox Element.
363
+ */
364
+ function column_cb($item) {
365
+ return sprintf( '<input type="checkbox" name="id[]" value="%s" />', $item->{$this->primary_col} ); }
366
+ /**
367
+ * Sorting Order
368
+ * @param string $a First element.
369
+ * @param string $b Second element.
370
+ * @return string Winner element.
371
+ */
372
+ function usort_reorder( $a, $b ) {
373
+
374
+ $orderby = ( ! empty( $_GET['orderby'] ) ) ? $_GET['orderby'] : '';
375
+ $order = ( ! empty( $_GET['order'] ) ) ? $_GET['order'] : 'asc';
376
+ $result = strcmp( $a[ $orderby ], $b[ $orderby ] );
377
+ return ( 'asc' == $order ) ? $result : -$result;
378
+ }
379
+ /**
380
+ * Get bulk actions.
381
+ * @return array Bulk action listing.
382
+ */
383
+ function get_bulk_actions() {
384
+
385
+ $actions = array(
386
+ 'delete' => 'Delete',
387
+ );
388
+ $actions = array_merge( $actions, (array) $this->bulk_actions );
389
+ return $actions;
390
+ }
391
+ /**
392
+ * Get records from ids.
393
+ * @return array Records ID.
394
+ */
395
+ function get_user_selected_records() {
396
+
397
+ $ids = isset( $_REQUEST['id'] ) ? $_REQUEST['id'] : array();
398
+ if ( is_array( $ids ) ) { $ids = implode( ',', $ids ); }
399
+ if ( ! empty( $ids ) ) {
400
+ return $ids; }
401
+ }
402
+ /**
403
+ * Process bulk actions.
404
+ */
405
+ function process_bulk_action() {
406
+
407
+ global $wpdb;
408
+ $this->now_action = $this->current_action();
409
+ $ids = $this->get_user_selected_records();
410
+ if ( 'delete' === $this->current_action() and ! empty( $ids ) ) {
411
+
412
+ if( isset( $_REQUEST['id'] ) ) {
413
+ foreach ( ( $_REQUEST['id'] ) as $id ) {
414
+ $this->do_extra_processing_on_actions( $id ); // Also Perform additional functionality when records are deleted.
415
+ }
416
+ }
417
+
418
+
419
+ $query = "DELETE FROM {$this->table} WHERE {$this->primary_col} IN($ids)";
420
+ $del = $wpdb->query( $query );
421
+ $this->response['success'] = (strpos( $ids, ',' ) !== false) ? __( "Selected {$this->plural_label} Deleted Successfully.", $this->textdomain ) : __( 'Selected '.ucwords( ucwords( $this->singular_label ) ).' Deleted Successfully.', $this->textdomain );
422
+
423
+ } else if ( 'export_csv' === $this->current_action() ) {
424
+ ob_clean();
425
+ global $wpdb;
426
+ $ids = $this->get_user_selected_records();
427
+ $ids = ( ! empty( $ids )) ? " WHERE {$this->primary_col} IN($ids) " : '';
428
+ $columns = array_keys( $this->columns );
429
+ $columns = (count( $columns ) == 0) ? $columns[0] : implode( ',',$columns );
430
+ $query = (empty( $this->sql )) ? "SELECT $columns FROM ".$this->table.$ids." order by {$this->primary_col} desc" : $this->sql;
431
+ $data = $wpdb->get_results( $query,ARRAY_A );
432
+ $tablerecords = array();
433
+ if ( ! empty( $this->sql ) ) {
434
+ $col_key_value = array();
435
+ foreach ( $data[0] as $key => $val ) { // Make csv's first row column heading according to columns selected in custom sql.
436
+ $col_key_value[ $key ] = $key;
437
+ }
438
+ $tablerecords[] = $col_key_value;
439
+ } else {
440
+ $tablerecords[] = $this->columns; // Make csv's first row column heading according automatic detected columns.
441
+ }
442
+ foreach ( $data as $entry ) {
443
+ if ( array_key_exists( $this->primary_col,$entry ) ) {
444
+ unset( $entry[ $this->primary_col ] ); }
445
+ $tablerecords[] = $entry;
446
+
447
+ }
448
+ header( 'Content-Type: application/csv' );
449
+ header( "Content-Disposition: attachment; filename=\"{$this->plural_label}-Records.csv\";" );
450
+ header( 'Pragma: no-cache' );
451
+ $fp = fopen( 'php://output', 'w' );
452
+ foreach ( $tablerecords as $record ) {
453
+ fputcsv( $fp, $record );
454
+ }
455
+ fclose( $fp );
456
+ exit;
457
+
458
+ }
459
+ // $this->do_extra_processing_on_actions();
460
+ }
461
+ /**
462
+ * Show notification message based on response.
463
+ * @param array $response Response.
464
+ */
465
+ public function show_notification($response) {
466
+
467
+ if ( ! empty( $response['error'] ) ) {
468
+ $this->show_message( $response['error'],true ); } else if ( ! empty( $response['success'] ) ) {
469
+ $this->show_message( $response['success'] ); }
470
+
471
+ }
472
+ /**
473
+ * Message html element.
474
+ * @param string $message Message.
475
+ * @param boolean $errormsg Error or not.
476
+ * @return string Message element.
477
+ */
478
+ public function show_message($message, $errormsg = false) {
479
+
480
+ if ( empty( $message ) ) {
481
+ return; }
482
+ if ( $errormsg ) {
483
+ echo "<div class='alert alert-info'>{$message}</div>";
484
+ } else { echo "<div class='alert alert-success'>{$message}</div>"; }
485
+
486
+ }
487
+ /**
488
+ * Prepare records before print.
489
+ */
490
+ function prepare_items() {
491
+
492
+ global $wpdb;
493
+ $columns = $this->get_columns();
494
+ $hidden = array();
495
+ $sortable = $this->get_sortable_columns();
496
+ $this->_column_headers = array( $columns, $hidden, $sortable );
497
+ $this->process_bulk_action();
498
+ // Check whether query must be build through table name or an sql is provided by developer.
499
+ $query = (empty( $this->sql )) ? 'SELECT * FROM '.$this->table : $this->sql;
500
+ if ( $this->admin_listing_page_name == @$_GET['page'] && '' != @$_REQUEST['s'] ) {
501
+
502
+ $s = @$_REQUEST['s'];
503
+ $first_column;
504
+ $remaining_columns = array();
505
+ $basic_search_query = '';
506
+ foreach ( $this->columns as $column_name => $columnlabel ) {
507
+
508
+ if ( "{$this->primary_col}" == $column_name ) {
509
+ continue;
510
+ } else {
511
+ if ( empty( $first_column ) ) {
512
+ $first_column = $column_name;
513
+ $basic_search_query = " WHERE {$column_name} LIKE '%".$s."%'";
514
+ } else {
515
+ $remaining_columns[] = $column_name;
516
+ if ( ! @in_array( $column_name,$this->searchExclude ) ) {
517
+ $basic_search_query .= " or {$column_name} LIKE '%".$s."%'"; }
518
+ }
519
+ }
520
+ }
521
+
522
+ $query_to_run = $query.$basic_search_query;
523
+ $query_to_run .= " order by {$this->primary_col} desc";
524
+
525
+ } else if ( ! empty( $_GET['orderby'] ) and ! empty( $_GET['order'] ) ) {
526
+ $orderby = ( ! empty( $_GET['orderby'] ) ) ? $_GET['orderby'] : $this->primary_col;
527
+ $order = ( ! empty( $_GET['order'] ) ) ? $_GET['order'] : 'asc';
528
+ $query_to_run = $query;
529
+ $query_to_run .= " order by {$orderby} {$order}";
530
+ } else {
531
+ $query_to_run = $query;
532
+ if ( ! empty( $this->currenttimestamp_field ) ) {
533
+ $query_to_run = $this->filter_query( $query_to_run ); }
534
+ $query_to_run .= " order by {$this->primary_col} desc";
535
+ }
536
+ // echo $query_to_run;
537
+ $this->data = $wpdb->get_results( $query_to_run );
538
+ $current_page = $this->get_pagenum();
539
+ $total_items = count( $this->data );
540
+ $this->found_data = @array_slice( $this->data,( ( $current_page -1 ) * $this->per_page ), $this->per_page );
541
+ $this->set_pagination_args( array(
542
+ 'total_items' => $total_items,
543
+ 'per_page' => $this->per_page,
544
+ ) );
545
+ $this->items = $this->found_data;
546
+
547
+ }
548
+ /**
549
+ * Extra Filter selection box at the top of table.
550
+ * @param string $which Top or Bottom.
551
+ */
552
+ function extra_tablenav( $which ) {
553
+ $text = ( 'top' == $which ) ? $this->toptext : $this->bottomtext;
554
+ echo $text;
555
+ if ( 'top' != $which ) {
556
+ return; }
557
+
558
+ if ( ! empty( $this->currenttimestamp_field ) ) {
559
+ $filter_by_post = sanitize_text_field( wp_unslash( $_POST['filter_by'] ) );
560
+ ?>
561
+ <div class="alignleft actions">
562
+ <label>Filter By: </label>
563
+ <select name="filter_by" style="float:none;">
564
+ <option value="">Select Filter Criteria</option>
565
+ <option value="today" <?php selected( $filter_by_post, 'today' ); ?>>Today</option>
566
+ <option value="yesterday" <?php selected( $filter_by_post, 'yesterday' ); ?>>Yesterday</option>
567
+ <option value="this_week" <?php selected( $filter_by_post, 'this_week' ); ?>>This Week</option>
568
+ <option value="this_month" <?php selected( $filter_by_post, 'this_month' ); ?>>This Month</option>
569
+ <option value="last_3_months" <?php selected( $filter_by_post, 'last_3_months' ); ?>>Last 3 Months</option>
570
+ <option value="last_6_months" <?php selected( $filter_by_post, 'last_6_months' ); ?>>Last 6 Months</option>
571
+ <option value="last_year" <?php selected( $filter_by_post, 'last_year' ); ?>>Last Year</option>
572
+ <option value="custom" <?php selected( $filter_by_post, 'custom' ); ?>>Custom</option>
573
+ </select>
574
+ <?php
575
+ if ( $_POST['from_date'] || $_POST['to_date'] ) {
576
+ $display = 'inline';
577
+ } else { $display = 'none'; }
578
+ ?>
579
+ <div id="custom_filter" style="display:<?php echo $display; ?>;"> <label>From</label>
580
+ <input type="text" name="from_date" id="from_date" value="<?php echo sanitize_text_field( $_POST['from_date'] ); ?>">
581
+ <label>To</label>
582
+ <input type="text" name="to_date" id="to_date" value="<?php echo sanitize_text_field( $_POST['to_date'] ); ?>">
583
+ </div>
584
+
585
+ <?php submit_button( __( 'Filter' ), 'button', 'filter_action', false, array( 'id' => 'post-query-submit' ) ); ?>
586
+ </div>
587
+ <?php
588
+
589
+ }
590
+ }
591
+ /**
592
+ * display Pagination
593
+ * @param string $which Top or Bottom.
594
+ */
595
+ protected function pagination( $which ) {
596
+
597
+ if ( empty( $this->_pagination_args ) ) {
598
+ return;
599
+ }
600
+ $total_items = $this->_pagination_args['total_items'];
601
+ $total_pages = $this->_pagination_args['total_pages'];
602
+ $infinite_scroll = false;
603
+ if ( isset( $this->_pagination_args['infinite_scroll'] ) ) {
604
+ $infinite_scroll = $this->_pagination_args['infinite_scroll'];
605
+ }
606
+
607
+ $output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
608
+
609
+ $current = $this->get_pagenum();
610
+
611
+ $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
612
+
613
+ $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
614
+
615
+ $page_links = array();
616
+
617
+ $disable_first = $disable_last = '';
618
+ if ( 1 == $current ) {
619
+ $disable_first = ' disabled';
620
+ }
621
+ if ( $current == $total_pages ) {
622
+ $disable_last = ' disabled';
623
+ }
624
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
625
+ 'first-page' . $disable_first,
626
+ esc_attr__( 'Go to the first page' ),
627
+ esc_url( remove_query_arg( 'paged', $current_url ) ),
628
+ '&laquo;'
629
+ );
630
+
631
+ if ( isset( $_REQUEST['s'] ) and ! empty( $_REQUEST['s'] ) ) {
632
+ $current_url = add_query_arg( 's', $_REQUEST['s'], $current_url ); }
633
+
634
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
635
+ 'prev-page' . $disable_first,
636
+ esc_attr__( 'Go to the previous page' ),
637
+ esc_url( add_query_arg( 'paged', max( 1, $current -1 ), $current_url ) ),
638
+ '&lsaquo;'
639
+ );
640
+
641
+ if ( 'bottom' == $which ) {
642
+ $html_current_page = $current;
643
+ } else {
644
+ $html_current_page = sprintf( "%s<input class='current-page' id='current-page-selector' title='%s' type='text' name='paged' value='%s' size='%d' />",
645
+ '<label for="current-page-selector" class="screen-reader-text">' . __( 'Select Page' ) . '</label>',
646
+ esc_attr__( 'Current page' ),
647
+ $current,
648
+ strlen( $total_pages )
649
+ );
650
+ }
651
+ $html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
652
+ $page_links[] = '<span class="paging-input">' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . '</span>';
653
+
654
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
655
+ 'next-page' . $disable_last,
656
+ esc_attr__( 'Go to the next page' ),
657
+ esc_url( add_query_arg( 'paged', min( $total_pages, $current + 1 ), $current_url ) ),
658
+ '&rsaquo;'
659
+ );
660
+
661
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
662
+ 'last-page' . $disable_last,
663
+ esc_attr__( 'Go to the last page' ),
664
+ esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ),
665
+ '&raquo;'
666
+ );
667
+
668
+ $pagination_links_class = 'pagination-links';
669
+ if ( ! empty( $infinite_scroll ) ) {
670
+ $pagination_links_class = ' hide-if-js';
671
+ }
672
+ $output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>';
673
+
674
+ if ( $total_pages ) {
675
+ $page_class = $total_pages < 2 ? ' one-page' : '';
676
+ } else {
677
+ $page_class = ' no-pages';
678
+ }
679
+ $this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>";
680
+
681
+ echo $this->_pagination;
682
+ }
683
+
684
+ /**
685
+ * Build Filter query.
686
+ * @param string $query SQL query.
687
+ * @return string SQL query.
688
+ */
689
+ private function filter_query( $query ) {
690
+
691
+ $add_query = '';
692
+ $filter_by = $_REQUEST['filter_by'];
693
+ switch ( $filter_by ) {
694
+ case 'today' :
695
+ $today = getdate();
696
+ $add_query = sprintf( "AND( YEAR({$this->currenttimestamp_field}) = %s AND MONTH({$this->currenttimestamp_field}) = %s AND DAYOFMONTH({$this->currenttimestamp_field}) = %s)", $today['year'], $today['mon'], $today['mday'] );
697
+ break;
698
+ case 'yesterday' :
699
+ $yesterday = strtotime( date( 'Y-m-d', strtotime( ' - 1 day' ) ) );
700
+ $add_query = sprintf( "AND( YEAR({$this->currenttimestamp_field}) = %s AND MONTH({$this->currenttimestamp_field}) = %s AND DAYOFMONTH({$this->currenttimestamp_field}) = %s)", date( 'Y',$yesterday ), date( 'm',$yesterday ), date( 'd',$yesterday ) );
701
+ break;
702
+ case 'this_week' :
703
+ $week = date( 'W' );
704
+ $year = date( 'Y' );
705
+ $add_query = sprintf( "AND( YEAR({$this->currenttimestamp_field}) = %s AND WEEK({$this->currenttimestamp_field}, 1) = %s )", $year, $week );
706
+ break;
707
+ case 'this_month':
708
+ $month = date( 'm' );
709
+ $add_query = sprintf( "AND( MONTH({$this->currenttimestamp_field}) = %s )", $month );
710
+ break;
711
+ case 'last_3_months' :
712
+ $start_date = date( 'Y-m-d h:i:s', mktime( 0, 0, 0, date( 'm' ) -1, 1, date( 'Y' ) ) );
713
+ $end_date = date( 'Y-m-d h:i:s', mktime( 0, 0, 0, date( 'm' ) - 3, 1, date( 'Y' ) ) );
714
+ $add_query = sprintf( "AND {$this->currenttimestamp_field} > '%s' AND {$this->currenttimestamp_field} < '%s'", $end_date, $start_date );
715
+ break;
716
+ case 'last_6_months' :
717
+ $start_date = date( 'Y-m-d h:i:s', mktime( 0, 0, 0, date( 'm' ) -1, 1, date( 'Y' ) ) );
718
+ $end_date = date( 'Y-m-d h:i:s', mktime( 0, 0, 0, date( 'm' ) - 6, 1, date( 'Y' ) ) );
719
+ $add_query = sprintf( "AND {$this->currenttimestamp_field} > '%s' AND {$this->currenttimestamp_field} < '%s'", $end_date, $start_date );
720
+ break;
721
+ case 'last_year' :
722
+ $year = date( 'Y', strtotime( '-1 Year' ) );
723
+ $add_query = sprintf( "AND YEAR({$this->currenttimestamp_field}) = %s", $year );
724
+ break;
725
+ default :
726
+ break;
727
+
728
+ }
729
+
730
+ if ( isset( $_POST['from_date'] ) && ! empty( $_POST['from_date'] ) && isset( $_POST['to_date'] ) && ! empty( $_POST['to_date'] ) ) {
731
+ $from_date = date( 'Y-m-d h:i:s', strtotime( $_POST['from_date'] ) );
732
+ $to_date = date( 'Y-m-d h:i:s', strtotime( $_POST['to_date'] ) );
733
+ $add_query = sprintf( "AND {$this->currenttimestamp_field} >= '%s' AND {$this->currenttimestamp_field} <= '%s'", $from_date, $to_date );
734
+ }
735
+
736
+ if ( strpos( strtolower( $query ), 'where' ) == false ) {
737
+ $query .= ' WHERE 1=1'; }
738
+ if ( ! empty( $add_query ) ) {
739
+ $query .= ' '.$add_query; }
740
+ return $query;
741
+ }
742
+
743
+ }
core/class.template.php ADDED
@@ -0,0 +1,844 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Generate Bootstrap Form and it's Elements.
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @version 3.0.0
6
+ * @package Maps
7
+ */
8
+
9
+ if ( ! class_exists( 'Responsive_Markup' ) ) {
10
+
11
+ /**
12
+ * Generate Bootstrap Form and it's Elements.
13
+ * @author Flipper Code <hello@flippercode.com>
14
+ * @version 3.0.0
15
+ * @package Maps
16
+ */
17
+ class Responsive_Markup {
18
+ /**
19
+ * Form Title
20
+ * @var String
21
+ */
22
+ protected $form_title = null;
23
+ /**
24
+ * Form Name
25
+ * @var String
26
+ */
27
+ public $form_name = null;
28
+ /**
29
+ * Form ID
30
+ * @var String
31
+ */
32
+ public $form_id = null;
33
+ /**
34
+ * Form Action
35
+ * @var String
36
+ */
37
+ public $form_action = '';
38
+ /**
39
+ * Form Orientation - Vertical or Horizontal
40
+ * @var String
41
+ */
42
+ public $form_type = 'form-horizontal';
43
+ /**
44
+ * Call to Action Slug
45
+ * @var String
46
+ */
47
+ protected $manage_pagename = null;
48
+ /**
49
+ * Call to Action Title
50
+ * @var String
51
+ */
52
+ protected $manage_pagetitle = null;
53
+ /**
54
+ * Success or Failure Form Response
55
+ * @var Array
56
+ */
57
+ protected $form_response = null;
58
+ /**
59
+ * Form Method - POST or GET
60
+ * @var string
61
+ */
62
+ protected $form_method = 'post';
63
+ /**
64
+ * Bootstrap Elements Supported
65
+ * @var Array
66
+ */
67
+ private $form_elements = array( 'text','checkbox','radio','submit','button','select', 'hidden', 'wp_editor', 'html', 'datalist','textarea' , 'file' , 'div' , 'blockquote','html' , 'image','group','table', 'message', 'anchor', 'image_picker' );
68
+ /**
69
+ * Attributes Allowed
70
+ * @var Array
71
+ */
72
+ private $allowed_attributes;
73
+ /**
74
+ * Hidden Fields
75
+ * @var Array
76
+ */
77
+ private $form_hiddens = array();
78
+ /**
79
+ * Form nonce key.
80
+ * @var string
81
+ */
82
+ private $nonce_key = 'wpgmp-nonce';
83
+ /**
84
+ * Array of Bootstrap Elements
85
+ * @var Array
86
+ */
87
+ protected $elements = array();
88
+ /**
89
+ * Array of Previously Stored Elements
90
+ * @var Array
91
+ */
92
+ protected $backup_elements = array();
93
+ /**
94
+ * Array of Rendered Elements
95
+ * @var Array
96
+ */
97
+ protected $partially_rendered = false;
98
+ /**
99
+ * Number of bootstrap columns
100
+ * @var Int
101
+ */
102
+ /**
103
+ * Whether setting api enabled or not.
104
+ * @var boolean
105
+ */
106
+ public $setting_api = false;
107
+ /**
108
+ * Columns in row.
109
+ * @var integer
110
+ */
111
+ protected $columns = 1;
112
+ /**
113
+ * Intialize form properties.
114
+ */
115
+ public function __construct( ) {
116
+
117
+ $this->allowed_attributes = array_fill_keys( array( 'lable', 'id', 'class', 'required', 'default_value', 'value', 'options', 'desc', 'before', 'after', 'radio-val-label', 'onclick', 'placeholder', 'textarea_rows', 'textarea_name', 'html', 'current', 'width', 'height', 'src', 'alt', 'heading', 'data', 'show' ) , '' );
118
+ $this->allowed_attributes['style'] = array();
119
+ $this->allowed_attributes['required'] = false;
120
+
121
+ }
122
+ /**
123
+ * Set Form's header
124
+ * @param String $form_title Form Title.
125
+ * @param String $response Success or Failure Message.
126
+ * @param string $manage_pagetitle Call to Action Title.
127
+ * @param string $manage_pagename Call to Action Page Slug.
128
+ */
129
+ public function set_header( $form_title, $response, $manage_pagetitle = '', $manage_pagename = '' ) {
130
+ if ( isset( $form_title ) && ! empty( $form_title ) ) {
131
+ $this->form_title = $form_title; }
132
+ if ( isset( $response ) && ! empty( $response ) ) {
133
+ $this->form_response = $response; }
134
+ $this->manage_pagename = $manage_pagename;
135
+ $this->manage_pagetitle = $manage_pagetitle;
136
+ }
137
+
138
+ /**
139
+ * Form Method
140
+ * @param string $method Form Method.
141
+ */
142
+ public function set_form_method($method) {
143
+ $this->form_method = $method;
144
+ }
145
+ /**
146
+ * Title Setter
147
+ * @param string $title Form Title.
148
+ */
149
+ public function set_title($title) {
150
+ $this->form_title = $title;
151
+ }
152
+ /**
153
+ * Action Setter
154
+ * @param String $action Form Action.
155
+ */
156
+ public function set_form_action($action) {
157
+ $this->form_action = $action;
158
+ }
159
+ /**
160
+ * Title Getter
161
+ * @return String Get Form Title.
162
+ */
163
+ public function get_title() {
164
+ if ( isset( $this->form_title ) && ! empty( $this->form_title ) ) {
165
+ return $this->form_title; }
166
+ }
167
+ /**
168
+ * Call to Action Button
169
+ */
170
+ public function get_manage_url() {
171
+ return "&nbsp&nbsp ( <a href='http://codecanyon.net/item/advanced-google-maps-plugin-for-wordpress/5211638'>Download Pro Version</a> )";
172
+ }
173
+ /**
174
+ * Get form success or error message.
175
+ * @return HTML Success or error message html.
176
+ */
177
+ public function get_form_messages() {
178
+
179
+ if ( empty( $this->form_response ) && ! is_array( $this->form_response ) ) {
180
+ return; }
181
+ $response = $this->form_response;
182
+ $output = '';
183
+ if ( $response['error'] ) {
184
+
185
+ $output .= '<div class="col-md-11 alert alert-danger fade in">';
186
+ $output .= ''.$response['error'].'</div>';
187
+ } else {
188
+
189
+ $output .= '<div class="col-md-11 alert alert-success fade in">';
190
+ $output .= ''.$response['success'].'</div>';
191
+ }
192
+ return $output;
193
+ }
194
+ /**
195
+ * Form header getter.
196
+ * @return HTML Generate form header html.
197
+ */
198
+ public function get_header() {
199
+
200
+ $output = '<div class="container">
201
+ <div class="row">
202
+ <div class="col-md-12">
203
+ <h4 class="alert alert-info">'.$this->get_title().$this->get_manage_url().'</h4>
204
+ <div class="wpgmp-overview">'.
205
+ $this->get_form_messages();
206
+ return apply_filters( 'wpgmp_form_header_html', $output );
207
+ }
208
+ /**
209
+ * Form footer getter.
210
+ * @return HTML Generate form footer html.
211
+ */
212
+ public function get_footer( ) {
213
+ $output = '</div>
214
+ </div>
215
+ </div>
216
+ <a href="http://www.flippercode.com/forums" target="_blank" title="Ask Question" class="helpdask-bootom">Helpdesk ?</a>
217
+ </div>';
218
+ return apply_filters( 'wpgmp_form_footer_html', $output );
219
+ }
220
+ /**
221
+ * Bootstrap columns setter.
222
+ * @param int $column Set columns occupied by element.
223
+ */
224
+ public function set_col($column) {
225
+ if ( $this->elements ) {
226
+ $last_index = key( array_reverse( $this->elements ) );
227
+ $this->elements[ $last_index ]['col_after'] = $column;
228
+ return;
229
+ }
230
+ $this->columns = $column ? absint( $column ) : 2;
231
+ }
232
+ /**
233
+ * Bootstrap columns getter.
234
+ */
235
+ public function get_col() {
236
+ return $this->columns;
237
+ }
238
+ /**
239
+ * Add element in queue.
240
+ * @param string $type Element type.
241
+ * @param string $name Element name.
242
+ * @param array $args Element Properties.
243
+ */
244
+ public function add_element( $type, $name, $args = array() ) {
245
+ if ( ! in_array( $type, $this->form_elements ) ) {
246
+ return; }
247
+
248
+ $this->elements[ $name ] = shortcode_atts( $this->allowed_attributes, $args );
249
+ $this->elements[ $name ]['type'] = $type;
250
+
251
+ }
252
+ /**
253
+ * Display bootstrap elements.
254
+ * @param boolean $echo Echo or not.
255
+ * @return HTML Return form's element.
256
+ */
257
+ public function print_elements($echo = true) {
258
+
259
+ if ( empty( $this->backup_elements ) ) {
260
+
261
+ $form_output = $this->get_header();
262
+ $form_output .= $this->get_form_header();
263
+ $this->partially_rendered = true;
264
+ }
265
+
266
+ $element_html = $this->get_combined_markup();
267
+ $form_output .= $element_html;
268
+ $this->backup_elements[] = $this->elements;
269
+ unset( $this->elements );
270
+ if ( $echo ) {
271
+ esc_html_e( balanceTags( $form_output ) );
272
+ } else { return balanceTags( esc_html( $form_output ) ); }
273
+ }
274
+ /**
275
+ * Concat form elements together.
276
+ * @return html Combined HTML of each elements.
277
+ */
278
+ public function get_combined_markup() {
279
+
280
+ $element_html = '';
281
+ if ( $this->elements ) {
282
+ $elements = $this->elements;
283
+ $before = apply_filters( 'wpgmp_element_before_start_row', '<div class="form-group {modifier}">' );
284
+ $after = apply_filters( 'wpgmp_element_after_end_row', '</div>' );
285
+ $num = 0;
286
+ while ( $num < count( $elements ) ) {
287
+ $col = $this->get_col();
288
+ $elem_content = '';
289
+
290
+ foreach ( array_slice( $elements, $num, $col ) as $name => $atts ) {
291
+ $row_extra = false;
292
+ $temp = $before;
293
+ if ( ! isset( $atts['type'] ) || ! is_string( $name ) ) {
294
+ continue; }
295
+
296
+ if ( 'hidden' == $atts['type'] ) {
297
+
298
+ $elem_content .= call_user_func( 'Responsive_Markup::field_'.$atts['type'], $name, $atts );
299
+ continue;
300
+ }
301
+
302
+ $elem_content .= $this->get_element_html( $name, $atts['type'], $atts );
303
+
304
+ if ( isset( $atts['col_after'] ) ) {
305
+ $this->columns = $atts['col_after']; }
306
+ if ( isset( $atts['show'] ) and 'false' == $atts['show'] ) {
307
+ $row_extra = true; }
308
+ }
309
+ if ( true == $row_extra ) {
310
+ $temp = str_replace( '{modifier}', 'hiderow', $temp );
311
+ } else {
312
+ $temp = str_replace( '{modifier}', '', $temp );
313
+ }
314
+ if ( ! empty( $elem_content ) ) {
315
+ $element_html .= $temp.$elem_content.$after; }
316
+ $num = $num + $col;
317
+ }
318
+ }
319
+ return $element_html;
320
+
321
+ }
322
+ /**
323
+ * Form header getter.
324
+ * @return html Generate form header html.
325
+ */
326
+ public function get_form_header() {
327
+
328
+ $form_header = '<form enctype="multipart/form-data" method="'.$this->form_method.'" action="'.$this->form_action.'"';
329
+ if ( isset( $this->form_name ) && ! empty( $this->form_name ) ) {
330
+ $form_header .= ' name="'.$this->form_name.'" '; }
331
+ if ( isset( $this->form_id ) && ! empty( $this->form_id ) ) {
332
+ $form_header .= ' id="'.$this->form_id.'" '; }
333
+ $form_header .= '>';
334
+ $form_header .= '<div class="'.$this->form_type.'">';
335
+ return $form_header;
336
+
337
+ }
338
+ /**
339
+ * Form nonce key setter.
340
+ * @param string $nonce_key Form nonce key.
341
+ */
342
+ public function set_form_nonce($nonce_key) {
343
+ $this->nonce_key = $nonce_key;
344
+ }
345
+ /**
346
+ * Form footer getter.
347
+ * @return html Generate form footer html.
348
+ */
349
+ public function get_form_footer() {
350
+
351
+ $form_footer = '</div>';
352
+ $form_footer .= wp_nonce_field( $this->nonce_key,'_wpnonce',true,false );
353
+ $form_footer .= '</form>';
354
+ return $form_footer;
355
+ }
356
+ /**
357
+ * Echo or return html elements.
358
+ * @param boolean $echo True to display.
359
+ * @return html html Generate form html
360
+ */
361
+ public function render( $echo = true) {
362
+
363
+ if ( ! $this->elements || ! is_array( $this->elements ) and $this->partially_rendered == false ) {
364
+ echo '<div id="message" class="error"><p>Please add form element first.</p></div>';
365
+ return;
366
+ }
367
+
368
+ $form_output = '';
369
+ if ( empty( $this->backup_elements ) ) {
370
+ $form_output = $this->get_header();
371
+ $form_output .= $this->get_form_header();
372
+ }
373
+
374
+ $element_html = $this->get_combined_markup();
375
+ $form_output .= $element_html;
376
+
377
+ $form_output .= $this->get_form_footer();
378
+ $form_output .= $this->get_footer();
379
+
380
+ if ( $echo ) {
381
+ echo balanceTags( $form_output );
382
+ } else { return $form_output; }
383
+ }
384
+ /**
385
+ * Element's html creater.
386
+ * @param string $name Element Name.
387
+ * @param string $type Element Type.
388
+ * @param array $atts Element Options.
389
+ * @return html Element's Html.
390
+ */
391
+ public static function get_element_html( $name, $type, $atts ) {
392
+
393
+ $element_output = '';
394
+ if ( 'hidden' == $type ) {
395
+
396
+ $element_output = call_user_func( 'Responsive_Markup::field_'.$type, $name, $atts );
397
+ return $element_output;
398
+
399
+ } else {
400
+
401
+ if ( ! empty( $atts['lable'] ) ) {
402
+ $element_output .= apply_filters( 'wpgmp_input_label_'.$name, '<div class="col-md-3"><label for="'.$name.'">'.$atts['lable'].'</label>'.self::element_mandatory( @$atts['required'] ).'</div>' ); }
403
+ $element_output .= @$atts['before'] ? @$atts['before'] : '<div class="col-md-8">';
404
+ $element_output .= call_user_func( 'Responsive_Markup::field_'.$type, $name, $atts );
405
+ $element_output .= @$atts['after'] ? @$atts['after'] : '</div>';
406
+ return $element_output;
407
+ }
408
+
409
+ }
410
+ /**
411
+ * Display mandatory indicator on element.
412
+ * @param boolean $required Whether field is required or not.
413
+ * @return html Mandatory indicator.
414
+ */
415
+ public static function element_mandatory( $required = false ) {
416
+
417
+ if ( true == $required ) {
418
+ return '<span style="color:#F00;">*</span>'; }
419
+ }
420
+ /**
421
+ * Attributes Generator for the element.
422
+ * @param array $atts Attributes keys and values.
423
+ * @return string Attributes section of the element.
424
+ */
425
+ protected static function get_element_attributes($atts) {
426
+ if ( ! is_array( $atts ) ) {
427
+ return null; }
428
+
429
+ $attributes = array();
430
+ if ( isset( $atts['id'] ) && ! empty( $atts['id'] ) ) {
431
+ $attributes[0] = 'id="'.$atts['id'].'"'; }
432
+ $classes = ( ! empty( $atts['class'] )) ? $atts['class'] : 'form-control';
433
+ $attributes[1] = 'class="'.$classes.'"';
434
+ if ( isset( $atts['style'] ) && ! empty( $atts['style'] ) ) {
435
+ $attributes[2] = 'style="';
436
+ foreach ( $atts['style'] as $key => $value ) {
437
+ $attributes[2] .= $key.':'.$value.';'; }
438
+ $attributes[2] .= '"';
439
+ }
440
+ if ( isset( $atts['placeholder'] ) && ! empty( $atts['placeholder'] ) ) {
441
+ $attributes[3] = 'placeholder="'.esc_attr( $atts['placeholder'] ).'"';
442
+ }
443
+
444
+ if ( isset( $atts['data'] ) && ! empty( $atts['data'] ) ) {
445
+ foreach ( $atts['data'] as $key => $value ) {
446
+ $attributes[3] = 'data-'.$key.'="'.esc_attr( $value ).'"'; }
447
+ }
448
+
449
+ if ( ! $attributes ) {
450
+ return null; }
451
+
452
+ return implode( ' ', $attributes );
453
+
454
+ }
455
+ /**
456
+ * Image picker element.
457
+ * @param string $name No use.
458
+ * @param array $atts Attributes for custom html.
459
+ * @return html Image Picker.
460
+ */
461
+ public static function field_image_picker($name, $atts) {
462
+
463
+ $html = Responsive_Markup::field_image('selected_image', array(
464
+ 'lable' => 'Choose marker Image',
465
+ 'src' => $atts['src'],
466
+ 'width' => '32',
467
+ 'class' => 'noclass selected_image col-md-1',
468
+ 'height' => '37',
469
+ 'required' => $atts['required'],
470
+ ));
471
+
472
+ $html .= Responsive_Markup::field_anchor('choose_image', array(
473
+ 'value' => __( 'Choose Marker Image', WPGMP_TEXT_DOMAIN ),
474
+ 'href' => 'javascript:void(0);',
475
+ 'class' => 'btn btn-info choose_image col-md-3 ',
476
+ 'data' => array( 'target' => $name ),
477
+ ));
478
+
479
+ $html .= Responsive_Markup::field_anchor('remove_image', array(
480
+ 'value' => __( 'Remove Marker Image', WPGMP_TEXT_DOMAIN ),
481
+ 'before' => '<div class="col-md-3">',
482
+ 'after' => '</div>',
483
+ 'href' => 'javascript:void(0);',
484
+ 'class' => 'btn btn-danger remove_image col-md-3 col-md-offset-1',
485
+ 'data' => array( 'target' => $name ),
486
+
487
+ ));
488
+
489
+ $html .= Responsive_Markup::field_hidden('group_marker', array(
490
+ 'value' => $atts['src'],
491
+ 'id' => $name,
492
+ 'name' => $name,
493
+ ));
494
+
495
+ return $html;
496
+ }
497
+
498
+ /**
499
+ * Custom HTML to display.
500
+ * @param string $name No use.
501
+ * @param array $atts Attributes for custom html.
502
+ * @return html Body of custom html.
503
+ */
504
+ public static function field_html($name, $atts) {
505
+ extract( $atts );
506
+ return $html;
507
+ }
508
+ /**
509
+ * Hidden Field
510
+ * @param string $name Element name.
511
+ * @param array $atts Attributes.
512
+ * @return html Element Html.
513
+ */
514
+ public static function field_hidden( $name, $atts ) {
515
+
516
+ extract( $atts );
517
+ $value = $value ? $value : $default_value;
518
+ return '<input type="hidden" name="'.$name.'" id="'.$id.'" value="'.$value.'" />';
519
+ }
520
+ /**
521
+ * Group Heading
522
+ * @param string $name Group title.
523
+ * @param array $atts Attributes.
524
+ * @return html Element Html.
525
+ */
526
+ public static function field_group( $name, $atts ) {
527
+
528
+ extract( $atts );
529
+ $value = $value ? $value : $default_value;
530
+ return '<h4 class="alert alert-info">'.$value.'</h4>';
531
+ }
532
+ /**
533
+ * DIV node
534
+ * @param string $name Element name.
535
+ * @param array $atts Attributes.
536
+ * @return html Element Html.
537
+ */
538
+ public static function field_div( $name, $atts ) {
539
+
540
+ extract( $atts );
541
+ $value = $value ? $value : $default_value;
542
+ return '<div name="'.$name.'" '.self::get_element_attributes( $atts ).'>'.$value.'</div>';
543
+ }
544
+ /**
545
+ * Blockquote node
546
+ * @param string $name Element name.
547
+ * @param array $atts Attributes.
548
+ * @return html Element Html.
549
+ */
550
+ public static function field_blockquote( $name, $atts ) {
551
+
552
+ extract( $atts );
553
+ $value = $value ? $value : $default_value;
554
+ return '<blockquote>'.$atts['value'].'</blockquote>';
555
+
556
+ }
557
+ /**
558
+ * Text Input element.
559
+ * @param string $name Element name.
560
+ * @param array $atts Attributes.
561
+ * @return html Element Html.
562
+ */
563
+ public static function field_text( $name, $atts ) {
564
+
565
+ $elem_value = @$atts['value'] ? @$atts['value'] : $atts['default_value'];
566
+ if ( strstr( @$atts['class'], 'color' ) !== false ) {
567
+ $elem_value = str_replace( '#','',$elem_value );
568
+ $elem_value = '#'.$elem_value;
569
+ }
570
+ $element = '<input type="text" name="'.$name.'" value="'.esc_attr( stripcslashes( $elem_value ) ).'"'.self::get_element_attributes( $atts ).' />';
571
+ if ( isset( $atts['desc'] ) && ! empty( $atts['desc'] ) ) {
572
+ $element .= '<p class="help-block">'.$atts['desc'].'</p>'; }
573
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
574
+ }
575
+ /**
576
+ * Display Information message in <p> tag.
577
+ * @param string $name Element name.
578
+ * @param array $atts Attributes.
579
+ * @return html Element Html.
580
+ */
581
+ public static function field_infoarea($name, $atts) {
582
+ return '<p>'.$atts['desc'].'</p>'; }
583
+
584
+ /**
585
+ * Image tag.
586
+ * @param string $name Element name.
587
+ * @param array $atts Attributes.
588
+ * @return html Element Html.
589
+ */
590
+ public static function field_image( $name, $atts ) {
591
+
592
+ $element = '<img src="'.$atts['src'].'" alt="'.$atts['alt'].'" height="'.$atts['height'].'" width="'.$atts['width'].'" '.self::get_element_attributes( $atts ).' >';
593
+ if ( isset( $atts['desc'] ) && ! empty( $atts['desc'] ) ) {
594
+ $element .= '<p class="help-block">'.$atts['desc'].'</p>'; }
595
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
596
+ }
597
+ /**
598
+ * Generate output using wp_editor.
599
+ * @param string $name Element name.
600
+ * @param array $atts Attributes.
601
+ * @return html Element Html.
602
+ */
603
+ public static function field_wp_editor( $name, $atts ) {
604
+
605
+ $value = $atts['value'] ? $atts['value'] : $atts['default_value'];
606
+ $args = array( 'textarea_rows' => $atts['textarea_rows'], 'textarea_name' => $atts['textarea_name'], 'editor_class' => $atts['class'] );
607
+ $output = '';
608
+ ob_start();
609
+ wp_editor( esc_textarea( $value ) , $name, $args );
610
+ $output .= ob_get_contents();
611
+ ob_clean();
612
+ $output .= '<p class="help-block">'.$atts['desc'].'</p>';
613
+ return $output;
614
+
615
+ }
616
+
617
+ /**
618
+ * Textarea element.
619
+ * @param string $name Element name.
620
+ * @param array $atts Attributes.
621
+ * @return html Element Html.
622
+ */
623
+ public static function field_textarea( $name, $atts ) {
624
+
625
+ $elem_value = $atts['value'] ? $atts['value'] : $atts['default_value'];
626
+ $element = '<textarea rows="5" name="'.$name.'" '.self::get_element_attributes( $atts ).' >'.esc_textarea( wp_unslash( $elem_value ) ).'</textarea>';
627
+ if ( isset( $atts['desc'] ) && ! empty( $atts['desc'] ) ) {
628
+ $element .= '<p class="help-block">'.$atts['desc'].'</p>'; }
629
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
630
+ }
631
+ /**
632
+ * File Input element.
633
+ * @param string $name Element name.
634
+ * @param array $atts Attributes.
635
+ * @return html Element Html.
636
+ */
637
+ public static function field_file( $name, $atts ) {
638
+
639
+ $elem_value = $atts['value'] ? $atts['value'] : $atts['default_value'];
640
+ $element = '<input type="file" name="'.$name.'" '.self::get_element_attributes( $atts ).' />';
641
+ if ( isset( $atts['desc'] ) && ! empty( $atts['desc'] ) ) {
642
+ $element .= '<p class="help-block">'.$atts['desc'].'</p>'; }
643
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
644
+ }
645
+ /**
646
+ * Select Input element.
647
+ * @param string $name Element name.
648
+ * @param array $atts Attributes.
649
+ * @return html Element Html.
650
+ */
651
+ public static function field_select( $name, $atts ) {
652
+
653
+ if ( ! isset( $atts['options'] ) || empty( $atts['options'] ) ) {
654
+ return; }
655
+
656
+ $options = '';
657
+ $elem_value = $atts['current'] ? $atts['current'] : $atts['default_value'];
658
+
659
+ foreach ( $atts['options'] as $key => $value ) {
660
+ $options .= '<option value='.$key.' '.selected( $elem_value,$key,false ).'>'.$value.'</option>';
661
+ }
662
+
663
+ $element = '<select name="'.$name.'" '.self::get_element_attributes( $atts ).'>'.$options.'</select>';
664
+ if ( isset( $atts['desc'] ) && ! empty( $atts['desc'] ) ) {
665
+ $element .= '<p class="help-block">'.$atts['desc'].'</p>'; }
666
+ return apply_filters( 'wpgmp_select_field_'.$name, $element, $name, $atts );
667
+ }
668
+
669
+ /**
670
+ * Submit button element.
671
+ * @param string $name Element name.
672
+ * @param array $atts Attributes.
673
+ * @return html Element Html.
674
+ */
675
+ public static function field_submit( $name, $atts ) {
676
+
677
+ $element = '<div class="row">
678
+ <div class="col-md-12">
679
+ <input type="submit" name="'.$name.'" class="btn btn-primary" value="'.$atts['value'].'"/>
680
+ </div>
681
+ </div>';
682
+
683
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
684
+ }
685
+ /**
686
+ * Button element.
687
+ * @param string $name Element name.
688
+ * @param array $atts Attributes.
689
+ * @return html Element Html.
690
+ */
691
+ public static function field_button( $name, $atts ) {
692
+
693
+ $eventstr = '';
694
+ if ( isset( $atts['onclick'] ) and ! empty( $atts['onclick'] ) ) {
695
+
696
+ $eventstr .= 'onclick ='.stripcslashes( $atts['onclick'] );
697
+
698
+ }
699
+ $element = '<button type="button" name="'.$name.'" '.self::get_element_attributes( $atts ).' />'.$atts['value'].'</button>';
700
+ if ( isset( $atts['desc'] ) && ! empty( $atts['desc'] ) ) {
701
+ $element .= '<p class="help-block">'.$atts['desc'].'</p>'; }
702
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
703
+ }
704
+ /**
705
+ * Checkbox input element.
706
+ * @param string $name Element name.
707
+ * @param array $atts Attributes.
708
+ * @return html Element Html.
709
+ */
710
+ public static function field_checkbox( $name, $atts ) {
711
+
712
+ $id = ( ! empty( $atts['id'] )) ? $atts['id'] : $name;
713
+ $value = $atts['value'] ? $atts['value'] : $atts['default_value'];
714
+ $element = '<div class="checkbox"><label><input type="checkbox" id="'.$atts['id'].'" name="'.$name.'" value="'.esc_attr( stripcslashes( $value ) ).'"'.self::get_element_attributes( $atts ).' '.checked( $value, $atts['current'], false ).'/>'.$atts['desc'].'</label></div> ';
715
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
716
+
717
+ }
718
+ /**
719
+ * Anchor tag element.
720
+ * @param string $name Element name.
721
+ * @param array $atts Attributes.
722
+ * @return html Element Html.
723
+ */
724
+ public static function field_anchor( $name, $atts ) {
725
+
726
+ $id = ( ! empty( $atts['id'] )) ? $atts['id'] : $name;
727
+ $value = $atts['value'] ? $atts['value'] : $atts['default_value'];
728
+ $element = '<a id="'.$atts['id'].'" name="'.$name.'" '.self::get_element_attributes( $atts ).'/>'.$value.'</a>';
729
+ if ( isset( $atts['desc'] ) && ! empty( $atts['desc'] ) ) {
730
+ $element .= '<p class="help-block">'.$atts['desc'].'</p>'; }
731
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
732
+
733
+ }
734
+ /**
735
+ * Radio input element.
736
+ * @param string $name Element name.
737
+ * @param array $atts Attributes.
738
+ * @return html Element Html.
739
+ */
740
+ public static function field_radio( $name, $atts ) {
741
+
742
+ $elem_value = $atts['current'] ? $atts['current'] : $atts['default_value'];
743
+ $element = '';
744
+ $radio_options = $atts['radio-val-label'];
745
+ if ( is_array( $atts['radio-val-label'] ) ) {
746
+
747
+ foreach ( $radio_options as $radio_val => $radio_label ) {
748
+ $element .= '<label class="radio-inline"><input type="radio" name="'.$name.'" value="'.esc_attr( stripcslashes( $radio_val ) ).'"'.self::get_element_attributes( $atts ).' '.checked( $radio_val, $elem_value, false ).'>&nbsp;&nbsp;'.$radio_label.'</label>';
749
+ }
750
+ }
751
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
752
+
753
+ }
754
+ /**
755
+ * Message boxes.
756
+ * @param string $name Element name.
757
+ * @param array $atts Attributes.
758
+ * @return html Element Html.
759
+ */
760
+ public static function field_message( $name, $atts ) {
761
+ $type = $atts['class'];
762
+ $id = $atts['id'];
763
+ $element = '<div '.self::get_element_attributes( $atts ).'>'.$atts['value'].'</div>';
764
+ return apply_filters( 'wpgmp_input_field_'.$name, $element, $name, $atts );
765
+ }
766
+ /**
767
+ * Sub heading
768
+ * @param string $heading heading.
769
+ * @return html blockquote html wrapper.
770
+ */
771
+ public static function sub_heading($heading) {
772
+
773
+ return '<div class="col-md-12">
774
+ <blockquote>
775
+ '.$heading.'
776
+ </blockquote>
777
+ </div>';
778
+ }
779
+ /**
780
+ * Table generator.
781
+ * @param string $name Element name.
782
+ * @param array $atts Attributes.
783
+ * @return html Element Html.
784
+ */
785
+ public static function field_table($name, $atts) {
786
+ $heads = $atts['heading'];
787
+ $data = $atts['data'];
788
+ $current = $atts['current'];
789
+ $id = (isset( $atts['id'] )) ? $atts['id'] : $name;
790
+ if ( ! isset( $atts['class'] ) or '' == $atts['class'] ) {
791
+ $atts['class'] = 'dataTable';
792
+ }
793
+ $output = '<table '.self::get_element_attributes( $atts ).' id="'.$id.'"><thead><tr>';
794
+ if ( is_array( $heads ) ) {
795
+
796
+ foreach ( $heads as $head ) {
797
+ $output .= '<td><strong>'.__( $head, WPGMP_TEXT_DOMAIN ).'</strong></td>';
798
+ }
799
+ }
800
+
801
+ $output .= '</tr></thead><tbody>';
802
+ if ( ! empty( $data ) ) {
803
+ foreach ( $data as $row => $columns ) {
804
+ $output .= '<tr>';
805
+ foreach ( $columns as $key => $col ) {
806
+ $output .= '<td>'.($col).'</td>'; }
807
+ $output .= '</tr>';
808
+ }
809
+ }
810
+
811
+ $output .= '</tbody></table>';
812
+
813
+ return apply_filters( 'wpgmp_input_field_'.$name, $output, $name, $atts );
814
+
815
+ }
816
+ /**
817
+ * Show success or error message.
818
+ * @param array $response Success or Error message.
819
+ * @return html Success or error message wrapper.
820
+ */
821
+ public static function show_message($response) {
822
+
823
+ if ( empty( $response ) ) {
824
+ return; }
825
+
826
+ $output = '';
827
+ $output .= '<div id="message" class="'.$response['type'].'">';
828
+ $output .= '<p><strong>'.$response['message'].'</strong></p></div>';
829
+
830
+ return $output;
831
+ }
832
+ /**
833
+ * Button Wrapper
834
+ * @param string $title Button title.
835
+ * @param url $link Link url.
836
+ * @return html Button wrapper.
837
+ */
838
+ public static function button($title, $link) {
839
+
840
+ return '<span class="glyphicon glyphicon-add wpgmp_new_add button action"><a href="'.esc_html( $link ).'">'.__( $title,WPGMP_TEXT_DOMAIN ).'</a></span>';
841
+ }
842
+
843
+ }
844
+ }
core/class.validation.php ADDED
@@ -0,0 +1,793 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPGMP Validator class File.
4
+ * @package Core
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ */
7
+
8
+ if ( ! class_exists( 'WPGMP_Validator' ) ) {
9
+
10
+ /**
11
+ * WPGMP_Validator Class
12
+ * @author Flipper Code <hello@flippercode.com>
13
+ * @package Core
14
+ */
15
+ class WPGMP_Validator {
16
+ /**
17
+ * WPGMP_Validator Constructer.
18
+ */
19
+ function WPGMP_Validator() {
20
+
21
+ $this->id = 0;
22
+ }
23
+ /**
24
+ * Check if rule already exists.
25
+ * @param string $varname Element name.
26
+ * @param string $authType Validation Type.
27
+ * @return boolean True or False.
28
+ */
29
+ function is_exist($varname, $authType) {
30
+
31
+ for ( $i = 0;$i < $this->id;$i++ ) {
32
+ if ( $this->check_vars[ $i ]['name'] == $varname && $this->check_vars[ $i ]['authtype'] == $authType ) {
33
+ return true; }
34
+ }
35
+
36
+ return false;
37
+ }
38
+ /**
39
+ * Add rule in queue.
40
+ * @param string $varname Element name.
41
+ * @param array $postVar Post Variable.
42
+ * @param string $authType Validation Type.
43
+ * @param string $error Error message.
44
+ */
45
+ public function add($varname, $postVar, $authType, $error) {
46
+
47
+ global $frmdata;
48
+
49
+ $is_exist = $this->is_exist( $varname,$authType );
50
+
51
+ if ( true == $is_exist ) {
52
+ return; }
53
+
54
+ $index = $this->id++;
55
+ $this->check_vars[ $index ]['name'] = $varname;
56
+ $this->check_vars[ $index ]['data'] = $postVar;
57
+ $this->check_vars[ $index ]['authtype'] = $authType;
58
+ $this->check_vars[ $index ]['error'] = $error;
59
+ }
60
+
61
+ /**
62
+ * Validate all rules.
63
+ * @return string Validation response.
64
+ */
65
+ public function validate() {
66
+
67
+ $errordata = array();
68
+
69
+ for ( $i = 0; $i < $this->id; $i++ ) {
70
+
71
+ $errorMsg = '';
72
+ $name = $this->check_vars[ $i ]['name'];
73
+ $postVar = $this->check_vars[ $i ]['data'];
74
+ $authType = $this->check_vars[ $i ]['authtype'];
75
+ $error = $this->check_vars[ $i ]['error'];
76
+ $pos = strpos( $authType, '=' );
77
+
78
+ if ( false != $pos ) {
79
+ $authType = substr( $this->check_vars[ $i ]['authtype'], 0, $pos );
80
+ $value = substr( $this->check_vars[ $i ]['authtype'], $pos + 1 );
81
+ }
82
+
83
+ switch ( $authType ) {
84
+
85
+ case 'req': {
86
+
87
+ if ( isset( $postVar['name'] ) and is_array( $postVar['name'] ) ) {
88
+
89
+ $count = count( $postVar['name'] );
90
+
91
+ for ( $j = 0; $j < $count; $j++ ) {
92
+ $length = strlen( trim( $postVar['name'][ $j ] ) );
93
+ if ( ! $length ) {
94
+ $errorMsg .= $error.' :File '.($j + 1).''; }
95
+ }
96
+ } elseif ( isset( $postVar['name'] ) && empty( $postVar['name'] ) ) {
97
+
98
+ $length = strlen( trim( $postVar['name'] ) );
99
+ if ( ! $length ) {
100
+ $errorMsg .= $error.''; }
101
+ } else {
102
+
103
+ $length = strlen( trim( $postVar ) );
104
+ if ( ! $length ) {
105
+ $errorMsg .= $error.''; }
106
+ }
107
+
108
+ break;
109
+ }
110
+
111
+ case 'alpha': {
112
+ $regexp = '/^[A-za-z]$/';
113
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
114
+ $length = strlen( trim( $postVar ) );
115
+ if ( $length ) {
116
+ $errorMsg .= $error.'<br>'; }
117
+ }
118
+ break;
119
+ }
120
+
121
+ case 'alphanum': {
122
+ $regexp = '/^[A-za-z0-9]$/';
123
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
124
+ $length = strlen( trim( $postVar ) );
125
+ if ( $length ) {
126
+ $errorMsg .= $error.'<br>'; }
127
+ }
128
+ break;
129
+ }
130
+
131
+ case 'num': {
132
+ $regexp = '/^[0-9]*$/';
133
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
134
+ $length = strlen( trim( $postVar ) );
135
+ if ( $length ) {
136
+ $errorMsg .= $error.'<br>'; }
137
+ }
138
+ break;
139
+ }
140
+
141
+ case 'max': {
142
+ $length = strlen( trim( $postVar ) );
143
+ if ( $length > $value ) {
144
+ $errorMsg .= $error.'<br>'; }
145
+ break;
146
+ }
147
+
148
+ case 'min': {
149
+ $length = strlen( trim( $postVar ) );
150
+ if ( $length < $value && 0 != $length ) {
151
+ $errorMsg .= $error.'<br>'; }
152
+ break;
153
+ }
154
+
155
+ case 'lte': {
156
+ if ( is_array( $postVar ) ) {
157
+ $count = count( $postVar );
158
+ if ( $count > $value ) {
159
+ $errorMsg .= $error.'<br>'; }
160
+ } else {
161
+ if ( $postVar > $value ) {
162
+ $errorMsg .= $error.'<br>'; }
163
+ }
164
+ break;
165
+ }
166
+
167
+ case 'gte':{
168
+ if ( is_array( $postVar ) ) {
169
+ $count = count( $postVar );
170
+ if ( $count < $value ) {
171
+ $errorMsg .= $error.'<br>'; }
172
+ } else {
173
+ if ( $postVar < $value ) {
174
+ $length = strlen( trim( $postVar ) );
175
+ if ( $length ) {
176
+ $errorMsg .= $error.'<br>'; }
177
+ }
178
+ }
179
+ break;
180
+ }
181
+
182
+ case 'username': {
183
+ $regexp1 = '/^[0-9]$/';
184
+ $regexp2 = '/^[a-zA-Z]+[a-zA-Z0-9\.\_]*[a-zA-Z0-9]+$/';
185
+ if ( ! preg_match( $regexp1, trim( $postVar ) ) && ! preg_match( $regexp2, trim( $postVar ) ) ) {
186
+ $length = strlen( trim( $postVar ) );
187
+ if ( $length ) {
188
+ $errorMsg .= $error.'<br>'; }
189
+ }
190
+ break;
191
+ }
192
+
193
+ case 'name':{
194
+ $regexp = '/^[a-zA-Z]+[a-zA-Z\.\- ]*[a-zA-Z]+$/';
195
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
196
+ $length = strlen( trim( $postVar ) );
197
+ if ( $length ) {
198
+ $errorMsg .= $error.'<br>'; }
199
+ }
200
+ break;
201
+ }
202
+
203
+ case 'address':{
204
+ $regexp = '/^[a-zA-Z0-9]+.*$/';
205
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
206
+ $length = strlen( trim( $postVar ) );
207
+ if ( $length ) {
208
+ $errorMsg .= $error.'<br>'; }
209
+ }
210
+ break;
211
+ }
212
+
213
+ case 'phone': {
214
+
215
+ if ( isset( $value ) ) {
216
+ $found = strpos( $value, ',' );
217
+ if ( false === $found ) {
218
+ $options[0] = $value;
219
+ } else {
220
+ $options = explode( ',', $value );
221
+ }
222
+ }
223
+
224
+ $patternMatch = 0;
225
+ foreach ( $options as $opt ) {
226
+ $type = $this->available_phone_type( $opt );
227
+ foreach ( $type as $regexp ) {
228
+ if ( preg_match( $regexp, $postVar ) ) {
229
+ $patternMatch = 1;
230
+ }
231
+ }
232
+ if ( $patternMatch ) { break; }
233
+ }
234
+
235
+ if ( ! $patternMatch ) {
236
+ $length = strlen( trim( $postVar ) );
237
+ if ( $length ) {
238
+ $errorMsg .= $error.'<br>'; }
239
+ }
240
+ break;
241
+ }
242
+
243
+ case 'allphone': {
244
+
245
+ $regexp1 = '/^[0-9]{8,15}$/';
246
+ // (+91)1111111111
247
+ $regexp2 = '/^[\(][\+][0-9]{2}[\)][0-9]{8,15}$/';
248
+ // +911111111111
249
+ $regexp3 = '/^[\+][0-9]{2}[0-9]{8,15}$/';
250
+ // 91-1111111111
251
+ $regexp4 = '/^[0-9]{2}[\-][0-9]{10}$/';
252
+ $regexp5 = '/^[0-9,\-]{8,15}$/';
253
+ $regexp6 = '/^[0-9,\(][0-9,\-,\(,\)][0-9,\)]{10,15}$/';
254
+
255
+ if ( ! preg_match( $regexp1, trim( $postVar ) ) && ! preg_match( $regexp2, trim( $postVar ) ) && ! preg_match( $regexp3, trim( $postVar ) ) && ! preg_match( $regexp4, trim( $postVar ) ) && ! preg_match( $regexp5, trim( $postVar ) ) && ! preg_match( $regexp6, trim( $postVar ) ) ) {
256
+ $length = strlen( trim( $postVar ) );
257
+ if ( $length ) {
258
+ $errorMsg .= $error.'<br>'; }
259
+ }
260
+ break;
261
+ }
262
+
263
+ case 'zip':{
264
+ $regexp = '/^[0-9]{6,10}$/';
265
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
266
+ $length = strlen( trim( $postVar ) );
267
+ if ( $length ) {
268
+ $errorMsg .= $error.'<br>'; }
269
+ }
270
+ break;
271
+ }
272
+
273
+ case 'uszip':{
274
+ // 12345-6789
275
+ $regexp = '/^[0-9]{5}[\-]{1}[0-9]{4}$/';
276
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
277
+ $length = strlen( trim( $postVar ) );
278
+ if ( $length ) {
279
+ $errorMsg .= $error.'<br>'; }
280
+ }
281
+ break;
282
+ }
283
+
284
+ case 'ukzip':{
285
+
286
+ $regexp = '/^[a-zA-Z]{2}[0-9]{1}[ ]{1}[0-9]{1}[a-zA-Z]{2}$/';
287
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
288
+ $length = strlen( trim( $postVar ) );
289
+ if ( $length ) {
290
+ $errorMsg .= $error.'<br>'; }
291
+ }
292
+ break;
293
+ }
294
+
295
+ case 'ssn':{
296
+ $regexp = '/^(?!000)([0-6][0-9]{2}|7([0-6][0-9]|7[012]))([ -]?)(?!00)[0-9][0-9]\3(?!0000)[0-9]{4}$/';
297
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
298
+ $length = strlen( trim( $postVar ) );
299
+ if ( $length ) {
300
+ $errorMsg .= $error.'<br>'; }
301
+ }
302
+ break;
303
+ }
304
+
305
+ case 'currency':{
306
+ $regexp1 = '/^[0-9]+\.[0-9]+$/';
307
+ $regexp2 = '/^[0-9]+$/';
308
+ if ( ! preg_match( $regexp1, trim( $postVar ) ) && ! preg_match( $regexp2, trim( $postVar ) ) ) {
309
+ $length = strlen( trim( $postVar ) );
310
+ if ( $length ) {
311
+ $errorMsg .= $error.'<br>'; }
312
+ }
313
+ break;
314
+ }
315
+
316
+ case 'email':{
317
+ if ( function_exists( 'is_email' ) ) {
318
+
319
+ if ( ! is_email( trim( $postVar ) ) ) {
320
+
321
+ $errorMsg .= $error.'<br>';
322
+ }
323
+ } else {
324
+ $regexp = '/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/';
325
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
326
+ $length = strlen( trim( $postVar ) );
327
+ if ( $length ) {
328
+ $errorMsg .= $error.'<br>'; }
329
+ }
330
+ }
331
+ break;
332
+ }
333
+
334
+ case 'url':{
335
+ $regexp = '|^http(s)?://[a-z0-9-]+(\.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i';
336
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
337
+ $length = strlen( trim( $postVar ) );
338
+ if ( $length ) {
339
+ $errorMsg .= $error.'<br>'; }
340
+ }
341
+ break;
342
+ }
343
+
344
+ case 'ip':{
345
+ $regexp = '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/';
346
+ if ( ! preg_match( $regexp, trim( $postVar ) ) ) {
347
+ $length = strlen( trim( $postVar ) );
348
+ if ( $length ) {
349
+ $errorMsg .= $error.'<br>'; }
350
+ }
351
+ break;
352
+ }
353
+
354
+ case 'date':{
355
+ $errorMsg .= $this->validate_date( trim( $postVar ), $value, $error );
356
+ break;
357
+ }
358
+
359
+ case 'ftype':{
360
+ $errorMsg .= $this->validate_file_type( $postVar, $value, $error );
361
+ break;
362
+ }
363
+
364
+ case 'fsize':{
365
+ $errorMsg .= $this->validate_file_size( $postVar, $value, $error );
366
+ break;
367
+ }
368
+
369
+ case 'imgwh':{
370
+ $errorMsg .= $this->validate_image_height_width( $postVar, $value, $error );
371
+ break;
372
+ }
373
+
374
+ case 'custom':{
375
+ if ( ! preg_match( $value, trim( $postVar ) ) ) {
376
+ $length = strlen( trim( $postVar ) );
377
+ if ( $length ) {
378
+ $errorMsg .= $error.'<br>'; }
379
+ }
380
+ break;
381
+ }
382
+ }
383
+
384
+ if ( $errorMsg ) {
385
+ $errordata[ $name ] = $error; }
386
+ }
387
+
388
+ if ( $errordata ) {
389
+ return $errordata;
390
+ } else { return false; }
391
+ }
392
+ /**
393
+ * Validate data input.
394
+ * @param string $postVar Element name.
395
+ * @param string $value Element value.
396
+ * @param string $error Error message.
397
+ * @return string Error message if not valid.
398
+ */
399
+ function validate_date($postVar, $value, $error) {
400
+
401
+ $errorMsg = '';
402
+
403
+ $length = strlen( trim( $postVar ) );
404
+ if ( $length ) {
405
+
406
+ if ( isset( $value ) ) {
407
+
408
+ $found = strpos( $value, ',' );
409
+ if ( false === $found ) {
410
+ $options[0] = $value;
411
+ } else {
412
+ $options = explode( ',', $value );
413
+ }
414
+ } else {
415
+
416
+ $options[0] = 'dd-mm-yyyy';
417
+ }
418
+
419
+ $patternMatch = 0;
420
+ foreach ( $options as $opt ) {
421
+
422
+ $pos1 = strpos( $opt, '-' );
423
+ $pos2 = strpos( $opt, '/' );
424
+ $pos3 = strpos( $opt, '.' );
425
+
426
+ if ( false !== $pos1 ) {
427
+ if ( 2 == $pos1 ) {
428
+ if ( strlen( $opt ) == 8 ) {
429
+ $regexp = '/^[0-9]{2}[\-][0-9]{2}[\-][0-9]{2}$/';
430
+ } else { $regexp = '/^[0-9]{2}[\-][0-9]{2}[\-][0-9]{4}$/'; }
431
+ }
432
+ if ( 4 == $pos1 ) {
433
+ $regexp = '/^[0-9]{4}[\-][0-9]{2}[\-][0-9]{2}$/'; }
434
+ }
435
+
436
+ if ( false !== $pos2 ) {
437
+ if ( 2 == $pos2 ) {
438
+ if ( strlen( $opt ) == 8 ) {
439
+ $regexp = '/^[0-9]{2}[\/][0-9]{2}[\/][0-9]{2}$/';
440
+ } else { $regexp = '/^[0-9]{2}[\/][0-9]{2}[\/][0-9]{4}$/'; }
441
+ }
442
+ if ( 4 == $pos2 ) {
443
+ $regexp = '/^[0-9]{4}[\/][0-9]{2}[\/][0-9]{2}$/'; }
444
+ }
445
+
446
+ if ( false !== $pos3 ) {
447
+ if ( 2 == $pos3 ) {
448
+ if ( 8 == strlen( $opt ) ) {
449
+ $regexp = '/^[0-9]{2}[\.][0-9]{2}[\.][0-9]{2}$/';
450
+ } else { $regexp = '/^[0-9]{2}[\.][0-9]{2}[\.][0-9]{4}$/'; }
451
+ }
452
+ if ( 4 == $pos3 ) {
453
+ $regexp = '/^[0-9]{4}[\.][0-9]{2}[\.][0-9]{2}$/'; }
454
+ }
455
+
456
+ if ( preg_match( $regexp, $postVar ) ) {
457
+
458
+ $patternMatch = 1;
459
+ if ( (isset( $pos1 ) && 2 == $pos1 ) || (isset( $pos2 ) && 2 == $pos2 ) || (isset( $pos3 ) && 2 == $pos3 ) ) {
460
+ $str1 = substr( $opt, 0, 2 );
461
+ $str2 = substr( $opt, 3, 2 );
462
+
463
+ if ( 'dd' == $str1 ) {
464
+ $DD = substr( $postVar, 0, 2 );
465
+ $MM = substr( $postVar, 3, 2 );
466
+ $YY = substr( $postVar, 6 );
467
+ }
468
+ if ( 'mm' == $str1 ) {
469
+ $MM = substr( $postVar, 0, 2 );
470
+ $DD = substr( $postVar, 3, 2 );
471
+ $YY = substr( $postVar, 6 );
472
+ }
473
+ if ( 'yy' == $str1 ) {
474
+ if ( 'mm' == $str2 ) {
475
+ $YY = substr( $postVar, 0, 2 );
476
+ $MM = substr( $postVar, 3, 2 );
477
+ $DD = substr( $postVar, 6 );
478
+ } else {
479
+ $MM = substr( $postVar, 0, 2 );
480
+ $DD = substr( $postVar, 3, 2 );
481
+ $YY = substr( $postVar, 6 );
482
+ }
483
+ }
484
+ }
485
+
486
+ if ( (isset( $pos1 ) && 4 == $pos1) || (isset( $pos2 ) && 4 == $pos2) || (isset( $pos3 ) && 4 == $pos3) ) {
487
+ $str = substr( $opt, 5, 2 );
488
+
489
+ if ( 'dd' == $str ) {
490
+ $YY = substr( $postVar, 0, 4 );
491
+ $DD = substr( $postVar, 6, 2 );
492
+ $MM = substr( $postVar, 8, 2 );
493
+ }
494
+ if ( 'mm' == $str ) {
495
+ $YY = substr( $postVar, 0, 4 );
496
+ $MM = substr( $postVar, 6, 2 );
497
+ $DD = substr( $postVar, 6, 2 );
498
+ }
499
+ }
500
+
501
+ if ( 0 == $DD || 0 == $MM || 0 == $YY ) {
502
+ $errorMsg .= 'Invalid Date...<br>';
503
+ }
504
+
505
+ if ( $MM <= 12 ) {
506
+ switch ( $MM ) {
507
+ case 4:
508
+ case 6:
509
+ case 9:
510
+ case 11:
511
+ if ( $DD > 30 ) {
512
+ $errorMsg .= 'Selected month has maximum 30 days.<br>';
513
+ }
514
+ default:
515
+ if ( $DD > 31 ) {
516
+ $errorMsg .= 'Selected month has maximum 31 days.<br>';
517
+ }
518
+ break;
519
+ }
520
+ }
521
+
522
+ if ( ($YY % 4) == 0 ) {
523
+ if ( (2 == $MM) && ($DD > 29) ) {
524
+ $errorMsg .= 'Invalid days in February for leap year.<br>';
525
+ }
526
+ } else {
527
+ if ( (2 == $MM) && ($DD > 28) ) {
528
+ $errorMsg .= 'Invalid days in February for non leap year.<br>';
529
+ }
530
+ }
531
+ }
532
+
533
+ if ( $patternMatch ) { break; }
534
+ }
535
+
536
+ if ( ! $patternMatch ) { $errorMsg .= $error.'<br>'; }
537
+ }
538
+ return $errorMsg;
539
+ }
540
+ /**
541
+ * Validate file type.
542
+ * @param string $postVar Element name.
543
+ * @param string $value Element value.
544
+ * @param string $error Error message.
545
+ * @return string Error message.
546
+ */
547
+ function validate_file_type($postVar, $value, $error) {
548
+
549
+ $errorMsg = '';
550
+ if ( isset( $value ) ) {
551
+ $found = strpos( $value, ',' );
552
+ if ( false === $found ) {
553
+ $options[0] = $value;
554
+ } else {
555
+ $options = explode( ',', $value );
556
+ }
557
+ }
558
+
559
+ if ( is_array( $postVar['name'] ) ) {
560
+ $totalFiles = count( $postVar['name'] );
561
+
562
+ for ( $i = 0; $i < $totalFiles; $i++ ) {
563
+ if ( $postVar['name'][ $i ] ) {
564
+ $fileTypeMatch = 0;
565
+ foreach ( $options as $id => $type ) {
566
+ $typeArray = $this->available_file_types( $type );
567
+ if ( in_array( $postVar['type'][ $i ], $typeArray ) ) {
568
+ $fileTypeMatch = 1;
569
+ }
570
+ if ( $fileTypeMatch ) { break; }
571
+ }
572
+
573
+ if ( ! $fileTypeMatch ) {
574
+ $errorMsg .= $error.' ('.$postVar['name'][ $i ].')<br>';
575
+ }
576
+ }
577
+ }
578
+ } else {
579
+ if ( $postVar['name'] ) {
580
+ $fileTypeMatch = 0;
581
+ foreach ( $options as $id => $type ) {
582
+ $typeArray = $this->available_file_types( $type );
583
+ if ( in_array( $postVar['type'], $typeArray ) ) {
584
+ $fileTypeMatch = 1;
585
+ }
586
+ if ( $fileTypeMatch ) { break; }
587
+ }
588
+
589
+ if ( ! $fileTypeMatch ) {
590
+ $errorMsg .= $error.' ('.$postVar['name'].')<br>';
591
+ }
592
+ }
593
+ }
594
+
595
+ return $errorMsg;
596
+ }
597
+ /**
598
+ * Available file valid extensions.
599
+ * @param string $ext Extension.
600
+ * @return array File types.
601
+ */
602
+ function available_file_types($ext) {
603
+
604
+ switch ( $ext ) {
605
+
606
+ case 'txt':
607
+ $type[0] = 'text/plain';
608
+ break;
609
+
610
+ case 'xml':
611
+ $type[0] = 'text/xml';
612
+ $type[1] = 'application/xml';
613
+ break;
614
+
615
+ case 'csv':
616
+ $type[0] = 'text/x-comma-separated-values';
617
+ $type[1] = 'application/octet-stream';
618
+ $type[2] = 'text/plain';
619
+ break;
620
+
621
+ case 'zip':
622
+ $type[0] = 'application/zip';
623
+ break;
624
+
625
+ case 'tar':
626
+ $type[0] = 'application/x-gzip';
627
+ break;
628
+
629
+ case 'ctar':
630
+ $type[0] = 'application/x-compressed-tar';
631
+ break;
632
+
633
+ case 'pdf':
634
+ $type[0] = 'application/pdf';
635
+ break;
636
+
637
+ case 'doc':
638
+ $type[0] = 'application/msword';
639
+ $type[1] = 'application/octet-stream';
640
+ break;
641
+
642
+ case 'xls':
643
+ $type[0] = 'application/vnd.ms-excel';
644
+ $type[1] = 'application/vnd.oasis.opendocument.spreadsheet';
645
+ break;
646
+
647
+ case 'ppt':
648
+ $type[0] = 'application/vnd.ms-powerpoint';
649
+ break;
650
+
651
+ case 'jpg':
652
+ $type[0] = 'image/jpg';
653
+ $type[1] = 'image/jpeg';
654
+ $type[2] = 'image/pjpeg';
655
+ break;
656
+
657
+ case 'gif':
658
+ $type[0] = 'image/gif';
659
+ break;
660
+
661
+ case 'png':
662
+ $type[0] = 'image/png';
663
+ break;
664
+
665
+ case 'bmp':
666
+ $type[0] = 'image/bmp';
667
+ break;
668
+
669
+ case 'icon':
670
+ $type[0] = 'image/x-ico';
671
+ break;
672
+
673
+ case 'font':
674
+ $type[0] = 'application/x-font-ttf';
675
+ break;
676
+ }
677
+
678
+ return $type;
679
+ }
680
+ /**
681
+ * Validate file size.
682
+ * @param string $postVar Element name.
683
+ * @param string $value Element value.
684
+ * @param string $error Error message.
685
+ * @return string Error message.
686
+ */
687
+ function validate_file_size($postVar, $value, $error) {
688
+
689
+ $errorMsg = '';
690
+ if ( is_array( $postVar['name'] ) ) {
691
+ $totalFiles = count( $postVar['name'] );
692
+
693
+ for ( $i = 0; $i < $totalFiles; $i++ ) {
694
+ if ( $postVar['name'][ $i ] ) {
695
+ if ( $postVar['size'][ $i ] > $value ) {
696
+ $errorMsg .= $error.' ('.$postVar['name'][ $i ].')<br>';
697
+ }
698
+ }
699
+ }
700
+ } else {
701
+ if ( $postVar['size'] > $value ) {
702
+ $errorMsg .= $error.' ('.$postVar['name'].')<br>';
703
+ }
704
+ }
705
+
706
+ return $errorMsg;
707
+ }
708
+ /**
709
+ * Validate image height and width.
710
+ * @param string $postVar Element name.
711
+ * @param string $value Element value.
712
+ * @param string $error Error message.
713
+ * @return string Error message.
714
+ */
715
+ function validate_image_height_width($postVar, $value, $error) {
716
+
717
+ $errorMsg = '';
718
+ if ( isset( $value ) ) {
719
+ $found = strpos( $value, ',' );
720
+ if ( false === $found ) {
721
+ $options[0] = $value;
722
+ } else {
723
+ $options = explode( ',', $value );
724
+ $W = $options[0];
725
+ $H = $options[1];
726
+ }
727
+ }
728
+
729
+ if ( is_array( $postVar['name'] ) ) {
730
+
731
+ $totalFiles = count( $postVar['name'] );
732
+
733
+ for ( $i = 0; $i < $totalFiles; $i++ ) {
734
+
735
+ if ( $postVar['name'][ $i ] ) {
736
+
737
+ list($width, $height) = getimagesize( $postVar['tmp_name'][ $i ] );
738
+
739
+ if ( ($height > $W || $width > $H) && $postVar['tmp_name'][ $i ] ) {
740
+ $errorMsg .= $error.' ('.$postVar['name'][ $i ].')<br>';
741
+ }
742
+ }
743
+ }
744
+ } else {
745
+
746
+ list($width, $height) = getimagesize( $postVar['tmp_name'] );
747
+ if ( ($height < $H || $width < $W) && $postVar['tmp_name'] ) {
748
+ $errorMsg .= $error.' ('.$postVar['name'].')<br>';
749
+ }
750
+ }
751
+
752
+ return $errorMsg;
753
+ }
754
+ /**
755
+ * Available phone type.
756
+ * @param string $country Country name.
757
+ * @return array Phone type expressions.
758
+ */
759
+ function available_phone_type($country) {
760
+
761
+ switch ( $country ) {
762
+
763
+ case 'in': // India.
764
+ $type[0] = '/^[0-9]{6,10}$/';
765
+ // (+91)[022]111111.
766
+ $type[1] = '/^[\(][\+][0-9]{2}[\)][\[][0-9]{3,5}[\]][0-9]{6,10}$/';
767
+ // +91022111111.
768
+ $type[2] = '/^[\+][0-9]{2}[0-9]{3,5}[0-9]{6,10}$/';
769
+ // 91-111111.
770
+ $type[3] = '/^[0-9]{2}[\-][0-9]{6,10}$/';
771
+ break;
772
+
773
+ case 'br': // Brazil.
774
+ $type[0] = '/^([0-9]{2})?(\([0-9]{2})\)([0-9]{3}|[0-9]{4})-[0-9]{4}$/';
775
+ break;
776
+
777
+ case 'fr': // France.
778
+ $type[0] = '/^([0-9]{2})?(\([0-9]{2})\)([0-9]{3}|[0-9]{4})-[0-9]{4}$/';
779
+ break;
780
+
781
+ case 'us': // US.
782
+ $type[0] = '/^[\(][0-9]{3}[\)][0-9]{3}[\-][0-9]{4}$/';
783
+ break;
784
+
785
+ case 'sw': // Swedish.
786
+ $type[0] = '/^(([+][0-9]{2}[ ][1-9][0-9]{0,2}[ ])|([0][0-9]{1,3}[-]))(([0-9]{2}([ ][0-9]{2}){2})|([0-9]{3}([ ][0-9]{3})*([ ][0-9]{2})+))$/';
787
+ break;
788
+ }
789
+
790
+ return $type;
791
+ }
792
+ }
793
+ }
lang/wp-google-map-plugin-en_US.mo ADDED
Binary file
lang/wp-google-map-plugin-en_US.po ADDED
@@ -0,0 +1,937 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: wp google map lite version 3.0.0\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2015-08-22 12:56+0530\n"
6
+ "PO-Revision-Date: 2015-08-22 12:56+0530\n"
7
+ "Last-Translator: Flipper Code <hello@flippercode.com>\n"
8
+ "Language-Team: \n"
9
+ "Language: en_US\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Generator: Poedit 1.6.9\n"
17
+ "X-Poedit-SearchPath-0: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-"
18
+ "content/plugins/wp-google-map-plugin\n"
19
+
20
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.controller.php:140
21
+ msgid " updated successfully."
22
+ msgstr ""
23
+
24
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.controller.php:141
25
+ msgid " added successfully. You can manage your "
26
+ msgstr ""
27
+
28
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.map-widget.php:25
29
+ msgid "A widget to display google maps"
30
+ msgstr ""
31
+
32
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.map-widget.php:71
33
+ msgid "Title:"
34
+ msgstr ""
35
+
36
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.map-widget.php:77
37
+ msgid "Select Your Map:"
38
+ msgstr ""
39
+
40
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.map-widget.php:80
41
+ msgid "Select map"
42
+ msgstr ""
43
+
44
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.tabular.php:222
45
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.tabular.php:421
46
+ msgid "Selected "
47
+ msgstr ""
48
+
49
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.tabular.php:252
50
+ msgid "Manage "
51
+ msgstr ""
52
+
53
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.tabular.php:585
54
+ msgid "Filter"
55
+ msgstr ""
56
+
57
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.tabular.php:645
58
+ msgid "Select Page"
59
+ msgstr ""
60
+
61
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.template.php:472
62
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:63
63
+ msgid "Choose Marker Image"
64
+ msgstr ""
65
+
66
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/core/class.template.php:479
67
+ msgid "Remove Marker Image"
68
+ msgstr ""
69
+
70
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/google-maps.php:206
71
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/google-maps.php:207
72
+ msgid "WP Google Map"
73
+ msgstr ""
74
+
75
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/google-maps.php:424
76
+ msgid "Choose Icons"
77
+ msgstr ""
78
+
79
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/google-maps.php:494
80
+ msgid "Choose icon"
81
+ msgstr ""
82
+
83
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/google-maps.php:494
84
+ msgid "Search icons"
85
+ msgstr ""
86
+
87
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/google-maps.php:521
88
+ msgid "Insert into Post"
89
+ msgstr ""
90
+
91
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/model.group_map.php:41
92
+ msgid "Add Marker Category"
93
+ msgstr ""
94
+
95
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/model.group_map.php:42
96
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:194
97
+ msgid "Marker Categories"
98
+ msgstr ""
99
+
100
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/model.group_map.php:116
101
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:170
102
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:365
103
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/model.map.php:167
104
+ msgid "Something went wrong. Please try again."
105
+ msgstr ""
106
+
107
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/model.group_map.php:118
108
+ msgid "Category updated successfully"
109
+ msgstr ""
110
+
111
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/model.group_map.php:120
112
+ msgid "Category added successfully."
113
+ msgstr ""
114
+
115
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:32
116
+ msgid "Marker Category"
117
+ msgstr ""
118
+
119
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:32
120
+ msgid "Manage Marker Categories"
121
+ msgstr ""
122
+
123
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:42
124
+ msgid "Parent Category"
125
+ msgstr ""
126
+
127
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:44
128
+ msgid "Assign parent category if any."
129
+ msgstr ""
130
+
131
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:51
132
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:56
133
+ msgid "Marker Category Title"
134
+ msgstr ""
135
+
136
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/group_map/views/form.php:54
137
+ msgid "Enter here marker category title."
138
+ msgstr ""
139
+
140
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:44
141
+ msgid "Add Location"
142
+ msgstr ""
143
+
144
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:45
145
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:41
146
+ msgid "Manage Locations"
147
+ msgstr ""
148
+
149
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:172
150
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:367
151
+ msgid "Location updated successfully"
152
+ msgstr ""
153
+
154
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:174
155
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:369
156
+ msgid "Location added successfully."
157
+ msgstr ""
158
+
159
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:258
160
+ msgid "Please select file to be imported."
161
+ msgstr ""
162
+
163
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/model.location.php:260
164
+ msgid "Please upload a valid file"
165
+ msgstr ""
166
+
167
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:41
168
+ msgid "Location Information"
169
+ msgstr ""
170
+
171
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:43
172
+ msgid "Location Title"
173
+ msgstr ""
174
+
175
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:45
176
+ msgid "Enter here the location title."
177
+ msgstr ""
178
+
179
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:47
180
+ msgid "Enter Location Title"
181
+ msgstr ""
182
+
183
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:50
184
+ msgid "Location Address"
185
+ msgstr ""
186
+
187
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:52
188
+ msgid "Enter here the address. Google auto suggest helps you to choose one."
189
+ msgstr ""
190
+
191
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:55
192
+ msgid "Type Location Address"
193
+ msgstr ""
194
+
195
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:59
196
+ msgid "Latitude and Longitude"
197
+ msgstr ""
198
+
199
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:62
200
+ msgid "Enter here the latitude."
201
+ msgstr ""
202
+
203
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:65
204
+ msgid "Enter the Latitude"
205
+ msgstr ""
206
+
207
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:72
208
+ msgid "Enter here the longitude."
209
+ msgstr ""
210
+
211
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:75
212
+ msgid "Enter the Longitude"
213
+ msgstr ""
214
+
215
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:80
216
+ msgid "City and State"
217
+ msgstr ""
218
+
219
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:83
220
+ msgid "Enter here the city."
221
+ msgstr ""
222
+
223
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:85
224
+ msgid "City"
225
+ msgstr ""
226
+
227
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:92
228
+ msgid "Enter here the state."
229
+ msgstr ""
230
+
231
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:94
232
+ msgid "State"
233
+ msgstr ""
234
+
235
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:99
236
+ msgid "Country and Postal Code"
237
+ msgstr ""
238
+
239
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:102
240
+ msgid "Enter here the country."
241
+ msgstr ""
242
+
243
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:104
244
+ msgid "Country"
245
+ msgstr ""
246
+
247
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:111
248
+ msgid "Enter here the postal code."
249
+ msgstr ""
250
+
251
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:113
252
+ msgid "Postal Code"
253
+ msgstr ""
254
+
255
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:119
256
+ msgid "Current Location"
257
+ msgstr ""
258
+
259
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:126
260
+ msgid "On Click"
261
+ msgstr ""
262
+
263
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:127
264
+ msgid "Display Infowindow"
265
+ msgstr ""
266
+
267
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:127
268
+ msgid "Redirect"
269
+ msgstr ""
270
+
271
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:135
272
+ msgid "Infowindow Message"
273
+ msgstr ""
274
+
275
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:137
276
+ msgid "Enter here the infoWindow message."
277
+ msgstr ""
278
+
279
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:146
280
+ msgid "Redirect Url"
281
+ msgstr ""
282
+
283
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:148
284
+ msgid "Enter here the redirect url. e.g http://www.flippercode.com"
285
+ msgstr ""
286
+
287
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:156
288
+ msgid "YES"
289
+ msgstr ""
290
+
291
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:156
292
+ msgid "NO"
293
+ msgstr ""
294
+
295
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:157
296
+ msgid "Open new tab"
297
+ msgstr ""
298
+
299
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:159
300
+ msgid "Open a new window tab."
301
+ msgstr ""
302
+
303
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:168
304
+ msgid "Infowindow Default Open"
305
+ msgstr ""
306
+
307
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:172
308
+ msgid "Check to enable infowindow default open."
309
+ msgstr ""
310
+
311
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:176
312
+ msgid "Marker Draggable"
313
+ msgstr ""
314
+
315
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:180
316
+ msgid "Check if you want to allow visitors to drag the marker."
317
+ msgstr ""
318
+
319
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:184
320
+ msgid "Marker Animation"
321
+ msgstr ""
322
+
323
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:186
324
+ msgid "Please select marker animation."
325
+ msgstr ""
326
+
327
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:233
328
+ msgid "You don't have categorie(s)."
329
+ msgstr ""
330
+
331
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/location/views/form.php:240
332
+ msgid "Save Location"
333
+ msgstr ""
334
+
335
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/model.map.php:40
336
+ msgid "Add Map"
337
+ msgstr ""
338
+
339
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/model.map.php:41
340
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/form.php:32
341
+ msgid "Manage Maps"
342
+ msgstr ""
343
+
344
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/model.map.php:169
345
+ msgid "Map updated successfully"
346
+ msgstr ""
347
+
348
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/model.map.php:171
349
+ msgid "Map added successfully."
350
+ msgstr ""
351
+
352
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/model.map.php:198
353
+ msgid "Copy"
354
+ msgstr ""
355
+
356
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/form.php:32
357
+ msgid "Map Information"
358
+ msgstr ""
359
+
360
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/form.php:41
361
+ msgid "Save Map"
362
+ msgstr ""
363
+
364
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:24
365
+ msgid "Control Position(s) Settings"
366
+ msgstr ""
367
+
368
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:29
369
+ msgid "Pan Control"
370
+ msgstr ""
371
+
372
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:31
373
+ msgid "Please select position of pan control."
374
+ msgstr ""
375
+
376
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:35
377
+ msgid "Zoom Control"
378
+ msgstr ""
379
+
380
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:37
381
+ msgid "Please select position of zoom control."
382
+ msgstr ""
383
+
384
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:42
385
+ msgid "Zoom Control Style"
386
+ msgstr ""
387
+
388
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:44
389
+ msgid "Please select style of zoom control."
390
+ msgstr ""
391
+
392
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:49
393
+ msgid "Map Type Control"
394
+ msgstr ""
395
+
396
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:52
397
+ msgid "Please select position of map type control."
398
+ msgstr ""
399
+
400
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:58
401
+ msgid "Map Type Control Style"
402
+ msgstr ""
403
+
404
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:60
405
+ msgid "Please select style of map type control."
406
+ msgstr ""
407
+
408
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:65
409
+ msgid "Street View Control"
410
+ msgstr ""
411
+
412
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-position-style-form.php:67
413
+ msgid "Please select position of street view control."
414
+ msgstr ""
415
+
416
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:8
417
+ msgid "Control Setting"
418
+ msgstr ""
419
+
420
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:13
421
+ msgid "Turn Off Pan Control"
422
+ msgstr ""
423
+
424
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:17
425
+ msgid "Please check to disable pan control."
426
+ msgstr ""
427
+
428
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:21
429
+ msgid "Turn Off Zoom Control"
430
+ msgstr ""
431
+
432
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:25
433
+ msgid "Please check to disable zoom control."
434
+ msgstr ""
435
+
436
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:29
437
+ msgid "Turn Off Map Type Control"
438
+ msgstr ""
439
+
440
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:33
441
+ msgid "Please check to disable map type control."
442
+ msgstr ""
443
+
444
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:37
445
+ msgid "Turn Off Scale Control"
446
+ msgstr ""
447
+
448
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:41
449
+ msgid "Please check to disable scale control."
450
+ msgstr ""
451
+
452
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:45
453
+ msgid "Turn Off Street View Control"
454
+ msgstr ""
455
+
456
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:49
457
+ msgid "Please check to disable street view control."
458
+ msgstr ""
459
+
460
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:53
461
+ msgid "Turn Off Overview Map Control"
462
+ msgstr ""
463
+
464
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/control-setting-form.php:57
465
+ msgid "Please check to disable overview map control."
466
+ msgstr ""
467
+
468
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:9
469
+ msgid "Map Title"
470
+ msgstr ""
471
+
472
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:11
473
+ msgid "Enter here the map title."
474
+ msgstr ""
475
+
476
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:16
477
+ msgid "Map Width"
478
+ msgstr ""
479
+
480
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:18
481
+ msgid "Enter here the map width in pixel. Leave it blank for 100% width."
482
+ msgstr ""
483
+
484
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:22
485
+ msgid "Map Height"
486
+ msgstr ""
487
+
488
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:24
489
+ msgid "Enter here the map height in pixel."
490
+ msgstr ""
491
+
492
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:96
493
+ msgid "Map Zoom Level"
494
+ msgstr ""
495
+
496
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:98
497
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:105
498
+ msgid "Available options 1 to 19."
499
+ msgstr ""
500
+
501
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:103
502
+ msgid "Map Type"
503
+ msgstr ""
504
+
505
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:110
506
+ msgid "Turn Off Scrolling Wheel"
507
+ msgstr ""
508
+
509
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:114
510
+ msgid "Please check to disable scroll wheel zoom."
511
+ msgstr ""
512
+
513
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:118
514
+ msgid "Map Draggable"
515
+ msgstr ""
516
+
517
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:122
518
+ msgid "Please check to disable map draggable."
519
+ msgstr ""
520
+
521
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:127
522
+ msgid "45&deg; Imagery"
523
+ msgstr ""
524
+
525
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/general-setting-form.php:131
526
+ msgid ""
527
+ "Apply 45&deg; Imagery ? (only available for map type SATELLITE and HYBRID)."
528
+ msgstr ""
529
+
530
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:9
531
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:14
532
+ msgid "Layers Settings"
533
+ msgstr ""
534
+
535
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:22
536
+ msgid "Traffic Layer"
537
+ msgstr ""
538
+
539
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:26
540
+ msgid "Please check to enable traffic Layer."
541
+ msgstr ""
542
+
543
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:31
544
+ msgid "Transit Layer"
545
+ msgstr ""
546
+
547
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:35
548
+ msgid "Please check to enable Transit Layer."
549
+ msgstr ""
550
+
551
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:41
552
+ msgid "Bicycling Layer"
553
+ msgstr ""
554
+
555
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/layers-form.php:45
556
+ msgid "Please check to enable Bicycling Layer."
557
+ msgstr ""
558
+
559
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/locations-form.php:41
560
+ msgid "Choose Locations"
561
+ msgstr ""
562
+
563
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/locations-form.php:46
564
+ msgid "Choose"
565
+ msgstr ""
566
+
567
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/locations-form.php:47
568
+ msgid "Select All"
569
+ msgstr ""
570
+
571
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/locations-form.php:48
572
+ msgid "Deselect All"
573
+ msgstr ""
574
+
575
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/map-center-settings.php:8
576
+ msgid "Map's Center"
577
+ msgstr ""
578
+
579
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/map-center-settings.php:14
580
+ msgid "Center Latitude"
581
+ msgstr ""
582
+
583
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/map-center-settings.php:16
584
+ msgid "Enter here the center latitude."
585
+ msgstr ""
586
+
587
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/map-center-settings.php:20
588
+ msgid "Center Longitude"
589
+ msgstr ""
590
+
591
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/map-center-settings.php:22
592
+ msgid "Enter here the center longitude."
593
+ msgstr ""
594
+
595
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:9
596
+ msgid "Street View Settings"
597
+ msgstr ""
598
+
599
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:15
600
+ msgid "Turn On Street View"
601
+ msgstr ""
602
+
603
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:19
604
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:29
605
+ msgid "Please check to enable Street View control."
606
+ msgstr ""
607
+
608
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:25
609
+ msgid "Turn On Close Button."
610
+ msgstr ""
611
+
612
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:36
613
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:47
614
+ msgid "Turn Off links Control."
615
+ msgstr ""
616
+
617
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:40
618
+ msgid "Please check to disable links control."
619
+ msgstr ""
620
+
621
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:51
622
+ msgid "Please check to disable Street View Pan control."
623
+ msgstr ""
624
+
625
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:58
626
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:67
627
+ msgid "POV Heading"
628
+ msgstr ""
629
+
630
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:61
631
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:70
632
+ msgid "Please enter POV heading."
633
+ msgstr ""
634
+
635
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:77
636
+ msgid "POV Pitch"
637
+ msgstr ""
638
+
639
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/map/views/map-forms/street-view-setting-form.php:80
640
+ msgid "Please enter POV Pitch."
641
+ msgstr ""
642
+
643
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/overview/views/view.php:12
644
+ msgid "How to Use"
645
+ msgstr ""
646
+
647
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/overview/views/view.php:14
648
+ msgid "Go through the steps below to create your first map."
649
+ msgstr ""
650
+
651
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/overview/views/view.php:18
652
+ #, php-format
653
+ msgid ""
654
+ "Use our auto suggestion enabled location box to add your location <a href="
655
+ "\"%s\">here</a>. You can add multiple locations.All those locations will be "
656
+ "available to choose when you create your map."
657
+ msgstr ""
658
+
659
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/overview/views/view.php:23
660
+ #, php-format
661
+ msgid ""
662
+ "Now <a href=\"%s\">click here</a> to create a map. You can create as many "
663
+ "maps you want to add. Using shortcode, you can add maps on posts/pages."
664
+ msgstr ""
665
+
666
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/overview/views/view.php:28
667
+ msgid ""
668
+ "When done with administrative tasks, you can display map on posts/pages "
669
+ "using. You can create as many maps you want to add. Using shortcode, you can "
670
+ "add maps on posts/pages. Enable map in the widgets section to display in "
671
+ "sidebar."
672
+ msgstr ""
673
+
674
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/overview/views/view.php:34
675
+ msgid "Pro Version"
676
+ msgstr ""
677
+
678
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/overview/views/view.php:36
679
+ msgid "Pro Edition Features"
680
+ msgstr ""
681
+
682
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/model.settings.php:28
683
+ msgid "Settings"
684
+ msgstr ""
685
+
686
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/model.settings.php:53
687
+ msgid "Setting(s) saved successfully."
688
+ msgstr ""
689
+
690
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:10
691
+ msgid "General Setting(s)"
692
+ msgstr ""
693
+
694
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:12
695
+ msgid "Business API Key"
696
+ msgstr ""
697
+
698
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:14
699
+ msgid "Insert Api Key if you signup for google maps business api."
700
+ msgstr ""
701
+
702
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:17
703
+ msgid "ENGLISH"
704
+ msgstr ""
705
+
706
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:18
707
+ msgid "ARABIC"
708
+ msgstr ""
709
+
710
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:19
711
+ msgid "BASQUE"
712
+ msgstr ""
713
+
714
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:20
715
+ msgid "BULGARIAN"
716
+ msgstr ""
717
+
718
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:21
719
+ msgid "BENGALI"
720
+ msgstr ""
721
+
722
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:22
723
+ msgid "CATALAN"
724
+ msgstr ""
725
+
726
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:23
727
+ msgid "CZECH"
728
+ msgstr ""
729
+
730
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:24
731
+ msgid "DANISH"
732
+ msgstr ""
733
+
734
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:25
735
+ msgid "GERMAN"
736
+ msgstr ""
737
+
738
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:26
739
+ msgid "GREEK"
740
+ msgstr ""
741
+
742
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:27
743
+ msgid "ENGLISH (AUSTRALIAN)"
744
+ msgstr ""
745
+
746
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:28
747
+ msgid "ENGLISH (GREAT BRITAIN)"
748
+ msgstr ""
749
+
750
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:29
751
+ msgid "SPANISH"
752
+ msgstr ""
753
+
754
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:30
755
+ msgid "FARSI"
756
+ msgstr ""
757
+
758
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:31
759
+ msgid "FINNISH"
760
+ msgstr ""
761
+
762
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:32
763
+ msgid "FILIPINO"
764
+ msgstr ""
765
+
766
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:33
767
+ msgid "FRENCH"
768
+ msgstr ""
769
+
770
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:34
771
+ msgid "GALICIAN"
772
+ msgstr ""
773
+
774
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:35
775
+ msgid "GUJARATI"
776
+ msgstr ""
777
+
778
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:36
779
+ msgid "HINDI"
780
+ msgstr ""
781
+
782
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:37
783
+ msgid "CROATIAN"
784
+ msgstr ""
785
+
786
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:38
787
+ msgid "HUNGARIAN"
788
+ msgstr ""
789
+
790
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:39
791
+ msgid "INDONESIAN"
792
+ msgstr ""
793
+
794
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:40
795
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:48
796
+ msgid "ITALIAN"
797
+ msgstr ""
798
+
799
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:41
800
+ msgid "HEBREW"
801
+ msgstr ""
802
+
803
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:42
804
+ msgid "JAPANESE"
805
+ msgstr ""
806
+
807
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:43
808
+ msgid "KANNADA"
809
+ msgstr ""
810
+
811
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:44
812
+ msgid "KOREAN"
813
+ msgstr ""
814
+
815
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:45
816
+ msgid "LITHUANIAN"
817
+ msgstr ""
818
+
819
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:46
820
+ msgid "LATVIAN"
821
+ msgstr ""
822
+
823
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:47
824
+ msgid "MALAYALAM"
825
+ msgstr ""
826
+
827
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:49
828
+ msgid "MARATHI"
829
+ msgstr ""
830
+
831
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:50
832
+ msgid "DUTCH"
833
+ msgstr ""
834
+
835
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:51
836
+ msgid "NORWEGIAN"
837
+ msgstr ""
838
+
839
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:52
840
+ msgid "POLISH"
841
+ msgstr ""
842
+
843
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:53
844
+ msgid "PORTUGUESE"
845
+ msgstr ""
846
+
847
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:54
848
+ msgid "PORTUGUESE (BRAZIL)"
849
+ msgstr ""
850
+
851
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:55
852
+ msgid "PORTUGUESE (PORTUGAL)"
853
+ msgstr ""
854
+
855
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:56
856
+ msgid "ROMANIAN"
857
+ msgstr ""
858
+
859
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:57
860
+ msgid "RUSSIAN"
861
+ msgstr ""
862
+
863
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:58
864
+ msgid "SLOVAK"
865
+ msgstr ""
866
+
867
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:59
868
+ msgid "SLOVENIAN"
869
+ msgstr ""
870
+
871
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:60
872
+ msgid "SERBIAN"
873
+ msgstr ""
874
+
875
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:61
876
+ msgid "SWEDISH"
877
+ msgstr ""
878
+
879
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:62
880
+ msgid "TAGALOG"
881
+ msgstr ""
882
+
883
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:63
884
+ msgid "TAMIL"
885
+ msgstr ""
886
+
887
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:64
888
+ msgid "TELUGU"
889
+ msgstr ""
890
+
891
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:65
892
+ msgid "THAI"
893
+ msgstr ""
894
+
895
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:66
896
+ msgid "TURKISH"
897
+ msgstr ""
898
+
899
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:67
900
+ msgid "UKRAINIAN"
901
+ msgstr ""
902
+
903
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:68
904
+ msgid "VIETNAMESE"
905
+ msgstr ""
906
+
907
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:69
908
+ msgid "CHINESE (SIMPLIFIED)"
909
+ msgstr ""
910
+
911
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:70
912
+ msgid "CHINESE (TRADITIONAL)"
913
+ msgstr ""
914
+
915
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:75
916
+ msgid "Select Language"
917
+ msgstr ""
918
+
919
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:77
920
+ msgid "Default is English."
921
+ msgstr ""
922
+
923
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/settings/views/manage.php:82
924
+ msgid "Save Setting"
925
+ msgstr ""
926
+
927
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/shortcode/views/put-wpgmp.php:89
928
+ msgid "not working..."
929
+ msgstr ""
930
+
931
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/shortcode/views/put-wpgmp.php:91
932
+ msgid "No results found."
933
+ msgstr ""
934
+
935
+ #: /Applications/XAMPP/xamppfiles/htdocs/demos/wp-content/plugins/wp-google-map-plugin/modules/shortcode/views/put-wpgmp.php:92
936
+ msgid "Route is not available for your requested route."
937
+ msgstr ""
modules/group_map/model.group_map.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class: WPGMP_Model_Group_Map
4
+ * Menu Order: 3
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ * @version 3.0.0
7
+ * @package Maps
8
+ */
9
+
10
+ if ( ! class_exists( 'WPGMP_Model_Group_Map' ) ) {
11
+
12
+ /**
13
+ * Category model for CRUD operation.
14
+ * @package Maps
15
+ * @author Flipper Code <hello@flippercode.com>
16
+ */
17
+ class WPGMP_Model_Group_Map extends WPGMP_Model_Base {
18
+ /**
19
+ * Validations on category properies.
20
+ * @var array
21
+ */
22
+ protected $validations = array(
23
+ 'group_map_title' => array( 'req' => 'Please enter category title.' ),
24
+ 'group_marker' => array( 'req' => 'Please upload marker image.' ),
25
+ );
26
+ /**
27
+ * Intialize location object.
28
+ */
29
+ function __construct() {
30
+
31
+ $this->table = TBL_GROUPMAP;
32
+ $this->unique = 'group_map_id';
33
+ }
34
+
35
+ /**
36
+ * Admin menu for CRUD Operation
37
+ * @return array Admin menu navigation(s).
38
+ */
39
+ function navigation() {
40
+ return array(
41
+ 'wpgmp_form_group_map' => __( 'Add Marker Category', WPGMP_TEXT_DOMAIN ),
42
+ 'wpgmp_manage_group_map' => __( 'Marker Categories', WPGMP_TEXT_DOMAIN ),
43
+ );
44
+
45
+ }
46
+ /**
47
+ * Install table associated with Location entity.
48
+ * @return string SQL query to install map_locations table.
49
+ */
50
+ function install() {
51
+ global $wpdb;
52
+ $group_map = 'CREATE TABLE `'.$wpdb->prefix.'group_map` (
53
+ `group_map_id` int(11) NOT NULL AUTO_INCREMENT,
54
+ `group_map_title` varchar(255) DEFAULT NULL,
55
+ `group_marker` text DEFAULT NULL,
56
+ `group_setting` text DEFAULT NULL,
57
+ `group_parent` int(11) DEFAULT 0,
58
+ `group_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
59
+ PRIMARY KEY (`group_map_id`)
60
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
61
+ return $group_map;
62
+ }
63
+ /**
64
+ * Get Categories
65
+ * @param array $where Conditional statement.
66
+ * @return array Array of Category object(s).
67
+ */
68
+ public function fetch($where = array()) {
69
+
70
+ $objects = $this->get( $this->table, $where );
71
+
72
+ if ( isset( $objects ) ) {
73
+ foreach ( $objects as $object ) {
74
+ if ( strstr( $object->group_marker, 'wp-google-map-plugin/icons/' ) !== false ) {
75
+ $object->group_marker = str_replace( 'icons', 'assets/images/icons', $object->group_marker ); }
76
+ }
77
+ return $objects;
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Add or Edit Operation.
83
+ */
84
+ function save() {
85
+
86
+ $data = array();
87
+ $entityID = '';
88
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
89
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); }
90
+
91
+ if ( isset( $nonce ) and ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
92
+
93
+ die( 'Cheating...' );
94
+
95
+ }
96
+
97
+ $this->verify( $_POST );
98
+
99
+ if ( isset( $_POST['entityID'] ) ) {
100
+ $entityID = intval( wp_unslash( $_POST['entityID'] ) );
101
+ }
102
+
103
+ if ( is_array( $this->errors ) and ! empty( $this->errors ) ) {
104
+ $this->throw_errors();
105
+ }
106
+
107
+ $data['group_map_title'] = sanitize_text_field( wp_unslash( $_POST['group_map_title'] ) );
108
+ $data['group_marker'] = wp_unslash( $_POST['group_marker'] );
109
+ $data['group_parent'] = intval( wp_unslash( $_POST['group_parent'] ) );
110
+
111
+ if ( $entityID > 0 ) {
112
+ $where[ $this->unique ] = $entityID;
113
+ } else {
114
+ $where = '';
115
+ }
116
+
117
+ $result = WPGMP_Database::insert_or_update( $this->table, $data, $where );
118
+
119
+ if ( false === $result ) {
120
+ $response['error'] = __( 'Something went wrong. Please try again.',WPGMP_TEXT_DOMAIN );
121
+ } elseif ( $entityID > 0 ) {
122
+ $response['success'] = __( 'Category updated successfully',WPGMP_TEXT_DOMAIN );
123
+ } else {
124
+ $response['success'] = __( 'Category added successfully.',WPGMP_TEXT_DOMAIN );
125
+ }
126
+ return $response;
127
+ }
128
+ /**
129
+ * Delete location object by id.
130
+ */
131
+ function delete() {
132
+ if ( isset( $_GET['group_map_id'] ) ) {
133
+ $id = intval( wp_unslash( $_GET['group_map_id'] ) );
134
+ $connection = WPGMP_Database::connect();
135
+ $this->query = $connection->prepare( "DELETE FROM $this->table WHERE $this->unique='%d'", $id );
136
+ return WPGMP_Database::non_query( $this->query, $connection );
137
+ }
138
+ }
139
+
140
+ }
141
+ }
modules/group_map/views/form.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for Add & Edit Category
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package Maps
6
+ */
7
+
8
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
9
+
10
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) );
11
+
12
+ if ( ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
13
+
14
+ die( 'Cheating...' );
15
+
16
+ } else {
17
+ $data = $_POST;
18
+ }
19
+ }
20
+ global $wpdb;
21
+ $modelFactory = new FactoryModelWPGMP();
22
+ $category = $modelFactory->create_object( 'group_map' );
23
+ $categories = (array) $category->fetch();
24
+ if ( isset( $_GET['doaction'] ) and 'edit' == $_GET['doaction'] and isset( $_GET['group_map_id'] ) ) {
25
+ $category_obj = $category->fetch( array( array( 'group_map_id', '=', intval( wp_unslash( $_GET['group_map_id'] ) ) ) ) );
26
+ $_POST = (array) $category_obj[0];
27
+ } elseif ( ! isset( $_GET['doaction'] ) and isset( $response['success'] ) ) {
28
+ // Reset $_POST object for antoher entry.
29
+ unset( $_POST );
30
+ }
31
+ $form = new Responsive_Markup();
32
+ $form->set_header( __( 'Marker Category', WPGMP_TEXT_DOMAIN ), $response, __( 'Manage Marker Categories', WPGMP_TEXT_DOMAIN ), 'wpgmp_manage_group_map' );
33
+ if ( is_array( $categories ) ) {
34
+ $markers = array( ' ' => 'Please Select' );
35
+ foreach ( $categories as $i => $single_category ) {
36
+ if ( $single_category->group_parent == 0 or $single_category->group_parent == '' ) {
37
+ $markers[ $single_category->group_map_id ] = $single_category->group_map_title;
38
+ }
39
+ }
40
+
41
+ $form->add_element('select', 'group_parent', array(
42
+ 'lable' => __( 'Parent Category', WPGMP_TEXT_DOMAIN ),
43
+ 'current' => (isset( $_POST['group_parent'] ) and ! empty( $_POST['group_parent'] )) ? intval( wp_unslash( $_POST['group_parent'] ) ) : '',
44
+ 'desc' => __( 'Assign parent category if any.', WPGMP_TEXT_DOMAIN ),
45
+ 'options' => $markers,
46
+ ));
47
+
48
+ }
49
+
50
+ $form->add_element('text', 'group_map_title', array(
51
+ 'lable' => __( 'Marker Category Title', WPGMP_TEXT_DOMAIN ),
52
+ 'value' => (isset( $_POST['group_map_title'] ) and ! empty( $_POST['group_map_title'] )) ? sanitize_text_field( wp_unslash( $_POST['group_map_title'] ) ) : '',
53
+ 'id' => 'group_map_title',
54
+ 'desc' => __( 'Enter here marker category title.', WPGMP_TEXT_DOMAIN ),
55
+ 'class' => 'create_map form-control',
56
+ 'placeholder' => __( 'Marker Category Title', WPGMP_TEXT_DOMAIN ),
57
+ 'required' => true,
58
+ ));
59
+
60
+ $form->set_col( 3 );
61
+
62
+ $form->add_element('image_picker', 'group_marker', array(
63
+ 'lable' => __( 'Choose Marker Image', WPGMP_TEXT_DOMAIN ),
64
+ 'src' => (isset( $_POST['group_marker'] ) ) ? wp_unslash( $_POST['group_marker'] ) : WPGMP_IMAGES.'/default_marker.png',
65
+ 'required' => false,
66
+ ));
67
+
68
+ $form->add_element('submit', 'create_group_map_location', array(
69
+ 'value' => 'Save Marker Category',
70
+ 'before' => '<div class="col-md-12">',
71
+ 'after' => '</div>'
72
+
73
+ ));
74
+
75
+ $form->add_element('hidden', 'operation', array(
76
+ 'value' => 'save',
77
+ ));
78
+
79
+ if ( isset( $_GET['doaction'] ) and 'edit' == $_GET['doaction'] ) {
80
+ $form->add_element('hidden', 'entityID', array(
81
+ 'value' => intval( wp_unslash( $_GET['group_map_id'] ) ),
82
+ ));
83
+ }
84
+
85
+ $form->render();
modules/group_map/views/manage.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Manage Marker Categories
4
+ * @package Maps
5
+ */
6
+
7
+ if ( class_exists( 'WP_List_Table_Helper' ) and ! class_exists( 'Wpgmp_Manage_Group_Table' ) ) {
8
+
9
+ /**
10
+ * Display categories manager.
11
+ */
12
+ class Wpgmp_Manage_Group_Table extends WP_List_Table_Helper {
13
+
14
+ /**
15
+ * Intialize manage category table.
16
+ * @param array $tableinfo Table's properties.
17
+ */
18
+ public function __construct($tableinfo) {
19
+ parent::__construct( $tableinfo ); }
20
+ /**
21
+ * Show marker image assigned to category.
22
+ * @param array $item Category row.
23
+ * @return html Image tag.
24
+ */
25
+ public function column_group_marker($item) {
26
+ if ( strstr( $item->group_marker, 'wp-google-map-plugin/icons/' ) !== false ) {
27
+ $item->group_marker = str_replace( 'icons', 'assets/images/icons', $item->group_marker );
28
+ }
29
+ return sprintf( '<img src="'.$item->group_marker.'" name="group_image[]" value="%s" />', $item->group_map_id );
30
+ }
31
+ /**
32
+ * Show category's parent name.
33
+ * @param [type] $item Category row.
34
+ * @return string Category name.
35
+ */
36
+ public function column_group_parent($item) {
37
+
38
+ global $wpdb;
39
+ $parent = $wpdb->get_col( $wpdb->prepare( 'SELECT group_map_title FROM '.$this->table.' where group_map_id = %d',$item->group_parent ) );
40
+ $parent = ( ! empty( $parent )) ? ucwords( $parent[0] ) : '---';
41
+ return $parent;
42
+
43
+ }
44
+
45
+ }
46
+ global $wpdb;
47
+ $columns = array(
48
+ 'group_map_title' => 'Category Title',
49
+ 'group_marker' => 'Marker Image',
50
+ 'group_parent' => 'Parent Category',
51
+ 'group_added' => 'Updated On',
52
+ );
53
+ $sortable = array( 'group_map_title' );
54
+ $tableinfo = array(
55
+ 'table' => $wpdb->prefix.'group_map',
56
+ 'textdomain' => WPGMP_TEXT_DOMAIN,
57
+ 'singular_label' => 'marker category',
58
+ 'plural_label' => 'Categories',
59
+ 'admin_listing_page_name' => 'wpgmp_manage_group_map',
60
+ 'admin_add_page_name' => 'wpgmp_form_group_map',
61
+ 'primary_col' => 'group_map_id',
62
+ 'columns' => $columns,
63
+ 'sortable' => $sortable,
64
+ 'per_page' => 20,
65
+ 'col_showing_links' => 'group_map_title',
66
+ 'searchExclude' => array( 'group_parent' ),
67
+ 'editrecord_filepath' => WPGMP_VIEWS_PATH.'/group_map/add_or_edit.php',
68
+ );
69
+ return new Wpgmp_Manage_Group_Table( $tableinfo );
70
+
71
+ }
modules/location/model.location.php ADDED
@@ -0,0 +1,378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class: WPGMP_Model_Location
4
+ * Menu Order: 1.
5
+ *
6
+ * @author Flipper Code <hello@flippercode.com>
7
+ * @package Maps
8
+ * @version 3.0.0
9
+ */
10
+
11
+ if ( ! class_exists( 'WPGMP_Model_Location' ) ) {
12
+
13
+ /**
14
+ * Location model for CRUD operation.
15
+ * @package Maps
16
+ * @author Flipper Code <hello@flippercode.com>
17
+ */
18
+ class WPGMP_Model_Location extends WPGMP_Model_Base
19
+ {
20
+ /**
21
+ * Validations on location properies.
22
+ * @var array
23
+ */
24
+ public $validations = array(
25
+ 'location_title' => array( 'req' => 'Please enter location title.' ),
26
+ 'location_address' => array( 'req' => 'Please enter location address.' ),
27
+ 'location_latitude' => array( 'req' => 'Please enter location latitude.' ),
28
+ 'location_longitude' => array( 'req' => 'Please enter location longitude.' ),
29
+ );
30
+ /**
31
+ * Intialize location object.
32
+ */
33
+ public function __construct() {
34
+ $this->table = TBL_LOCATION;
35
+ $this->unique = 'location_id';
36
+ }
37
+ /**
38
+ * Admin menu for CRUD Operation
39
+ * @return array Admin meny navigation(s).
40
+ */
41
+ public function navigation() {
42
+
43
+ return array(
44
+ 'wpgmp_form_location' => __( 'Add Location', WPGMP_TEXT_DOMAIN ),
45
+ 'wpgmp_manage_location' => __( 'Manage Locations', WPGMP_TEXT_DOMAIN ),
46
+ );
47
+ }
48
+ /**
49
+ * Install table associated with Location entity.
50
+ * @return string SQL query to install map_locations table.
51
+ */
52
+ public function install() {
53
+
54
+ global $wpdb;
55
+ $map_location = 'CREATE TABLE `'.$wpdb->prefix.'map_locations` (
56
+ `location_id` int(11) NOT NULL AUTO_INCREMENT,
57
+ `location_title` varchar(255) DEFAULT NULL,
58
+ `location_address` varchar(255) DEFAULT NULL,
59
+ `location_draggable` varchar(255) DEFAULT NULL,
60
+ `location_infowindow_default_open` varchar(255) DEFAULT NULL,
61
+ `location_animation` varchar(255) DEFAULT NULL,
62
+ `location_latitude` varchar(255) DEFAULT NULL,
63
+ `location_longitude` varchar(255) DEFAULT NULL,
64
+ `location_city` varchar(255) DEFAULT NULL,
65
+ `location_state` varchar(255) DEFAULT NULL,
66
+ `location_country` varchar(255) DEFAULT NULL,
67
+ `location_postal_code` varchar(255) DEFAULT NULL,
68
+ `location_zoom` int(11) DEFAULT NULL,
69
+ `location_messages` text DEFAULT NULL,
70
+ `location_settings` text DEFAULT NULL,
71
+ `location_group_map` text DEFAULT NULL,
72
+ `location_extrafields` text DEFAULT NULL,
73
+ PRIMARY KEY (`location_id`)
74
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
75
+
76
+ return $map_location;
77
+ }
78
+ /**
79
+ * Get Location(s)
80
+ * @param array $where Conditional statement.
81
+ * @return array Array of Location object(s).
82
+ */
83
+ public function fetch($where = array()) {
84
+
85
+ $objects = $this->get( $this->table, $where );
86
+
87
+ if ( isset( $objects ) ) {
88
+ foreach ( $objects as $object ) {
89
+ $object->location_settings = unserialize( $object->location_settings );
90
+ $object->location_extrafields = unserialize( $object->location_extrafields );
91
+ // Data convertion for version < 3.0.
92
+ $is_category = unserialize( $object->location_group_map );
93
+ if ( ! is_array( $is_category ) ) {
94
+ $object->location_group_map = array( $object->location_group_map );
95
+ } else {
96
+ $object->location_group_map = $is_category;
97
+ }
98
+ // Data convertion for version < 3.0.
99
+ $is_message = unserialize( base64_decode( $object->location_messages ) );
100
+ if ( is_array( $is_message ) ) {
101
+ $object->location_messages = $is_message['googlemap_infowindow_message_one'];
102
+ }
103
+ }
104
+ return $objects;
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Add or Edit Operation.
110
+ */
111
+ public function save() {
112
+
113
+ $entityID = '';
114
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
115
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); }
116
+
117
+ if ( isset( $nonce ) and ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
118
+
119
+ die( 'Cheating...' );
120
+
121
+ }
122
+
123
+ $this->verify( $_POST );
124
+
125
+ if ( is_array( $this->errors ) and ! empty( $this->errors ) ) {
126
+ $this->throw_errors();
127
+ }
128
+
129
+ if ( isset( $_POST['entityID'] ) ) {
130
+ $entityID = intval( wp_unslash( $_POST['entityID'] ) );
131
+ }
132
+
133
+ if ( isset( $_POST['location_messages'] ) ) {
134
+ $data['location_messages'] = wp_unslash( $_POST['location_messages'] );
135
+ }
136
+ $data['location_settings'] = serialize( wp_unslash( $_POST['location_settings'] ) );
137
+ $data['location_group_map'] = serialize( wp_unslash( $_POST['location_group_map'] ) );
138
+ $extra_fields = wp_unslash( $_POST['location_extrafields'] );
139
+ if ( isset( $extra_fields ) ) {
140
+ foreach ( $extra_fields['key'] as $i => $v ) {
141
+ if ( sanitize_text_field( $v ) == '' ) {
142
+ unset( $extra_fields['key'][ $i ] );
143
+ unset( $extra_fields['value'][ $i ] );
144
+ }
145
+ }
146
+ }
147
+ $data['location_extrafields'] = serialize( wp_unslash( $extra_fields ) );
148
+ $data['location_title'] = sanitize_text_field( wp_unslash( $_POST['location_title'] ) );
149
+ $data['location_address'] = sanitize_text_field( wp_unslash( $_POST['location_address'] ) );
150
+ $data['location_latitude'] = sanitize_text_field( wp_unslash( $_POST['location_latitude'] ) );
151
+ $data['location_longitude'] = sanitize_text_field( wp_unslash( $_POST['location_longitude'] ) );
152
+ $data['location_city'] = sanitize_text_field( wp_unslash( $_POST['location_city'] ) );
153
+ $data['location_state'] = sanitize_text_field( wp_unslash( $_POST['location_state'] ) );
154
+ $data['location_country'] = sanitize_text_field( wp_unslash( $_POST['location_country'] ) );
155
+ $data['location_postal_code'] = sanitize_text_field( wp_unslash( $_POST['location_postal_code'] ) );
156
+ $data['location_zoom'] = intval( wp_unslash( $_POST['location_zoom'] ) );
157
+ $data['location_draggable'] = sanitize_text_field( wp_unslash( $_POST['location_draggable'] ) );
158
+ $data['location_infowindow_default_open'] = sanitize_text_field( wp_unslash( $_POST['location_infowindow_default_open'] ) );
159
+ $data['location_animation'] = sanitize_text_field( wp_unslash( $_POST['location_animation'] ) );
160
+
161
+ if ( $entityID > 0 ) {
162
+ $where[ $this->unique ] = $entityID;
163
+ } else {
164
+ $where = '';
165
+ }
166
+
167
+ $result = WPGMP_Database::insert_or_update( $this->table, $data, $where );
168
+
169
+ if ( false === $result ) {
170
+ $response['error'] = __( 'Something went wrong. Please try again.',WPGMP_TEXT_DOMAIN );
171
+ } elseif ( $entityID > 0 ) {
172
+ $response['success'] = __( 'Location updated successfully',WPGMP_TEXT_DOMAIN );
173
+ } else {
174
+ $response['success'] = __( 'Location added successfully.',WPGMP_TEXT_DOMAIN );
175
+ }
176
+ return $response;
177
+ }
178
+
179
+ /**
180
+ * Delete location object by id.
181
+ */
182
+ public function delete() {
183
+ if ( isset( $_GET['location_id'] ) ) {
184
+ $id = intval( wp_unslash( $_GET['location_id'] ) );
185
+ $connection = WPGMP_Database::connect();
186
+ $this->query = $connection->prepare( "DELETE FROM $this->table WHERE $this->unique='%d'", $id );
187
+ return WPGMP_Database::non_query( $this->query, $connection );
188
+ }
189
+ }
190
+ /**
191
+ * Export data into csv,xml,json and excel file.
192
+ * @param string $type File Type.
193
+ */
194
+ function export($type = 'csv') {
195
+ $all_locations = $this->fetch();
196
+ $file_name = sanitize_file_name( 'location_'.$type.'_'.time() );
197
+ $modelFactory = new FactoryModelWPGMP();
198
+ $category = $modelFactory->create_object( 'group_map' );
199
+ $categories = $category->fetch();
200
+ if ( ! empty( $categories ) ) {
201
+ $categories_data = array();
202
+ foreach ( $categories as $cat ) {
203
+ $categories_data[ $cat->group_map_id ] = $cat->group_map_title;
204
+ }
205
+ }
206
+ foreach ( $all_locations as $location ) {
207
+ $assigned_categories = array();
208
+ if ( isset( $location->location_group_map ) and is_array( $location->location_group_map ) ) {
209
+ foreach ( $location->location_group_map as $c => $cat ) {
210
+ $assigned_categories[] = $categories_data[ $cat ];
211
+ }
212
+ }
213
+ $assigned_categories = implode( ',',$assigned_categories );
214
+ $data_locations [] = array(
215
+ 'location_title' => $location->location_title,
216
+ 'location_address' => $location->location_address,
217
+ 'location_latitude' => $location->location_latitude,
218
+ 'location_longitude' => $location->location_longitude,
219
+ 'location_city' => $location->location_city,
220
+ 'location_state' => $location->location_state,
221
+ 'location_country' => $location->location_country,
222
+ 'location_postal_code' => $location->location_postal_code,
223
+ 'location_messages' => $location->location_messages,
224
+ 'location_group_map' => $assigned_categories,
225
+ );
226
+ }
227
+ $exporter = new WP_Export_Import(array(
228
+ 'Title',
229
+ 'Address',
230
+ 'Latitude',
231
+ 'Longitude',
232
+ 'City',
233
+ 'State',
234
+ 'Country',
235
+ 'Postal Code',
236
+ 'Message',
237
+ 'Categories',
238
+ ),$data_locations);
239
+ $exporter->export( $type,$file_name );
240
+ die();
241
+ }
242
+ /**
243
+ * Import Location via CSV,JSON,XML and Excel.
244
+ * @return array Success or Failure error message.
245
+ */
246
+ public function import_location() {
247
+ $result = false;
248
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
249
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); }
250
+
251
+ if ( ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
252
+
253
+ die( 'Cheating...' );
254
+
255
+ }
256
+ if ( isset( $_POST['import_loc'] ) ) {
257
+ if ( isset( $_FILES['import_file']['tmp_name'] ) and '' == sanitize_file_name( wp_unslash( $_FILES['import_file']['tmp_name'] ) ) ) {
258
+ $response['error'] = __( 'Please select file to be imported.', WPGMP_TEXT_DOMAIN );
259
+ } elseif ( isset( $_FILES['import_file']['name'] ) and ! $this->wpgmp_validate_extension( sanitize_file_name( wp_unslash( $_FILES['import_file']['name'] ) ) ) ) {
260
+ $response['error'] = __( 'Please upload a valid file', WPGMP_TEXT_DOMAIN );
261
+ } else {
262
+ if ( isset( $_POST['wpgmp_import_mode'] ) and 'wpgmp_delete' == sanitize_text_field( wp_unslash( $_POST['wpgmp_import_mode'] ) ) ) {
263
+ global $wpdb;
264
+
265
+ $wpdb->query( 'TRUNCATE TABLE '.TBL_LOCATION.'' ); // DB call ok; no-cache ok.
266
+ }
267
+
268
+ $file_extension = explode( '.', sanitize_file_name( wp_unslash( $_FILES['import_file']['name'] ) ) );
269
+ $importer = new WP_Export_Import();
270
+ $file_data = $importer->import( $file_extension[1],'import_file' );
271
+ $datas = array();
272
+ if ( ! empty( $file_data ) ) {
273
+ $modelFactory = new FactoryModelWPGMP();
274
+ $category = $modelFactory->create_object( 'group_map' );
275
+ $categories = $category->fetch();
276
+ if ( ! empty( $categories ) ) {
277
+ $categories_data = array();
278
+ foreach ( $categories as $cat ) {
279
+ $categories_data[ $cat->group_map_id ] = strtolower( sanitize_text_field( $cat->group_map_title ) );
280
+ }
281
+ }
282
+ foreach ( $file_data as $data ) {
283
+ $category_ids = array();
284
+
285
+ if ( isset( $data['title'] ) ) {
286
+ $datas['location_title'] = $data['title'];
287
+ } else if ( isset( $data['location_title'] ) ) {
288
+ $datas['location_title'] = $data['location_title'];
289
+ }
290
+
291
+ if ( isset( $data['address'] ) ) {
292
+ $datas['location_address'] = $data['address'];
293
+ } else if ( isset( $data['location_title'] ) ) {
294
+ $datas['location_address'] = $data['location_address'];
295
+ }
296
+
297
+ if ( isset( $data['latitude'] ) ) {
298
+ $datas['location_latitude'] = $data['latitude'];
299
+ } else if ( isset( $data['location_latitude'] ) ) {
300
+ $datas['location_latitude'] = $data['location_latitude'];
301
+ }
302
+
303
+ if ( isset( $data['longitude'] ) ) {
304
+ $datas['location_longitude'] = $data['longitude'];
305
+ } else if ( isset( $data['location_longitude'] ) ) {
306
+ $datas['location_longitude'] = $data['location_longitude'];
307
+ }
308
+
309
+ if ( isset( $data['city'] ) ) {
310
+ $datas['location_city'] = $data['city'];
311
+ } else if ( isset( $data['location_city'] ) ) {
312
+ $datas['location_city'] = $data['location_city'];
313
+ }
314
+
315
+ if ( isset( $data['country'] ) ) {
316
+ $datas['location_country'] = $data['country'];
317
+ } else if ( isset( $data['location_city'] ) ) {
318
+ $datas['location_country'] = $data['location_country'];
319
+ }
320
+
321
+ if ( isset( $data['postal-code'] ) ) {
322
+ $datas['location_postal_code'] = $data['postal-code'];
323
+ } else if ( isset( $data['location_city'] ) ) {
324
+ $datas['location_postal_code'] = $data['location_postal_code'];
325
+ }
326
+
327
+ if ( isset( $data['message'] ) ) {
328
+ $datas['location_messages'] = $data['message'];
329
+ } else if ( isset( $data['location_messages'] ) ) {
330
+ $datas['location_messages'] = $data['location_messages'];
331
+ }
332
+
333
+ if ( isset( $data['location_group_map'] ) ) {
334
+ $data['categories'] = $data['location_group_map'];
335
+ }
336
+
337
+ $datas['location_messages'] = $data['message'];
338
+ // Find out categories id or insert new category.
339
+ if ( isset( $data['categories'] ) and ! empty( $data['categories'] ) ) {
340
+ $all_cat = explode( ',', strtolower( $data['categories'] ) );
341
+ if ( is_array( $all_cat ) ) {
342
+ foreach ( $all_cat as $cat ) {
343
+ $cat_id = array_search( sanitize_text_field( $cat ), (array) $categories_data );
344
+ if ( false == $cat_id ) {
345
+ // Create a new category.
346
+ $new_cat_id = WPGMP_Database::insert_or_update( TBL_GROUPMAP, array(
347
+ 'group_map_title' => sanitize_text_field( $cat ),
348
+ 'group_marker' => WPGMP_IMAGES.'default_marker.png',
349
+ ) );
350
+ $category_ids[] = $new_cat_id;
351
+ $categories_data[ $new_cat_id ] = sanitize_text_field( $cat );
352
+
353
+ } else {
354
+ $category_ids[] = $cat_id;
355
+ }
356
+ }
357
+ }
358
+ }
359
+ $datas['location_group_map'] = serialize( (array) $category_ids );
360
+ $result = WPGMP_Database::insert_or_update( $this->table, $datas );
361
+ }
362
+ }
363
+
364
+ if ( false === $result ) {
365
+ $response['error'] = __( 'Something went wrong. Please try again.',WPGMP_TEXT_DOMAIN );
366
+ } elseif ( $entityID > 0 ) {
367
+ $response['success'] = __( 'Location updated successfully',WPGMP_TEXT_DOMAIN );
368
+ } else {
369
+ $response['success'] = __( 'Location added successfully.',WPGMP_TEXT_DOMAIN );
370
+ }
371
+ return $response;
372
+
373
+ }
374
+ return $response;
375
+ }
376
+ }
377
+ }
378
+ }
modules/location/views/form.php ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for Add & Edit Location
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package Maps
6
+ */
7
+
8
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
9
+
10
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) );
11
+
12
+ if ( ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
13
+
14
+ die( 'Cheating...' );
15
+
16
+ } else {
17
+ $data = $_POST;
18
+ }
19
+ }
20
+ global $wpdb;
21
+
22
+
23
+ $modelFactory = new FactoryModelWPGMP();
24
+ $category_obj = $modelFactory->create_object( 'group_map' );
25
+ $categories = $category_obj->fetch();
26
+ if ( is_array( $categories ) and ! empty( $categories ) ) {
27
+ $all_categories = array();
28
+ foreach ( $categories as $category ) {
29
+ $all_categories [ $category->group_map_id ] = $category;
30
+ }
31
+ }
32
+ $location_obj = $modelFactory->create_object( 'location' );
33
+ if ( isset( $_GET['doaction'] ) and 'edit' == $_GET['doaction'] and isset( $_GET['location_id'] ) ) {
34
+ $location_obj = $location_obj->fetch( array( array( 'location_id', '=', intval( wp_unslash( $_GET['location_id'] ) ) ) ) );
35
+ $data = (array) $location_obj[0];
36
+ } elseif ( ! isset( $_GET['doaction'] ) and isset( $response['success'] ) ) {
37
+ // Reset $_POST object for antoher entry.
38
+ unset( $data );
39
+ }
40
+ $form = new Responsive_Markup();
41
+ $form->set_header( __( 'Location Information', WPGMP_TEXT_DOMAIN ), $response, __( 'Manage Locations', WPGMP_TEXT_DOMAIN ), 'wpgmp_manage_location' );
42
+ $form->add_element( 'text', 'location_title', array(
43
+ 'lable' => __( 'Location Title', 'wpgmp_google_map' ),
44
+ 'value' => (isset( $data['location_title'] ) and ! empty( $data['location_title'] )) ? $data['location_title'] : '',
45
+ 'desc' => __( 'Enter here the location title.', WPGMP_TEXT_DOMAIN ),
46
+ 'required' => true,
47
+ 'placeholder' => __( 'Enter Location Title', WPGMP_TEXT_DOMAIN ),
48
+ ));
49
+ $form->add_element( 'text', 'location_address', array(
50
+ 'lable' => __( 'Location Address', WPGMP_TEXT_DOMAIN ),
51
+ 'value' => (isset( $data['location_address'] ) and ! empty( $data['location_address'] )) ? $data['location_address'] : '',
52
+ 'desc' => __( 'Enter here the address. Google auto suggest helps you to choose one.', WPGMP_TEXT_DOMAIN ),
53
+ 'required' => true,
54
+ 'class' => 'form-control wpgmp_auto_suggest',
55
+ 'placeholder' => __( 'Type Location Address', WPGMP_TEXT_DOMAIN ),
56
+ ));
57
+ $form->set_col( 2 );
58
+ $form->add_element( 'text', 'location_latitude', array(
59
+ 'lable' => __( 'Latitude and Longitude', WPGMP_TEXT_DOMAIN ),
60
+ 'value' => (isset( $data['location_latitude'] ) and ! empty( $data['location_latitude'] )) ? $data['location_latitude'] : '',
61
+ 'id' => 'googlemap_latitude',
62
+ 'desc' => __( 'Enter here the latitude.', WPGMP_TEXT_DOMAIN ),
63
+ 'required' => true,
64
+ 'class' => 'google_latitude form-control',
65
+ 'placeholder' => __( 'Enter the Latitude', WPGMP_TEXT_DOMAIN ),
66
+ 'before' => '<div class="col-md-4">',
67
+ 'after' => '</div>',
68
+ ));
69
+ $form->add_element( 'text', 'location_longitude', array(
70
+ 'value' => (isset( $data['location_longitude'] ) and ! empty( $data['location_longitude'] )) ? $data['location_longitude'] : '',
71
+ 'id' => 'googlemap_longitude',
72
+ 'desc' => __( 'Enter here the longitude.', WPGMP_TEXT_DOMAIN ),
73
+ 'required' => true,
74
+ 'class' => 'google_longitude form-control',
75
+ 'placeholder' => __( 'Enter the Longitude', WPGMP_TEXT_DOMAIN ),
76
+ 'before' => '<div class="col-md-4">',
77
+ 'after' => '</div>',
78
+ ));
79
+ $form->add_element( 'text', 'location_city', array(
80
+ 'lable' => __( 'City and State', WPGMP_TEXT_DOMAIN ),
81
+ 'value' => (isset( $data['location_city'] ) and ! empty( $data['location_city'] )) ? $data['location_city'] : '',
82
+ 'id' => 'googlemap_city',
83
+ 'desc' => __( 'Enter here the city.', WPGMP_TEXT_DOMAIN ),
84
+ 'class' => 'google_city form-control',
85
+ 'placeholder' => __( 'City', WPGMP_TEXT_DOMAIN ),
86
+ 'before' => '<div class="col-md-4">',
87
+ 'after' => '</div>',
88
+ ));
89
+ $form->add_element( 'text', 'location_state', array(
90
+ 'value' => (isset( $data['location_state'] ) and ! empty( $data['location_state'] )) ? $data['location_state'] : '',
91
+ 'id' => 'googlemap_state',
92
+ 'desc' => __( 'Enter here the state.', WPGMP_TEXT_DOMAIN ),
93
+ 'class' => 'google_state form-control',
94
+ 'placeholder' => __( 'State', WPGMP_TEXT_DOMAIN ),
95
+ 'before' => '<div class="col-md-4">',
96
+ 'after' => '</div>',
97
+ ));
98
+ $form->add_element( 'text', 'location_country', array(
99
+ 'lable' => __( 'Country and Postal Code', WPGMP_TEXT_DOMAIN ),
100
+ 'value' => (isset( $data['location_country'] ) and ! empty( $data['location_country'] )) ? $data['location_country'] : '',
101
+ 'id' => 'googlemap_country',
102
+ 'desc' => __( 'Enter here the country.', WPGMP_TEXT_DOMAIN ),
103
+ 'class' => 'google_country form-control',
104
+ 'placeholder' => __( 'Country', WPGMP_TEXT_DOMAIN ),
105
+ 'before' => '<div class="col-md-4">',
106
+ 'after' => '</div>',
107
+ ));
108
+ $form->add_element( 'text', 'location_postal_code', array(
109
+ 'value' => (isset( $data['location_postal_code'] ) and ! empty( $data['location_postal_code'] )) ? $data['location_postal_code'] : '',
110
+ 'id' => 'googlemap_postal_code',
111
+ 'desc' => __( 'Enter here the postal code.', WPGMP_TEXT_DOMAIN ),
112
+ 'class' => 'google_postal_code form-control',
113
+ 'placeholder' => __( 'Postal Code', WPGMP_TEXT_DOMAIN ),
114
+ 'before' => '<div class="col-md-4">',
115
+ 'after' => '</div>',
116
+ ));
117
+ $form->set_col( 1 );
118
+ $form->add_element( 'div', 'wpgmp_map', array(
119
+ 'lable' => __( 'Current Location', WPGMP_TEXT_DOMAIN ),
120
+ 'id' => 'wpgmp_map',
121
+ 'style' => array( 'width' => '100%' ,'height' => '300px' ),
122
+ ));
123
+
124
+
125
+ $form->add_element( 'radio', 'location_settings[onclick]', array(
126
+ 'lable' => __( 'On Click', WPGMP_TEXT_DOMAIN ),
127
+ 'radio-val-label' => array( 'marker' => __( 'Display Infowindow',WPGMP_TEXT_DOMAIN ),'custom_link' => __( 'Redirect',WPGMP_TEXT_DOMAIN ) ),
128
+ 'current' => $data['location_settings']['onclick'],
129
+ 'class' => 'chkbox_class switch_onoff',
130
+ 'default_value' => 'marker',
131
+ 'data' => array( 'target' => '.wpgmp_location_onclick' ),
132
+ ));
133
+
134
+ $form->add_element( 'textarea', 'location_messages', array(
135
+ 'lable' => __( 'Infowindow Message', WPGMP_TEXT_DOMAIN ),
136
+ 'value' => (isset( $data['location_messages'] ) and ! empty( $data['location_messages'] )) ? $data['location_messages'] : '',
137
+ 'desc' => __( 'Enter here the infoWindow message.', WPGMP_TEXT_DOMAIN ),
138
+ 'textarea_rows' => 10,
139
+ 'textarea_name' => 'location_messages',
140
+ 'class' => 'form-control wpgmp_location_onclick wpgmp_location_onclick_marker',
141
+ 'id' => 'googlemap_infomessage',
142
+ 'show' => 'false',
143
+ ));
144
+
145
+ $form->add_element( 'text', 'location_settings[redirect_link]', array(
146
+ 'lable' => __( 'Redirect Url',WPGMP_TEXT_DOMAIN ),
147
+ 'value' => $data['location_settings']['redirect_link'],
148
+ 'desc' => __( 'Enter here the redirect url. e.g http://www.flippercode.com', WPGMP_TEXT_DOMAIN ),
149
+ 'class' => 'wpgmp_location_onclick_custom_link wpgmp_location_onclick form-control',
150
+ 'before' => '<div class="col-md-8">',
151
+ 'after' => '</div>',
152
+ 'show' => 'false',
153
+ ));
154
+
155
+ $form->add_element( 'select', 'location_settings[redirect_link_window]', array(
156
+ 'options' => array( 'yes' => __( 'YES',WPGMP_TEXT_DOMAIN ), 'no' => __( 'NO',WPGMP_TEXT_DOMAIN ) ),
157
+ 'lable' => __( 'Open new tab',WPGMP_TEXT_DOMAIN ),
158
+ 'current' => $data['location_settings']['redirect_link_window'],
159
+ 'desc' => __( 'Open a new window tab.', WPGMP_TEXT_DOMAIN ),
160
+ 'class' => 'wpgmp_location_onclick_redirect wpgmp_location_onclick form-control',
161
+ 'before' => '<div class="col-md-2">',
162
+ 'after' => '</div>',
163
+ 'show' => 'false',
164
+ ));
165
+
166
+
167
+ $form->add_element( 'checkbox', 'location_infowindow_default_open', array(
168
+ 'lable' => __( 'Infowindow Default Open', WPGMP_TEXT_DOMAIN ),
169
+ 'value' => 'true',
170
+ 'id' => 'location_infowindow_default_open',
171
+ 'current' => $data['location_infowindow_default_open'],
172
+ 'desc' => __( 'Check to enable infowindow default open.', WPGMP_TEXT_DOMAIN ),
173
+ 'class' => 'chkbox_class',
174
+ ));
175
+ $form->add_element( 'checkbox', 'location_draggable', array(
176
+ 'lable' => __( 'Marker Draggable', WPGMP_TEXT_DOMAIN ),
177
+ 'value' => 'true',
178
+ 'id' => 'location_draggable',
179
+ 'current' => $data['location_draggable'],
180
+ 'desc' => __( 'Check if you want to allow visitors to drag the marker.', WPGMP_TEXT_DOMAIN ),
181
+ 'class' => 'chkbox_class',
182
+ ));
183
+ $form->add_element( 'select', 'location_animation', array(
184
+ 'lable' => __( 'Marker Animation', WPGMP_TEXT_DOMAIN ),
185
+ 'current' => (isset( $data['location_animation'] ) and ! empty( $data['location_animation'] )) ? $data['location_animation'] : '',
186
+ 'desc' => __( 'Please select marker animation.', WPGMP_TEXT_DOMAIN ),
187
+ 'options' => array( 'BOUNCE' => 'Bounce', 'DROP' => 'DROP' ),
188
+ 'before' => '<div class="col-md-3">',
189
+ 'after' => '</div>',
190
+ ));
191
+
192
+
193
+ $form->add_element( 'group', 'marker_category_listing', array(
194
+ 'value' => __( 'Marker Categories', WPGMP_TEXT_DOMAIN ),
195
+ 'before' => '<div class="col-md-12">',
196
+ 'after' => '</div>',
197
+ ));
198
+
199
+ if ( ! empty( $all_categories ) ) {
200
+ $category_data = array();
201
+ $parent_category_data = array();
202
+ if ( ! $data['location_group_map'] ) {
203
+ $data['location_group_map'] = array(); }
204
+ foreach ( $categories as $category ) {
205
+ if ( is_null( $category->group_parent ) or 0 == $category->group_parent ) {
206
+ $parent_category_data = ' ---- ';
207
+ } else {
208
+ $parent_category_data = $all_categories[ $category->group_parent ]->group_map_title;
209
+ }
210
+ if ( '' != $category->group_marker ) {
211
+ $icon_src = "<img src='".$category->group_marker."' />";
212
+ } else {
213
+ $icon_src = "<img src='".WPGMP_IMAGES."default_marker.png' />";
214
+
215
+ }
216
+ $select_input = $form->field_checkbox('location_group_map[]',array(
217
+ 'value' => $category->group_map_id,
218
+ 'current' => (in_array( $category->group_map_id, $data['location_group_map'] ) ? $category->group_map_id : ''),
219
+ 'class' => 'chkbox_class',
220
+ 'before' => '<div class="col-md-1">',
221
+ 'after' => '</div>',
222
+ ));
223
+ $category_data[] = array( $select_input,$category->group_map_title,$parent_category_data,$icon_src );
224
+ }
225
+ $category_data = $form->add_element( 'table', 'location_group_map', array(
226
+ 'heading' => array( 'Select','Category','Parent','Icon' ),
227
+ 'data' => $category_data,
228
+ 'before' => '<div class="col-md-12">',
229
+ 'after' => '</div>',
230
+ ));
231
+ } else {
232
+ $form->add_element( 'message', 'message', array(
233
+ 'value' => __( 'You don\'t have categorie(s).', WPGMP_TEXT_DOMAIN ),
234
+ 'class' => 'alert alert-info',
235
+ 'before' => '<div class="col-md-12">',
236
+ 'after' => '</div>',
237
+ ));
238
+ }
239
+ $form->add_element( 'submit', 'save_entity_data', array(
240
+ 'value' => __( 'Save Location',WPGMP_TEXT_DOMAIN ),
241
+ ));
242
+ $form->add_element( 'hidden', 'operation', array(
243
+ 'value' => 'save',
244
+ ));
245
+ if ( isset( $_GET['doaction'] ) and 'edit' == $_GET['doaction'] ) {
246
+
247
+ $form->add_element( 'hidden', 'entityID', array(
248
+ 'value' => intval( wp_unslash( $_GET['location_id'] ) ),
249
+ ));
250
+ }
251
+ $form->render();
252
+ $infowindow_message = (isset( $data['location_messages'] ) and ! empty( $data['location_messages'] )) ? $data['location_messages'] : '';
253
+ $infowindow_disable = (isset( $data['location_settings'] ) and ! empty( $data['location_settings'] )) ? $data['location_settings'] : '';
254
+ $category_obj = $category_obj->get( array( array( 'group_map_id', '=', intval( wp_unslash( $_GET['group_map_id'] ) ) ) ) );
255
+ $category = (array) $category_obj[0];
256
+
257
+ if ( ! empty( $category->group_marker ) ) {
258
+ $category_group_marker = $category->group_marker;
259
+ } else {
260
+ $category_group_marker = WPGMP_IMAGES.'default_marker.png';
261
+ }
262
+ $map_data['map_options'] = array(
263
+ 'center_lat' => (isset( $data['location_latitude'] ) and ! empty( $data['location_latitude'] )) ? $data['location_latitude'] : '',
264
+ 'center_lng' => (isset( $data['location_longitude'] ) and ! empty( $data['location_longitude'] )) ? $data['location_longitude'] : '',
265
+ );
266
+ $map_data['places'][] = array(
267
+ 'id' => (isset( $data['location_id'] ) and ! empty( $data['location_id'] )) ? $data['location_id'] : '',
268
+ 'title' => (isset( $data['location_title'] ) and ! empty( $data['location_title'] )) ? $data['location_title'] : '',
269
+ 'content' => $infowindow_message,
270
+ 'location' => array(
271
+ 'icon' => ($category_group_marker),
272
+ 'lat' => (isset( $data['location_latitude'] ) and ! empty( $data['location_latitude'] )) ? $data['location_latitude'] : '',
273
+ 'lng' => (isset( $data['location_longitude'] ) and ! empty( $data['location_longitude'] )) ? $data['location_longitude'] : '',
274
+ 'draggable' => true,
275
+ 'infowindow_default_open' => (isset( $data['location_infowindow_default_open'] ) and ! empty( $data['location_infowindow_default_open'] )) ? $data['location_infowindow_default_open'] : '',
276
+ 'animation' => (isset( $data['location_animation'] ) and ! empty( $data['location_animation'] )) ? $data['location_animation'] : '',
277
+ 'infowindow_disable' => ( 'false' === @$infowindow_disable['hide_infowindow']),
278
+ 'zoom' => (isset( $data['location_zoom'] ) and ! empty( $data['location_zoom'] )) ? $data['location_zoom'] : '',
279
+ ),
280
+ 'categories' => array( array(
281
+ 'id' => $category->group_map_id,
282
+ 'name' => $category->group_map_title,
283
+ 'type' => 'category',
284
+ 'icon' => $category_group_marker,
285
+ ),
286
+ ),
287
+ );
288
+ $map_data['page'] = 'edit_location';
289
+ ?>
290
+ <script type="text/javascript">
291
+ jQuery(document).ready(function($) {
292
+ var map = $("#wpgmp_map").maps(<?php echo wp_json_encode( $map_data ); ?>).data('wpgmp_maps');
293
+ });
294
+ </script>
modules/location/views/manage.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( class_exists( 'WP_List_Table_Helper' ) and ! class_exists( 'Wpgmp_Location_Table' ) ) {
4
+
5
+ class Wpgmp_Location_Table extends WP_List_Table_Helper { public function __construct($tableinfo) {
6
+ parent::__construct( $tableinfo ); } }
7
+
8
+ // Minimal Configuration :)
9
+ global $wpdb;
10
+ $columns = array( 'location_title' => 'Title','location_address' => 'Address','location_latitude' => 'Latitude','location_longitude' => 'Longitude' );
11
+ $sortable = array( 'location_title','location_address','location_latitude','location_longitude' );
12
+ $tableinfo = array(
13
+ 'table' => $wpdb->prefix.'map_locations',
14
+ 'textdomain' => WPGMP_TEXT_DOMAIN,
15
+ 'singular_label' => 'location',
16
+ 'plural_label' => 'locations',
17
+ 'admin_listing_page_name' => 'wpgmp_manage_location',
18
+ 'admin_add_page_name' => 'wpgmp_form_location',
19
+ 'primary_col' => 'location_id',
20
+ 'columns' => $columns,
21
+ 'sortable' => $sortable,
22
+ 'per_page' => 200,
23
+ 'actions' => array( 'edit','delete' ),
24
+ 'col_showing_links' => 'location_title',
25
+ 'editrecord_filepath' => WPGMP_VIEWS_PATH.'/location/add_or_edit.php',
26
+ );
27
+ return new Wpgmp_Location_Table( $tableinfo );
28
+
29
+ }
30
+ ?>
modules/map/model.map.php ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class: WPGMP_Model_Map
4
+ * Menu Order: 2
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ * @version 3.0.0
7
+ * @package Maps
8
+ */
9
+
10
+ if ( ! class_exists( 'WPGMP_Model_Map' ) ) {
11
+
12
+ /**
13
+ * Map model for CRUD operation.
14
+ * @package Maps
15
+ * @author Flipper Code <hello@flippercode.com>
16
+ */
17
+ class WPGMP_Model_Map extends WPGMP_Model_Base {
18
+ /**
19
+ * Validations on route properies.
20
+ * @var array
21
+ */
22
+ protected $validations = array(
23
+ 'map_title' => array( 'req' => 'Please enter map title.' ),
24
+ 'map_height' => array( 'req' => 'Please enter map height.' ),
25
+ );
26
+ /**
27
+ * Intialize map object.
28
+ */
29
+ function __construct() {
30
+
31
+ $this->table = TBL_MAP;
32
+ $this->unique = 'map_id';
33
+ }
34
+ /**
35
+ * Admin menu for CRUD Operation
36
+ * @return array Admin menu navigation(s).
37
+ */
38
+ function navigation() {
39
+ return array(
40
+ 'wpgmp_form_map' => __( 'Add Map', WPGMP_TEXT_DOMAIN ),
41
+ 'wpgmp_manage_map' => __( 'Manage Maps', WPGMP_TEXT_DOMAIN ),
42
+ );
43
+
44
+ }
45
+ /**
46
+ * Install table associated with map entity.
47
+ * @return string SQL query to install create_map table.
48
+ */
49
+ function install() {
50
+ global $wpdb;
51
+ $create_map = 'CREATE TABLE `'.$wpdb->prefix.'create_map` (
52
+ `map_id` int(11) NOT NULL AUTO_INCREMENT,
53
+ `map_title` varchar(255) DEFAULT NULL,
54
+ `map_width` varchar(255) DEFAULT NULL,
55
+ `map_height` varchar(255) DEFAULT NULL,
56
+ `map_zoom_level` varchar(255) DEFAULT NULL,
57
+ `map_type` varchar(255) DEFAULT NULL,
58
+ `map_scrolling_wheel` varchar(255) DEFAULT NULL,
59
+ `map_visual_refresh` varchar(255) DEFAULT NULL,
60
+ `map_45imagery` varchar(255) DEFAULT NULL,
61
+ `map_street_view_setting` text DEFAULT NULL,
62
+ `map_route_direction_setting` text DEFAULT NULL,
63
+ `map_all_control` text DEFAULT NULL,
64
+ `map_info_window_setting` text DEFAULT NULL,
65
+ `style_google_map` text DEFAULT NULL,
66
+ `map_locations` text DEFAULT NULL,
67
+ `map_layer_setting` text DEFAULT NULL,
68
+ `map_polygon_setting` text DEFAULT NULL,
69
+ `map_polyline_setting` text DEFAULT NULL,
70
+ `map_cluster_setting` text DEFAULT NULL,
71
+ `map_overlay_setting` text DEFAULT NULL,
72
+ `map_geotags` text DEFAULT NULL,
73
+ `map_infowindow_setting` text DEFAULT NULL,
74
+ PRIMARY KEY (`map_id`)
75
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
76
+
77
+ return $create_map;
78
+ }
79
+ /**
80
+ * Get Map(s)
81
+ * @param array $where Conditional statement.
82
+ * @return array Array of Map object(s).
83
+ */
84
+ public function fetch($where = array()) {
85
+
86
+ $objects = $this->get( $this->table, $where );
87
+
88
+ if ( isset( $objects ) ) {
89
+ foreach ( $objects as $object ) {
90
+ $object->map_street_view_setting = unserialize( $object->map_street_view_setting );
91
+ $object->map_route_direction_setting = unserialize( $object->map_route_direction_setting );
92
+ $object->map_all_control = unserialize( $object->map_all_control );
93
+ $object->map_info_window_setting = unserialize( $object->map_info_window_setting );
94
+ $object->style_google_map = unserialize( $object->style_google_map );
95
+ $object->map_locations = unserialize( $object->map_locations );
96
+ $object->map_layer_setting = unserialize( $object->map_layer_setting );
97
+ $object->map_polygon_setting = unserialize( $object->map_polygon_setting );
98
+ $object->map_polyline_setting = unserialize( $object->map_polyline_setting );
99
+ $object->map_cluster_setting = unserialize( $object->map_cluster_setting );
100
+ $object->map_overlay_setting = unserialize( $object->map_overlay_setting );
101
+ $object->map_infowindow_setting = unserialize( $object->map_infowindow_setting );
102
+ $object->map_geotags = unserialize( $object->map_geotags );
103
+ }
104
+ return $objects;
105
+ }
106
+ }
107
+ /**
108
+ * Add or Edit Operation.
109
+ */
110
+ function save() {
111
+
112
+ $data = array();
113
+ $entityID = '';
114
+
115
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
116
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); }
117
+
118
+ if ( isset( $nonce ) and ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
119
+
120
+ die( 'Cheating...' );
121
+
122
+ }
123
+
124
+ $this->verify( $_POST );
125
+
126
+ if ( is_array( $this->errors ) and ! empty( $this->errors ) ) {
127
+ $this->throw_errors();
128
+ }
129
+
130
+ if ( isset( $_POST['entityID'] ) ) {
131
+ $entityID = intval( wp_unslash( $_POST['entityID'] ) );
132
+ }
133
+
134
+ if ( '' != sanitize_text_field( $_POST['map_locations'] ) ) {
135
+ $map_locations = explode( ',', sanitize_text_field( $_POST['map_locations'] ) );
136
+ } else { $map_locations = array(); }
137
+
138
+ $data['map_title'] = sanitize_text_field( wp_unslash( $_POST['map_title'] ) );
139
+ $data['map_width'] = str_replace( 'px','',sanitize_text_field( wp_unslash( $_POST['map_width'] ) ) );
140
+ $data['map_height'] = str_replace( 'px','',sanitize_text_field( wp_unslash( $_POST['map_height'] ) ) );
141
+ $data['map_zoom_level'] = intval( wp_unslash( $_POST['map_zoom_level'] ) );
142
+ $data['map_type'] = sanitize_text_field( wp_unslash( $_POST['map_type'] ) );
143
+ $data['map_scrolling_wheel'] = sanitize_text_field( wp_unslash( $_POST['map_scrolling_wheel'] ) );
144
+ $data['map_45imagery'] = sanitize_text_field( wp_unslash( $_POST['map_45imagery'] ) );
145
+ $data['map_street_view_setting'] = serialize( wp_unslash( $_POST['map_street_view_setting'] ) );
146
+ $data['map_route_direction_setting'] = serialize( wp_unslash( $_POST['map_route_direction_setting'] ) );
147
+ $data['map_all_control'] = serialize( wp_unslash( $_POST['map_all_control'] ) );
148
+ $data['map_info_window_setting'] = serialize( wp_unslash( $_POST['map_info_window_setting'] ) );
149
+ $data['style_google_map'] = serialize( wp_unslash( $_POST['style_google_map'] ) );
150
+ $data['map_locations'] = serialize( wp_unslash( $map_locations ) );
151
+ $data['map_layer_setting'] = serialize( wp_unslash( $_POST['map_layer_setting'] ) );
152
+ $data['map_polygon_setting'] = serialize( wp_unslash( $_POST['map_polygon_setting'] ) );
153
+ $data['map_polyline_setting'] = serialize( wp_unslash( $_POST['map_polyline_setting'] ) );
154
+ $data['map_cluster_setting'] = serialize( wp_unslash( $_POST['map_cluster_setting'] ) );
155
+ $data['map_overlay_setting'] = serialize( wp_unslash( $_POST['map_overlay_setting'] ) );
156
+ $data['map_infowindow_setting'] = serialize( wp_unslash( $_POST['map_infowindow_setting'] ) );
157
+ $data['map_geotags'] = serialize( wp_unslash( $_POST['map_geotags'] ) );
158
+
159
+ if ( $entityID > 0 ) {
160
+ $where[ $this->unique ] = $entityID;
161
+ } else {
162
+ $where = '';
163
+ }
164
+
165
+ $result = WPGMP_Database::insert_or_update( $this->table, $data, $where );
166
+ if ( false === $result ) {
167
+ $response['error'] = __( 'Something went wrong. Please try again.',WPGMP_TEXT_DOMAIN );
168
+ } elseif ( $entityID > 0 ) {
169
+ $response['success'] = __( 'Map updated successfully',WPGMP_TEXT_DOMAIN );
170
+ } else {
171
+ $response['success'] = __( 'Map added successfully.',WPGMP_TEXT_DOMAIN );
172
+ }
173
+ return $response;
174
+ }
175
+ /**
176
+ * Delete map object by id.
177
+ */
178
+ function delete() {
179
+ if ( isset( $_GET['map_id'] ) ) {
180
+ $id = intval( wp_unslash( $_GET['map_id'] ) );
181
+ $connection = WPGMP_Database::connect();
182
+ $this->query = $connection->prepare( "DELETE FROM $this->table WHERE $this->unique='%d'", $id );
183
+ return WPGMP_Database::non_query( $this->query, $connection );
184
+ }
185
+ }
186
+ /**
187
+ * Clone map object by id.
188
+ */
189
+ function copy($map_id) {
190
+ if ( isset( $map_id ) ) {
191
+ $id = intval( wp_unslash( $map_id ) );
192
+ $map = $this->get( $this->table,array( array( 'map_id', '=', $id ) ) );
193
+ $data = array();
194
+ foreach ( $map[0] as $column => $value ) {
195
+
196
+ if ( $column == 'map_id' ) {
197
+ continue; } else if ( $column == 'map_title' ) {
198
+ $data[$column] = $value.' '.__( 'Copy',WPGMP_TEXT_DOMAIN );
199
+ } else { $data[$column] = $value; }
200
+ }
201
+
202
+ $result = WPGMP_Database::insert_or_update( $this->table, $data );
203
+ }
204
+ }
205
+
206
+ }
207
+ }
modules/map/views/form.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for Add & Edit Map
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @package Maps
6
+ */
7
+
8
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
9
+
10
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) );
11
+
12
+ if ( ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
13
+
14
+ die( 'Cheating...' );
15
+
16
+ } else {
17
+ $data = $_POST;
18
+ }
19
+ }
20
+ global $wpdb;
21
+ $modelFactory = new FactoryModelWPGMP();
22
+ $map_obj = $modelFactory->create_object( 'map' );
23
+ if ( isset( $_GET['doaction'] ) and 'edit' == $_GET['doaction'] and isset( $_GET['map_id'] ) ) {
24
+ $map_obj = $map_obj->fetch( array( array( 'map_id', '=', intval( wp_unslash( $_GET['map_id'] ) ) ) ) );
25
+ $data = (array) $map_obj[0];
26
+ } elseif ( ! isset( $_GET['doaction'] ) and isset( $response['success'] ) ) {
27
+ // Reset $_POST object for antoher entry.
28
+ unset( $data );
29
+ }
30
+
31
+ $form = new Responsive_Markup();
32
+ $form->set_header( __( 'Map Information', WPGMP_TEXT_DOMAIN ), $response, __( 'Manage Maps', WPGMP_TEXT_DOMAIN ), 'wpgmp_manage_map' );
33
+ include( 'map-forms/general-setting-form.php' );
34
+ include( 'map-forms/map-center-settings.php' );
35
+ include( 'map-forms/locations-form.php' );
36
+ include( 'map-forms/control-setting-form.php' );
37
+ include( 'map-forms/control-position-style-form.php' );
38
+ include( 'map-forms/street-view-setting-form.php' );
39
+ include( 'map-forms/layers-form.php' );
40
+ $form->add_element( 'submit', 'save_entity_data', array(
41
+ 'value' => __( 'Save Map',WPGMP_TEXT_DOMAIN ),
42
+ ));
43
+ $form->add_element( 'hidden', 'operation', array(
44
+ 'value' => 'save',
45
+ ));
46
+ $form->add_element( 'hidden', 'map_locations', array(
47
+ 'value' => '',
48
+ ));
49
+ if ( isset( $_GET['doaction'] ) and 'edit' == $_GET['doaction'] and isset( $_GET['map_id'] ) ) {
50
+
51
+ $form->add_element( 'hidden', 'entityID', array(
52
+ 'value' => intval( wp_unslash( $_GET['map_id'] ) ),
53
+ ));
54
+ }
55
+ $form->render();
modules/map/views/manage.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Manage Maps
4
+ * @package Maps
5
+ */
6
+
7
+ if ( class_exists( 'WP_List_Table_Helper' ) and ! class_exists( 'Wpgmp_Maps_Table' ) ) {
8
+
9
+ /**
10
+ * Display maps manager.
11
+ */
12
+ class Wpgmp_Maps_Table extends WP_List_Table_Helper {
13
+ /**
14
+ * Intialize manage category table.
15
+ * @param array $tableinfo Table's properties.
16
+ */
17
+ public function __construct($tableinfo) {
18
+ parent::__construct( $tableinfo ); }
19
+ /**
20
+ * Output for Shortcode column.
21
+ * @param array $item Map Row.
22
+ */
23
+ public function column_shortcodes($item) {
24
+ echo '[put_wpgm id='.$item->map_id.']'; }
25
+ /**
26
+ * Clone of the map.
27
+ * @param integer $item Map ID.
28
+ */
29
+ public function copy() {
30
+ $map_id = intval( $_GET['map_id'] );
31
+ $modelFactory = new FactoryModelWPGMP();
32
+ $map_obj = $modelFactory->create_object( 'map' );
33
+ $map = $map_obj->copy( $map_id );
34
+ $this->prepare_items();
35
+ $this->listing();
36
+ }
37
+
38
+ }
39
+
40
+ global $wpdb;
41
+ $columns = array(
42
+ 'map_title' => 'Title',
43
+ 'map_width' => 'Map Width',
44
+ 'map_height' => 'Map Height',
45
+ 'map_zoom_level' => 'Map Zoom Level',
46
+ 'map_type' => 'Map Type',
47
+ 'shortcodes' => 'Shortcodes',
48
+ );
49
+ $sortable = array( 'map_title','map_width','map_height','map_zoom_level','map_type' );
50
+ $tableinfo = array(
51
+ 'table' => $wpdb->prefix.'create_map',
52
+ 'textdomain' => WPGMP_TEXT_DOMAIN,
53
+ 'singular_label' => 'map',
54
+ 'plural_label' => 'maps',
55
+ 'admin_listing_page_name' => 'wpgmp_manage_map',
56
+ 'admin_add_page_name' => 'wpgmp_form_map',
57
+ 'primary_col' => 'map_id',
58
+ 'columns' => $columns,
59
+ 'sortable' => $sortable,
60
+ 'per_page' => 20,
61
+ 'actions' => array( 'edit','delete','copy' ),
62
+ 'col_showing_links' => 'map_title',
63
+ 'searchExclude' => array( 'shortcodes' ),
64
+ 'editrecord_filepath' => WPGMP_VIEWS_PATH.'/map/add_or_edit.php',
65
+ );
66
+ $obj = new Wpgmp_Maps_Table( $tableinfo );
67
+ }
modules/map/views/map-forms/control-position-style-form.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Contro Positioning over google maps.
4
+ * @package Maps
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ */
7
+
8
+ $positions = array(
9
+ 'TOP_LEFT' => 'Top Left',
10
+ 'TOP_RIGHT' => 'Top Right',
11
+ 'LEFT_TOP' => 'Left Top',
12
+ 'RIGHT_TOP' => 'Right Top',
13
+ 'TOP_CENTER' => 'Top Center',
14
+ 'LEFT_CENTER' => 'Left Center',
15
+ 'RIGHT_CENTER' => 'Right Center',
16
+ 'BOTTOM_RIGHT' => 'Bottom Right',
17
+ 'LEFT_BOTTOM' => 'Left Bottom',
18
+ 'RIGHT_BOTTOM' => 'Right Bottom',
19
+ 'BOTTOM_CENTER' => 'Bottom Center',
20
+ 'BOTTOM_LEFT' => 'Bottom Left',
21
+ 'BOTTOM_RIGHT' => 'Bottom Right',
22
+ );
23
+ $form->add_element( 'group', 'map_control_position_setting', array(
24
+ 'value' => __( 'Control Position(s) Settings', WPGMP_TEXT_DOMAIN ),
25
+ 'before' => '<div class="col-md-12">',
26
+ 'after' => '</div>',
27
+ ));
28
+ $form->add_element( 'select', 'map_all_control[pan_control_position]', array(
29
+ 'lable' => __( 'Pan Control', WPGMP_TEXT_DOMAIN ),
30
+ 'current' => $data['map_all_control']['pan_control_position'],
31
+ 'desc' => __( 'Please select position of pan control.', WPGMP_TEXT_DOMAIN ),
32
+ 'options' => $positions,
33
+ ));
34
+ $form->add_element( 'select', 'map_all_control[zoom_control_position]', array(
35
+ 'lable' => __( 'Zoom Control', WPGMP_TEXT_DOMAIN ),
36
+ 'current' => $data['map_all_control']['zoom_control_position'],
37
+ 'desc' => __( 'Please select position of zoom control.', WPGMP_TEXT_DOMAIN ),
38
+ 'options' => $positions,
39
+ ));
40
+ $zoom_control_style = array( 'LARGE' => 'Large','SMALL' => 'Small' );
41
+ $form->add_element( 'select', 'map_all_control[zoom_control_style]', array(
42
+ 'lable' => __( 'Zoom Control Style', WPGMP_TEXT_DOMAIN ),
43
+ 'current' => $data['map_all_control']['zoom_control_style'],
44
+ 'desc' => __( 'Please select style of zoom control.', WPGMP_TEXT_DOMAIN ),
45
+ 'options' => $zoom_control_style,
46
+ ));
47
+
48
+ $form->add_element( 'select', 'map_all_control[map_type_control_position]', array(
49
+ 'lable' => __( 'Map Type Control', WPGMP_TEXT_DOMAIN ),
50
+ 'default_value' => 'TOP_RIGHT',
51
+ 'current' => $data['map_all_control']['map_type_control_position'],
52
+ 'desc' => __( 'Please select position of map type control.', WPGMP_TEXT_DOMAIN ),
53
+ 'options' => $positions,
54
+ ));
55
+
56
+ $map_type_control_style = array( 'HORIZONTAL_BAR' => 'Horizontal Bar', 'DROPDOWN_MENU' => 'Dropdown Menu' );
57
+ $form->add_element( 'select', 'map_all_control[map_type_control_style]', array(
58
+ 'lable' => __( 'Map Type Control Style', WPGMP_TEXT_DOMAIN ),
59
+ 'current' => $data['map_all_control']['map_type_control_style'],
60
+ 'desc' => __( 'Please select style of map type control.', WPGMP_TEXT_DOMAIN ),
61
+ 'options' => $map_type_control_style,
62
+ ));
63
+
64
+ $form->add_element( 'select', 'map_all_control[street_view_control_position]', array(
65
+ 'lable' => __( 'Street View Control', WPGMP_TEXT_DOMAIN ),
66
+ 'current' => $data['map_all_control']['street_view_control_position'],
67
+ 'desc' => __( 'Please select position of street view control.', WPGMP_TEXT_DOMAIN ),
68
+ 'options' => $positions,
69
+ ));
70
+
modules/map/views/map-forms/control-setting-form.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Control Setting(s).
4
+ * @package Maps
5
+ */
6
+
7
+ $form->add_element( 'group', 'map_control_setting', array(
8
+ 'value' => __( 'Control Setting', WPGMP_TEXT_DOMAIN ),
9
+ 'before' => '<div class="col-md-12">',
10
+ 'after' => '</div>',
11
+ ));
12
+ $form->add_element( 'checkbox', 'map_all_control[pan_control]', array(
13
+ 'lable' => __( 'Turn Off Pan Control', WPGMP_TEXT_DOMAIN ),
14
+ 'value' => 'false',
15
+ 'id' => 'wpgmp_pan_control',
16
+ 'current' => $data['map_all_control']['pan_control'],
17
+ 'desc' => __( 'Please check to disable pan control.', WPGMP_TEXT_DOMAIN ),
18
+ 'class' => 'chkbox_class',
19
+ ));
20
+ $form->add_element( 'checkbox', 'map_all_control[zoom_control]', array(
21
+ 'lable' => __( 'Turn Off Zoom Control', WPGMP_TEXT_DOMAIN ),
22
+ 'value' => 'false',
23
+ 'id' => 'wpgmp_zoom_control',
24
+ 'current' => $data['map_all_control']['zoom_control'],
25
+ 'desc' => __( 'Please check to disable zoom control.', WPGMP_TEXT_DOMAIN ),
26
+ 'class' => 'chkbox_class',
27
+ ));
28
+ $form->add_element( 'checkbox', 'map_all_control[map_type_control]', array(
29
+ 'lable' => __( 'Turn Off Map Type Control', WPGMP_TEXT_DOMAIN ),
30
+ 'value' => 'false',
31
+ 'id' => 'map_type_control',
32
+ 'current' => $data['map_all_control']['map_type_control'],
33
+ 'desc' => __( 'Please check to disable map type control.', WPGMP_TEXT_DOMAIN ),
34
+ 'class' => 'chkbox_class',
35
+ ));
36
+ $form->add_element( 'checkbox', 'map_all_control[scale_control]', array(
37
+ 'lable' => __( 'Turn Off Scale Control', WPGMP_TEXT_DOMAIN ),
38
+ 'value' => 'false',
39
+ 'id' => 'scale_control',
40
+ 'current' => $data['map_all_control']['scale_control'],
41
+ 'desc' => __( 'Please check to disable scale control.', WPGMP_TEXT_DOMAIN ),
42
+ 'class' => 'chkbox_class',
43
+ ));
44
+ $form->add_element( 'checkbox', 'map_all_control[street_view_control]', array(
45
+ 'lable' => __( 'Turn Off Street View Control', WPGMP_TEXT_DOMAIN ),
46
+ 'value' => 'false',
47
+ 'id' => 'wpgmp_street_view_control',
48
+ 'current' => $data['map_all_control']['street_view_control'],
49
+ 'desc' => __( 'Please check to disable street view control.', WPGMP_TEXT_DOMAIN ),
50
+ 'class' => 'chkbox_class',
51
+ ));
52
+ $form->add_element( 'checkbox', 'map_all_control[overview_map_control]', array(
53
+ 'lable' => __( 'Turn Off Overview Map Control', WPGMP_TEXT_DOMAIN ),
54
+ 'value' => 'false',
55
+ 'id' => 'overview_map_control',
56
+ 'current' => $data['map_all_control']['overview_map_control'],
57
+ 'desc' => __( 'Please check to disable overview map control.', WPGMP_TEXT_DOMAIN ),
58
+ 'class' => 'chkbox_class',
59
+ ));
modules/map/views/map-forms/general-setting-form.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Map's general setting(s).
4
+ * @package Maps
5
+ */
6
+
7
+
8
+ $form->add_element( 'text', 'map_title', array(
9
+ 'lable' => __( 'Map Title', WPGMP_TEXT_DOMAIN ),
10
+ 'value' => $data['map_title'],
11
+ 'desc' => __( 'Enter here the map title.', WPGMP_TEXT_DOMAIN ),
12
+ 'required' => true,
13
+ 'placeholder' => '',
14
+ ));
15
+ $form->add_element( 'text', 'map_width', array(
16
+ 'lable' => __( 'Map Width', WPGMP_TEXT_DOMAIN ),
17
+ 'value' => $data['map_width'],
18
+ 'desc' => __( 'Enter here the map width in pixel. Leave it blank for 100% width.', WPGMP_TEXT_DOMAIN ),
19
+ 'placeholder' => '',
20
+ ));
21
+ $form->add_element( 'text', 'map_height', array(
22
+ 'lable' => __( 'Map Height', WPGMP_TEXT_DOMAIN ),
23
+ 'value' => $data['map_height'],
24
+ 'desc' => __( 'Enter here the map height in pixel.', WPGMP_TEXT_DOMAIN ),
25
+ 'required' => true,
26
+ 'placeholder' => '',
27
+ ));
28
+ $language = array(
29
+ 'en' => 'ENGLISH',
30
+ 'ar' => 'ARABIC',
31
+ 'eu' => 'BASQUE',
32
+ 'bg' => 'BULGARIAN',
33
+ 'bn' => 'BENGALI',
34
+ 'ca' => 'CATALAN',
35
+ 'cs' => 'CZECH',
36
+ 'da' => 'DANISH',
37
+ 'de' => 'GERMAN',
38
+ 'el' => 'GREEK',
39
+ 'en-AU' => 'ENGLISH (AUSTRALIAN)',
40
+ 'en-GB' => 'ENGLISH (GREAT BRITAIN)',
41
+ 'es' => 'SPANISH',
42
+ 'fa' => 'FARSI',
43
+ 'fi' => 'FINNISH',
44
+ 'fil' => 'FILIPINO',
45
+ 'fr' => 'FRENCH',
46
+ 'gl' => 'GALICIAN',
47
+ 'gu' => 'GUJARATI',
48
+ 'hi' => 'HINDI',
49
+ 'hr' => 'CROATIAN',
50
+ 'hu' => 'HUNGARIAN',
51
+ 'id' => 'INDONESIAN',
52
+ 'it' => 'ITALIAN',
53
+ 'iw' => 'HEBREW',
54
+ 'ja' => 'JAPANESE',
55
+ 'kn' => 'KANNADA',
56
+ 'ko' => 'KOREAN',
57
+ 'lt' => 'LITHUANIAN',
58
+ 'lv' => 'LATVIAN',
59
+ 'ml' => 'MALAYALAM',
60
+ 'mr' => 'MARATHI',
61
+ 'nl' => 'DUTCH',
62
+ 'no' => 'NORWEGIAN',
63
+ 'pl' => 'POLISH',
64
+ 'pt' => 'PORTUGUESE',
65
+ 'pt-BR' => 'PORTUGUESE (BRAZIL)',
66
+ 'pt-PT' => 'PORTUGUESE (PORTUGAL)',
67
+ 'ro' => 'ROMANIAN',
68
+ 'ru' => 'RUSSIAN',
69
+ 'sk' => 'SLOVAK',
70
+ 'sl' => 'SLOVENIAN',
71
+ 'sr' => 'SERBIAN',
72
+ 'sv' => 'SWEDISH',
73
+ 'tl' => 'TAGALOG',
74
+ 'ta' => 'TAMIL',
75
+ 'te' => 'TELUGU',
76
+ 'th' => 'THAI',
77
+ 'tr' => 'TURKISH',
78
+ 'uk' => 'UKRAINIAN',
79
+ 'vi' => 'VIETNAMESE',
80
+ 'zh-CN' => 'CHINESE (SIMPLIFIED)',
81
+ 'zh-TW' => 'CHINESE (TRADITIONAL)',
82
+ );
83
+ /*
84
+ $form->add_element( 'select', 'map_all_control[wpgmp_language]', array(
85
+ 'lable' => __( 'Map Language', WPGMP_TEXT_DOMAIN ),
86
+ 'current' => $data['map_all_control']['wpgmp_language'],
87
+ 'desc' => __( 'Choose your language for map. Default is English.', WPGMP_TEXT_DOMAIN ),
88
+ 'options' => $language,$currentLanguage,
89
+ ));
90
+ */
91
+ $zoom_level = array();
92
+ for ( $i = 1; $i < 20; $i++ ) {
93
+ $zoom_level[ $i ] = $i;
94
+ }
95
+ $form->add_element( 'select', 'map_zoom_level', array(
96
+ 'lable' => __( 'Map Zoom Level', WPGMP_TEXT_DOMAIN ),
97
+ 'current' => $data['map_zoom_level'],
98
+ 'desc' => __( 'Available options 1 to 19.', WPGMP_TEXT_DOMAIN ),
99
+ 'options' => $zoom_level,
100
+ ));
101
+ $map_type = array( 'ROADMAP' => 'ROADMAP','SATELLITE' => 'SATELLITE','HYBRID' => 'HYBRID','TERRAIN' => 'TERRAIN' );
102
+ $form->add_element( 'select', 'map_type', array(
103
+ 'lable' => __( 'Map Type', WPGMP_TEXT_DOMAIN ),
104
+ 'current' => $data['map_type'],
105
+ 'desc' => __( 'Available options 1 to 19.', WPGMP_TEXT_DOMAIN ),
106
+ 'options' => $map_type,
107
+ ));
108
+
109
+ $form->add_element( 'checkbox', 'map_scrolling_wheel', array(
110
+ 'lable' => __( 'Turn Off Scrolling Wheel', WPGMP_TEXT_DOMAIN ),
111
+ 'value' => 'false',
112
+ 'id' => 'wpgmp_map_scrolling_wheel',
113
+ 'current' => $data['map_scrolling_wheel'],
114
+ 'desc' => __( 'Please check to disable scroll wheel zoom.', WPGMP_TEXT_DOMAIN ),
115
+ 'class' => 'chkbox_class ',
116
+ ));
117
+ $form->add_element( 'checkbox', 'map_all_control[map_draggable]', array(
118
+ 'lable' => __( 'Map Draggable', WPGMP_TEXT_DOMAIN ),
119
+ 'value' => 'false',
120
+ 'id' => 'wpgmp_map_draggable',
121
+ 'current' => $data['map_all_control']['map_draggable'],
122
+ 'desc' => __( 'Please check to disable map draggable.', WPGMP_TEXT_DOMAIN ),
123
+ 'class' => 'chkbox_class',
124
+ ));
125
+
126
+ $form->add_element( 'checkbox', 'map_45imagery', array(
127
+ 'lable' => __( '45&deg; Imagery', WPGMP_TEXT_DOMAIN ),
128
+ 'value' => '45',
129
+ 'id' => 'wpgmp_map_45imagery',
130
+ 'current' => $data['map_45imagery'],
131
+ 'desc' => __( 'Apply 45&deg; Imagery ? (only available for map type SATELLITE and HYBRID).', WPGMP_TEXT_DOMAIN ),
132
+ 'class' => 'chkbox_class',
133
+ ));
134
+
modules/map/views/map-forms/layers-form.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Contro Positioning over google maps.
4
+ * @package Maps
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ */
7
+
8
+ $form->add_element( 'group', 'map_control_layers', array(
9
+ 'value' => __( 'Layers Settings', WPGMP_TEXT_DOMAIN ),
10
+ 'before' => '<div class="col-md-12">',
11
+ 'after' => '</div>',
12
+ ));
13
+ $form->add_element( 'group', 'map_control_layers', array(
14
+ 'value' => __( 'Layers Settings', WPGMP_TEXT_DOMAIN ),
15
+ 'before' => '<div class="col-md-12">',
16
+ 'after' => '</div>',
17
+ ));
18
+
19
+
20
+
21
+ $form->add_element( 'checkbox', 'map_layer_setting[choose_layer][traffic_layer]', array(
22
+ 'lable' => __( 'Traffic Layer', WPGMP_TEXT_DOMAIN ),
23
+ 'value' => 'TrafficLayer',
24
+ 'id' => 'wpgmp_traffic_layer',
25
+ 'current' => $data['map_layer_setting']['choose_layer']['traffic_layer'],
26
+ 'desc' => __( 'Please check to enable traffic Layer.', WPGMP_TEXT_DOMAIN ),
27
+ 'class' => 'chkbox_class',
28
+ ));
29
+
30
+ $form->add_element( 'checkbox', 'map_layer_setting[choose_layer][transit_layer]', array(
31
+ 'lable' => __( 'Transit Layer', WPGMP_TEXT_DOMAIN ),
32
+ 'value' => 'TransitLayer',
33
+ 'id' => 'wpgmp_transit_layer',
34
+ 'current' => $data['map_layer_setting']['choose_layer']['transit_layer'],
35
+ 'desc' => __( 'Please check to enable Transit Layer.', WPGMP_TEXT_DOMAIN ),
36
+ 'class' => 'chkbox_class',
37
+ ));
38
+
39
+
40
+ $form->add_element( 'checkbox', 'map_layer_setting[choose_layer][bicycling_layer]', array(
41
+ 'lable' => __( 'Bicycling Layer', WPGMP_TEXT_DOMAIN ),
42
+ 'value' => 'BicyclingLayer',
43
+ 'id' => 'wpgmp_bicycling_layer',
44
+ 'current' => $data['map_layer_setting']['choose_layer']['bicycling_layer'],
45
+ 'desc' => __( 'Please check to enable Bicycling Layer.', WPGMP_TEXT_DOMAIN ),
46
+ 'class' => 'chkbox_class',
47
+ ));
modules/map/views/map-forms/locations-form.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Location listings for maps.
4
+ * @package Maps
5
+ */
6
+
7
+ global $wpdb;
8
+ $modelFactory = new FactoryModelWPGMP();
9
+ $category = $modelFactory->create_object( 'group_map' );
10
+ $location = $modelFactory->create_object( 'location' );
11
+ $locations = $location->fetch();
12
+ $categories = $category->fetch();
13
+ if ( ! empty( $categories ) ) {
14
+ $categories_data = array();
15
+ foreach ( $categories as $cat ) {
16
+ $categories_data[ $cat->group_map_id ] = $cat->group_map_title;
17
+ }
18
+ }
19
+ if ( ! empty( $locations ) ) {
20
+ $all_locations = array();
21
+ foreach ( $locations as $loc ) {
22
+ $assigned_categories = array();
23
+ if ( isset( $loc->location_group_map ) and is_array( $loc->location_group_map ) ) {
24
+ foreach ( $loc->location_group_map as $c => $cat ) {
25
+ $assigned_categories[] = $categories_data[ $cat ];
26
+ }
27
+ }
28
+ $assigned_categories = implode( ',',$assigned_categories );
29
+ $loc_checkbox = $form->field_checkbox('map_locations[]',array(
30
+ 'value' => $loc->location_id,
31
+ 'current' => ((in_array( $loc->location_id, (array) $data['map_locations'] )) ? $loc->location_id : ''),
32
+ 'class' => 'chkbox_class',
33
+ 'before' => '<div class="col-md-1">',
34
+ 'after' => '</div>',
35
+ ));
36
+ $all_locations[] = array( $loc_checkbox,$loc->location_title,$loc->location_address, $assigned_categories );
37
+ }
38
+ }
39
+
40
+ $table_group = $form->field_html('map_location_listing',array(
41
+ 'html' => "<h4>".__( 'Choose Locations', WPGMP_TEXT_DOMAIN )."</h4>"
42
+ ));
43
+
44
+ $table_group .= $form->field_select('select_all',array(
45
+ 'options' => array(
46
+ '' => __('Choose',WPGMP_TEXT_DOMAIN),
47
+ 'select_all' => __('Select All',WPGMP_TEXT_DOMAIN),
48
+ 'deselect_all' => __('Deselect All',WPGMP_TEXT_DOMAIN)
49
+ ),
50
+ 'class' => 'col-md-2'
51
+ ));
52
+
53
+ $form->add_element('html','map_location_listing_div',array(
54
+ 'html' =>$table_group,
55
+ 'before' => '<div class="col-md-12 wpgmp_location_selection alert alert-info">',
56
+ 'after' => '</div>',
57
+ ));
58
+
59
+ $form->add_element( 'table', 'map_selected_locations', array(
60
+ 'heading' => array( 'Select','Title','Address', 'Category' ),
61
+ 'data' => $all_locations,
62
+ 'before' => '<div class="col-md-12">',
63
+ 'after' => '</div>',
64
+ 'id' => 'wpgmp_google_map_data_table',
65
+ 'current' => $data['map_locations'],
66
+ ));
modules/map/views/map-forms/map-center-settings.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Map's Center Location setting(s).
4
+ * @package Maps
5
+ */
6
+
7
+ $form->add_element( 'group', 'map_center_setting', array(
8
+ 'value' => __( 'Map\'s Center', WPGMP_TEXT_DOMAIN ),
9
+ 'before' => '<div class="col-md-12">',
10
+ 'after' => '</div>',
11
+ ));
12
+
13
+ $form->add_element( 'text', 'map_all_control[map_center_latitude]', array(
14
+ 'lable' => __( 'Center Latitude', WPGMP_TEXT_DOMAIN ),
15
+ 'value' => $data['map_all_control']['map_center_latitude'],
16
+ 'desc' => __( 'Enter here the center latitude.', WPGMP_TEXT_DOMAIN ),
17
+ 'placeholder' => '',
18
+ ));
19
+ $form->add_element( 'text', 'map_all_control[map_center_longitude]', array(
20
+ 'lable' => __( 'Center Longitude', WPGMP_TEXT_DOMAIN ),
21
+ 'value' => $data['map_all_control']['map_center_longitude'],
22
+ 'desc' => __( 'Enter here the center longitude.', WPGMP_TEXT_DOMAIN ),
23
+ 'placeholder' => '',
24
+ ));
25
+
26
+
modules/map/views/map-forms/street-view-setting-form.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Contro Positioning over google maps.
4
+ * @package Maps
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ */
7
+
8
+ $form->add_element( 'group', 'map_street_view_setting', array(
9
+ 'value' => __( 'Street View Settings', WPGMP_TEXT_DOMAIN ),
10
+ 'before' => '<div class="col-md-12">',
11
+ 'after' => '</div>',
12
+ ));
13
+
14
+ $form->add_element( 'checkbox', 'map_street_view_setting[street_control]', array(
15
+ 'lable' => __( 'Turn On Street View', WPGMP_TEXT_DOMAIN ),
16
+ 'value' => 'true',
17
+ 'id' => 'wpgmp_street_control',
18
+ 'current' => $data['map_street_view_setting']['street_control'],
19
+ 'desc' => __( 'Please check to enable Street View control.', WPGMP_TEXT_DOMAIN ),
20
+ 'class' => 'chkbox_class switch_onoff',
21
+ 'data' => array( 'target' => '.street_view_setting' ),
22
+ ));
23
+
24
+ $form->add_element( 'checkbox', 'map_street_view_setting[street_view_close_button]', array(
25
+ 'lable' => __( 'Turn On Close Button.', WPGMP_TEXT_DOMAIN ),
26
+ 'value' => 'true',
27
+ 'id' => 'wpgmp_street_view_close_button',
28
+ 'current' => $data['map_street_view_setting']['street_view_close_button'],
29
+ 'desc' => __( 'Please check to enable Street View control.', WPGMP_TEXT_DOMAIN ),
30
+ 'data' => array( 'target' => '#geo_tags_table,#geo_tags_message' ),
31
+ 'class' => 'street_view_setting',
32
+ 'show' => 'false',
33
+ ));
34
+
35
+ $form->add_element( 'checkbox', 'map_street_view_setting[links_control]', array(
36
+ 'lable' => __( 'Turn Off links Control.', WPGMP_TEXT_DOMAIN ),
37
+ 'value' => 'false',
38
+ 'id' => 'wpgmp_links_control',
39
+ 'current' => $data['map_street_view_setting']['links_control'],
40
+ 'desc' => __( 'Please check to disable links control.', WPGMP_TEXT_DOMAIN ),
41
+ 'data' => array( 'target' => '#geo_tags_table,#geo_tags_message' ),
42
+ 'class' => 'street_view_setting',
43
+ 'show' => 'false',
44
+ ));
45
+
46
+ $form->add_element( 'checkbox', 'map_street_view_setting[street_view_pan_control]', array(
47
+ 'lable' => __( 'Turn Off links Control.', WPGMP_TEXT_DOMAIN ),
48
+ 'value' => 'false',
49
+ 'id' => 'wpgmp_street_view_pan_control',
50
+ 'current' => $data['map_street_view_setting']['street_view_pan_control'],
51
+ 'desc' => __( 'Please check to disable Street View Pan control.', WPGMP_TEXT_DOMAIN ),
52
+ 'data' => array( 'target' => '#geo_tags_table,#geo_tags_message' ),
53
+ 'class' => 'street_view_setting',
54
+ 'show' => 'false',
55
+ ));
56
+
57
+ $form->add_element( 'text', 'map_street_view_setting[pov_heading]', array(
58
+ 'lable' => __( 'POV Heading', WPGMP_TEXT_DOMAIN ),
59
+ 'value' => $data['map_street_view_setting']['pov_heading'],
60
+ 'id' => 'pov_heading',
61
+ 'desc' => __( 'Please enter POV heading.', WPGMP_TEXT_DOMAIN ),
62
+ 'class' => 'form-control street_view_setting',
63
+ 'show' => 'false',
64
+ ));
65
+
66
+ $form->add_element( 'text', 'map_street_view_setting[pov_heading]', array(
67
+ 'lable' => __( 'POV Heading', WPGMP_TEXT_DOMAIN ),
68
+ 'value' => $data['map_street_view_setting']['pov_heading'],
69
+ 'id' => 'pov_heading',
70
+ 'desc' => __( 'Please enter POV heading.', WPGMP_TEXT_DOMAIN ),
71
+ 'class' => 'form-control street_view_setting',
72
+ 'show' => 'false',
73
+ ));
74
+
75
+
76
+ $form->add_element( 'text', 'map_street_view_setting[pov_pitch]', array(
77
+ 'lable' => __( 'POV Pitch', WPGMP_TEXT_DOMAIN ),
78
+ 'value' => $data['map_street_view_setting']['pov_pitch'],
79
+ 'id' => 'pov_heading',
80
+ 'desc' => __( 'Please enter POV Pitch.', WPGMP_TEXT_DOMAIN ),
81
+ 'class' => 'form-control street_view_setting',
82
+ 'show' => 'false',
83
+ ));
modules/overview/model.overview.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class: WPGMP_Model_Overview
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @version 3.0.0
6
+ * @package Maps
7
+ */
8
+
9
+ if ( ! class_exists( 'WPGMP_Model_Overview' ) ) {
10
+
11
+ /**
12
+ * Overview model for Plugin Overview.
13
+ * @package Maps
14
+ * @author Flipper Code <hello@flippercode.com>
15
+ */
16
+ class WPGMP_Model_Overview extends WPGMP_Model_Base {
17
+ /**
18
+ * Intialize Backup object.
19
+ */
20
+ function __construct() {
21
+ }
22
+ /**
23
+ * Admin menu for Settings Operation
24
+ */
25
+ function navigation() {
26
+ }
27
+ }
28
+ }
modules/overview/views/view.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Overviews.
4
+ * @package Maps
5
+ * @author Flipper Code <flippercode>
6
+ **/
7
+
8
+ ?>
9
+ <div class="container">
10
+ <div class="row">
11
+ <div class="col-md-11">
12
+ <h4 class="alert alert-info"> <?php _e( 'How to Use',WPGMP_TEXT_DOMAIN ); ?> </h4>
13
+ <div class="wpgmp-overview">
14
+ <blockquote><?php _e( 'Go through the steps below to create your first map.' ); ?></blockquote>
15
+ <ol>
16
+ <li><?php
17
+ $url = admin_url( 'admin.php?page=wpgmp_form_location' );
18
+ $link = sprintf( wp_kses( __( 'Use our auto suggestion enabled location box to add your location <a href="%s">here</a>. You can add multiple locations.All those locations will be available to choose when you create your map.', 'my-text-domain' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $url ) );
19
+ echo $link;?>
20
+ </li>
21
+ <li><?php
22
+ $url = admin_url( 'admin.php?page=wpgmp_form_map' );
23
+ $link = sprintf( wp_kses( __( 'Now <a href="%s">click here</a> to create a map. You can create as many maps you want to add. Using shortcode, you can add maps on posts/pages.', WPGMP_TEXT_DOMAIN ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $url ) );
24
+ echo $link;?>
25
+ </li>
26
+ <li><?php
27
+ $url = admin_url( 'admin.php?page=wpgmp_manage_map' );
28
+ $link = sprintf( wp_kses( __( 'When done with administrative tasks, you can display map on posts/pages using. You can create as many maps you want to add. Using shortcode, you can add maps on posts/pages. Enable map in the widgets section to display in sidebar.', WPGMP_TEXT_DOMAIN ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $url ) );
29
+ echo $link;?>
30
+ </li>
31
+ </ol>
32
+ </div>
33
+ <div class="col-md-11">
34
+ <h4 class="alert alert-info"> <?php _e( 'Pro Version',WPGMP_TEXT_DOMAIN ); ?> </h4>
35
+ <div class="wpgmp-overview">
36
+ <blockquote><?php _e( 'Pro Edition Features',WPGMP_TEXT_DOMAIN ); ?> <a target="_blank" href="http://codecanyon.net/item/advanced-google-maps-plugin-for-wordpress/5211638">Download Pro Version.</a></blockquote>
37
+ <ol>
38
+ <li>Ability to display location title, location category, location latitude, location longitude with location message in the infowindow.</li>
39
+ <li>Ability to Sort listing by location, category and address alphabetically in location listing.</li>
40
+ <li>Ability to display default Start and End location in directions tab.</li>
41
+ <li>Ability to display directions results in KM and MILES.</li>
42
+ <li>Ability to google maps styles from https://snazzymaps.com.</li>
43
+ <li>Better user experience on time of Choose Locations for maps.</li>
44
+ <li>Ability to use External Database or Sources to add markers on google maps using new filter wpgmp_marker_source</li>
45
+ <li>Ability to display Featured Image or Custom fields in the infowindow for geo tags using new filter wpgmp_geotags_content</li>
46
+ <li>Display Posts/Pages or Custom Post Types on google maps.</li>
47
+ <li>Create unlimited maps and display on posts/pages using shortcode or in sidebar using widget.</li>
48
+ <li>Add unlimited locations using an easy to use interface for Google Maps.</li>
49
+ <li>Customize marker image for each location separately or group wise. Choose from +500 readymade markers or pick your own image.</li>
50
+ <li>Display your map perfectly on all devices. Create 100% responsive maps effortlessly.</li>
51
+ <li>Add any number of Google maps on pages/posts/sidebars.</li>
52
+ <li>Export/Import Features using CSV/JSON/XML or EXCEL.</li>
53
+ <li>Ajax based Location Listing.</li>
54
+ <li>Searchable Location Listing.</li>
55
+ <li>Paginated Location Listing.</li>
56
+ <li>Locating Listing Placeholder.</li>
57
+ <li>Directions & Route Suggestion</li>
58
+ <li>Nearby locations based on user’s current location.</li>
59
+ <li>Display multiple coloured routes on google maps.</li>
60
+ <li>Display traffic real time conditions and overlays using Traffic Layers.</li>
61
+ <li>Add bicycle path information to your maps using the Bicycling Layer.</li>
62
+ <li>Display physical maps based on terrain information.</li>
63
+ <li>Display photos from Panoramio as a layer to your maps using the Panoramio Layer.</li>
64
+ <li>A Cross Browser Compatible plugin. Fully tested on IE8, IE9, IE10 and all major browsers</li>
65
+ <li>Enable visual refresh on any Google Map at a button’s click.</li>
66
+ <li>No need of any Google API key. Based on API Version 3.</li>
67
+ <li>Fully Responsive. Tested on real devices.</li>
68
+ <li>Display one infowindow at a time.</li>
69
+ <li>Multi-lingual Supported.</li>
70
+ <li>Multisite Enabled and ability to activate it network wide.</li>
71
+ <li>Define overlays on Google maps via an easy to use interface</li>
72
+ <li>Design your own Google map skins easily. Turn ON/OFF roads, places, water area.</li>
73
+ <li>Enable marker clusters if you have too many locations. Just activate and the plugin will handle the rest. </li>
74
+ <li>Display polygons on Google Maps with options to customize</li>
75
+ <li>Display polylines on Google Maps with several customizable options</li>
76
+ <li>Modify existing polygons/polylines by making locations draggable</li>
77
+ <li>Define KML Layers on Google Maps</li>
78
+ <li>Apply 45 Imagery view on Google Maps</li>
79
+ <li>Fusion Table Layers</li>
80
+ <li>Awesome Shortcodes to add unlimited locations by address or latitude and longitude.</li>
81
+ <li>An innovative Quick Locations feature to add locations quickly by click.</li>
82
+ <li>Hooks Supported to modify maps,locations,listing on fly. Integrate api’s using hooks to the map.</li>
83
+ <li>Display Road Map view. This is the default map type.</li>
84
+ <li>Display Google Earth satellite images on just one click.</li>
85
+ <li>Display maps in a blend of normal and satellite views.</li>
86
+ <li>Display physical maps based on terrain information.</li>
87
+ <li>Display Google Maps on sidebars using widget.</li>
88
+ <li>Apply awesome google maps design from snazzymaps.com with just copy and paste.</li>
89
+ <li>Setup POV Heading and POV Pitch of Street View to customize Street View output of a location.</li>
90
+ <li>Integrate GEOJSON in to google maps.</li>
91
+ <li>Customize Infowindow Contents with help of Placeholders</li>
92
+ <li>Load markers from external database or API sources with help of filters (Hooks).</li>
93
+ <li>Ability to display infowindow on mouse click on mouse hover.</li>
94
+ </ol>
95
+
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
100
+ </div>
101
+
modules/settings/model.settings.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class: WPGMP_Model_Settings
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @version 3.0.0
6
+ * @package Maps
7
+ */
8
+
9
+ if ( ! class_exists( 'WPGMP_Model_Settings' ) ) {
10
+
11
+ /**
12
+ * Setting model for Plugin Options.
13
+ * @package Maps
14
+ * @author Flipper Code <hello@flippercode.com>
15
+ */
16
+ class WPGMP_Model_Settings extends WPGMP_Model_Base {
17
+ /**
18
+ * Intialize Backup object.
19
+ */
20
+ function __construct() {
21
+ }
22
+ /**
23
+ * Admin menu for Settings Operation
24
+ * @return array Admin menu navigation(s).
25
+ */
26
+ function navigation() {
27
+ return array(
28
+ 'wpgmp_manage_settings' => __( 'Settings', WPGMP_TEXT_DOMAIN ),
29
+ );
30
+ }
31
+ /**
32
+ * Add or Edit Operation.
33
+ */
34
+ function save() {
35
+
36
+ if ( isset( $_REQUEST['_wpnonce'] ) ) {
37
+ $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); }
38
+
39
+ if ( isset( $nonce ) and ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) {
40
+
41
+ die( 'Cheating...' );
42
+
43
+ }
44
+
45
+ $this->verify( $_POST );
46
+
47
+ if ( is_array( $this->errors ) and ! empty( $this->errors ) ) {
48
+ $this->throw_errors();
49
+ }
50
+
51
+ $result = update_option( 'wpgmp_api_key',sanitize_text_field( wp_unslash( $_POST['wpgmp_api_key'] ) ) );
52
+ $result = update_option( 'wpgmp_language',sanitize_text_field( wp_unslash( $_POST['wpgmp_language'] ) ) );
53
+ $response['success'] = __( 'Setting(s) saved successfully.',WPGMP_TEXT_DOMAIN );
54
+ return $response;
55
+
56
+ }
57
+ }
58
+ }
modules/settings/views/manage.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This class used to manage settings page in backend.
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @version 1.0.0
6
+ * @package Maps
7
+ */
8
+
9
+ $form = new Responsive_Markup();
10
+ $form->set_header( __( 'General Setting(s)', WPGMP_TEXT_DOMAIN ), $response );
11
+ $form->add_element('text','wpgmp_api_key',array(
12
+ 'lable' => __( 'Business API Key',WPGMP_TEXT_DOMAIN ),
13
+ 'value' => get_option( 'wpgmp_api_key' ),
14
+ 'desc' => __( 'Insert Api Key if you signup for google maps business api.', WPGMP_TEXT_DOMAIN ),
15
+ ));
16
+ $language = array(
17
+ 'en' => __( 'ENGLISH', WPGMP_TEXT_DOMAIN ),
18
+ 'ar' => __( 'ARABIC', WPGMP_TEXT_DOMAIN ),
19
+ 'eu' => __( 'BASQUE', WPGMP_TEXT_DOMAIN ),
20
+ 'bg' => __( 'BULGARIAN', WPGMP_TEXT_DOMAIN ),
21
+ 'bn' => __( 'BENGALI', WPGMP_TEXT_DOMAIN ),
22
+ 'ca' => __( 'CATALAN', WPGMP_TEXT_DOMAIN ),
23
+ 'cs' => __( 'CZECH', WPGMP_TEXT_DOMAIN ),
24
+ 'da' => __( 'DANISH', WPGMP_TEXT_DOMAIN ),
25
+ 'de' => __( 'GERMAN', WPGMP_TEXT_DOMAIN ),
26
+ 'el' => __( 'GREEK', WPGMP_TEXT_DOMAIN ),
27
+ 'en-AU' => __( 'ENGLISH (AUSTRALIAN)', WPGMP_TEXT_DOMAIN ),
28
+ 'en-GB' => __( 'ENGLISH (GREAT BRITAIN)', WPGMP_TEXT_DOMAIN ),
29
+ 'es' => __( 'SPANISH', WPGMP_TEXT_DOMAIN ),
30
+ 'fa' => __( 'FARSI', WPGMP_TEXT_DOMAIN ),
31
+ 'fi' => __( 'FINNISH', WPGMP_TEXT_DOMAIN ),
32
+ 'fil' => __( 'FILIPINO', WPGMP_TEXT_DOMAIN ),
33
+ 'fr' => __( 'FRENCH', WPGMP_TEXT_DOMAIN ),
34
+ 'gl' => __( 'GALICIAN', WPGMP_TEXT_DOMAIN ),
35
+ 'gu' => __( 'GUJARATI', WPGMP_TEXT_DOMAIN ),
36
+ 'hi' => __( 'HINDI', WPGMP_TEXT_DOMAIN ),
37
+ 'hr' => __( 'CROATIAN', WPGMP_TEXT_DOMAIN ),
38
+ 'hu' => __( 'HUNGARIAN', WPGMP_TEXT_DOMAIN ),
39
+ 'id' => __( 'INDONESIAN', WPGMP_TEXT_DOMAIN ),
40
+ 'it' => __( 'ITALIAN', WPGMP_TEXT_DOMAIN ),
41
+ 'iw' => __( 'HEBREW', WPGMP_TEXT_DOMAIN ),
42
+ 'ja' => __( 'JAPANESE', WPGMP_TEXT_DOMAIN ),
43
+ 'kn' => __( 'KANNADA', WPGMP_TEXT_DOMAIN ),
44
+ 'ko' => __( 'KOREAN', WPGMP_TEXT_DOMAIN ),
45
+ 'lt' => __( 'LITHUANIAN', WPGMP_TEXT_DOMAIN ),
46
+ 'lv' => __( 'LATVIAN', WPGMP_TEXT_DOMAIN ),
47
+ 'ml' => __( 'MALAYALAM', WPGMP_TEXT_DOMAIN ),
48
+ 'it' => __( 'ITALIAN', WPGMP_TEXT_DOMAIN ),
49
+ 'mr' => __( 'MARATHI', WPGMP_TEXT_DOMAIN ),
50
+ 'nl' => __( 'DUTCH', WPGMP_TEXT_DOMAIN ),
51
+ 'no' => __( 'NORWEGIAN', WPGMP_TEXT_DOMAIN ),
52
+ 'pl' => __( 'POLISH', WPGMP_TEXT_DOMAIN ),
53
+ 'pt' => __( 'PORTUGUESE', WPGMP_TEXT_DOMAIN ),
54
+ 'pt-BR' => __( 'PORTUGUESE (BRAZIL)', WPGMP_TEXT_DOMAIN ),
55
+ 'pt-PT' => __( 'PORTUGUESE (PORTUGAL)', WPGMP_TEXT_DOMAIN ),
56
+ 'ro' => __( 'ROMANIAN', WPGMP_TEXT_DOMAIN ),
57
+ 'ru' => __( 'RUSSIAN', WPGMP_TEXT_DOMAIN ),
58
+ 'sk' => __( 'SLOVAK', WPGMP_TEXT_DOMAIN ),
59
+ 'sl' => __( 'SLOVENIAN', WPGMP_TEXT_DOMAIN ),
60
+ 'sr' => __( 'SERBIAN', WPGMP_TEXT_DOMAIN ),
61
+ 'sv' => __( 'SWEDISH', WPGMP_TEXT_DOMAIN ),
62
+ 'tl' => __( 'TAGALOG', WPGMP_TEXT_DOMAIN ),
63
+ 'ta' => __( 'TAMIL', WPGMP_TEXT_DOMAIN ),
64
+ 'te' => __( 'TELUGU', WPGMP_TEXT_DOMAIN ),
65
+ 'th' => __( 'THAI', WPGMP_TEXT_DOMAIN ),
66
+ 'tr' => __( 'TURKISH', WPGMP_TEXT_DOMAIN ),
67
+ 'uk' => __( 'UKRAINIAN', WPGMP_TEXT_DOMAIN ),
68
+ 'vi' => __( 'VIETNAMESE', WPGMP_TEXT_DOMAIN ),
69
+ 'zh-CN' => __( 'CHINESE (SIMPLIFIED)', WPGMP_TEXT_DOMAIN ),
70
+ 'zh-TW' => __( 'CHINESE (TRADITIONAL)', WPGMP_TEXT_DOMAIN ),
71
+ );
72
+
73
+
74
+ $form->add_element( 'select', 'wpgmp_language', array(
75
+ 'lable' => __( 'Select Language', WPGMP_TEXT_DOMAIN ),
76
+ 'current' => get_option( 'wpgmp_language' ),
77
+ 'desc' => __( 'Default is English.', WPGMP_TEXT_DOMAIN ),
78
+ 'options' => $language,
79
+ ));
80
+
81
+ $form->add_element('submit','wpgmp_save_settings',array(
82
+ 'value' => __( 'Save Setting',WPGMP_TEXT_DOMAIN ),
83
+ ));
84
+ $form->add_element('hidden','operation',array(
85
+ 'value' => 'save',
86
+ ));
87
+ $form->add_element('hidden','page_options',array(
88
+ 'value' => 'wpgmp_api_key,wpgmp_language',
89
+ ));
90
+ $form->render();
modules/shortcode/model.shortcode.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class: WPGMP_Model_Shortcode
4
+ * @author Flipper Code <hello@flippercode.com>
5
+ * @version 3.0.0
6
+ * @package Maps
7
+ */
8
+
9
+ if ( ! class_exists( 'WPGMP_Model_Shortcode' ) ) {
10
+
11
+ /**
12
+ * Shortcode model to display output on frontend.
13
+ * @package Maps
14
+ * @author Flipper Code <hello@flippercode.com>
15
+ */
16
+ class WPGMP_Model_Shortcode extends WPGMP_Model_Base {
17
+ /**
18
+ * Intialize Shortcode object.
19
+ */
20
+ function __construct() {
21
+ }
22
+ /**
23
+ * Admin menu for Settings Operation
24
+ * @return array Admin menu navigation(s).
25
+ */
26
+ function navigation() {
27
+ return array();
28
+ }
29
+ }
30
+ }
modules/shortcode/views/put-wpgmp.php ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Parse Shortcode and display maps.
4
+ * @package Maps
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ */
7
+
8
+ if ( isset( $options['id'] ) ) {
9
+ $map_id = $options['id'];
10
+ } else { return ''; }
11
+
12
+ // Fetch map information.
13
+ $modelFactory = new FactoryModelWPGMP();
14
+ $map_obj = $modelFactory->create_object( 'map' );
15
+ $map_record = $map_obj->fetch( array( array( 'map_id', '=', $map_id ) ) );
16
+ $map = $map_record[0];
17
+ $category_obj = $modelFactory->create_object( 'group_map' );
18
+ $categories = $category_obj->fetch();
19
+ $all_categories = array();
20
+ $all_categories_name = array();
21
+
22
+ if ( ! empty( $categories ) ) {
23
+ foreach ( $categories as $category ) {
24
+ $all_categories[ $category->group_map_id ] = $category;
25
+ $all_categories_name[ $category->group_map_title ] = $category;
26
+ }
27
+ }
28
+ if ( ! empty( $map->map_locations ) ) {
29
+ $location_obj = $modelFactory->create_object( 'location' );
30
+ $map_locations = $location_obj->fetch( array( array( 'location_id', 'IN', implode( ',',$map->map_locations ) ) ) );
31
+ }
32
+
33
+ $map_data = array();
34
+ // Set map options.
35
+ $map_data['places'] = array();
36
+ $map_data['map_options'] = array(
37
+ 'center_lat' => sanitize_text_field( $map->map_all_control['map_center_latitude'] ),
38
+ 'center_lng' => sanitize_text_field( $map->map_all_control['map_center_longitude'] ),
39
+ 'zoom' => intval( $map->map_zoom_level ),
40
+ 'map_type_id' => sanitize_text_field( $map->map_type ),
41
+ 'draggable' => (sanitize_text_field( $map->map_all_control['map_draggable'] ) != 'false'),
42
+ 'scroll_wheel' => sanitize_text_field( $map->map_scrolling_wheel ),
43
+ 'display_45_imagery' => sanitize_text_field( $map->map_45imagery ),
44
+ 'marker_default_icon' => esc_url( $map->map_all_control['marker_default_icon'] ),
45
+ 'infowindow_setting' => wp_unslash( $map->map_all_control['infowindow_setting'] ),
46
+ 'default_infowindow_open' => false,
47
+ 'infowindow_open_event' => 'click',
48
+ 'pan_control' => ($map->map_all_control['pan_control'] != 'false'),
49
+ 'zoom_control' => ($map->map_all_control['zoom_control'] != 'false'),
50
+ 'map_type_control' => ($map->map_all_control['map_type_control'] != 'false'),
51
+ 'scale_control' => ( $map->map_all_control['scale_control'] != 'false'),
52
+ 'street_view_control' => ($map->map_all_control['street_view_control'] != 'false'),
53
+ 'overview_map_control' => ($map->map_all_control['overview_map_control'] != 'false'),
54
+ 'pan_control_position' => $map->map_all_control['pan_control_position'],
55
+ 'zoom_control_position' => $map->map_all_control['zoom_control_position'],
56
+ 'zoom_control_style' => $map->map_all_control['zoom_control_style'],
57
+ 'map_type_control_position' => $map->map_all_control['map_type_control_position'],
58
+ 'map_type_control_style' => $map->map_all_control['map_type_control_style'],
59
+ 'street_view_control_position' => $map->map_all_control['street_view_control_position'],
60
+ );
61
+
62
+ $map_data['map_options']['width'] = sanitize_text_field( $map->map_width );
63
+
64
+ $map_data['map_options']['height'] = sanitize_text_field( $map->map_height );
65
+
66
+ $map_data['map_options'] = apply_filters( 'wpgmp_map_options',$map_data['map_options'] );
67
+
68
+ if ( isset( $map_data['map_options']['width'] ) ) {
69
+ $width = $map_data['map_options']['width'];
70
+ } else { $width = '100%'; }
71
+
72
+ if ( isset( $map_data['map_options']['height'] ) ) {
73
+ $height = $map_data['map_options']['height'];
74
+ } else { $height = '300px'; }
75
+
76
+ if ( strstr( $width, '%' ) === false ) {
77
+ $width = str_replace( 'px', '', $width ).'px';
78
+ }
79
+
80
+ if ( strstr( $height, '%' ) === false ) {
81
+ $height = str_replace( 'px', '', $height ).'px';
82
+ }
83
+
84
+ $wpgmp_local = array();
85
+ if ( get_option( 'wpgmp_language' ) ) {
86
+ $wpgmp_local['language'] = get_option( 'wpgmp_language' );
87
+ } else { $wpgmp_local['language'] = 'en'; }
88
+
89
+ $wpgmp_local['wpgmp_not_working'] = __( 'not working...', WPGMP_TEXT_DOMAIN );
90
+ $wpgmp_local['place_icon_url'] = WPGMP_ICONS;
91
+ $wpgmp_local['wpgmp_location_no_results'] = __( 'No results found.', WPGMP_TEXT_DOMAIN );
92
+ $wpgmp_local['wpgmp_route_not_avilable'] = __( 'Route is not available for your requested route.', WPGMP_TEXT_DOMAIN );
93
+ wp_localize_script( 'wpgmp-google-map-main', 'wpgmp_local',$wpgmp_local );
94
+
95
+ if ( is_array( $map_locations ) ) {
96
+ $loc_count = 0;
97
+ foreach ( $map_locations as $location ) {
98
+ $location_categories = array();
99
+ if ( empty( $location->location_group_map ) ) {
100
+ $map_data['places'][ $loc_count ]['categories'][] = array(
101
+ 'id' => '',
102
+ 'name' => '',
103
+ 'type' => 'category',
104
+ 'icon' => '',
105
+ );
106
+ } else {
107
+
108
+ foreach ( $location->location_group_map as $key => $loc_category_id ) {
109
+ $loc_category = $all_categories[ $loc_category_id ];
110
+ $location_categories[] = array(
111
+ 'id' => $loc_category->group_map_id,
112
+ 'name' => $loc_category->group_map_title,
113
+ 'type' => 'category',
114
+ 'icon' => $loc_category->group_marker,
115
+ );
116
+ }
117
+ }
118
+ $onclick = isset( $location->location_settings['onclick'] ) ? $location->location_settings['onclick'] : 'marker';
119
+ $map_data['places'][ $loc_count ] = array(
120
+ 'id' => $location->location_id,
121
+ 'title' => $location->location_title,
122
+ 'address' => $location->location_address,
123
+ 'content' => ('' != $location->location_messages) ? stripcslashes( $location->location_messages ) : $location->location_title,
124
+ 'location' => array(
125
+ 'icon' => $location_categories[0]['icon'],
126
+ 'lat' => $location->location_latitude,
127
+ 'lng' => $location->location_longitude,
128
+ 'city' => $location->location_city,
129
+ 'state' => $location->location_state,
130
+ 'country' => $location->location_country,
131
+ 'redirect_url' => $onclick,
132
+ 'redirect_custom_link' => $location->location_settings['redirect_link'],
133
+ 'open_new_tab' => $location->location_settings['redirect_link_window'],
134
+ 'postal_code' => $location->location_postal_code,
135
+ 'draggable' => ( 'true' == $location->location_draggable ),
136
+ 'infowindow_default_open' => $location->location_infowindow_default_open,
137
+ 'animation' => $location->location_animation,
138
+ 'infowindow_disable' => false,
139
+ 'zoom' => 5,
140
+ ),
141
+ 'categories' => $location_categories,
142
+ );
143
+
144
+ $loc_count++;
145
+ }
146
+ }
147
+
148
+ if ( ! empty( $map->map_layer_setting['choose_layer']['bicycling_layer'] ) && $map->map_layer_setting['choose_layer']['bicycling_layer'] == 'BicyclingLayer' ) {
149
+ $map_data['bicyle_layer'] = array(
150
+ 'display_layer' => true,
151
+ );
152
+ }
153
+
154
+ if ( ! empty( $map->map_layer_setting['choose_layer']['traffic_layer'] ) && $map->map_layer_setting['choose_layer']['traffic_layer'] == 'TrafficLayer' ) {
155
+ $map_data['traffic_layer'] = array(
156
+ 'display_layer' => true,
157
+ );
158
+ }
159
+
160
+ if ( ! empty( $map->map_layer_setting['choose_layer']['transit_layer'] ) && $map->map_layer_setting['choose_layer']['transit_layer'] == 'TransitLayer' ) {
161
+ $map_data['transit_layer'] = array(
162
+ 'display_layer' => true,
163
+ );
164
+ }
165
+
166
+ if ( '' == $map_data['map_options']['center_lat'] ) {
167
+ $map_data['map_options']['center_lat'] = $map_data['places'][0]['location']['lat'];
168
+ }
169
+
170
+ if ( '' == $map_data['map_options']['center_lng'] ) {
171
+ $map_data['map_options']['center_lng'] = $map_data['places'][0]['location']['lng'];
172
+ }
173
+
174
+
175
+ // Street view.
176
+ if ( $map->map_street_view_setting['street_control'] == 'true' ) {
177
+ $map_data['street_view'] = array(
178
+ 'street_control' => @$map->map_street_view_setting['street_control'],
179
+ 'street_view_close_button' => (@$map->map_street_view_setting['street_view_close_button'] === 'true'?true:false),
180
+ 'links_control' => (@$map->map_street_view_setting['links_control'] === 'true'?true:false),
181
+ 'street_view_pan_control' => (@$map->map_street_view_setting['street_view_pan_control'] === 'true'?true:false),
182
+ 'pov_heading' => $map->map_street_view_setting['pov_heading'],
183
+ 'pov_pitch' => $map->map_street_view_setting['pov_pitch'],
184
+ );
185
+ }
186
+
187
+
188
+ $map_data['map_property'] = array( 'map_id' => $map->map_id );
189
+
190
+ $map_output = '';
191
+
192
+ $map_output .= '<div class="wpgmp_map_container" rel="map'.$map->map_id.'">';
193
+
194
+ $map_output .= '<div class="wpgmp_map" style="width:'.$width.'; height:'.$height.';" id="map'.$map->map_id.'" ></div>';
195
+ if ( ! empty( $map->map_all_control['display_listing'] ) && $map->map_all_control['display_listing'] == true ) {
196
+
197
+ $map_output .= '<div class="location_listing'.$map->map_id.'" style="float:left; width:100%;"></div>
198
+ <div class="location_pagination'.$map->map_id.' wpgmp_pagination" style="float:left; width:100%;"></div>';
199
+ }
200
+ $map_output .= '</div>';
201
+ $map_data_obj = json_encode( $map_data );
202
+
203
+ $map_output .= '<script>
204
+ jQuery(document).ready(function($) {
205
+
206
+ var map = $("#map'.$map_id.'").maps('.$map_data_obj.').data("wpgmp_maps");
207
+
208
+ });
209
+ </script>';
210
+ return $map_output;
readme.txt ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Plugin Name ===
2
+
3
+ Contributors: flippercode
4
+ Plugin Name: WP Google Map Plugin
5
+ Tags: map, maps,google map, google maps, wp map, wp maps, wordpress google map, wordpress google maps.
6
+ Author URI: http://profiles.wordpress.org/flippercode/
7
+ Author: flippercode
8
+ Donate link: (a link for donating)
9
+ Requires at least: 2.0.0
10
+ Tested up to: 4.4
11
+ Stable tag: Display Google Maps in Pages, Posts, Sidebar or Custom Templates. It’s Responsive, Multi-Lingual and Multi-Site Supported.
12
+
13
+ == Description ==
14
+ A Google Maps plugin for WordPress to create unlimited locations, maps and display Google Maps at a shortcode’s ease. Perfectly responsive maps, Multi-lingual and multisite supported made it most advanced WordPress plugin ever.
15
+
16
+ Here is a quick highlight on the numerous customizable features offered by the free and pro versions of the WP Google Map plugin.
17
+
18
+ Here is a quick highlight on the numerous customizable features offered by the free and pro versions of the [WP Google Map Pro Version](http://codecanyon.net/item/advanced-google-maps/5211638).
19
+
20
+ = Lite Version (Free) =
21
+ * Ability to show any number of google maps on a single map.
22
+ * Decide center latitude and longitude for each map separtely.
23
+ * POV Heading and Pov Pitch for street view.
24
+ * Sub categories supported.
25
+ * Redirect to URL on marker click or display info window message.
26
+ * Position google maps controls e.g Pan,Zoom,May Type with easy to use interface.
27
+ * Create unlimited maps and display on posts/pages using shortcode.
28
+ * Add unlimited locations using an easy to use interface for Google Maps
29
+ * Display your map perfectly on all devices. Create 100% responsive maps effortlessly
30
+ * Display Google Maps on sidebars using widget
31
+ * Display Road Map view. This is the default map type
32
+ * Display Google Earth satellite images on just one click
33
+ * Display maps in a blend of normal and satellite views
34
+ * Display physical maps based on terrain information
35
+ * Display traffic real time conditions and overlays using Traffic Layers
36
+ * Add bicycle path information to your maps using the Bicycling Layer
37
+ * Display physical maps based on terrain information
38
+ * A Cross Browser Compatible plugin. Fully tested on IE8, IE9, IE10 and all major browsers
39
+ * Enable visual refresh on any Google Map at a button’s click
40
+ * No need of any Google API key. Based on API Version 3.
41
+ * Fully Responsive. Tested on real devices.
42
+ * Display one infowindow at a time.
43
+ * Multi-lingual Supported.
44
+ * Multisite Enabled and ability to activate it network wide.
45
+
46
+
47
+ = Pro Edition =
48
+ * Ability to display location title, location category, location latitude, location longitude with location message in the infowindow.
49
+ * Ability to Sort listing by location, category and address alphabetically in location listing.
50
+ * Ability to display default Start and End location in directions tab.
51
+ * Ability to display directions results in KM and MILES.
52
+ * Ability to google maps styles from https://snazzymaps.com.
53
+ * Better user experience on time of Choose Locations for maps.
54
+ * Ability to use External Database or Sources to add markers on google maps using new filter wpgmp_marker_source.
55
+ * Ability to display Featured Image or Custom fields in the infowindow for geo tags using new filter wpgmp_geotags_content.
56
+ * Display Posts/Pages or Custom Post Types on google maps.
57
+ * Create unlimited maps and display on posts/pages using shortcode or in sidebar using widget.
58
+ * Add unlimited locations using an easy to use interface for Google Maps.
59
+ * Display your map perfectly on all devices. Create 100% responsive maps effortlessly.
60
+ * Add any number of Google maps on pages/posts/sidebars.
61
+ * Export/Import Features using CSV/JSON/XML or EXCEL.
62
+ * Ajax based Location Listing.
63
+ * Searchable Location Listing.
64
+ * Paginated Location Listing.
65
+ * Locating Listing Placeholder.
66
+ * Directions & Route Suggestion.
67
+ * Nearby locations based on user’s current location.
68
+ * Display multiple coloured routes on google maps.
69
+ * Display traffic real time conditions and overlays using Traffic Layers.
70
+ * Add bicycle path information to your maps using the Bicycling Layer.
71
+ * Display physical maps based on terrain information.
72
+ * A Cross Browser Compatible plugin. Fully tested on IE8, IE9, IE10 and all major browsers
73
+ * Enable visual refresh on any Google Map at a button’s click.
74
+ * No need of any Google API key. Based on API Version 3.
75
+ * Fully Responsive. Tested on real devices.
76
+ * Display one infowindow at a time.
77
+ * Multi-lingual Supported.
78
+ * Multisite Enabled and ability to activate it network wide.
79
+ * Define overlays on Google maps via an easy to use interface.
80
+ * Design your own Google map skins easily. Turn ON/OFF roads, places, water area.
81
+ * Enable marker clusters if you have too many locations. Just activate and the plugin will handle the rest.
82
+ * Display polygons on Google Maps with options to customize.
83
+ * Display polylines on Google Maps with several customizable options.
84
+ * Modify existing polygons/polylines by making locations draggable.
85
+ * Define KML Layers on Google Maps.
86
+ * Apply 45 Imagery view on Google Maps.
87
+ * Fusion Table Layers.
88
+ * Awesome Shortcodes to add unlimited locations by address or latitude and longitude.
89
+ * An innovative Quick Locations feature to add locations quickly by click.
90
+ * Hooks Supported to modify maps,locations,listing on fly. Integrate api’s using hooks to the map.
91
+ * Display Road Map view. This is the default map type.
92
+ * Display Google Earth satellite images on just one click.
93
+ * Display maps in a blend of normal and satellite views.
94
+ * Display physical maps based on terrain information.
95
+ * Display Google Maps on sidebars using widget.
96
+ * Apply awesome google maps design from snazzymaps.com with just copy and paste.
97
+ * Setup POV Heading and POV Pitch of Street View to customize Street View output of a location.
98
+ * Integrate GEOJSON in to google maps.
99
+ * Customize Infowindow Contents with help of Placeholders.
100
+ * Load markers from external database or API sources with help of filters (Hooks).
101
+ * Ability to display infowindow on mouse click on mouse hover.
102
+ * Define overlays on Google maps via an easy to use interface.
103
+ * Design your own Google map skins easily. Turn ON/OFF roads, places, water area.
104
+ * Enable marker clusters if you have too many locations. Just activate and the plugin will handle the rest.
105
+ * Display polygons on Google map with options to customize.
106
+ * Display polylines on Google map with several customizable options.
107
+ * Modify existing polygons/polylines by making locations draggable .
108
+ * Define KML Layers on Google Maps.
109
+ * Apply 45 Imagery view on Google Maps.
110
+ * Fusion Table Layers.
111
+ * Awesome Shortcodes to add unlimited locations by address or latitude/longitues.
112
+ * Contact Form 7 Shortcode to include map in contact form 7.
113
+ * An innovative Quick Locations feature to add locations quickly by click.
114
+ * Export/Import Features using CSV/JSON/XML or EXCEL.
115
+ * Display Ajax based Locations below Maps.
116
+ * Ajax based searching for locations.
117
+ * Filter by user's current location.
118
+ * Directions & Route Suggestions.
119
+ * Each location listing is paginated.
120
+ * GEOTags Supported - Easiest way to display posts/pages or custom post types on map.
121
+ * Hooks Supported - Use actions & filters to modify map,markers,listing and associated html on fly.
122
+ * Download [WP Google Map Pro Edition](http://codecanyon.net/item/advanced-google-maps/5211638)
123
+
124
+
125
+
126
+ = DEMO =
127
+
128
+ * [Display Post,Pages or Custom Post types on Google Maps](http://www.flippercode.com/display-multiple-markers-using-addresses-on-google-maps)
129
+ * [Display Multiple Markers using Address using Shortcodes](http://www.flippercode.com/display-multiple-markers-using-addresses-on-google-maps)
130
+ * [Filter Locations by Categories](http://www.flippercode.com/filtration-using-categories-on-google-maps)
131
+ * [Styled Google Map Skins](http://www.flippercode.com/styled-google-map-skin)
132
+ * [Google Map Street View](http://www.flippercode.com/google-map-street-view-using-wordpress-plugin)
133
+ * [100% Responsive Google Map](http://bit.ly/MMxK13)
134
+ * [Google Map Weather Layer](http://www.flippercode.com/google-map-weather-layer-using-wordpress-plugin)
135
+ * [Google Map Traffic Layer](http://www.flippercode.com/google-map-traffic-layer-using-wordpress-plugin)
136
+ * [Google Map Bicycling Layer](http://www.flippercode.com/google-map-bicycling%20-layer-using-wordpress-plugin)
137
+ * [Google Map Panoramic Layer](http://www.flippercode.com/google-map-panoramic-layer-using-wordpress-plugin)
138
+ * [Google Map Overlays using WordPress Plugin](http://www.flippercode.com/google-map-overlays-using-wordpress-plugin)
139
+ * [Google Map Satellite with Overlays](http://www.flippercode.com/google-map-satellite-with-overlays-using-wordpress-plugin)
140
+ * [Google Map 45 degree Imagery](http://www.flippercode.com/google-map-45-degree-imagery-using-wordpress-plugin)
141
+ * [Turn Off Scrolling Wheel on Google Map](http://www.flippercode.com/turn-off-scrolling-wheel-on-google-map-using-wordpress-plugin)
142
+ * [Enable Visual Refresh on Google Map using WordPress Plugin](http://www.flippercode.com/enable-visual-refresh-on-google-map-using-wordpress-plugin)
143
+ * [Google Map Marker Cluster](http://www.flippercode.com/google-map-marker-cluster-using-wordpress-plugin)
144
+ * [Google Map KML Layers using WordPress Plugin](http://www.flippercode.com/implement-kml-layers-on-google-map-using-wordpress-plugin)
145
+ * [Display Polylines on Google Map](http://www.flippercode.com/display-polylines-on-google-map-using-wordpress-plugin)
146
+ * [Display Route Direction on Google Map](http://www.flippercode.com/display-route-direction-on-google-map-using-wordpress-plugin)
147
+ * [Hooks for Google Maps Plugin] (http://www.flippercode.com/hooks-for-google-maps-plugin/)
148
+
149
+ **Introducing Support Desk**
150
+
151
+ We're at [FlipperCode](http://www.flippercode.com/), committed to excellent support to make every download worth for the user. Happily announcing [Support Desk](http://www.flippercode.com/forums/) for our valuable users to engaged with multiple support desk person for fast turnout.
152
+
153
+
154
+ == Installation ==
155
+ This section describes how to install the plugin and get it working.
156
+
157
+ 1. Upload the wp-google-map-plugin directory to the /wp-content/plugins/ directory
158
+
159
+ 2. Activate the plugin through the 'Plugins' menu in WordPress
160
+
161
+
162
+ == Upgrade Notice ==
163
+
164
+ == Screenshots ==
165
+ 1. An easy interface to add Locations. You can add unlimited locations.
166
+ 2. Take control on Google Map Default options with just on click.
167
+ 3. Easy to define General Settings of Google Maps
168
+ 4. Easy interface to modify info windows.
169
+ 5. Display all your locations in Core WordPress format. Easy to manage locations just like you do for posts/pages.
170
+ 6. Display all your maps in Core WordPress format. Easy to manage maps just like you do for posts/pages.
171
+ 7. Disable Scrolling Wheel, Enable Visual Refresh Property and many more...
172
+ 8. Enable Streetview and it's Settings.
173
+
174
+
175
+
176
+ == Changelog ==
177
+
178
+ Version 3.0.5
179
+ * Lang slug changed to wp-google-map-plugin as per wordpress.org requested.
180
+
181
+ Version 3.0.4
182
+ * links in the info window is broken due to missing stripslashes function - resolved.
183
+
184
+ Version 3.0.3
185
+ * wpgmp_admin_overview capability added to read how to use instructions.
186
+
187
+ Version 3.0.2
188
+ * echo $before_widget and $after_widget added for correct widget output.
189
+
190
+ Version 3.0.1
191
+ * Category icon broken issue resolved.
192
+ * Markers are not displaying on the map, issue resolved.
193
+ * Infowindow Message is not showing on marker click, issue resolved.
194
+
195
+ Version 3.0.0
196
+ 1. Sanitize all inputs and outputs.
197
+ 2. New file & folder structure.
198
+ 3. Object oriented based coding according to wordpress standard coding rules.
199
+ 4. Clean bootstrap based design.
200
+ 5. Ability to show any number of google maps on a single map.
201
+ 6. Decide center latitude and longitude for each map.
202
+ 7. POV Heading and Pov Pitch for street view.
203
+ 8. Sub categories supported.
204
+ 9. Redirect to URL on marker click.
205
+ 10. City, State, Country and Postal code new fields in location form.
206
+ 11. Apply marker animation.
207
+ 12. Position google maps controls e.g Pan,Zoom,May Type with easy to use interface.
208
+
209
+ Version 2.3.10
210
+ 1. CSRF Protection added on add/edit location.
211
+ 2. CSRF Protection added on add/edit map.
212
+ 3. CSRF Protection added on add/edit category.
213
+
214
+ Version 2.3.9
215
+ 1. Display more than 10 locations on Manage Locations using Screen Options.
216
+ 2. Display more than 10 maps on Manage Categories using Screen Options.
217
+ 3. Display more than 10 categories on Manage Maps using Screen Options.
218
+ 4. SSL Supported.
219
+
220
+
221
+ Version 2.3.8
222
+ 1. locations, maps and category was not showing on manage pages in wordpress 4.2 resolved.
223
+
224
+ Version 2.3.7
225
+ 1. Improvement Fix: Fixed add_query_arg() and remove_query_arg() usage to avoid XSS Vulnerability.
226
+
227
+ Version 2.2.0
228
+ 1. Twitter Bootstrap 3 Based.
229
+ 2. Solved Featured Image Problem.
230
+
231
+ Version 2.1.0
232
+ 1. Infowindow CSS Improved
233
+ 2. Optimized Code for Fast Map Experience
234
+ 3. Solved Layer Display Problem.
235
+
236
+ Version 1.2.0
237
+ 1. Zero Configuration Enabled
238
+ 2. Managed Navigation
239
+ 3. Custom Icon using Widget
240
+
241
+ Version 1.2.0
242
+ 1. Zero Configuration Enabled
243
+ 2. Managed Navigation
244
+ 3. Custom Icon using Widget
245
+ Version 1.1.0
246
+ 1. Solved zoom toolbar bug
247
+ 2. Solved white lines on the map
248
+ 3. Added Widget Support
249
+ 4. Added multiple maps on a page support.
250
+ == Frequently Asked Questions ==
251
+ Check Demo here http://www.flippercode.com/product/wp-google-map-pro/
252
+ == Donations ==
253
+
wp-google-map-plugin.php ADDED
@@ -0,0 +1,711 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Wpgmp_Google_Map_Lite class file.
4
+ * @package Maps
5
+ * @author Flipper Code <hello@flippercode.com>
6
+ * @version 3.0.8
7
+ */
8
+
9
+ /*
10
+ Plugin Name: WP Google Map Plugin
11
+ Plugin URI: http://www.flippercode.com/
12
+ Description: Display Google Maps in Pages, Posts, Sidebar or Custom Templates. Unlimited maps, locations and categories supported. It’s Responsive, Multi-Lingual and Multi-Site Supported.
13
+ Author: flippercode
14
+ Author URI: http://www.flippercode.com/
15
+ Version: 3.0.8
16
+ Text Domain: wpgmp_google_map
17
+ Domain Path: /lang/
18
+ */
19
+
20
+ if ( ! defined( 'ABSPATH' ) ) {
21
+ die( 'You are not allowed to call this page directly.' );
22
+ }
23
+
24
+ if ( ! class_exists( 'Wpgmp_Google_Map_Lite' ) ) {
25
+
26
+ /**
27
+ * Main plugin class
28
+ * @author Flipper Code <hello@flippercode.com>
29
+ * @package Maps
30
+ */
31
+ class Wpgmp_Google_Map_Lite
32
+ {
33
+ /**
34
+ * List of Modules.
35
+ * @var array
36
+ */
37
+ private $modules = array();
38
+ /**
39
+ * Intialize variables, files and call actions.
40
+ * @var array
41
+ */
42
+ public function __construct() {
43
+ error_reporting( E_ERROR | E_PARSE );
44
+ $this->_define_constants();
45
+ $this->_load_files();
46
+ $this->modules = glob( WPGMP_MODEL.'**/model.*.php' );
47
+ register_activation_hook( __FILE__, array( $this, 'plugin_activation' ) );
48
+ register_deactivation_hook( __FILE__, array( $this, 'plugin_deactivation' ) );
49
+ add_action( 'plugins_loaded', array( $this, 'load_plugin_languages' ) );
50
+ add_action( 'init', array( $this, '_init' ) );
51
+ add_action( 'widgets_init', array( $this, 'wpgmp_google_map_widget' ) );
52
+ }
53
+ /**
54
+ * Call WordPress hooks.
55
+ */
56
+ function _init() {
57
+
58
+ global $wpdb;
59
+
60
+ // Actions.
61
+ add_action( 'admin_menu', array( $this, 'create_menu' ) );
62
+ add_action( 'media_upload_ell_insert_gmap_tab', array( $this, 'wpgmp_google_map_media_upload_tab' ) );
63
+ add_action( 'wp_enqueue_scripts', array( $this, 'wpgmp_frontend_scripts' ) );
64
+
65
+ // Filters.
66
+ add_filter( 'media_upload_tabs', array( $this, 'wpgmp_google_map_tabs_filter' ) );
67
+ // Shortodes.
68
+ add_shortcode( 'put_wpgm', array( $this, 'wpgmp_show_location_in_map' ) );
69
+ }
70
+ /**
71
+ * Register WP Google Map Widget
72
+ */
73
+ function wpgmp_google_map_widget() {
74
+
75
+ register_widget( 'WPGMP_Google_Map_Widget_Class' );
76
+ }
77
+ /**
78
+ * Eneque scripts at frontend.
79
+ */
80
+ function wpgmp_frontend_scripts() {
81
+
82
+ $scripts = array();
83
+ wp_enqueue_script( 'jquery' );
84
+ if ( isset( $_SERVER['HTTPS'] ) && ( 'on' == $_SERVER['HTTPS'] || 1 == $_SERVER['HTTPS'] ) || isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
85
+ $wpgmp_apilocation = 'https';
86
+ } else {
87
+ $wpgmp_apilocation = 'http';
88
+ }
89
+
90
+ $language = get_option('wpgmp_language');
91
+
92
+ if( '' == $language ) {
93
+ $language = 'en';
94
+ }
95
+ if ( get_option( 'wpgmp_api_key' ) != '' ) {
96
+ $wpgmp_apilocation .= '://maps.google.com/maps/api/js?key='.get_option( 'wpgmp_api_key' ).'&libraries=geometry,places,weather,panoramio,drawing&language='.$language;
97
+ } else {
98
+ $wpgmp_apilocation .= '://maps.google.com/maps/api/js?libraries=geometry,places,weather,panoramio,drawing&language='.$language;
99
+ }
100
+
101
+ $scripts[] = array(
102
+ 'handle' => 'wpgmp-google-api',
103
+ 'src' => $wpgmp_apilocation,
104
+ 'deps' => array(),
105
+ );
106
+
107
+ $scripts[] = array(
108
+ 'handle' => 'wpgmp-google-map-main',
109
+ 'src' => WPGMP_JS.'maps.js',
110
+ 'deps' => array( 'wpgmp-google-api' ),
111
+ );
112
+
113
+ if ( $scripts ) {
114
+ foreach ( $scripts as $script ) {
115
+ wp_enqueue_script( $script['handle'], $script['src'], $script['deps'], '', false );
116
+ }
117
+ }
118
+
119
+ $wpgmp_local = array();
120
+ if ( get_option( 'wpgmp_language' ) ) {
121
+ $wpgmp_local['language'] = get_option( 'wpgmp_language' );
122
+ } else { $wpgmp_local['language'] = 'en'; }
123
+ $wpgmp_local['urlforajax'] = admin_url( 'admin-ajax.php' );
124
+
125
+ wp_localize_script( 'wpgmp-google-map-main', 'wpgmp_local', $wpgmp_local );
126
+
127
+ $frontend_styles = array(
128
+ 'wpgmp-frontend' => WPGMP_CSS.'frontend.css',
129
+ );
130
+
131
+ if ( $frontend_styles ) {
132
+ foreach ( $frontend_styles as $frontend_style_key => $frontend_style_value ) {
133
+ wp_enqueue_style( $frontend_style_key, $frontend_style_value );
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Display map at the frontend using put_wpgmp shortcode.
139
+ * @param array $atts Map Options.
140
+ * @param string $content Content.
141
+ */
142
+ function wpgmp_show_location_in_map($atts, $content = null) {
143
+
144
+ try {
145
+ $factoryObject = new FactoryControllerWPGMP();
146
+ $viewObject = $factoryObject->create_object( 'shortcode' );
147
+ $output = $viewObject->display( 'put-wpgmp',$atts );
148
+ return $output;
149
+
150
+ } catch (Exception $e) {
151
+ echo WPGMP_Template::show_message( array( 'error' => $e->getMessage() ) );
152
+
153
+ }
154
+
155
+ }
156
+ /**
157
+ * Display map at the frontend using display_map shortcode.
158
+ * @param array $atts Map Options.
159
+ */
160
+ function wpgmp_display_map($atts) {
161
+
162
+ try {
163
+
164
+ $factoryObject = new FactoryControllerWPGMP();
165
+ $viewObject = $factoryObject->create_object( 'shortcode' );
166
+ $viewObject->display( 'put-wpgmp',$atts );
167
+
168
+ } catch (Exception $e) {
169
+ echo WPGMP_Template::show_message( array( 'error' => $e->getMessage() ) );
170
+
171
+ }
172
+
173
+ }
174
+ /**
175
+ * Process slug and display view in the backend.
176
+ */
177
+ function processor() {
178
+
179
+ $return = '';
180
+ $page = sanitize_text_field( $_GET['page'] );
181
+ $pageData = explode( '_', $page );
182
+ $obj_type = $pageData[2];
183
+ $obj_operation = $pageData[1];
184
+
185
+ if ( count( $pageData ) < 3 ) {
186
+ die( 'Cheating!' );
187
+ }
188
+
189
+ try {
190
+ if ( count( $pageData ) > 3 ) {
191
+ $obj_type = $pageData[2].'_'.$pageData[3];
192
+ }
193
+
194
+ $factoryObject = new FactoryControllerWPGMP();
195
+ $viewObject = $factoryObject->create_object( $obj_type );
196
+ $viewObject->display( $obj_operation );
197
+
198
+ } catch (Exception $e) {
199
+ echo WPGMP_Template::show_message( array( 'error' => $e->getMessage() ) );
200
+
201
+ }
202
+
203
+ }
204
+ /**
205
+ * Create backend navigation.
206
+ */
207
+ function create_menu() {
208
+
209
+ global $navigations;
210
+
211
+ $pagehook1 = add_menu_page(
212
+ __( 'WP Google Map', WPGMP_TEXT_DOMAIN ),
213
+ __( 'WP Google Map', WPGMP_TEXT_DOMAIN ),
214
+ 'wpgmp_admin_overview',
215
+ WPGMP_SLUG,
216
+ array( $this,'processor' )
217
+ );
218
+
219
+ if ( current_user_can( 'manage_options' ) ) {
220
+ $role = get_role( 'administrator' );
221
+ $role->add_cap( 'wpgmp_admin_overview' );
222
+ }
223
+
224
+ $this->load_modules_menu();
225
+
226
+ add_action( 'load-'.$pagehook1, array( $this, 'wpgmp_backend_scripts' ) );
227
+
228
+ }
229
+ /**
230
+ * Read models and create backend navigation.
231
+ */
232
+ function load_modules_menu() {
233
+
234
+ $files = $this->modules;
235
+ $pagehooks = array();
236
+
237
+ if ( is_array( $files ) ) {
238
+ foreach ( $files as $file ) {
239
+
240
+ $module_info = (get_file_data( $file,array( 'class' => 'Class', 'menu_order' => 'Menu Order' ) ));
241
+ if ( '' != $module_info['class'] ) {
242
+ if ( isset( $module_info['menu_order'] ) and '' != $module_info['menu_order'] ) {
243
+ $menu_order[ $module_info['menu_order'] ][] = array( $file,$module_info );
244
+ } else { $menu_order[100][] = array( $file, $module_info ); }
245
+ }
246
+ }
247
+ }
248
+ ksort( $menu_order );
249
+ foreach ( $menu_order as $order => $menus ) {
250
+
251
+ foreach ( $menus as $i => $menu ) {
252
+ $file = $menu[0];
253
+ $module_info = $menu[1];
254
+ if ( file_exists( $file ) ) {
255
+ include_once( $file );
256
+ $object = new $module_info['class'];
257
+ if ( method_exists( $object,'navigation' ) ) {
258
+
259
+ if ( ! is_array( $object->navigation() ) ) {
260
+ continue;
261
+ }
262
+
263
+ foreach ( $object->navigation() as $nav => $title ) {
264
+
265
+ if ( current_user_can( 'manage_options' ) && is_admin() ) {
266
+ $role = get_role( 'administrator' );
267
+ $role->add_cap( $nav );
268
+
269
+ }
270
+
271
+ $pagehooks[] = add_submenu_page(
272
+ WPGMP_SLUG,
273
+ $title,
274
+ $title,
275
+ $nav,
276
+ $nav,
277
+ array( $this,'processor' )
278
+ );
279
+
280
+ }
281
+ }
282
+ }
283
+ }
284
+ }
285
+
286
+ if ( is_array( $pagehooks ) ) {
287
+
288
+ foreach ( $pagehooks as $key => $pagehook ) {
289
+ add_action( 'load-'.$pagehooks[ $key ], array( $this, 'wpgmp_backend_scripts' ) );
290
+ }
291
+ }
292
+
293
+ }
294
+ /**
295
+ * Eneque scripts in the backend.
296
+ */
297
+ function wpgmp_backend_scripts() {
298
+
299
+ if ( isset( $_SERVER['HTTPS'] ) && ( 'on' == $_SERVER['HTTPS'] || 1 == $_SERVER['HTTPS'] ) || isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
300
+ $wpgmp_apilocation = 'https';
301
+ } else {
302
+ $wpgmp_apilocation = 'http';
303
+ }
304
+ $language = get_option('wpgmp_language');
305
+ if( '' == $language ) {
306
+ $language = 'en';
307
+ }
308
+ if ( get_option( 'wpgmp_api_key' ) != '' ) {
309
+ $wpgmp_apilocation .= '://maps.google.com/maps/api/js?key='.get_option( 'wpgmp_api_key' ).'&libraries=geometry,places,weather,panoramio,drawing&language='.$language;
310
+ } else {
311
+ $wpgmp_apilocation .= '://maps.google.com/maps/api/js?libraries=geometry,places,weather,panoramio,drawing&language='.$language;
312
+ }
313
+
314
+
315
+ wp_enqueue_style( 'thickbox' );
316
+ wp_enqueue_style( 'wp-color-picker' );
317
+ $wp_scripts = array( 'jQuery','thickbox', 'wp-color-picker' );
318
+
319
+ if ( $wp_scripts ) {
320
+ foreach ( $wp_scripts as $wp_script ) {
321
+ wp_enqueue_script( $wp_script );
322
+ }
323
+ }
324
+
325
+ $scripts = array();
326
+
327
+ $scripts[] = array(
328
+ 'handle' => 'wpgmp-backend-google-maps',
329
+ 'src' => WPGMP_JS.'backend.js',
330
+ 'deps' => array(),
331
+ );
332
+
333
+ $scripts[] = array(
334
+ 'handle' => 'wpgmp-backend-google-api',
335
+ 'src' => $wpgmp_apilocation,
336
+ 'deps' => array(),
337
+ );
338
+
339
+ $scripts[] = array(
340
+ 'handle' => 'wpgmp-map',
341
+ 'src' => WPGMP_JS.'maps.js',
342
+ 'deps' => array(),
343
+ );
344
+
345
+ if ( $scripts ) {
346
+ foreach ( $scripts as $script ) {
347
+ wp_enqueue_script( $script['handle'], $script['src'], $script['deps'] );
348
+ }
349
+ }
350
+
351
+ $wpgmp_local = array();
352
+ if ( get_option( 'wpgmp_language' ) ) {
353
+ $wpgmp_local['language'] = get_option( 'wpgmp_language' );
354
+ } else { $wpgmp_local['language'] = 'en'; }
355
+
356
+ $wpgmp_local['urlforajax'] = admin_url( 'admin-ajax.php' );
357
+ wp_localize_script( 'wpgmp-map', 'wpgmp_local', $wpgmp_local );
358
+ $admin_styles = array(
359
+ 'wpgmp-map-bootstrap' => WPGMP_CSS.'bootstrap.min.flat.css',
360
+ 'wpgmp-backend-google-map' => WPGMP_CSS.'backend.css',
361
+ );
362
+
363
+ if ( $admin_styles ) {
364
+ foreach ( $admin_styles as $admin_style_key => $admin_style_value ) {
365
+ wp_enqueue_style( $admin_style_key, $admin_style_value );
366
+ }
367
+ }
368
+ }
369
+ /**
370
+ * Load plugin language file.
371
+ */
372
+ function load_plugin_languages() {
373
+ load_plugin_textdomain( WPGMP_TEXT_DOMAIN, false, WPGMP_FOLDER.'/lang/' );
374
+ }
375
+ /**
376
+ * Call hook on plugin activation for both multi-site and single-site.
377
+ */
378
+ function plugin_activation() {
379
+
380
+ if ( is_multisite() && $network_wide ) {
381
+ global $wpdb;
382
+ $currentblog = $wpdb->blogid;
383
+ $activated = array();
384
+ $sql = "SELECT blog_id FROM {$wpdb->blogs}";
385
+ $blog_ids = $wpdb->get_col( $wpdb->prepare( $sql, null ) );
386
+
387
+ foreach ( $blog_ids as $blog_id ) {
388
+ switch_to_blog( $blog_id );
389
+ $this->wpgmp_activation();
390
+ $activated[] = $blog_id;
391
+ }
392
+
393
+ switch_to_blog( $currentblog );
394
+ update_site_option( 'op_activated', $activated );
395
+
396
+ } else {
397
+ $this->wpgmp_activation();
398
+ }
399
+ }
400
+ /**
401
+ * Call hook on plugin deactivation for both multi-site and single-site.
402
+ */
403
+ function plugin_deactivation() {
404
+
405
+ if ( is_multisite() && $network_wide ) {
406
+ global $wpdb;
407
+ $currentblog = $wpdb->blogid;
408
+ $activated = array();
409
+ $sql = "SELECT blog_id FROM {$wpdb->blogs}";
410
+ $blog_ids = $wpdb->get_col( $wpdb->prepare( $sql, null ) );
411
+
412
+ foreach ( $blog_ids as $blog_id ) {
413
+ switch_to_blog( $blog_id );
414
+ $this->wpgmp_deactivation();
415
+ $activated[] = $blog_id;
416
+ }
417
+
418
+ switch_to_blog( $currentblog );
419
+ update_site_option( 'op_activated', $activated );
420
+
421
+ } else {
422
+ $this->wpgmp_deactivation();
423
+ }
424
+ }
425
+
426
+ /**
427
+ * Create choose icon tab in media manager.
428
+ * @param array $tabs Current Tabs.
429
+ * @return array New Tabs.
430
+ */
431
+ function wpgmp_google_map_tabs_filter($tabs) {
432
+
433
+ $newtab = array( 'ell_insert_gmap_tab' => __( 'Choose Icons', WPGMP_TEXT_DOMAIN ) );
434
+ return array_merge( $tabs, $newtab );
435
+ }
436
+ /**
437
+ * Intialize wp_iframe for icons tab
438
+ * @return [type] [description]
439
+ */
440
+ function wpgmp_google_map_media_upload_tab() {
441
+
442
+ return wp_iframe( array( $this, 'wpgmp_google_map_icon' ), $errors );
443
+ }
444
+ /**
445
+ * Read images/icons folder.
446
+ */
447
+ function wpgmp_google_map_icon() {
448
+
449
+ wp_enqueue_style( 'media' );
450
+ media_upload_header();
451
+ $form_action_url = site_url( "wp-admin/media-upload.php?type={$GLOBALS['type']}&tab=ell_insert_gmap_tab", 'admin' );
452
+ ?>
453
+
454
+ <style type="text/css">
455
+ #select_icons .read_icons {
456
+ width: 32px;
457
+ height: 32px;ß
458
+ }
459
+ #select_icons .active img {
460
+ border: 3px solid #000;
461
+ width: 26px;
462
+ }
463
+ </style>
464
+
465
+ <script type="text/javascript">
466
+
467
+ jQuery(document).ready(function($) {
468
+
469
+ $(".read_icons").click(function () {
470
+
471
+ $(".read_icons").removeClass('active');
472
+ $(this).addClass('active');
473
+ });
474
+
475
+ $('input[name="wpgmp_search_icon"]').keyup(function() {
476
+ if($(this).val() == '')
477
+ $('.read_icons').show();
478
+ else {
479
+ $('.read_icons').hide();
480
+ $('img[title^="' + $(this).val() + '"]').parent().show();
481
+ }
482
+
483
+ });
484
+
485
+ });
486
+
487
+ function add_icon_to_images(target) {
488
+
489
+ if(jQuery('.read_icons').hasClass('active'))
490
+ {
491
+ imgsrc = jQuery('.active').find('img').attr('src');
492
+ var win = window.dialogArguments || opener || parent || top;
493
+ win.send_icon_to_map(imgsrc,target);
494
+ }
495
+ else
496
+ {
497
+ alert('Choose your icon.');
498
+ }
499
+ }
500
+ </script>
501
+
502
+ <form enctype="multipart/form-data" method="post" action="<?php echo esc_attr( $form_action_url ); ?>" class="media-upload-form" id="library-form">
503
+ <h3 class="media-title" style="color: #5A5A5A; font-family: Georgia, 'Times New Roman', Times, serif; font-weight: normal; font-size: 1.6em; margin-left: 10px;"><?php _e( 'Choose icon', WPGMP_TEXT_DOMAIN ) ?> <input name="wpgmp_search_icon" id="wpgmp_search_icon" type='text' value="" placeholder="<?php _e( 'Search icons',WPGMP_TEXT_DOMAIN ); ?>" />
504
+ </h3>
505
+ <div style="margin-bottom:20px; float:left; width:100%;">
506
+ <ul style="float:left; width:100%;" id="select_icons">
507
+ <?php
508
+ $dir = WPGMP_ICONS_DIR;
509
+ $file_display = array( 'jpg', 'jpeg', 'png', 'gif' );
510
+
511
+ if ( file_exists( $dir ) == false ) {
512
+ echo 'Directory \'', $dir, '\' not found!';
513
+
514
+ } else {
515
+ $dir_contents = scandir( $dir );
516
+ foreach ( $dir_contents as $file ) {
517
+ $image_data = explode( '.', $file );
518
+ $file_type = strtolower( end( $image_data ) );
519
+ if ( '.' !== $file && '..' !== $file && true == in_array( $file_type, $file_display ) ) {
520
+ ?>
521
+ <li class="read_icons" style="float:left;">
522
+ <img alt="<?php echo $image_data[0]; ?>" title="<?php echo $image_data[0]; ?>" src="<?php echo WPGMP_ICONS.$file; ?>" style="cursor:pointer;" />
523
+ </li>
524
+ <?php
525
+ }
526
+ }
527
+ }
528
+ ?>
529
+ </ul>
530
+ <button type="button" class="button" style="margin-left:10px;" value="1" onclick="add_icon_to_images('<?php echo (wp_unslash( $_GET['target'] )); ?>');" name="send[<?php echo $picid ?>]"><?php _e( 'Insert into Post', WPGMP_TEXT_DOMAIN ) ?></button>
531
+ </div>
532
+ </form>
533
+ <?php
534
+ }
535
+ /**
536
+ * Perform tasks on plugin deactivation.
537
+ */
538
+ function wpgmp_deactivation() {
539
+
540
+ }
541
+
542
+ /**
543
+ * Perform tasks on plugin deactivation.
544
+ */
545
+ function wpgmp_activation() {
546
+
547
+ global $wpdb;
548
+
549
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
550
+
551
+ $files = $this->modules;
552
+ $pagehooks = array();
553
+
554
+ if ( is_array( $files ) ) {
555
+ foreach ( $files as $file ) {
556
+
557
+ $module_info = (get_file_data( $file,array( 'class' => 'Class', 'menu_order' => 'Menu Order' ) ));
558
+ if ( '' != $module_info['class'] ) {
559
+ if ( file_exists( $file ) ) {
560
+ include_once( $file );
561
+ $object = new $module_info['class'];
562
+ if ( method_exists( $object,'install' ) ) {
563
+ $tables[] = $object->install();
564
+ }
565
+ }
566
+ }
567
+ }
568
+ }
569
+
570
+ if ( is_array( $tables ) ) {
571
+ foreach ( $tables as $i => $sql ) {
572
+ dbDelta( $sql );
573
+ }
574
+ }
575
+
576
+ }
577
+ /**
578
+ * Define all constants.
579
+ */
580
+ private function _define_constants() {
581
+
582
+ global $wpdb;
583
+
584
+ if ( ! defined( 'WPGMP_SLUG' ) ) {
585
+ define( 'WPGMP_SLUG', 'wpgmp_view_overview' );
586
+ }
587
+
588
+ if ( ! defined( 'WPGMP_VERSION' ) ) {
589
+ define( 'WPGMP_VERSION', '3.0.0' );
590
+ }
591
+
592
+ if ( ! defined( 'WPGMP_TEXT_DOMAIN' ) ) {
593
+ define( 'WPGMP_TEXT_DOMAIN', 'wp-google-map-plugin' );
594
+ }
595
+
596
+ if ( ! defined( 'WPGMP_FOLDER' ) ) {
597
+ define( 'WPGMP_FOLDER', basename( dirname( __FILE__ ) ) );
598
+ }
599
+
600
+ if ( ! defined( 'WPGMP_DIR' ) ) {
601
+ define( 'WPGMP_DIR', plugin_dir_path( __FILE__ ) );
602
+ }
603
+
604
+ if ( ! defined( 'WPGMP_ICONS_DIR' ) ) {
605
+ define( 'WPGMP_ICONS_DIR', WPGMP_DIR.'/assets/images/icons/' );
606
+ }
607
+
608
+ if ( ! defined( 'WPGMP_CORE_CLASSES' ) ) {
609
+ define( 'WPGMP_CORE_CLASSES', WPGMP_DIR.'core/' );
610
+ }
611
+
612
+ if ( ! defined( 'WPGMP_CONTROLLER' ) ) {
613
+ define( 'WPGMP_CONTROLLER', WPGMP_CORE_CLASSES );
614
+ }
615
+
616
+ if ( ! defined( 'WPGMP_CORE_CONTROLLER_CLASS' ) ) {
617
+ define( 'WPGMP_CORE_CONTROLLER_CLASS', WPGMP_CORE_CLASSES.'class.controller.php' );
618
+ }
619
+
620
+ if ( ! defined( 'WPGMP_MODEL' ) ) {
621
+ define( 'WPGMP_MODEL', WPGMP_DIR.'modules/' );
622
+ }
623
+
624
+ if ( ! defined( 'WPGMP_URL' ) ) {
625
+ define( 'WPGMP_URL', plugin_dir_url( WPGMP_FOLDER ).WPGMP_FOLDER.'/' );
626
+ }
627
+
628
+ if ( ! defined( 'WPGMP_INC_URL' ) ) {
629
+ define( 'WPGMP_INC_URL', WPGMP_URL.'includes/' );
630
+ }
631
+
632
+ if ( ! defined( 'WPGMP_VIEWS_PATH' ) ) {
633
+ define( 'WPGMP_VIEWS_PATH', WPGMP_CLASSES.'view' );
634
+ }
635
+
636
+ if ( ! defined( 'WPGMP_CSS' ) ) {
637
+ define( 'WPGMP_CSS', WPGMP_URL.'/assets/css/' );
638
+ }
639
+
640
+ if ( ! defined( 'WPGMP_JS' ) ) {
641
+ define( 'WPGMP_JS', WPGMP_URL.'/assets/js/' );
642
+ }
643
+
644
+ if ( ! defined( 'WPGMP_IMAGES' ) ) {
645
+ define( 'WPGMP_IMAGES', WPGMP_URL.'/assets/images/' );
646
+ }
647
+
648
+ if ( ! defined( 'WPGMP_FONTS' ) ) {
649
+ define( 'WPGMP_FONTS', WPGMP_URL.'fonts/' );
650
+ }
651
+
652
+ if ( ! defined( 'WPGMP_ICONS' ) ) {
653
+ define( 'WPGMP_ICONS', WPGMP_URL.'/assets/images/icons/' );
654
+ }
655
+ $upload_dir = wp_upload_dir();
656
+ if ( ! defined( 'WPGMP_BACKUP' ) ) {
657
+
658
+ if ( ! is_dir( $upload_dir['basedir'].'/maps-backup' ) ) {
659
+ mkdir( $upload_dir['basedir'].'/maps-backup' );
660
+ }
661
+ define( 'WPGMP_BACKUP',$upload_dir['basedir'].'/maps-backup/' );
662
+ define( 'WPGMP_BACKUP_URL',$upload_dir['baseurl'].'/maps-backup/' );
663
+
664
+ }
665
+
666
+ if ( ! defined( 'TBL_LOCATION' ) ) {
667
+ define( 'TBL_LOCATION', $wpdb->prefix.'map_locations' );
668
+ }
669
+
670
+ if ( ! defined( 'TBL_GROUPMAP' ) ) {
671
+ define( 'TBL_GROUPMAP', $wpdb->prefix.'group_map' );
672
+ }
673
+
674
+ if ( ! defined( 'TBL_MAP' ) ) {
675
+ define( 'TBL_MAP', $wpdb->prefix.'create_map' );
676
+ }
677
+
678
+ if ( ! defined( 'TBL_ROUTES' ) ) {
679
+ define( 'TBL_ROUTES', $wpdb->prefix.'map_routes' );
680
+ }
681
+
682
+ if ( ! defined( 'TBL_BACKUPS' ) ) {
683
+ define( 'TBL_BACKUPS', $wpdb->prefix.'wpgmp_backups' );
684
+ }
685
+
686
+ }
687
+ /**
688
+ * Load all required core classes.
689
+ */
690
+ private function _load_files() {
691
+
692
+ $files_to_include = array(
693
+ 'class.map-widget.php',
694
+ 'class.tabular.php',
695
+ 'class.template.php',
696
+ 'abstract.factory.php',
697
+ 'class.controller-factory.php',
698
+ 'class.model-factory.php',
699
+ 'class.controller.php',
700
+ 'class.model.php',
701
+ 'class.validation.php',
702
+ 'class.database.php',
703
+ );
704
+ foreach ( $files_to_include as $file ) {
705
+ require_once( WPGMP_CORE_CLASSES.$file );
706
+ }
707
+ }
708
+ }
709
+ }
710
+
711
+ new Wpgmp_Google_Map_Lite();