﻿
﻿var QHC=window.QHC||{};Function.prototype.method=function(name,fn){this.prototype[name]=fn;return this;};if(!Array.prototype.forEach){Array.method('forEach',function(fn,thisObj){var scope=thisObj||window;for(var i=0,len=this.length;i<len;++i){fn.call(scope,this[i],i,this);}});}
if(!Array.prototype.filter){Array.method('filter',function(fn,thisObj){var scope=thisObj||window;var a=[];for(var i=0,len=this.length;i<len;++i){if(!fn.call(scope,this[i],i,this)){continue;}
a.push(this[i]);}
return a;});}
(function(QHC){QHC.utils=(function(){return{addEvent:function(el,type,fn){if(window.addEventListener){el.addEventListener(type,fn,false);}
else if(window.attachEvent){el.attachEvent('on'+type,fn);}
else{el['on'+type]=fn;}},stopPropagation:function(e){if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}},preventDefault:function(e){if(e.preventDefault){e.preventDefault();}else{e.returnValue=false;}},stopEvent:function(e){QHC.utils.stopPropagation(e);QHC.utils.preventDefault(e);},substitute:function(s,o){return s.replace(/{([^{}]*)}/g,function(a,b){var r=o[b];return typeof r==='string'||typeof r==='number'?r:a;});},asyncRequest:(function(){function _handleReadyState(o,callback){var poll=window.setInterval(function(){if(o&&o.readyState==4){window.clearInterval(poll);if(callback){callback(o);};};},50);};var _getXHR=function(){var http;try{http=new XMLHttpRequest;getXHR=function(){return new XMLHttpRequest;};}
catch(e){var msxml=['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];for(var i=0,len=msxml.length;i<len;++i){try{http=new ActiveXObject(msxml[i]);getXHR=function(){return new ActiveXObject(msxml[i]);};break;}
catch(e){}}}
return http;};return function(method,uri,callback,postData){var http=_getXHR();http.open(method,uri,true);_handleReadyState(http,callback);http.send(postData||null);return http;};})(),addClass:function(el,className){if(!this.hasClass(el,className)){return el.className=el.className!=''?el.className+=' '+className:className;}},removeClass:function(el,className){var re=new RegExp('(^|\\s)'+className,'g');return el.className=el.className.replace(re,function(a,b){return'';});},hasClass:function(el,className){return el.className&&el.className.indexOf(className)!=-1;},getElementsByClass:function(node,className,tag){var classElements=new Array();var els=node.getElementsByTagName(tag||'*');var elsLen=els.length;var pattern=new RegExp("(^|\\s)"+className+"(\\s|$)");for(i=0,j=0;i<elsLen;i++){if(pattern.test(els[i].className)){classElements[j]=els[i];j++;}}
return classElements;},augment:function(receivingClass,givingClass){if(arguments[2]){for(var i=2,len=arguments.length;i<len;i++){receivingClass.prototype[arguments[i]]=givingClass.prototype[arguments[i]];}}
else{for(methodName in givingClass.prototype){if(!receivingClass.prototype[methodName]){receivingClass.prototype[methodName]=givingClass.prototype[methodName];}}}}}})();QHC.utils.Observer=function(){this.fns=[];}
QHC.utils.Observer.prototype={subscribe:function(fn){this.fns.push(fn);},unsubscribe:function(fn){this.fns=this.fns.filter(function(el){if(el!==fn){return el;}});},fire:function(o){this.fns.forEach(function(el){el(o);});}};QHC.Queue=function(){this.queue=[];this.onComplete=new QHC.utils.Observer;this.onFailure=new QHC.utils.Observer;this.onFlush=new QHC.utils.Observer;this.retryCount=3;this.currentRetry=0;this.paused=false;this.timeout=5000;this.conn={};this.timer={};};QHC.Queue.method('flush',function(){if(!this.queue.length>0){return;}
if(this.paused){this.paused=false;return;}
var that=this;this.currentRetry++;var abort=function(){that.conn.abort();if(that.currentRetry==that.retryCount){that.onFailure.fire();that.currentRetry=0;}else{that.flush();}};this.timer=window.setTimeout(abort,this.timeout);var callback=function(o){window.clearTimeout(that.timer);that.currentRetry=0;that.queue.shift();that.onFlush.fire(o.responseText);if(that.queue.length==0){that.onComplete.fire();return;}
that.flush();};this.conn=QHC.utils.asyncRequest(this.queue[0]['method'],this.queue[0]['uri'],callback,this.queue[0]['params']);}).method('setRetryCount',function(count){this.retryCount=count;}).method('setTimeout',function(time){this.timeout=time;}).method('add',function(o){this.queue.push(o);}).method('pause',function(){this.paused=true;}).method('dequeue',function(){this.queue.pop();}).method('clear',function(){this.queue=[];});QHC.utils.browser=(function(){return{getViewport:function(){var w,h;if(typeof window.innerWidth!='undefined'){w=window.innerWidth,h=window.innerHeight}
else if(typeof document.documentElement!='undefined'&&typeof document.documentElement.clientWidth!='undefined'&&document.documentElement.clientWidth!=0){w=document.documentElement.clientWidth,h=document.documentElement.clientHeight}
else{w=document.getElementsByTagName('body')[0].clientWidth,h=document.getElementsByTagName('body')[0].clientHeight}
return[w,h];},scrollY:function(){var de=document.documentElement;return self.pageYOffset||(de&&de.scrollTop)||document.body.scrollTop;},ie6:function(){return window.navigator.appName.toLowerCase().indexOf('explorer')!==-1&&window.navigator.appVersion.toLowerCase().indexOf('msie 6')!==-1;}}})();})(QHC);
