/**
 * @author boris.searles & alexander.farkas
 */

(function(){window.pf={q:function(s,c){return new pf.Q(s,c);},Q:function(s,c){this.stack=[];((typeof s=='object')?this.setArray(typeof s=='Array'?s:[s]):this.find(s,c));},extend:function(o,d){o=o||{};for(var prop in d){if(typeof o[prop]=='undefined'){o[prop]=d[prop];}}
return o;},inArray:function(a,c){var r=false;for(var i=0,len=a.length;i<len;i++){if(a===c){r=true;break;}}
return r;}};pf.Q.prototype={each:function(fn,num){if((num||num===0)&&this[num]){fn.call(this[num],num);}else{for(var i=0,len=this.length;i<len;++i){fn.call(this[i],i);}}
return this;},find:function(s,c){var htmlStack=[],o,elms,i,len,elmsLen;if(typeof c=='string'){c=document.getElementById(c);}
if(c===null){return this;}
if(!this[0]){this.setArray((c)?[c]:[document]);}
o=filter.extractSel(s);var sTag=o[0],sId=o[1],sClass=(o[2]&&o[2][0]&&o[2][0][1])?o[2][0][1]:false;len=this.length;for(i=0;i<len;i++){if(sId){elms=[this[i].getElementById(sId)];o[1]=false;}else if(sClass&&this[i].getElementsByClassName){elms=this[i].getElementsByClassName(sClass);o[2].shift();if(!o[2].length){o[2]=false;}}else{elms=this[i].getElementsByTagName(sTag);o[0]=false;}
htmlStack=filter.elements(elms,o,htmlStack);}
if(len>1){var n=[],d={};for(i=0,elmsLen=htmlStack.length;i<elmsLen;i++){if(!d[id=filter.getId(htmlStack[i])]){n.push(htmlStack[i]);d[id]=true;}}
htmlStack=n;}
return this.pushStack(htmlStack);},pushStack:function(a){this.stack.push(this.get());var nLen=a.length,oLen=this.length;for(var i=oLen-1;i>=nLen;i--){delete this[i];}
this.length=0;Array.prototype.push.apply(this,a);if(!this[0]){this.length=0;}
return this;},get:function(n){if(n||n===0){return(this[n]&&this.length>n)?this[n]:null;}
var a=[];for(var i=0,len=this.length;i<len;i++){a.push(this[i]);}
return a;},length:0,setArray:function(a){this.length=0;Array.prototype.push.apply(this,a);if(!this[0]){this.length=0;}
return this;},slice:function(){return Array.prototype.slice.apply(this,arguments);}};var Qpro=pf.Q.prototype;var pfExpando="pf"+(new Date()).getTime();pf.filter={id:0,add:function(expr,hasF){filter.exp.push(expr);filter.has.push(hasF);},exp:[/([a-z][-_a-z0-9]*)*/i,/#([a-z][-_a-z0-9]*)*/i,/\.([a-z][-_a-z0-9]*)*/gi],has:[function(elm,na){return(na=='*'||elm.tagName.toLowerCase()==na);},function(elm,ni){return(elm.getAttribute('id')==ni);},function(elm,sC){var rVal=true,eCl=elm.className,p;if(typeof sC=='string'){sC=[[null,sC]];}
for(var i=0,sClen=sC.length;i<sClen;i++){if(eCl.indexOf(sC[i][1])==-1){rVal=false;break;}else{if(pf.inArray(eCl.split(' '),sC[i][1])){rVal=false;break;}}}
return rVal;}],extractSel:function(s){if(!s){return null;}
var o=[],tmp,ex=filter.exp;o[0]=ex[0].exec(s);o[0]=o[0][1]||'*';o[1]=ex[1].exec(s);o[1]=o[1]?o[1][1]:false;for(var i=2,exLen=ex.length;i<exLen;i++){while((tmp=ex[i].exec(s))){if(tmp&&!o[i]){o[i]=[];}
o[i].push(tmp);}}
return o;},getId:function(elem){var id=elem[pfExpando];if(!id){id=elem[pfExpando]=++filter.id;}
return id;},elements:function(elms,s,a){var n=a||[],o=typeof s=='string'?filter.extractSel(s):s;for(var i=0,elmsLen=elms.length;i<elmsLen;i++){if(!o||filter.bySelector(elms[i],o)){n.push(elms[i]);}}
return n;},bySelector:function(el,o){var rVal=true;for(var i=0,len=filter.exp.length;i<len;i++){if(o[i]&&o[i]!='*'&&!filter.has[i](el,o[i])){rVal=false;break;}}
return rVal;}};var filter=pf.filter;Qpro.parent=function(s,num){var n=[],d={};this.each(function(){var elem=this.parentNode;var id=filter.getId(elem);if(elem.nodeType==1&&(this!=elem)&&!d[id]){d[id]=true;n.push(elem);}},num);if(typeof s=='string'){n=filter.elements(n,s);}
return this.pushStack(n);};var attrProps={"for":"htmlFor","class":"className",innerHTML:"innerHTML",className:"className",value:"value",disabled:"disabled",checked:"checked",readonly:"readOnly",selected:"selected",maxlength:"maxLength"};Qpro.attr=function(aV,num){if(typeof aV=='object'){this.each(function(){for(var p in aV){(attrProps[p]?this[attrProps[p]]=aV[p]:this.setAttribute(p,aV[p]));}},num);return this;}
num=num||0;if(this[num]){return attrProps[aV]?this[num][attrProps[aV]]:this[num].getAttribute(aV);}};Qpro.addClass=function(c,num){this.each(function(){if(!filter.has[2](this,c)){var oC=this.className;this.className=(oC)?oC+' '+c:c;}},num);return this;};Qpro.removeClass=function(c,num){this.each(function(){var p=new RegExp("(^|\\s)"+c+"(\\s|$)");this.className=this.className.replace(p,'');},num);return this;};Qpro.addEvent=function(t,h,num){return this.each(function(){addDeanEvent(this,t,h);},num);};Qpro.removeEvent=function(t,h,num){return this.each(function(){removeDeanEvent(this,t,h);},num);};function addDeanEvent(el,t,h){if(!h.$$guid){h.$$guid=deanEvent.guid++;}
if(!el.events){el.events={};}
var hs=el.events[t];if(!hs){hs=el.events[t]={};if(el["on"+t]){hs[0]=el["on"+t];}}
hs[h.$$guid]=h;el["on"+t]=handleEvent;}
var deanEvent={};deanEvent.guid=1;function removeDeanEvent(el,t,h){if(el.events&&el.events[t]){delete el.events[t][h.$$guid];}}
function handleEvent(e){var returnValue=true;e=e||fixE(window.event);var handlers=this.events[e.type];for(var i in handlers){this.$$handleEvent=handlers[i];if(this.$$handleEvent(e)===false){returnValue=false;}}
return returnValue;}
function fixE(e){e.preventDefault=fixE.preventDefault;e.stopPropagation=fixE.stopPropagation;return e;}
fixE.preventDefault=function(){this.returnValue=false;};fixE.stopPropagation=function(){this.cancelBubble=true;};})();

