/*
 coded by Kae - kae@verens.com
 I'd appreciate any feedback.
 You have the right to include this in your sites.
 Please retain this notice.
*/

var isIE=window.attachEvent?true:false;
var selectDefaults=[];
function addEvent(el,ev,fn){
 if(isIE)el.attachEvent('on'+ev,fn);
 else if(el.addEventListener)el.addEventListener(ev,fn,false);
}

addEvent(window,'load',buildMultiselects);

function newLink(href,text){var e=document.createElement('a');e.href=href;e.appendChild(document.createTextNode(text));return e;}

function buildMultiselects(){
 do{
  found=0;
  a=document.getElementsByTagName('select');
  for(b=0;b<a.length,!found;b++){
   var ms=a[b];
   if(ms==null)break;
   var name=ms.name.substring(0,ms.name.length-2);
   if(ms.name.substring(ms.name.length-2,ms.name.length)=='[]'){
    selectDefaults[name]=[];
    found=1;
    disabled=(ms.disabled)?1:0;
    width=ms.offsetWidth;
    height=ms.offsetHeight;

   if(width<120)width=120;
   if(height<60)height=60;

   var wrapper=document.createElement('div');
   wrapper.style.width=width+"px";
   wrapper.style.height=height+"px";
   wrapper.style.position='relative';
   wrapper.style.border="2px solid #000";
   wrapper.style.borderColor="#333 #ccc #ccc #333";
   wrapper.style.font="10px sans-serif";
   wrapper.appendChild(newLink("javascript:"+(disabled?"alert('selection disabled')":"multiselect_selectall('"+name+"','checked');"),'all'));
   wrapper.appendChild(document.createTextNode(', '));
   wrapper.appendChild(newLink("javascript:"+(disabled?"alert('selection disabled')":"multiselect_selectall('"+name+"','');"),'none'));
   wrapper.appendChild(document.createTextNode(', '));
   wrapper.appendChild(newLink("javascript:"+(disabled?"alert('selection disabled')":"multiselect_selectall('"+name+"','reset');"),'reset'));

    el=document.createElement('div');
    el.style.position='absolute';
    el.style.top='15px';
    el.style.left='0';
    el.style.overflow='auto';
    el.style.width=(isIE?width-4:width)+"px";
    el.style.height=height-(isIE?19:15)+"px";
    c=ms.getElementsByTagName('option');
    for(d=0;d<c.length;d++){
     el2=document.createElement('label');
     el2.style.display="block";
     el2.style.border="1px solid #eee";
     el2.style.borderWidth="1px 0";
     el2.style.font="10px arial";
     el2.style.lineHeight="10px";
     el2.style.paddingLeft="20px";
     el3=document.createElement('input');
     el3.type="checkbox";
     if(c[d].selected){
      el3.checked="checked";
      el3.defaultChecked=true;
     }
     selectDefaults[name][d]=c[d].selected?'checked':'';
     if(disabled)el3.disabled="disabled";
     el3.value=c[d].value;
     el3.style.marginLeft="-16px";
     el3.style.marginTop="-2px";
     el3.name=ms.name;

     // escape the label
     var text=c[d].innerHTML;
     text=text.replace(/\&nbsp;?/g,' ');
     text=text.replace(/\&lt;?/g,'<');
     text=text.replace(/\&gt;?/g,'>');

     el4=document.createTextNode(text);
     el2.appendChild(el3);
     el2.appendChild(el4);
     el.appendChild(el2);
    }
   wrapper.appendChild(el);
   ms.parentNode.insertBefore(wrapper,ms);
   ms.parentNode.removeChild(ms);
   }
  }
 }while(found);
}


function multiselect_selectall(name,val){
 var els=document.getElementsByTagName('input'),found=0;
 for(var i=0;i<els.length;++i){
  if(els[i].name==name+'[]')els[i].checked=val=='reset'?selectDefaults[name][found++]:val;
 }
}
