
function ListSelector(element)
{var t=this,elements=element.getElementsByTagName('input'),items=new Array(),shift=new Object(),selected=t.selected=new Object(),tick={all:document.getElementById('select_all'),none:document.getElementById('select_none')},detect=function(event,target)
{if(event.keyCode==16)
{if(event.type=='keydown')shift.on=true;else if(event.type=='keyup')shift.on=false;}
if(event.type=='click')
{if(target==tick.all||target==tick.none)
{Event.preventDefault(event);selected.first=0;selected.last=elements.length-1;selected.action=(target==tick.all)?true:false;select();}
else for(var i in items)
if(target==items[i])
{if(shift.on)
{selected.old=selected.last;selected.last=i;select();}
else
{selected.first=selected.last=selected.old=i;selected.action=target.checked;}
break;}}},select=function()
{if(selected.old)
for(var i=Math.min(selected.first,selected.old),limit=Math.max(selected.first,selected.old);i<=limit;i++)
items[i].checked=(selected.action)?null:true;for(var i=Math.min(selected.first,selected.last),limit=Math.max(selected.first,selected.last);i<=limit;i++)
items[i].checked=selected.action;}
for(var i in elements)
if(elements[i].type&&elements[i].type.toLowerCase()=='checkbox')
items[items.length]=elements[i];Event.addListener(document,'keydown',detect);Event.addListener(document,'keyup',detect);Event.addListener(document,'click',detect);}