var pdDownload = {
	dependencies: {
pseudoClass: [],
prepend: ['createDom'],
remove: ['parent'],
camelize: [],
animation: ['css','height','width'],
append: ['createDom'],
toggleClass: ['addClass','removeClass'],
event: [],
attr: [],
width: ['css'],
height: ['css'],
add: [],
ajax: [],
createDom: [],
removeClass: [],
animateEasin: ['animation'],
before: ['createDom','parent'],
purge: [],
hasAttr: ['attr'],
addClass: [],
filter: [],
html: [],
css: ['dasherize','camelize'],
children_siblings: [],
parent: [],
gte: [],
is: [],
end: [],
after: ['createDom'],
dasherize: [],
lte: [],
next_prev: [],
ancestors: []
},
	init: function(){
		pf.q('input','pf-download-list').addEvent('click', pdDownload.handleClick);
	},
	handleClick: function(){
		var pelm = pf.q(this), dependsOn = pdDownload.dependencies[pelm.attr('id')];
		if(pelm.attr('checked')){
			pelm.parent('li').addClass('active');
			for(var i = 0, len = dependsOn.length; i < len; i++){
				
				var cur = pf.q('#'+dependsOn[i]);
				if (cur && cur[0]) {
					if (!cur.attr('checked')) {
						cur[0].click();
					}
				}
			}
		}else {
			pelm.parent('li').removeClass('active');
		}
	}
};
pdDownload.init();
