var qq=qq||{};qq.extend=function(c,a){for(var b in a)c[b]=a[b]};qq.indexOf=function(b,c,a){if(b.indexOf)return b.indexOf(c,a);a=a||0;var d=b.length;if(a<0)a+=d;for(;a<d;a++)if(a in b&&b[a]===c)return a;return -1};qq.getUniqueId=function(){var a=0;return function(){return a++}}();qq.attach=function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,false);else a.attachEvent&&a.attachEvent("on"+b,c)};qq.detach=function(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,false);else a.attachEvent&&a.detachEvent("on"+b,c)};qq.preventDefault=function(a){if(a.preventDefault)a.preventDefault();else a.returnValue=false};qq.insertBefore=function(b,a){a.parentNode.insertBefore(b,a)};qq.remove=function(a){a.parentNode.removeChild(a)};qq.contains=function(a,b){if(a==b)return true;if(a.contains)return a.contains(b);else return !!(b.compareDocumentPosition(a)&8)};qq.toElement=function(){var a=document.createElement("div");return function(c){a.innerHTML=c;var b=a.firstChild;a.removeChild(b);return b}}();qq.css=function(b,a){if(a.opacity!=null)if(typeof b.style.opacity!="string"&&typeof b.filters!="undefined")a.filter="alpha(opacity="+Math.round(100*a.opacity)+")";qq.extend(b.style,a)};qq.hasClass=function(a,b){var c=new RegExp("(^| )"+b+"( |$)");return c.test(a.className)};qq.addClass=function(a,b){if(!qq.hasClass(a,b))a.className+=" "+b};qq.removeClass=function(a,b){var c=new RegExp("(^| )"+b+"( |$)");a.className=a.className.replace(c," ").replace(/^\s+|\s+$/g,"")};qq.setText=function(a,b){a.innerText=b;a.textContent=b};qq.children=function(c){var b=[],a=c.firstChild;while(a){a.nodeType==1&&b.push(a);a=a.nextSibling}return b};qq.getByClass=function(c,d){if(c.querySelectorAll)return c.querySelectorAll("."+d);for(var e=[],b=c.getElementsByTagName("*"),f=b.length,a=0;a<f;a++)qq.hasClass(b[a],d)&&e.push(b[a]);return e};qq.obj2url=function(a,b,h){var c="undefined",e=[],f="&",g=function(a,f){var d=b?/\[\]$/.test(b)?b:b+"["+f+"]":f;d!=c&&f!=c&&e.push(typeof a==="object"?qq.obj2url(a,d,true):Object.prototype.toString.call(a)==="[object Function]"?encodeURIComponent(d)+"="+encodeURIComponent(a()):encodeURIComponent(d)+"="+encodeURIComponent(a))};if(!h&&b){f=/\?/.test(b)?/\?$/.test(b)?"":"&":"?";e.push(b);e.push(qq.obj2url(a))}else if(Object.prototype.toString.call(a)==="[object Array]"&&typeof a!=c)for(var d=0,i=a.length;d<i;++d)g(a[d],d);else if(typeof a!=c&&a!==null&&typeof a==="object")for(var d in a)g(a[d],d);else e.push(encodeURIComponent(b)+"="+encodeURIComponent(a));return e.join(f).replace(/^&/,"").replace(/%20/g,"+")};var qq=qq||{};qq.FileUploaderBasic=function(b){var a=this;a._options={debug:false,action:"/server/upload",params:{},button:null,maxConnections:3,allowedExtensions:[],sizeLimit:0,minSizeLimit:0,onSubmit:function(){},onProgress:function(){},onComplete:function(){},onCancel:function(){},onError:function(){},messages:{typeError:"{file} has invalid extension. Only {extensions} are allowed.",sizeError:"{file} is too large, maximum file size is {sizeLimit}.",minSizeError:"{file} is too small, minimum file size is {minSizeLimit}.",emptyError:"{file} is empty, please select files again without it.",onLeave:"The files are being uploaded, if you leave now the upload will be cancelled."},showMessage:function(a){this.onError(a)}};qq.extend(a._options,b);a._filesInProgress=0;a._handler=a._createUploadHandler();if(a._options.button)a._button=a._createUploadButton(a._options.button);a._preventLeaveInProgress()};qq.FileUploaderBasic.prototype={setParams:function(a){this._options.params=a},getInProgress:function(){return this._filesInProgress},_createUploadButton:function(a){var b=this;return new qq.UploadButton({element:a,multiple:this._options.multiple&&qq.UploadHandlerXhr.isSupported(),onChange:function(a){b._onInputChange(a)}})},_createUploadHandler:function(){var b=this,a=b,c;if(qq.UploadHandlerXhr.isSupported())c="UploadHandlerXhr";else c="UploadHandlerForm";var d=new qq[c]({debug:b._options.debug,action:b._options.action,maxConnections:b._options.maxConnections,onProgress:function(e,b,c,d){a._onProgress(e,b,c,d);a._options.onProgress(e,b,c,d)},onComplete:function(d,b,c){a._onComplete(d,b,c);a._options.onComplete(d,b,c)},onCancel:function(c,b){a._onCancel(c,b);a._options.onCancel(c,b)}});return d},_preventLeaveInProgress:function(){var a=this;qq.attach(window,"beforeunload",function(b){if(!a._filesInProgress)return;var b=b||window.event;b.returnValue=a._options.messages.onLeave;return a._options.messages.onLeave})},_onSubmit:function(){this._filesInProgress++},_onProgress:function(){},_onComplete:function(c,b,a){this._filesInProgress--;a.error&&this._options.showMessage(a.error)},_onCancel:function(){this._filesInProgress--},_onInputChange:function(b){var a=this;if(a._handler instanceof qq.UploadHandlerXhr)a._uploadFileList(b.files);else a._validateFile(b)&&a._uploadFile(b);a._button.reset()},_uploadFileList:function(b){for(var a=0;a<b.length;a++)if(!this._validateFile(b[a]))return;for(var a=0;a<b.length;a++)this._uploadFile(b[a])},_uploadFile:function(d){var a=this,b=a._handler.add(d),c=a._handler.getName(b),e=a._options.params;e.originalfilename=c;if(a._options.onSubmit(b,c)!==false){a._onSubmit(b,c);a._handler.upload(b,a._options.params)}},_validateFile:function(b){var e=false,a=this,c,d;if(b.value)c=b.value.replace(/.*(\/|\\)/,"");else{c=b.fileName!=null?b.fileName:b.name;d=b.fileSize!=null?b.fileSize:b.size}if(!a._isAllowedExtension(c)){a._error("typeError",c);return e}else if(d===0){a._error("emptyError",c);return e}else if(d&&a._options.sizeLimit&&d>a._options.sizeLimit){a._error("sizeError",c);return e}else if(d&&d<a._options.minSizeLimit){a._error("minSizeError",c);return e}return true},_error:function(e,d){var a=this,c=a._options.messages[e];function b(b,a){c=c.replace(b,a)}b("{file}",a._formatFileName(d));b("{extensions}",a._options.allowedExtensions.join(", "));b("{sizeLimit}",a._formatSize(a._options.sizeLimit));b("{minSizeLimit}",a._formatSize(a._options.minSizeLimit));a._options.showMessage(c)},_formatFileName:function(a){if(a.length>33)a=a.slice(0,19)+"..."+a.slice(-13);return a},_isAllowedExtension:function(c){var d=-1!==c.indexOf(".")?c.replace(/.*[.]/,"").toLowerCase():"",a=this._options.allowedExtensions;if(!a.length)return true;for(var b=0;b<a.length;b++)if(a[b].toLowerCase()==d)return true;return false},_formatSize:function(a){var b=-1;do{a=a/1024;b++}while(a>99);return Math.max(a,.1).toFixed(1)+(["kB","MB","GB","TB","PB","EB"])[b]}};qq.UploadButton=function(b){var a=this;a._options={element:null,name:"file",onChange:function(){},hoverClass:"qq-upload-button-hover",focusClass:"qq-upload-button-focus"};qq.extend(a._options,b);a._element=a._options.element;qq.css(a._element,{position:"relative",overflow:"hidden",direction:"ltr"});a._input=a._createInput()};qq.UploadButton.prototype={getInput:function(){return this._input},reset:function(){var a=this;a._input.parentNode&&qq.remove(a._input);qq.removeClass(a._element,a._options.focusClass);a._input=a._createInput()},_createInput:function(){var d="multiple",c=this,a=document.createElement("input");c._options.multiple&&a.setAttribute(d,d);a.setAttribute("type","file");a.setAttribute("name",c._options.name);qq.css(a,{position:"absolute",right:"0px",top:0,fontFamily:"Arial",fontSize:"118px",margin:0,padding:0,cursor:"pointer",opacity:0});c._element.appendChild(a);var b=c;qq.attach(a,"change",function(){b._options.onChange(a)});qq.attach(a,"mouseover",function(){qq.addClass(b._element,b._options.hoverClass)});qq.attach(a,"mouseout",function(){qq.removeClass(b._element,b._options.hoverClass)});qq.attach(a,"focus",function(){qq.addClass(b._element,b._options.focusClass)});qq.attach(a,"blur",function(){qq.removeClass(b._element,b._options.focusClass)});window.attachEvent&&a.setAttribute("tabIndex","-1");return a}};qq.UploadHandlerAbstract=function(b){var a=this;a._options={debug:false,action:"/upload.php",maxConnections:999,onProgress:function(){},onComplete:function(){},onCancel:function(){}};qq.extend(a._options,b);a._queue=[];a._params=[]};qq.UploadHandlerAbstract.prototype={log:function(a){this._options.debug&&window.console&&console.log("[uploader] "+a)},add:function(){},upload:function(b,d){var a=this,e=a._queue.push(b),c={};qq.extend(c,d);a._params[b]=c;e<=a._options.maxConnections&&a._upload(b,a._params[b])},cancel:function(a){this._cancel(a);this._dequeue(a)},cancelAll:function(){var a=this;for(var b=0;b<a._queue.length;b++)a._cancel(a._queue[b]);a._queue=[]},getName:function(){},getSize:function(){},getQueue:function(){return this._queue},_upload:function(){},_cancel:function(){},_dequeue:function(e){var a=this,d=qq.indexOf(a._queue,e);a._queue.splice(d,1);var b=a._options.maxConnections;if(a._queue.length>=b&&d<b){var c=a._queue[b-1];a._upload(c,a._params[c])}}};qq.UploadHandlerForm=function(){qq.UploadHandlerAbstract.apply(this,arguments);this._inputs={}};qq.extend(qq.UploadHandlerForm.prototype,qq.UploadHandlerAbstract.prototype);qq.extend(qq.UploadHandlerForm.prototype,{add:function(a){a.setAttribute("name","qqfile");var b="qq-upload-handler-iframe"+qq.getUniqueId();this._inputs[b]=a;a.parentNode&&qq.remove(a);return b},getName:function(a){return this._inputs[a].value.replace(/.*(\/|\\)/,"")},_cancel:function(a){this._options.onCancel(a,this.getName(a));delete this._inputs[a];var b=document.getElementById(a);if(b){b.setAttribute("src","javascript:false;");qq.remove(b)}},_upload:function(a,h){var b=this,f=b._inputs[a];if(!f)throw new Error("file with passed id was not added, or already uploaded or cancelled");var g=b.getName(a),d=b._createIframe(a),e=b._createForm(d,h);e.appendChild(f);var c=b;b._attachLoadEvent(d,function(){c.log("iframe loaded");var b=c._getIframeContentJSON(d);c._options.onComplete(a,g,b);c._dequeue(a);delete c._inputs[a];setTimeout(function(){qq.remove(d)},1)});e.submit();qq.remove(e);return a},_attachLoadEvent:function(a,b){qq.attach(a,"load",function(){if(!a.parentNode)return;if(a.contentDocument&&a.contentDocument.body&&a.contentDocument.body.innerHTML=="false")return;b()})},_getIframeContentJSON:function(c){var b=c.contentDocument?c.contentDocument:c.contentWindow.document,a;this.log("converting iframe's innerHTML to JSON");this.log("innerHTML = "+b.body.innerHTML);try{var d=b.body.innerText?b.body.innerText:b.body.textContent?b.body.textContent:b.body.innerHTML;a=eval("("+d+")")}catch(e){}if(a==null||a==undefined){a={};a.iserror=true;if(b.location.pathname.toLowerCase()=="/home/error")a.error="The file you are attempting to upload is too large.";else a.error=d;a.location=b.location}return a},_createIframe:function(b){var a=qq.toElement('<iframe src="javascript:false;" name="'+b+'" />');a.setAttribute("id",b);a.style.display="none";document.body.appendChild(a);return a},_createForm:function(c,d){var a=qq.toElement('<form method="post" enctype="multipart/form-data"></form>'),b=qq.obj2url(d,this._options.action);a.setAttribute("action",b);a.setAttribute("target",c.name);a.style.display="none";document.body.appendChild(a);return a}});qq.UploadHandlerXhr=function(){var a=this;qq.UploadHandlerAbstract.apply(a,arguments);a._files=[];a._xhrs=[];a._loaded=[]};qq.UploadHandlerXhr.isSupported=function(){var a="undefined",b=document.createElement("input");b.type="file";return "multiple" in b&&typeof File!=a&&typeof (new XMLHttpRequest).upload!=a};qq.extend(qq.UploadHandlerXhr.prototype,qq.UploadHandlerAbstract.prototype);qq.extend(qq.UploadHandlerXhr.prototype,{add:function(a){if(!(a instanceof File))throw new Error("Passed obj in not a File (in qq.UploadHandlerXhr)");return this._files.push(a)-1},getName:function(b){var a=this._files[b];return a.fileName!=null?a.fileName:a.name},getSize:function(b){var a=this._files[b];return a.fileSize!=null?a.fileSize:a.size},getLoaded:function(a){return this._loaded[a]||0},_upload:function(b,d){var c=this,h=c._files[b],e=c.getName(b),i=c.getSize(b);c._loaded[b]=0;var a=c._xhrs[b]=new XMLHttpRequest,f=c;a.upload.onprogress=function(a){if(a.lengthComputable){f._loaded[b]=a.loaded;f._options.onProgress(b,e,a.loaded,a.total)}};a.onreadystatechange=function(){a.readyState==4&&f._onComplete(b,a)};d=d||{};d["qqfile"]=e;var g=qq.obj2url(d,c._options.action);a.open("POST",g,true);a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.setRequestHeader("X-File-Name",encodeURIComponent(e));a.setRequestHeader("Content-Type","application/octet-stream");a.send(h)},_onComplete:function(b,e){var a=this;if(!a._files[b])return;var d=a.getName(b),f=a.getSize(b);a._options.onProgress(b,d,f,f);if(e.status==200){a.log("xhr - server response received");a.log("responseText = "+e.responseText);var c;try{c=eval("("+e.responseText+")")}catch(g){c={}}a._options.onComplete(b,d,c)}else a._options.onComplete(b,d,{});a._files[b]=null;a._xhrs[b]=null;a._dequeue(b)},_cancel:function(b){var a=this;a._options.onCancel(b,a.getName(b));a._files[b]=null;if(a._xhrs[b]){a._xhrs[b].abort();a._xhrs[b]=null}}});function FileUploaderObject(a){var b=this;b._element=a.element?a.element:undefined;b._oncomplete=a.oncomplete?a.oncomplete:undefined;b._onerror=a.onerror?a.onerror:undefined;b._type=a.type?a.type:undefined;b._onstart=a.onstart?a.onstart:undefined;b._allowedextensions=a.allowedextensions?a.allowedextensions:[];b._uploader=undefined;b._checkintervalid=undefined;b._isuploading=false;b._batchid=$.Guid.New();b._values={};b._checkingprogress=false;b._multiple=a.multiple?a.multiple:false}FileUploaderObject.prototype.element=function(a){if(a!=null&&a!=undefined)this._element=a;return this._element};FileUploaderObject.prototype.values=function(a){if(a!=null&&a!=undefined)this._values=a;return this._values};FileUploaderObject.prototype.checkUploadProgessComplete=function(e){var a=this;if(e.success()){var b=a._element.find(".progressbar");if(b.length>0){var d=parseInt(e.content(),10);if(d>=100){b.width(0).hide();if(a._checkintervalid!=undefined){clearInterval(a._checkintervalid);a._checkintervalid=undefined}}else{var f=b.parents(".uploadobject:first").find(".inner").width(),c=f*d/100;c>0&&b.animate({width:c+"px"})}}}a._checkingprogress=false};FileUploaderObject.prototype.checkUploadProgess=function(){var a=this;if(!a._checkingprogress){var b=a;AjaxAction.prototype.perform({action:"site/uploadprogress",values:{batchid:a._batchid},oncomplete:function(a){b.checkUploadProgessComplete.call(b,a)}});a._checkingprogress=true}};FileUploaderObject.prototype.onUploadComplete=function(f,e,c){var a=this;if(a._checkintervalid!=undefined){clearInterval(a._checkintervalid);a._checkintervalid=undefined}a._values.files=c.files;a._element.removeAttr("isuploading");var b=a._element.find(".uploadbutton");b.length>0&&b.removeAttr("disabled");b.removeClass("uploadbuttonanimation");a._element.find("div.currentaction").show();var d=a._element.find(".progressbar");d.width(0).hide();a._oncomplete&&a._oncomplete(a)};FileUploaderObject.prototype.onUploadStart=function(g,f){var c="disabled",a=this;a._values._id=g;a._values._filename=f;var e=a;a._isuploading=true;if(a._checkintervalid==undefined)a._checkintervalid=setInterval(function(){e.checkUploadProgess.call(e)},500);a._element.find("div.currentaction").hide();a._element.attr("isuploading","1");var d=a._element.find(".progressbar");d!=null&&d.show().width(0);var b=a._element.find(".uploadbutton");b.length>0&&b.attr(c,c);b.addClass("uploadbuttonanimation");a._onstart&&a._onstart(a)};FileUploaderObject.prototype.onUploadError=function(a){this._onerror&&this._onerror(this,a)};FileUploaderObject.prototype.init=function(){var a=this;if(a._element==undefined)return;var b=a;a.uploader=new qq.FileUploaderBasic({button:a._element.find(".uploadbutton").get(0),action:"/Web/Handlers/Upload.upl",allowedExtensions:a._allowedextensions,multiple:a._multiple,params:{type:a._type==undefined?"":a._type,batchid:a._batchid},onComplete:function(d,c,a){b.onUploadComplete.call(b,d,c,a)},onSubmit:function(c,a){b.onUploadStart.call(b,c,a)},onError:function(a){b.onUploadError.call(b,a)}})};function createFileUploadObjectFromElements(c,b){for(var a=0;a<c.length;a++){b.element=$(c[a]);createFileUploadObjectFromElement(b)}}function createFileUploadObjectFromElement(b){var a=new FileUploaderObject(b);a.init();return a}function createFileUploadObject(c,d,e,a){var b=$('<div class="uploadobject" id="'+d+'"><div class="inner"><div class="progressbar"></div><div class="uploadbutton"><div class="currentaction">'+e+'</div></div></div></div><div class="clr"></div>');c.append(b);if(a==undefined)a={};a.element=b;return createFileUploadObjectFromElement(a)}function filesCurrentlyUploading(){return $('*[isuploading="1"]').length}