﻿/* Theme Pack 3.1.1+ DO NOT modify */
CS.v3.Components.ListBuilder = function(el,options) {new CS.v3.Config.ListBuilder(el,options); };
CS.v3.Config.ListBuilder = Class.create(CS.v3.Base.prototype, {
	initialize: function(el,options){
		this.allBuilders = $(el).select("div[class*='csListBuilder']");
		//this.bind();
		if (options.bind == 'true') {this.bind(); }
	},
	bind: function(){
		var ar = this.allBuilders;
		if(ar){
			var i = ar.length;
			var el;
			while(i--){
				el = ar[i];
				CS.v3.ListBuilder.addDecoration(el);
			}
		}
	}
});
CS.v3.ListBuilder = {
	addDecoration: function(el){
		//ADD
		var buttonAdd = el.select("button.csButtonAdd");
		var btnAddId = '';
		var i = buttonAdd.length;
		var obj;
		var frm;
		while(i--){
			obj = buttonAdd[i];
			btnAddId = this.decorateButton(obj);
			Event.observe(obj,'click', function(event){ CS.v3.ListBuilder.addButtonClickEv(event); });
			frm = CS.v3.getParentElement(obj,'FORM');//obj.up('FORM');
			if(frm){
				Event.observe(frm,'submit', function(event){ CS.v3.ListBuilder.formSubmitEv(event); });
			}
		}
		//REMOVE
		var buttonRemove = el.select("button.csButtonRemove");
		var btnRemoveId = '';
		var i2 = buttonRemove.length;
		while(i2--){
			obj = buttonRemove[i2];
			btnRemoveId = this.decorateButton(obj);
			Event.observe(obj,'click', function(event){ CS.v3.ListBuilder.removeButtonClickEv(event); });
		}
		//CHECKBOXES
		var checkboxes = this.findCheckboxes(el);
		if(checkboxes){
			var x = checkboxes[0];
			var divBuilder = this.findParentDiv(x);
			var isCopy = this.isCopyItems(divBuilder);
			var isRemove = !isCopy
			var i3 = checkboxes.length;
			while(i3--){
				obj = checkboxes[i3];
				this.decorateCheckbox(obj,btnAddId,btnRemoveId,isRemove);
				Event.observe(obj,'click', function(event){ CS.v3.ListBuilder.checkboxClickEv(event); });
			}
			this.removeDupesOnLeftAfterLoad(x);
		}
	},
	decorateButton: function(el){
		CS.v3.I18N.updateAttribute(el,'TYPE','button'); // force to use JS! (should they build no-js version);
		var rc = '';
		var btnId = el.readAttribute('id');
		if(btnId){
			rc = btnId;
		} else {
			var btnName = el.readAttribute('name');
			CS.v3.I18N.updateAttribute(el,'id',btnName);
			rc = btnName;
		}
		return rc;
	},
	decorateCheckbox: function(el,btnAddId,btnRemoveId,isRemove){
		var b = this.isToggleAll(el);
		if(!b){
			var nam = el.readAttribute('name');
			var id = el.readAttribute('id');
			if(nam){
				this.setCustomAttributeCheckName(el,nam);
				CS.v3.I18N.updateAttribute(el,'name','');
			}
			if(id){
				this.setCustomAttributeCheckId(el,id);
				CS.v3.I18N.updateAttribute(el,'id','');
			}
			var section = this.findLeftColumnSection(el);
			this.setCustomAttributeCheckSection(el,section);
			this.setCustomAttributeAddButton(el,btnAddId);
			this.setCustomAttributeRemoveButton(el,btnRemoveId);
			var isChecked = CS.v3.I18N.isChecked(el);
			if(isChecked){
				var divBuilder = this.findParentDiv(el);
				var myCol = this.findCol1(divBuilder);
				var otherCol = this.findCol2(divBuilder);
				var isCopy = this.isCopyItems(divBuilder);
				this.moveItem(el,myCol,otherCol,isCopy,isRemove);
			}
		}
	},
	removeDupesOnLeftAfterLoad: function(el){
		try{
			var divBuilder = this.findParentDiv(el);
			var isCopy = this.isCopyItems(divBuilder);
			if(isCopy){
				var leftCol = this.findCol1(divBuilder);
				var ar = this.findCheckboxes(leftCol);
				if(ar){
					var myar = new Array();
					var i = ar.length;
					var obj;
					var nam;
					var j;
					var b;
					var dupe;
					while(i--){
						obj = ar[i];
						b = this.isToggleAll(obj);
						if(!b){
							//nam = this.getCustomAttributeCheckName(obj);
							nam = this.getCheckboxValue(obj);
							j = myar.length;
							dupe = false;
							while(j--){
								if(nam == myar[j]){
									dupe=true;
								}
							}
							if(dupe){
								var liup = CS.v3.getParentElement(obj,'LI');//obj.up('LI');
								liup.remove();
							} else {
								myar.push(nam);
							}
						}
					}
				}
			}
		}
		catch(e){
			this.log('removeDupesOnLeftAfterLoad:e=' + e);
		}
	},
	findLeftColumnSection: function(el){
		var rc = this.getSectionTitle(el);
		return rc;
	},
	updateOtherColumnSection: function(el,section,elToColumn,liHtml,isCopy,isRemove){
		var rc = null;
		var isFound = false;
		try{
			var divTree = CS.v3.down(elToColumn,'DIV.csTree');
			var ulHeader = CS.v3.down(divTree,'UL');
			if(ulHeader){
				var ar = ulHeader.select('A.csNavToggle');
				if(ar){
					var i = ar.length;
					var obj;
					var str;
					while(i--){
						//try{
							obj = ar[i];
							str = obj.innerHTML;
							if(str==section){
								isFound = true;
								rc = obj;
								break;
							}
						//}
						//catch(e){
						//	this.log('updateOtherColumnSection(inside):e=' + e);
						//}
					}
					var bsection = CS.v3.I18N.isEmpty(section);
					if(bsection){
						ulHeader.insert({bottom:'<li class=\"csNavItem-0\">' + liHtml + '</li>'});
					} else {
						if(isCopy){
							if(isFound){
								var liToggle = CS.v3.up(rc,'LI.csNavToggle-0');
								var divContent = CS.v3.down(liToggle,'DIV.csNavContent');
								var ulContent = CS.v3.down(divContent,'UL');
								ulContent.insert({bottom:'<li class=\"csNavItem-0\">' + liHtml + '</li>'});
							} else {
								if(!isRemove){
									ulHeader.insert({bottom:'<li class=\"csNavToggle-0\"><div class=\"csNavWrap\"><a href=\"#\" class=\"csNavToggle\">' + section +'</a></div><div class=\"csNavContent\"><ul><li class=\"csNavItem-0\">' + liHtml + '</li></ul></div>'});
								}
							}
						} else {
							// move
							if(isFound){
								var liToggle = CS.v3.up(rc,'LI.csNavToggle-0');
								var divContent = CS.v3.down(liToggle,'DIV.csNavContent');
								var ulContent = CS.v3.down(divContent,'UL');
								ulContent.insert({bottom:'<li class=\"csNavItem-0\">' + liHtml + '</li>'});
							} else {
								if(!isRemove){
									ulHeader.insert({bottom:'<li class=\"csNavToggle-0\"><div class=\"csNavWrap\"><a href=\"#\" class=\"csNavToggle\">' + section +'</a></div><div class=\"csNavContent\"><ul><li class=\"csNavItem-0\">' + liHtml + '</li></ul></div>'});
								} else {
									ulHeader.insert({bottom:'<li class=\"csNavToggle-0\"><div class=\"csNavWrap\"><a href=\"#\" class=\"csNavToggle\">' + section +'</a></div><div class=\"csNavContent\"><ul><li class=\"csNavItem-0\">' + liHtml + '</li></ul></div>'});
								}
							}
						}// if iscopy
					}//if bsection
				}//if ar
			}//if ulHeader
		}
		catch(e){
			this.log('updateOtherSection(outside):e=' + e);
		}
		return rc;
	},
	getDisabledVal: function(el){
		var rc = false;
		if(el){
			rc = el.disabled;
		}
		return rc;
	},
	buttonClickEv: function(el,myCol,otherCol,isCopy,isRemove){
		if(el){
			var ar = this.findCheckboxes(myCol);
			if(ar){
				var i = ar.length;
				var obj;
				var isChecked;
				while(i--){
					obj = ar[i];
					isChecked = CS.v3.I18N.isChecked(obj);
					if(isChecked){
						this.moveItem(obj,myCol,otherCol,isCopy,isRemove);
					}
				}
			}
		}
	},
	isCopyItems: function(el){
		var rc = false;
		if(el){
			rc = el.hasClassName('copy');
		}
		return rc;
	},
	findCheckboxes: function(el){
		var rc;
		if(el){
			rc = el.select("input[type=checkbox]");
		}
		return rc;
	},
	findParentDiv: function(el){
		var rc;
		if(el){
			rc = CS.v3.up(el,'DIV.csListBuilder');
		}
		return rc;
	},
	findCol1: function(el){
		var rc;
		if(el){
			rc = CS.v3.down(el,'DIV.csCol-1');
		}
		return rc;
	},
	findCol2: function(el){
		var rc;
		if(el){
			rc = CS.v3.down(el,'DIV.csCol-3');
			if(!rc){
				rc = CS.v3.down(el,'DIV.csCol-2');
			}
		}
		
		return rc;
	},
	addButtonClickEv: function(event){
		var el = $(Event.element(event));
		var divBuilder = this.findParentDiv(el);
		var myCol = this.findCol1(divBuilder);
		var otherCol = this.findCol2(divBuilder);
		var isCopy = this.isCopyItems(divBuilder);
		var isRemove = false;
		this.buttonClickEv(el,myCol,otherCol,isCopy,isRemove);
		//event.preventDefault();
	},
	removeButtonClickEv: function(event){
		var el = $(Event.element(event));
		var divBuilder = this.findParentDiv(el);
		var myCol = this.findCol2(divBuilder);
		var otherCol = this.findCol1(divBuilder);
		var isCopy = this.isCopyItems(divBuilder);//false; // remove is always a MOVE
		var isRemove = true;
		this.buttonClickEv(el,myCol,otherCol,isCopy,isRemove);
		//event.preventDefault();
	},
	formSubmitEv: function(event){
		var el = $(Event.element(event));
		var divBuilder = this.findParentDiv(el);
		if(!divBuilder){
			divBuilder = CS.v3.down(el,'DIV.csListBuilder');
		}
		var myCol = this.findCol2(divBuilder);
		var ar = this.findCheckboxes(myCol);
		if(ar){
			var i = ar.length;
			var obj;
			var nam;
			while(i--){
				obj = ar[i];
				nam = this.getCustomAttributeCheckName(obj);
				CS.v3.I18N.updateAttribute(obj,'name',nam);
			}
		}
	},
	checkboxClickEv: function(event){
		var el = $(Event.element(event));
		if(el){
			var b = this.isToggleAll(el);
			if(b){
				var isChecked = CS.v3.I18N.isChecked(el);
				this.toggleAllCheckboxes(el,isChecked);
			}
		}
		//event.preventDefault();
	},
	isToggleAll: function(el){
		var rc=false;
		if(el){
			rc = el.hasClassName('csCheckAll');
		}
		return rc;
	},
	toggleAllCheckboxes: function(el,isChecked){
		var wrapCol = CS.v3.getParentElement(el,'DIV');//el.up('DIV');
		var myCol = CS.v3.getParentElement(wrapCol,'DIV');//wrapCol.up('DIV');
		if(!myCol){
			myCol = CS.v3.getParentElement(el,'DIV');//el.up('DIV'); // safety for cases without the SelectAll
		}
		
		var ar = this.findCheckboxes(myCol);
		if(ar){
			var i=ar.length;
			var b;
			var obj;
			while(i--){
				obj = ar[i];
				b = this.isToggleAll(obj);
				if(!b){
					this.setCheckboxValue(obj,isChecked);
				}
			}
		}
	},
	getSectionTitle: function(el){
		var rc = '';
		if(el){
			//try{
				var divContent = CS.v3.up(el,'DIV.csNavContent');
				if(divContent){
					var liToggle = CS.v3.up(divContent,'LI.csNavToggle-0');
					var divSection = CS.v3.down(liToggle,'DIV.csNavWrap');
					var divToggle = CS.v3.down(divSection,'A.csNavToggle');
					if(divToggle){
						var sectionTitle = divToggle.innerHTML;
						rc = sectionTitle.escapeHTML();// helps with GT/LT and such!
					}
				}
			//}
			//catch(e){
			//	this.log('getSectionTitle:e=' + e);
			//}
		}
		return rc;
	},
	moveItem: function(elCheck,myCol,otherCol,isCopy,isRemove){
		var isHideLI = false;
		var isHideUL = false;
		try{
			var isDisabled = this.getDisabledVal(elCheck);
			if(!isDisabled){
				var elLi = CS.v3.up(elCheck,'LI.csNavItem-0');
				if(elLi){
					var liHtml = elLi.innerHTML;
					if(isHideLI){
						elLi.addClassName('csHide');
					} else {
						var elUl = CS.v3.getParentElement(elLi,'UL');//elLi.up('UL');
						if(isCopy && !isRemove){
						} else {
							elLi.remove();
						}
						if(isHideUL){
							elUl.addClassName('csHide');
						} else {
							var ar = elUl.select('LI');
							if(ar){
								var len = ar.length;
								if(len==0){
									var liup = CS.v3.getParentElement(elUl,'LI');
									elUl.remove();
									if(liup){
										var ar2 = liup.select('DIV');
										var divs = ar2.length;
										if(divs>=2){
											liup.remove();
										}
									}
								}
							}
						}
					}
					var section = this.getCustomAttributeCheckSection(elCheck,'');
					var dummy;
					if(isCopy){
						if(isRemove){
						} else {
							dummy = this.updateOtherColumnSection(elCheck,section,otherCol,liHtml,isCopy,isRemove);
						}
					} else {
						if(isRemove){
							dummy = this.updateOtherColumnSection(elCheck,section,otherCol,liHtml,isCopy,isRemove);
						} else {
							dummy = this.updateOtherColumnSection(elCheck,section,otherCol,liHtml,isCopy,isRemove);
						}
					}
				}
			}
		}
		catch(e){
			this.log('moveItem:e=' + e);
		}
	},
	getCheckboxValue: function(el){
		var rc;
		if(el){
			rc = el.readAttribute('value');
		}
		return rc;
	},
	setCheckboxValue: function(el,b){
		if(el){
			if(b){
				el.checked = true;
			} else {
				el.checked = false;
			}
		}
	},
	getCustomAttributeAddButton: function(el,def){
		var rc = CS.v3.I18N.getDataAttribute(el,'data-csAddListButton',def);// HTML5 
		return rc;
	},
	setCustomAttributeAddButton: function(el,val){
		CS.v3.I18N.setDataAttribute(el,'data-csAddListButton',val);// HTML5
	},
	getCustomAttributeRemoveButton: function(el,def){
		var rc = CS.v3.I18N.getDataAttribute(el,'data-csRemoveListButton',def);// HTML5 
		return rc;
	},
	setCustomAttributeRemoveButton: function(el,val){
		CS.v3.I18N.setDataAttribute(el,'data-csRemoveListButton',val);// HTML5
	},
	getCustomAttributeCheckId: function(el,def){
		var rc = CS.v3.I18N.getDataAttribute(el,'data-csAddListId',def);// HTML5 
		return rc;
	},
	setCustomAttributeCheckId: function(el,val){
		CS.v3.I18N.setDataAttribute(el,'data-csAddListId',val);// HTML5
	},
	getCustomAttributeCheckName: function(el,def){
		var rc = CS.v3.I18N.getDataAttribute(el,'data-csAddListName',def);// HTML5 
		return rc;
	},
	setCustomAttributeCheckName: function(el,val){
		CS.v3.I18N.setDataAttribute(el,'data-csAddListName',val);// HTML5
	},
	getCustomAttributeCheckSection: function(el,def){
		var rc = CS.v3.I18N.getDataAttribute(el,'data-csAddListSection',def);// HTML5 
		return rc;
	},
	setCustomAttributeCheckSection: function(el,val){
		CS.v3.I18N.setDataAttribute(el,'data-csAddListSection',val);// HTML5
	},
	log: function (s) {
		CS.v3.Logger.log("ListBuilder:" + s);
	}
};
