PageRenderTime 75ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/dist/media-chooser.js

https://github.com/shinebig/media-chooser
JavaScript | 2009 lines | 1464 code | 287 blank | 258 comment | 424 complexity | 6e488b89dfdf3dcbfa5588ec498116bb MD5 | raw file
  1. /*! Chute.MediaChooser - v0.1.4 - 2013-05-17
  2. * http://getchute.com/
  3. * Copyright (c) 2013 Chute Corporation; Licensed MIT */
  4. if (!window.Chute) {
  5. window.Chute = (function() {
  6. function Chute() {}
  7. Chute.setApp = function(app) {
  8. this.app = app;
  9. };
  10. Chute.fill = function(width, height, url) {
  11. return "" + url + "/" + width + "x" + height;
  12. };
  13. Chute.fit = function(width, height, url) {
  14. return "" + url + "/fit/" + width + "x" + height;
  15. };
  16. Chute.width = function(width, url) {
  17. return "" + url + "/w/" + width;
  18. };
  19. Chute.height = function(height, url) {
  20. return "" + url + "/h/" + height;
  21. };
  22. return Chute;
  23. })();
  24. }
  25. window.Chute.MediaChooser = (function() {
  26. function MediaChooser() {}
  27. MediaChooser.validateNumber = function(value, rule) {
  28. var max, maxEqual, min, minEqual, result;
  29. min = -Infinity;
  30. minEqual = false;
  31. max = Infinity;
  32. maxEqual = false;
  33. result = />=\s?([0-9.]+)/.exec(rule);
  34. if (result) {
  35. min = parseFloat(result[1]);
  36. minEqual = true;
  37. }
  38. result = />\s?([0-9.]+)/.exec(rule);
  39. if (result) {
  40. min = parseFloat(result[1]);
  41. minEqual = false;
  42. }
  43. result = /<=\s?([0-9.]+)/.exec(rule);
  44. if (result) {
  45. max = parseFloat(result[1]);
  46. maxEqual = true;
  47. }
  48. result = /<\s?([0-9.]+)/.exec(rule);
  49. if (result) {
  50. max = parseFloat(result[1]);
  51. maxEqual = false;
  52. }
  53. result = /^\=\s?([0-9.]+)$/.exec(rule);
  54. if (result) {
  55. min = max = parseFloat(result[1]);
  56. minEqual = maxEqual = true;
  57. }
  58. if (min !== -Infinity) {
  59. if (minEqual) {
  60. if (!(value >= min)) {
  61. return false;
  62. }
  63. } else {
  64. if (!(value > min)) {
  65. return false;
  66. }
  67. }
  68. }
  69. if (max !== Infinity) {
  70. if (maxEqual) {
  71. if (!(value <= max)) {
  72. return false;
  73. }
  74. } else {
  75. if (!(value < max)) {
  76. return false;
  77. }
  78. }
  79. }
  80. return true;
  81. };
  82. MediaChooser.defaults = {};
  83. MediaChooser.setDefaults = function(defaults) {
  84. this.defaults = defaults != null ? defaults : {};
  85. };
  86. MediaChooser.choose = function(params, callback) {
  87. var constraintsLength, id, key, widget,
  88. _this = this;
  89. if ('function' === typeof params) {
  90. callback = params;
  91. params = {};
  92. }
  93. params.app = Chute.app || params.app || this.defaults.app;
  94. params.chute_id = params.album || this.defaults.album;
  95. if (!params.app) {
  96. throw new Error('Chute.MediaChooser requires app parameter');
  97. }
  98. if (params.chute_id) {
  99. params.identifier = "chute-identifier-" + params.chute_id;
  100. }
  101. if (!(params.mode != null)) {
  102. params.mode = 'collector' || this.defaults.mode;
  103. }
  104. if (!(params.popup != null)) {
  105. params.popup = false || this.defaults.popup;
  106. }
  107. params.file_types = (function() {
  108. switch (params.mediaTypes || this.defaults.mediaTypes) {
  109. case 'images':
  110. case 'image':
  111. case 'picture':
  112. case 'pictures':
  113. return 1;
  114. case 'video':
  115. case 'videos':
  116. return 2;
  117. default:
  118. return 0;
  119. }
  120. }).call(this);
  121. params.inclusions = (params.services || this.defaults.services || ['upload', 'facebook', 'picasa', 'instagram', 'flickr']).join(',');
  122. params.file_limit = params.limit || this.defaults.limit || 0;
  123. if (params.version || this.defaults.version) {
  124. params.picker_version = "v" + (params.version || this.defaults.version);
  125. } else {
  126. params.picker_version = 'v2';
  127. }
  128. constraintsLength = 0;
  129. if (this.defaults.constraints && !params.constraints) {
  130. params.constraints = this.defaults.constraints;
  131. }
  132. if (params.constraints) {
  133. for (key in params.constraints) {
  134. if (params.constraints.hasOwnProperty(key)) {
  135. constraintsLength++;
  136. }
  137. }
  138. }
  139. params.onSelectionComplete = function(element, data) {
  140. var asset, filteredData, urls, valid, _i, _len, _ref;
  141. urls = [];
  142. filteredData = {};
  143. for (key in data) {
  144. if (data.hasOwnProperty(key)) {
  145. filteredData[key] = data[key];
  146. }
  147. }
  148. filteredData.assets = [];
  149. _ref = data.assets;
  150. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  151. asset = _ref[_i];
  152. if (constraintsLength > 0) {
  153. valid = true;
  154. for (key in params.constraints) {
  155. if (params.constraints.hasOwnProperty(key) && !_this.validateNumber(asset[key], params.constraints[key])) {
  156. valid = false;
  157. }
  158. }
  159. if (valid) {
  160. filteredData.assets.push(asset);
  161. urls.push(asset.url);
  162. }
  163. } else {
  164. filteredData.assets.push(asset);
  165. urls.push(asset.url);
  166. }
  167. }
  168. if (callback) {
  169. return callback(urls, filteredData);
  170. }
  171. };
  172. id = parseInt(Math.random() * 1000);
  173. widget = jQuery("<div id=\"chute-" + id + "\"></div>");
  174. widget.appendTo('body');
  175. params.widget_id = id;
  176. params.onComplete = function() {
  177. var browseButton;
  178. browseButton = widget.find('a.chute-browseButton');
  179. if (!params.popup && params.mode === 'collector') {
  180. browseButton.hide();
  181. }
  182. return browseButton.click();
  183. };
  184. return __chute("#chute-" + id, params);
  185. };
  186. return MediaChooser;
  187. })();
  188. function chutelog(what) {
  189. try {
  190. console.log(what);
  191. }
  192. catch (e) {}
  193. finally {
  194. return;
  195. }
  196. }
  197. /*
  198. * jQuery SlideChute Plugin 1.0.0
  199. * www.slidechute.com
  200. * Copyright 2012, Chute Corporation
  201. * Free to use under the MIT license.
  202. * http://www.opensource.org/licenses/mit-license.php
  203. */
  204. var currentWidget = null;
  205. var $chuteWidget;
  206. function chuteGetScript(url, success) {
  207. var script = document.createElement('script');
  208. script.src = url;
  209. var head = document.getElementsByTagName('head')[0],
  210. done = false;
  211. script.onload = script.onreadystatechange = function() {
  212. if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
  213. done = true;
  214. success();
  215. script.onload = script.onreadystatechange = null;
  216. head.removeChild(script);
  217. }
  218. };
  219. head.appendChild(script);
  220. }
  221. var __chute = function(element, data){
  222. function _loader(element, data){
  223. __chuteFunctions()
  224. jQuery(element).chute(data);
  225. }
  226. if (typeof(jQuery) != 'undefined') {
  227. _loader(element, data);
  228. }
  229. var _readyCallback = function(){
  230. if (typeof(jQuery) == 'undefined'){
  231. chuteGetScript('//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', function(){
  232. setTimeout(function(){
  233. _loader(element, data);
  234. }, 10);
  235. });
  236. } else {
  237. _loader(element, data);
  238. }
  239. }
  240. var _loadCallback = function(){
  241. if (document.readyState == 'complete'){
  242. _readyCallback();
  243. }
  244. };
  245. if (typeof(jQuery) == 'undefined'){
  246. if (document.readyState == 'complete'){
  247. _readyCallback();
  248. } else if (document.addEventListener){
  249. document.addEventListener("readystatechange", _loadCallback);
  250. } else {
  251. document.attachEvent("onreadystatechange", _loadCallback);
  252. }
  253. }
  254. }
  255. var __chuteFunctions = function(){
  256. (function($) {
  257. var CHUTE = {
  258. popupHtml: "<style type='text/css'>.chute-reveal-modal { visibility:hidden }</style><div class='chute-popup chute-reveal-modal'>\
  259. <iframe width='100%' height='100%' marginWidth='0' marginHeight='0' frameBorder='0' scrolling='no' title='' src='//s3.amazonaws.com/cdn.getchute.com/html/v1/loading.html'>IFrame not supported</iframe>\
  260. <a class='close-chute-reveal-modal'>&#215;</a>\
  261. </div>\
  262. <div class='chute-thanks chute-reveal-modal'>\
  263. <div class='chute-thanks-header'>SUCCESS_MESSAGE</div>\
  264. <div class='chute-thanks-footer'>\
  265. <a href='mailto:info@getchute.com'>info@getchute.com</a>\
  266. </div>\
  267. <a class='close-chute-reveal-modal'>&nbsp;</a>\
  268. </div>",
  269. defaultDisplayTemplateHtml: "<style type='text/css'>.chute-thumbnails a{margin: 5px} .chute-thumbnails img{width:100px;height:100px;} .chute-thumbnail-reveal-modal {visibility: hidden;top: 0;left: 50%;margin-left: -250px;width: 500px;max-height: 800px;position: fixed;z-index: 10001;background-color:#fff;-moz-box-shadow: 0 0 10px rgba(0,0,0,.4);-webkit-box-shadow: 0 0 10px rgba(0,0,0,.4);-box-shadow: 0 0 10px rgba(0,0,0,.4);overflow:hidden;} .chute-thumbnail-reveal-modal img{width: 100%;float: left;} .chute-thumbnail-reveal-modal .close-chute-thumbnail-reveal-modal {font-size: 22px;line-height: .5;position: absolute;top: 15px;right: 11px;color: #aaa;text-shadow: 0 -1px 1px rbga(0,0,0,.6);font-weight: bold;cursor: pointer;} .chute-thumbnail-reveal-modal .chute-thumbnail-source{position:absolute;left: 0;bottom: 30px;background-color: #000;background-color: rgba(0,0,0, 0.6);color: #fff;padding: 5px;text-decoration: none;-moz-box-shadow: 0 0 5px #888;-webkit-box-shadow: 0 0 5px#888;box-shadow: 0 0 5px #888;} .chute-reveal-modal-bg {position: fixed;height: 100%;width: 100%;background: #000;background: rgba(150,150,150,.8);z-index: 10000;display: none;top: 0;left: 0;}</style><div class='chute-thumbnails'>{{#images}}<a href='{{url}}' data-source-url='{{source_url}}' data-url='{{url}}'><img src='{{url}}/100x100'></a>{{/images}}</div>",
  270. defaultCollectTemplateHtml: "<a href='#' class='chute-browseButton'><img src='//s3.amazonaws.com/cdn.getchute.com/v1/images/add-photos.png' style='border:0'></a>",
  271. // Paths
  272. paths: {
  273. assets : '/assets/:id', // Path to assets data
  274. gallery : '/chutes/:id.js', // Path to gallery data
  275. collection : '/collection/:id' // Path to collection data
  276. },
  277. // Defaults
  278. defaults: {
  279. uploadServer : '//upload.getchute.com', // Path to Upload Server
  280. apiServer : '//api.getchute.com', // Path to API
  281. cdnRoot : '//s3.amazonaws.com/cdn.getchute.com/v1',
  282. popup : false,
  283. app : null, // ID of the app
  284. disable_auto_identifier : false,
  285. display_template_name : null, // required only with an external url based template
  286. display_template : null, // jQuery Object or HTML template
  287. collector_template_name : null, // collector theme name
  288. collector_template : null, // collector theme path
  289. collector_width : '635px', // collector template width
  290. collector_height : '435px', // collector template height
  291. template_options : {},
  292. // Data Sources
  293. assets : null, // ID of Asset(s) to render as comma-delimited list
  294. gallery : null, // ID of the Gallery to render
  295. collection : null, // ID of the Collection to render
  296. // Externals
  297. css : '', // Comma-delimited list of css externals to load
  298. css_loaded : false, // Boolean indicating if all required css is loaded
  299. scripts : '', // Comma-delimited list of js externals to load
  300. scripts_lodaed : false, // Boolean indicating if all required js is loaded,
  301. exclusions : "",
  302. file_types : 1, // 0 = all, 1 = image, 2 = video
  303. file_limit : 0, // 0 = unlimited
  304. is_display : true,
  305. success_message : "<h3>Thanks!</h3><p>Your photos will be online as soon as they're approved</p>",
  306. // Plugin Events
  307. onComplete : function() {}, // Fired when the the plugin has completely initialized
  308. // Display Events
  309. onTemplateLoaded : function() {}, // Fired when template loaded
  310. onDependenciesLoaded : function() {}, // Fired when template dependencies loaded
  311. onAssetsLoading : function() {}, // Fired when assets are starting to load
  312. onAssetsLoaded : function() {}, // Fired when assets are loaded
  313. onAssetsRendered : null, // Fired when assets are rendered
  314. onAssetsReRendered : function() {}, // Fired when assets are re-rendered
  315. // Collection Events
  316. onDrop : function() {}, // Fired when assets are dropped on the plugin
  317. onAlbumList : function() {}, // Fired when the listing of albums is loaded
  318. onAlbumLoad : function() {}, // Fired when an external album loads
  319. onAdd : function() {}, // Fired when assets are selection for inclusion
  320. onRemove : function() {}, // Fired when assets are removed from inclusion
  321. onSelection : function() {}, // Fired when selection of photos has been completed
  322. onConfirmation : function() {}, // Fired when rights are confirmed
  323. onProfileComplete : function() {}, // Fired when custom profile is completed
  324. onSelectionComplete : function() {} // Fired when widget has completed the process
  325. },
  326. // Initializer
  327. init: function(element, options) {
  328. // Save values
  329. this.$element = $(element);
  330. this.$element.addClass('chute-loaded');
  331. // pull in options specified by html5 tags
  332. var _htmlOptions = {
  333. app : this.$element.attr('data-app-id'),
  334. identifier : this.$element.attr('data-identifier') == undefined || this.$element.attr('data-identifier') == '' ? null : this.$element.attr('data-identifier'),
  335. disable_auto_identifier : this.$element.attr('data-disable-auto-identifier') == undefined ? this.defaults.disable_auto_identifier : true,
  336. id : this.$element.attr('data-id') == undefined ? null : this.$element.attr('data-id'),
  337. bundle_id : this.$element.attr('data-bundle-id') == undefined ? '' : this.$element.attr('data-bundle-id'),
  338. custom_id : this.$element.attr('data-custom_id') == undefined ? '' : this.$element.attr('data-custom_id'),
  339. assets : this.$element.attr('data-assets') == undefined ? this.defaults.assets : this.$element.attr('data-assets').split(','),
  340. name : this.$element.attr('data-name'),
  341. url : this.$element.attr('data-url') == undefined ? document.location.href : this.$element.attr('data-url'),
  342. tags : this.$element.attr('data-tags') == undefined ? '' : this.$element.attr('data-tags'),
  343. css : this.$element.attr('data-css') == undefined ? '' : this.$element.attr('data-css'),
  344. screens : this.$element.attr('data-screens') == undefined ? '' : this.$element.attr('data-screens'),
  345. display_template_name : this.$element.attr('data-display-template-name') == undefined ? this.defaults.display_template_name : this.$element.attr('data-display-template-name'),
  346. display_template : this.$element.attr('data-display-template') == undefined ? this.defaults.display_template : this.$element.attr('data-display-template'),
  347. collector_template_name : this.$element.attr('data-collector-template-name') == undefined ? this.defaults.collector_template_name : this.$element.attr('data-collector-template-name'),
  348. collector_template : this.$element.attr('data-collector-template') == undefined ? this.defaults.collector_template : this.$element.attr('data-collector-template'),
  349. collector_width : this.$element.attr('data-collector-width') == undefined ? this.defaults.collector_width : this.$element.attr('data-collector-width'),
  350. collector_height : this.$element.attr('data-collector-height') == undefined ? this.defaults.collector_height : this.$element.attr('data-collector-height'),
  351. template_options : this.$element.attr('data-template-options') == undefined ? this.defaults.template_options : $.parseJSON(this.$element.attr('data-template-options')),
  352. captions : this.$element.attr('data-captions') == undefined ? 'hide' : this.$element.attr('data-captions'),
  353. exclusions : this.$element.attr('data-services-exclude') == undefined ? this.defaults.exclusions : this.$element.attr('data-services-exclude'),
  354. inclusions : this.$element.attr('data-services-include') == undefined ? '' : this.$element.attr('data-services-include'),
  355. dialogTitle : this.$element.attr('data-chooser-button-text') == undefined ? 'Choose Photos' : this.$element.attr('data-chooser-button-text'),
  356. mode : this.$element.attr('data-mode') == undefined ? 'thumbnails' : this.$element.attr('data-mode'),
  357. uploadServer : this.$element.attr('data-uploadServer') == undefined ? this.defaults.uploadServer : this.$element.attr('data-uploadServer'),
  358. apiServer : this.$element.attr('data-apiServer') == undefined ? this.defaults.apiServer : this.$element.attr('data-apiServer'),
  359. cdnRoot : this.$element.attr('data-cdnRoot') == undefined ? this.defaults.cdnRoot : this.$element.attr('data-cdnRoot'),
  360. file_types : this.$element.attr('data-file-types') == undefined ? this.defaults.file_types : this.$element.attr('data-file-types'),
  361. file_limit : this.$element.attr('data-file-limit') == undefined ? this.defaults.file_limit : this.$element.attr('data-file-limit'),
  362. share_text : this.$element.attr('data-share-text') == undefined ? '' : this.$element.attr('data-share-text'),
  363. awesm_key : this.$element.attr('data-awesm-key') == undefined ? '' : this.$element.attr('data-awesm-key'),
  364. popup : this.$element.attr('data-popup') == 'popup',
  365. success_message : this.$element.attr('data-success_message') == undefined ? this.defaults.success_message : this.$element.attr('data-success_message')
  366. }
  367. // Set the options
  368. this.options = $.extend({}, this.defaults, _htmlOptions);
  369. this.options = $.extend({}, this.options, options);
  370. this.options.is_display = !(this.options.mode == 'collector' || this.options.mode == 'chooser');
  371. this.popupHtml = this.popupHtml.replace('SUCCESS_MESSAGE', this.options.success_message);
  372. if (this.options.identifier == null && !this.options.disable_auto_identifier){
  373. this.options.identifier = '';
  374. this.options.id = '';
  375. }
  376. // use popup window when in an iframe hosted by us, or on a mobile
  377. // browser, unless already specified
  378. if ((!this.options.popup && window!=window.top && (document.location.host.indexOf("chute.com") == 0 || document.location.host.indexOf("slidechute.com") == 0))
  379. || navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i)) {
  380. this.options.popup = true;
  381. }
  382. var me = this;
  383. me.$element.addClass('chute-base-widget').css('position', 'relative');
  384. me.$element.data('options', this.options);
  385. me.$element.data('instanceReference', this);
  386. if (me.options.is_display){
  387. if (this.options.display_template == null && this.options.display_template_name != null){
  388. this.options.display_template = this.options.cdnRoot + "/templates/display/" + this.options.display_template_name + "/template.js";
  389. }
  390. if (me.options.display_template && me.options.display_template.indexOf('#') == 0){
  391. me.options.display_template = $(me.options.display_template).html();
  392. me.renderData();
  393. } else if (this.options.display_template != undefined && (this.options.display_template.indexOf('http') == 0 || this.options.display_template.indexOf('//') == 0)){
  394. $.getScript(me.options.display_template, function() {
  395. me.loadTemplateData(function(){
  396. me.options.onDependenciesLoaded(me.$element);
  397. me.renderData();
  398. });
  399. });
  400. } else if (this.options.display_template_name == undefined || this.options.display_template_name == 'default' || this.options.display_template_name == ''){
  401. this.options.display_template = this.defaultDisplayTemplateHtml;
  402. this.options.onAssetsRendered = this.assetsRendered;
  403. me.renderData();
  404. }
  405. }
  406. else {
  407. if (this.options.collector_template == null && this.options.collector_template_name == null){
  408. this.options.collector_template = this.defaultCollectTemplateHtml;
  409. }
  410. else if (this.options.collector_template == null){
  411. this.options.collector_template = this.options.cdnRoot + "/templates/collector/" + this.options.collector_template_name + "/template.js";
  412. }
  413. me.renderData();
  414. }
  415. me.options.onComplete();
  416. return me;
  417. },
  418. renderData: function(page_url){
  419. var me = this;
  420. me.resetTimestamp();
  421. if (me.options.is_display){
  422. if (me.options.id == null && me.options.identifier == null){
  423. me.$element.addClass('chute-disabled').css('opacity', '0.5');
  424. return;
  425. }
  426. me.options.onAssetsLoading(me.$element);
  427. var defaultUrl = me.options.imagesUrl;
  428. // if assets already given then get the ids
  429. if (me.options.assets){
  430. var staticAssets = "";
  431. if (typeof me.options.assets == 'string')
  432. me.options.assets = me.options.assets.split(',');
  433. if (me.options.assets[0].indexOf('http') == 0) {
  434. staticAssets = "assets=" + $.map(me.options.assets, function(asset_url){
  435. var match = asset_url.match("\/m\/([^\/]+)/");
  436. return match.pop();
  437. }).join(',');
  438. } else {
  439. staticAssets = "assets=" + me.options.assets.join(',');
  440. }
  441. defaultUrl += "&" + staticAssets;
  442. }
  443. if (this.options.template_options.per_page)
  444. defaultUrl += "&per_page=" + this.options.template_options.per_page;
  445. var loadState = page_url == undefined ? -1 : (page_url == me.options.nextImagesUrl ? 0 : 1);
  446. var _url = page_url ? page_url : defaultUrl;
  447. // if there is a hash in the document, then it could point to an asset
  448. // make sure its there in the page
  449. if (loadState == -1 && document.location.hash != "" && document.location.hash != "#"){
  450. var _extraAssetId = document.location.hash.replace('#', '');
  451. _url = _url + "&extra_assets=" + _extraAssetId;
  452. }
  453. me.loadPath(_url, function(data){
  454. // new data link
  455. // don't update when requesting next and previous pages
  456. if (data.data.next_url && loadState != 1){
  457. me.options.nextImagesUrl = data.data.next_url;
  458. }
  459. // paginations link
  460. // don't update when requesting new data
  461. if (loadState != 0){
  462. me.options.nextPageUrl = data.data.next_page_url;
  463. me.options.previousPageUrl = data.data.previous_page_url;
  464. }
  465. if (data.data.assets.length > 0){
  466. if (me.options.onAssetsLoaded(me.$element, data) != false){
  467. // writeout template html in page
  468. me.displayRender(data, loadState);
  469. }
  470. }
  471. });
  472. } else {
  473. me.setupCollectorModal();
  474. me.collectorRender(function(){
  475. me.$element.find('.chute-popup').css({
  476. width: me.options.collector_width,
  477. height: me.options.collector_height,
  478. 'margin-left' : '-' + parseInt(me.options.collector_width)/2 + 'px'
  479. });
  480. if (me.options.id == null && me.options.identifier == null){
  481. me.$element.addClass('chute-disabled').css('opacity', '0.5');
  482. return;
  483. }
  484. me.makeDroppable(me.$element.find('.chutedrop'));
  485. });
  486. }
  487. },
  488. hasNextPage: function(){
  489. return (this.options.nextPageUrl != undefined);
  490. },
  491. hasPreviousPage: function(){
  492. return (this.options.previousPageUrl != undefined);
  493. },
  494. hasNewPage: function(){
  495. return (this.options.nextImagesUrl != undefined);
  496. },
  497. renderNextPage: function(){
  498. if (this.hasNextPage()){
  499. this.renderData(this.options.nextPageUrl)
  500. }
  501. },
  502. renderPreviousPage: function(){
  503. if (this.hasPreviousPage())
  504. this.renderData(this.options.previousPageUrl)
  505. },
  506. renderNewData: function(){
  507. if (this.hasNewPage()){
  508. this.renderData(this.options.nextImagesUrl)
  509. }
  510. },
  511. //////////////////////////////////////////////////////////
  512. // Loaders
  513. //////////////////////////////////////////////////////////
  514. // Load CSS dependencies
  515. loadCSS: function(url) {
  516. if(!url) return;
  517. if (typeof(url) == 'string') {
  518. if (url.indexOf('http') != 0)
  519. url = document.location.protocol + url;
  520. $('head').append( '<link rel="stylesheet" type="text/css" href="' + url + '" />' );
  521. }
  522. else {
  523. $.each(url, function(i, _url){
  524. if (_url.indexOf('http') != 0)
  525. _url = document.location.protocol + _url;
  526. $('head').append( '<link rel="stylesheet" type="text/css" href="' + _url + '" />' );
  527. });
  528. }
  529. },
  530. // Load JS dependencies
  531. loadJS: function(url, callback) {
  532. if(!url) {
  533. callback();
  534. return;
  535. }
  536. if (typeof(url) == 'string') {
  537. $.getScript(url, callback);
  538. }
  539. else if (url.length == 0) {
  540. callback();
  541. }
  542. else if (url.length == 1) {
  543. $.getScript(url[0], callback);
  544. }
  545. else {
  546. // http://www.jquery4u.com/ajax/getscript-mutiple-scripts/
  547. var // reference declaration & localization
  548. length = url.length,
  549. deferreds = [],
  550. counter = 0,
  551. idx = 0;
  552. var handler = function(){
  553. counter++;
  554. if (counter == length) {
  555. callback();
  556. }
  557. }
  558. for ( ; idx < length; idx++ ) {
  559. deferreds.push(
  560. $.getScript( url[ idx ], handler )
  561. );
  562. }
  563. }
  564. },
  565. // Load the data based on the passed data sources
  566. // Data order: Collection > Gallery > Asset
  567. loadData: function(callback) {
  568. var path = '';
  569. // Collection
  570. if (this.options.collection != null) {
  571. path = this.paths.collection.replace(':id',this.options.collection);
  572. // Gallery
  573. } else if (this.options.gallery != null) {
  574. path = this.paths.gallery.replace(':id',this.options.gallery);
  575. // Asset
  576. } else if (this.options.assets != null) {
  577. path = this.paths.asset.replace(':id',this.options.asset);
  578. }
  579. // If we have found a data call to make, complete it
  580. if (path.length) {
  581. var url = this.paths.api + path;
  582. /*this.loadJS(this.paths.api + path, function(data, status) {
  583. console.log(data)
  584. console.log(status)
  585. });*/
  586. //$.get(url, function(data, status) { console.log(data); console.log(status);}, "json");
  587. $.ajax({
  588. url : this.paths.api + path,
  589. dataType : 'jsonp',
  590. success : function(data, textStatus, jqXHR) {
  591. // console.log(data);
  592. },
  593. error : function(e) {
  594. // console.log(e);
  595. }
  596. });
  597. }
  598. },
  599. loadPath: function(path, callback){
  600. $.ajax({
  601. url : path,
  602. dataType : 'jsonp',
  603. success : function(data, textStatus, jqXHR) {
  604. callback(data);
  605. },
  606. error : function(e) {
  607. // console.log(e);
  608. }
  609. });
  610. },
  611. //////////////////////////////////////////////////////////
  612. // Load Template Data
  613. //////////////////////////////////////////////////////////
  614. loadTemplateData : function(callback){
  615. var me = this;
  616. if (this.options.is_display){
  617. this.options.display_template = eval(this.options.display_template_name + '_template_definition');
  618. if (typeof(this.options.display_template) != 'string'){
  619. this.options = $.extend({}, this.options, this.options.display_template.bindings);
  620. this.options.onTemplateLoaded(me.$element);
  621. me.loadCSS(this.options.display_template.requires.css);
  622. me.loadJS(this.options.display_template.requires.js, function(){
  623. callback();
  624. });
  625. } else {
  626. callback();
  627. }
  628. }
  629. },
  630. //////////////////////////////////////////////////////////
  631. // Collectors
  632. //////////////////////////////////////////////////////////
  633. // Load dependencies for collection mode
  634. setupCollectorModal: function() {
  635. if (!$('#chute-collector-modal').length) {
  636. // Load Reveal External
  637. this.loadCSS(this.options.cdnRoot + '/css/c.css');
  638. }
  639. },
  640. // Render Collector
  641. collectorRender: function(callback) {
  642. var me = this;
  643. if (me.options.collector_template.indexOf('http') == 0) {
  644. $.getScript(me.options.collector_template, function() {
  645. me.$element.html(me.popupHtml + eval(me.options.collector_template_name + '_template_html'));
  646. callback();
  647. });
  648. } else {
  649. me.$element.html(me.popupHtml + me.options.collector_template);
  650. callback();
  651. }
  652. },
  653. // Collector Modal
  654. collectorModal: function() {
  655. this.setupCollectorModal();
  656. // Attach the behavior
  657. this.$element.click(function(event) {
  658. event.preventDefault();
  659. })
  660. },
  661. makeDroppable: function(element) {
  662. var me = this;
  663. me.$element.find('.chute-browseButton, .chute-dropBox').click(function(event){
  664. event.preventDefault();
  665. me.openChuteBrowser();
  666. });
  667. me.openChuteBrowser = function(){
  668. if (me.options.popup){
  669. var width = 700;
  670. var height = 450
  671. var left = parseInt((screen.availWidth/2) - (width/2));
  672. var top = parseInt((screen.availHeight/2) - (height/2));
  673. var windowFeatures = "width=" + width + ",height=" + height + ",status,resizable,scrollbars=0,left=" + left + ",top=" + top + "screenX=" + left + ",screenY=" + top;
  674. window.open(me.options.browsePath, "chute_browse_popup", windowFeatures);
  675. } else if (me.options.embed) {
  676. var element = jQuery(me.options.embed).append(me.$element.find('.chute-popup iframe').clone().attr('src', me.options.browsePath));
  677. element.css({
  678. width: 600,
  679. height: 400
  680. });
  681. } else {
  682. me.$element.find(".chute-popup iframe").attr('src', me.options.browsePath);
  683. me.$element.find(".chute-popup").chuteReveal();
  684. }
  685. this.resetTimestamp();
  686. currentWidget = me;
  687. }
  688. me.$element.find('.chute-popup .close-chute-reveal-modal').click(function(){
  689. me.resetIframe();
  690. });
  691. if(element.length == 0) return;
  692. var totalImagesCount = 0;
  693. var uploadedImagesCount = 0;
  694. var totalUploadPercentDone = 0;
  695. var maxFileSize = '';
  696. var extensions = '';
  697. var browseTitle = '';
  698. if (me.options.file_types == 0) {
  699. maxFileSize = '50MB';
  700. extensions = 'jpg,gif,png,jpeg,mov,mp4,mpeg,mpeg,avi';
  701. browseTitle = 'Media Files';
  702. } else if (me.options.file_types == 1) {
  703. maxFileSize = '5MB';
  704. extensions = 'jpg,gif,png,jpeg';
  705. browseTitle = 'Image Files';
  706. } else {
  707. maxFileSize = '50MB';
  708. extensions = 'mov,mp4,mpeg,mpeg,avi';
  709. browseTitle = 'Video Files';
  710. }
  711. element.attr('id', me.options.timestamp);
  712. // upload code - start
  713. var ChuteUploader = new plupload.Uploader({
  714. runtimes : 'html5,flash,silverlight',
  715. browse_button : '',
  716. container : me.options.timestamp,
  717. max_file_size : maxFileSize,
  718. resize : { quality : 90 },
  719. url : me.options.uploadPath,
  720. flash_swf_url : '//s3.amazonaws.com/cdn.getchute.com/objects/v1/plupload.flash.swf',
  721. silverlight_xap_url : '//s3.amazonaws.com/cdn.getchute.com/objects/v1/plupload.silverlight.xap',
  722. filters : [{
  723. title : browseTitle,
  724. extensions : extensions
  725. }],
  726. drop_element : me.options.timestamp
  727. });
  728. ChuteUploader.bind('Init', function(up, params) {
  729. // ready
  730. setTimeout(function(){
  731. me.$element.find('.plupload.html5 input').attr('size', 300);
  732. }, 100);
  733. me.$element.find('.chute-select-button').click(function(event){
  734. event.preventDefault();
  735. me.openChuteBrowser();
  736. });
  737. });
  738. $('#uploadfiles').click(function(e) {
  739. ChuteUploader.start();
  740. e.preventDefault();
  741. });
  742. ChuteUploader.init();
  743. ChuteUploader.bind('FilesAdded', function(up, files) {
  744. me.options.onDrop(me.$element, files);
  745. me.setChuteFileProgress(0);
  746. $.each(files, function(i, file) {
  747. totalImagesCount++;
  748. });
  749. up.refresh(); // Reposition Flash/Silverlight
  750. // automatically start upload, no need to click a button
  751. ChuteUploader.start();
  752. });
  753. ChuteUploader.bind('UploadProgress', function(up, file) {
  754. totalUploadPercentDone = (file.percent + uploadedImagesCount*100)/totalImagesCount;
  755. me.setChuteFileProgress(totalUploadPercentDone);
  756. });
  757. ChuteUploader.bind('Error', function(up, err) {
  758. alert('Files cannot be larger than ' + maxFileSize);
  759. up.refresh(); // Reposition Flash/Silverlight
  760. });
  761. ChuteUploader.bind('FileUploaded', function(up, file) {
  762. uploadedImagesCount ++;
  763. totalUploadPercentDone = (uploadedImagesCount*100)/totalImagesCount;
  764. me.setChuteFileProgress(totalUploadPercentDone);
  765. });
  766. ChuteUploader.bind('UploadComplete', function(up, file) {
  767. totalUploadPercentDone = 100;
  768. me.setChuteFileProgress(totalUploadPercentDone);
  769. me.openChuteBrowser();
  770. });
  771. me.setChuteFileProgress = function(progress){
  772. if (progress < 100) {
  773. me.$element.find('.chute-collector').addClass('chute-uploading');
  774. } else {
  775. me.$element.find('.chute-collector').removeClass('chute-uploading');
  776. }
  777. me.$element.find('.chute-uploadProgress .chute-bar').css('width', progress + "%");
  778. }
  779. // upload code - end
  780. },
  781. resetTimestamp: function(){
  782. var d = new Date();
  783. var timestamp = ("" + (d.getTime()-d.getMilliseconds())/1000 + "-" + Math.random()).replace("0.", "");
  784. this.options.timestamp = timestamp;
  785. var toURIParams = function(obj) {
  786. var val, params=[];
  787. for (var key in obj) {
  788. val = obj[key];
  789. if (val && typeof val != 'undefined' && (val.length > 0 || typeof val === 'number')) {
  790. params.push(key + "=" + encodeURIComponent(val));
  791. }
  792. }
  793. return params.join('&');
  794. };
  795. this.options.uploadPath = this.options.uploadServer + '/upload?' + toURIParams({
  796. timestamp : this.options.timestamp,
  797. app_id : this.options.app,
  798. id : this.options.id,
  799. identifier : this.options.identifier,
  800. title : this.options.name,
  801. url : this.options.url,
  802. tags : this.options.tags,
  803. screens : this.options.screens,
  804. css : this.options.css,
  805. captions : this.options.captions,
  806. exclusions : this.options.exclusions,
  807. inclusions : this.options.inclusions
  808. });
  809. this.options.browsePath = this.options.uploadServer + '/payload/' + this.options.timestamp + "?" + toURIParams({
  810. app_id : this.options.app,
  811. id : this.options.id,
  812. identifier : this.options.identifier,
  813. custom_id : this.options.custom_id,
  814. title : this.options.name,
  815. url : this.options.url,
  816. tags : this.options.tags,
  817. host : document.location.host,
  818. page : document.location.href,
  819. screens : this.options.screens,
  820. css : this.options.css,
  821. scripts : this.options.scripts,
  822. iframe : this.options.iframe,
  823. iframe_position : this.options.iframe_position,
  824. iframe_title : this.options.iframe_title,
  825. captions : this.options.captions,
  826. exclusions : this.options.exclusions,
  827. inclusions : this.options.inclusions,
  828. dialog_title : this.options.dialogTitle,
  829. popup : this.options.popup.toString(),
  830. picker_version : this.options.picker_version,
  831. limit : this.options.limit,
  832. config : this.options.config
  833. });
  834. this.options.imagesUrl = this.options.apiServer + '/widget/data?' + toURIParams({
  835. app_id : this.options.app,
  836. id : this.options.id,
  837. identifier : this.options.identifier,
  838. origin : document.location.host
  839. });
  840. },
  841. resetIframe: function(){
  842. this.$element.find(".chute-popup iframe").attr('src', "//s3.amazonaws.com/cdn.getchute.com/html/v1/loading.html");
  843. },
  844. uploadComplete: function(data){
  845. if (data.moderated && !this.options.popup){
  846. if (data.success_message && typeof data.success_message === 'string' && data.success_message.length > 0) {
  847. this.$element.find('.chute-thanks .chute-thanks-header').html(data.success_message);
  848. }
  849. this.$element.find('.chute-thanks').chuteReveal();
  850. }
  851. this.options.onSelectionComplete(this.$element, data);
  852. if (typeof(chuteSelectionComplete) == 'function'){
  853. chuteSelectionComplete(this.$element, data);
  854. }
  855. },
  856. //////////////////////////////////////////////////////////
  857. // Presenters
  858. //////////////////////////////////////////////////////////
  859. assetsRendered: function(element, data){
  860. var chuteThumbnailReveal = jQuery('#chute-thumbnail-reveal');
  861. if (chuteThumbnailReveal.length == 0){
  862. jQuery('body').append('<div class="chute-thumbnail-reveal-modal" id="chute-thumbnail-reveal"><img src=""><a class="chute-thumbnail-source" href="" target="_blank">source</a><a class="close-chute-thumbnail-reveal-modal">&#215;</a></div>');
  863. chuteThumbnailReveal = jQuery('#chute-thumbnail-reveal');
  864. }
  865. element.find('.chute-thumbnails a').live('click', function(event){
  866. event.preventDefault();
  867. chuteThumbnailReveal.find('img').attr('src', $(this).attr('data-url'));
  868. chuteThumbnailReveal.find('.chute-thumbnail-source').attr('href', $(this).attr('data-source-url'));
  869. chuteThumbnailReveal.chuteReveal({
  870. dismissmodalclass: 'close-chute-thumbnail-reveal-modal',
  871. top: "50px"
  872. });
  873. });
  874. },
  875. // Render Display Template
  876. displayRender: function(data, loadState) {
  877. var _templateDefinition = typeof(this.options.display_template) == 'string' ? this.options.display_template : this.options.display_template.template;
  878. var _templateContainer = typeof(this.options.display_template) == 'string' ? null : this.options.display_template.templateContainer;
  879. for (var key in this.options.template_options){
  880. if (this.options.display_template.options[key]){
  881. this.options.display_template.options[key].value = this.options.template_options[key];
  882. }
  883. }
  884. if (typeof(this.options.display_template.options) != 'undefined') {
  885. this.options.display_template.options.share_text = this.options.share_text;
  886. this.options.display_template.options.awesm_key = this.options.awesm_key;
  887. this.options.display_template.options.chute_id = this.options.chute_id;
  888. this.options.display_template.options.widget_id = this.options.widget_id;
  889. }
  890. for (var i in data.data.assets) {
  891. data.data.assets[i].serialized = encodeURIComponent($.serializeJSON(data.data.assets[i]).replace(/(\r\n|\n|\r|\t)/gm, ""));
  892. }
  893. var _html = ChuteMustache.to_html(_templateDefinition, { images: data.data.assets, options : this.options.display_template.options });
  894. if (_templateContainer){
  895. _html = _templateContainer.replace("{{yield}}", _html);
  896. }
  897. var appendContent = false;
  898. if (this.options.display_template.systemOptions && this.options.display_template.systemOptions.appendContent)
  899. appendContent = true;
  900. if (loadState > -1){
  901. if (_templateContainer){
  902. // new data
  903. if (loadState == 0)
  904. this.options.templateContainer.prepend(_html);
  905. // paginated data
  906. else if (appendContent)
  907. this.options.templateContainer.append(_html);
  908. else
  909. this.options.templateContainer.html(_html);
  910. } else {
  911. // new data
  912. if (loadState == 0)
  913. this.$element.prepend(_html);
  914. // paginted data
  915. else if (appendContent)
  916. this.$element.append(_html);
  917. else
  918. this.$element.html(_html);
  919. }
  920. this.options.onAssetsReRendered(this.$element, data, this.options.display_template.options, loadState);
  921. } else {
  922. this.options.templateContainer = this.$element.html(_html);
  923. if (typeof(this.options.onAssetsRendered) == 'function')
  924. this.options.onAssetsRendered(this.$element, data, this.options.display_template.options);
  925. }
  926. }
  927. };
  928. var methods = {
  929. init : function(options){
  930. if (options == undefined) options = {};
  931. return this.each(function () {
  932. var chute = $.extend({}, CHUTE);
  933. chute.init(this, options);
  934. chute.$element.data('callback', function(){
  935. if(chute.options.popup) {
  936. // do something
  937. } else {
  938. chute.$element.find(".close-chute-reveal-modal").click();
  939. }
  940. });
  941. if (options != undefined && typeof(options.success) == "function"){
  942. chute.$element.data('success-callback', options.success);
  943. }
  944. });
  945. },
  946. chooser : function(callback){
  947. var me = $(this);
  948. if (callback != undefined)
  949. me.data('success-callback', callback);
  950. me.find('.chute-browseButton').click();
  951. return me;
  952. },
  953. close : function(){
  954. var me = $(this);
  955. me.find('.close-chute-reveal-modal').click();
  956. return me;
  957. },
  958. success : function(files){
  959. var me = $(this);
  960. if (typeof(me.data('callback')) == 'function')
  961. me.data('callback')();
  962. if (typeof(me.data('success-callback')) == 'function')
  963. me.data('success-callback')(files);
  964. return me;
  965. },
  966. widget : function(){
  967. return $(this).find('.chute-popup iframe');
  968. }
  969. }
  970. $.fn.chute = function(method, callback){
  971. if (method == undefined || typeof(method) == 'object'){
  972. return methods.init.apply( this, arguments );
  973. } else if ( methods[method] ) {
  974. return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
  975. } else {
  976. $.error( 'Method ' + method + ' does not exist on jQuery.chute' );
  977. }
  978. };
  979. })(jQuery);
  980. (function($) {
  981. if ($chuteWidget != undefined){
  982. // add listsners just once
  983. $('.chute-widget:not(.chute-loaded)').chute();
  984. return;
  985. }
  986. $chuteWidget = 'chute';
  987. if (document.addEventListener){
  988. window.addEventListener('message', receiveMessage, false);
  989. } else {
  990. window.attachEvent('onmessage', receiveMessage);
  991. }
  992. function receiveMessage(event){
  993. receiveData(event.data);
  994. }
  995. function parseJSON(data){
  996. if (typeof(JSON) != 'undefined'){
  997. return JSON.parse(data);
  998. } else {
  999. return $.parseJSON(data);
  1000. }
  1001. }
  1002. function receiveData(data){
  1003. try {
  1004. data = parseJSON(data);
  1005. } catch(ex){
  1006. data = data;
  1007. }
  1008. if (currentWidget && data.moderated != undefined){
  1009. currentWidget.$element.chute('success', data);
  1010. currentWidget.uploadComplete(data);
  1011. }
  1012. }
  1013. chuteImageLoaded = function(image){
  1014. $(image).chuteScaleImage({fade: Math.floor(Math.random()*1000)});
  1015. }
  1016. })(jQuery);
  1017. /*********************************************
  1018. mustache
  1019. **********************************************/
  1020. /*
  1021. mustache.js — Logic-less templates in JavaScript
  1022. See http://mustache.github.com/ for more info.
  1023. */
  1024. ChuteMustache = function() {
  1025. var regexCache = {};
  1026. var Renderer = function() {};
  1027. Renderer.prototype = {
  1028. otag: "{{",
  1029. ctag: "}}",
  1030. pragmas: {},
  1031. buffer: [],
  1032. pragmas_implemented: {
  1033. "IMPLICIT-ITERATOR": true
  1034. },
  1035. context: {},
  1036. render: function(template, context, partials, in_recursion) {
  1037. // reset buffer & set context
  1038. if(!in_recursion) {
  1039. this.context = context;
  1040. this.buffer = []; // TODO: make this non-lazy
  1041. }
  1042. // fail fast
  1043. if(!this.includes("", template)) {
  1044. if(in_recursion) {
  1045. return template;
  1046. } else {
  1047. this.send(template);
  1048. return;
  1049. }
  1050. }
  1051. // get the pragmas together
  1052. template = this.render_pragmas(template);
  1053. // render the template
  1054. var html = this.render_section(template, context, partials);
  1055. // render_section did not find any sections, we still need to render the tags
  1056. if (html === false) {
  1057. html = this.render_tags(template, context, partials, in_recursion);
  1058. }
  1059. if (in_recursion) {
  1060. return html;
  1061. } else {
  1062. this.sendLines(html);
  1063. }
  1064. },
  1065. /*
  1066. Sends parsed lines
  1067. */
  1068. send: function(line) {
  1069. if(line !== "") {
  1070. this.buffer.push(line);
  1071. }
  1072. },
  1073. sendLines: function(text) {
  1074. if (text) {
  1075. var lines = text.split("\n");
  1076. for (var i = 0; i < lines.length; i++) {
  1077. this.send(lines[i]);
  1078. }
  1079. }
  1080. },
  1081. /*
  1082. Looks for %PRAGMAS
  1083. */
  1084. render_pragmas: function(template) {
  1085. // no pragmas
  1086. if(!this.includes("%", template)) {
  1087. return template;
  1088. }
  1089. var that = this;
  1090. var regex = this.getCachedRegex("render_pragmas", function(otag, ctag) {
  1091. return new RegExp(otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + ctag, "g");
  1092. });
  1093. return template.replace(regex, function(match, pragma, options) {
  1094. if(!that.pragmas_implemented[pragma]) {
  1095. throw({message:
  1096. "This implementation of mustache doesn't understand the '" +
  1097. pragma + "' pragma"});
  1098. }
  1099. that.pragmas[pragma] = {};
  1100. if(options) {
  1101. var opts = options.split("=");
  1102. that.pragmas[pragma][opts[0]] = opts[1];
  1103. }
  1104. return "";
  1105. // ignore unknown pragmas silently
  1106. });
  1107. },
  1108. /*
  1109. Tries to find a partial in the curent scope and render it
  1110. */
  1111. render_partial: function(name, context, partials) {
  1112. name = this.trim(name);
  1113. if(!partials || partials[name] === undefined) {
  1114. throw({message: "unknown_partial '" + name + "'"});
  1115. }
  1116. if(typeof(context[name]) != "object") {
  1117. return this.render(partials[name], context, partials, true);
  1118. }
  1119. return this.render(partials[name], context[name], partials, true);
  1120. },
  1121. /*
  1122. Renders inverted (^) and normal (#) sections
  1123. */
  1124. render_section: function(template, context, partials) {
  1125. if(!this.includes("#", template) && !this.includes("^", template)) {
  1126. // did not render anything, there were no sections
  1127. return false;
  1128. }
  1129. var that = this;
  1130. var regex = this.getCachedRegex("render_section", function(otag, ctag) {
  1131. // This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder
  1132. return new RegExp(
  1133. "^([\\s\\S]*?)" + // all the crap at the beginning that is not {{*}} ($1)
  1134. otag + // {{
  1135. "(\\^|\\#)\\s*(.+)\\s*" + // #foo (# == $2, foo == $3)
  1136. ctag + // }}
  1137. "\n*([\\s\\S]*?)" + // between the tag ($2). leading newlines are dropped
  1138. otag + // {{
  1139. "\\/\\s*\\3\\s*" + // /foo (backreference to the opening tag).
  1140. ctag + // }}
  1141. "\\s*([\\s\\S]*)$", // everything else in the string ($4). leading whitespace is dropped.
  1142. "g");
  1143. });
  1144. // for each {{#foo}}{{/foo}} section do...
  1145. return template.replace(regex, function(match, before, type, name, content, after) {
  1146. // before contains only tags, no sections
  1147. var renderedBefore = before ? that.render_tags(before, context, partials, true) : "",
  1148. // after may contain both sections and tags, so use full rendering function
  1149. renderedAfter = after ? that.render(after, context, partials, true) : "",
  1150. // will be computed below
  1151. renderedContent,
  1152. value = that.find(name, context);
  1153. if (type === "^") { // inverted section
  1154. if (!value || that.is_array(value) && value.length === 0) {
  1155. // false or empty list, render it
  1156. renderedContent = that.render(content, context, partials, true);
  1157. } else {
  1158. renderedContent = "";
  1159. }
  1160. } else if (type === "#") { // normal section
  1161. if (that.is_array(value)) { // Enumerable, Let's loop!
  1162. renderedContent = that.map(value, function(row) {
  1163. return that.render(content, that.create_context(row), partials, true);
  1164. }).join("");
  1165. } else if (that.is_object(value)) { // Object, Use it as subcontext!
  1166. renderedContent = that.render(content, that.create_context(value),
  1167. partials, true);
  1168. } else if (typeof value === "function") {
  1169. // higher order section
  1170. renderedContent = value.call(context, content, function(text) {
  1171. return that.render(text, context, partials, true);
  1172. });
  1173. } else if (value) { // boolean section
  1174. renderedContent = that.render(content, context, partials, true);
  1175. } else {
  1176. renderedContent = "";
  1177. }
  1178. }
  1179. return renderedBefore + renderedContent + renderedAfter;
  1180. });
  1181. },
  1182. /*
  1183. Replace {{foo}} and friends with values from our view
  1184. */
  1185. render_tags: function(template, context, partials, in_recursion) {
  1186. // tit for tat
  1187. var that = this;
  1188. var new_regex = function() {
  1189. return that.getCachedRegex("render_tags", function(otag, ctag) {
  1190. return new RegExp(otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" + ctag + "+", "g");
  1191. });
  1192. };
  1193. var regex = new_regex();
  1194. var tag_replace_callback = function(match, operator, name) {
  1195. switch(operator) {
  1196. case "!": // ignore comments
  1197. return "";
  1198. case "=": // set new delimiters, rebuild the replace regexp
  1199. that.set_delimiters(name);
  1200. regex = new_regex();
  1201. return "";
  1202. case ">": // render partial
  1203. return that.render_partial(name, context, partials);
  1204. case "{": // the triple mustache is unescaped
  1205. return that.find(name, context);
  1206. default: // escape the value
  1207. return that.escape(that.find(name, context));
  1208. }
  1209. };
  1210. var lines = template.split("\n");
  1211. for(var i = 0; i < lines.length; i++) {
  1212. lines[i] = lines[i].replace(regex, tag_replace_callback, this);
  1213. if(!in_recursion) {
  1214. this.send(lines[i]);
  1215. }
  1216. }
  1217. if(in_recursion) {
  1218. return lines.join("\n");
  1219. }
  1220. },
  1221. set_delimiters: function(delimiters) {
  1222. var dels = delimiters.split(" ");
  1223. this.otag = this.escape_regex(dels[0]);
  1224. this.ctag = this.escape_regex(dels[1]);
  1225. },
  1226. escape_regex: function(text) {
  1227. // thank you Simon Willison
  1228. if(!arguments.callee.sRE) {
  1229. var specials = [
  1230. '/', '.', '*', '+', '?', '|',
  1231. '(', ')', '[', ']', '{', '}', '\\'
  1232. ];
  1233. arguments.callee.sRE = new RegExp(
  1234. '(\\' + specials.join('|\\') + ')', 'g'
  1235. );
  1236. }
  1237. return text.replace(arguments.callee.sRE, '\\$1');
  1238. },
  1239. /*
  1240. find `name` in current `context`. That is find me a value
  1241. from the view object
  1242. */
  1243. find: function(name, context) {
  1244. name = this.trim(name);
  1245. // Checks whether a value is thruthy or false or 0
  1246. function is_kinda_truthy(bool) {
  1247. return bool === false || bool === 0 || bool;
  1248. }
  1249. var value;
  1250. // check for dot notation eg. foo.bar
  1251. if(name.match(/([a-z_]+)\./ig)){
  1252. var childValue = this.walk_context(name, context);
  1253. if(is_kinda_truthy(childValue)) {
  1254. value = childValue;
  1255. }
  1256. }
  1257. else{
  1258. if(is_kinda_truthy(context[name])) {
  1259. value = context[name];
  1260. } else if(is_kinda_truthy(this.context[name])) {
  1261. value = this.context[name];
  1262. }
  1263. }
  1264. if(typeof value === "function") {
  1265. return value.apply(context);
  1266. }
  1267. if(value !== undefined) {
  1268. return value;
  1269. }
  1270. // silently ignore unkown variables
  1271. return "";
  1272. },
  1273. walk_context: function(name, context){
  1274. var path = name.split('.');
  1275. // if the var doesn't exist in current context, check the top level context
  1276. var value_context = (context[path[0]] != undefined) ? context : this.context;
  1277. var value = value_context[path.shift()];
  1278. while(value != undefined && path.length > 0){
  1279. value_context = value;
  1280. value = value[path.shift()];
  1281. }
  1282. // if the value is a function, call it, binding the correct context
  1283. if(typeof value === "function") {
  1284. return value.apply(value_context);
  1285. }
  1286. return value;
  1287. },
  1288. // Utility methods
  1289. /* includes tag */
  1290. includes: function(needle, haystack) {
  1291. return haystack.indexOf(this.otag + needle) != -1;
  1292. },
  1293. /*
  1294. Does away with nasty characters
  1295. */
  1296. escape: function(s) {
  1297. s = String(s === null ? "" : s);
  1298. return s.replace(/&(?!\w+;)|["'<>\\]/g, function(s) {
  1299. switch(s) {
  1300. case "&": return "&amp;";
  1301. case '"': return '&quot;';
  1302. case "'": return '&#39;';
  1303. case "<": return "&lt;";
  1304. case ">": return "&gt;";
  1305. default: return s;
  1306. }
  1307. });
  1308. },
  1309. // by @langalex, support for arrays of strings
  1310. create_context: function(_context) {
  1311. if(this.is_object(_context)) {
  1312. return _context;
  1313. } else {
  1314. var iterator = ".";
  1315. if(this.pragmas["IMPLICIT-ITERATOR"]) {
  1316. iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
  1317. }
  1318. var ctx = {};
  1319. ctx[iterator] = _context;
  1320. return ctx;
  1321. }
  1322. },
  1323. is_object: function(a) {
  1324. return a && typeof a == "object";
  1325. },
  1326. is_array: function(a) {
  1327. return Object.prototype.toString.call(a) === '[object Array]';
  1328. },
  1329. /*
  1330. Gets rid of leading and trailing whitespace
  1331. */
  1332. trim: function(s) {
  1333. return s.replace(/^\s*|\s*$/g, "");
  1334. },
  1335. /*
  1336. Why, why, why? Because IE. Cry, cry cry.
  1337. */
  1338. map: function(array, fn) {
  1339. if (typeof array.map == "function") {
  1340. return array.map(fn);
  1341. } else {
  1342. var r = [];
  1343. var l = array.length;
  1344. for(var i = 0; i < l; i++) {
  1345. r.push(fn(array[i]));
  1346. }
  1347. return r;
  1348. }
  1349. },
  1350. getCachedRegex: function(name, generator) {
  1351. var byOtag = regexCache[this.otag];
  1352. if (!byOtag) {
  1353. byOtag = regexCache[this.otag] = {};
  1354. }
  1355. var byCtag = byOtag[this.ctag];
  1356. if (!byCtag) {
  1357. byCtag = byOtag[this.ctag] = {};
  1358. }
  1359. var regex = byCtag[name];
  1360. if (!regex) {
  1361. regex = byCtag[name] = generator(this.otag, this.ctag);
  1362. }
  1363. return regex;
  1364. }
  1365. };
  1366. return({
  1367. name: "mustache.js",
  1368. version: "0.4.0-dev",
  1369. /*
  1370. Turns a template and view into HTML
  1371. */
  1372. to_html: function(template, view, partials, send_fun) {
  1373. var renderer = new Renderer();
  1374. if(send_fun) {
  1375. renderer.send = send_fun;
  1376. }
  1377. renderer.render(template, view || {}, partials);
  1378. if(!send_fun) {
  1379. return renderer.buffer.join("\n");
  1380. }
  1381. }
  1382. });
  1383. }();
  1384. /*********************************************
  1385. MyImgScale
  1386. **********************************************/
  1387. /*
  1388. /**
  1389. MyImgScale v0.2
  1390. MyImgScale is a jQuery plugin to scale images to fit or fill their parent container.
  1391. Note: The parent container of the image must have a defined height and width in CSS.
  1392. It is actually a merger/improvement from two existing plugins:
  1393. 1) Image Scale v1.0 by Kelly Meath (http://imgscale.kjmeath.com/), and
  1394. 2) CJ Object Scaler v3.0.0 by Doug Jones (http://www.cjboco.com/projects.cfm/project/cj-object-scaler/)
  1395. The reasons for this merger are:
  1396. . CJ Object Scaler has a conciser image resizing algorithm while Image Scale has a clearer layout.
  1397. . CJ Object Scaler has an overflow issue, ie. the image scaled is not confined in parent container.
  1398. . Both have the wrong calculation when parent container is invisible.
  1399. If the parent container has padding, the scaled image might still cross boundary.
  1400. One of the solutions is to insert a wrapper div with the same height and width as the parent container, eg:
  1401. <div id="parent" style="height: 120px; width: 90px; padding: 10px">
  1402. <div id="interimWrapper" style="height: 120px; width: 90px;">
  1403. <img src="<Your img link here>" />
  1404. </div>
  1405. </div>
  1406. I prefer to do this in application rather than in plugin as it is somewhat obtrusive.
  1407. Web: https://bitbucket.org/marshalking/myimgscale
  1408. Updated: Apr 15, 2011 by Marshal
  1409. -----------------------------------------------------------------------
  1410. MIT License
  1411. Copyright (c) 2011 Doug Jones, Kelly Meath, Marshal
  1412. Permission is hereby granted, free of charge, to any person obtaining
  1413. a copy of this software and associated documentation files (the
  1414. "Software"), to deal in the Software without restriction, including
  1415. without limitation the rights to use, copy, modify, merge, publish,
  1416. distribute, sublicense, and/or sell copies of the Software, and to
  1417. permit persons to whom the Software is furnished to do so, subject to
  1418. the following conditions:
  1419. The above copyright notice and this permission notice shall be
  1420. included in all copies or substantial portions of the Software.
  1421. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  1422. EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  1423. MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  1424. NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  1425. LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  1426. OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  1427. WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  1428. */
  1429. (function($) {
  1430. $.fn.chuteScaleImage = function(options) {
  1431. var opts = $.extend({parent: false, scale: 'fill', center: true, fade: 0}, options); // merge default options with user's
  1432. return this.each(function() {
  1433. var $img = $(this);
  1434. var $parent = opts.parent ? $img.parents(opts.parent) : $img.parent(); // if not supplied, use default direct parent
  1435. $parent.css({opacity: 0, overflow: 'hidden'}); // keep the img inside boundaries
  1436. if ($parent.length > 0) {
  1437. $img.removeAttr('height').removeAttr('width');
  1438. if (this.complete) { // img already loaded/cached
  1439. scale($img, $parent);
  1440. } else {
  1441. $img.load(function() {
  1442. scale($img, $parent);
  1443. });
  1444. }
  1445. }
  1446. });
  1447. function scale($img, $parent) {
  1448. var imgSize = getOriginalImgSize($img),
  1449. imgW = imgSize.width,
  1450. imgH = imgSize.height,
  1451. destW = $parent.width(),
  1452. destH = $parent.height(),
  1453. borderW = parseInt($img.css("borderLeftWidth"), 10) + parseInt($img.css("borderRightWidth"), 10),
  1454. borderH = parseInt($img.css("borderTopWidth"), 10) + parseInt($img.css("borderBottomWidth"), 10),
  1455. ratioX, ratioY, ratio, newWidth, newHeight;
  1456. if (destH === 0 || destW === 0) { // parent is invisible, eg. display: none
  1457. var parentSize = getHiddenElemSize($parent);
  1458. destW = parentSize.width;
  1459. destH = parentSize.height;
  1460. }
  1461. // check for valid border values. IE takes in account border size when calculating width/height so just set to 0
  1462. borderW = isNaN(borderW) ? 0 : borderW;
  1463. borderH = isNaN(borderH) ? 0 : borderH;
  1464. // calculate scale ratios
  1465. ratioX = destW / imgW;
  1466. ratioY = destH / imgH;
  1467. // Determine which algorithm to use
  1468. if (opts.scale === "fit") {
  1469. ratio = ratioX < ratioY ? ratioX : ratioY;
  1470. } else if (opts.scale === "fill") {
  1471. ratio = ratioX > ratioY ? ratioX : ratioY;
  1472. }
  1473. // calculate our new image dimensions
  1474. newWidth = parseInt(imgW * ratio, 10) - borderW;
  1475. newHeight = parseInt(imgH * ratio, 10) - borderH;
  1476. // Set new dimensions to both css and img's attributes
  1477. $img.css({
  1478. "width": newWidth,
  1479. "height": newHeight
  1480. }).attr({
  1481. "width": newWidth,
  1482. "height": newHeight
  1483. });
  1484. if (opts.center) { // set offset if center is true
  1485. $img.css("margin-left", Math.floor((destW - newWidth) / 2));
  1486. $img.css("margin-top", Math.floor((destH - newHeight) / 2));
  1487. }
  1488. if (opts.fade > 0) { // fade-in effect
  1489. $parent.animate({opacity: 1}, opts.fade);
  1490. } else {
  1491. $parent.css("opacity", 1);
  1492. }
  1493. }
  1494. /**
  1495. * To calculate the correct scale ratio, we need the image's original size rather than some preset values,
  1496. * which were set either manually in code or automatically by browser.
  1497. * Thanks FDisk for the solution:
  1498. * http://stackoverflow.com/questions/318630/get-real-image-width-and-height-with-javascript-in-safari-chrome
  1499. */
  1500. function getOriginalImgSize($img) {
  1501. var t = new Image();
  1502. t.src = $img.attr("src");
  1503. return {width: t.width, height: t.height};
  1504. }
  1505. /**
  1506. * If the element is invisible, jQuery .height() and .width() return 0 in IE.
  1507. * This function returns the hidden element's correct width and height.
  1508. * Thanks elliotlarson for the solution:
  1509. * http://stackoverflow.com/questions/2345784/jquery-get-height-of-hidden-element-in-jquery-1-4-2
  1510. */
  1511. function getHiddenElemSize(element) {
  1512. var copy = element.clone().css({visibility: 'hidden', display: 'block', position: 'absolute'});
  1513. copy.find('img').attr('onload', '');
  1514. $("body").append(copy);
  1515. var size = {width: copy.width(), height: copy.height()};
  1516. copy.remove();
  1517. return size;
  1518. }
  1519. };
  1520. })(jQuery);
  1521. jQuery.fn.hasChuteScrollBarH = function() {
  1522. var me = jQuery(this);
  1523. return (me.get(0).scrollHeight - me.innerHeight() > 2);
  1524. };
  1525. jQuery.fn.onScrollToBottom = function(callback) {
  1526. var me = jQuery(this);
  1527. var scrollElement = (me.parent().hasChuteScrollBarH() && !me.parent().is('body')) ? me.parent() : jQuery(window);
  1528. scrollElement.scroll(function(){
  1529. var scrollHeight = typeof(scrollElement.get(0).scrollHeight) == 'undefined' ? jQuery(document).height() : scrollElement.get(0).scrollHeight;
  1530. if(scrollHeight - (scrollElement.scrollTop() + scrollElement.height()) < 100) {
  1531. callback();
  1532. }
  1533. });
  1534. };
  1535. /*********************************************
  1536. jQuery Reveal
  1537. **********************************************/
  1538. /*
  1539. * jQuery Reveal Plugin 1.0
  1540. * www.ZURB.com
  1541. * Copyright 2010, ZURB
  1542. * Free to use under the MIT license.
  1543. * http://www.opensource.org/licenses/mit-license.php
  1544. */
  1545. (function($) {
  1546. /*---------------------------
  1547. Defaults for Reveal
  1548. ----------------------------*/
  1549. /*---------------------------
  1550. Extend and Execute
  1551. ----------------------------*/
  1552. $.fn.chuteReveal = function(options) {
  1553. var defaults = {
  1554. animation: 'fadeAndPop', //fade, fadeAndPop, none
  1555. animationspeed: 300, //how fast animtions are
  1556. closeonbackgroundclick: false, //if you click background will modal close?
  1557. dismissmodalclass: 'close-chute-reveal-modal', //the class of a button or element that will close an open modal
  1558. top: "100px",
  1559. backgroundOpacity: 0.5
  1560. };
  1561. //Extend dem' options
  1562. var options = $.extend({}, defaults, options);
  1563. return this.each(function() {
  1564. /*---------------------------
  1565. Global Variables
  1566. ----------------------------*/
  1567. var modal = $(this),
  1568. topMeasure = parseInt(modal.css('top')),
  1569. topOffset = modal.height() + topMeasure,
  1570. locked = false,
  1571. modalBG =$('.chute-reveal-modal-bg');
  1572. /*---------------------------
  1573. Create Modal BG
  1574. ----------------------------*/
  1575. if(modalBG.length == 0) {
  1576. modalBG = $('<div class="chute-reveal-modal-bg" />').insertAfter(modal);
  1577. }
  1578. /*---------------------------
  1579. Open & Close Animations
  1580. ----------------------------*/
  1581. //Entrance Animations
  1582. modal.bind('reveal:open', function () {
  1583. modalBG.unbind('click.modalEvent');
  1584. $('.' + options.dismissmodalclass).unbind('click.modalEvent');
  1585. if(!locked) {
  1586. lockModal();
  1587. if(options.animation == "fadeAndPop") {
  1588. modal.css({'top' : -modal.height(), 'opacity' : 1, 'visibility' : 'visible'});
  1589. modalBG.css({'opacity' : 0, 'display' : 'block'});
  1590. modalBG.animate({ opacity: options.backgroundOpacity }, options.animationspeed/2);
  1591. setTimeout(function(){
  1592. modal.animate({
  1593. "top": options.top,
  1594. "opacity" : 1
  1595. }, options.animationspeed,unlockModal());
  1596. }, options.animationspeed/2);
  1597. }
  1598. if(options.animation == "fade") {
  1599. modal.css({'opacity' : 0, 'visibility' : 'visible', 'top': $(document).scrollTop()+topMeasure});
  1600. modalBG.fadeIn(options.animationspeed/2);
  1601. setTimeout(function(){
  1602. modal.animate({
  1603. "opacity" : 1
  1604. }, options.animationspeed,unlockModal());
  1605. }, options.animationspeed/2);
  1606. }
  1607. if(options.animation == "none") {
  1608. modal.css({'visibility' : 'visible', 'top':$(document).scrollTop()+topMeasure});
  1609. modalBG.css({"display":"block"});
  1610. unlockModal()
  1611. }
  1612. }
  1613. modal.unbind('reveal:open');
  1614. });
  1615. //Closing Animation
  1616. modal.bind('reveal:close', function () {
  1617. if(!locked) {
  1618. lockModal();
  1619. if(options.animation == "fadeAndPop") {
  1620. modalBG.animate({ opacity: 0 }, options.animationspeed);
  1621. setTimeout(function(){
  1622. modalBG.css({'display' : 'none'});
  1623. }, options.animationspeed);
  1624. modal.animate({
  1625. "top": $(document).scrollTop()-topOffset + 'px',
  1626. "opacity" : 0
  1627. }, options.animationspeed/2, function() {
  1628. modal.css({'top':topMeasure, 'opacity' : 1, 'visibility' : 'hidden'});
  1629. unlockModal();
  1630. });
  1631. }
  1632. if(options.animation == "fade") {
  1633. setTimeout(function(){
  1634. modalBG.fadeOut(options.animationspeed);
  1635. }, options.animationspeed);
  1636. modal.animate({
  1637. "opacity" : 0
  1638. }, options.animationspeed, function() {
  1639. modal.css({'opacity' : 1, 'visibility' : 'hidden', 'top' : topMeasure});
  1640. unlockModal();
  1641. });
  1642. }
  1643. if(options.animation == "none") {
  1644. modal.css({'visibility' : 'hidden', 'top' : topMeasure});
  1645. modalBG.css({'display' : 'none'});
  1646. }
  1647. }
  1648. modal.unbind('reveal:close');
  1649. });
  1650. /*---------------------------
  1651. Open and add Closing Listeners
  1652. ----------------------------*/
  1653. //Open Modal Immediately
  1654. modal.trigger('reveal:open')
  1655. //Close Modal Listeners
  1656. var closeButton = $('.' + options.dismissmodalclass).bind('click.modalEvent', function () {
  1657. modal.trigger('reveal:close')
  1658. });
  1659. if(options.closeonbackgroundclick) {
  1660. modalBG.css({"cursor":"pointer"})
  1661. modalBG.bind('click.modalEvent', function () {
  1662. modal.trigger('reveal:close')
  1663. });
  1664. }
  1665. $('body').keyup(function(e) {
  1666. if(e.which===27){ modal.trigger('reveal:close'); } // 27 is the keycode for the Escape key
  1667. });
  1668. /*---------------------------
  1669. Animations Locks
  1670. ----------------------------*/
  1671. function unlockModal() {
  1672. locked = false;
  1673. }
  1674. function lockModal() {
  1675. locked = true;
  1676. }
  1677. });//each call
  1678. }//orbit plugin call
  1679. $.extend({
  1680. serializeJSON: function(obj) {
  1681. var t = typeof(obj);
  1682. if(t != "object" || obj === null) {
  1683. // simple data type
  1684. if(t == "string") obj = '"' + obj + '"';
  1685. return String(obj);
  1686. } else {
  1687. // array or object
  1688. var json = [], arr = (obj && obj.constructor == Array);
  1689. $.each(obj, function(k, v) {
  1690. t = typeof(v);
  1691. if(t == "string") v = '"' + v + '"';
  1692. else if (t == "object" & v !== null) v = $.serializeJSON(v)
  1693. json.push((arr ? "" : '"' + k + '":') + String(v));
  1694. });
  1695. return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
  1696. }
  1697. }
  1698. });
  1699. })(jQuery);
  1700. /*********************************************
  1701. PLUploader
  1702. **********************************************/
  1703. /*1.5.2*/
  1704. (function(){var f=0,l=[],n={},j={},a={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},m=/[<>&\"\']/g,b,c=window.setTimeout,d={},e;function h(){this.returnValue=false}function k(){this.cancelBubble=true}(function(o){var p=o.split(/,/),q,s,r;for(q=0;q<p.length;q+=2){r=p[q+1].split(/ /);for(s=0;s<r.length;s++){j[r[s]]=p[q]}}})("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mpga mpega mp2 mp3,audio/x-wav,wav,audio/mp4,m4a,image/bmp,bmp,image/gif,gif,image/jpeg,jpeg jpg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/vnd.rn-realvideo,rv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe");var g={VERSION:"1.5.2",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,IMAGE_FORMAT_ERROR:-700,IMAGE_MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:j,ua:(function(){var s=navigator,r=s.userAgent,t=s.vendor,p,o,q;p=/WebKit/.test(r);q=p&&t.indexOf("Apple")!==-1;o=window.opera&&window.opera.buildNumber;return{windows:navigator.platform.indexOf("Win")!==-1,ie:!p&&!o&&(/MSIE/gi).test(r)&&(/Explorer/gi).test(s.appName),webkit:p,gecko:!p&&/Gecko/.test(r),safari:q,opera:!!o}}()),typeOf:function(p){return({}).toString.call(p).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()},extend:function(o){g.each(arguments,function(p,q){if(q>0){g.each(p,function(s,r){o[r]=s})}});return o},cleanName:function(o){var p,q;q=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(p=0;p<q.length;p+=2){o=o.replace(q[p],q[p+1])}o=o.replace(/\s+/g,"_");o=o.replace(/[^a-z0-9_\-\.]+/gi,"");return o},addRuntime:function(o,p){p.name=o;l[o]=p;l.push(p);return p},guid:function(){var o=new Date().getTime().toString(32),p;for(p=0;p<5;p++){o+=Math.floor(Math.random()*65535).toString(32)}return(g.guidPrefix||"p")+o+(f++).toString(32)},buildUrl:function(p,o){var q="";g.each(o,function(s,r){q+=(q?"&":"")+encodeURIComponent(r)+"="+encodeURIComponent(s)});if(q){p+=(p.indexOf("?")>0?"&":"?")+q}return p},each:function(r,s){var q,p,o;if(r){q=r.length;if(q===b){for(p in r){if(r.hasOwnProperty(p)){if(s(r[p],p)===false){return}}}}else{for(o=0;o<q;o++){if(s(r[o],o)===false){return}}}}},formatSize:function(o){if(o===b||/\D/.test(o)){return g.translate("N/A")}if(o>1073741824){return Math.round(o/1073741824,1)+" GB"}if(o>1048576){return Math.round(o/1048576,1)+" MB"}if(o>1024){return Math.round(o/1024,1)+" KB"}return o+" b"},getPos:function(p,t){var u=0,s=0,w,v=document,q,r;p=p;t=t||v.body;function o(C){var A,B,z=0,D=0;if(C){B=C.getBoundingClientRect();A=v.compatMode==="CSS1Compat"?v.documentElement:v.body;z=B.left+A.scrollLeft;D=B.top+A.scrollTop}return{x:z,y:D}}if(p&&p.getBoundingClientRect&&(navigator.userAgent.indexOf("MSIE")>0&&v.documentMode!==8)){q=o(p);r=o(t);return{x:q.x-r.x,y:q.y-r.y}}w=p;while(w&&w!=t&&w.nodeType){u+=w.offsetLeft||0;s+=w.offsetTop||0;w=w.offsetParent}w=p.parentNode;while(w&&w!=t&&w.nodeType){u-=w.scrollLeft||0;s-=w.scrollTop||0;w=w.parentNode}return{x:u,y:s}},getSize:function(o){return{w:o.offsetWidth||o.clientWidth,h:o.offsetHeight||o.clientHeight}},parseSize:function(o){var p;if(typeof(o)=="string"){o=/^([0-9]+)([mgk]?)$/.exec(o.toLowerCase().replace(/[^0-9mkg]/g,""));p=o[2];o=+o[1];if(p=="g"){o*=1073741824}if(p=="m"){o*=1048576}if(p=="k"){o*=1024}}return o},xmlEncode:function(o){return o?(""+o).replace(m,function(p){return a[p]?"&"+a[p]+";":p}):o},toArray:function(q){var p,o=[];for(p=0;p<q.length;p++){o[p]=q[p]}return o},inArray:function(q,r){if(r){if(Array.prototype.indexOf){return Array.prototype.indexOf.call(r,q)}for(var o=0,p=r.length;o<p;o++){if(r[o]===q){return o}}}return -1},addI18n:function(o){return g.extend(n,o)},translate:function(o){return n[o]||o},isEmptyObj:function(o){if(o===b){return true}for(var p in o){return false}return true},hasClass:function(q,p){var o;if(q.className==""){return false}o=new RegExp("(^|\\s+)"+p+"(\\s+|$)");return o.test(q.className)},addClass:function(p,o){if(!g.hasClass(p,o)){p.className=p.className==""?o:p.className.replace(/\s+$/,"")+" "+o}},removeClass:function(q,p){var o=new RegExp("(^|\\s+)"+p+"(\\s+|$)");q.className=q.className.replace(o,function(s,r,t){return r===" "&&t===" "?" ":""})},getStyle:function(p,o){if(p.currentStyle){return p.currentStyle[o]}else{if(window.getComputedStyle){return window.getComputedStyle(p,null)[o]}}},addEvent:function(t,o,u){var s,r,q,p;p=arguments[3];o=o.toLowerCase();if(e===b){e="Plupload_"+g.guid()}if(t.addEventListener){s=u;t.addEventListener(o,s,false)}else{if(t.attachEvent){s=function(){var v=window.event;if(!v.target){v.target=v.srcElement}v.preventDefault=h;v.stopPropagation=k;u(v)};t.attachEvent("on"+o,s)}}if(t[e]===b){t[e]=g.guid()}if(!d.hasOwnProperty(t[e])){d[t[e]]={}}r=d[t[e]];if(!r.hasOwnProperty(o)){r[o]=[]}r[o].push({func:s,orig:u,key:p})},removeEvent:function(t,o){var r,u,q;if(typeof(arguments[2])=="function"){u=arguments[2]}else{q=arguments[2]}o=o.toLowerCase();if(t[e]&&d[t[e]]&&d[t[e]][o]){r=d[t[e]][o]}else{return}for(var p=r.length-1;p>=0;p--){if(r[p].key===q||r[p].orig===u){if(t.detachEvent){t.detachEvent("on"+o,r[p].func)}else{if(t.removeEventListener){t.removeEventListener(o,r[p].func,false)}}r[p].orig=null;r[p].func=null;r.splice(p,1);if(u!==b){break}}}if(!r.length){delete d[t[e]][o]}if(g.isEmptyObj(d[t[e]])){delete d[t[e]];try{delete t[e]}catch(s){t[e]=b}}},removeAllEvents:function(p){var o=arguments[1];if(p[e]===b||!p[e]){return}g.each(d[p[e]],function(r,q){g.removeEvent(p,q,o)})}};g.Uploader=function(s){var p={},v,u=[],r,q=false;v=new g.QueueProgress();s=g.extend({chunk_size:0,multipart:true,multi_selection:true,file_data_name:"file",filters:[]},s);function t(){var x,y=0,w;if(this.state==g.STARTED){for(w=0;w<u.length;w++){if(!x&&u[w].status==g.QUEUED){x=u[w];x.status=g.UPLOADING;if(this.trigger("BeforeUpload",x)){this.trigger("UploadFile",x)}}else{y++}}if(y==u.length){this.stop();this.trigger("UploadComplete",u)}}}function o(){var x,w;v.reset();for(x=0;x<u.length;x++){w=u[x];if(w.size!==b){v.size+=w.size;v.loaded+=w.loaded}else{v.size=b}if(w.status==g.DONE){v.uploaded++}else{if(w.status==g.FAILED){v.failed++}else{v.queued++}}}if(v.size===b){v.percent=u.length>0?Math.ceil(v.uploaded/u.length*100):0}else{v.bytesPerSec=Math.ceil(v.loaded/((+new Date()-r||1)/1000));v.percent=v.size>0?Math.ceil(v.loaded/v.size*100):0}}g.extend(this,{state:g.STOPPED,runtime:"",features:{},files:u,settings:s,total:v,id:g.guid(),init:function(){var B=this,C,y,x,A=0,z;if(typeof(s.preinit)=="function"){s.preinit(B)}else{g.each(s.preinit,function(E,D){B.bind(D,E)})}s.page_url=s.page_url||document.location.pathname.replace(/\/[^\/]+$/g,"/");if(!/^(\w+:\/\/|\/)/.test(s.url)){s.url=s.page_url+s.url}s.chunk_size=g.parseSize(s.chunk_size);s.max_file_size=g.parseSize(s.max_file_size);B.bind("FilesAdded",function(D,G){var F,E,I=0,J,H=s.filters;if(H&&H.length){J=[];g.each(H,function(K){g.each(K.extensions.split(/,/),function(L){if(/^\s*\*\s*$/.test(L)){J.push("\\.*")}else{J.push("\\."+L.replace(new RegExp("["+("/^$.*+?|()[]{}\\".replace(/./g,"\\$&"))+"]","g"),"\\$&"))}})});J=new RegExp(J.join("|")+"$","i")}for(F=0;F<G.length;F++){E=G[F];E.loaded=0;E.percent=0;E.status=g.QUEUED;if(J&&!J.test(E.name)){D.trigger("Error",{code:g.FILE_EXTENSION_ERROR,message:g.translate("File extension error."),file:E});continue}if(E.size!==b&&E.size>s.max_file_size){D.trigger("Error",{code:g.FILE_SIZE_ERROR,message:g.translate("File size error."),file:E});continue}u.push(E);I++}if(I){c(function(){B.trigger("QueueChanged");B.refresh()},1)}else{return false}});if(s.unique_names){B.bind("UploadFile",function(D,E){var G=E.name.match(/\.([^.]+)$/),F="tmp";if(G){F=G[1]}E.target_name=E.id+"."+F})}B.bind("UploadProgress",function(D,E){E.percent=E.size>0?Math.ceil(E.loaded/E.size*100):100;o()});B.bind("StateChanged",function(D){if(D.state==g.STARTED){r=(+new Date())}else{if(D.state==g.STOPPED){for(C=D.files.length-1;C>=0;C--){if(D.files[C].status==g.UPLOADING){D.files[C].status=g.QUEUED;o()}}}}});B.bind("QueueChanged",o);B.bind("Error",function(D,E){if(E.file){E.file.status=g.FAILED;o();if(D.state==g.STARTED){c(function(){t.call(B)},1)}}});B.bind("FileUploaded",function(D,E){E.status=g.DONE;E.loaded=E.size;D.trigger("UploadProgress",E);c(function(){t.call(B)},1)});if(s.runtimes){y=[];z=s.runtimes.split(/\s?,\s?/);for(C=0;C<z.length;C++){if(l[z[C]]){y.push(l[z[C]])}}}else{y=l}function w(){var G=y[A++],F,D,E;if(G){F=G.getFeatures();D=B.settings.required_features;if(D){D=D.split(",");for(E=0;E<D.length;E++){if(!F[D[E]]){w();return}}}G.init(B,function(H){if(H&&H.success){B.features=F;B.runtime=G.name;B.trigger("Init",{runtime:G.name});B.trigger("PostInit");B.refresh()}else{w()}})}else{B.trigger("Error",{code:g.INIT_ERROR,message:g.translate("Init error.")})}}w();if(typeof(s.init)=="function"){s.init(B)}else{g.each(s.init,function(E,D){B.bind(D,E)})}},refresh:function(){this.trigger("Refresh")},start:function(){if(this.state!=g.STARTED){this.state=g.STARTED;this.trigger("StateChanged");t.call(this)}},stop:function(){if(this.state!=g.STOPPED){this.state=g.STOPPED;this.trigger("CancelUpload");this.trigger("StateChanged")}},disableBrowse:function(){q=arguments[0]!==b?arguments[0]:true;this.trigger("DisableBrowse",q)},getFile:function(x){var w;for(w=u.length-1;w>=0;w--){if(u[w].id===x){return u[w]}}},removeFile:function(x){var w;for(w=u.length-1;w>=0;w--){if(u[w].id===x.id){return this.splice(w,1)[0]}}},splice:function(y,w){var x;x=u.splice(y===b?0:y,w===b?u.length:w);this.trigger("FilesRemoved",x);this.trigger("QueueChanged");return x},trigger:function(x){var z=p[x.toLowerCase()],y,w;if(z){w=Array.prototype.slice.call(arguments);w[0]=this;for(y=0;y<z.length;y++){if(z[y].func.apply(z[y].scope,w)===false){return false}}}return true},hasEventListener:function(w){return !!p[w.toLowerCase()]},bind:function(w,y,x){var z;w=w.toLowerCase();z=p[w]||[];z.push({func:y,scope:x||this});p[w]=z},unbind:function(w){w=w.toLowerCase();var z=p[w],x,y=arguments[1];if(z){if(y!==b){for(x=z.length-1;x>=0;x--){if(z[x].func===y){z.splice(x,1);break}}}else{z=[]}if(!z.length){delete p[w]}}},unbindAll:function(){var w=this;g.each(p,function(y,x){w.unbind(x)})},destroy:function(){this.stop();this.trigger("Destroy");this.unbindAll()}})};g.File=function(r,p,q){var o=this;o.id=r;o.name=p;o.size=q;o.loaded=0;o.percent=0;o.status=0};g.Runtime=function(){this.getFeatures=function(){};this.init=function(o,p){}};g.QueueProgress=function(){var o=this;o.size=0;o.loaded=0;o.uploaded=0;o.failed=0;o.queued=0;o.percent=0;o.bytesPerSec=0;o.reset=function(){o.size=o.loaded=o.uploaded=o.failed=o.queued=o.percent=o.bytesPerSec=0}};g.runtimes={};window.plupload=g})();(function(){if(window.google&&google.gears){return}var a=null;if(typeof GearsFactory!="undefined"){a=new GearsFactory()}else{try{a=new ActiveXObject("Gears.Factory");if(a.getBuildInfo().indexOf("ie_mobile")!=-1){a.privateSetGlobalObject(this)}}catch(b){if((typeof navigator.mimeTypes!="undefined")&&navigator.mimeTypes["application/x-googlegears"]){a=document.createElement("object");a.style.display="none";a.width=0;a.height=0;a.type="application/x-googlegears";document.documentElement.appendChild(a)}}}if(!a){return}if(!window.google){window.google={}}if(!google.gears){google.gears={factory:a}}})();(function(e,b,c,d){var f={};function a(h,k,m){var g,j,l,o;j=google.gears.factory.create("beta.canvas");try{j.decode(h);if(!k.width){k.width=j.width}if(!k.height){k.height=j.height}o=Math.min(width/j.width,height/j.height);if(o<1||(o===1&&m==="image/jpeg")){j.resize(Math.round(j.width*o),Math.round(j.height*o));if(k.quality){return j.encode(m,{quality:k.quality/100})}return j.encode(m)}}catch(n){}return h}c.runtimes.Gears=c.addRuntime("gears",{getFeatures:function(){return{dragdrop:true,jpgresize:true,pngresize:true,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(l,n){var m,h,g=false;if(!e.google||!google.gears){return n({success:false})}try{m=google.gears.factory.create("beta.desktop")}catch(k){return n({success:false})}function j(q){var p,o,r=[],s;for(o=0;o<q.length;o++){p=q[o];s=c.guid();f[s]=p.blob;r.push(new c.File(s,p.name,p.blob.length))}l.trigger("FilesAdded",r)}l.bind("PostInit",function(){var p=l.settings,o=b.getElementById(p.drop_element);if(o){c.addEvent(o,"dragover",function(q){m.setDropEffect(q,"copy");q.preventDefault()},l.id);c.addEvent(o,"drop",function(r){var q=m.getDragData(r,"application/x-gears-files");if(q){j(q.files)}r.preventDefault()},l.id);o=0}c.addEvent(b.getElementById(p.browse_button),"click",function(u){var t=[],r,q,s;u.preventDefault();if(g){return}no_type_restriction:for(r=0;r<p.filters.length;r++){s=p.filters[r].extensions.split(",");for(q=0;q<s.length;q++){if(s[q]==="*"){t=[];break no_type_restriction}t.push("."+s[q])}}m.openFiles(j,{singleFile:!p.multi_selection,filter:t})},l.id)});l.bind("CancelUpload",function(){if(h.abort){h.abort()}});l.bind("UploadFile",function(u,r){var w=0,v,s,t=0,q=u.settings.resize,o;if(q&&/\.(png|jpg|jpeg)$/i.test(r.name)){f[r.id]=a(f[r.id],q,/\.png$/i.test(r.name)?"image/png":"image/jpeg")}r.size=f[r.id].length;s=u.settings.chunk_size;o=s>0;v=Math.ceil(r.size/s);if(!o){s=r.size;v=1}function p(){var C,y=u.settings.multipart,x=0,B={name:r.target_name||r.name},z=u.settings.url;function A(E){var D,J="----pluploadboundary"+c.guid(),G="--",I="\r\n",F,H;if(y){h.setRequestHeader("Content-Type","multipart/form-data; boundary="+J);D=google.gears.factory.create("beta.blobbuilder");c.each(c.extend(B,u.settings.multipart_params),function(L,K){D.append(G+J+I+'Content-Disposition: form-data; name="'+K+'"'+I+I);D.append(L+I)});H=c.mimeTypes[r.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream";D.append(G+J+I+'Content-Disposition: form-data; name="'+u.settings.file_data_name+'"; filename="'+r.name+'"'+I+"Content-Type: "+H+I+I);D.append(E);D.append(I+G+J+G+I);F=D.getAsBlob();x=F.length-E.length;E=F}h.send(E)}if(r.status==c.DONE||r.status==c.FAILED||u.state==c.STOPPED){return}if(o){B.chunk=w;B.chunks=v}C=Math.min(s,r.size-(w*s));if(!y){z=c.buildUrl(u.settings.url,B)}h=google.gears.factory.create("beta.httprequest");h.open("POST",z);if(!y){h.setRequestHeader("Content-Disposition",'attachment; filename="'+r.name+'"');h.setRequestHeader("Content-Type","application/octet-stream")}c.each(u.settings.headers,function(E,D){h.setRequestHeader(D,E)});h.upload.onprogress=function(D){r.loaded=t+D.loaded-x;u.trigger("UploadProgress",r)};h.onreadystatechange=function(){var D;if(h.readyState==4&&u.state!==c.STOPPED){if(h.status==200){D={chunk:w,chunks:v,response:h.responseText,status:h.status};u.trigger("ChunkUploaded",r,D);if(D.cancelled){r.status=c.FAILED;return}t+=C;if(++w>=v){r.status=c.DONE;u.trigger("FileUploaded",r,{response:h.responseText,status:h.status})}else{p()}}else{u.trigger("Error",{code:c.HTTP_ERROR,message:c.translate("HTTP Error."),file:r,chunk:w,chunks:v,status:h.status})}}};if(w<v){A(f[r.id].slice(w*s,C))}}p()});l.bind("DisableBrowse",function(o,p){g=p});l.bind("Destroy",function(o){var p,q,r={browseButton:o.settings.browse_button,dropElm:o.settings.drop_element};for(p in r){q=b.getElementById(r[p]);if(q){c.removeAllEvents(q,o.id)}}});n({success:true})}})})(window,document,plupload);(function(g,b,d,e){var a={},h={};function c(o){var n,m=typeof o,j,l,k;if(o===e||o===null){return"null"}if(m==="string"){n="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(r,q){var p=n.indexOf(q);if(p+1){return"\\"+n.charAt(p+1)}r=q.charCodeAt().toString(16);return"\\u"+"0000".substring(r.length)+r})+'"'}if(m=="object"){j=o.length!==e;n="";if(j){for(l=0;l<o.length;l++){if(n){n+=","}n+=c(o[l])}n="["+n+"]"}else{for(k in o){if(o.hasOwnProperty(k)){if(n){n+=","}n+=c(k)+":"+c(o[k])}}n="{"+n+"}"}return n}return""+o}function f(s){var v=false,j=null,o=null,k,l,m,u,n,q=0;try{try{o=new ActiveXObject("AgControl.AgControl");if(o.IsVersionSupported(s)){v=true}o=null}catch(r){var p=navigator.plugins["Silverlight Plug-In"];if(p){k=p.description;if(k==="1.0.30226.2"){k="2.0.30226.2"}l=k.split(".");while(l.length>3){l.pop()}while(l.length<4){l.push(0)}m=s.split(".");while(m.length>4){m.pop()}do{u=parseInt(m[q],10);n=parseInt(l[q],10);q++}while(q<m.length&&u===n);if(u<=n&&!isNaN(u)){v=true}}}}catch(t){v=false}return v}d.silverlight={trigger:function(n,k){var m=a[n],l,j;if(m){j=d.toArray(arguments).slice(1);j[0]="Silverlight:"+k;setTimeout(function(){m.trigger.apply(m,j)},0)}}};d.runtimes.Silverlight=d.addRuntime("silverlight",{getFeatures:function(){return{jpgresize:true,pngresize:true,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(p,q){var o,m="",n=p.settings.filters,l,k=b.body;if(!f("2.0.31005.0")||(g.opera&&g.opera.buildNumber)){q({success:false});return}h[p.id]=false;a[p.id]=p;o=b.createElement("div");o.id=p.id+"_silverlight_container";d.extend(o.style,{position:"absolute",top:"0px",background:p.settings.shim_bgcolor||"transparent",zIndex:99999,width:"100px",height:"100px",overflow:"hidden",opacity:p.settings.shim_bgcolor||b.documentMode>8?"":0.01});o.className="plupload silverlight";if(p.settings.container){k=b.getElementById(p.settings.container);if(d.getStyle(k,"position")==="static"){k.style.position="relative"}}k.appendChild(o);for(l=0;l<n.length;l++){m+=(m!=""?"|":"")+n[l].title+" | *."+n[l].extensions.replace(/,/g,";*.")}o.innerHTML='<object id="'+p.id+'_silverlight" data="data:application/x-silverlight," type="application/x-silverlight-2" style="outline:none;" width="1024" height="1024"><param name="source" value="'+p.settings.silverlight_xap_url+'"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="id='+p.id+",filter="+m+",multiselect="+p.settings.multi_selection+'"/></object>';function j(){return b.getElementById(p.id+"_silverlight").content.Upload}p.bind("Silverlight:Init",function(){var r,s={};if(h[p.id]){return}h[p.id]=true;p.bind("Silverlight:StartSelectFiles",function(t){r=[]});p.bind("Silverlight:SelectFile",function(t,w,u,v){var x;x=d.guid();s[x]=w;s[w]=x;r.push(new d.File(x,u,v))});p.bind("Silverlight:SelectSuccessful",function(){if(r.length){p.trigger("FilesAdded",r)}});p.bind("Silverlight:UploadChunkError",function(t,w,u,x,v){p.trigger("Error",{code:d.IO_ERROR,message:"IO Error.",details:v,file:t.getFile(s[w])})});p.bind("Silverlight:UploadFileProgress",function(t,x,u,w){var v=t.getFile(s[x]);if(v.status!=d.FAILED){v.size=w;v.loaded=u;t.trigger("UploadProgress",v)}});p.bind("Refresh",function(t){var u,v,w;u=b.getElementById(t.settings.browse_button);if(u){v=d.getPos(u,b.getElementById(t.settings.container));w=d.getSize(u);d.extend(b.getElementById(t.id+"_silverlight_container").style,{top:v.y+"px",left:v.x+"px",width:w.w+"px",height:w.h+"px"})}});p.bind("Silverlight:UploadChunkSuccessful",function(t,w,u,z,y){var x,v=t.getFile(s[w]);x={chunk:u,chunks:z,response:y};t.trigger("ChunkUploaded",v,x);if(v.status!=d.FAILED&&t.state!==d.STOPPED){j().UploadNextChunk()}if(u==z-1){v.status=d.DONE;t.trigger("FileUploaded",v,{response:y})}});p.bind("Silverlight:UploadSuccessful",function(t,w,u){var v=t.getFile(s[w]);v.status=d.DONE;t.trigger("FileUploaded",v,{response:u})});p.bind("FilesRemoved",function(t,v){var u;for(u=0;u<v.length;u++){j().RemoveFile(s[v[u].id])}});p.bind("UploadFile",function(t,v){var w=t.settings,u=w.resize||{};j().UploadFile(s[v.id],t.settings.url,c({name:v.target_name||v.name,mime:d.mimeTypes[v.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream",chunk_size:w.chunk_size,image_width:u.width,image_height:u.height,image_quality:u.quality||90,multipart:!!w.multipart,multipart_params:w.multipart_params||{},file_data_name:w.file_data_name,headers:w.headers}))});p.bind("CancelUpload",function(){j().CancelUpload()});p.bind("Silverlight:MouseEnter",function(t){var u,v;u=b.getElementById(p.settings.browse_button);v=t.settings.browse_button_hover;if(u&&v){d.addClass(u,v)}});p.bind("Silverlight:MouseLeave",function(t){var u,v;u=b.getElementById(p.settings.browse_button);v=t.settings.browse_button_hover;if(u&&v){d.removeClass(u,v)}});p.bind("Silverlight:MouseLeftButtonDown",function(t){var u,v;u=b.getElementById(p.settings.browse_button);v=t.settings.browse_button_active;if(u&&v){d.addClass(u,v);d.addEvent(b.body,"mouseup",function(){d.removeClass(u,v)})}});p.bind("Sliverlight:StartSelectFiles",function(t){var u,v;u=b.getElementById(p.settings.browse_button);v=t.settings.browse_button_active;if(u&&v){d.removeClass(u,v)}});p.bind("DisableBrowse",function(t,u){j().DisableBrowse(u)});p.bind("Destroy",function(t){var u;d.removeAllEvents(b.body,t.id);delete h[t.id];delete a[t.id];u=b.getElementById(t.id+"_silverlight_container");if(u){k.removeChild(u)}});q({success:true})})}})})(window,document,plupload);(function(f,b,d,e){var a={},g={};function c(){var h;try{h=navigator.plugins["Shockwave Flash"];h=h.description}catch(k){try{h=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(j){h="0.0"}}h=h.match(/\d+/g);return parseFloat(h[0]+"."+h[1])}d.flash={trigger:function(k,h,j){setTimeout(function(){var n=a[k],m,l;if(n){n.trigger("Flash:"+h,j)}},0)}};d.runtimes.Flash=d.addRuntime("flash",{getFeatures:function(){return{jpgresize:true,pngresize:true,maxWidth:8091,maxHeight:8091,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(n,p){var l,m,h=0,j=b.body;if(c()<10){p({success:false});return}g[n.id]=false;a[n.id]=n;l=b.getElementById(n.settings.browse_button);m=b.createElement("div");m.id=n.id+"_flash_container";d.extend(m.style,{position:"absolute",top:"0px",background:n.settings.shim_bgcolor||"transparent",zIndex:99999,width:"100%",height:"100%"});m.className="plupload flash";if(n.settings.container){j=b.getElementById(n.settings.container);if(d.getStyle(j,"position")==="static"){j.style.position="relative"}}j.appendChild(m);(function(){var q,r;q='<object id="'+n.id+'_flash" type="application/x-shockwave-flash" data="'+n.settings.flash_swf_url+'" ';if(d.ua.ie){q+='classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '}q+='width="100%" height="100%" style="outline:0"><param name="movie" value="'+n.settings.flash_swf_url+'" /><param name="flashvars" value="id='+escape(n.id)+'" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>';if(d.ua.ie){r=b.createElement("div");m.appendChild(r);r.outerHTML=q;r=null}else{m.innerHTML=q}}());function o(){return b.getElementById(n.id+"_flash")}function k(){if(h++>5000){p({success:false});return}if(!g[n.id]){setTimeout(k,1)}}k();l=m=null;n.bind("Flash:Init",function(){var r={},q;o().setFileFilters(n.settings.filters,n.settings.multi_selection);if(g[n.id]){return}g[n.id]=true;n.bind("UploadFile",function(s,u){var v=s.settings,t=n.settings.resize||{};o().uploadFile(r[u.id],v.url,{name:u.target_name||u.name,mime:d.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream",chunk_size:v.chunk_size,width:t.width,height:t.height,quality:t.quality,multipart:v.multipart,multipart_params:v.multipart_params||{},file_data_name:v.file_data_name,format:/\.(jpg|jpeg)$/i.test(u.name)?"jpg":"png",headers:v.headers,urlstream_upload:v.urlstream_upload})});n.bind("CancelUpload",function(){o().cancelUpload()});n.bind("Flash:UploadProcess",function(t,s){var u=t.getFile(r[s.id]);if(u.status!=d.FAILED){u.loaded=s.loaded;u.size=s.size;t.trigger("UploadProgress",u)}});n.bind("Flash:UploadChunkComplete",function(s,u){var v,t=s.getFile(r[u.id]);v={chunk:u.chunk,chunks:u.chunks,response:u.text};s.trigger("ChunkUploaded",t,v);if(t.status!==d.FAILED&&s.state!==d.STOPPED){o().uploadNextChunk()}if(u.chunk==u.chunks-1){t.status=d.DONE;s.trigger("FileUploaded",t,{response:u.text})}});n.bind("Flash:SelectFiles",function(s,v){var u,t,w=[],x;for(t=0;t<v.length;t++){u=v[t];x=d.guid();r[x]=u.id;r[u.id]=x;w.push(new d.File(x,u.name,u.size))}if(w.length){n.trigger("FilesAdded",w)}});n.bind("Flash:SecurityError",function(s,t){n.trigger("Error",{code:d.SECURITY_ERROR,message:d.translate("Security error."),details:t.message,file:n.getFile(r[t.id])})});n.bind("Flash:GenericError",function(s,t){n.trigger("Error",{code:d.GENERIC_ERROR,message:d.translate("Generic error."),details:t.message,file:n.getFile(r[t.id])})});n.bind("Flash:IOError",function(s,t){n.trigger("Error",{code:d.IO_ERROR,message:d.translate("IO error."),details:t.message,file:n.getFile(r[t.id])})});n.bind("Flash:ImageError",function(s,t){n.trigger("Error",{code:parseInt(t.code,10),message:d.translate("Image error."),file:n.getFile(r[t.id])})});n.bind("Flash:StageEvent:rollOver",function(s){var t,u;t=b.getElementById(n.settings.browse_button);u=s.settings.browse_button_hover;if(t&&u){d.addClass(t,u)}});n.bind("Flash:StageEvent:rollOut",function(s){var t,u;t=b.getElementById(n.settings.browse_button);u=s.settings.browse_button_hover;if(t&&u){d.removeClass(t,u)}});n.bind("Flash:StageEvent:mouseDown",function(s){var t,u;t=b.getElementById(n.settings.browse_button);u=s.settings.browse_button_active;if(t&&u){d.addClass(t,u);d.addEvent(b.body,"mouseup",function(){d.removeClass(t,u)},s.id)}});n.bind("Flash:StageEvent:mouseUp",function(s){var t,u;t=b.getElementById(n.settings.browse_button);u=s.settings.browse_button_active;if(t&&u){d.removeClass(t,u)}});n.bind("Flash:ExifData",function(s,t){n.trigger("ExifData",n.getFile(r[t.id]),t.data)});n.bind("Flash:GpsData",function(s,t){n.trigger("GpsData",n.getFile(r[t.id]),t.data)});n.bind("QueueChanged",function(s){n.refresh()});n.bind("FilesRemoved",function(s,u){var t;for(t=0;t<u.length;t++){o().removeFile(r[u[t].id])}});n.bind("StateChanged",function(s){n.refresh()});n.bind("Refresh",function(s){var t,u,v;o().setFileFilters(n.settings.filters,n.settings.multi_selection);t=b.getElementById(s.settings.browse_button);if(t){u=d.getPos(t,b.getElementById(s.settings.container));v=d.getSize(t);d.extend(b.getElementById(s.id+"_flash_container").style,{top:u.y+"px",left:u.x+"px",width:v.w+"px",height:v.h+"px"})}});n.bind("DisableBrowse",function(s,t){o().disableBrowse(t)});n.bind("Destroy",function(s){var t;d.removeAllEvents(b.body,s.id);delete g[s.id];delete a[s.id];t=b.getElementById(s.id+"_flash_container");if(t){j.removeChild(t)}});p({success:true})})}})})(window,document,plupload);(function(a){a.runtimes.BrowserPlus=a.addRuntime("browserplus",{getFeatures:function(){return{dragdrop:true,jpgresize:true,pngresize:true,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(g,j){var e=window.BrowserPlus,h={},d=g.settings,c=d.resize;function f(o){var n,m,k=[],l,p;for(m=0;m<o.length;m++){l=o[m];p=a.guid();h[p]=l;k.push(new a.File(p,l.name,l.size))}if(m){g.trigger("FilesAdded",k)}}function b(){var k=false;g.bind("PostInit",function(){var o,m=d.drop_element,q=g.id+"_droptarget",l=document.getElementById(m),n;function r(t,s){e.DragAndDrop.AddDropTarget({id:t},function(u){e.DragAndDrop.AttachCallbacks({id:t,hover:function(v){if(!v&&s){s()}},drop:function(v){if(s){s()}f(v)}},function(){})})}function p(){document.getElementById(q).style.top="-1000px"}if(l){if(document.attachEvent&&(/MSIE/gi).test(navigator.userAgent)){o=document.createElement("div");o.setAttribute("id",q);a.extend(o.style,{position:"absolute",top:"-1000px",background:"red",filter:"alpha(opacity=0)",opacity:0});document.body.appendChild(o);a.addEvent(l,"dragenter",function(t){var s,u;s=document.getElementById(m);u=a.getPos(s);a.extend(document.getElementById(q).style,{top:u.y+"px",left:u.x+"px",width:s.offsetWidth+"px",height:s.offsetHeight+"px"})});r(q,p)}else{r(m)}}a.addEvent(document.getElementById(d.browse_button),"click",function(y){var s=[],u,t,x=d.filters,w,v;y.preventDefault();if(k){return}no_type_restriction:for(u=0;u<x.length;u++){w=x[u].extensions.split(",");for(t=0;t<w.length;t++){if(w[t]==="*"){s=[];break no_type_restriction}v=a.mimeTypes[w[t]];if(v&&a.inArray(v,s)===-1){s.push(a.mimes[w[t]])}}}e.FileBrowse.OpenBrowseDialog({mimeTypes:s},function(z){if(z.success){f(z.value)}})});l=o=null});g.bind("CancelUpload",function(){e.Uploader.cancel()});g.bind("DisableBrowse",function(l,m){k=m});g.bind("UploadFile",function(o,l){var n=h[l.id],t={},m=o.settings.chunk_size,p,q=[];function s(u,w){var v;if(l.status==a.FAILED){return}t.name=l.target_name||l.name;if(m){t.chunk=""+u;t.chunks=""+w}v=q.shift();e.Uploader.upload({url:o.settings.url,files:{file:v},cookies:document.cookies,postvars:a.extend(t,o.settings.multipart_params),progressCallback:function(z){var y,x=0;p[u]=parseInt(z.filePercent*v.size/100,10);for(y=0;y<p.length;y++){x+=p[y]}l.loaded=x;o.trigger("UploadProgress",l)}},function(y){var x,z;if(y.success){x=y.value.statusCode;if(m){o.trigger("ChunkUploaded",l,{chunk:u,chunks:w,response:y.value.body,status:x})}if(q.length>0){s(++u,w)}else{l.status=a.DONE;o.trigger("FileUploaded",l,{response:y.value.body,status:x});if(x>=400){o.trigger("Error",{code:a.HTTP_ERROR,message:a.translate("HTTP Error."),file:l,status:x})}}}else{o.trigger("Error",{code:a.GENERIC_ERROR,message:a.translate("Generic Error."),file:l,details:y.error})}})}function r(u){l.size=u.size;if(m){e.FileAccess.chunk({file:u,chunkSize:m},function(x){if(x.success){var y=x.value,v=y.length;p=Array(v);for(var w=0;w<v;w++){p[w]=0;q.push(y[w])}s(0,v)}})}else{p=Array(1);q.push(u);s(0,1)}}if(c&&/\.(png|jpg|jpeg)$/i.test(l.name)){BrowserPlus.ImageAlter.transform({file:n,quality:c.quality||90,actions:[{scale:{maxwidth:c.width,maxheight:c.height}}]},function(u){if(u.success){r(u.value.file)}})}else{r(n)}});j({success:true})}if(e){e.init(function(l){var k=[{service:"Uploader",version:"3"},{service:"DragAndDrop",version:"1"},{service:"FileBrowse",version:"1"},{service:"FileAccess",version:"2"}];if(c){k.push({service:"ImageAlter",version:"4"})}if(l.success){e.require({services:k},function(m){if(m.success){b()}else{j()}})}else{j()}})}else{j()}}})})(plupload);(function(h,k,j,e){var c={},g;function m(o,p){var n;if("FileReader" in h){n=new FileReader();n.readAsDataURL(o);n.onload=function(){p(n.result)}}else{return p(o.getAsDataURL())}}function l(o,p){var n;if("FileReader" in h){n=new FileReader();n.readAsBinaryString(o);n.onload=function(){p(n.result)}}else{return p(o.getAsBinary())}}function d(r,p,n,v){var q,o,u,s,t=this;m(c[r.id],function(w){q=k.createElement("canvas");q.style.display="none";k.body.appendChild(q);o=q.getContext("2d");u=new Image();u.onerror=u.onabort=function(){v({success:false})};u.onload=function(){var B,x,z,y,A;if(!p.width){p.width=u.width}if(!p.height){p.height=u.height}s=Math.min(p.width/u.width,p.height/u.height);if(s<1||(s===1&&n==="image/jpeg")){B=Math.round(u.width*s);x=Math.round(u.height*s);q.width=B;q.height=x;o.drawImage(u,0,0,B,x);if(n==="image/jpeg"){y=new f(atob(w.substring(w.indexOf("base64,")+7)));if(y.headers&&y.headers.length){A=new a();if(A.init(y.get("exif")[0])){A.setExif("PixelXDimension",B);A.setExif("PixelYDimension",x);y.set("exif",A.getBinary());if(t.hasEventListener("ExifData")){t.trigger("ExifData",r,A.EXIF())}if(t.hasEventListener("GpsData")){t.trigger("GpsData",r,A.GPS())}}}if(p.quality){try{w=q.toDataURL(n,p.quality/100)}catch(C){w=q.toDataURL(n)}}}else{w=q.toDataURL(n)}w=w.substring(w.indexOf("base64,")+7);w=atob(w);if(y&&y.headers&&y.headers.length){w=y.restore(w);y.purge()}q.parentNode.removeChild(q);v({success:true,data:w})}else{v({success:false})}};u.src=w})}j.runtimes.Html5=j.addRuntime("html5",{getFeatures:function(){var s,o,r,q,p,n;o=r=p=n=false;if(h.XMLHttpRequest){s=new XMLHttpRequest();r=!!s.upload;o=!!(s.sendAsBinary||s.upload)}if(o){q=!!(s.sendAsBinary||(h.Uint8Array&&h.ArrayBuffer));p=!!(File&&(File.prototype.getAsDataURL||h.FileReader)&&q);n=!!(File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice))}g=j.ua.safari&&j.ua.windows;return{html5:o,dragdrop:(function(){var t=k.createElement("div");return("draggable" in t)||("ondragstart" in t&&"ondrop" in t)}()),jpgresize:p,pngresize:p,multipart:p||!!h.FileReader||!!h.FormData,canSendBinary:q,cantSendBlobInFormData:!!(j.ua.gecko&&h.FormData&&h.FileReader&&!FileReader.prototype.readAsArrayBuffer),progress:r,chunks:n,multi_selection:!(j.ua.safari&&j.ua.windows),triggerDialog:(j.ua.gecko&&h.FormData||j.ua.webkit)}},init:function(p,r){var n,q;function o(w){var u,t,v=[],x,s={};for(t=0;t<w.length;t++){u=w[t];if(s[u.name]){continue}s[u.name]=true;x=j.guid();c[x]=u;v.push(new j.File(x,u.fileName||u.name,u.fileSize||u.size))}if(v.length){p.trigger("FilesAdded",v)}}n=this.getFeatures();if(!n.html5){r({success:false});return}p.bind("Init",function(w){var G,F,C=[],v,D,t=w.settings.filters,u,B,s=k.body,E;G=k.createElement("div");G.id=w.id+"_html5_container";j.extend(G.style,{position:"absolute",background:p.settings.shim_bgcolor||"transparent",width:"100px",height:"100px",overflow:"hidden",zIndex:99999,opacity:p.settings.shim_bgcolor?"":0});G.className="plupload html5";if(p.settings.container){s=k.getElementById(p.settings.container);if(j.getStyle(s,"position")==="static"){s.style.position="relative"}}s.appendChild(G);no_type_restriction:for(v=0;v<t.length;v++){u=t[v].extensions.split(/,/);for(D=0;D<u.length;D++){if(u[D]==="*"){C=[];break no_type_restriction}B=j.mimeTypes[u[D]];if(B&&j.inArray(B,C)===-1){C.push(B)}}}G.innerHTML='<input id="'+p.id+'_html5" style="font-size:999px" type="file" accept="'+C.join(",")+'" '+(p.settings.multi_selection&&p.features.multi_selection?'multiple="multiple"':"")+" />";G.scrollTop=100;E=k.getElementById(p.id+"_html5");if(w.features.triggerDialog){j.extend(E.style,{position:"absolute",width:"100%",height:"100%"})}else{j.extend(E.style,{cssFloat:"right",styleFloat:"right"})}E.onchange=function(){o(this.files);this.value=""};F=k.getElementById(w.settings.browse_button);if(F){var z=w.settings.browse_button_hover,A=w.settings.browse_button_active,x=w.features.triggerDialog?F:G;if(z){j.addEvent(x,"mouseover",function(){j.addClass(F,z)},w.id);j.addEvent(x,"mouseout",function(){j.removeClass(F,z)},w.id)}if(A){j.addEvent(x,"mousedown",function(){j.addClass(F,A)},w.id);j.addEvent(k.body,"mouseup",function(){j.removeClass(F,A)},w.id)}if(w.features.triggerDialog){j.addEvent(F,"click",function(H){var y=k.getElementById(w.id+"_html5");if(y&&!y.disabled){y.click()}H.preventDefault()},w.id)}}});p.bind("PostInit",function(){var s=k.getElementById(p.settings.drop_element);if(s){if(g){j.addEvent(s,"dragenter",function(w){var v,t,u;v=k.getElementById(p.id+"_drop");if(!v){v=k.createElement("input");v.setAttribute("type","file");v.setAttribute("id",p.id+"_drop");v.setAttribute("multiple","multiple");j.addEvent(v,"change",function(){o(this.files);j.removeEvent(v,"change",p.id);v.parentNode.removeChild(v)},p.id);s.appendChild(v)}t=j.getPos(s,k.getElementById(p.settings.container));u=j.getSize(s);if(j.getStyle(s,"position")==="static"){j.extend(s.style,{position:"relative"})}j.extend(v.style,{position:"absolute",display:"block",top:0,left:0,width:u.w+"px",height:u.h+"px",opacity:0})},p.id);return}j.addEvent(s,"drop",function(u){var t=u.dataTransfer;if(t&&t.files){o(t.files)}u.preventDefault()},p.id)}});p.bind("Refresh",function(s){var t,u,v,x,w;t=k.getElementById(p.settings.browse_button);if(t){u=j.getPos(t,k.getElementById(s.settings.container));v=j.getSize(t);x=k.getElementById(p.id+"_html5_container");j.extend(x.style,{top:u.y+"px",left:u.x+"px",width:v.w+"px",height:v.h+"px"});if(p.features.triggerDialog){if(j.getStyle(t,"position")==="static"){j.extend(t.style,{position:"relative"})}w=parseInt(j.getStyle(t,"z-index"),10);if(isNaN(w)){w=0}j.extend(t.style,{zIndex:w});j.extend(x.style,{zIndex:w-1})}}});p.bind("DisableBrowse",function(s,u){var t=k.getElementById(s.id+"_html5");if(t){t.disabled=u}});p.bind("CancelUpload",function(){if(q.abort){q.abort()}});p.bind("UploadFile",function(s,u){var v=s.settings,y,t;function x(A,D,z){var B;if(File.prototype.slice){try{A.slice();return A.slice(D,z)}catch(C){return A.slice(D,z-D)}}else{if(B=File.prototype.webkitSlice||File.prototype.mozSlice){return B.call(A,D,z)}else{return null}}}function w(A){var D=0,C=0,z=("FileReader" in h)?new FileReader:null;function B(){var I,M,K,L,H,J,F,E=s.settings.url;function G(V){var T=0,N="----pluploadboundary"+j.guid(),O,P="--",U="\r\n",R="";q=new XMLHttpRequest;if(q.upload){q.upload.onprogress=function(W){u.loaded=Math.min(u.size,C+W.loaded-T);s.trigger("UploadProgress",u)}}q.onreadystatechange=function(){var W,Y;if(q.readyState==4&&s.state!==j.STOPPED){try{W=q.status}catch(X){W=0}if(W>=400){s.trigger("Error",{code:j.HTTP_ERROR,message:j.translate("HTTP Error."),file:u,status:W})}else{if(K){Y={chunk:D,chunks:K,response:q.responseText,status:W};s.trigger("ChunkUploaded",u,Y);C+=J;if(Y.cancelled){u.status=j.FAILED;return}u.loaded=Math.min(u.size,(D+1)*H)}else{u.loaded=u.size}s.trigger("UploadProgress",u);V=I=O=R=null;if(!K||++D>=K){u.status=j.DONE;s.trigger("FileUploaded",u,{response:q.responseText,status:W})}else{B()}}}};if(s.settings.multipart&&n.multipart){L.name=u.target_name||u.name;q.open("post",E,true);j.each(s.settings.headers,function(X,W){q.setRequestHeader(W,X)});if(typeof(V)!=="string"&&!!h.FormData){O=new FormData();j.each(j.extend(L,s.settings.multipart_params),function(X,W){O.append(W,X)});O.append(s.settings.file_data_name,V);q.send(O);return}if(typeof(V)==="string"){q.setRequestHeader("Content-Type","multipart/form-data; boundary="+N);j.each(j.extend(L,s.settings.multipart_params),function(X,W){R+=P+N+U+'Content-Disposition: form-data; name="'+W+'"'+U+U;R+=unescape(encodeURIComponent(X))+U});F=j.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream";R+=P+N+U+'Content-Disposition: form-data; name="'+s.settings.file_data_name+'"; filename="'+unescape(encodeURIComponent(u.name))+'"'+U+"Content-Type: "+F+U+U+V+U+P+N+P+U;T=R.length-V.length;V=R;if(q.sendAsBinary){q.sendAsBinary(V)}else{if(n.canSendBinary){var S=new Uint8Array(V.length);for(var Q=0;Q<V.length;Q++){S[Q]=(V.charCodeAt(Q)&255)}q.send(S.buffer)}}return}}E=j.buildUrl(s.settings.url,j.extend(L,s.settings.multipart_params));q.open("post",E,true);q.setRequestHeader("Content-Type","application/octet-stream");j.each(s.settings.headers,function(X,W){q.setRequestHeader(W,X)});q.send(V)}if(u.status==j.DONE||u.status==j.FAILED||s.state==j.STOPPED){return}L={name:u.target_name||u.name};if(v.chunk_size&&u.size>v.chunk_size&&(n.chunks||typeof(A)=="string")){H=v.chunk_size;K=Math.ceil(u.size/H);J=Math.min(H,u.size-(D*H));if(typeof(A)=="string"){I=A.substring(D*H,D*H+J)}else{I=x(A,D*H,D*H+J)}L.chunk=D;L.chunks=K}else{J=u.size;I=A}if(s.settings.multipart&&n.multipart&&typeof(I)!=="string"&&z&&n.cantSendBlobInFormData&&n.chunks&&s.settings.chunk_size){z.onload=function(){G(z.result)};z.readAsBinaryString(I)}else{G(I)}}B()}y=c[u.id];if(n.jpgresize&&s.settings.resize&&/\.(png|jpg|jpeg)$/i.test(u.name)){d.call(s,u,s.settings.resize,/\.png$/i.test(u.name)?"image/png":"image/jpeg",function(z){if(z.success){u.size=z.data.length;w(z.data)}else{if(n.chunks){w(y)}else{l(y,w)}}})}else{if(!n.chunks&&n.jpgresize){l(y,w)}else{w(y)}}});p.bind("Destroy",function(s){var u,v,t=k.body,w={inputContainer:s.id+"_html5_container",inputFile:s.id+"_html5",browseButton:s.settings.browse_button,dropElm:s.settings.drop_element};for(u in w){v=k.getElementById(w[u]);if(v){j.removeAllEvents(v,s.id)}}j.removeAllEvents(k.body,s.id);if(s.settings.container){t=k.getElementById(s.settings.container)}t.removeChild(k.getElementById(w.inputContainer))});r({success:true})}});function b(){var q=false,o;function r(t,v){var s=q?0:-8*(v-1),w=0,u;for(u=0;u<v;u++){w|=(o.charCodeAt(t+u)<<Math.abs(s+u*8))}return w}function n(u,s,t){var t=arguments.length===3?t:o.length-s-1;o=o.substr(0,s)+u+o.substr(t+s)}function p(t,u,w){var x="",s=q?0:-8*(w-1),v;for(v=0;v<w;v++){x+=String.fromCharCode((u>>Math.abs(s+v*8))&255)}n(x,t,w)}return{II:function(s){if(s===e){return q}else{q=s}},init:function(s){q=false;o=s},SEGMENT:function(s,u,t){switch(arguments.length){case 1:return o.substr(s,o.length-s-1);case 2:return o.substr(s,u);case 3:n(t,s,u);break;default:return o}},BYTE:function(s){return r(s,1)},SHORT:function(s){return r(s,2)},LONG:function(s,t){if(t===e){return r(s,4)}else{p(s,t,4)}},SLONG:function(s){var t=r(s,4);return(t>2147483647?t-4294967296:t)},STRING:function(s,t){var u="";for(t+=s;s<t;s++){u+=String.fromCharCode(r(s,1))}return u}}}function f(s){var u={65505:{app:"EXIF",name:"APP1",signature:"Exif\0"},65506:{app:"ICC",name:"APP2",signature:"ICC_PROFILE\0"},65517:{app:"IPTC",name:"APP13",signature:"Photoshop 3.0\0"}},t=[],r,n,p=e,q=0,o;r=new b();r.init(s);if(r.SHORT(0)!==65496){return}n=2;o=Math.min(1048576,s.length);while(n<=o){p=r.SHORT(n);if(p>=65488&&p<=65495){n+=2;continue}if(p===65498||p===65497){break}q=r.SHORT(n+2)+2;if(u[p]&&r.STRING(n+4,u[p].signature.length)===u[p].signature){t.push({hex:p,app:u[p].app.toUpperCase(),name:u[p].name.toUpperCase(),start:n,length:q,segment:r.SEGMENT(n,q)})}n+=q}r.init(null);return{headers:t,restore:function(y){r.init(y);var w=new f(y);if(!w.headers){return false}for(var x=w.headers.length;x>0;x--){var z=w.headers[x-1];r.SEGMENT(z.start,z.length,"")}w.purge();n=r.SHORT(2)==65504?4+r.SHORT(4):2;for(var x=0,v=t.length;x<v;x++){r.SEGMENT(n,0,t[x].segment);n+=t[x].length}return r.SEGMENT()},get:function(x){var y=[];for(var w=0,v=t.length;w<v;w++){if(t[w].app===x.toUpperCase()){y.push(t[w].segment)}}return y},set:function(y,x){var z=[];if(typeof(x)==="string"){z.push(x)}else{z=x}for(var w=ii=0,v=t.length;w<v;w++){if(t[w].app===y.toUpperCase()){t[w].segment=z[ii];t[w].length=z[ii].length;ii++}if(ii>=z.length){break}}},purge:function(){t=[];r.init(null)}}}function a(){var q,n,o={},t;q=new b();n={tiff:{274:"Orientation",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}};t={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}};function p(u,C){var w=q.SHORT(u),z,F,G,B,A,v,x,D,E=[],y={};for(z=0;z<w;z++){x=v=u+12*z+2;G=C[q.SHORT(x)];if(G===e){continue}B=q.SHORT(x+=2);A=q.LONG(x+=2);x+=4;E=[];switch(B){case 1:case 7:if(A>4){x=q.LONG(x)+o.tiffHeader}for(F=0;F<A;F++){E[F]=q.BYTE(x+F)}break;case 2:if(A>4){x=q.LONG(x)+o.tiffHeader}y[G]=q.STRING(x,A-1);continue;case 3:if(A>2){x=q.LONG(x)+o.tiffHeader}for(F=0;F<A;F++){E[F]=q.SHORT(x+F*2)}break;case 4:if(A>1){x=q.LONG(x)+o.tiffHeader}for(F=0;F<A;F++){E[F]=q.LONG(x+F*4)}break;case 5:x=q.LONG(x)+o.tiffHeader;for(F=0;F<A;F++){E[F]=q.LONG(x+F*4)/q.LONG(x+F*4+4)}break;case 9:x=q.LONG(x)+o.tiffHeader;for(F=0;F<A;F++){E[F]=q.SLONG(x+F*4)}break;case 10:x=q.LONG(x)+o.tiffHeader;for(F=0;F<A;F++){E[F]=q.SLONG(x+F*4)/q.SLONG(x+F*4+4)}break;default:continue}D=(A==1?E[0]:E);if(t.hasOwnProperty(G)&&typeof D!="object"){y[G]=t[G][D]}else{y[G]=D}}return y}function s(){var v=e,u=o.tiffHeader;q.II(q.SHORT(u)==18761);if(q.SHORT(u+=2)!==42){return false}o.IFD0=o.tiffHeader+q.LONG(u+=2);v=p(o.IFD0,n.tiff);o.exifIFD=("ExifIFDPointer" in v?o.tiffHeader+v.ExifIFDPointer:e);o.gpsIFD=("GPSInfoIFDPointer" in v?o.tiffHeader+v.GPSInfoIFDPointer:e);return true}function r(w,u,z){var B,y,x,A=0;if(typeof(u)==="string"){var v=n[w.toLowerCase()];for(hex in v){if(v[hex]===u){u=hex;break}}}B=o[w.toLowerCase()+"IFD"];y=q.SHORT(B);for(i=0;i<y;i++){x=B+12*i+2;if(q.SHORT(x)==u){A=x+8;break}}if(!A){return false}q.LONG(A,z);return true}return{init:function(u){o={tiffHeader:10};if(u===e||!u.length){return false}q.init(u);if(q.SHORT(0)===65505&&q.STRING(4,5).toUpperCase()==="EXIF\0"){return s()}return false},EXIF:function(){var v;v=p(o.exifIFD,n.exif);if(v.ExifVersion&&j.typeOf(v.ExifVersion)==="array"){for(var w=0,u="";w<v.ExifVersion.length;w++){u+=String.fromCharCode(v.ExifVersion[w])}v.ExifVersion=u}return v},GPS:function(){var u;u=p(o.gpsIFD,n.gps);if(u.GPSVersionID){u.GPSVersionID=u.GPSVersionID.join(".")}return u},setExif:function(u,v){if(u!=="PixelXDimension"&&u!=="PixelYDimension"){return false}return r("exif",u,v)},getBinary:function(){return q.SEGMENT()}}}})(window,document,plupload);(function(d,a,b,c){function e(f){return a.getElementById(f)}b.runtimes.Html4=b.addRuntime("html4",{getFeatures:function(){return{multipart:true,triggerDialog:(b.ua.gecko&&d.FormData||b.ua.webkit)}},init:function(f,g){f.bind("Init",function(p){var j=a.body,n,h="javascript",k,x,q,z=[],r=/MSIE/.test(navigator.userAgent),t=[],m=p.settings.filters,o,l,s,w;no_type_restriction:for(o=0;o<m.length;o++){l=m[o].extensions.split(/,/);for(w=0;w<l.length;w++){if(l[w]==="*"){t=[];break no_type_restriction}s=b.mimeTypes[l[w]];if(s&&b.inArray(s,t)===-1){t.push(s)}}}t=t.join(",");function v(){var C,A,y,B;q=b.guid();z.push(q);C=a.createElement("form");C.setAttribute("id","form_"+q);C.setAttribute("method","post");C.setAttribute("enctype","multipart/form-data");C.setAttribute("encoding","multipart/form-data");C.setAttribute("target",p.id+"_iframe");C.style.position="absolute";A=a.createElement("input");A.setAttribute("id","input_"+q);A.setAttribute("type","file");A.setAttribute("accept",t);A.setAttribute("size",1);B=e(p.settings.browse_button);if(p.features.triggerDialog&&B){b.addEvent(e(p.settings.browse_button),"click",function(D){if(!A.disabled){A.click()}D.preventDefault()},p.id)}b.extend(A.style,{width:"100%",height:"100%",opacity:0,fontSize:"99px"});b.extend(C.style,{overflow:"hidden"});y=p.settings.shim_bgcolor;if(y){C.style.background=y}if(r){b.extend(A.style,{filter:"alpha(opacity=0)"})}b.addEvent(A,"change",function(G){var E=G.target,D,F=[],H;if(E.value){e("form_"+q).style.top=-1048575+"px";D=E.value.replace(/\\/g,"/");D=D.substring(D.length,D.lastIndexOf("/")+1);F.push(new b.File(q,D));if(!p.features.triggerDialog){b.removeAllEvents(C,p.id)}else{b.removeEvent(B,"click",p.id)}b.removeEvent(A,"change",p.id);v();if(F.length){f.trigger("FilesAdded",F)}}},p.id);C.appendChild(A);j.appendChild(C);p.refresh()}function u(){var y=a.createElement("div");y.innerHTML='<iframe id="'+p.id+'_iframe" name="'+p.id+'_iframe" src="'+h+':&quot;&quot;" style="display:none"></iframe>';n=y.firstChild;j.appendChild(n);b.addEvent(n,"load",function(D){var E=D.target,C,A;if(!k){return}try{C=E.contentWindow.document||E.contentDocument||d.frames[E.id].document}catch(B){p.trigger("Error",{code:b.SECURITY_ERROR,message:b.translate("Security error."),file:k});return}A=C.body.innerHTML;if(A){k.status=b.DONE;k.loaded=1025;k.percent=100;p.trigger("UploadProgress",k);p.trigger("FileUploaded",k,{response:A})}},p.id)}if(p.settings.container){j=e(p.settings.container);if(b.getStyle(j,"position")==="static"){j.style.position="relative"}}p.bind("UploadFile",function(y,B){var C,A;if(B.status==b.DONE||B.status==b.FAILED||y.state==b.STOPPED){return}C=e("form_"+B.id);A=e("input_"+B.id);A.setAttribute("name",y.settings.file_data_name);C.setAttribute("action",y.settings.url);b.each(b.extend({name:B.target_name||B.name},y.settings.multipart_params),function(F,D){var E=a.createElement("input");b.extend(E,{type:"hidden",name:D,value:F});C.insertBefore(E,C.firstChild)});k=B;e("form_"+q).style.top=-1048575+"px";C.submit();C.parentNode.removeChild(C)});p.bind("FileUploaded",function(y){y.refresh()});p.bind("StateChanged",function(y){if(y.state==b.STARTED){u()}if(y.state==b.STOPPED){d.setTimeout(function(){b.removeEvent(n,"load",y.id);if(n.parentNode){n.parentNode.removeChild(n)}},0)}});p.bind("Refresh",function(A){var G,B,C,D,y,H,I,F,E;G=e(A.settings.browse_button);if(G){y=b.getPos(G,e(A.settings.container));H=b.getSize(G);I=e("form_"+q);F=e("input_"+q);b.extend(I.style,{top:y.y+"px",left:y.x+"px",width:H.w+"px",height:H.h+"px"});if(A.features.triggerDialog){if(b.getStyle(G,"position")==="static"){b.extend(G.style,{position:"relative"})}E=parseInt(G.style.zIndex,10);if(isNaN(E)){E=0}b.extend(G.style,{zIndex:E});b.extend(I.style,{zIndex:E-1})}C=A.settings.browse_button_hover;D=A.settings.browse_button_active;B=A.features.triggerDialog?G:I;if(C){b.addEvent(B,"mouseover",function(){b.addClass(G,C)},A.id);b.addEvent(B,"mouseout",function(){b.removeClass(G,C)},A.id)}if(D){b.addEvent(B,"mousedown",function(){b.addClass(G,D)},A.id);b.addEvent(a.body,"mouseup",function(){b.removeClass(G,D)},A.id)}}});f.bind("FilesRemoved",function(y,B){var A,C;for(A=0;A<B.length;A++){C=e("form_"+B[A].id);if(C){C.parentNode.removeChild(C)}}});f.bind("DisableBrowse",function(y,B){var A=a.getElementById("input_"+q);if(A){A.disabled=B}});f.bind("Destroy",function(y){var A,B,C,D={inputContainer:"form_"+q,inputFile:"input_"+q,browseButton:y.settings.browse_button};for(A in D){B=e(D[A]);if(B){b.removeAllEvents(B,y.id)}}b.removeAllEvents(a.body,y.id);b.each(z,function(F,E){C=e("form_"+F);if(C){j.removeChild(C)}})});v()});g({success:true})}})})(window,document,plupload);
  1705. /*********************************************
  1706. EasyXDM
  1707. **********************************************/
  1708. (function(N,d,p,K,k,H){var b=this;var n=Math.floor(Math.random()*10000);var q=Function.prototype;var Q=/^((http.?:)\/\/([^:\/\s]+)(:\d+)*)/;var R=/[\-\w]+\/\.\.\//;var F=/([^:])\/\//g;var I="";var o={};var M=N.easyXDM;var U="easyXDM_";var E;var y=false;var i;var h;function C(X,Z){var Y=typeof X[Z];return Y=="function"||(!!(Y=="object"&&X[Z]))||Y=="unknown"}function u(X,Y){return !!(typeof(X[Y])=="object"&&X[Y])}function r(X){return Object.prototype.toString.call(X)==="[object Array]"}function c(){var Z="Shockwave Flash",ad="application/x-shockwave-flash";if(!t(navigator.plugins)&&typeof navigator.plugins[Z]=="object"){var ab=navigator.plugins[Z].description;if(ab&&!t(navigator.mimeTypes)&&navigator.mimeTypes[ad]&&navigator.mimeTypes[ad].enabledPlugin){i=ab.match(/\d+/g)}}if(!i){var Y;try{Y=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");i=Array.prototype.slice.call(Y.GetVariable("$version").match(/(\d+),(\d+),(\d+),(\d+)/),1);Y=null}catch(ac){}}if(!i){return false}var X=parseInt(i[0],10),aa=parseInt(i[1],10);h=X>9&&aa>0;return true}var v,x;if(C(N,"addEventListener")){v=function(Z,X,Y){Z.addEventListener(X,Y,false)};x=function(Z,X,Y){Z.removeEventListener(X,Y,false)}}else{if(C(N,"attachEvent")){v=function(X,Z,Y){X.attachEvent("on"+Z,Y)};x=function(X,Z,Y){X.detachEvent("on"+Z,Y)}}else{throw new Error("Browser not supported")}}var W=false,J=[],L;if("readyState" in d){L=d.readyState;W=L=="complete"||(~navigator.userAgent.indexOf("AppleWebKit/")&&(L=="loaded"||L=="interactive"))}else{W=!!d.body}function s(){if(W){return}W=true;for(var X=0;X<J.length;X++){J[X]()}J.length=0}if(!W){if(C(N,"addEventListener")){v(d,"DOMContentLoaded",s)}else{v(d,"readystatechange",function(){if(d.readyState=="complete"){s()}});if(d.documentElement.doScroll&&N===top){var g=function(){if(W){return}try{d.documentElement.doScroll("left")}catch(X){K(g,1);return}s()};g()}}v(N,"load",s)}function G(Y,X){if(W){Y.call(X);return}J.push(function(){Y.call(X)})}function m(){var Z=parent;if(I!==""){for(var X=0,Y=I.split(".");X<Y.length;X++){Z=Z[Y[X]]}}return Z.easyXDM}function e(X){N.easyXDM=M;I=X;if(I){U="easyXDM_"+I.replace(".","_")+"_"}return o}function z(X){return X.match(Q)[3]}function f(X){return X.match(Q)[4]||""}function j(Z){var X=Z.toLowerCase().match(Q);var aa=X[2],ab=X[3],Y=X[4]||"";if((aa=="http:"&&Y==":80")||(aa=="https:"&&Y==":443")){Y=""}return aa+"//"+ab+Y}function B(X){X=X.replace(F,"$1/");if(!X.match(/^(http||https):\/\//)){var Y=(X.substring(0,1)==="/")?"":p.pathname;if(Y.substring(Y.length-1)!=="/"){Y=Y.substring(0,Y.lastIndexOf("/")+1)}X=p.protocol+"//"+p.host+Y+X}while(R.test(X)){X=X.replace(R,"")}return X}function P(X,aa){var ac="",Z=X.indexOf("#");if(Z!==-1){ac=X.substring(Z);X=X.substring(0,Z)}var ab=[];for(var Y in aa){if(aa.hasOwnProperty(Y)){ab.push(Y+"="+H(aa[Y]))}}return X+(y?"#":(X.indexOf("?")==-1?"?":"&"))+ab.join("&")+ac}var S=(function(X){X=X.substring(1).split("&");var Z={},aa,Y=X.length;while(Y--){aa=X[Y].split("=");Z[aa[0]]=k(aa[1])}return Z}(/xdm_e=/.test(p.search)?p.search:p.hash));function t(X){return typeof X==="undefined"}var O=function(){var Y={};var Z={a:[1,2,3]},X='{"a":[1,2,3]}';if(typeof JSON!="undefined"&&typeof JSON.stringify==="function"&&JSON.stringify(Z).replace((/\s/g),"")===X){return JSON}if(Object.toJSON){if(Object.toJSON(Z).replace((/\s/g),"")===X){Y.stringify=Object.toJSON}}if(typeof String.prototype.evalJSON==="function"){Z=X.evalJSON();if(Z.a&&Z.a.length===3&&Z.a[2]===3){Y.parse=function(aa){return aa.evalJSON()}}}if(Y.stringify&&Y.parse){O=function(){return Y};return Y}return null};function T(X,Y,Z){var ab;for(var aa in Y){if(Y.hasOwnProperty(aa)){if(aa in X){ab=Y[aa];if(typeof ab==="object"){T(X[aa],ab,Z)}else{if(!Z){X[aa]=Y[aa]}}}else{X[aa]=Y[aa]}}}return X}function a(){var Y=d.body.appendChild(d.createElement("form")),X=Y.appendChild(d.createElement("input"));X.name=U+"TEST"+n;E=X!==Y.elements[X.name];d.body.removeChild(Y)}function A(Y){if(t(E)){a()}var ac;if(E){ac=d.createElement('<iframe name="'+Y.props.name+'"/>')}else{ac=d.createElement("IFRAME");ac.name=Y.props.name}ac.id=ac.name=Y.props.name;delete Y.props.name;if(typeof Y.container=="string"){Y.container=d.getElementById(Y.container)}if(!Y.container){T(ac.style,{position:"absolute",top:"-2000px",left:"0px"});Y.container=d.body}var ab=Y.props.src;Y.props.src="javascript:false";T(ac,Y.props);ac.border=ac.frameBorder=0;ac.allowTransparency=true;Y.container.appendChild(ac);if(Y.onLoad){v(ac,"load",Y.onLoad)}if(Y.usePost){var aa=Y.container.appendChild(d.createElement("form")),X;aa.target=ac.name;aa.action=ab;aa.method="POST";if(typeof(Y.usePost)==="object"){for(var Z in Y.usePost){if(Y.usePost.hasOwnProperty(Z)){if(E){X=d.createElement('<input name="'+Z+'"/>')}else{X=d.createElement("INPUT");X.name=Z}X.value=Y.usePost[Z];aa.appendChild(X)}}}aa.submit();aa.parentNode.removeChild(aa)}else{ac.src=ab}Y.props.src=ab;return ac}function V(aa,Z){if(typeof aa=="string"){aa=[aa]}var Y,X=aa.length;while(X--){Y=aa[X];Y=new RegExp(Y.substr(0,1)=="^"?Y:("^"+Y.replace(/(\*)/g,".$1").replace(/\?/g,".")+"$"));if(Y.test(Z)){return true}}return false}function l(Z){var ae=Z.protocol,Y;Z.isHost=Z.isHost||t(S.xdm_p);y=Z.hash||false;if(!Z.props){Z.props={}}if(!Z.isHost){Z.channel=S.xdm_c.replace(/["'<>\\]/g,"");Z.secret=S.xdm_s;Z.remote=S.xdm_e.replace(/["'<>\\]/g,"");ae=S.xdm_p;if(Z.acl&&!V(Z.acl,Z.remote)){throw new Error("Access denied for "+Z.remote)}}else{Z.remote=B(Z.remote);Z.channel=Z.channel||"default"+n++;Z.secret=Math.random().toString(16).substring(2);if(t(ae)){if(j(p.href)==j(Z.remote)){ae="4"}else{if(C(N,"postMessage")||C(d,"postMessage")){ae="1"}else{if(Z.swf&&C(N,"ActiveXObject")&&c()){ae="6"}else{if(navigator.product==="Gecko"&&"frameElement" in N&&navigator.userAgent.indexOf("WebKit")==-1){ae="5"}else{if(Z.remoteHelper){ae="2"}else{ae="0"}}}}}}}Z.protocol=ae;switch(ae){case"0":T(Z,{interval:100,delay:2000,useResize:true,useParent:false,usePolling:false},true);if(Z.isHost){if(!Z.local){var ac=p.protocol+"//"+p.host,X=d.body.getElementsByTagName("img"),ad;var aa=X.length;while(aa--){ad=X[aa];if(ad.src.substring(0,ac.length)===ac){Z.local=ad.src;break}}if(!Z.local){Z.local=N}}var ab={xdm_c:Z.channel,xdm_p:0};if(Z.local===N){Z.usePolling=true;Z.useParent=true;Z.local=p.protocol+"//"+p.host+p.pathname+p.search;ab.xdm_e=Z.local;ab.xdm_pa=1}else{ab.xdm_e=B(Z.local)}if(Z.container){Z.useResize=false;ab.xdm_po=1}Z.remote=P(Z.remote,ab)}else{T(Z,{channel:S.xdm_c,remote:S.xdm_e,useParent:!t(S.xdm_pa),usePolling:!t(S.xdm_po),useResize:Z.useParent?false:Z.useResize})}Y=[new o.stack.HashTransport(Z),new o.stack.ReliableBehavior({}),new o.stack.QueueBehavior({encode:true,maxLength:4000-Z.remote.length}),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"1":Y=[new o.stack.PostMessageTransport(Z)];break;case"2":Z.remoteHelper=B(Z.remoteHelper);Y=[new o.stack.NameTransport(Z),new o.stack.QueueBehavior(),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"3":Y=[new o.stack.NixTransport(Z)];break;case"4":Y=[new o.stack.SameOriginTransport(Z)];break;case"5":Y=[new o.stack.FrameElementTransport(Z)];break;case"6":if(!i){c()}Y=[new o.stack.FlashTransport(Z)];break}Y.push(new o.stack.QueueBehavior({lazy:Z.lazy,remove:true}));return Y}function D(aa){var ab,Z={incoming:function(ad,ac){this.up.incoming(ad,ac)},outgoing:function(ac,ad){this.down.outgoing(ac,ad)},callback:function(ac){this.up.callback(ac)},init:function(){this.down.init()},destroy:function(){this.down.destroy()}};for(var Y=0,X=aa.length;Y<X;Y++){ab=aa[Y];T(ab,Z,true);if(Y!==0){ab.down=aa[Y-1]}if(Y!==X-1){ab.up=aa[Y+1]}}return ab}function w(X){X.up.down=X.down;X.down.up=X.up;X.up=X.down=null}T(o,{version:"2.4.15.0",query:S,stack:{},apply:T,getJSONObject:O,whenReady:G,noConflict:e});o.DomHelper={on:v,un:x,requiresJSON:function(X){if(!u(N,"JSON")){d.write('<script type="text/javascript" src="'+X+'"><\/script>')}}};(function(){var X={};o.Fn={set:function(Y,Z){X[Y]=Z},get:function(Z,Y){var aa=X[Z];if(Y){delete X[Z]}return aa}}}());o.Socket=function(Y){var X=D(l(Y).concat([{incoming:function(ab,aa){Y.onMessage(ab,aa)},callback:function(aa){if(Y.onReady){Y.onReady(aa)}}}])),Z=j(Y.remote);this.origin=j(Y.remote);this.destroy=function(){X.destroy()};this.postMessage=function(aa){X.outgoing(aa,Z)};X.init()};o.Rpc=function(Z,Y){if(Y.local){for(var ab in Y.local){if(Y.local.hasOwnProperty(ab)){var aa=Y.local[ab];if(typeof aa==="function"){Y.local[ab]={method:aa}}}}}var X=D(l(Z).concat([new o.stack.RpcBehavior(this,Y),{callback:function(ac){if(Z.onReady){Z.onReady(ac)}}}]));this.origin=j(Z.remote);this.destroy=function(){X.destroy()};X.init()};o.stack.SameOriginTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa(ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:p.protocol+"//"+p.host+p.pathname,xdm_c:Y.channel,xdm_p:4}),name:U+Y.channel+"_provider"});ab=A(Y);o.Fn.set(Y.channel,function(ac){aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}})}else{aa=m().Fn.get(Y.channel,true)(function(ac){Z.up.incoming(ac,X)});K(function(){Z.up.callback(true)},0)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.FlashTransport=function(aa){var ac,X,ab,ad,Y,ae;function af(ah,ag){K(function(){ac.up.incoming(ah,ad)},0)}function Z(ah){var ag=aa.swf+"?host="+aa.isHost;var aj="easyXDM_swf_"+Math.floor(Math.random()*10000);o.Fn.set("flash_loaded"+ah.replace(/[\-.]/g,"_"),function(){o.stack.FlashTransport[ah].swf=Y=ae.firstChild;var ak=o.stack.FlashTransport[ah].queue;for(var al=0;al<ak.length;al++){ak[al]()}ak.length=0});if(aa.swfContainer){ae=(typeof aa.swfContainer=="string")?d.getElementById(aa.swfContainer):aa.swfContainer}else{ae=d.createElement("div");T(ae.style,h&&aa.swfNoThrottle?{height:"20px",width:"20px",position:"fixed",right:0,top:0}:{height:"1px",width:"1px",position:"absolute",overflow:"hidden",right:0,top:0});d.body.appendChild(ae)}var ai="callback=flash_loaded"+ah.replace(/[\-.]/g,"_")+"&proto="+b.location.protocol+"&domain="+z(b.location.href)+"&port="+f(b.location.href)+"&ns="+I;ae.innerHTML="<object height='20' width='20' type='application/x-shockwave-flash' id='"+aj+"' data='"+ag+"'><param name='allowScriptAccess' value='always'></param><param name='wmode' value='transparent'><param name='movie' value='"+ag+"'></param><param name='flashvars' value='"+ai+"'></param><embed type='application/x-shockwave-flash' FlashVars='"+ai+"' allowScriptAccess='always' wmode='transparent' src='"+ag+"' height='1' width='1'></embed></object>"}return(ac={outgoing:function(ah,ai,ag){Y.postMessage(aa.channel,ah.toString());if(ag){ag()}},destroy:function(){try{Y.destroyChannel(aa.channel)}catch(ag){}Y=null;if(X){X.parentNode.removeChild(X);X=null}},onDOMReady:function(){ad=aa.remote;o.Fn.set("flash_"+aa.channel+"_init",function(){K(function(){ac.up.callback(true)})});o.Fn.set("flash_"+aa.channel+"_onMessage",af);aa.swf=B(aa.swf);var ah=z(aa.swf);var ag=function(){o.stack.FlashTransport[ah].init=true;Y=o.stack.FlashTransport[ah].swf;Y.createChannel(aa.channel,aa.secret,j(aa.remote),aa.isHost);if(aa.isHost){if(h&&aa.swfNoThrottle){T(aa.props,{position:"fixed",right:0,top:0,height:"20px",width:"20px"})}T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:6,xdm_s:aa.secret}),name:U+aa.channel+"_provider"});X=A(aa)}};if(o.stack.FlashTransport[ah]&&o.stack.FlashTransport[ah].init){ag()}else{if(!o.stack.FlashTransport[ah]){o.stack.FlashTransport[ah]={queue:[ag]};Z(ah)}else{o.stack.FlashTransport[ah].queue.push(ag)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.PostMessageTransport=function(aa){var ac,ad,Y,Z;function X(ae){if(ae.origin){return j(ae.origin)}if(ae.uri){return j(ae.uri)}if(ae.domain){return p.protocol+"//"+ae.domain}throw"Unable to retrieve the origin of the event"}function ab(af){var ae=X(af);if(ae==Z&&af.data.substring(0,aa.channel.length+1)==aa.channel+" "){ac.up.incoming(af.data.substring(aa.channel.length+1),ae)}}return(ac={outgoing:function(af,ag,ae){Y.postMessage(aa.channel+" "+af,ag||Z);if(ae){ae()}},destroy:function(){x(N,"message",ab);if(ad){Y=null;ad.parentNode.removeChild(ad);ad=null}},onDOMReady:function(){Z=j(aa.remote);if(aa.isHost){var ae=function(af){if(af.data==aa.channel+"-ready"){Y=("postMessage" in ad.contentWindow)?ad.contentWindow:ad.contentWindow.document;x(N,"message",ae);v(N,"message",ab);K(function(){ac.up.callback(true)},0)}};v(N,"message",ae);T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:1}),name:U+aa.channel+"_provider"});ad=A(aa)}else{v(N,"message",ab);Y=("postMessage" in N.parent)?N.parent:N.parent.document;Y.postMessage(aa.channel+"-ready",Z);K(function(){ac.up.callback(true)},0)}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.FrameElementTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa.call(this,ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:j(p.href),xdm_c:Y.channel,xdm_p:5}),name:U+Y.channel+"_provider"});ab=A(Y);ab.fn=function(ac){delete ab.fn;aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}}}else{if(d.referrer&&j(d.referrer)!=S.xdm_e){N.top.location=S.xdm_e}aa=N.frameElement.fn(function(ac){Z.up.incoming(ac,X)});Z.up.callback(true)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.NameTransport=function(ab){var ac;var ae,ai,aa,ag,ah,Y,X;function af(al){var ak=ab.remoteHelper+(ae?"#_3":"#_2")+ab.channel;ai.contentWindow.sendMessage(al,ak)}function ad(){if(ae){if(++ag===2||!ae){ac.up.callback(true)}}else{af("ready");ac.up.callback(true)}}function aj(ak){ac.up.incoming(ak,Y)}function Z(){if(ah){K(function(){ah(true)},0)}}return(ac={outgoing:function(al,am,ak){ah=ak;af(al)},destroy:function(){ai.parentNode.removeChild(ai);ai=null;if(ae){aa.parentNode.removeChild(aa);aa=null}},onDOMReady:function(){ae=ab.isHost;ag=0;Y=j(ab.remote);ab.local=B(ab.local);if(ae){o.Fn.set(ab.channel,function(al){if(ae&&al==="ready"){o.Fn.set(ab.channel,aj);ad()}});X=P(ab.remote,{xdm_e:ab.local,xdm_c:ab.channel,xdm_p:2});T(ab.props,{src:X+"#"+ab.channel,name:U+ab.channel+"_provider"});aa=A(ab)}else{ab.remoteHelper=ab.remote;o.Fn.set(ab.channel,aj)}var ak=function(){var al=ai||this;x(al,"load",ak);o.Fn.set(ab.channel+"_load",Z);(function am(){if(typeof al.contentWindow.sendMessage=="function"){ad()}else{K(am,50)}}())};ai=A({props:{src:ab.local+"#_4"+ab.channel},onLoad:ak})},init:function(){G(ac.onDOMReady,ac)}})};o.stack.HashTransport=function(Z){var ac;var ah=this,af,aa,X,ad,am,ab,al;var ag,Y;function ak(ao){if(!al){return}var an=Z.remote+"#"+(am++)+"_"+ao;((af||!ag)?al.contentWindow:al).location=an}function ae(an){ad=an;ac.up.incoming(ad.substring(ad.indexOf("_")+1),Y)}function aj(){if(!ab){return}var an=ab.location.href,ap="",ao=an.indexOf("#");if(ao!=-1){ap=an.substring(ao)}if(ap&&ap!=ad){ae(ap)}}function ai(){aa=setInterval(aj,X)}return(ac={outgoing:function(an,ao){ak(an)},destroy:function(){N.clearInterval(aa);if(af||!ag){al.parentNode.removeChild(al)}al=null},onDOMReady:function(){af=Z.isHost;X=Z.interval;ad="#"+Z.channel;am=0;ag=Z.useParent;Y=j(Z.remote);if(af){T(Z.props,{src:Z.remote,name:U+Z.channel+"_provider"});if(ag){Z.onLoad=function(){ab=N;ai();ac.up.callback(true)}}else{var ap=0,an=Z.delay/50;(function ao(){if(++ap>an){throw new Error("Unable to reference listenerwindow")}try{ab=al.contentWindow.frames[U+Z.channel+"_consumer"]}catch(aq){}if(ab){ai();ac.up.callback(true)}else{K(ao,50)}}())}al=A(Z)}else{ab=N;ai();if(ag){al=parent;ac.up.callback(true)}else{T(Z,{props:{src:Z.remote+"#"+Z.channel+new Date(),name:U+Z.channel+"_consumer"},onLoad:function(){ac.up.callback(true)}});al=A(Z)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.ReliableBehavior=function(Y){var aa,ac;var ab=0,X=0,Z="";return(aa={incoming:function(af,ad){var ae=af.indexOf("_"),ag=af.substring(0,ae).split(",");af=af.substring(ae+1);if(ag[0]==ab){Z="";if(ac){ac(true);ac=null}}if(af.length>0){aa.down.outgoing(ag[1]+","+ab+"_"+Z,ad);if(X!=ag[1]){X=ag[1];aa.up.incoming(af,ad)}}},outgoing:function(af,ad,ae){Z=af;ac=ae;aa.down.outgoing(X+","+(++ab)+"_"+af,ad)}})};o.stack.QueueBehavior=function(Z){var ac,ad=[],ag=true,aa="",af,X=0,Y=false,ab=false;function ae(){if(Z.remove&&ad.length===0){w(ac);return}if(ag||ad.length===0||af){return}ag=true;var ah=ad.shift();ac.down.outgoing(ah.data,ah.origin,function(ai){ag=false;if(ah.callback){K(function(){ah.callback(ai)},0)}ae()})}return(ac={init:function(){if(t(Z)){Z={}}if(Z.maxLength){X=Z.maxLength;ab=true}if(Z.lazy){Y=true}else{ac.down.init()}},callback:function(ai){ag=false;var ah=ac.up;ae();ah.callback(ai)},incoming:function(ak,ai){if(ab){var aj=ak.indexOf("_"),ah=parseInt(ak.substring(0,aj),10);aa+=ak.substring(aj+1);if(ah===0){if(Z.encode){aa=k(aa)}ac.up.incoming(aa,ai);aa=""}}else{ac.up.incoming(ak,ai)}},outgoing:function(al,ai,ak){if(Z.encode){al=H(al)}var ah=[],aj;if(ab){while(al.length!==0){aj=al.substring(0,X);al=al.substring(aj.length);ah.push(aj)}while((aj=ah.shift())){ad.push({data:ah.length+"_"+aj,origin:ai,callback:ah.length===0?ak:null})}}else{ad.push({data:al,origin:ai,callback:ak})}if(Y){ac.down.init()}else{ae()}},destroy:function(){af=true;ac.down.destroy()}})};o.stack.VerifyBehavior=function(ab){var ac,aa,Y,Z=false;function X(){aa=Math.random().toString(16).substring(2);ac.down.outgoing(aa)}return(ac={incoming:function(af,ad){var ae=af.indexOf("_");if(ae===-1){if(af===aa){ac.up.callback(true)}else{if(!Y){Y=af;if(!ab.initiate){X()}ac.down.outgoing(af)}}}else{if(af.substring(0,ae)===Y){ac.up.incoming(af.substring(ae+1),ad)}}},outgoing:function(af,ad,ae){ac.down.outgoing(aa+"_"+af,ad,ae)},callback:function(ad){if(ab.initiate){X()}}})};o.stack.RpcBehavior=function(ad,Y){var aa,af=Y.serializer||O();var ae=0,ac={};function X(ag){ag.jsonrpc="2.0";aa.down.outgoing(af.stringify(ag))}function ab(ag,ai){var ah=Array.prototype.slice;return function(){var aj=arguments.length,al,ak={method:ai};if(aj>0&&typeof arguments[aj-1]==="function"){if(aj>1&&typeof arguments[aj-2]==="function"){al={success:arguments[aj-2],error:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-2)}else{al={success:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-1)}ac[""+(++ae)]=al;ak.id=ae}else{ak.params=ah.call(arguments,0)}if(ag.namedParams&&ak.params.length===1){ak.params=ak.params[0]}X(ak)}}function Z(an,am,ai,al){if(!ai){if(am){X({id:am,error:{code:-32601,message:"Procedure not found."}})}return}var ak,ah;if(am){ak=function(ao){ak=q;X({id:am,result:ao})};ah=function(ao,ap){ah=q;var aq={id:am,error:{code:-32099,message:ao}};if(ap){aq.error.data=ap}X(aq)}}else{ak=ah=q}if(!r(al)){al=[al]}try{var ag=ai.method.apply(ai.scope,al.concat([ak,ah]));if(!t(ag)){ak(ag)}}catch(aj){ah(aj.message)}}return(aa={incoming:function(ah,ag){var ai=af.parse(ah);if(ai.method){if(Y.handle){Y.handle(ai,X)}else{Z(ai.method,ai.id,Y.local[ai.method],ai.params)}}else{var aj=ac[ai.id];if(ai.error){if(aj.error){aj.error(ai.error)}}else{if(aj.success){aj.success(ai.result)}}delete ac[ai.id]}},init:function(){if(Y.remote){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)){ad[ag]=ab(Y.remote[ag],ag)}}}aa.down.init()},destroy:function(){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)&&ad.hasOwnProperty(ag)){delete ad[ag]}}aa.down.destroy()}})};b.easyXDM=o})(window,document,location,window.setTimeout,decodeURIComponent,encodeURIComponent);
  1709. }
  1710. __chute('.chute-widget:not(.chute-loaded)');