/* */
var dfPageForms = [];
function df_Init(formObj,init_click)
 {
    var selArr = []; 
    for(var i=0,il=formObj.elements.length;i<il;i++)
     {
        if(formObj.elements[i].tagName=='SELECT') selArr.push(formObj.elements[i]);
     }
    for(var j=0,jl=selArr.length;j<jl;j++)
     {
        df_initSelect(selArr[j]);
     }
    if(init_click)
     {
       attachEventListener(formObj,'click',df_FormClicker,true);
     }
    dfPageForms.push(formObj.name);
 }
function df_PageClicker(event)
 {
   var clickObj = getEventTarget(event);
   var targ=0;
   if(clickObj.tagName=='FORM' && dfPageForms.length && dfPageForms.inArray(clickObj.name) ) targ=1;
   else
    {
      var parentObj=clickObj.parentNode;
      while(parentObj.tagName!='BODY')
       {
        if(parentObj.tagName=='FORM' && dfPageForms.length && dfPageForms.inArray(parentObj.name) ) { targ=1; break; }
        parentObj=parentObj.parentNode;
       }
    }
   if(targ==0 && dfPageForms.length>0)
    {
      for(var j=0,jl=dfPageForms.length;j<jl;j++)
       {
         var formObj=document.forms[dfPageForms[j]];
         for(var i=0,il=formObj.elements.length;i<il;i++)
          {
             if(formObj.elements[i].tagName=='SELECT')
              {
                 var divList= getElementsByClass('pseudo_sel_body',formObj.elements[i].nextSibling,'DIV');
                 divList[0].style.display="none";
              }
          }
       }
    }
   else return false;
 }
function df_FormClicker(event)
 {
   var clickObj = getEventTarget(event);
   var formObj = (clickObj.tagName=="FORM")?clickObj:getParentByTagName(clickObj,"FORM");
   var targ=0;
   var re = /^pseudo_sel\s+/i;
   if(clickObj.tagName=='DIV' && clickObj.className && re.test(clickObj.className)) targ=1;
   else
    {
       var parentObj=clickObj.parentNode;
       while(parentObj.tagName!='BODY')
        {
          if(parentObj.tagName=='DIV' && parentObj.className && re.test(parentObj.className)) { targ=1; break; }
          parentObj=parentObj.parentNode;
        }
    }
   if(targ==0)
    {
      for(var i=0,il=formObj.elements.length;i<il;i++)
       {
          if(formObj.elements[i].tagName=='SELECT')
           {
              var divList= getElementsByClass('pseudo_sel_body',formObj.elements[i].nextSibling,'DIV');
              divList[0].style.display="none";
           }
       }
    }
   else return false;
 }
function df_Rebuild(formObj,selObjList)
 {
    if(selObjList==null) selObjList=[];
    if(selObjList.length>0)
     {
        for(var i=0,il=selObjList.length;i<il;i++)
         {
            elObj=formObj.elements[selObjList[i]];
            if(elObj.tagName=='SELECT') df_rebuildSelect(elObj,elObj.nextSibling.firstChild);
         }
     }
    else
     {   
        for(var i=0,il=formObj.elements.length;i<il;i++)
         {
            if(formObj.elements[i].tagName!='SELECT') continue;
            df_rebuildSelect(formObj.elements[i],formObj.elements[i].nextSibling.firstChild);
         }
     }
 }
/* */ 
function df_initSelect(selObj)
 {
    var divPObj = createHtmlElement('DIV',{"class":("pseudo_sel "+selObj.className)});
    insertAfter(selObj.parentNode,divPObj,selObj);
    var btnObj = createHtmlElement('INPUT',{"type":"button","class":selObj.className,"value":""});
    divPObj.appendChild(btnObj);
    attachEventListener(btnObj,'click',df_bntClick,true);
    var divObj = createHtmlElement('DIV',
                                   {"class":"pseudo_sel_body"},
                                   {"display":"none",
                                    "width":((selObj.clientWidth?selObj.clientWidth:selObj.offsetWidth)+'px')
                                   });
    divPObj.appendChild(divObj);
    if(selObj.options.length>0)
     {
       df_rebuildSelect(selObj,btnObj);
     }
    selObj.style.display="none";
 } 
/* */ 
function df_rebuildSelect(selObj,btnObj)
 {
    var divObj=btnObj.nextSibling;
    var str="";
    var s=selObj.multiple?1:0;
    if(s)
     {
        if(selObj.options.length>0) str+='<a '+((selObj.selectedIndex<0)?'class="selected"':'')+' href="javascript:void(0);" onClick="df_allOption(this);"><input type="checkbox" '+((selObj.selectedIndex<0)?'checked="checked"':'')+'>все</a>';
     }
    if(selObj.options.length>0)
     {
       for(var i=0,il=selObj.options.length;i<il;i++)
        {
            if(s)
             {
                str+='<a '+(selObj.options[i].selected?'class="selected"':'')+' href="javascript:void(0);" onClick="df_selOption(this);"><input type="checkbox" '+(selObj.options[i].selected?'checked="checked"':'')+' onClick="df_selOption(this);">'+selObj.options[i].text+'</a>';
             }
            else
             {
                str+='<a '+(selObj.options[i].selected?'class="selected"':'')+' href="javascript:void(0);" onClick="df_selOption(this);">'+selObj.options[i].text+'</a>';
             }
        }
     }
    divObj.innerHTML=str;
    if(selObj.options.length>0) 
     {
       btnObj.disabled=false;
       df_btnText(btnObj,selObj);
     }
    else
     {
       btnObj.disabled=true;
       btnObj.setAttribute("value","");
     }
 }
