// By: Josh Hancock [wulfson(wulfden.com)]
// Original Author: Matt Kruse <matt@mattkruse.com> WWW: http://www.mattkruse.com/
function CheckBoxGroup(){this.ctr=null;this.max=null;this.maxMsg=null;this.beh="all";this.frm=null;this.cbxW=new Array();this.cbx=new Array();this.tB=0;this.tS=0}
CheckBoxGroup.prototype.setControlBox=function(x){this.ctr=x}
CheckBoxGroup.prototype.setMaxAllowed=function(num,msg){this.max=num;if(msg!=null&&msg!=""){this.maxMsg=msg}}
CheckBoxGroup.prototype.setMasterBehavior=function(b){this.beh=b.toLowerCase()}
CheckBoxGroup.prototype.addToGroup=function(){if(arguments.length>0){for(var i=0;i<arguments.length;i++){this.cbxW[this.cbxW.length]=arguments[i]}}}
CheckBoxGroup.prototype.expandWildcards=function(){if(this.frm==null){alert("ERROR: No form element has been passed.  Cannot extract form name!");return false}
for(var i=0;i<this.cbxW.length;i++){var n=this.cbxW[i];var el=this.frm[n];if(n.indexOf("*")!=-1){this.addWildcardCheckboxes(n)}
else if(this.nameIsArray(el)){this.addArrayCheckboxes(n)}
else{this.addSingleCheckbox(el)}}}
CheckBoxGroup.prototype.addWildcardCheckboxes=function(name){var i=name.indexOf("*");if((i==0)||(i==name.length-1)){searchString=(i)?name.substring(0,name.length-1):name.substring(1,name.length);for(var j=0;j<this.frm.length;j++){currentElement=this.frm.elements[j];currentElementName=currentElement.name;var partialName=(i)?currentElementName.substring(0,searchString.length):currentElementName.substring(currentElementName.length-searchString.length,currentElementName.length);if(partialName==searchString){if(this.nameIsArray(currentElement))this.addArrayCheckboxes(currentElement);else this.addSingleCheckbox(currentElement)}}}}
CheckBoxGroup.prototype.addArrayCheckboxes=function(name){if((this.nameIsArray(this.frm[name]))&&(this.frm[name].length>0)){for(var i=0;i<this.frm[name].length;i++){this.addSingleCheckbox(this.frm[name][i])}}}
CheckBoxGroup.prototype.addSingleCheckbox=function(obj){if(obj != this.ctr){this.cbx[this.cbx.length]=obj;this.tB++;if(obj.checked){this.tS++}}}
CheckBoxGroup.prototype.check=function(obj){var checked=obj.checked;if(this.cbx.length<1){this.frm=obj.form;this.expandWildcards();if(this.ctr==null||obj!=this.ctr){this.tS += (checked)?-1:1}}
if(this.ctr!=null&&obj==this.ctr){if(this.beh=="all"){for(i=0;i<this.cbx.length;i++){this.cbx[i].checked=checked}
this.tS=(checked)?this.cbx.length:0;} else{if(!checked){obj.checked=(this.tS>0)?true:false;obj.blur()}}
} else{if(this.beh=="all"){if(!checked){this.ctr.checked=false;this.tS--;} else{this.tS++}
if(this.ctr!=null){this.ctr.checked=(this.tS==this.tB)?true:false}} else{if(!obj.checked){this.tS--}
else{this.tS++}
if(this.ctr!=null){this.ctr.checked=(this.tS>0)?true:false}if(this.max!=null){if(this.tS>this.max){obj.checked=false;this.tS--;if(this.maxMsg!=null){alert(this.maxMsg)}
return false}}}}}
CheckBoxGroup.prototype.chk=function(obj){var checked=obj.checked;if(this.cbx.length<1){this.frm=obj.form;this.expandWildcards()}
if(obj==this.ctr){for(var i=0;i<this.cbx.length;i++){this.cbx[i].checked=checked}
} else{if(!checked){this.ctr.checked=false;} else{for(var i=0,b=true;i<this.cbx.length;i++){if(!this.cbx[i].checked){b=false;break}}
this.ctr.checked=b}}}
CheckBoxGroup.prototype.nameIsArray=function(obj){return ((typeof obj.type!="string")&&(obj.length>0)&&(obj[0]!=null)&&(obj[0].type=="checkbox"))}
CheckBoxGroup.prototype.addByID=function(){for(var i=0;i<arguments.length;i++)this.addSingleCheckbox(document.getElementById(arguments[i]))}