{"version":3,"sources":["../WebApp/wwwroot/build/Vendor/json2.js","../WebApp/wwwroot/build/Common/Console.js","../WebApp/wwwroot/build/Vendor/underscore.js","../WebApp/wwwroot/build/Vendor/amplify.store.js","../WebApp/wwwroot/build/Vendor/iso8601.js","../WebApp/wwwroot/build/Vendor/jquery/jquery.cookie.js","../WebApp/wwwroot/build/Vendor/jquery/jquery.idleTimer.js","../WebApp/wwwroot/build/Vendor/jquery/purl.js","../WebApp/wwwroot/build/Vendor/bootstrap-contextmenu.js","../WebApp/wwwroot/build/Vendor/classList.js","../WebApp/wwwroot/build/Common/Controls/Popover.js","../WebApp/wwwroot/build/Common/JQueryExtensions.js","../WebApp/wwwroot/build/Common/forms-init.js","../WebApp/wwwroot/build/Vendor/plupload.js"],"names":["JSON","_typeof","lookupIterator","value","_","isFunction","obj","group","context","behavior","result","iterator","identity","each","index","key","call","flatten","input","shallow","output","every","isArray","concat","apply","isArguments","push","ctor","eq","a","b","aStack","bStack","_wrapped","className","toString","String","source","global","multiline","ignoreCase","length","aCtor","constructor","bCtor","size","has","pop","root","this","previousUnderscore","breaker","ArrayProto","Array","prototype","ObjProto","Object","FuncProto","Function","slice","hasOwnProperty","nativeForEach","forEach","nativeMap","map","nativeReduce","reduce","nativeReduceRight","reduceRight","nativeFilter","filter","nativeEvery","nativeSome","some","nativeIndexOf","indexOf","nativeLastIndexOf","lastIndexOf","nativeIsArray","nativeKeys","keys","nativeBind","bind","exports","module","VERSION","i","l","reduceError","collect","results","list","any","foldl","inject","memo","initial","arguments","TypeError","foldr","find","detect","select","reject","all","entityMap","contains","include","target","invoke","method","args","isFunc","pluck","where","attrs","first","isEmpty","findWhere","max","Math","Infinity","computed","min","shuffle","rand","shuffled","random","sortBy","criteria","sort","left","right","groupBy","countBy","sortedIndex","array","low","high","mid","toArray","values","head","take","n","guard","last","rest","tail","drop","compact","without","difference","uniq","unique","isSorted","seen","union","intersection","item","other","zip","object","from","hasIndex","range","start","stop","step","len","ceil","idx","func","bound","self","partial","bindAll","funcs","Error","f","memoize","hasher","delay","wait","setTimeout","defer","throttle","options","later","previous","leading","Date","timeout","now","remaining","clearTimeout","trailing","debounce","immediate","callNow","once","ran","wrap","wrapper","compose","after","times","pairs","invert","functions","methods","names","extend","prop","pick","copy","omit","defaults","clone","isObject","tap","interceptor","isEqual","isString","isElement","nodeType","name","isFinite","isNaN","parseFloat","isNumber","isBoolean","isNull","isUndefined","noConflict","accum","floor","escape","&","<",">","\"","'","/","entityRegexes","unescape","RegExp","join","idCounter","string","replace","match","property","mixin","noMatch","uniqueId","prefix","id","templateSettings","evaluate","interpolate","escapes","\\","\r","\n","\t","
","
","escaper","template","text","data","settings","render","matcher","offset","variable","e","chain","_chain","toJSON","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","cx","escapable","gap","indent","meta","\b","\f","rep","quote","lastIndex","test","c","charCodeAt","str","holder","k","v","mind","stringify","replacer","space","","parse","reviver","j","walk","undefined","eval","SyntaxError","subscriptions","amplify","publish","topic","subscription","ret","callback","subscribe","priority","topicIndex","topics","split","topicLength","subscriptionInfo","splice","unshift","unsubscribe","webStorageType","div","attrKey","memory","store","type","types","rprefix","addType","storage","error","createFromStorageInterface","storageType","storedValue","parsed","remove","getTime","getItem","expires","removeItem","setItem","localStorage","sessionStorage","window","globalStorage","location","hostname","document","createElement","style","display","getElementsByTagName","appendChild","addBehavior","load","attr","prevValue","getAttribute","removeAttribute","setAttribute","save","userData","XMLDocument","documentElement","attributes","origParse","numericKeys","date","timestamp","struct","minutesOffset","exec","UTC","NaN","factory","define","amd","require","jQuery","$","pluses","encode","s","config","raw","encodeURIComponent","read","converter","decodeURIComponent","json","cookie","days","t","setTime","toUTCString","path","domain","secure","cookies","parts","shift","removeCookie","idleTimer","firstParam","elem","toggleIdleState","event","idle","olddate","Event","trigger","reset","idleBackup","lastActive","tId","opts","events","jqElem","removeData","off","on","trim","handleEvent","pageX","pageY","fn","purl","tag2attr","img","form","base","script","iframe","link","embed","aliases","anchor","parser","strict","loose","isint","promote","parent","val","part","key_array","substr","merge","parseString","accumulator","curr","pair","eql","brace","vArg","url","strictMode","decodeURI","res","uri","param","seg","fragment","host","protocol","port","query","fparam","segment","fsegment","elm","tn","tagName","toLowerCase","ContextMenu","elements","$elements","before","onItem","listen","show","$this","_clickEvent","is","evt","currentTarget","$menu","getMenu","tp","getPosition","css","addClass","proxy","closemenu","reposition","removeClass","selector","mouseX","clientX","mouseY","clientY","boundsX","width","boundsY","height","menuWidth","outerWidth","menuHeight","outerHeight","position","top","clearMenus","ctrlKey","contextmenu","option","Constructor","preventDefault","createElementNS","createMethod","_toggle","testElement","classList","add","original","DOMTokenList","token","toggle","force","view","classListProp","protoProp","elemCtrProto","Element","objCtr","strTrim","arrIndexOf","DOMEx","message","code","DOMException","checkTokenAndGetIndex","ClassList","trimmedClasses","classes","_updateClassName","classListProto","classListGetter","tokens","updated","defineProperty","classListPropDesc","get","enumerable","configurable","ex","number","__defineGetter__","Symbol","console","log","dir","isDebug","setDebug","debug","doDuringFade","outSpeed","inSpeed","fadeOut","queue","fadeIn","changeTextDuringFade","newText","$el","fadetext","elt","dequeue","equalHeights","maxHeight","innerHeight","onDelayedKeyup","handler","timerKey","plupload","guid","keyup","element","toggleClick","iteration","click","isOnScreen","win","viewport","scrollTop","scrollLeft","bounds","bottom","getFormFromSubmitButton","btn","closest","not","submitOnClick","hasClass","submit","wsForm","wsButtons","ft_Popover","init","popover","bs_popover","cssClass","tip","$tip","_document_onclick","hide","stopPropagation","unbind","dataName","popoverVersion","undef","uid","count","runtimes","i18n","mimes","xmlEncodeChars","xmlEncodeRegExp","eventhash","returnValue","cancelBubble","y","ext","items","nav","userAgent","vendor","webkit","opera","STOPPED","STARTED","QUEUED","UPLOADING","FAILED","DONE","GENERIC_ERROR","HTTP_ERROR","IO_ERROR","SECURITY_ERROR","INIT_ERROR","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","IMAGE_FORMAT_ERROR","IMAGE_MEMORY_ERROR","IMAGE_DIMENSIONS_ERROR","mimeTypes","ua","navigator","safari","buildNumber","windows","platform","ie","appName","gecko","typeOf","o","arg","cleanName","lookup","addRuntime","runtime","guidPrefix","buildUrl","formatSize","translate","round","getPos","node","nodeRect","rootRect","x","doc","getIEPos","bodyElm","rect","getBoundingClientRect","compatMode","body","documentMode","offsetLeft","offsetTop","offsetParent","parentNode","getSize","w","offsetWidth","clientWidth","h","offsetHeight","clientHeight","parseSize","mul","xmlEncode","chr","arr","inArray","needle","addI18n","pack","isEmptyObj","regExp","$0","$1","$2","getStyle","currentStyle","getComputedStyle","addEvent","addEventListener","attachEvent","srcElement","orig","removeEvent","removeEventListener","detachEvent","removeAllEvents","Uploader","total","startTime","disabled","files","uploadNext","file","state","status","calc","loaded","uploaded","failed","queued","percent","bytesPerSec","QueueProgress","chunk_size","multipart","multi_selection","file_data_name","filters","features","runtimeList","runTimeIndex","preinit","page_url","pathname","max_file_size","up","selected_files","extensionsRegExp","mime_types","extensions","refresh","unique_names","matches","target_name","err","callNextInit","requiredFeatures","getFeatures","required_features","success","disableBrowse","getFile","removeFile","removed","scope","hasEventListener","unbindAll","destroy","File","Runtime","uploader","fakeSafariDragDrop","html5files","readFileAsBinary","reader","FileReader","readAsBinaryString","onload","getAsBinary","scaleImage","resize","mime","canvas","scale","getContext","Image","onerror","onabort","jpegHeaders","exifParser","drawImage","JPEG_Headers","atob","substring","ExifParser","setExif","set","getBinary","EXIF","GPS","toDataURL","restore","purge","removeChild","src","readAsDataURL","getAsDataURL","BinaryReader","bin","II","mv","sum","abs","putstr","order","binData","SEGMENT","BYTE","SHORT","LONG","num","write","fromCharCode","SLONG","STRING","marker","limit","markers","65505","app","signature","65506","65517","headers","hex","toUpperCase","hdr","ii","tags","tagDescs","offsets","extractTags","IFD_offset","tags2extract","tag","hash","tiffHeader","tiff","274","34665","34853","exif","36864","40961","40962","40963","36867","33434","33437","34855","37377","37378","37383","37384","37385","41986","41987","41990","41988","41992","41993","41994","gps","0","1","2","3","4","ColorSpace","MeteringMode","5","6","255","LightSource","9","10","11","12","13","14","15","17","18","19","20","21","22","23","24","Flash","7","16","25","29","31","32","65","69","71","73","77","79","89","93","95","ExposureMode","WhiteBalance","SceneCaptureType","Contrast","Saturation","Sharpness","GPSLatitudeRef","N","S","GPSLongitudeRef","E","W","Tiff","ExifIFDPointer","GPSInfoIFDPointer","Exif","exifIFD","ExifVersion","exifVersion","gpsIFD","GPSVersionID","setTag","tagOffset","ifd","valueOffset","tmpTags","Html5","hasProgress","canSendBinary","dataAccessSupport","sliceSupport","hasXhrSupport","XMLHttpRequest","xhr","upload","sendAsBinary","Uint8Array","ArrayBuffer","mozSlice","webkitSlice","html5","dragdrop","jpgresize","pngresize","FormData","cantSendBlobInFormData","readAsArrayBuffer","progress","chunks","triggerDialog","addSelectedFiles","native_files","fileNames","fileName","fileSize","browseButton","hoverClass","activeClass","container","inputContainer","background","shim_bgcolor","overflow","zIndex","opacity","getElementById","no_type_restriction","innerHTML","inputFile","cssFloat","styleFloat","onchange","browse_button","browse_button_hover","browse_button_active","topElement","dropElm","drop_element","dropSize","dropInputElm","dataTransfer","browseSize","browsePos","parseInt","abort","nativeFile","sendBinaryBlob","blob","chunk","fr","uploadNextChunk","chunkBlob","chunkSize","curChunkSize","mimeType","prepareAndSend","formData","multipartDeltaSize","boundary","crlf","multipartBlob","onprogress","onreadystatechange","httpStatus","chunkArgs","readyState","response","responseText","cancelled","open","setRequestHeader","multipart_params","append","send","ui8a","buffer","end","blobSlice","uploadInstances","initialized","flash","maxWidth","flashContainer","el","html","waitCount","getFlashObj","version","plugins","description","e1","ActiveXObject","GetVariable","e2","flash_swf_url","outerHTML","waitLoad","setFileFilters","uploadFile","quality","format","urlstream_upload","cancelUpload","flash_file","info","details","getById","Html4","currentFile","currentFileId","fileIds","IE","hidden","insertBefore","firstChild","temp","contentWindow","contentDocument","frames","createForm","bgcolor","fontSize","cursor"],"mappings":"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","file":"common.js","sourcesContent":["/*\nhttp://www.JSON.org/json2.js\n2011-02-23\n\nPublic Domain.\n\nNO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\nSee http://www.JSON.org/js.html\n\n\nThis code should be minified before deployment.\nSee http://javascript.crockford.com/jsmin.html\n\nUSE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\nNOT CONTROL.\n\n\nThis file creates a global JSON object containing two methods: stringify\nand parse.\n\nJSON.stringify(value, replacer, space)\nvalue any JavaScript value, usually an object or array.\n\nreplacer an optional parameter that determines how object\nvalues are stringified for objects. It can be a\nfunction or an array of strings.\n\nspace an optional parameter that specifies the indentation\nof nested structures. If it is omitted, the text will\nbe packed without extra whitespace. If it is a number,\nit will specify the number of spaces to indent at each\nlevel. If it is a string (such as '\\t' or ' '),\nit contains the characters used to indent at each level.\n\nThis method produces a JSON text from a JavaScript value.\n\nWhen an object value is found, if the object contains a toJSON\nmethod, its toJSON method will be called and the result will be\nstringified. A toJSON method does not serialize: it returns the\nvalue represented by the name/value pair that should be serialized,\nor undefined if nothing should be serialized. The toJSON method\nwill be passed the key associated with the value, and this will be\nbound to the value\n\nFor example, this would serialize Dates as ISO strings.\n\nDate.prototype.toJSON = function (key) {\nfunction f(n) {\n// Format integers to have at least two digits.\nreturn n < 10 ? '0' + n : n;\n}\n\nreturn this.getUTCFullYear() + '-' +\nf(this.getUTCMonth() + 1) + '-' +\nf(this.getUTCDate()) + 'T' +\nf(this.getUTCHours()) + ':' +\nf(this.getUTCMinutes()) + ':' +\nf(this.getUTCSeconds()) + 'Z';\n};\n\nYou can provide an optional replacer method. It will be passed the\nkey and value of each member, with this bound to the containing\nobject. The value that is returned from your method will be\nserialized. If your method returns undefined, then the member will\nbe excluded from the serialization.\n\nIf the replacer parameter is an array of strings, then it will be\nused to select the members to be serialized. It filters the results\nsuch that only members with keys listed in the replacer array are\nstringified.\n\nValues that do not have JSON representations, such as undefined or\nfunctions, will not be serialized. Such values in objects will be\ndropped; in arrays they will be replaced with null. You can use\na replacer function to replace those with JSON values.\nJSON.stringify(undefined) returns undefined.\n\nThe optional space parameter produces a stringification of the\nvalue that is filled with line breaks and indentation to make it\neasier to read.\n\nIf the space parameter is a non-empty string, then that string will\nbe used for indentation. If the space parameter is a number, then\nthe indentation will be that many spaces.\n\nExample:\n\ntext = JSON.stringify(['e', {pluribus: 'unum'}]);\n// text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n\ntext = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\t');\n// text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\ntext = JSON.stringify([new Date()], function (key, value) {\nreturn this[key] instanceof Date ?\n'Date(' + this[key] + ')' : value;\n});\n// text is '[\"Date(---current time---)\"]'\n\n\nJSON.parse(text, reviver)\nThis method parses a JSON text to produce an object or array.\nIt can throw a SyntaxError exception.\n\nThe optional reviver parameter is a function that can filter and\ntransform the results. It receives each of the keys and values,\nand its return value is used instead of the original value.\nIf it returns what it received, then the structure is not modified.\nIf it returns undefined then the member is deleted.\n\nExample:\n\n// Parse the text. Values that look like ISO date strings will\n// be converted to Date objects.\n\nmyData = JSON.parse(text, function (key, value) {\nvar a;\nif (typeof value === 'string') {\na =\n/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\nif (a) {\nreturn new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n+a[5], +a[6]));\n}\n}\nreturn value;\n});\n\nmyData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\nvar d;\nif (typeof value === 'string' &&\nvalue.slice(0, 5) === 'Date(' &&\nvalue.slice(-1) === ')') {\nd = new Date(value.slice(5, -1));\nif (d) {\nreturn d;\n}\n}\nreturn value;\n});\n\n\nThis is a reference implementation. You are free to copy, modify, or\nredistribute.\n*/\n\n/*jslint evil: true, strict: false, regexp: false */\n\n/*members \"\", \"\\b\", \"\\t\", \"\\n\", \"\\f\", \"\\r\", \"\\\"\", JSON, \"\\\\\", apply,\ncall, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\ngetUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\nlastIndex, length, parse, prototype, push, replace, slice, stringify,\ntest, toJSON, toString, valueOf\n*/\n\n\n// Create a JSON object only if one does not already exist. We create the\n// methods in a closure to avoid creating global variables.\n\nvar JSON;\nif (!JSON) {\n JSON = {};\n}\n\n(function () {\n \"use strict\";\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10 ? '0' + n : n;\n }\n\n if (typeof Date.prototype.toJSON !== 'function') {\n\n Date.prototype.toJSON = function (key) {\n\n return isFinite(this.valueOf()) ?\n this.getUTCFullYear() + '-' +\n f(this.getUTCMonth() + 1) + '-' +\n f(this.getUTCDate()) + 'T' +\n f(this.getUTCHours()) + ':' +\n f(this.getUTCMinutes()) + ':' +\n f(this.getUTCSeconds()) + 'Z' : null;\n };\n\n String.prototype.toJSON =\n Number.prototype.toJSON =\n Boolean.prototype.toJSON = function (key) {\n return this.valueOf();\n };\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n mind = gap,\n partial,\n value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n\n case 'object':\n\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0 ? '[]' : gap ?\n '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === 'string') {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0 ? '{}' : gap ?\n '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' :\n '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== 'function') {\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = '';\n indent = '';\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === 'string') {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n\n return str('', { '': value });\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== 'function') {\n JSON.parse = function (text, reviver) {\n\n // The parse method takes a text and an optional reviver function, and returns\n // a JavaScript value if the text is a valid JSON text.\n\n var j;\n\n function walk(holder, key) {\n\n // The walk method is used to recursively walk the resulting structure so\n // that modifications can be made.\n\n var k, v, value = holder[key];\n if (value && typeof value === 'object') {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = walk(value, k);\n if (v !== undefined) {\n value[k] = v;\n } else {\n delete value[k];\n }\n }\n }\n }\n return reviver.call(holder, key, value);\n }\n\n\n // Parsing happens in four stages. In the first stage, we replace certain\n // Unicode characters with escape sequences. JavaScript handles many characters\n // incorrectly, either silently deleting them, or treating them as line endings.\n\n text = String(text);\n cx.lastIndex = 0;\n if (cx.test(text)) {\n text = text.replace(cx, function (a) {\n return '\\\\u' +\n ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n });\n }\n\n // In the second stage, we run the text against regular expressions that look\n // for non-JSON patterns. We are especially concerned with '()' and 'new'\n // because they can cause invocation, and '=' because it can cause mutation.\n // But just to be safe, we want to reject all unexpected forms.\n\n // We split the second stage into 4 regexp operations in order to work around\n // crippling inefficiencies in IE's and Safari's regexp engines. First we\n // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\n // replace all simple value tokens with ']' characters. Third, we delete all\n // open brackets that follow a colon or comma or that begin the text. Finally,\n // we look to see that the remaining characters are only whitespace or ']' or\n // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\n\n if (/^[\\],:{}\\s]*$/\n .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\n .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\n\n // In the third stage we use the eval function to compile the text into a\n // JavaScript structure. The '{' operator is subject to a syntactic ambiguity\n // in JavaScript: it can begin a block or an object literal. We wrap the text\n // in parens to eliminate the ambiguity.\n\n j = eval('(' + text + ')');\n\n // In the optional fourth stage, we recursively walk the new structure, passing\n // each name/value pair to a reviver function for possible transformation.\n\n return typeof reviver === 'function' ?\n walk({ '': j }, '') : j;\n }\n\n // If the text is not JSON parseable, then a SyntaxError is thrown.\n\n throw new SyntaxError('JSON.parse');\n };\n }\n} ());\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*eslint no-console:0*/\n// console helpers & polyfill for browsers which don't support it\n//\n(function () {\n if (!window.console) window.console = {\n log: function log() {},\n dir: function dir() {},\n error: function error() {}\n };\n\n var isDebug = false;\n\n window.console.setDebug = function (toggle) {\n ///turns debugging on\n isDebug = toggle !== false;\n };\n\n // In ie8 & 9 console.log is an object, not a function, so console.log.apply will not work. \n // make sure we have a reference to a function\n // see http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9\n var log = _typeof(console.log) == 'object' ? function (text) {\n console.log(text);\n } : console.log;\n\n window.console.debug = function (text) {\n /// \n /// logs the text to console, only if setDebug() has been turned on\n /// \n /// \n /// runs the function if debug is on\n /// \n\n if (isDebug && typeof text === 'function') text();else if (isDebug) log.apply(window.console, arguments);\n\n return isDebug;\n };\n})();","// Underscore.js 1.5.1\n// http://underscorejs.org\n// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function () {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `global` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Establish the object that gets returned to break out of a loop iteration.\n var breaker = {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n concat = ArrayProto.concat,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeForEach = ArrayProto.forEach,\n nativeMap = ArrayProto.map,\n nativeReduce = ArrayProto.reduce,\n nativeReduceRight = ArrayProto.reduceRight,\n nativeFilter = ArrayProto.filter,\n nativeEvery = ArrayProto.every,\n nativeSome = ArrayProto.some,\n nativeIndexOf = ArrayProto.indexOf,\n nativeLastIndexOf = ArrayProto.lastIndexOf,\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind;\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function (obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object via a string identifier,\n // for Closure Compiler \"advanced\" mode.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.5.1';\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles objects with the built-in `forEach`, arrays, and raw objects.\n // Delegates to **ECMAScript 5**'s native `forEach` if available.\n var each = _.each = _.forEach = function (obj, iterator, context) {\n if (obj == null) return;\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l = obj.length; i < l; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var key in obj) {\n if (_.has(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === breaker) return;\n }\n }\n }\n };\n\n // Return the results of applying the iterator to each element.\n // Delegates to **ECMAScript 5**'s native `map` if available.\n _.map = _.collect = function (obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n each(obj, function (value, index, list) {\n results.push(iterator.call(context, value, index, list));\n });\n return results;\n };\n\n var reduceError = 'Reduce of empty array with no initial value';\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n _.reduce = _.foldl = _.inject = function (obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n if (nativeReduce && obj.reduce === nativeReduce) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n }\n each(obj, function (value, index, list) {\n if (!initial) {\n memo = value;\n initial = true;\n } else {\n memo = iterator.call(context, memo, value, index, list);\n }\n });\n if (!initial) throw new TypeError(reduceError);\n return memo;\n };\n\n // The right-associative version of reduce, also known as `foldr`.\n // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n _.reduceRight = _.foldr = function (obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n }\n var length = obj.length;\n if (length !== +length) {\n var keys = _.keys(obj);\n length = keys.length;\n }\n each(obj, function (value, index, list) {\n index = keys ? keys[--length] : --length;\n if (!initial) {\n memo = obj[index];\n initial = true;\n } else {\n memo = iterator.call(context, memo, obj[index], index, list);\n }\n });\n if (!initial) throw new TypeError(reduceError);\n return memo;\n };\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function (obj, iterator, context) {\n var result;\n any(obj, function (value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n });\n return result;\n };\n\n // Return all the elements that pass a truth test.\n // Delegates to **ECMAScript 5**'s native `filter` if available.\n // Aliased as `select`.\n _.filter = _.select = function (obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n each(obj, function (value, index, list) {\n if (iterator.call(context, value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function (obj, iterator, context) {\n return _.filter(obj, function (value, index, list) {\n return !iterator.call(context, value, index, list);\n }, context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Delegates to **ECMAScript 5**'s native `every` if available.\n // Aliased as `all`.\n _.every = _.all = function (obj, iterator, context) {\n iterator || (iterator = _.identity);\n var result = true;\n if (obj == null) return result;\n if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n each(obj, function (value, index, list) {\n if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Delegates to **ECMAScript 5**'s native `some` if available.\n // Aliased as `any`.\n var any = _.some = _.any = function (obj, iterator, context) {\n iterator || (iterator = _.identity);\n var result = false;\n if (obj == null) return result;\n if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n each(obj, function (value, index, list) {\n if (result || (result = iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n };\n\n // Determine if the array or object contains a given value (using `===`).\n // Aliased as `include`.\n _.contains = _.include = function (obj, target) {\n if (obj == null) return false;\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n return any(obj, function (value) {\n return value === target;\n });\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function (obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function (value) {\n return (isFunc ? method : value[method]).apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function (obj, key) {\n return _.map(obj, function (value) { return value[key]; });\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function (obj, attrs, first) {\n if (_.isEmpty(attrs)) return first ? void 0 : [];\n return _[first ? 'find' : 'filter'](obj, function (value) {\n for (var key in attrs) {\n if (attrs[key] !== value[key]) return false;\n }\n return true;\n });\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function (obj, attrs) {\n return _.where(obj, attrs, true);\n };\n\n // Return the maximum element or (element-based computation).\n // Can't optimize arrays of integers longer than 65,535 elements.\n // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)\n _.max = function (obj, iterator, context) {\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n return Math.max.apply(Math, obj);\n }\n if (!iterator && _.isEmpty(obj)) return -Infinity;\n var result = { computed: -Infinity, value: -Infinity };\n each(obj, function (value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed > result.computed && (result = { value: value, computed: computed });\n });\n return result.value;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function (obj, iterator, context) {\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n return Math.min.apply(Math, obj);\n }\n if (!iterator && _.isEmpty(obj)) return Infinity;\n var result = { computed: Infinity, value: Infinity };\n each(obj, function (value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed < result.computed && (result = { value: value, computed: computed });\n });\n return result.value;\n };\n\n // Shuffle an array.\n _.shuffle = function (obj) {\n var rand;\n var index = 0;\n var shuffled = [];\n each(obj, function (value) {\n rand = _.random(index++);\n shuffled[index - 1] = shuffled[rand];\n shuffled[rand] = value;\n });\n return shuffled;\n };\n\n // An internal function to generate lookup iterators.\n var lookupIterator = function (value) {\n return _.isFunction(value) ? value : function (obj) { return obj[value]; };\n };\n\n // Sort the object's values by a criterion produced by an iterator.\n _.sortBy = function (obj, value, context) {\n var iterator = lookupIterator(value);\n return _.pluck(_.map(obj, function (value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iterator.call(context, value, index, list)\n };\n }).sort(function (left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index < right.index ? -1 : 1;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function (obj, value, context, behavior) {\n var result = {};\n var iterator = lookupIterator(value == null ? _.identity : value);\n each(obj, function (value, index) {\n var key = iterator.call(context, value, index, obj);\n behavior(result, key, value);\n });\n return result;\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = function (obj, value, context) {\n return group(obj, value, context, function (result, key, value) {\n (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n });\n };\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = function (obj, value, context) {\n return group(obj, value, context, function (result, key) {\n if (!_.has(result, key)) result[key] = 0;\n result[key]++;\n });\n };\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function (array, obj, iterator, context) {\n iterator = iterator == null ? _.identity : lookupIterator(iterator);\n var value = iterator.call(context, obj);\n var low = 0, high = array.length;\n while (low < high) {\n var mid = (low + high) >>> 1;\n iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n }\n return low;\n };\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function (obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (obj.length === +obj.length) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function (obj) {\n if (obj == null) return 0;\n return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function (array, n, guard) {\n if (array == null) return void 0;\n return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N. The **guard** check allows it to work with\n // `_.map`.\n _.initial = function (array, n, guard) {\n return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array. The **guard** check allows it to work with `_.map`.\n _.last = function (array, n, guard) {\n if (array == null) return void 0;\n if ((n != null) && !guard) {\n return slice.call(array, Math.max(array.length - n, 0));\n } else {\n return array[array.length - 1];\n }\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array. The **guard**\n // check allows it to work with `_.map`.\n _.rest = _.tail = _.drop = function (array, n, guard) {\n return slice.call(array, (n == null) || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function (array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function (input, shallow, output) {\n if (shallow && _.every(input, _.isArray)) {\n return concat.apply(output, input);\n }\n each(input, function (value) {\n if (_.isArray(value) || _.isArguments(value)) {\n shallow ? push.apply(output, value) : flatten(value, shallow, output);\n } else {\n output.push(value);\n }\n });\n return output;\n };\n\n // Return a completely flattened version of an array.\n _.flatten = function (array, shallow) {\n return flatten(array, shallow, []);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function (array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function (array, isSorted, iterator, context) {\n if (_.isFunction(isSorted)) {\n context = iterator;\n iterator = isSorted;\n isSorted = false;\n }\n var initial = iterator ? _.map(array, iterator, context) : array;\n var results = [];\n var seen = [];\n each(initial, function (value, index) {\n if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n seen.push(value);\n results.push(array[index]);\n }\n });\n return results;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function () {\n return _.uniq(_.flatten(arguments, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function (array) {\n var rest = slice.call(arguments, 1);\n return _.filter(_.uniq(array), function (item) {\n return _.every(rest, function (other) {\n return _.indexOf(other, item) >= 0;\n });\n });\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function (array) {\n var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n return _.filter(array, function (value) { return !_.contains(rest, value); });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function () {\n var length = _.max(_.pluck(arguments, \"length\").concat(0));\n var results = new Array(length);\n for (var i = 0; i < length; i++) {\n results[i] = _.pluck(arguments, '' + i);\n }\n return results;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function (list, values) {\n if (list == null) return {};\n var result = {};\n for (var i = 0, l = list.length; i < l; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n // we need this function. Return the position of the first occurrence of an\n // item in an array, or -1 if the item is not included in the array.\n // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = function (array, item, isSorted) {\n if (array == null) return -1;\n var i = 0, l = array.length;\n if (isSorted) {\n if (typeof isSorted == 'number') {\n i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);\n } else {\n i = _.sortedIndex(array, item);\n return array[i] === item ? i : -1;\n }\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n for (; i < l; i++) if (array[i] === item) return i;\n return -1;\n };\n\n // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n _.lastIndexOf = function (array, item, from) {\n if (array == null) return -1;\n var hasIndex = from != null;\n if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n }\n var i = (hasIndex ? from : array.length);\n while (i--) if (array[i] === item) return i;\n return -1;\n };\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function (start, stop, step) {\n if (arguments.length <= 1) {\n stop = start || 0;\n start = 0;\n }\n step = arguments[2] || 1;\n\n var len = Math.max(Math.ceil((stop - start) / step), 0);\n var idx = 0;\n var range = new Array(len);\n\n while (idx < len) {\n range[idx++] = start;\n start += step;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Reusable constructor function for prototype setting.\n var ctor = function () { };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function (func, context) {\n var args, bound;\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError;\n args = slice.call(arguments, 2);\n return bound = function () {\n if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n ctor.prototype = func.prototype;\n var self = new ctor;\n ctor.prototype = null;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) return result;\n return self;\n };\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context.\n _.partial = function (func) {\n var args = slice.call(arguments, 1);\n return function () {\n return func.apply(this, args.concat(slice.call(arguments)));\n };\n };\n\n // Bind all of an object's methods to that object. Useful for ensuring that\n // all callbacks defined on an object belong to it.\n _.bindAll = function (obj) {\n var funcs = slice.call(arguments, 1);\n if (funcs.length === 0) throw new Error(\"bindAll must be passed function names\");\n each(funcs, function (f) { obj[f] = _.bind(obj[f], obj); });\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function (func, hasher) {\n var memo = {};\n hasher || (hasher = _.identity);\n return function () {\n var key = hasher.apply(this, arguments);\n return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n };\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function (func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function () { return func.apply(null, args); }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = function (func) {\n return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n };\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function (func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n options || (options = {});\n var later = function () {\n previous = options.leading === false ? 0 : new Date;\n timeout = null;\n result = func.apply(context, args);\n };\n return function () {\n var now = new Date;\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function (func, wait, immediate) {\n var result;\n var timeout = null;\n return function () {\n var context = this, args = arguments;\n var later = function () {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(context, args);\n return result;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = function (func) {\n var ran = false, memo;\n return function () {\n if (ran) return memo;\n ran = true;\n memo = func.apply(this, arguments);\n func = null;\n return memo;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function (func, wrapper) {\n return function () {\n var args = [func];\n push.apply(args, arguments);\n return wrapper.apply(this, args);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function () {\n var funcs = arguments;\n return function () {\n var args = arguments;\n for (var i = funcs.length - 1; i >= 0; i--) {\n args = [funcs[i].apply(this, args)];\n }\n return args[0];\n };\n };\n\n // Returns a function that will only be executed after being called N times.\n _.after = function (times, func) {\n return function () {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Object Functions\n // ----------------\n\n // Retrieve the names of an object's properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = nativeKeys || function (obj) {\n if (obj !== Object(obj)) throw new TypeError('Invalid object');\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function (obj) {\n var values = [];\n for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);\n return values;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function (obj) {\n var pairs = [];\n for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function (obj) {\n var result = {};\n for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function (obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = function (obj) {\n each(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function (obj) {\n var copy = {};\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n each(keys, function (key) {\n if (key in obj) copy[key] = obj[key];\n });\n return copy;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function (obj) {\n var copy = {};\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n for (var key in obj) {\n if (!_.contains(keys, key)) copy[key] = obj[key];\n }\n return copy;\n };\n\n // Fill in a given object with default properties.\n _.defaults = function (obj) {\n each(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function (obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function (obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function (a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a == 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className != toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, dates, and booleans are compared by value.\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return a == String(b);\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n // other numeric values.\n return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a == +b;\n // RegExps are compared by their source patterns and flags.\n case '[object RegExp]':\n return a.source == b.source &&\n a.global == b.global &&\n a.multiline == b.multiline &&\n a.ignoreCase == b.ignoreCase;\n }\n if (typeof a != 'object' || typeof b != 'object') return false;\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] == a) return bStack[length] == b;\n }\n // Objects with different constructors are not equivalent, but `Object`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n return false;\n }\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n var size = 0, result = true;\n // Recursively compare objects and arrays.\n if (className == '[object Array]') {\n // Compare array lengths to determine if a deep comparison is necessary.\n size = a.length;\n result = size == b.length;\n if (result) {\n // Deep compare the contents, ignoring non-numeric properties.\n while (size--) {\n if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n }\n }\n } else {\n // Deep compare objects.\n for (var key in a) {\n if (_.has(a, key)) {\n // Count the expected number of properties.\n size++;\n // Deep compare each member.\n if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n }\n }\n // Ensure that both objects contain the same number of properties.\n if (result) {\n for (key in b) {\n if (_.has(b, key) && !(size--)) break;\n }\n result = !size;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return result;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function (a, b) {\n return eq(a, b, [], []);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function (obj) {\n if (obj == null) return true;\n if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n for (var key in obj) if (_.has(obj, key)) return false;\n return true;\n };\n\n // Is a given value a DOM element?\n _.isElement = function (obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function (obj) {\n return toString.call(obj) == '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function (obj) {\n return obj === Object(obj);\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\n each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function (name) {\n _['is' + name] = function (obj) {\n return toString.call(obj) == '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function (obj) {\n return !!(obj && _.has(obj, 'callee'));\n };\n }\n\n // Optimize `isFunction` if appropriate.\n if (typeof (/./) !== 'function') {\n _.isFunction = function (obj) {\n return typeof obj === 'function';\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function (obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function (obj) {\n return _.isNumber(obj) && obj != +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function (obj) {\n return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function (obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function (obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function () {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iterators.\n _.identity = function (value) {\n return value;\n };\n\n // Run a function **n** times.\n _.times = function (n, iterator, context) {\n var accum = Array(Math.max(0, n));\n for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // List of HTML entities for escaping.\n var entityMap = {\n escape: {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n }\n };\n entityMap.unescape = _.invert(entityMap.escape);\n\n // Regexes containing the keys and values listed immediately above.\n var entityRegexes = {\n escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\n unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\n };\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n _.each(['escape', 'unescape'], function (method) {\n _[method] = function (string) {\n if (string == null) return '';\n return ('' + string).replace(entityRegexes[method], function (match) {\n return entityMap[method][match];\n });\n };\n });\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function (object, property) {\n if (object == null) return void 0;\n var value = object[property];\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function (obj) {\n each(_.functions(obj), function (name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function () {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result.call(this, func.apply(_, args));\n };\n });\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function (prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\t': 't',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n _.template = function (text, data, settings) {\n var render;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = new RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function (match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset)\n .replace(escaper, function (match) { return '\\\\' + escapes[match]; });\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n }\n if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n }\n if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n index = offset + match.length;\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + \"return __p;\\n\";\n\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n if (data) return render(data, _);\n var template = function (data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled function source as a convenience for precompilation.\n template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function, which will delegate to the wrapper.\n _.chain = function (obj) {\n return _(obj).chain();\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function (obj) {\n return this._chain ? _(obj).chain() : obj;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function (name) {\n var method = ArrayProto[name];\n _.prototype[name] = function () {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\n return result.call(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n each(['concat', 'join', 'slice'], function (name) {\n var method = ArrayProto[name];\n _.prototype[name] = function () {\n return result.call(this, method.apply(this._wrapped, arguments));\n };\n });\n\n _.extend(_.prototype, {\n\n // Start chaining a wrapped Underscore object.\n chain: function () {\n this._chain = true;\n return this;\n },\n\n // Extracts the result from a wrapped and chained object.\n value: function () {\n return this._wrapped;\n }\n\n });\n\n}).call(this);","/*jsl:ignoreall*/\n/*!\n * Amplify Core 1.0.0\n * \n * Copyright 2011 appendTo LLC. (http://appendto.com/team)\n * Dual licensed under the MIT or GPL licenses.\n * http://appendto.com/open-source-licenses\n * \n * http://amplifyjs.com\n */\n(function( global, undefined ) {\n\nvar slice = [].slice,\n\tsubscriptions = {};\n\nvar amplify = global.amplify = {\n\tpublish: function( topic ) {\n\t\tvar args = slice.call( arguments, 1 ),\n\t\t\tsubscription,\n\t\t\tlength,\n\t\t\ti = 0,\n\t\t\tret;\n\n\t\tif ( !subscriptions[ topic ] ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tfor ( length = subscriptions[ topic ].length; i < length; i++ ) {\n\t\t\tsubscription = subscriptions[ topic ][ i ];\n\t\t\tret = subscription.callback.apply( subscription.context, args );\n\t\t\tif ( ret === false ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn ret !== false;\n\t},\n\n\tsubscribe: function( topic, context, callback, priority ) {\n\t\tif ( arguments.length === 3 && typeof callback === \"number\" ) {\n\t\t\tpriority = callback;\n\t\t\tcallback = context;\n\t\t\tcontext = null;\n\t\t}\n\t\tif ( arguments.length === 2 ) {\n\t\t\tcallback = context;\n\t\t\tcontext = null;\n\t\t}\n\t\tpriority = priority || 10;\n\n\t\tvar topicIndex = 0,\n\t\t\ttopics = topic.split( /\\s/ ),\n\t\t\ttopicLength = topics.length;\n\t\tfor ( ; topicIndex < topicLength; topicIndex++ ) {\n\t\t\ttopic = topics[ topicIndex ];\n\t\t\tif ( !subscriptions[ topic ] ) {\n\t\t\t\tsubscriptions[ topic ] = [];\n\t\t\t}\n\t\n\t\t\tvar i = subscriptions[ topic ].length - 1,\n\t\t\t\tsubscriptionInfo = {\n\t\t\t\t\tcallback: callback,\n\t\t\t\t\tcontext: context,\n\t\t\t\t\tpriority: priority\n\t\t\t\t};\n\t\n\t\t\tfor ( ; i >= 0; i-- ) {\n\t\t\t\tif ( subscriptions[ topic ][ i ].priority <= priority ) {\n\t\t\t\t\tsubscriptions[ topic ].splice( i + 1, 0, subscriptionInfo );\n\t\t\t\t\treturn callback;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tsubscriptions[ topic ].unshift( subscriptionInfo );\n\t\t}\n\n\t\treturn callback;\n\t},\n\n\tunsubscribe: function( topic, callback ) {\n\t\tif ( !subscriptions[ topic ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar length = subscriptions[ topic ].length,\n\t\t\ti = 0;\n\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tif ( subscriptions[ topic ][ i ].callback === callback ) {\n\t\t\t\tsubscriptions[ topic ].splice( i, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\n}( this ) );\n\n\n/*!\n * Amplify Store - Persistent Client-Side Storage 1.0.0\n * \n * Copyright 2011 appendTo LLC. (http://appendto.com/team)\n * Dual licensed under the MIT or GPL licenses.\n * http://appendto.com/open-source-licenses\n * \n * http://amplifyjs.com\n */\n(function( amplify, undefined ) {\n\nvar store = amplify.store = function( key, value, options, type ) {\n\tvar type = store.type;\n\tif ( options && options.type && options.type in store.types ) {\n\t\ttype = options.type;\n\t}\n\treturn store.types[ type ]( key, value, options || {} );\n};\n\nstore.types = {};\nstore.type = null;\nstore.addType = function( type, storage ) {\n\tif ( !store.type ) {\n\t\tstore.type = type;\n\t}\n\n\tstore.types[ type ] = storage;\n\tstore[ type ] = function( key, value, options ) {\n\t\toptions = options || {};\n\t\toptions.type = type;\n\t\treturn store( key, value, options );\n\t};\n}\nstore.error = function() {\n\treturn \"amplify.store quota exceeded\"; \n};\n\nvar rprefix = /^__amplify__/;\nfunction createFromStorageInterface( storageType, storage ) {\n\tstore.addType( storageType, function( key, value, options ) {\n\t\tvar storedValue, parsed, i, remove,\n\t\t\tret = value,\n\t\t\tnow = (new Date()).getTime();\n\n\t\tif ( !key ) {\n\t\t\tret = {};\n\t\t\tremove = [];\n\t\t\ti = 0;\n\t\t\ttry {\n\t\t\t\t// accessing the length property works around a localStorage bug\n\t\t\t\t// in Firefox 4.0 where the keys don't update cross-page\n\t\t\t\t// we assign to key just to avoid Closure Compiler from removing\n\t\t\t\t// the access as \"useless code\"\n\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=662511\n\t\t\t\tkey = storage.length;\n\n\t\t\t\twhile ( key = storage.key( i++ ) ) {\n\t\t\t\t\tif ( rprefix.test( key ) ) {\n\t\t\t\t\t\tparsed = JSON.parse( storage.getItem( key ) );\n\t\t\t\t\t\tif ( parsed.expires && parsed.expires <= now ) {\n\t\t\t\t\t\t\tremove.push( key );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tret[ key.replace( rprefix, \"\" ) ] = parsed.data;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile ( key = remove.pop() ) {\n\t\t\t\t\tstorage.removeItem( key );\n\t\t\t\t}\n\t\t\t} catch ( error ) {}\n\t\t\treturn ret;\n\t\t}\n\n\t\t// protect against name collisions with direct storage\n\t\tkey = \"__amplify__\" + key;\n\n\t\tif ( value === undefined ) {\n\t\t\tstoredValue = storage.getItem( key );\n\t\t\tparsed = storedValue ? JSON.parse( storedValue ) : { expires: -1 };\n\t\t\tif ( parsed.expires && parsed.expires <= now ) {\n\t\t\t\tstorage.removeItem( key );\n\t\t\t} else {\n\t\t\t\treturn parsed.data;\n\t\t\t}\n\t\t} else {\n\t\t\tif ( value === null ) {\n\t\t\t\tstorage.removeItem( key );\n\t\t\t} else {\n\t\t\t\tparsed = JSON.stringify({\n\t\t\t\t\tdata: value,\n\t\t\t\t\texpires: options.expires ? now + options.expires : null\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tstorage.setItem( key, parsed );\n\t\t\t\t// quota exceeded\n\t\t\t\t} catch( error ) {\n\t\t\t\t\t// expire old data and try again\n\t\t\t\t\tstore[ storageType ]();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tstorage.setItem( key, parsed );\n\t\t\t\t\t} catch( error ) {\n\t\t\t\t\t\tthrow store.error();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t});\n}\n\n// localStorage + sessionStorage\n// IE 8+, Firefox 3.5+, Safari 4+, Chrome 4+, Opera 10.5+, iPhone 2+, Android 2+\nfor ( var webStorageType in { localStorage: 1, sessionStorage: 1 } ) {\n\t// try/catch for file protocol in Firefox\n\ttry {\n\t\tif ( window[ webStorageType ].getItem ) {\n\t\t\tcreateFromStorageInterface( webStorageType, window[ webStorageType ] );\n\t\t}\n\t} catch( e ) {}\n}\n\n// globalStorage\n// non-standard: Firefox 2+\n// https://developer.mozilla.org/en/dom/storage#globalStorage\nif ( window.globalStorage ) {\n\t// try/catch for file protocol in Firefox\n\ttry {\n\t\tcreateFromStorageInterface( \"globalStorage\",\n\t\t\twindow.globalStorage[ window.location.hostname ] );\n\t\t// Firefox 2.0 and 3.0 have sessionStorage and globalStorage\n\t\t// make sure we default to globalStorage\n\t\t// but don't default to globalStorage in 3.5+ which also has localStorage\n\t\tif ( store.type === \"sessionStorage\" ) {\n\t\t\tstore.type = \"globalStorage\";\n\t\t}\n\t} catch( e ) {}\n}\n\n// userData\n// non-standard: IE 5+\n// http://msdn.microsoft.com/en-us/library/ms531424(v=vs.85).aspx\n(function() {\n\t// IE 9 has quirks in userData that are a huge pain\n\t// rather than finding a way to detect these quirks\n\t// we just don't register userData if we have localStorage\n\tif ( store.types.localStorage ) {\n\t\treturn;\n\t}\n\n\t// append to html instead of body so we can do this from the head\n\tvar div = document.createElement( \"div\" ),\n\t\tattrKey = \"amplify\";\n\tdiv.style.display = \"none\";\n\tdocument.getElementsByTagName( \"head\" )[ 0 ].appendChild( div );\n\tif ( div.addBehavior ) {\n\t\tdiv.addBehavior( \"#default#userdata\" );\n\n\t\tstore.addType( \"userData\", function( key, value, options ) {\n\t\t\tdiv.load( attrKey );\n\t\t\tvar attr, parsed, prevValue, i, remove,\n\t\t\t\tret = value,\n\t\t\t\tnow = (new Date()).getTime();\n\n\t\t\tif ( !key ) {\n\t\t\t\tret = {};\n\t\t\t\tremove = [];\n\t\t\t\ti = 0;\n\t\t\t\twhile ( attr = div.XMLDocument.documentElement.attributes[ i++ ] ) {\n\t\t\t\t\tparsed = JSON.parse( attr.value );\n\t\t\t\t\tif ( parsed.expires && parsed.expires <= now ) {\n\t\t\t\t\t\tremove.push( attr.name );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret[ attr.name ] = parsed.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile ( key = remove.pop() ) {\n\t\t\t\t\tdiv.removeAttribute( key );\n\t\t\t\t}\n\t\t\t\tdiv.save( attrKey );\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// convert invalid characters to dashes\n\t\t\t// http://www.w3.org/TR/REC-xml/#NT-Name\n\t\t\t// simplified to assume the starting character is valid\n\t\t\t// also removed colon as it is invalid in HTML attribute names\n\t\t\tkey = key.replace( /[^\\-._0-9A-Za-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f\\u2040\\u2070-\\u218f]/g, \"-\");\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\tattr = div.getAttribute( key );\n\t\t\t\tparsed = attr ? JSON.parse( attr ) : { expires: -1 };\n\t\t\t\tif ( parsed.expires && parsed.expires <= now ) {\n\t\t\t\t\tdiv.removeAttribute( key );\n\t\t\t\t} else {\n\t\t\t\t\treturn parsed.data;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( value === null ) {\n\t\t\t\t\tdiv.removeAttribute( key );\n\t\t\t\t} else {\n\t\t\t\t\t// we need to get the previous value in case we need to rollback\n\t\t\t\t\tprevValue = div.getAttribute( key );\n\t\t\t\t\tparsed = JSON.stringify({\n\t\t\t\t\t\tdata: value,\n\t\t\t\t\t\texpires: (options.expires ? (now + options.expires) : null)\n\t\t\t\t\t});\n\t\t\t\t\tdiv.setAttribute( key, parsed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tdiv.save( attrKey );\n\t\t\t// quota exceeded\n\t\t\t} catch ( error ) {\n\t\t\t\t// roll the value back to the previous value\n\t\t\t\tif ( prevValue === null ) {\n\t\t\t\t\tdiv.removeAttribute( key );\n\t\t\t\t} else {\n\t\t\t\t\tdiv.setAttribute( key, prevValue );\n\t\t\t\t}\n\n\t\t\t\t// expire old data and try again\n\t\t\t\tstore.userData();\n\t\t\t\ttry {\n\t\t\t\t\tdiv.setAttribute( key, parsed );\n\t\t\t\t\tdiv.save( attrKey );\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\t// roll the value back to the previous value\n\t\t\t\t\tif ( prevValue === null ) {\n\t\t\t\t\t\tdiv.removeAttribute( key );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiv.setAttribute( key, prevValue );\n\t\t\t\t\t}\n\t\t\t\t\tthrow store.error();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret;\n\t\t});\n\t}\n}() );\n\n// in-memory storage\n// fallback for all browsers to enable the API even if we can't persist data\n(function() {\n\tvar memory = {};\n\n\tfunction copy( obj ) {\n\t\treturn obj === undefined ? undefined : JSON.parse( JSON.stringify( obj ) );\n\t}\n\n\tstore.addType( \"memory\", function( key, value, options ) {\n\t\tif ( !key ) {\n\t\t\treturn copy( memory );\n\t\t}\n\n\t\tif ( value === undefined ) {\n\t\t\treturn copy( memory[ key ] );\n\t\t}\n\n\t\tif ( value === null ) {\n\t\t\tdelete memory[ key ];\n\t\t\treturn null;\n\t\t}\n\n\t\tmemory[ key ] = value;\n\t\tif ( options.expires ) {\n\t\t\tsetTimeout(function() {\n\t\t\t\tdelete memory[ key ];\n\t\t\t}, options.expires );\n\t\t}\n\n\t\treturn value;\n\t});\n}() );\n\n}( this.amplify = this.amplify || {} ) );\n","/**\n* Date.parse with progressive enhancement for ISO 8601 \n* © 2011 Colin Snover \n* Released under MIT license.\n*/\n(function (Date, undefined) {\n var origParse = Date.parse, numericKeys = [1, 4, 5, 6, 7, 10, 11];\n\n Date.parse = function (date) {\n var timestamp, struct, minutesOffset = 0;\n\n // ES5 §15.9.4.2 states that the string should attempt to be parsed as a Date Time String Format string\n // before falling back to any implementation-specific date parsing, so that’s what we do, even if native\n // implementations could be faster\n // 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm\n if ((struct = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d+))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/.exec(date))) {\n // avoid NaN timestamps caused by “undefined” values being passed to Date.UTC\n for (var i = 0, k; (k = numericKeys[i]); ++i) {\n struct[k] = +struct[k] || 0;\n }\n\n // allow undefined days and months\n struct[2] = (+struct[2] || 1) - 1;\n struct[3] = +struct[3] || 1;\n\n if (struct[8] !== 'Z' && struct[9] !== undefined) {\n minutesOffset = struct[10] * 60 + struct[11];\n\n if (struct[9] === '+') {\n minutesOffset = 0 - minutesOffset;\n }\n }\n\n timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]);\n }\n else {\n timestamp = origParse ? origParse(date) : NaN;\n }\n\n return timestamp;\n };\n} (Date));","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path ? '; path=' + options.path : '',\n\t\t\t\toptions.domain ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","/*! Idle Timer - v1.0.1 - 2014-03-21\n* https://github.com/thorst/jquery-idletimer\n* Copyright (c) 2014 Paul Irish; Licensed MIT */\n/*\n\tmousewheel (deprecated) -> IE6.0, Chrome, Opera, Safari\n\tDOMMouseScroll (deprecated) -> Firefox 1.0\n\twheel (standard) -> Chrome 31, Firefox 17, IE9, Firefox Mobile 17.0\n\t\n\t//No need to use, use DOMMouseScroll\n\tMozMousePixelScroll -> Firefox 3.5, Firefox Mobile 1.0\n\t\n\t//Events\n\tWheelEvent -> see wheel\n\tMouseWheelEvent -> see mousewheel\n\tMouseScrollEvent -> Firefox 3.5, Firefox Mobile 1.0\n*/\n(function ($) {\n\n $.idleTimer = function (firstParam, elem) {\n var opts;\n if (typeof firstParam === \"object\") {\n opts = firstParam;\n firstParam = null;\n } else if (typeof firstParam === \"number\") {\n opts = { timeout: firstParam };\n firstParam = null;\n }\n\n // element to watch\n elem = elem || document;\n\n // defaults that are to be stored as instance props on the elem\n opts = $.extend({\n idle: false, // indicates if the user is idle\n timeout: 30000, // the amount of time (ms) before the user is considered idle\n events: \"mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove\" // define active events\n }, opts);\n\n var jqElem = $(elem),\n obj = jqElem.data(\"idleTimerObj\") || {},\n\n /* (intentionally not documented)\n * Toggles the idle state and fires an appropriate event.\n * @return {void}\n */\n toggleIdleState = function (e) {\n\n var obj = $.data(elem, \"idleTimerObj\") || {};\n\n // toggle the state\n obj.idle = !obj.idle;\n\n // store toggle state date time\n obj.olddate = +new Date();\n\n // create a custom event, with state and name space\n var event = $.Event((obj.idle ? \"idle\" : \"active\") + \".idleTimer\");\n\n // trigger event on object with elem and copy of obj\n $(elem).trigger(event, [elem, $.extend({}, obj), e]);\n },\n /**\n * Handle event triggers\n * @return {void}\n * @method event\n * @static\n */\n handleEvent = function (e) {\n\n var obj = $.data(elem, \"idleTimerObj\") || {};\n\n // this is already paused, ignore events for now\n if (obj.remaining != null) { return; }\n\n /*\n mousemove is kinda buggy, it can be triggered when it should be idle.\n Typically is happening between 115 - 150 milliseconds after idle triggered.\n @psyafter & @kaellis report \"always triggered if using modal (jQuery ui, with overlay)\"\n @thorst has similar issues on ios7 \"after $.scrollTop() on text area\"\n */\n if (e.type === \"mousemove\") {\n // if coord are same, it didn't move\n if (e.pageX === obj.pageX && e.pageY === obj.pageY) {\n return;\n }\n // if coord don't exist how could it move\n if (typeof e.pageX === \"undefined\" && typeof e.pageY === \"undefined\") {\n return;\n }\n // under 200 ms is hard to do, and you would have to stop, as continuous activity will bypass this\n var elapsed = (+new Date()) - obj.olddate;\n if (elapsed < 200) {\n return;\n }\n }\n\n // clear any existing timeout\n clearTimeout(obj.tId);\n\n // if the idle timer is enabled, flip\n if (obj.idle) {\n toggleIdleState(e);\n }\n\n // store when user was last active\n obj.lastActive = +new Date();\n\n // update mouse coord\n obj.pageX = e.pageX;\n obj.pageY = e.pageY;\n\n // set a new timeout\n obj.tId = setTimeout(toggleIdleState, obj.timeout);\n\n },\n /**\n * Restore initial settings and restart timer\n * @return {void}\n * @method reset\n * @static\n */\n reset = function () {\n\n var obj = $.data(elem, \"idleTimerObj\") || {};\n\n // reset settings\n obj.idle = obj.idleBackup;\n obj.olddate = +new Date();\n obj.lastActive = obj.olddate;\n obj.remaining = null;\n\n // reset Timers\n clearTimeout(obj.tId);\n if (!obj.idle) {\n obj.tId = setTimeout(toggleIdleState, obj.timeout);\n }\n\n },\n /**\n * Store remaining time, stop timer\n * You can pause from an idle OR active state\n * @return {void}\n * @method pause\n * @static\n */\n pause = function () {\n\n var obj = $.data(elem, \"idleTimerObj\") || {};\n\n // this is already paused\n if (obj.remaining != null) { return; }\n\n // define how much is left on the timer\n obj.remaining = obj.timeout - ((+new Date()) - obj.olddate);\n\n // clear any existing timeout\n clearTimeout(obj.tId);\n },\n /**\n * Start timer with remaining value\n * @return {void}\n * @method resume\n * @static\n */\n resume = function () {\n\n var obj = $.data(elem, \"idleTimerObj\") || {};\n\n // this isn't paused yet\n if (obj.remaining == null) { return; }\n\n // start timer\n if (!obj.idle) {\n obj.tId = setTimeout(toggleIdleState, obj.remaining);\n }\n\n // clear remaining\n obj.remaining = null;\n },\n /**\n * Stops the idle timer. This removes appropriate event handlers\n * and cancels any pending timeouts.\n * @return {void}\n * @method destroy\n * @static\n */\n destroy = function () {\n\n var obj = $.data(elem, \"idleTimerObj\") || {};\n\n //clear any pending timeouts\n clearTimeout(obj.tId);\n\n //Remove data\n jqElem.removeData(\"idleTimerObj\");\n\n //detach the event handlers\n jqElem.off(\"._idleTimer\");\n },\n /**\n * Returns the time until becoming idle\n * @return {number}\n * @method remainingtime\n * @static\n */\n remainingtime = function () {\n\n var obj = $.data(elem, \"idleTimerObj\") || {};\n\n //If idle there is no time remaining\n if (obj.idle) { return 0; }\n\n //If its paused just return that\n if (obj.remaining != null) { return obj.remaining; }\n\n //Determine remaining, if negative idle didn't finish flipping, just return 0\n var remaining = obj.timeout - ((+new Date()) - obj.lastActive);\n if (remaining < 0) { remaining = 0; }\n\n //If this is paused return that number, else return current remaining\n return remaining;\n };\n\n\n // determine which function to call\n if (firstParam === null && typeof obj.idle !== \"undefined\") {\n // they think they want to init, but it already is, just reset\n reset();\n return jqElem;\n } else if (firstParam === null) {\n // they want to init\n } else if (firstParam !== null && typeof obj.idle === \"undefined\") {\n // they want to do something, but it isnt init\n // not sure the best way to handle this\n return false;\n } else if (firstParam === \"destroy\") {\n destroy();\n return jqElem;\n } else if (firstParam === \"pause\") {\n pause();\n return jqElem;\n } else if (firstParam === \"resume\") {\n resume();\n return jqElem;\n } else if (firstParam === \"reset\") {\n reset();\n return jqElem;\n } else if (firstParam === \"getRemainingTime\") {\n return remainingtime();\n } else if (firstParam === \"getElapsedTime\") {\n return (+new Date()) - obj.olddate;\n } else if (firstParam === \"getLastActiveTime\") {\n return obj.lastActive;\n } else if (firstParam === \"isIdle\") {\n return obj.idle;\n }\n\n /* (intentionally not documented)\n * Handles a user event indicating that the user isn't idle. namespaced with internal idleTimer\n * @param {Event} event A DOM2-normalized event object.\n * @return {void}\n */\n jqElem.on($.trim((opts.events + \" \").split(\" \").join(\"._idleTimer \")), function (e) {\n handleEvent(e);\n });\n\n\n // Internal Object Properties, This isn't all necessary, but we\n // explicitly define all keys here so we know what we are working with\n obj = $.extend({}, {\n olddate: +new Date(), // the last time state changed\n lastActive: +new Date(), // the last time timer was active\n idle: opts.idle, // current state\n idleBackup: opts.idle, // backup of idle parameter since it gets modified\n timeout: opts.timeout, // the interval to change state\n remaining: null, // how long until state changes\n tId: null, // the idle timer setTimeout\n pageX: null, // used to store the mouse coord\n pageY: null\n });\n\n // set a timeout to toggle state. May wish to omit this in some situations\n if (!obj.idle) {\n obj.tId = setTimeout(toggleIdleState, obj.timeout);\n }\n\n // store our instance on the object\n $.data(elem, \"idleTimerObj\", obj);\n\n return jqElem;\n };\n\n // This allows binding to element\n $.fn.idleTimer = function (firstParam) {\n if (this[0]) {\n return $.idleTimer(firstParam, this[0]);\n }\n\n return this;\n };\n\n})(jQuery);","/*\n * Purl (A JavaScript URL parser) v2.3.1\n * Developed and maintanined by Mark Perkins, mark@allmarkedup.com\n * Source repository: https://github.com/allmarkedup/jQuery-URL-Parser\n * Licensed under an MIT-style license. See https://github.com/allmarkedup/jQuery-URL-Parser/blob/master/LICENSE for details.\n */\n\n; (function (factory) {\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else {\n window.purl = factory();\n }\n})(function () {\n\n var tag2attr = {\n a: 'href',\n img: 'src',\n form: 'action',\n base: 'href',\n script: 'src',\n iframe: 'src',\n link: 'href',\n embed: 'src',\n object: 'data'\n },\n\n key = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment'], // keys available to query\n\n aliases = { 'anchor': 'fragment' }, // aliases for backwards compatability\n\n parser = {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*):?([^:@]*))?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/, //less intuitive, more accurate to the specs\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs\n },\n\n isint = /^[0-9]+$/;\n\n function parseUri(url, strictMode) {\n var str = decodeURI(url),\n res = parser[strictMode || false ? 'strict' : 'loose'].exec(str),\n uri = { attr: {}, param: {}, seg: {} },\n i = 14;\n\n while (i--) {\n uri.attr[key[i]] = res[i] || '';\n }\n\n // build query and fragment parameters\n uri.param['query'] = parseString(uri.attr['query']);\n uri.param['fragment'] = parseString(uri.attr['fragment']);\n\n // split path and fragement into segments\n uri.seg['path'] = uri.attr.path.replace(/^\\/+|\\/+$/g, '').split('/');\n uri.seg['fragment'] = uri.attr.fragment.replace(/^\\/+|\\/+$/g, '').split('/');\n\n // compile a 'base' domain attribute\n uri.attr['base'] = uri.attr.host ? (uri.attr.protocol ? uri.attr.protocol + '://' + uri.attr.host : uri.attr.host) + (uri.attr.port ? ':' + uri.attr.port : '') : '';\n\n return uri;\n }\n\n function getAttrName(elm) {\n var tn = elm.tagName;\n if (typeof tn !== 'undefined') return tag2attr[tn.toLowerCase()];\n return tn;\n }\n\n function promote(parent, key) {\n if (parent[key].length === 0) return parent[key] = {};\n var t = {};\n for (var i in parent[key]) t[i] = parent[key][i];\n parent[key] = t;\n return t;\n }\n\n function parse(parts, parent, key, val) {\n var part = parts.shift();\n if (!part) {\n if (isArray(parent[key])) {\n parent[key].push(val);\n } else if ('object' == typeof parent[key]) {\n parent[key] = val;\n } else if ('undefined' == typeof parent[key]) {\n parent[key] = val;\n } else {\n parent[key] = [parent[key], val];\n }\n } else {\n var obj = parent[key] = parent[key] || [];\n if (']' == part) {\n if (isArray(obj)) {\n if ('' !== val) obj.push(val);\n } else if ('object' == typeof obj) {\n obj[keys(obj).length] = val;\n } else {\n obj = parent[key] = [parent[key], val];\n }\n } else if (~part.indexOf(']')) {\n part = part.substr(0, part.length - 1);\n if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);\n parse(parts, obj, part, val);\n // key\n } else {\n if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);\n parse(parts, obj, part, val);\n }\n }\n }\n\n function merge(parent, key, val) {\n if (~key.indexOf(']')) {\n var parts = key.split('[');\n parse(parts, parent, 'base', val);\n } else {\n if (!isint.test(key) && isArray(parent.base)) {\n var t = {};\n for (var k in parent.base) t[k] = parent.base[k];\n parent.base = t;\n }\n if (key !== '') {\n set(parent.base, key, val);\n }\n }\n return parent;\n }\n\n function parseString(str) {\n return reduce(String(str).split(/&|;/), function (ret, pair) {\n try {\n pair = decodeURIComponent(pair.replace(/\\+/g, ' '));\n } catch (e) {\n // ignore\n }\n var eql = pair.indexOf('='),\n brace = lastBraceInKey(pair),\n key = pair.substr(0, brace || eql),\n val = pair.substr(brace || eql, pair.length);\n\n val = val.substr(val.indexOf('=') + 1, val.length);\n\n if (key === '') {\n key = pair;\n val = '';\n }\n\n return merge(ret, key, val);\n }, { base: {} }).base;\n }\n\n function set(obj, key, val) {\n var v = obj[key];\n if (typeof v === 'undefined') {\n obj[key] = val;\n } else if (isArray(v)) {\n v.push(val);\n } else {\n obj[key] = [v, val];\n }\n }\n\n function lastBraceInKey(str) {\n var len = str.length,\n brace,\n c;\n for (var i = 0; i < len; ++i) {\n c = str[i];\n if (']' == c) brace = false;\n if ('[' == c) brace = true;\n if ('=' == c && !brace) return i;\n }\n }\n\n function reduce(obj, accumulator) {\n var i = 0,\n l = obj.length >> 0,\n curr = arguments[2];\n while (i < l) {\n if (i in obj) curr = accumulator.call(undefined, curr, obj[i], i, obj);\n ++i;\n }\n return curr;\n }\n\n function isArray(vArg) {\n return Object.prototype.toString.call(vArg) === \"[object Array]\";\n }\n\n function keys(obj) {\n var key_array = [];\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) key_array.push(prop);\n }\n return key_array;\n }\n\n function purl(url, strictMode) {\n if (arguments.length === 1 && url === true) {\n strictMode = true;\n url = undefined;\n }\n strictMode = strictMode || false;\n url = url || window.location.toString();\n\n return {\n\n data: parseUri(url, strictMode),\n\n // get various attributes from the URI\n attr: function (attr) {\n attr = aliases[attr] || attr;\n return typeof attr !== 'undefined' ? this.data.attr[attr] : this.data.attr;\n },\n\n // return query string parameters\n param: function (param) {\n return typeof param !== 'undefined' ? this.data.param.query[param] : this.data.param.query;\n },\n\n // return fragment parameters\n fparam: function (param) {\n return typeof param !== 'undefined' ? this.data.param.fragment[param] : this.data.param.fragment;\n },\n\n // return path segments\n segment: function (seg) {\n if (typeof seg === 'undefined') {\n return this.data.seg.path;\n } else {\n seg = seg < 0 ? this.data.seg.path.length + seg : seg - 1; // negative segments count from the end\n return this.data.seg.path[seg];\n }\n },\n\n // return fragment segments\n fsegment: function (seg) {\n if (typeof seg === 'undefined') {\n return this.data.seg.fragment;\n } else {\n seg = seg < 0 ? this.data.seg.fragment.length + seg : seg - 1; // negative segments count from the end\n return this.data.seg.fragment[seg];\n }\n }\n\n };\n\n }\n\n purl.jQuery = function ($) {\n if ($ != null) {\n $.fn.url = function (strictMode) {\n var url = '';\n if (this.length) {\n url = $(this).attr(getAttrName(this[0])) || '';\n }\n return purl(url, strictMode);\n };\n\n $.url = purl;\n }\n };\n\n purl.jQuery(window.jQuery);\n\n return purl;\n\n});","/*!\n * Bootstrap Context Menu\n * Version: 2.1\n * A small variation of the dropdown plugin by @sydcanem\n * https://github.com/sydcanem/bootstrap-contextmenu\n *\n * New options added by @jeremyhubble for javascript launching\n * $('#elem').contextmenu({target:'#menu',before:function(e) { return true; } });\n *\n *\n * Twitter Bootstrap (http://twitter.github.com/bootstrap).\n */\n\n/* =========================================================\n * bootstrap-contextmenu.js\n * =========================================================\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= */\n\n!(function ($) {\n 'use strict'; // jshint ;_;\n\n /* CONTEXTMENU CLASS DEFINITION\n\t * ============================ */\n\n var ContextMenu = function (elements, options) {\n this.$elements = $(elements);\n this.options = options;\n this.before = this.options.before || this.before;\n this.onItem = this.options.onItem || this.onItem;\n if (this.options.target)\n this.$elements.attr('data-target', this.options.target);\n\n this.listen();\n };\n\n ContextMenu.prototype = {\n constructor: ContextMenu,\n show: function (e) {\n var self = this;\n this._clickEvent = e;\n\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled'))\n return;\n\n var evt = $.Event('context');\n if (!this.before.call(this, e, $(e.currentTarget)))\n return;\n\n this.$elements.trigger(evt);\n var $menu = this.getMenu();\n var tp = this.getPosition(e, $menu);\n\n $menu.attr('style', '').css(tp).addClass('open');\n\n $('html')\n .on('click.context.data-api', $.proxy(this.closemenu, this));\n $menu\n .off('click.context')\n .on('click.context.data-api', function (e) {\n self.onItem.call(this, e, $(e.target));\n });\n\n return false;\n },\n reposition: function () {\n var $menu = this.getMenu();\n var tp = this.getPosition(null, $menu);\n $menu.css(tp);\n },\n closemenu: function (e) {\n this.getMenu().removeClass('open');\n $('html').off('click.context');\n },\n before: function (e) {\n return true;\n },\n onItem: function (e, context) {\n return true;\n },\n listen: function () {\n this.$elements\n .on('contextmenu.context.data-api', $.proxy(this.show, this));\n\n var $target = $(this.$elements.attr('data-target'));\n },\n getMenu: function () {\n var selector = this.$elements.attr('data-target');\n\n if (!selector) {\n selector = this.$elements.attr('href');\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, ''); //strip for ie7\n }\n\n return $(selector);\n },\n getPosition: function (e, $menu) {\n e = e || this._clickEvent;\n var mouseX = e.clientX,\n mouseY = e.clientY,\n boundsX = $(window).width(),\n boundsY = $(window).height(),\n menuWidth = $menu.find('.dropdown-menu').outerWidth(),\n menuHeight = $menu.find('.dropdown-menu').outerHeight(),\n tp = { 'position': 'fixed' },\n Y = {\n 'top': mouseY + menuHeight > boundsY\n ? mouseY - menuHeight\n : mouseY\n },\n X = {\n 'left': (mouseX + menuWidth > boundsX) && ((mouseX - menuWidth) > 0)\n ? mouseX - menuWidth\n : mouseX\n };\n\n return $.extend(tp, Y, X);\n },\n clearMenus: function (e) {\n if (!e.ctrlKey) {\n $('[data-toggle=context]').each(function () {\n this.getMenu().removeClass('open');\n });\n }\n }\n };\n\n /* CONTEXT MENU PLUGIN DEFINITION\n\t * ========================== */\n\n $.fn.contextmenu = function (option, e) {\n var $this = this;\n return (function () {\n var data = $this.data('context'), options = typeof option == 'object' && option;\n\n if (!data) $this.data('context', (data = new ContextMenu($this, options)));\n // \"show\" method must also be passed the event for positioning\n if (typeof option == 'string') data[option].call(data, e);\n })();\n };\n\n $.fn.contextmenu.Constructor = ContextMenu;\n\n /* APPLY TO STANDARD CONTEXT MENU ELEMENTS\n\t * =================================== */\n\n $(document)\n .on('contextmenu.context.data-api', '[data-toggle=context]', function (e) {\n $(this).contextmenu('show', e);\n e.preventDefault();\n });\n}(window.jQuery));\n","/*\n * classList.js: Cross-browser full element.classList implementation.\n * 1.1.20150312\n *\n * By Eli Grey, http://eligrey.com\n * License: Dedicated to the public domain.\n * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md\n */\n\n/*global self, document, DOMException */\n\n/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */\nif (\"document\" in self) {\n\n // Full polyfill for browsers with no classList support\n // Including IE < Edge missing SVGElement.classList\n if (!(\"classList\" in document.createElement(\"_\"))\n || document.createElementNS && !(\"classList\" in document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\"))) {\n\n (function (view) {\n\n \"use strict\";\n\n if (!('Element' in view)) return;\n\n var\n classListProp = \"classList\"\n , protoProp = \"prototype\"\n , elemCtrProto = view.Element[protoProp]\n , objCtr = Object\n , strTrim = String[protoProp].trim || function () {\n return this.replace(/^\\s+|\\s+$/g, \"\");\n }\n , arrIndexOf = Array[protoProp].indexOf || function (item) {\n var\n i = 0\n , len = this.length\n ;\n for (; i < len; i++) {\n if (i in this && this[i] === item) {\n return i;\n }\n }\n return -1;\n }\n // Vendors: please allow content code to instantiate DOMExceptions\n , DOMEx = function (type, message) {\n this.name = type;\n this.code = DOMException[type];\n this.message = message;\n }\n , checkTokenAndGetIndex = function (classList, token) {\n if (token === \"\") {\n throw new DOMEx(\n \"SYNTAX_ERR\"\n , \"An invalid or illegal string was specified\"\n );\n }\n if (/\\s/.test(token)) {\n throw new DOMEx(\n \"INVALID_CHARACTER_ERR\"\n , \"String contains an invalid character\"\n );\n }\n return arrIndexOf.call(classList, token);\n }\n , ClassList = function (elem) {\n var\n trimmedClasses = strTrim.call(elem.getAttribute(\"class\") || \"\")\n , classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : []\n , i = 0\n , len = classes.length\n ;\n for (; i < len; i++) {\n this.push(classes[i]);\n }\n this._updateClassName = function () {\n elem.setAttribute(\"class\", this.toString());\n };\n }\n , classListProto = ClassList[protoProp] = []\n , classListGetter = function () {\n return new ClassList(this);\n }\n ;\n // Most DOMException implementations don't allow calling DOMException's toString()\n // on non-DOMExceptions. Error's toString() is sufficient here.\n DOMEx[protoProp] = Error[protoProp];\n classListProto.item = function (i) {\n return this[i] || null;\n };\n classListProto.contains = function (token) {\n token += \"\";\n return checkTokenAndGetIndex(this, token) !== -1;\n };\n classListProto.add = function () {\n var\n tokens = arguments\n , i = 0\n , l = tokens.length\n , token\n , updated = false\n ;\n do {\n token = tokens[i] + \"\";\n if (checkTokenAndGetIndex(this, token) === -1) {\n this.push(token);\n updated = true;\n }\n }\n while (++i < l);\n\n if (updated) {\n this._updateClassName();\n }\n };\n classListProto.remove = function () {\n var\n tokens = arguments\n , i = 0\n , l = tokens.length\n , token\n , updated = false\n , index\n ;\n do {\n token = tokens[i] + \"\";\n index = checkTokenAndGetIndex(this, token);\n while (index !== -1) {\n this.splice(index, 1);\n updated = true;\n index = checkTokenAndGetIndex(this, token);\n }\n }\n while (++i < l);\n\n if (updated) {\n this._updateClassName();\n }\n };\n classListProto.toggle = function (token, force) {\n token += \"\";\n\n var\n result = this.contains(token)\n , method = result ?\n force !== true && \"remove\"\n :\n force !== false && \"add\"\n ;\n\n if (method) {\n this[method](token);\n }\n\n if (force === true || force === false) {\n return force;\n } else {\n return !result;\n }\n };\n classListProto.toString = function () {\n return this.join(\" \");\n };\n\n if (objCtr.defineProperty) {\n var classListPropDesc = {\n get: classListGetter\n , enumerable: true\n , configurable: true\n };\n try {\n objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n } catch (ex) { // IE 8 doesn't support enumerable:true\n if (ex.number === -0x7FF5EC54) {\n classListPropDesc.enumerable = false;\n objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n }\n }\n } else if (objCtr[protoProp].__defineGetter__) {\n elemCtrProto.__defineGetter__(classListProp, classListGetter);\n }\n\n }(self));\n\n } else {\n // There is full or partial native classList support, so just check if we need\n // to normalize the add/remove and toggle APIs.\n\n (function () {\n \"use strict\";\n\n var testElement = document.createElement(\"_\");\n\n testElement.classList.add(\"c1\", \"c2\");\n\n // Polyfill for IE 10/11 and Firefox <26, where classList.add and\n // classList.remove exist but support only one argument at a time.\n if (!testElement.classList.contains(\"c2\")) {\n var createMethod = function (method) {\n var original = DOMTokenList.prototype[method];\n\n DOMTokenList.prototype[method] = function (token) {\n var i, len = arguments.length;\n\n for (i = 0; i < len; i++) {\n token = arguments[i];\n original.call(this, token);\n }\n };\n };\n createMethod('add');\n createMethod('remove');\n }\n\n testElement.classList.toggle(\"c3\", false);\n\n // Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n // support the second argument.\n if (testElement.classList.contains(\"c3\")) {\n var _toggle = DOMTokenList.prototype.toggle;\n\n DOMTokenList.prototype.toggle = function (token, force) {\n if (1 in arguments && !this.contains(token) === !force) {\n return force;\n } else {\n return _toggle.call(this, token);\n }\n };\n\n }\n\n testElement = null;\n }());\n\n }\n\n}","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function () {\n //---------------------------------------------------------------------------------------------------------------------\n // ft_Popover is an extension of Bootstrap's popover, which changes the behavior of click based popovers to dismiss\n // on clicks anywhere in the document (besides the actual popover)\n // It also adds the ability to add a custom css class to the popover via 'cssClass' option\n //\n var ft_Popover = function ft_Popover(element, options) {\n this.init('popover', element, options);\n };\n\n ft_Popover.prototype = $.extend({}, $.fn.popover.Constructor.prototype, {\n constructor: ft_Popover,\n\n toggle: function toggle(e) {\n // call base\n $.fn.bs_popover.Constructor.prototype.toggle.apply(this, arguments);\n\n // if we aren't click based do nothing\n if (!e || this.options.trigger !== 'click') return this;\n\n e.preventDefault();\n // add a marker to the element indicating that the popover is being shown.\n // we look for this marker in doc_onclick and don't dismiss\n $(e.target).data('ftpopover', this);\n\n return this;\n },\n\n show: function show() {\n var self = this;\n\n // add our css class\n if (this.options.cssClass) this.tip().addClass(this.options.cssClass);\n\n // call base class\n $.fn.bs_popover.Constructor.prototype.show.apply(this, arguments);\n\n // if we aren't click based do nothing\n if (this.options.trigger !== 'click' || !this.$tip) return this;\n\n this._document_onclick = function (e) {\n if ($(e.target).data('ftpopover') === self) $(e.target).removeData('ftpopover');else self.hide();\n };\n\n $(document).bind('click', this._document_onclick);\n this.$tip.click(function (e) {\n e.stopPropagation();\n });\n\n return this;\n },\n\n hide: function hide() {\n // call base class\n $.fn.bs_popover.Constructor.prototype.hide.apply(this, arguments);\n // if we aren't click based do nothing\n if (this.options.trigger !== 'click') return this;\n\n if (this._document_onclick) $(document).unbind('click', this._document_onclick);\n\n this._document_onclick = null;\n\n return this;\n }\n });\n\n (function ($) {\n // redefine the jquery popover plugin to create a ft_Popover\n $.fn.bs_popover = $.fn.popover;\n\n var dataName = '';\n var popoverVersion = $.fn.bs_popover.Constructor.VERSION;\n if (popoverVersion === undefined) {\n dataName = 'popover';\n } else if (popoverVersion.indexOf('3.2') === 0) {\n dataName = 'bs.popover';\n } else if (popoverVersion.indexOf('4.0.0') === 0) {\n return;\n } else {\n throw new Error('Rev popover requires Boostrap 2, 3.2 or 4.0.0');\n }\n\n $.fn.popover = function (option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(dataName);\n var options = (typeof option === 'undefined' ? 'undefined' : _typeof(option)) == 'object' && option;\n\n if (!data && option === 'destroy') return;\n if (!data) $this.data(dataName, data = new ft_Popover(this, options));\n if (typeof option === 'string') data[option]();\n });\n };\n\n $.extend($.fn.popover, $.fn.bs_popover);\n\n $.fn.popover.Constructor = ft_Popover;\n })(jQuery);\n\n // Exports\n window.ft_Popover = ft_Popover;\n})();","'use strict';\n\n// some convenient animation helpers for query\n(function ($) {\n $.extend($.fn, {\n // fade an element out, execute given function, then fade back in\n // func will be added to queue and must contain a dequeue call; it will be passed the element being faded out/in\n // outSpeed and inSpeed optionally control speed of fading; they default to 'fast' and 'slow' respectively\n doDuringFade: function doDuringFade(func, outSpeed, inSpeed) {\n $(this).stop(true, true).fadeOut(outSpeed || 'fast').queue(function () {\n func(this);\n }).fadeIn(inSpeed || 'slow');\n },\n\n changeTextDuringFade: function changeTextDuringFade(newText) {\n /// \n /// if newText is same as element's current text, do nothing.\n /// otherwise fade out, change text to newText and fade back in\n /// \n /// new text for the element\n\n $(this).each(function () {\n var $el = $(this);\n var fadetext = $el.data('fadetext');\n\n // do nothing if the text is already changing to that, or is equal to taht\n if (newText === fadetext || newText === $el.text() && !fadetext) return;\n\n $el.data('fadetext', newText).doDuringFade(function (elt) {\n $(elt).text($(elt).data('fadetext')).removeData('fadetext').dequeue();\n });\n });\n },\n\n equalHeights: function equalHeights() {\n var maxHeight = 0,\n $this = $(this);\n\n $this.each(function () {\n var height = $(this).innerHeight();\n\n if (height > maxHeight) {\n maxHeight = height;\n }\n });\n\n return $this.height(maxHeight);\n }\n });\n})(jQuery);\n\n//--------------------------------------------------------------------------------------------\n// ondelayed keyup - jquery plugin - based on http://stackoverflow.com/a/6054104\n(function ($) {\n $.extend($.fn, {\n onDelayedKeyup: function onDelayedKeyup(handler, delay) {\n var self = this;\n var timerKey = plupload.guid();\n $(this).keyup(function (e) {\n if (typeof window[timerKey] != 'undefined') {\n window.clearTimeout(window[timerKey]);\n }\n window[timerKey] = window.setTimeout(function () {\n handler.call(self.element, e);\n }, delay || 500);\n });\n }\n });\n})(jQuery);\n\n// Replacement for toggle(handler, handler) that was removed in jquery 1.9+\n// @see http://stackoverflow.com/questions/14301935/where-has-fn-toggle-handlereventobject-handlereventobject-gone\n(function ($) {\n $.extend($.fn, {\n toggleClick: function toggleClick() {\n var functions = arguments,\n iteration = 0;\n return this.click(function () {\n functions[iteration].call();\n iteration = (iteration + 1) % functions.length;\n });\n }\n });\n})(jQuery);\n\n// Test if element is in viewport(visible on screen)\n// @see http://upshots.org/javascript/jquery-test-if-element-is-in-viewport-visible-on-screen\n(function ($) {\n $.extend($.fn, {\n isOnScreen: function isOnScreen() {\n var win = $(window);\n\n var viewport = {\n top: win.scrollTop(),\n left: win.scrollLeft()\n };\n viewport.right = viewport.left + win.width();\n viewport.bottom = viewport.top + win.height();\n\n var bounds = this.offset();\n bounds.right = bounds.left + this.outerWidth();\n bounds.bottom = bounds.top + this.outerHeight();\n\n return !(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom);\n }\n });\n})(jQuery);","'use strict';\n\n//------------------------------------------------------------------------------------------------\n// common code to wire up all submit buttons\n//\n(function () {\n // find the form, first check if we're in a form, then check for an explicit target,\n // or use the first form on the page\n var getFormFromSubmitButton = function getFormFromSubmitButton(btn) {\n var form = btn.closest('FORM');\n if (form.length === 0 && btn.data('target')) form = $(btn.data('target'));\n if (form.length === 0) form = $('FORM').not('.awsupload FORM').first();\n return form;\n };\n\n $(function () {\n // function to submit\n var submitOnClick = function submitOnClick(e) {\n e.preventDefault();\n var btn = $(this);\n if (btn.is(':disabled') || btn.hasClass('disabled')) return;\n\n var form = getFormFromSubmitButton(btn);\n\n if (form.length === 1) {\n form.submit();\n }\n };\n $('.ws-submit').not('.manual').bind('click.app', submitOnClick);\n // bind to custom submit event\n $('.ws-submit').bind('submit', submitOnClick);\n var wsForm = getFormFromSubmitButton($('.ws-submit'));\n var wsButtons = $(wsForm).find('.ws-submit');\n if (wsForm.length === 1 && !wsForm.hasClass('resubmittable')) {\n wsForm.submit(function () {\n wsForm.submit(function (e) {\n e.preventDefault();\n return false;\n });\n wsButtons.attr('disabled', true);\n wsButtons.addClass('disabled');\n });\n }\n });\n})();","/**\n * plupload.js\n *\n * Copyright 2009, Moxiecode Systems AB\n * Released under GPL License.\n *\n * License: http://www.plupload.com/license\n * Contributing: http://www.plupload.com/contributing\n */\n\n// JSLint defined globals\n/*global window:false, escape:false */\n\n/* version 1.5.4*/\n(function () {\n var count = 0, runtimes = [], i18n = {}, mimes = {},\n\t\txmlEncodeChars = { '<': 'lt', '>': 'gt', '&': 'amp', '\"': 'quot', '\\'': '#39' },\n\t\txmlEncodeRegExp = /[<>&\\\"\\']/g, undef, delay = window.setTimeout,\n\t\t// A place to store references to event handlers\n\t\teventhash = {},\n\t\tuid;\n\n // IE W3C like event funcs\n function preventDefault() {\n this.returnValue = false;\n }\n\n function stopPropagation() {\n this.cancelBubble = true;\n }\n\n // Parses the default mime types string into a mimes lookup map\n (function (mime_data) {\n var items = mime_data.split(/,/), i, y, ext;\n\n for (i = 0; i < items.length; i += 2) {\n ext = items[i + 1].split(/ /);\n\n for (y = 0; y < ext.length; y++) {\n mimes[ext[y]] = items[i];\n }\n }\n })(\n\t\t\"application/msword,doc dot,\" +\n\t\t\"application/pdf,pdf,\" +\n\t\t\"application/pgp-signature,pgp,\" +\n\t\t\"application/postscript,ps ai eps,\" +\n\t\t\"application/rtf,rtf,\" +\n\t\t\"application/vnd.ms-excel,xls xlb,\" +\n\t\t\"application/vnd.ms-powerpoint,ppt pps pot,\" +\n\t\t\"application/zip,zip,\" +\n\t\t\"application/x-shockwave-flash,swf swfl,\" +\n\t\t\"application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,\" +\n\t\t\"application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,\" +\n\t\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,\" +\n\t\t\"application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,\" +\n\t\t\"application/vnd.openxmlformats-officedocument.presentationml.template,potx,\" +\n\t\t\"application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,\" +\n\t\t\"application/x-javascript,js,\" +\n\t\t\"application/json,json,\" +\n\t\t\"audio/mpeg,mpga mpega mp2 mp3,\" +\n\t\t\"audio/x-wav,wav,\" +\n\t\t\"audio/mp4,m4a,\" +\n\t\t\"image/bmp,bmp,\" +\n\t\t\"image/gif,gif,\" +\n\t\t\"image/jpeg,jpeg jpg jpe,\" +\n\t\t\"image/photoshop,psd,\" +\n\t\t\"image/png,png,\" +\n\t\t\"image/svg+xml,svg svgz,\" +\n\t\t\"image/tiff,tiff tif,\" +\n\t\t\"text/plain,asc txt text diff log,\" +\n\t\t\"text/html,htm html xhtml,\" +\n\t\t\"text/css,css,\" +\n\t\t\"text/csv,csv,\" +\n\t\t\"text/rtf,rtf,\" +\n\t\t\"video/mpeg,mpeg mpg mpe,\" +\n\t\t\"video/quicktime,qt mov,\" +\n\t\t\"video/mp4,mp4,\" +\n\t\t\"video/x-m4v,m4v,\" +\n\t\t\"video/x-flv,flv,\" +\n\t\t\"video/x-ms-wmv,wmv,\" +\n\t\t\"video/avi,avi,\" +\n\t\t\"video/webm,webm,\" +\n\t\t\"video/vnd.rn-realvideo,rv,\" +\n\t\t\"application/vnd.oasis.opendocument.formula-template,otf,\" +\n \"application/octet-stream,exe,\" + \n \"text/srt,srt\"\n\t);\n\n /**\n\t * Plupload class with some global constants and functions.\n\t *\n\t * @example\n\t * // Encode entities\n\t * console.log(plupload.xmlEncode(\"My string <>\"));\n\t *\n\t * // Generate unique id\n\t * console.log(plupload.guid());\n\t *\n\t * @static\n\t * @class plupload\n\t */\n var plupload = {\n /**\n\t\t * Plupload version will be replaced on build.\n\t\t */\n VERSION: '@@version@@',\n\n /**\n\t\t * Inital state of the queue and also the state ones it's finished all it's uploads.\n\t\t *\n\t\t * @property STOPPED\n\t\t * @final\n\t\t */\n STOPPED: 1,\n\n /**\n\t\t * Upload process is running\n\t\t *\n\t\t * @property STARTED\n\t\t * @final\n\t\t */\n STARTED: 2,\n\n /**\n\t\t * File is queued for upload\n\t\t *\n\t\t * @property QUEUED\n\t\t * @final\n\t\t */\n QUEUED: 1,\n\n /**\n\t\t * File is being uploaded\n\t\t *\n\t\t * @property UPLOADING\n\t\t * @final\n\t\t */\n UPLOADING: 2,\n\n /**\n\t\t * File has failed to be uploaded\n\t\t *\n\t\t * @property FAILED\n\t\t * @final\n\t\t */\n FAILED: 4,\n\n /**\n\t\t * File has been uploaded successfully\n\t\t *\n\t\t * @property DONE\n\t\t * @final\n\t\t */\n DONE: 5,\n\n // Error constants used by the Error event\n\n /**\n\t\t * Generic error for example if an exception is thrown inside Silverlight.\n\t\t *\n\t\t * @property GENERIC_ERROR\n\t\t * @final\n\t\t */\n GENERIC_ERROR: -100,\n\n /**\n\t\t * HTTP transport error. For example if the server produces a HTTP status other than 200.\n\t\t *\n\t\t * @property HTTP_ERROR\n\t\t * @final\n\t\t */\n HTTP_ERROR: -200,\n\n /**\n\t\t * Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine.\n\t\t *\n\t\t * @property IO_ERROR\n\t\t * @final\n\t\t */\n IO_ERROR: -300,\n\n /**\n\t\t * Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine.\n\t\t *\n\t\t * @property SECURITY_ERROR\n\t\t * @final\n\t\t */\n SECURITY_ERROR: -400,\n\n /**\n\t\t * Initialization error. Will be triggered if no runtime was initialized.\n\t\t *\n\t\t * @property INIT_ERROR\n\t\t * @final\n\t\t */\n INIT_ERROR: -500,\n\n /**\n\t\t * File size error. If the user selects a file that is too large it will be blocked and an error of this type will be triggered.\n\t\t *\n\t\t * @property FILE_SIZE_ERROR\n\t\t * @final\n\t\t */\n FILE_SIZE_ERROR: -600,\n\n /**\n\t\t * File extension error. If the user selects a file that isn't valid according to the filters setting.\n\t\t *\n\t\t * @property FILE_EXTENSION_ERROR\n\t\t * @final\n\t\t */\n FILE_EXTENSION_ERROR: -601,\n\n /**\n\t\t * Runtime will try to detect if image is proper one. Otherwise will throw this error.\n\t\t *\n\t\t * @property IMAGE_FORMAT_ERROR\n\t\t * @final\n\t\t */\n IMAGE_FORMAT_ERROR: -700,\n\n /**\n\t\t * While working on the image runtime will try to detect if the operation may potentially run out of memeory and will throw this error.\n\t\t *\n\t\t * @property IMAGE_MEMORY_ERROR\n\t\t * @final\n\t\t */\n IMAGE_MEMORY_ERROR: -701,\n\n /**\n\t\t * Each runtime has an upper limit on a dimension of the image it can handle. If bigger, will throw this error.\n\t\t *\n\t\t * @property IMAGE_DIMENSIONS_ERROR\n\t\t * @final\n\t\t */\n IMAGE_DIMENSIONS_ERROR: -702,\n\n\n /**\n\t\t * Mime type lookup table.\n\t\t *\n\t\t * @property mimeTypes\n\t\t * @type Object\n\t\t * @final\n\t\t */\n mimeTypes: mimes,\n\n /**\n\t\t * In some cases sniffing is the only way around :(\n\t\t */\n ua: (function () {\n var nav = navigator, userAgent = nav.userAgent, vendor = nav.vendor, webkit, opera, safari;\n\n webkit = /WebKit/.test(userAgent);\n safari = webkit && vendor.indexOf('Apple') !== -1;\n opera = window.opera && window.opera.buildNumber;\n\n return {\n windows: navigator.platform.indexOf('Win') !== -1,\n ie: !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName),\n webkit: webkit,\n gecko: !webkit && /Gecko/.test(userAgent),\n safari: safari,\n opera: !!opera\n };\n }()),\n\n /**\n\t\t * Gets the true type of the built-in object (better version of typeof).\n\t\t * @credits Angus Croll (http://javascriptweblog.wordpress.com/)\n\t\t *\n\t\t * @param {Object} o Object to check.\n\t\t * @return {String} Object [[Class]]\n\t\t */\n typeOf: function (o) {\n return ({}).toString.call(o).match(/\\s([a-z|A-Z]+)/)[1].toLowerCase();\n },\n\n /**\n\t\t * Extends the specified object with another object.\n\t\t *\n\t\t * @method extend\n\t\t * @param {Object} target Object to extend.\n\t\t * @param {Object..} obj Multiple objects to extend with.\n\t\t * @return {Object} Same as target, the extended object.\n\t\t */\n extend: function (target) {\n plupload.each(arguments, function (arg, i) {\n if (i > 0) {\n plupload.each(arg, function (value, key) {\n target[key] = value;\n });\n }\n });\n\n return target;\n },\n\n /**\n\t\t * Cleans the specified name from national characters (diacritics). The result will be a name with only a-z, 0-9 and _.\n\t\t *\n\t\t * @method cleanName\n\t\t * @param {String} s String to clean up.\n\t\t * @return {String} Cleaned string.\n\t\t */\n cleanName: function (name) {\n var i, lookup;\n\n // Replace diacritics\n lookup = [\n /[\\xc0-\\xc6]/g, \"A\", /[\\xe0-\\xE6]/g, \"a\",\n /\\xC7/g, \"C\", /\\xE7/g, \"c\",\n /[\\xC8-\\xCB]/g, \"E\", /[\\xE8-\\xEB]/g, \"e\",\n /[\\xCC-\\xCF]/g, \"I\", /[\\xEC-\\xEF]/g, \"i\",\n /\\xD1/g, \"N\", /\\xF1/g, \"n\",\n /[\\xD2-\\xD8]/g, \"O\", /[\\xF2-\\xF8]/g, \"o\",\n /[\\xD9-\\xDC]/g, \"U\", /[\\xF9-\\xFC]/g, \"u\"\n ];\n for (i = 0; i < lookup.length; i += 2) {\n name = name.replace(lookup[i], lookup[i + 1]);\n }\n\n // Replace whitespace\n name = name.replace(/\\s+/g, '_');\n\n // Remove anything else\n name = name.replace(/[^a-z0-9_\\-\\.]+/gi, '');\n\n return name;\n },\n\n /**\n\t\t * Adds a specific upload runtime like for example flash or gears.\n\t\t *\n\t\t * @method addRuntime\n\t\t * @param {String} name Runtime name for example flash.\n\t\t * @param {Object} obj Object containing init/destroy method.\n\t\t */\n addRuntime: function (name, runtime) {\n runtime.name = name;\n runtimes[name] = runtime;\n runtimes.push(runtime);\n\n return runtime;\n },\n\n /**\n\t\t * Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers.\n\t\t * The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages\n\t\t * to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique.\n\t\t * It's more probable for the earth to be hit with an ansteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property\n\t\t * to an user unique key.\n\t\t *\n\t\t * @method guid\n\t\t * @return {String} Virtually unique id.\n\t\t */\n guid: function () {\n var guid = new Date().getTime().toString(32), i;\n\n for (i = 0; i < 5; i++) {\n guid += Math.floor(Math.random() * 65535).toString(32);\n }\n\n return (plupload.guidPrefix || 'p') + guid + (count++).toString(32);\n },\n\n /**\n\t\t * Builds a full url out of a base URL and an object with items to append as query string items.\n\t\t *\n\t\t * @param {String} url Base URL to append query string items to.\n\t\t * @param {Object} items Name/value object to serialize as a querystring.\n\t\t * @return {String} String with url + serialized query string items.\n\t\t */\n buildUrl: function (url, items) {\n var query = '';\n\n plupload.each(items, function (value, name) {\n query += (query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);\n });\n\n if (query) {\n url += (url.indexOf('?') > 0 ? '&' : '?') + query;\n }\n\n return url;\n },\n\n /**\n\t\t * Executes the callback function for each item in array/object. If you return false in the\n\t\t * callback it will break the loop.\n\t\t *\n\t\t * @param {Object} obj Object to iterate.\n\t\t * @param {function} callback Callback function to execute for each item.\n\t\t */\n each: function (obj, callback) {\n var length, key, i;\n\n if (obj) {\n length = obj.length;\n\n if (length === undef) {\n // Loop object items\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (callback(obj[key], key) === false) {\n return;\n }\n }\n }\n } else {\n // Loop array items\n for (i = 0; i < length; i++) {\n if (callback(obj[i], i) === false) {\n return;\n }\n }\n }\n }\n },\n\n /**\n\t\t * Formats the specified number as a size string for example 1024 becomes 1 KB.\n\t\t *\n\t\t * @method formatSize\n\t\t * @param {Number} size Size to format as string.\n\t\t * @return {String} Formatted size string.\n\t\t */\n formatSize: function (size) {\n if (size === undef || /\\D/.test(size)) {\n return plupload.translate('N/A');\n }\n\n // GB\n if (size > 1073741824) {\n return Math.round(size / 1073741824, 1) + \" GB\";\n }\n\n // MB\n if (size > 1048576) {\n return Math.round(size / 1048576, 1) + \" MB\";\n }\n\n // KB\n if (size > 1024) {\n return Math.round(size / 1024, 1) + \" KB\";\n }\n\n return size + \" b\";\n },\n\n /**\n\t\t * Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields.\n\t\t *\n\t\t * @method getPos\n\t\t * @param {Element} node HTML element or element id to get x, y position from.\n\t\t * @param {Element} root Optional root element to stop calculations at.\n\t\t * @return {object} Absolute position of the specified element object with x, y fields.\n\t\t */\n getPos: function (node, root) {\n var x = 0, y = 0, parent, doc = document, nodeRect, rootRect;\n\n node = node;\n root = root || doc.body;\n\n // Returns the x, y cordinate for an element on IE 6 and IE 7\n function getIEPos(node) {\n var bodyElm, rect, x = 0, y = 0;\n\n if (node) {\n rect = node.getBoundingClientRect();\n bodyElm = doc.compatMode === \"CSS1Compat\" ? doc.documentElement : doc.body;\n x = rect.left + bodyElm.scrollLeft;\n y = rect.top + bodyElm.scrollTop;\n }\n\n return {\n x: x,\n y: y\n };\n }\n\n // Use getBoundingClientRect on IE 6 and IE 7 but not on IE 8 in standards mode\n if (node && node.getBoundingClientRect && ((navigator.userAgent.indexOf('MSIE') > 0) && (doc.documentMode < 8))) {\n nodeRect = getIEPos(node);\n rootRect = getIEPos(root);\n\n return {\n x: nodeRect.x - rootRect.x,\n y: nodeRect.y - rootRect.y\n };\n }\n\n parent = node;\n while (parent && parent != root && parent.nodeType) {\n x += parent.offsetLeft || 0;\n y += parent.offsetTop || 0;\n parent = parent.offsetParent;\n }\n\n parent = node.parentNode;\n while (parent && parent != root && parent.nodeType) {\n x -= parent.scrollLeft || 0;\n y -= parent.scrollTop || 0;\n parent = parent.parentNode;\n }\n\n return {\n x: x,\n y: y\n };\n },\n\n /**\n\t\t * Returns the size of the specified node in pixels.\n\t\t *\n\t\t * @param {Node} node Node to get the size of.\n\t\t * @return {Object} Object with a w and h property.\n\t\t */\n getSize: function (node) {\n return {\n w: node.offsetWidth || node.clientWidth,\n h: node.offsetHeight || node.clientHeight\n };\n },\n\n /**\n\t\t * Parses the specified size string into a byte value. For example 10kb becomes 10240.\n\t\t *\n\t\t * @method parseSize\n\t\t * @param {String/Number} size String to parse or number to just pass through.\n\t\t * @return {Number} Size in bytes.\n\t\t */\n parseSize: function (size) {\n var mul;\n\n if (typeof (size) == 'string') {\n size = /^([0-9]+)([mgk]?)$/.exec(size.toLowerCase().replace(/[^0-9mkg]/g, ''));\n mul = size[2];\n size = +size[1];\n\n if (mul == 'g') {\n size *= 1073741824;\n }\n\n if (mul == 'm') {\n size *= 1048576;\n }\n\n if (mul == 'k') {\n size *= 1024;\n }\n }\n\n return size;\n },\n\n /**\n\t\t * Encodes the specified string.\n\t\t *\n\t\t * @method xmlEncode\n\t\t * @param {String} s String to encode.\n\t\t * @return {String} Encoded string.\n\t\t */\n xmlEncode: function (str) {\n return str ? ('' + str).replace(xmlEncodeRegExp, function (chr) {\n return xmlEncodeChars[chr] ? '&' + xmlEncodeChars[chr] + ';' : chr;\n }) : str;\n },\n\n /**\n\t\t * Forces anything into an array.\n\t\t *\n\t\t * @method toArray\n\t\t * @param {Object} obj Object with length field.\n\t\t * @return {Array} Array object containing all items.\n\t\t */\n toArray: function (obj) {\n var i, arr = [];\n\n for (i = 0; i < obj.length; i++) {\n arr[i] = obj[i];\n }\n\n return arr;\n },\n\n /**\n\t\t * Find an element in array and return it's index if present, otherwise return -1.\n\t\t *\n\t\t * @method inArray\n\t\t * @param {mixed} needle Element to find\n\t\t * @param {Array} array\n\t\t * @return {Int} Index of the element, or -1 if not found\n\t\t */\n inArray: function (needle, array) {\n if (array) {\n if (Array.prototype.indexOf) {\n return Array.prototype.indexOf.call(array, needle);\n }\n\n for (var i = 0, length = array.length; i < length; i++) {\n if (array[i] === needle) {\n return i;\n }\n }\n }\n return -1;\n },\n\n /**\n\t\t * Extends the language pack object with new items.\n\t\t *\n\t\t * @param {Object} pack Language pack items to add.\n\t\t * @return {Object} Extended language pack object.\n\t\t */\n addI18n: function (pack) {\n return plupload.extend(i18n, pack);\n },\n\n /**\n\t\t * Translates the specified string by checking for the english string in the language pack lookup.\n\t\t *\n\t\t * @param {String} str String to look for.\n\t\t * @return {String} Translated string or the input string if it wasn't found.\n\t\t */\n translate: function (str) {\n return i18n[str] || str;\n },\n\n /**\n\t\t * Checks if object is empty.\n\t\t *\n\t\t * @param {Object} obj Object to check.\n\t\t * @return {Boolean}\n\t\t */\n isEmptyObj: function (obj) {\n if (obj === undef) return true;\n\n for (var prop in obj) {\n return false;\n }\n return true;\n },\n\n /**\n\t\t * Checks if specified DOM element has specified class.\n\t\t *\n\t\t * @param {Object} obj DOM element like object to add handler to.\n\t\t * @param {String} name Class name\n\t\t */\n hasClass: function (obj, name) {\n var regExp;\n\n if (obj.className == '') {\n return false;\n }\n\n regExp = new RegExp(\"(^|\\\\s+)\" + name + \"(\\\\s+|$)\");\n\n return regExp.test(obj.className);\n },\n\n /**\n\t\t * Adds specified className to specified DOM element.\n\t\t *\n\t\t * @param {Object} obj DOM element like object to add handler to.\n\t\t * @param {String} name Class name\n\t\t */\n addClass: function (obj, name) {\n if (!plupload.hasClass(obj, name)) {\n obj.className = obj.className == '' ? name : obj.className.replace(/\\s+$/, '') + ' ' + name;\n }\n },\n\n /**\n\t\t * Removes specified className from specified DOM element.\n\t\t *\n\t\t * @param {Object} obj DOM element like object to add handler to.\n\t\t * @param {String} name Class name\n\t\t */\n removeClass: function (obj, name) {\n var regExp = new RegExp(\"(^|\\\\s+)\" + name + \"(\\\\s+|$)\");\n\n obj.className = obj.className.replace(regExp, function ($0, $1, $2) {\n return $1 === ' ' && $2 === ' ' ? ' ' : '';\n });\n },\n\n /**\n\t\t * Returns a given computed style of a DOM element.\n\t\t *\n\t\t * @param {Object} obj DOM element like object.\n\t\t * @param {String} name Style you want to get from the DOM element\n\t\t */\n getStyle: function (obj, name) {\n if (obj.currentStyle) {\n return obj.currentStyle[name];\n } else if (window.getComputedStyle) {\n return window.getComputedStyle(obj, null)[name];\n }\n },\n\n /**\n\t\t * Adds an event handler to the specified object and store reference to the handler\n\t\t * in objects internal Plupload registry (@see removeEvent).\n\t\t *\n\t\t * @param {Object} obj DOM element like object to add handler to.\n\t\t * @param {String} name Name to add event listener to.\n\t\t * @param {Function} callback Function to call when event occurs.\n\t\t * @param {String} (optional) key that might be used to add specifity to the event record.\n\t\t */\n addEvent: function (obj, name, callback) {\n var func, events, types, key;\n\n // if passed in, event will be locked with this key - one would need to provide it to removeEvent\n key = arguments[3];\n\n name = name.toLowerCase();\n\n // Initialize unique identifier if needed\n if (uid === undef) {\n uid = 'Plupload_' + plupload.guid();\n }\n\n // Add event listener\n if (obj.addEventListener) {\n func = callback;\n\n obj.addEventListener(name, func, false);\n } else if (obj.attachEvent) {\n\n func = function () {\n var evt = window.event;\n\n if (!evt.target) {\n evt.target = evt.srcElement;\n }\n\n evt.preventDefault = preventDefault;\n evt.stopPropagation = stopPropagation;\n\n callback(evt);\n };\n obj.attachEvent('on' + name, func);\n }\n\n // Log event handler to objects internal Plupload registry\n if (obj[uid] === undef) {\n obj[uid] = plupload.guid();\n }\n\n if (!eventhash.hasOwnProperty(obj[uid])) {\n eventhash[obj[uid]] = {};\n }\n\n events = eventhash[obj[uid]];\n\n if (!events.hasOwnProperty(name)) {\n events[name] = [];\n }\n\n events[name].push({\n func: func,\n orig: callback, // store original callback for IE\n key: key\n });\n },\n\n\n /**\n\t\t * Remove event handler from the specified object. If third argument (callback)\n\t\t * is not specified remove all events with the specified name.\n\t\t *\n\t\t * @param {Object} obj DOM element to remove event listener(s) from.\n\t\t * @param {String} name Name of event listener to remove.\n\t\t * @param {Function|String} (optional) might be a callback or unique key to match.\n\t\t */\n removeEvent: function (obj, name) {\n var type, callback, key;\n\n // match the handler either by callback or by key\t\n if (typeof (arguments[2]) == \"function\") {\n callback = arguments[2];\n } else {\n key = arguments[2];\n }\n\n name = name.toLowerCase();\n\n if (obj[uid] && eventhash[obj[uid]] && eventhash[obj[uid]][name]) {\n type = eventhash[obj[uid]][name];\n } else {\n return;\n }\n\n\n for (var i = type.length - 1; i >= 0; i--) {\n // undefined or not, key should match\t\t\t\n if (type[i].key === key || type[i].orig === callback) {\n\n if (obj.removeEventListener) {\n obj.removeEventListener(name, type[i].func, false);\n } else if (obj.detachEvent) {\n obj.detachEvent('on' + name, type[i].func);\n }\n\n type[i].orig = null;\n type[i].func = null;\n\n type.splice(i, 1);\n\n // If callback was passed we are done here, otherwise proceed\n if (callback !== undef) {\n break;\n }\n }\n }\n\n // If event array got empty, remove it\n if (!type.length) {\n delete eventhash[obj[uid]][name];\n }\n\n // If Plupload registry has become empty, remove it\n if (plupload.isEmptyObj(eventhash[obj[uid]])) {\n delete eventhash[obj[uid]];\n\n // IE doesn't let you remove DOM object property with - delete\n try {\n delete obj[uid];\n } catch (e) {\n obj[uid] = undef;\n }\n }\n },\n\n\n /**\n\t\t * Remove all kind of events from the specified object\n\t\t *\n\t\t * @param {Object} obj DOM element to remove event listeners from.\n\t\t * @param {String} (optional) unique key to match, when removing events.\n\t\t */\n removeAllEvents: function (obj) {\n var key = arguments[1];\n\n if (obj[uid] === undef || !obj[uid]) {\n return;\n }\n\n plupload.each(eventhash[obj[uid]], function (events, name) {\n plupload.removeEvent(obj, name, key);\n });\n }\n };\n\n\n /**\n\t * Uploader class, an instance of this class will be created for each upload field.\n\t *\n\t * @example\n\t * var uploader = new plupload.Uploader({\n\t * runtimes : 'gears,html5,flash',\n\t * browse_button : 'button_id'\n\t * });\n\t *\n\t * uploader.bind('Init', function(up) {\n\t * alert('Supports drag/drop: ' + (!!up.features.dragdrop));\n\t * });\n\t *\n\t * uploader.bind('FilesAdded', function(up, files) {\n\t * alert('Selected files: ' + files.length);\n\t * });\n\t *\n\t * uploader.bind('QueueChanged', function(up) {\n\t * alert('Queued files: ' + uploader.files.length);\n\t * });\n\t *\n\t * uploader.init();\n\t *\n\t * @class plupload.Uploader\n\t */\n\n /**\n\t * Constructs a new uploader instance.\n\t *\n\t * @constructor\n\t * @method Uploader\n\t * @param {Object} settings Initialization settings, to be used by the uploader instance and runtimes.\n\t */\n plupload.Uploader = function (settings) {\n var events = {}, total, files = [], startTime, disabled = false;\n\n // Inital total state\n total = new plupload.QueueProgress();\n\n // Default settings\n settings = plupload.extend({\n chunk_size: 0,\n multipart: true,\n multi_selection: true,\n file_data_name: 'file',\n filters: []\n }, settings);\n\n // Private methods\n function uploadNext() {\n var file, count = 0, i;\n\n if (this.state == plupload.STARTED) {\n // Find first QUEUED file\n for (i = 0; i < files.length; i++) {\n if (!file && files[i].status == plupload.QUEUED) {\n file = files[i];\n file.status = plupload.UPLOADING;\n if (this.trigger(\"BeforeUpload\", file)) {\n this.trigger(\"UploadFile\", file);\n }\n } else {\n count++;\n }\n }\n\n // All files are DONE or FAILED\n if (count == files.length) {\n this.stop();\n this.trigger(\"UploadComplete\", files);\n }\n }\n }\n\n function calc() {\n var i, file;\n\n // Reset stats\n total.reset();\n\n // Check status, size, loaded etc on all files\n for (i = 0; i < files.length; i++) {\n file = files[i];\n\n if (file.size !== undef) {\n total.size += file.size;\n total.loaded += file.loaded;\n } else {\n total.size = undef;\n }\n\n if (file.status == plupload.DONE) {\n total.uploaded++;\n } else if (file.status == plupload.FAILED) {\n total.failed++;\n } else {\n total.queued++;\n }\n }\n\n // If we couldn't calculate a total file size then use the number of files to calc percent\n if (total.size === undef) {\n total.percent = files.length > 0 ? Math.ceil(total.uploaded / files.length * 100) : 0;\n } else {\n total.bytesPerSec = Math.ceil(total.loaded / ((+new Date() - startTime || 1) / 1000.0));\n total.percent = total.size > 0 ? Math.ceil(total.loaded / total.size * 100) : 0;\n }\n }\n\n // Add public methods\n plupload.extend(this, {\n /**\n\t\t\t * Current state of the total uploading progress. This one can either be plupload.STARTED or plupload.STOPPED.\n\t\t\t * These states are controlled by the stop/start methods. The default value is STOPPED.\n\t\t\t *\n\t\t\t * @property state\n\t\t\t * @type Number\n\t\t\t */\n state: plupload.STOPPED,\n\n /**\n\t\t\t * Current runtime name.\n\t\t\t *\n\t\t\t * @property runtime\n\t\t\t * @type String\n\t\t\t */\n runtime: '',\n\n /**\n\t\t\t * Map of features that are available for the uploader runtime. Features will be filled\n\t\t\t * before the init event is called, these features can then be used to alter the UI for the end user.\n\t\t\t * Some of the current features that might be in this map is: dragdrop, chunks, jpgresize, pngresize.\n\t\t\t *\n\t\t\t * @property features\n\t\t\t * @type Object\n\t\t\t */\n features: {},\n\n /**\n\t\t\t * Current upload queue, an array of File instances.\n\t\t\t *\n\t\t\t * @property files\n\t\t\t * @type Array\n\t\t\t * @see plupload.File\n\t\t\t */\n files: files,\n\n /**\n\t\t\t * Object with name/value settings.\n\t\t\t *\n\t\t\t * @property settings\n\t\t\t * @type Object\n\t\t\t */\n settings: settings,\n\n /**\n\t\t\t * Total progess information. How many files has been uploaded, total percent etc.\n\t\t\t *\n\t\t\t * @property total\n\t\t\t * @type plupload.QueueProgress\n\t\t\t */\n total: total,\n\n /**\n\t\t\t * Unique id for the Uploader instance.\n\t\t\t *\n\t\t\t * @property id\n\t\t\t * @type String\n\t\t\t */\n id: plupload.guid(),\n\n /**\n\t\t\t * Initializes the Uploader instance and adds internal event listeners.\n\t\t\t *\n\t\t\t * @method init\n\t\t\t */\n init: function () {\n var self = this, i, runtimeList, a, runTimeIndex = 0, items;\n\n if (typeof (settings.preinit) == \"function\") {\n settings.preinit(self);\n } else {\n plupload.each(settings.preinit, function (func, name) {\n self.bind(name, func);\n });\n }\n\n settings.page_url = settings.page_url || document.location.pathname.replace(/\\/[^\\/]+$/g, '/');\n\n // If url is relative force it absolute to the current page\n if (!/^(\\w+:\\/\\/|\\/)/.test(settings.url)) {\n settings.url = settings.page_url + settings.url;\n }\n\n // Convert settings\n settings.chunk_size = plupload.parseSize(settings.chunk_size);\n settings.max_file_size = plupload.parseSize(settings.max_file_size);\n\n // Add files to queue\n self.bind('FilesAdded', function (up, selected_files) {\n var i, file, count = 0, extensionsRegExp, filters = settings.filters.mime_types;\n\n // Convert extensions to regexp\n if (filters && filters.length) {\n extensionsRegExp = [];\n\n plupload.each(filters, function (filter) {\n plupload.each(filter.extensions.split(/,/), function (ext) {\n if (/^\\s*\\*\\s*$/.test(ext)) {\n extensionsRegExp.push('\\\\.*');\n } else {\n extensionsRegExp.push('\\\\.' + ext.replace(new RegExp('[' + ('/^$.*+?|()[]{}\\\\'.replace(/./g, '\\\\$&')) + ']', 'g'), '\\\\$&'));\n }\n });\n });\n\n extensionsRegExp = new RegExp(extensionsRegExp.join('|') + '$', 'i');\n }\n\n for (i = 0; i < selected_files.length; i++) {\n file = selected_files[i];\n file.loaded = 0;\n file.percent = 0;\n file.status = plupload.QUEUED;\n\n // Invalid file extension\n if (extensionsRegExp && !extensionsRegExp.test(file.name)) {\n up.trigger('Error', {\n code: plupload.FILE_EXTENSION_ERROR,\n message: plupload.translate('File extension error.'),\n file: file\n });\n\n continue;\n }\n\n // Invalid file size\n if (file.size !== undef && file.size > settings.max_file_size) {\n up.trigger('Error', {\n code: plupload.FILE_SIZE_ERROR,\n message: plupload.translate('File size error.'),\n file: file\n });\n\n continue;\n }\n\n // Add valid file to list\n files.push(file);\n count++;\n }\n\n // Only trigger QueueChanged event if any files where added\n if (count) {\n delay(function () {\n self.trigger(\"QueueChanged\");\n self.refresh();\n }, 1);\n } else {\n return false; // Stop the FilesAdded event from immediate propagation\n }\n });\n\n // Generate unique target filenames\n if (settings.unique_names) {\n self.bind(\"UploadFile\", function (up, file) {\n var matches = file.name.match(/\\.([^.]+)$/), ext = \"tmp\";\n\n if (matches) {\n ext = matches[1];\n }\n\n file.target_name = file.id + '.' + ext;\n });\n }\n\n self.bind('UploadProgress', function (up, file) {\n file.percent = file.size > 0 ? Math.ceil(file.loaded / file.size * 100) : 100;\n calc();\n });\n\n self.bind('StateChanged', function (up) {\n if (up.state == plupload.STARTED) {\n // Get start time to calculate bps\n startTime = (+new Date());\n\n } else if (up.state == plupload.STOPPED) {\n // Reset currently uploading files\n for (i = up.files.length - 1; i >= 0; i--) {\n if (up.files[i].status == plupload.UPLOADING) {\n up.files[i].status = plupload.QUEUED;\n calc();\n }\n }\n }\n });\n\n self.bind('QueueChanged', calc);\n\n self.bind(\"Error\", function (up, err) {\n // Set failed status if an error occured on a file\n if (err.file) {\n err.file.status = plupload.FAILED;\n calc();\n\n // Upload next file but detach it from the error event\n // since other custom listeners might want to stop the queue\n if (up.state == plupload.STARTED) {\n delay(function () {\n uploadNext.call(self);\n }, 1);\n }\n }\n });\n\n self.bind(\"FileUploaded\", function (up, file) {\n file.status = plupload.DONE;\n file.loaded = file.size;\n up.trigger('UploadProgress', file);\n\n // Upload next file but detach it from the error event\n // since other custom listeners might want to stop the queue\n delay(function () {\n uploadNext.call(self);\n }, 1);\n });\n\n // Setup runtimeList\n if (settings.runtimes) {\n runtimeList = [];\n items = settings.runtimes.split(/\\s?,\\s?/);\n\n for (i = 0; i < items.length; i++) {\n if (runtimes[items[i]]) {\n runtimeList.push(runtimes[items[i]]);\n }\n }\n } else {\n runtimeList = runtimes;\n }\n\n // Call init on each runtime in sequence\n function callNextInit() {\n var runtime = runtimeList[runTimeIndex++], features, requiredFeatures, i;\n\n if (runtime) {\n features = runtime.getFeatures();\n\n // Check if runtime supports required features\n requiredFeatures = self.settings.required_features;\n if (requiredFeatures) {\n requiredFeatures = requiredFeatures.split(',');\n\n for (i = 0; i < requiredFeatures.length; i++) {\n // Specified feature doesn't exist\n if (!features[requiredFeatures[i]]) {\n callNextInit();\n return;\n }\n }\n }\n\n // Try initializing the runtime\n runtime.init(self, function (res) {\n if (res && res.success) {\n // Successful initialization\n self.features = features;\n self.runtime = runtime.name;\n self.trigger('Init', { runtime: runtime.name });\n self.trigger('PostInit');\n self.refresh();\n } else {\n callNextInit();\n }\n });\n } else {\n // Trigger an init error if we run out of runtimes\n self.trigger('Error', {\n code: plupload.INIT_ERROR,\n message: plupload.translate('Init error.')\n });\n }\n }\n\n callNextInit();\n\n if (typeof (settings.init) == \"function\") {\n settings.init(self);\n } else {\n plupload.each(settings.init, function (func, name) {\n self.bind(name, func);\n });\n }\n },\n\n /**\n\t\t\t * Refreshes the upload instance by dispatching out a refresh event to all runtimes.\n\t\t\t * This would for example reposition flash/silverlight shims on the page.\n\t\t\t *\n\t\t\t * @method refresh\n\t\t\t */\n refresh: function () {\n this.trigger(\"Refresh\");\n },\n\n /**\n\t\t\t * Starts uploading the queued files.\n\t\t\t *\n\t\t\t * @method start\n\t\t\t */\n start: function () {\n if (files.length && this.state != plupload.STARTED) {\n this.state = plupload.STARTED;\n this.trigger(\"StateChanged\");\n\n uploadNext.call(this);\n }\n },\n\n /**\n\t\t\t * Stops the upload of the queued files.\n\t\t\t *\n\t\t\t * @method stop\n\t\t\t */\n stop: function () {\n if (this.state != plupload.STOPPED) {\n this.state = plupload.STOPPED;\n this.trigger(\"CancelUpload\");\n this.trigger(\"StateChanged\");\n }\n },\n\n /** \n\t\t\t * Disables/enables browse button on request.\n\t\t\t *\n\t\t\t * @method disableBrowse\n\t\t\t * @param {Boolean} disable Whether to disable or enable (default: true)\n\t\t\t */\n disableBrowse: function () {\n disabled = arguments[0] !== undef ? arguments[0] : true;\n this.trigger(\"DisableBrowse\", disabled);\n },\n\n /**\n\t\t\t * Returns the specified file object by id.\n\t\t\t *\n\t\t\t * @method getFile\n\t\t\t * @param {String} id File id to look for.\n\t\t\t * @return {plupload.File} File object or undefined if it wasn't found;\n\t\t\t */\n getFile: function (id) {\n var i;\n\n for (i = files.length - 1; i >= 0; i--) {\n if (files[i].id === id) {\n return files[i];\n }\n }\n },\n\n /**\n\t\t\t * Removes a specific file.\n\t\t\t *\n\t\t\t * @method removeFile\n\t\t\t * @param {plupload.File} file File to remove from queue.\n\t\t\t */\n removeFile: function (file) {\n var i;\n\n for (i = files.length - 1; i >= 0; i--) {\n if (files[i].id === file.id) {\n return this.splice(i, 1)[0];\n }\n }\n },\n\n /**\n\t\t\t * Removes part of the queue and returns the files removed. This will also trigger the FilesRemoved and QueueChanged events.\n\t\t\t *\n\t\t\t * @method splice\n\t\t\t * @param {Number} start (Optional) Start index to remove from.\n\t\t\t * @param {Number} length (Optional) Lengh of items to remove.\n\t\t\t * @return {Array} Array of files that was removed.\n\t\t\t */\n splice: function (start, length) {\n var removed;\n\n // Splice and trigger events\n removed = files.splice(start === undef ? 0 : start, length === undef ? files.length : length);\n\n this.trigger(\"FilesRemoved\", removed);\n this.trigger(\"QueueChanged\");\n\n return removed;\n },\n\n /**\n\t\t\t * Dispatches the specified event name and it's arguments to all listeners.\n\t\t\t *\n\t\t\t *\n\t\t\t * @method trigger\n\t\t\t * @param {String} name Event name to fire.\n\t\t\t * @param {Object..} Multiple arguments to pass along to the listener functions.\n\t\t\t */\n trigger: function (name) {\n var list = events[name.toLowerCase()], i, args;\n\n // console.log(name, arguments);\n\n if (list) {\n // Replace name with sender in args\n args = Array.prototype.slice.call(arguments);\n args[0] = this;\n\n // Dispatch event to all listeners\n for (i = 0; i < list.length; i++) {\n // Fire event, break chain if false is returned\n if (list[i].func.apply(list[i].scope, args) === false) {\n return false;\n }\n }\n }\n\n return true;\n },\n\n /**\n\t\t\t * Check whether uploader has any listeners to the specified event.\n\t\t\t *\n\t\t\t * @method hasEventListener\n\t\t\t * @param {String} name Event name to check for.\n\t\t\t */\n hasEventListener: function (name) {\n return !!events[name.toLowerCase()];\n },\n\n /**\n\t\t\t * Adds an event listener by name.\n\t\t\t *\n\t\t\t * @method bind\n\t\t\t * @param {String} name Event name to listen for.\n\t\t\t * @param {function} func Function to call ones the event gets fired.\n\t\t\t * @param {Object} scope Optional scope to execute the specified function in.\n\t\t\t */\n bind: function (name, func, scope) {\n var list;\n\n name = name.toLowerCase();\n list = events[name] || [];\n list.push({ func: func, scope: scope || this });\n events[name] = list;\n },\n\n /**\n\t\t\t * Removes the specified event listener.\n\t\t\t *\n\t\t\t * @method unbind\n\t\t\t * @param {String} name Name of event to remove.\n\t\t\t * @param {function} func Function to remove from listener.\n\t\t\t */\n unbind: function (name) {\n name = name.toLowerCase();\n\n var list = events[name], i, func = arguments[1];\n\n if (list) {\n if (func !== undef) {\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i].func === func) {\n list.splice(i, 1);\n break;\n }\n }\n } else {\n list = [];\n }\n\n // delete event list if it has become empty\n if (!list.length) {\n delete events[name];\n }\n }\n },\n\n /**\n\t\t\t * Removes all event listeners.\n\t\t\t *\n\t\t\t * @method unbindAll\n\t\t\t */\n unbindAll: function () {\n var self = this;\n\n plupload.each(events, function (list, name) {\n self.unbind(name);\n });\n },\n\n /**\n\t\t\t * Destroys Plupload instance and cleans after itself.\n\t\t\t *\n\t\t\t * @method destroy\n\t\t\t */\n destroy: function () {\n this.stop();\n this.trigger('Destroy');\n\n // Clean-up after uploader itself\n this.unbindAll();\n }\n\n /**\n\t\t\t * Fires when the current RunTime has been initialized.\n\t\t\t *\n\t\t\t * @event Init\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t */\n\n /**\n\t\t\t * Fires after the init event incase you need to perform actions there.\n\t\t\t *\n\t\t\t * @event PostInit\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t */\n\n /**\n\t\t\t * Fires when the silverlight/flash or other shim needs to move.\n\t\t\t *\n\t\t\t * @event Refresh\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t */\n\n /**\n\t\t\t * Fires when the overall state is being changed for the upload queue.\n\t\t\t *\n\t\t\t * @event StateChanged\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t */\n\n /**\n\t\t\t * Fires when a file is to be uploaded by the runtime.\n\t\t\t *\n\t\t\t * @event UploadFile\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {plupload.File} file File to be uploaded.\n\t\t\t */\n\n /**\n\t\t\t * Fires when just before a file is uploaded. This event enables you to override settings\n\t\t\t * on the uploader instance before the file is uploaded.\n\t\t\t *\n\t\t\t * @event BeforeUpload\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {plupload.File} file File to be uploaded.\n\t\t\t */\n\n /**\n\t\t\t * Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance.\n\t\t\t *\n\t\t\t * @event QueueChanged\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t */\n\n /**\n\t\t\t * Fires while a file is being uploaded. Use this event to update the current file upload progress.\n\t\t\t *\n\t\t\t * @event UploadProgress\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {plupload.File} file File that is currently being uploaded.\n\t\t\t */\n\n /**\n\t\t\t * Fires while a file was removed from queue.\n\t\t\t *\n\t\t\t * @event FilesRemoved\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {Array} files Array of files that got removed.\n\t\t\t */\n\n /**\n\t\t\t * Fires while when the user selects files to upload.\n\t\t\t *\n\t\t\t * @event FilesAdded\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {Array} files Array of file objects that was added to queue/selected by the user.\n\t\t\t */\n\n /**\n\t\t\t * Fires when a file is successfully uploaded.\n\t\t\t *\n\t\t\t * @event FileUploaded\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {plupload.File} file File that was uploaded.\n\t\t\t * @param {Object} response Object with response properties.\n\t\t\t */\n\n /**\n\t\t\t * Fires when file chunk is uploaded.\n\t\t\t *\n\t\t\t * @event ChunkUploaded\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {plupload.File} file File that the chunk was uploaded for.\n\t\t\t * @param {Object} response Object with response properties.\n\t\t\t */\n\n /**\n\t\t\t * Fires when all files in a queue are uploaded.\n\t\t\t *\n\t\t\t * @event UploadComplete\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {Array} files Array of file objects that was added to queue/selected by the user.\n\t\t\t */\n\n /**\n\t\t\t * Fires when a error occurs.\n\t\t\t *\n\t\t\t * @event Error\n\t\t\t * @param {plupload.Uploader} uploader Uploader instance sending the event.\n\t\t\t * @param {Object} error Contains code, message and sometimes file and other details.\n\t\t\t */\n\n /**\n * Fires when destroy method is called.\n *\n * @event Destroy\n * @param {plupload.Uploader} uploader Uploader instance sending the event.\n */\n });\n };\n\n /**\n\t * File instance.\n\t *\n\t * @class plupload.File\n\t * @param {String} name Name of the file.\n\t * @param {Number} size File size.\n\t */\n\n /**\n\t * Constructs a new file instance.\n\t *\n\t * @constructor\n\t * @method File\n\t * @param {String} id Unique file id.\n\t * @param {String} name File name.\n\t * @param {Number} size File size in bytes.\n\t */\n plupload.File = function (id, name, size) {\n var self = this; // Setup alias for self to reduce code size when it's compressed\n\n /**\n\t\t * File id this is a globally unique id for the specific file.\n\t\t *\n\t\t * @property id\n\t\t * @type String\n\t\t */\n self.id = id;\n\n /**\n\t\t * File name for example \"myfile.gif\".\n\t\t *\n\t\t * @property name\n\t\t * @type String\n\t\t */\n self.name = name;\n\n /**\n\t\t * File size in bytes.\n\t\t *\n\t\t * @property size\n\t\t * @type Number\n\t\t */\n self.size = size;\n\n /**\n\t\t * Number of bytes uploaded of the files total size.\n\t\t *\n\t\t * @property loaded\n\t\t * @type Number\n\t\t */\n self.loaded = 0;\n\n /**\n\t\t * Number of percentage uploaded of the file.\n\t\t *\n\t\t * @property percent\n\t\t * @type Number\n\t\t */\n self.percent = 0;\n\n /**\n\t\t * Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE.\n\t\t *\n\t\t * @property status\n\t\t * @type Number\n\t\t * @see plupload\n\t\t */\n self.status = 0;\n };\n\n /**\n\t * Runtime class gets implemented by each upload runtime.\n\t *\n\t * @class plupload.Runtime\n\t * @static\n\t */\n plupload.Runtime = function () {\n /**\n\t\t * Returns a list of supported features for the runtime.\n\t\t *\n\t\t * @return {Object} Name/value object with supported features.\n\t\t */\n this.getFeatures = function () {\n };\n\n /**\n\t\t * Initializes the upload runtime. This method should add necessary items to the DOM and register events needed for operation. \n\t\t *\n\t\t * @method init\n\t\t * @param {plupload.Uploader} uploader Uploader instance that needs to be initialized.\n\t\t * @param {function} callback Callback function to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.\n\t\t */\n this.init = function (uploader, callback) {\n };\n };\n\n /**\n\t * Runtime class gets implemented by each upload runtime.\n\t *\n\t * @class plupload.QueueProgress\n\t */\n\n /**\n\t * Constructs a queue progress.\n\t *\n\t * @constructor\n\t * @method QueueProgress\n\t */\n plupload.QueueProgress = function () {\n var self = this; // Setup alias for self to reduce code size when it's compressed\n\n /**\n\t\t * Total queue file size.\n\t\t *\n\t\t * @property size\n\t\t * @type Number\n\t\t */\n self.size = 0;\n\n /**\n\t\t * Total bytes uploaded.\n\t\t *\n\t\t * @property loaded\n\t\t * @type Number\n\t\t */\n self.loaded = 0;\n\n /**\n\t\t * Number of files uploaded.\n\t\t *\n\t\t * @property uploaded\n\t\t * @type Number\n\t\t */\n self.uploaded = 0;\n\n /**\n\t\t * Number of files failed to upload.\n\t\t *\n\t\t * @property failed\n\t\t * @type Number\n\t\t */\n self.failed = 0;\n\n /**\n\t\t * Number of files yet to be uploaded.\n\t\t *\n\t\t * @property queued\n\t\t * @type Number\n\t\t */\n self.queued = 0;\n\n /**\n\t\t * Total percent of the uploaded bytes.\n\t\t *\n\t\t * @property percent\n\t\t * @type Number\n\t\t */\n self.percent = 0;\n\n /**\n\t\t * Bytes uploaded per second.\n\t\t *\n\t\t * @property bytesPerSec\n\t\t * @type Number\n\t\t */\n self.bytesPerSec = 0;\n\n /**\n\t\t * Resets the progress to it's initial values.\n\t\t *\n\t\t * @method reset\n\t\t */\n self.reset = function () {\n self.size = self.loaded = self.uploaded = self.failed = self.queued = self.percent = self.bytesPerSec = 0;\n };\n };\n\n // Create runtimes namespace\n plupload.runtimes = {};\n\n // Expose plupload namespace\n window.plupload = plupload;\n})();\n\n\n(function (window, document, plupload, undef) {\n var html5files = {}, // queue of original File objects\n\t\tfakeSafariDragDrop;\n\n function readFileAsDataURL(file, callback) {\n var reader;\n\n // Use FileReader if it's available\n if (\"FileReader\" in window) {\n reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = function () {\n callback(reader.result);\n };\n } else {\n return callback(file.getAsDataURL());\n }\n }\n\n function readFileAsBinary(file, callback) {\n var reader;\n\n // Use FileReader if it's available\n if (\"FileReader\" in window) {\n reader = new FileReader();\n reader.readAsBinaryString(file);\n reader.onload = function () {\n callback(reader.result);\n };\n } else {\n return callback(file.getAsBinary());\n }\n }\n\n function scaleImage(file, resize, mime, callback) {\n var canvas, context, img, scale,\n\t\t\tup = this;\n\n readFileAsDataURL(html5files[file.id], function (data) {\n // Setup canvas and context\n canvas = document.createElement(\"canvas\");\n canvas.style.display = 'none';\n document.body.appendChild(canvas);\n context = canvas.getContext('2d');\n\n // Load image\n img = new Image();\n img.onerror = img.onabort = function () {\n // Failed to load, the image may be invalid\n callback({ success: false });\n };\n img.onload = function () {\n var width, height, percentage, jpegHeaders, exifParser;\n\n if (!resize['width']) {\n resize['width'] = img.width;\n }\n\n if (!resize['height']) {\n resize['height'] = img.height;\n }\n\n scale = Math.min(resize.width / img.width, resize.height / img.height);\n\n if (scale < 1 || (scale === 1 && mime === 'image/jpeg')) {\n width = Math.round(img.width * scale);\n height = Math.round(img.height * scale);\n\n // Scale image and canvas\n canvas.width = width;\n canvas.height = height;\n context.drawImage(img, 0, 0, width, height);\n\n // Preserve JPEG headers\n if (mime === 'image/jpeg') {\n jpegHeaders = new JPEG_Headers(atob(data.substring(data.indexOf('base64,') + 7)));\n if (jpegHeaders['headers'] && jpegHeaders['headers'].length) {\n exifParser = new ExifParser();\n\n if (exifParser.init(jpegHeaders.get('exif')[0])) {\n // Set new width and height\n exifParser.setExif('PixelXDimension', width);\n exifParser.setExif('PixelYDimension', height);\n\n // Update EXIF header\n jpegHeaders.set('exif', exifParser.getBinary());\n\n // trigger Exif events only if someone listens to them\n if (up.hasEventListener('ExifData')) {\n up.trigger('ExifData', file, exifParser.EXIF());\n }\n\n if (up.hasEventListener('GpsData')) {\n up.trigger('GpsData', file, exifParser.GPS());\n }\n }\n }\n\n if (resize['quality']) {\n // Try quality property first\n try {\n data = canvas.toDataURL(mime, resize['quality'] / 100);\n } catch (e) {\n data = canvas.toDataURL(mime);\n }\n }\n } else {\n data = canvas.toDataURL(mime);\n }\n\n // Remove data prefix information and grab the base64 encoded data and decode it\n data = data.substring(data.indexOf('base64,') + 7);\n data = atob(data);\n\n // Restore JPEG headers if applicable\n if (jpegHeaders && jpegHeaders['headers'] && jpegHeaders['headers'].length) {\n data = jpegHeaders.restore(data);\n jpegHeaders.purge(); // free memory\n }\n\n // Remove canvas and execute callback with decoded image data\n canvas.parentNode.removeChild(canvas);\n callback({ success: true, data: data });\n } else {\n // Image does not need to be resized\n callback({ success: false });\n }\n };\n\n img.src = data;\n });\n }\n\n /**\n\t * HMTL5 implementation. This runtime supports these features: dragdrop, jpgresize, pngresize.\n\t *\n\t * @static\n\t * @class plupload.runtimes.Html5\n\t * @extends plupload.Runtime\n\t */\n plupload.runtimes.Html5 = plupload.addRuntime(\"html5\", {\n /**\n\t\t * Returns a list of supported features for the runtime.\n\t\t *\n\t\t * @return {Object} Name/value object with supported features.\n\t\t */\n getFeatures: function () {\n var xhr, hasXhrSupport, hasProgress, canSendBinary, dataAccessSupport, sliceSupport;\n\n hasXhrSupport = hasProgress = dataAccessSupport = sliceSupport = false;\n\n if (window.XMLHttpRequest) {\n xhr = new XMLHttpRequest();\n hasProgress = !!xhr.upload;\n hasXhrSupport = !!(xhr.sendAsBinary || xhr.upload);\n }\n\n // Check for support for various features\n if (hasXhrSupport) {\n canSendBinary = !!(xhr.sendAsBinary || (window.Uint8Array && window.ArrayBuffer));\n\n // Set dataAccessSupport only for Gecko since BlobBuilder and XHR doesn't handle binary data correctly\t\t\t\t\n dataAccessSupport = !!(File && (File.prototype.getAsDataURL || window.FileReader) && canSendBinary);\n sliceSupport = !!(File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice));\n }\n\n // sniff out Safari for Windows and fake drag/drop\n fakeSafariDragDrop = plupload.ua.safari && plupload.ua.windows;\n\n return {\n html5: hasXhrSupport, // This is a special one that we check inside the init call\n dragdrop: (function () {\n // this comes directly from Modernizr: http://www.modernizr.com/\n var div = document.createElement('div');\n return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n }()),\n jpgresize: dataAccessSupport,\n pngresize: dataAccessSupport,\n multipart: dataAccessSupport || !!window.FileReader || !!window.FormData,\n canSendBinary: canSendBinary,\n // gecko 2/5/6 can't send blob with FormData: https://bugzilla.mozilla.org/show_bug.cgi?id=649150 \n cantSendBlobInFormData: !!(plupload.ua.gecko && window.FormData && window.FileReader && !FileReader.prototype.readAsArrayBuffer),\n progress: hasProgress,\n chunks: sliceSupport,\n // Safari on Windows has problems when selecting multiple files\n multi_selection: !(plupload.ua.safari && plupload.ua.windows),\n // WebKit and Gecko 2+ can trigger file dialog progrmmatically\n triggerDialog: (plupload.ua.gecko && window.FormData || plupload.ua.webkit)\n };\n },\n\n /**\n\t\t * Initializes the upload runtime.\n\t\t *\n\t\t * @method init\n\t\t * @param {plupload.Uploader} uploader Uploader instance that needs to be initialized.\n\t\t * @param {function} callback Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.\n\t\t */\n init: function (uploader, callback) {\n var features, xhr;\n\n function addSelectedFiles(native_files) {\n var file, i, files = [], id, fileNames = {};\n\n // Add the selected files to the file queue\n for (i = 0; i < native_files.length; i++) {\n file = native_files[i];\n\n // Safari on Windows will add first file from dragged set multiple times\n // @see: https://bugs.webkit.org/show_bug.cgi?id=37957\n if (fileNames[file.name]) {\n continue;\n }\n fileNames[file.name] = true;\n\n // Store away gears blob internally\n id = plupload.guid();\n html5files[id] = file;\n\n // Expose id, name and size\n files.push(new plupload.File(id, file.fileName || file.name, file.fileSize || file.size)); // fileName / fileSize depricated\n }\n\n // Trigger FilesAdded event if we added any\n if (files.length) {\n \t \twindow.console.log(\"Beginning upload with plUpload\");//eslint-disable-line\n uploader.trigger(\"FilesAdded\", files);\n }\n }\n\n // No HTML5 upload support\n features = this.getFeatures();\n if (!features.html5) {\n callback({ success: false });\n return;\n }\n\n uploader.bind(\"Init\", function (up) {\n var inputContainer, browseButton, mimes = [], i, y, filters = up.settings.filters.mime_types, ext, type, container = document.body, inputFile;\n\n // Create input container and insert it at an absolute position within the browse button\n inputContainer = document.createElement('div');\n inputContainer.id = up.id + '_html5_container';\n\n plupload.extend(inputContainer.style, {\n position: 'absolute',\n background: uploader.settings.shim_bgcolor || 'transparent',\n width: '100px',\n height: '100px',\n overflow: 'hidden',\n zIndex: 99999,\n opacity: uploader.settings.shim_bgcolor ? '' : 0 // Force transparent if bgcolor is undefined\n });\n inputContainer.className = 'plupload html5';\n\n if (uploader.settings.container) {\n container = document.getElementById(uploader.settings.container);\n if (plupload.getStyle(container, 'position') === 'static') {\n container.style.position = 'relative';\n }\n }\n\n container.appendChild(inputContainer);\n\n // Convert extensions to mime types list\n no_type_restriction:\n for (i = 0; i < filters.length; i++) {\n ext = filters[i].extensions.split(/,/);\n\n for (y = 0; y < ext.length; y++) {\n\n // If there's an asterisk in the list, then accept attribute is not required\n if (ext[y] === '*') {\n mimes = [];\n break no_type_restriction;\n }\n\n type = plupload.mimeTypes[ext[y]];\n\n if (type && plupload.inArray(type, mimes) === -1) {\n mimes.push(type);\n\n if (ext[y] == 'doc' || ext[y] == 'docx' || ext[y] == 'srt') {\n mimes.push('.' + ext[y]);\n }\n }\n }\n }\n\n\n // Insert the input inside the input container\n inputContainer.innerHTML = '';\n\n inputContainer.scrollTop = 100;\n inputFile = document.getElementById(uploader.id + '_html5');\n\n if (up.features.triggerDialog) {\n plupload.extend(inputFile.style, {\n position: 'absolute',\n width: '100%',\n height: '100%'\n });\n } else {\n // shows arrow cursor instead of the text one, bit more logical\n plupload.extend(inputFile.style, {\n cssFloat: 'right',\n styleFloat: 'right'\n });\n }\n\n inputFile.onchange = function () {\n // Add the selected files from file input\n addSelectedFiles(this.files);\n\n // Clearing the value enables the user to select the same file again if they want to\n this.value = '';\n };\n\n /* Since we have to place input[type=file] on top of the browse_button for some browsers (FF, Opera),\n\t\t\t\tbrowse_button loses interactivity, here we try to neutralize this issue highlighting browse_button\n\t\t\t\twith a special classes\n\t\t\t\tTODO: needs to be revised as things will change */\n browseButton = document.getElementById(up.settings.browse_button);\n if (browseButton) {\n var hoverClass = up.settings.browse_button_hover,\n\t\t\t\t\t\tactiveClass = up.settings.browse_button_active,\n\t\t\t\t\t\ttopElement = up.features.triggerDialog ? browseButton : inputContainer;\n\n if (hoverClass) {\n plupload.addEvent(topElement, 'mouseover', function () {\n plupload.addClass(browseButton, hoverClass);\n }, up.id);\n plupload.addEvent(topElement, 'mouseout', function () {\n plupload.removeClass(browseButton, hoverClass);\n }, up.id);\n }\n\n if (activeClass) {\n plupload.addEvent(topElement, 'mousedown', function () {\n plupload.addClass(browseButton, activeClass);\n }, up.id);\n plupload.addEvent(document.body, 'mouseup', function () {\n plupload.removeClass(browseButton, activeClass);\n }, up.id);\n }\n\n // Route click event to the input[type=file] element for supporting browsers\n if (up.features.triggerDialog) {\n plupload.addEvent(browseButton, 'click', function (e) {\n var input = document.getElementById(up.id + '_html5');\n if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file]\n input.click();\n }\n e.preventDefault();\n }, up.id);\n }\n }\n });\n\n // Add drop handler\n uploader.bind(\"PostInit\", function () {\n var dropElm = document.getElementById(uploader.settings.drop_element);\n\n if (dropElm) {\n // Lets fake drag/drop on Safari by moving a input type file in front of the mouse pointer when we drag into the drop zone\n // TODO: Remove this logic once Safari has official drag/drop support\n if (fakeSafariDragDrop) {\n plupload.addEvent(dropElm, 'dragenter', function (e) {\n var dropInputElm, dropPos, dropSize;\n\n // Get or create drop zone\n dropInputElm = document.getElementById(uploader.id + \"_drop\");\n if (!dropInputElm) {\n dropInputElm = document.createElement(\"input\");\n dropInputElm.setAttribute('type', \"file\");\n dropInputElm.setAttribute('id', uploader.id + \"_drop\");\n dropInputElm.setAttribute('multiple', 'multiple');\n\n plupload.addEvent(dropInputElm, 'change', function () {\n // Add the selected files from file input\n addSelectedFiles(this.files);\n\n // Remove input element\n plupload.removeEvent(dropInputElm, 'change', uploader.id);\n dropInputElm.parentNode.removeChild(dropInputElm);\n }, uploader.id);\n\n dropElm.appendChild(dropInputElm);\n }\n\n dropPos = plupload.getPos(dropElm, document.getElementById(uploader.settings.container));\n dropSize = plupload.getSize(dropElm);\n\n if (plupload.getStyle(dropElm, 'position') === 'static') {\n plupload.extend(dropElm.style, {\n position: 'relative'\n });\n }\n\n plupload.extend(dropInputElm.style, {\n position: 'absolute',\n display: 'block',\n top: 0,\n left: 0,\n width: dropSize.w + 'px',\n height: dropSize.h + 'px',\n opacity: 0\n });\n }, uploader.id);\n\n return;\n }\n\n // Block browser default drag over\n plupload.addEvent(dropElm, 'dragover', function (e) {\n e.preventDefault();\n }, uploader.id);\n\n // Attach drop handler and grab files\n plupload.addEvent(dropElm, 'drop', function (e) {\n var dataTransfer = e.dataTransfer;\n\n // Add dropped files\n if (dataTransfer && dataTransfer.files) {\n addSelectedFiles(dataTransfer.files);\n }\n\n e.preventDefault();\n }, uploader.id);\n }\n });\n\n uploader.bind(\"Refresh\", function (up) {\n var browseButton, browsePos, browseSize, inputContainer, zIndex;\n\n browseButton = document.getElementById(uploader.settings.browse_button);\n if (browseButton) {\n browsePos = plupload.getPos(browseButton, document.getElementById(up.settings.container));\n browseSize = plupload.getSize(browseButton);\n inputContainer = document.getElementById(uploader.id + '_html5_container');\n\n plupload.extend(inputContainer.style, {\n top: browsePos.y + 'px',\n left: browsePos.x + 'px',\n width: browseSize.w + 'px',\n height: browseSize.h + 'px'\n });\n\n // for WebKit place input element underneath the browse button and route onclick event \n // TODO: revise when browser support for this feature will change\n if (uploader.features.triggerDialog) {\n if (plupload.getStyle(browseButton, 'position') === 'static') {\n plupload.extend(browseButton.style, {\n position: 'relative'\n });\n }\n\n zIndex = parseInt(plupload.getStyle(browseButton, 'z-index'), 10);\n if (isNaN(zIndex)) {\n zIndex = 0;\n }\n\n plupload.extend(browseButton.style, {\n zIndex: zIndex\n });\n\n plupload.extend(inputContainer.style, {\n zIndex: zIndex - 1\n });\n }\n }\n });\n\n uploader.bind(\"DisableBrowse\", function (up, disabled) {\n var input = document.getElementById(up.id + '_html5');\n if (input) {\n input.disabled = disabled;\n }\n });\n\n uploader.bind(\"CancelUpload\", function () {\n if (xhr && xhr.abort) {\n xhr.abort();\n }\n });\n\n uploader.bind(\"UploadFile\", function (up, file) {\n var settings = up.settings, nativeFile, resize;\n\n function w3cBlobSlice(blob, start, end) {\n var blobSlice;\n\n if (File.prototype.slice) {\n try {\n blob.slice();\t// depricated version will throw WRONG_ARGUMENTS_ERR exception\n return blob.slice(start, end);\n } catch (e) {\n // depricated slice method\n return blob.slice(start, end - start);\n }\n // slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672\t\n } else if (blobSlice = File.prototype.webkitSlice || File.prototype.mozSlice) {\n return blobSlice.call(blob, start, end);\n } else {\n return null; // or throw some exception\t\n }\n }\n\n function sendBinaryBlob(blob) {\n var chunk = 0, loaded = 0,\n\t\t\t\t\t\tfr = (\"FileReader\" in window) ? new FileReader : null;\n\n\n function uploadNextChunk() {\n var chunkBlob, br, chunks, args, chunkSize, curChunkSize, mimeType, url = up.settings.url;\n\n\n function prepareAndSend(bin) {\n var multipartDeltaSize = 0,\n\t\t\t\t\t\t\t\tboundary = '----pluploadboundary' + plupload.guid(), formData, dashdash = '--', crlf = '\\r\\n', multipartBlob = '';\n\n xhr = new XMLHttpRequest;\n\n // Do we have upload progress support\n if (xhr.upload) {\n xhr.upload.onprogress = function (e) {\n file.loaded = Math.min(file.size, loaded + e.loaded - multipartDeltaSize); // Loaded can be larger than file size due to multipart encoding\n up.trigger('UploadProgress', file);\n };\n }\n\n xhr.onreadystatechange = function () {\n var httpStatus, chunkArgs;\n\n if (xhr.readyState == 4 && up.state !== plupload.STOPPED) {\n // Getting the HTTP status might fail on some Gecko versions\n try {\n httpStatus = xhr.status;\n } catch (ex) {\n httpStatus = 0;\n }\n\n // Is error status\n if (httpStatus >= 400) {\n up.trigger('Error', {\n code: plupload.HTTP_ERROR,\n message: plupload.translate('HTTP Error.'),\n file: file,\n status: httpStatus\n });\n } else {\n // Handle chunk response\n if (chunks) {\n chunkArgs = {\n chunk: chunk,\n chunks: chunks,\n response: xhr.responseText,\n status: httpStatus\n };\n\n up.trigger('ChunkUploaded', file, chunkArgs);\n loaded += curChunkSize;\n\n // Stop upload\n if (chunkArgs.cancelled) {\n file.status = plupload.FAILED;\n return;\n }\n\n file.loaded = Math.min(file.size, (chunk + 1) * chunkSize);\n } else {\n file.loaded = file.size;\n }\n\n up.trigger('UploadProgress', file);\n\n bin = chunkBlob = formData = multipartBlob = null; // Free memory\n\n // Check if file is uploaded\n if (!chunks || ++chunk >= chunks) {\n file.status = plupload.DONE;\n\n up.trigger('FileUploaded', file, {\n response: xhr.responseText,\n status: httpStatus\n });\n } else {\n // Still chunks left\n uploadNextChunk();\n }\n }\n }\n };\n\n\n // Build multipart request\n if (up.settings.multipart && features.multipart) {\n\n args.name = file.target_name || file.name;\n\n xhr.open(\"post\", url, true);\n\n // Set custom headers\n plupload.each(up.settings.headers, function (value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n\n // if has FormData support like Chrome 6+, Safari 5+, Firefox 4, use it\n if (typeof (bin) !== 'string' && !!window.FormData) {\n formData = new FormData();\n\n // Add multipart params\n plupload.each(plupload.extend(args, up.settings.multipart_params), function (value, name) {\n formData.append(name, value);\n });\n\n // Add file and send it\n formData.append(up.settings.file_data_name, bin);\n xhr.send(formData);\n\n return;\n } // if no FormData we can still try to send it directly as last resort (see below)\n\n\n if (typeof (bin) === 'string') {\n // Trying to send the whole thing as binary...\n\n // multipart request\n xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);\n\n // append multipart parameters\n plupload.each(plupload.extend(args, up.settings.multipart_params), function (value, name) {\n multipartBlob += dashdash + boundary + crlf +\n\t\t\t\t\t\t\t\t\t\t\t'Content-Disposition: form-data; name=\"' + name + '\"' + crlf + crlf;\n\n multipartBlob += unescape(encodeURIComponent(value)) + crlf;\n });\n\n mimeType = plupload.mimeTypes[file.name.replace(/^.+\\.([^.]+)/, '$1').toLowerCase()] || 'application/octet-stream';\n\n // Build RFC2388 blob\n multipartBlob += dashdash + boundary + crlf +\n\t\t\t\t\t\t\t\t\t\t'Content-Disposition: form-data; name=\"' + up.settings.file_data_name + '\"; filename=\"' + unescape(encodeURIComponent(file.name)) + '\"' + crlf +\n\t\t\t\t\t\t\t\t\t\t'Content-Type: ' + mimeType + crlf + crlf +\n\t\t\t\t\t\t\t\t\t\tbin + crlf +\n\t\t\t\t\t\t\t\t\t\tdashdash + boundary + dashdash + crlf;\n\n multipartDeltaSize = multipartBlob.length - bin.length;\n bin = multipartBlob;\n\n\n if (xhr.sendAsBinary) { // Gecko\n xhr.sendAsBinary(bin);\n } else if (features.canSendBinary) { // WebKit with typed arrays support\n var ui8a = new Uint8Array(bin.length);\n for (var i = 0; i < bin.length; i++) {\n ui8a[i] = (bin.charCodeAt(i) & 0xff);\n }\n xhr.send(ui8a.buffer);\n }\n return; // will return from here only if shouldn't send binary\n }\n }\n\n // if no multipart, or last resort, send as binary stream\n url = plupload.buildUrl(up.settings.url, plupload.extend(args, up.settings.multipart_params));\n\n xhr.open(\"post\", url, true);\n\n xhr.setRequestHeader('Content-Type', 'application/octet-stream'); // Binary stream header\n\n // Set custom headers\n plupload.each(up.settings.headers, function (value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n xhr.send(bin);\n } // prepareAndSend\n\n\n // File upload finished\n if (file.status == plupload.DONE || file.status == plupload.FAILED || up.state == plupload.STOPPED) {\n return;\n }\n\n // Standard arguments\n args = { name: file.target_name || file.name };\n\n // Only add chunking args if needed\n if (settings.chunk_size && file.size > settings.chunk_size && (features.chunks || typeof (blob) == 'string')) { // blob will be of type string if it was loaded in memory \n chunkSize = settings.chunk_size;\n chunks = Math.ceil(file.size / chunkSize);\n curChunkSize = Math.min(chunkSize, file.size - (chunk * chunkSize));\n\n // Blob is string so we need to fake chunking, this is not\n // ideal since the whole file is loaded into memory\n if (typeof (blob) == 'string') {\n chunkBlob = blob.substring(chunk * chunkSize, chunk * chunkSize + curChunkSize);\n } else {\n // Slice the chunk\n chunkBlob = w3cBlobSlice(blob, chunk * chunkSize, chunk * chunkSize + curChunkSize);\n }\n\n // Setup query string arguments\n args.chunk = chunk;\n args.chunks = chunks;\n } else {\n curChunkSize = file.size;\n chunkBlob = blob;\n }\n\n // workaround Gecko 2,5,6 FormData+Blob bug: https://bugzilla.mozilla.org/show_bug.cgi?id=649150\n if (up.settings.multipart && features.multipart && typeof (chunkBlob) !== 'string' && fr && features.cantSendBlobInFormData && features.chunks && up.settings.chunk_size) { // Gecko 2,5,6\n fr.onload = function () {\n prepareAndSend(fr.result);\n }\n fr.readAsBinaryString(chunkBlob);\n } else {\n prepareAndSend(chunkBlob);\n }\n\n }\n\n // Start uploading chunks\n uploadNextChunk();\n }\n\n nativeFile = html5files[file.id];\n\n // Resize image if it's a supported format and resize is enabled\n if (features.jpgresize && up.settings.resize && /\\.(png|jpg|jpeg)$/i.test(file.name)) {\n scaleImage.call(up, file, up.settings.resize, /\\.png$/i.test(file.name) ? 'image/png' : 'image/jpeg', function (res) {\n // If it was scaled send the scaled image if it failed then\n // send the raw image and let the server do the scaling\n if (res.success) {\n file.size = res.data.length;\n sendBinaryBlob(res.data);\n } else if (features.chunks) {\n sendBinaryBlob(nativeFile);\n } else {\n readFileAsBinary(nativeFile, sendBinaryBlob); // for browsers not supporting File.slice (e.g. FF3.6)\n }\n });\n // if there's no way to slice file without preloading it in memory, preload it\n } else if (!features.chunks && features.jpgresize) {\n readFileAsBinary(nativeFile, sendBinaryBlob);\n } else {\n sendBinaryBlob(nativeFile);\n }\n });\n\n\n uploader.bind('Destroy', function (up) {\n var name, element, container = document.body,\n\t\t\t\t\telements = {\n\t\t\t\t\t inputContainer: up.id + '_html5_container',\n\t\t\t\t\t inputFile: up.id + '_html5',\n\t\t\t\t\t browseButton: up.settings.browse_button,\n\t\t\t\t\t dropElm: up.settings.drop_element\n\t\t\t\t\t};\n\n // Unbind event handlers\n for (name in elements) {\n element = document.getElementById(elements[name]);\n if (element) {\n plupload.removeAllEvents(element, up.id);\n }\n }\n plupload.removeAllEvents(document.body, up.id);\n\n if (up.settings.container) {\n container = document.getElementById(up.settings.container);\n }\n\n // Remove mark-up\n container.removeChild(document.getElementById(elements.inputContainer));\n });\n\n callback({ success: true });\n }\n });\n\n function BinaryReader() {\n var II = false, bin;\n\n // Private functions\n function read(idx, size) {\n var mv = II ? 0 : -8 * (size - 1), sum = 0, i;\n\n for (i = 0; i < size; i++) {\n sum |= (bin.charCodeAt(idx + i) << Math.abs(mv + i * 8));\n }\n\n return sum;\n }\n\n function putstr(segment, idx, length) {\n var length = arguments.length === 3 ? length : bin.length - idx - 1;\n\n bin = bin.substr(0, idx) + segment + bin.substr(length + idx);\n }\n\n function write(idx, num, size) {\n var str = '', mv = II ? 0 : -8 * (size - 1), i;\n\n for (i = 0; i < size; i++) {\n str += String.fromCharCode((num >> Math.abs(mv + i * 8)) & 255);\n }\n\n putstr(str, idx, size);\n }\n\n // Public functions\n return {\n II: function (order) {\n if (order === undef) {\n return II;\n } else {\n II = order;\n }\n },\n\n init: function (binData) {\n II = false;\n bin = binData;\n },\n\n SEGMENT: function (idx, length, segment) {\n switch (arguments.length) {\n case 1:\n return bin.substr(idx, bin.length - idx - 1);\n case 2:\n return bin.substr(idx, length);\n case 3:\n putstr(segment, idx, length);\n break;\n default: return bin;\n }\n },\n\n BYTE: function (idx) {\n return read(idx, 1);\n },\n\n SHORT: function (idx) {\n return read(idx, 2);\n },\n\n LONG: function (idx, num) {\n if (num === undef) {\n return read(idx, 4);\n } else {\n write(idx, num, 4);\n }\n },\n\n SLONG: function (idx) { // 2's complement notation\n var num = read(idx, 4);\n\n return (num > 2147483647 ? num - 4294967296 : num);\n },\n\n STRING: function (idx, size) {\n var str = '';\n\n for (size += idx; idx < size; idx++) {\n str += String.fromCharCode(read(idx, 1));\n }\n\n return str;\n }\n };\n }\n\n function JPEG_Headers(data) {\n\n var markers = {\n 0xFFE1: {\n app: 'EXIF',\n name: 'APP1',\n signature: \"Exif\\0\"\n },\n 0xFFE2: {\n app: 'ICC',\n name: 'APP2',\n signature: \"ICC_PROFILE\\0\"\n },\n 0xFFED: {\n app: 'IPTC',\n name: 'APP13',\n signature: \"Photoshop 3.0\\0\"\n }\n },\n\t\t\theaders = [], read, idx, marker = undef, length = 0, limit;\n\n\n read = new BinaryReader();\n read.init(data);\n\n // Check if data is jpeg\n if (read.SHORT(0) !== 0xFFD8) {\n return;\n }\n\n idx = 2;\n limit = Math.min(1048576, data.length);\n\n while (idx <= limit) {\n marker = read.SHORT(idx);\n\n // omit RST (restart) markers\n if (marker >= 0xFFD0 && marker <= 0xFFD7) {\n idx += 2;\n continue;\n }\n\n // no headers allowed after SOS marker\n if (marker === 0xFFDA || marker === 0xFFD9) {\n break;\n }\n\n length = read.SHORT(idx + 2) + 2;\n\n if (markers[marker] &&\n\t\t\t\tread.STRING(idx + 4, markers[marker].signature.length) === markers[marker].signature) {\n headers.push({\n hex: marker,\n app: markers[marker].app.toUpperCase(),\n name: markers[marker].name.toUpperCase(),\n start: idx,\n length: length,\n segment: read.SEGMENT(idx, length)\n });\n }\n idx += length;\n }\n\n read.init(null); // free memory\n\n return {\n\n headers: headers,\n\n restore: function (data) {\n read.init(data);\n\n // Check if data is jpeg\n var jpegHeaders = new JPEG_Headers(data);\n\n if (!jpegHeaders['headers']) {\n return false;\n }\n\n // Delete any existing headers that need to be replaced\n for (var i = jpegHeaders['headers'].length; i > 0; i--) {\n var hdr = jpegHeaders['headers'][i - 1];\n read.SEGMENT(hdr.start, hdr.length, '')\n }\n jpegHeaders.purge();\n\n idx = read.SHORT(2) == 0xFFE0 ? 4 + read.SHORT(4) : 2;\n\n for (var i = 0, max = headers.length; i < max; i++) {\n read.SEGMENT(idx, 0, headers[i].segment);\n idx += headers[i].length;\n }\n\n return read.SEGMENT();\n },\n\n get: function (app) {\n var array = [];\n\n for (var i = 0, max = headers.length; i < max; i++) {\n if (headers[i].app === app.toUpperCase()) {\n array.push(headers[i].segment);\n }\n }\n return array;\n },\n\n set: function (app, segment) {\n var array = [];\n\n if (typeof (segment) === 'string') {\n array.push(segment);\n } else {\n array = segment;\n }\n\n for (var i = ii = 0, max = headers.length; i < max; i++) {\n if (headers[i].app === app.toUpperCase()) {\n headers[i].segment = array[ii];\n headers[i].length = array[ii].length;\n ii++;\n }\n if (ii >= array.length) break;\n }\n },\n\n purge: function () {\n headers = [];\n read.init(null);\n }\n };\n }\n\n\n function ExifParser() {\n // Private ExifParser fields\n var data, tags, offsets = {}, tagDescs;\n\n data = new BinaryReader();\n\n tags = {\n tiff: {\n /*\n\t\t\t\tThe image orientation viewed in terms of rows and columns.\n\t\n\t\t\t\t1 - The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side.\n\t\t\t\t2 - The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side.\n\t\t\t\t3 - The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side.\n\t\t\t\t4 - The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side.\n\t\t\t\t5 - The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side.\n\t\t\t\t6 - The 0th row is the visual left-hand side of the image, and the 0th column is the visual top.\n\t\t\t\t7 - The 0th row is the visual right-hand side of the image, and the 0th column is the visual top.\n\t\t\t\t8 - The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom.\n\t\t\t\t9 - The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom.\n\t\t\t\t*/\n 0x0112: 'Orientation',\n 0x8769: 'ExifIFDPointer',\n 0x8825: 'GPSInfoIFDPointer'\n },\n exif: {\n 0x9000: 'ExifVersion',\n 0xA001: 'ColorSpace',\n 0xA002: 'PixelXDimension',\n 0xA003: 'PixelYDimension',\n 0x9003: 'DateTimeOriginal',\n 0x829A: 'ExposureTime',\n 0x829D: 'FNumber',\n 0x8827: 'ISOSpeedRatings',\n 0x9201: 'ShutterSpeedValue',\n 0x9202: 'ApertureValue',\n 0x9207: 'MeteringMode',\n 0x9208: 'LightSource',\n 0x9209: 'Flash',\n 0xA402: 'ExposureMode',\n 0xA403: 'WhiteBalance',\n 0xA406: 'SceneCaptureType',\n 0xA404: 'DigitalZoomRatio',\n 0xA408: 'Contrast',\n 0xA409: 'Saturation',\n 0xA40A: 'Sharpness'\n },\n gps: {\n 0x0000: 'GPSVersionID',\n 0x0001: 'GPSLatitudeRef',\n 0x0002: 'GPSLatitude',\n 0x0003: 'GPSLongitudeRef',\n 0x0004: 'GPSLongitude'\n }\n };\n\n tagDescs = {\n 'ColorSpace': {\n 1: 'sRGB',\n 0: 'Uncalibrated'\n },\n\n 'MeteringMode': {\n 0: 'Unknown',\n 1: 'Average',\n 2: 'CenterWeightedAverage',\n 3: 'Spot',\n 4: 'MultiSpot',\n 5: 'Pattern',\n 6: 'Partial',\n 255: 'Other'\n },\n\n 'LightSource': {\n 1: 'Daylight',\n 2: 'Fliorescent',\n 3: 'Tungsten',\n 4: 'Flash',\n 9: 'Fine weather',\n 10: 'Cloudy weather',\n 11: 'Shade',\n 12: 'Daylight fluorescent (D 5700 - 7100K)',\n 13: 'Day white fluorescent (N 4600 -5400K)',\n 14: 'Cool white fluorescent (W 3900 - 4500K)',\n 15: 'White fluorescent (WW 3200 - 3700K)',\n 17: 'Standard light A',\n 18: 'Standard light B',\n 19: 'Standard light C',\n 20: 'D55',\n 21: 'D65',\n 22: 'D75',\n 23: 'D50',\n 24: 'ISO studio tungsten',\n 255: 'Other'\n },\n\n 'Flash': {\n 0x0000: 'Flash did not fire.',\n 0x0001: 'Flash fired.',\n 0x0005: 'Strobe return light not detected.',\n 0x0007: 'Strobe return light detected.',\n 0x0009: 'Flash fired, compulsory flash mode',\n 0x000D: 'Flash fired, compulsory flash mode, return light not detected',\n 0x000F: 'Flash fired, compulsory flash mode, return light detected',\n 0x0010: 'Flash did not fire, compulsory flash mode',\n 0x0018: 'Flash did not fire, auto mode',\n 0x0019: 'Flash fired, auto mode',\n 0x001D: 'Flash fired, auto mode, return light not detected',\n 0x001F: 'Flash fired, auto mode, return light detected',\n 0x0020: 'No flash function',\n 0x0041: 'Flash fired, red-eye reduction mode',\n 0x0045: 'Flash fired, red-eye reduction mode, return light not detected',\n 0x0047: 'Flash fired, red-eye reduction mode, return light detected',\n 0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode',\n 0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected',\n 0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected',\n 0x0059: 'Flash fired, auto mode, red-eye reduction mode',\n 0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode',\n 0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode'\n },\n\n 'ExposureMode': {\n 0: 'Auto exposure',\n 1: 'Manual exposure',\n 2: 'Auto bracket'\n },\n\n 'WhiteBalance': {\n 0: 'Auto white balance',\n 1: 'Manual white balance'\n },\n\n 'SceneCaptureType': {\n 0: 'Standard',\n 1: 'Landscape',\n 2: 'Portrait',\n 3: 'Night scene'\n },\n\n 'Contrast': {\n 0: 'Normal',\n 1: 'Soft',\n 2: 'Hard'\n },\n\n 'Saturation': {\n 0: 'Normal',\n 1: 'Low saturation',\n 2: 'High saturation'\n },\n\n 'Sharpness': {\n 0: 'Normal',\n 1: 'Soft',\n 2: 'Hard'\n },\n\n // GPS related\n 'GPSLatitudeRef': {\n N: 'North latitude',\n S: 'South latitude'\n },\n\n 'GPSLongitudeRef': {\n E: 'East longitude',\n W: 'West longitude'\n }\n };\n\n function extractTags(IFD_offset, tags2extract) {\n var length = data.SHORT(IFD_offset), i, ii,\n\t\t\t\ttag, type, count, tagOffset, offset, value, values = [], hash = {};\n\n for (i = 0; i < length; i++) {\n // Set binary reader pointer to beginning of the next tag\n offset = tagOffset = IFD_offset + 12 * i + 2;\n\n tag = tags2extract[data.SHORT(offset)];\n\n if (tag === undef) {\n continue; // Not the tag we requested\n }\n\n type = data.SHORT(offset += 2);\n count = data.LONG(offset += 2);\n\n offset += 4;\n values = [];\n\n switch (type) {\n case 1: // BYTE\n case 7: // UNDEFINED\n if (count > 4) {\n offset = data.LONG(offset) + offsets.tiffHeader;\n }\n\n for (ii = 0; ii < count; ii++) {\n values[ii] = data.BYTE(offset + ii);\n }\n\n break;\n\n case 2: // STRING\n if (count > 4) {\n offset = data.LONG(offset) + offsets.tiffHeader;\n }\n\n hash[tag] = data.STRING(offset, count - 1);\n\n continue;\n\n case 3: // SHORT\n if (count > 2) {\n offset = data.LONG(offset) + offsets.tiffHeader;\n }\n\n for (ii = 0; ii < count; ii++) {\n values[ii] = data.SHORT(offset + ii * 2);\n }\n\n break;\n\n case 4: // LONG\n if (count > 1) {\n offset = data.LONG(offset) + offsets.tiffHeader;\n }\n\n for (ii = 0; ii < count; ii++) {\n values[ii] = data.LONG(offset + ii * 4);\n }\n\n break;\n\n case 5: // RATIONAL\n offset = data.LONG(offset) + offsets.tiffHeader;\n\n for (ii = 0; ii < count; ii++) {\n values[ii] = data.LONG(offset + ii * 4) / data.LONG(offset + ii * 4 + 4);\n }\n\n break;\n\n case 9: // SLONG\n offset = data.LONG(offset) + offsets.tiffHeader;\n\n for (ii = 0; ii < count; ii++) {\n values[ii] = data.SLONG(offset + ii * 4);\n }\n\n break;\n\n case 10: // SRATIONAL\n offset = data.LONG(offset) + offsets.tiffHeader;\n\n for (ii = 0; ii < count; ii++) {\n values[ii] = data.SLONG(offset + ii * 4) / data.SLONG(offset + ii * 4 + 4);\n }\n\n break;\n\n default:\n continue;\n }\n\n value = (count == 1 ? values[0] : values);\n\n if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') {\n hash[tag] = tagDescs[tag][value];\n } else {\n hash[tag] = value;\n }\n }\n\n return hash;\n }\n\n function getIFDOffsets() {\n var Tiff = undef, idx = offsets.tiffHeader;\n\n // Set read order of multi-byte data\n data.II(data.SHORT(idx) == 0x4949);\n\n // Check if always present bytes are indeed present\n if (data.SHORT(idx += 2) !== 0x002A) {\n return false;\n }\n\n offsets['IFD0'] = offsets.tiffHeader + data.LONG(idx += 2);\n Tiff = extractTags(offsets['IFD0'], tags.tiff);\n\n offsets['exifIFD'] = ('ExifIFDPointer' in Tiff ? offsets.tiffHeader + Tiff.ExifIFDPointer : undef);\n offsets['gpsIFD'] = ('GPSInfoIFDPointer' in Tiff ? offsets.tiffHeader + Tiff.GPSInfoIFDPointer : undef);\n\n return true;\n }\n\n // At the moment only setting of simple (LONG) values, that do not require offset recalculation, is supported\n function setTag(ifd, tag, value) {\n var offset, length, tagOffset, valueOffset = 0;\n\n // If tag name passed translate into hex key\n if (typeof (tag) === 'string') {\n var tmpTags = tags[ifd.toLowerCase()];\n for (hex in tmpTags) {\n if (tmpTags[hex] === tag) {\n tag = hex;\n break;\n }\n }\n }\n offset = offsets[ifd.toLowerCase() + 'IFD'];\n length = data.SHORT(offset);\n\n for (i = 0; i < length; i++) {\n tagOffset = offset + 12 * i + 2;\n\n if (data.SHORT(tagOffset) == tag) {\n valueOffset = tagOffset + 8;\n break;\n }\n }\n\n if (!valueOffset) return false;\n\n\n data.LONG(valueOffset, value);\n return true;\n }\n\n\n // Public functions\n return {\n init: function (segment) {\n // Reset internal data\n offsets = {\n tiffHeader: 10\n };\n\n if (segment === undef || !segment.length) {\n return false;\n }\n\n data.init(segment);\n\n // Check if that's APP1 and that it has EXIF\n if (data.SHORT(0) === 0xFFE1 && data.STRING(4, 5).toUpperCase() === \"EXIF\\0\") {\n return getIFDOffsets();\n }\n return false;\n },\n\n EXIF: function () {\n var Exif;\n\n // Populate EXIF hash\n Exif = extractTags(offsets.exifIFD, tags.exif);\n\n // Fix formatting of some tags\n if (Exif.ExifVersion && plupload.typeOf(Exif.ExifVersion) === 'array') {\n for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) {\n exifVersion += String.fromCharCode(Exif.ExifVersion[i]);\n }\n Exif.ExifVersion = exifVersion;\n }\n\n return Exif;\n },\n\n GPS: function () {\n var GPS;\n\n GPS = extractTags(offsets.gpsIFD, tags.gps);\n\n // iOS devices (and probably some others) do not put in GPSVersionID tag (why?..)\n if (GPS.GPSVersionID) {\n GPS.GPSVersionID = GPS.GPSVersionID.join('.');\n }\n\n return GPS;\n },\n\n setExif: function (tag, value) {\n // Right now only setting of width/height is possible\n if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') return false;\n\n return setTag('exif', tag, value);\n },\n\n\n getBinary: function () {\n return data.SEGMENT();\n }\n };\n };\n})(window, document, plupload);\n\n(function (window, document, plupload, undef) {\n var uploadInstances = {}, initialized = {};\n\n function getFlashVersion() {\n var version;\n\n try {\n version = navigator.plugins['Shockwave Flash'];\n version = version.description;\n } catch (e1) {\n try {\n version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');\n } catch (e2) {\n version = '0.0';\n }\n }\n\n version = version.match(/\\d+/g);\n\n return parseFloat(version[0] + '.' + version[1]);\n }\n\n plupload.flash = {\n /**\n\t\t * Will be executed by the Flash runtime when it sends out events.\n\t\t *\n\t\t * @param {String} id If for the upload instance.\n\t\t * @param {String} name Event name to trigger.\n\t\t * @param {Object} obj Parameters to be passed with event.\n\t\t */\n trigger: function (id, name, obj) {\n\n // Detach the call so that error handling in the browser is presented correctly\n setTimeout(function () {\n var uploader = uploadInstances[id], i, args;\n\n if (uploader) {\n uploader.trigger('Flash:' + name, obj);\n }\n }, 0);\n }\n };\n\n /**\n\t * FlashRuntime implementation. This runtime supports these features: jpgresize, pngresize, chunks.\n\t *\n\t * @static\n\t * @class plupload.runtimes.Flash\n\t * @extends plupload.Runtime\n\t */\n plupload.runtimes.Flash = plupload.addRuntime(\"flash\", {\n\n /**\n\t\t * Returns a list of supported features for the runtime.\n\t\t *\n\t\t * @return {Object} Name/value object with supported features.\n\t\t */\n getFeatures: function () {\n return {\n jpgresize: true,\n pngresize: true,\n maxWidth: 8091,\n maxHeight: 8091,\n chunks: true,\n progress: true,\n multipart: true,\n multi_selection: true\n };\n },\n\n /**\n\t\t * Initializes the upload runtime. This method should add necessary items to the DOM and register events needed for operation. \n\t\t *\n\t\t * @method init\n\t\t * @param {plupload.Uploader} uploader Uploader instance that needs to be initialized.\n\t\t * @param {function} callback Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.\n\t\t */\n init: function (uploader, callback) {\n var browseButton, flashContainer, waitCount = 0, container = document.body;\n\n if (getFlashVersion() < 10) {\n callback({ success: false });\n return;\n }\n\n initialized[uploader.id] = false;\n uploadInstances[uploader.id] = uploader;\n\n // Find browse button and set to to be relative\n browseButton = document.getElementById(uploader.settings.browse_button);\n\n // Create flash container and insert it at an absolute position within the browse button\n flashContainer = document.createElement('div');\n flashContainer.id = uploader.id + '_flash_container';\n\n plupload.extend(flashContainer.style, {\n position: 'absolute',\n top: '0px',\n background: uploader.settings.shim_bgcolor || 'transparent',\n zIndex: 99999,\n width: '100%',\n height: '100%'\n });\n\n flashContainer.className = 'plupload flash';\n\n if (uploader.settings.container) {\n container = document.getElementById(uploader.settings.container);\n if (plupload.getStyle(container, 'position') === 'static') {\n container.style.position = 'relative';\n }\n }\n\n container.appendChild(flashContainer);\n\n // insert flash object\n (function () {\n var html, el;\n\n html = '' +\n\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t'';\n\n if (plupload.ua.ie) {\n el = document.createElement('div');\n flashContainer.appendChild(el);\n el.outerHTML = html;\n el = null; // just in case\n } else {\n flashContainer.innerHTML = html;\n }\n }());\n\n function getFlashObj() {\n return document.getElementById(uploader.id + '_flash');\n }\n\n function waitLoad() {\n\n // Wait for 5 sec\n if (waitCount++ > 5000) {\n callback({ success: false });\n return;\n }\n\n if (initialized[uploader.id] === false) { // might also be undefined, if uploader was destroyed by that moment\n setTimeout(waitLoad, 1);\n }\n }\n\n waitLoad();\n\n // Fix IE memory leaks\n browseButton = flashContainer = null;\n\n // destroy should always be available, after Flash:Init or before (#516)\n uploader.bind(\"Destroy\", function (up) {\n var flashContainer;\n\n plupload.removeAllEvents(document.body, up.id);\n\n delete initialized[up.id];\n delete uploadInstances[up.id];\n\n flashContainer = document.getElementById(up.id + '_flash_container');\n if (flashContainer) {\n container.removeChild(flashContainer);\n }\n });\n\n // Wait for Flash to send init event\n uploader.bind(\"Flash:Init\", function () {\n var lookup = {}, i;\n\n try {\n getFlashObj().setFileFilters(uploader.settings.filters.mime_types, uploader.settings.multi_selection);\n } catch (ex) {\n callback({ success: false });\n return;\n }\n\n // Prevent eventual reinitialization of the instance\n if (initialized[uploader.id]) {\n return;\n }\n initialized[uploader.id] = true;\n\n uploader.bind(\"UploadFile\", function (up, file) {\n var settings = up.settings, resize = uploader.settings.resize || {};\n\n getFlashObj().uploadFile(lookup[file.id], settings.url, {\n name: file.target_name || file.name,\n mime: plupload.mimeTypes[file.name.replace(/^.+\\.([^.]+)/, '$1').toLowerCase()] || 'application/octet-stream',\n chunk_size: settings.chunk_size,\n width: resize.width,\n height: resize.height,\n quality: resize.quality,\n multipart: settings.multipart,\n multipart_params: settings.multipart_params || {},\n file_data_name: settings.file_data_name,\n format: /\\.(jpg|jpeg)$/i.test(file.name) ? 'jpg' : 'png',\n headers: settings.headers,\n urlstream_upload: settings.urlstream_upload\n });\n });\n\n uploader.bind(\"CancelUpload\", function () {\n getFlashObj().cancelUpload();\n });\n\n\n uploader.bind(\"Flash:UploadProcess\", function (up, flash_file) {\n var file = up.getFile(lookup[flash_file.id]);\n\n if (file.status != plupload.FAILED) {\n file.loaded = flash_file.loaded;\n file.size = flash_file.size;\n\n up.trigger('UploadProgress', file);\n }\n });\n\n uploader.bind(\"Flash:UploadChunkComplete\", function (up, info) {\n var chunkArgs, file = up.getFile(lookup[info.id]);\n\n chunkArgs = {\n chunk: info.chunk,\n chunks: info.chunks,\n response: info.text\n };\n\n up.trigger('ChunkUploaded', file, chunkArgs);\n\n // Stop upload if file is maked as failed\n if (file.status !== plupload.FAILED && up.state !== plupload.STOPPED) {\n getFlashObj().uploadNextChunk();\n }\n\n // Last chunk then dispatch FileUploaded event\n if (info.chunk == info.chunks - 1) {\n file.status = plupload.DONE;\n\n up.trigger('FileUploaded', file, {\n response: info.text\n });\n }\n });\n\n uploader.bind(\"Flash:SelectFiles\", function (up, selected_files) {\n var file, i, files = [], id;\n\n // Add the selected files to the file queue\n for (i = 0; i < selected_files.length; i++) {\n file = selected_files[i];\n\n // Store away flash ref internally\n id = plupload.guid();\n lookup[id] = file.id;\n lookup[file.id] = id;\n\n files.push(new plupload.File(id, file.name, file.size));\n }\n\n // Trigger FilesAdded event if we added any\n if (files.length) {\n uploader.trigger(\"FilesAdded\", files);\n }\n });\n\n uploader.bind(\"Flash:SecurityError\", function (up, err) {\n uploader.trigger('Error', {\n code: plupload.SECURITY_ERROR,\n message: plupload.translate('Security error.'),\n details: err.message,\n file: uploader.getFile(lookup[err.id])\n });\n });\n\n uploader.bind(\"Flash:GenericError\", function (up, err) {\n uploader.trigger('Error', {\n code: plupload.GENERIC_ERROR,\n message: plupload.translate('Generic error.'),\n details: err.message,\n file: uploader.getFile(lookup[err.id])\n });\n });\n\n uploader.bind(\"Flash:IOError\", function (up, err) {\n uploader.trigger('Error', {\n code: plupload.IO_ERROR,\n message: plupload.translate('IO error.'),\n details: err.message,\n file: uploader.getFile(lookup[err.id])\n });\n });\n\n uploader.bind(\"Flash:ImageError\", function (up, err) {\n uploader.trigger('Error', {\n code: parseInt(err.code, 10),\n message: plupload.translate('Image error.'),\n file: uploader.getFile(lookup[err.id])\n });\n });\n\n uploader.bind('Flash:StageEvent:rollOver', function (up) {\n var browseButton, hoverClass;\n\n browseButton = document.getElementById(uploader.settings.browse_button);\n hoverClass = up.settings.browse_button_hover;\n\n if (browseButton && hoverClass) {\n plupload.addClass(browseButton, hoverClass);\n }\n });\n\n uploader.bind('Flash:StageEvent:rollOut', function (up) {\n var browseButton, hoverClass;\n\n browseButton = document.getElementById(uploader.settings.browse_button);\n hoverClass = up.settings.browse_button_hover;\n\n if (browseButton && hoverClass) {\n plupload.removeClass(browseButton, hoverClass);\n }\n });\n\n uploader.bind('Flash:StageEvent:mouseDown', function (up) {\n var browseButton, activeClass;\n\n browseButton = document.getElementById(uploader.settings.browse_button);\n activeClass = up.settings.browse_button_active;\n\n if (browseButton && activeClass) {\n plupload.addClass(browseButton, activeClass);\n\n // Make sure that browse_button has active state removed from it\n plupload.addEvent(document.body, 'mouseup', function () {\n plupload.removeClass(browseButton, activeClass);\n }, up.id);\n }\n });\n\n uploader.bind('Flash:StageEvent:mouseUp', function (up) {\n var browseButton, activeClass;\n\n browseButton = document.getElementById(uploader.settings.browse_button);\n activeClass = up.settings.browse_button_active;\n\n if (browseButton && activeClass) {\n plupload.removeClass(browseButton, activeClass);\n }\n });\n\n\n uploader.bind('Flash:ExifData', function (up, obj) {\n uploader.trigger('ExifData', uploader.getFile(lookup[obj.id]), obj.data);\n });\n\n\n uploader.bind('Flash:GpsData', function (up, obj) {\n uploader.trigger('GpsData', uploader.getFile(lookup[obj.id]), obj.data);\n });\n\n\n uploader.bind(\"QueueChanged\", function (up) {\n uploader.refresh();\n });\n\n uploader.bind(\"FilesRemoved\", function (up, files) {\n var i;\n\n for (i = 0; i < files.length; i++) {\n getFlashObj().removeFile(lookup[files[i].id]);\n }\n });\n\n uploader.bind(\"StateChanged\", function (up) {\n uploader.refresh();\n });\n\n uploader.bind(\"Refresh\", function (up) {\n var browseButton, browsePos, browseSize;\n\n // Set file filters incase it has been changed dynamically\n getFlashObj().setFileFilters(uploader.settings.filters.mime_types, uploader.settings.multi_selection);\n\n browseButton = document.getElementById(up.settings.browse_button);\n if (browseButton) {\n browsePos = plupload.getPos(browseButton, document.getElementById(up.settings.container));\n browseSize = plupload.getSize(browseButton);\n\n plupload.extend(document.getElementById(up.id + '_flash_container').style, {\n top: browsePos.y + 'px',\n left: browsePos.x + 'px',\n width: browseSize.w + 'px',\n height: browseSize.h + 'px'\n });\n }\n });\n\n uploader.bind(\"DisableBrowse\", function (up, disabled) {\n getFlashObj().disableBrowse(disabled);\n });\n\n callback({ success: true });\n });\n }\n });\n})(window, document, plupload);\n\n(function (window, document, plupload, undef) {\n function getById(id) {\n return document.getElementById(id);\n }\n\n /**\n\t * HTML4 implementation. This runtime has no special features it uses an form that posts files into an hidden iframe.\n\t *\n\t * @static\n\t * @class plupload.runtimes.Html4\n\t * @extends plupload.Runtime\n\t */\n plupload.runtimes.Html4 = plupload.addRuntime(\"html4\", {\n /**\n\t\t * Returns a list of supported features for the runtime.\n\t\t *\n\t\t * @return {Object} Name/value object with supported features.\n\t\t */\n getFeatures: function () {\n // Only multipart feature\n return {\n multipart: true,\n\n // WebKit and Gecko 2+ can trigger file dialog progrmmatically\n triggerDialog: (plupload.ua.gecko && window.FormData || plupload.ua.webkit)\n };\n },\n\n /**\n\t\t * Initializes the upload runtime.\n\t\t *\n\t\t * @method init\n\t\t * @param {plupload.Uploader} uploader Uploader instance that needs to be initialized.\n\t\t * @param {function} callback Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.\n\t\t */\n init: function (uploader, callback) {\n uploader.bind(\"Init\", function (up) {\n var container = document.body, iframe, url = \"javascript\", currentFile,\n\t\t\t\t\tinput, currentFileId, fileIds = [], IE = /MSIE/.test(navigator.userAgent), mimes = [],\n\t\t\t\t\tfilters = up.settings.filters.mime_types, i, ext, type, y;\n\n // Convert extensions to mime types list\n no_type_restriction:\n for (i = 0; i < filters.length; i++) {\n ext = filters[i].extensions.split(/,/);\n\n for (y = 0; y < ext.length; y++) {\n\n // If there's an asterisk in the list, then accept attribute is not required\n if (ext[y] === '*') {\n mimes = [];\n break no_type_restriction;\n }\n\n type = plupload.mimeTypes[ext[y]];\n\n if (type && plupload.inArray(type, mimes) === -1) {\n mimes.push(type);\n }\n }\n }\n\n mimes = mimes.join(',');\n\n function createForm() {\n var form, input, bgcolor, browseButton;\n\n // Setup unique id for form\n currentFileId = plupload.guid();\n\n // Save id for Destroy handler\n fileIds.push(currentFileId);\n\n // Create form\n form = document.createElement('form');\n form.setAttribute('id', 'form_' + currentFileId);\n form.setAttribute('method', 'post');\n form.setAttribute('enctype', 'multipart/form-data');\n form.setAttribute('encoding', 'multipart/form-data');\n form.setAttribute(\"target\", up.id + '_iframe');\n form.style.position = 'absolute';\n\n // Create input and set attributes\n input = document.createElement('input');\n input.setAttribute('id', 'input_' + currentFileId);\n input.setAttribute('type', 'file');\n input.setAttribute('accept', mimes);\n input.setAttribute('size', 1);\n\n browseButton = getById(up.settings.browse_button);\n\n // Route click event to input element programmatically, if possible\n if (up.features.triggerDialog && browseButton) {\n plupload.addEvent(getById(up.settings.browse_button), 'click', function (e) {\n if (!input.disabled) {\n input.click();\n }\n e.preventDefault();\n }, up.id);\n }\n\n // Set input styles\n plupload.extend(input.style, {\n width: '100%',\n height: '100%',\n opacity: 0,\n fontSize: '99px', // force input element to be bigger then needed to occupy whole space\n cursor: 'pointer'\n });\n\n plupload.extend(form.style, {\n overflow: 'hidden'\n });\n\n // Show the container if shim_bgcolor is specified\n bgcolor = up.settings.shim_bgcolor;\n if (bgcolor) {\n form.style.background = bgcolor;\n }\n\n // no opacity in IE\n if (IE) {\n plupload.extend(input.style, {\n filter: \"alpha(opacity=0)\"\n });\n }\n\n // add change event\n plupload.addEvent(input, 'change', function (e) {\n var element = e.target, name, files = [], topElement;\n\n if (element.value) {\n getById('form_' + currentFileId).style.top = -0xFFFFF + \"px\";\n\n // Get file name\n name = element.value.replace(/\\\\/g, '/');\n name = name.substring(name.length, name.lastIndexOf('/') + 1);\n\n // Push files\n files.push(new plupload.File(currentFileId, name));\n\n // Clean-up events - they won't be needed anymore\n if (!up.features.triggerDialog) {\n plupload.removeAllEvents(form, up.id);\n } else {\n plupload.removeEvent(browseButton, 'click', up.id);\n }\n plupload.removeEvent(input, 'change', up.id);\n\n // Create and position next form\n createForm();\n\n // Fire FilesAdded event\n if (files.length) {\n uploader.trigger(\"FilesAdded\", files);\n }\n }\n }, up.id);\n\n // append to container\n form.appendChild(input);\n container.appendChild(form);\n\n up.refresh();\n }\n\n\n function createIframe() {\n var temp = document.createElement('div');\n\n // Create iframe using a temp div since IE 6 won't be able to set the name using setAttribute or iframe.name\n temp.innerHTML = '';\n iframe = temp.firstChild;\n container.appendChild(iframe);\n\n // Add IFrame onload event\n plupload.addEvent(iframe, 'load', function (e) {\n var n = e.target, el, result;\n\n // Ignore load event if there is no file\n if (!currentFile) {\n return;\n }\n\n try {\n el = n.contentWindow.document || n.contentDocument || window.frames[n.id].document;\n } catch (ex) {\n // Probably a permission denied error\n up.trigger('Error', {\n code: plupload.SECURITY_ERROR,\n message: plupload.translate('Security error.'),\n file: currentFile\n });\n\n return;\n }\n\n // Get result\n result = el.body.innerHTML;\n\n // Assume no error\n if (result) {\n currentFile.status = plupload.DONE;\n currentFile.loaded = 1025;\n currentFile.percent = 100;\n\n up.trigger('UploadProgress', currentFile);\n up.trigger('FileUploaded', currentFile, {\n response: result\n });\n }\n }, up.id);\n } // end createIframe\n\n if (up.settings.container) {\n container = getById(up.settings.container);\n if (plupload.getStyle(container, 'position') === 'static') {\n container.style.position = 'relative';\n }\n }\n\n // Upload file\n up.bind(\"UploadFile\", function (up, file) {\n var form, input;\n\n // File upload finished\n if (file.status == plupload.DONE || file.status == plupload.FAILED || up.state == plupload.STOPPED) {\n return;\n }\n\n // Get the form and input elements\n form = getById('form_' + file.id);\n input = getById('input_' + file.id);\n\n // Set input element name attribute which allows it to be submitted\n input.setAttribute('name', up.settings.file_data_name);\n\n // Store action\n form.setAttribute(\"action\", up.settings.url);\n\n // Append multipart parameters\n plupload.each(plupload.extend({ name: file.target_name || file.name }, up.settings.multipart_params), function (value, name) {\n var hidden = document.createElement('input');\n\n plupload.extend(hidden, {\n type: 'hidden',\n name: name,\n value: value\n });\n\n form.insertBefore(hidden, form.firstChild);\n });\n\n currentFile = file;\n\n // Hide the current form\n getById('form_' + currentFileId).style.top = -0xFFFFF + \"px\";\n\n form.submit();\n });\n\n\n\n up.bind('FileUploaded', function (up) {\n up.refresh(); // just to get the form back on top of browse_button\n });\n\n up.bind('StateChanged', function (up) {\n if (up.state == plupload.STARTED) {\n createIframe();\n } else if (up.state == plupload.STOPPED) {\n window.setTimeout(function () {\n plupload.removeEvent(iframe, 'load', up.id);\n if (iframe.parentNode) { // #382\n iframe.parentNode.removeChild(iframe);\n }\n }, 0);\n }\n\n plupload.each(up.files, function (file, i) {\n if (file.status === plupload.DONE || file.status === plupload.FAILED) {\n var form = getById('form_' + file.id);\n\n if (form) {\n form.parentNode.removeChild(form);\n }\n }\n });\n });\n\n // Refresh button, will reposition the input form\n up.bind(\"Refresh\", function (up) {\n var browseButton, topElement, hoverClass, activeClass, browsePos, browseSize, inputContainer, inputFile, zIndex;\n\n browseButton = getById(up.settings.browse_button);\n if (browseButton) {\n browsePos = plupload.getPos(browseButton, getById(up.settings.container));\n browseSize = plupload.getSize(browseButton);\n inputContainer = getById('form_' + currentFileId);\n inputFile = getById('input_' + currentFileId);\n\n plupload.extend(inputContainer.style, {\n top: browsePos.y + 'px',\n left: browsePos.x + 'px',\n width: browseSize.w + 'px',\n height: browseSize.h + 'px'\n });\n\n // for IE and WebKit place input element underneath the browse button and route onclick event \n // TODO: revise when browser support for this feature will change\n if (up.features.triggerDialog) {\n if (plupload.getStyle(browseButton, 'position') === 'static') {\n plupload.extend(browseButton.style, {\n position: 'relative'\n });\n }\n\n zIndex = parseInt(browseButton.style.zIndex, 10);\n\n if (isNaN(zIndex)) {\n zIndex = 0;\n }\n\n plupload.extend(browseButton.style, {\n zIndex: zIndex\n });\n\n plupload.extend(inputContainer.style, {\n zIndex: zIndex - 1\n });\n }\n\n /* Since we have to place input[type=file] on top of the browse_button for some browsers (FF, Opera),\n\t\t\t\t\t\tbrowse_button loses interactivity, here we try to neutralize this issue highlighting browse_button\n\t\t\t\t\t\twith a special class\n\t\t\t\t\t\tTODO: needs to be revised as things will change */\n hoverClass = up.settings.browse_button_hover;\n activeClass = up.settings.browse_button_active;\n topElement = up.features.triggerDialog ? browseButton : inputContainer;\n\n if (hoverClass) {\n plupload.addEvent(topElement, 'mouseover', function () {\n plupload.addClass(browseButton, hoverClass);\n }, up.id);\n plupload.addEvent(topElement, 'mouseout', function () {\n plupload.removeClass(browseButton, hoverClass);\n }, up.id);\n }\n\n if (activeClass) {\n plupload.addEvent(topElement, 'mousedown', function () {\n plupload.addClass(browseButton, activeClass);\n }, up.id);\n plupload.addEvent(document.body, 'mouseup', function () {\n plupload.removeClass(browseButton, activeClass);\n }, up.id);\n }\n }\n });\n\n // Remove files\n uploader.bind(\"FilesRemoved\", function (up, files) {\n var i, n;\n\n for (i = 0; i < files.length; i++) {\n n = getById('form_' + files[i].id);\n if (n) {\n n.parentNode.removeChild(n);\n }\n }\n });\n\n uploader.bind(\"DisableBrowse\", function (up, disabled) {\n var input = document.getElementById('input_' + currentFileId);\n if (input) {\n input.disabled = disabled;\n }\n });\n\n\n // Completely destroy the runtime\n uploader.bind(\"Destroy\", function (up) {\n var name, element, form,\n\t\t\t\t\t\telements = {\n\t\t\t\t\t\t inputContainer: 'form_' + currentFileId,\n\t\t\t\t\t\t inputFile: 'input_' + currentFileId,\n\t\t\t\t\t\t browseButton: up.settings.browse_button\n\t\t\t\t\t\t};\n\n // Unbind event handlers\n for (name in elements) {\n element = getById(elements[name]);\n if (element) {\n plupload.removeAllEvents(element, up.id);\n }\n }\n plupload.removeAllEvents(document.body, up.id);\n\n // Remove mark-up\n plupload.each(fileIds, function (id, i) {\n form = getById('form_' + id);\n if (form) {\n container.removeChild(form);\n }\n });\n\n });\n\n // Create initial form\n createForm();\n });\n\n callback({ success: true });\n }\n });\n})(window, document, plupload);"]}