/* */
function df_btnText(btnObj,selObj)
 {
    if(selObj.options.length>0)
     {
       if(selObj.multiple)
        {
            if(selObj.selectedIndex<0) btnObj.setAttribute("value",'[все]');
            else
             {
               var strArr=[];  
               for(var i=0,il=selObj.options.length;i<il;i++)
                {
                   if(selObj.options[i].selected) strArr.push(selObj.options[i].text);
                }
               btnObj.setAttribute("value",(strArr.length>1)?('выбрано '+strArr.length+' элемента(ов)'):strArr[0]);
             }
        }
       else 
        {
          btnObj.setAttribute("value",getSelectText(selObj));
        }
       btnObj.disabled=false;
     }
    else 
     {
       btnObj.disabled=true;
       btnObj.setAttribute("value","");
     }
 }
function df_bntClick(event)
 {
    var btnObj=getEventTarget(event);
    divObj=btnObj.nextSibling;
    var d = (divObj.style.display=='none')?"":"none";
    var divList=getElementsByClass(divObj.className,getParentByTagName(btnObj,'FORM'),'DIV');
    for(var i=0,il=divList.length;i<il;i++)
     {
        if(divList[i]==divObj)
         {
            if(d=="") 
             {
               divList[i].style.width=((btnObj.clientWidth?btnObj.clientWidth:btnObj.offsetWidth)+'px');
             }
            selObj=btnObj.parentNode.previousSibling;
            divList[i].style.display=(selObj.options.length>0)?d:"none";
         }
        else if(divList[i].style.display!="none")
         {
            selObj=divList[i].previousSibling.parentNode.previousSibling;
            divList[i].style.display="none";
            if(selObj.multiple)
             {
                var on_ch=selObj.getAttribute("onchange");
                if(on_ch)
                 {
                    eval(on_ch.replace('this','selObj'));
                 }
             }
         }
     }
 }
function df_selOption(clickObj)
 {    
    switch(clickObj.tagName)
     {
        case "A":
          var aObj=clickObj;
          var inptObj=(aObj.getElementsByTagName("INPUT").length>0)?
                      aObj.getElementsByTagName("INPUT")[0]:
                      null;
          break;
        case "INPUT":
          var aObj=getParentByTagName(clickObj,"A");
          var inptObj=clickObj;
          break;           
     }
    var divObj=getParentByTagName(aObj,"DIV"); 
    var btnObj=divObj.previousSibling;
    var selObj=btnObj.parentNode.previousSibling;
    var aListObj=divObj.getElementsByTagName("A");
    for(var i=0,il=aListObj.length;i<il;i++)
     {
        if(aListObj[i]==aObj)
         {
            if(selObj.multiple)
             {
                if(inptObj.checked)
                 {
                   aObj.className='';
                   inptObj.checked=false;
                   selObj.options[i-1].selected=false;
                   selObj.options[i-1].removeAttribute('selected');
                   if(selObj.selectedIndex<0)
                    {
                       aListObj[0].className='selected';
                       aListObj[0].getElementsByTagName("INPUT")[0].checked=true;
                    }
                 }
                else
                 {
                   aObj.className='selected';
                   inptObj.checked=true;
                   selObj.options[i-1].selected=true;
                   selObj.options[i-1].setAttribute('selected','selected');
                 }
             }
            else
             {
                aObj.className='selected';
                selObj.selectedIndex=i;
                for(var j=0,jl=selObj.options.length;j<jl;j++) 
                 {
                    if(j==i) selObj.options[j].setAttribute('selected','selected');
                    else     selObj.options[j].removeAttribute('selected');
                 }
             }
            var on_ch=selObj.getAttribute("onchange");
            if(on_ch)
             {
                eval(on_ch.replace('this','selObj'));
             }
         }
        else
         {
            if(selObj.multiple)
             {
                if(i==0)
                 {
                    if(aListObj[0].className) aListObj[0].removeAttribute("class");
                    aListObj[0].getElementsByTagName("INPUT")[0].checked=false;
                 }
             }
            else
             {
                if(aListObj[i].className) aListObj[i].removeAttribute("class");
             }   
         }
     }
    df_btnText(btnObj,selObj);
    if(!selObj.multiple) divObj.style.display='none';
 } 
function df_allOption(clickObj)
 {
    switch(clickObj.tagName)
     {
        case "A":
          var aObj=clickObj;
          var inptObj=aObj.getElementsByTagName("INPUT")[0];
          break;
        case "INPUT":
          var aObj=getParentByTagName(clickObj,"A");
          var inptObj=clickObj;
          break;
     }
    var divObj=getParentByTagName(aObj,"DIV");
    var aListObj=divObj.getElementsByTagName("A");
    for(var i=0,il=aListObj.length;i<il;i++)
     {
        if(aListObj[i]==aObj)
         {
            aListObj[i].className='selected';
            aObj.getElementsByTagName("INPUT")[0].checked=true;
         }
        else
         {
            if(aListObj[i].className) aListObj[i].removeAttribute("class");
            aListObj[i].getElementsByTagName("INPUT")[0].checked=false;
         }
     }
    var btnObj =  divObj.previousSibling;
    var selObj =  btnObj.parentNode.previousSibling;
    for(var j=0,jl=selObj.options.length;j<jl;j++) 
     {
        selObj.options[j].selected=false;
        selObj.options[j].removeAttribute('selected');
     }
    divObj.style.display='none';
    df_btnText(btnObj,selObj);
    var on_ch=selObj.getAttribute("onchange");
    if(on_ch)
     {
        eval(on_ch.replace('this','selObj'));
     }
 }

