//Комопонет-Select
//Автор: Павел Коротеев
/*
  Версия 1.0
  Скрпт посылает как GET-запросы  / POST
  -----------------------------------------------------
  10.02.07 - добавлена возможность динамичкски создавать инпут-hidden
  11.02.07 - добавлено возврат к нулевому отрезку
  11.02.07 - сохранение выбранного значения с помощью PHP
*/

var save2="";

function Select(size,background,def_color,def_text,punkt,highlight,def_punkt,input,path,form_name) {
 this.gen_id="sel_"+Math.ceil(Math.random()*325);
 this.size=size;
 this.background=background; //цвет списком выпадающих элементов
 this.default_color=def_color; //цвет селекта как общего элемента
 this.def_text=def_text; //текст выводимый по умолчанию
 this.element=""; //текущий элемент на "лету"
 this.names=""; //массив с именами для ссылок
 this.links=""; //массив с сылками
 this.punkt=punkt; //цвет элементов списка
 this.def_punkt=def_punkt; //цвет верхнего элемента по умолчанию
  this.body=0; //используется для введенияв таймаут
 this.highlight=highlight; //подсветка в ввыпадающем элементе
 this.save=0; //сохранение выбранного элемента
 this.input=input;
 this.php="";
 if (form_name) this.form=document.forms[form_name];
 this.path=path;
}

Select.prototype.exec=function() { var main_el = this.element='<div id="'+this.gen_id+'" style="position:relative;width:'+this.size+'px;background:'+this.default_color+';border:1px solid #84461D">';

 document.open();
   document.write(main_el);

    var d = this.names.split('::');


    var g = new Array();
    g[0]=this.def_text;

    for (i=0; i < d.length; i++) g[i+1]=d[i];
    this.def_text=g[0];



    var d2 = this.links.split('::');
    var p = new Array();
    p[0]="0"; for (i=0; i < d2.length; i++) p[i+1]=d2[i];
    this.save=p[0];




   document.write(
      '<span style="position:absolute;right:0px;_right:0px;width:17px;"><img id="'+this.gen_id+'_button" src="'+this.path+'arr.gif" /></span>'+
      '<div style="height:19px;padding-right:17px">'+
         '<div style="overflow:hidden;width:'+(this.size-23)+'px;height:17px;padding-left:5px;line-height:17px;color:'+this.def_punkt+';white-space:nowrap;border:1px solid #D2B17C;border-right:0">'+
         this.def_text+
         '</div>'+
     '</div>'
   );
   document.write('</div>');
   var def_id = document.getElementById(this.gen_id);
   if (this.php !="" && this.php != 'undefined') var input = def_id.innerHTML+='<input name="'+this.input+'"  type="hidden" value="'+this.php+'">';
   else var input = def_id.innerHTML+='<input name="'+this.input+'" id="'+this.gen_id+'_hide"  type="hidden" value="'+p[this.save]+'">';
   document.close();

 var v =this;
  function show_me() {
  var hide_elem = document.getElementById(v.gen_id+'_show');
     var this_elem = document.getElementById(v.gen_id);
     if (hide_elem) {
        hide_elem.style.left=this_elem.offsetLeft+'px';
        hide_elem.style.top=this_elem.offsetTop+this_elem.offsetHeight+'px';

        hide_elem.style.display='block';
        hide_elem.style.borderTop="0px";
        hide_elem.style.width=v.size+'px';
     }
    document.images[v.gen_id+'_button'].src=v.path+"arr2.gif";
 }

var get_id=document.getElementById(this.gen_id);
get_id.onclick=show_me;
this.genSelect();
}


//сохранение значений
Select.prototype.cats=function() {  var d = this.names.split('::'); var g = new Array();
  g[0]=this.def_text;  for (i=0; i < d.length; i++) g[i+1]=d[i];
  var d2 = this.links.split('::'); var p = new Array();
  p[0]=0;  for (i=0; i < d2.length; i++) p[i+1]=d2[i];

  this.save=save2;
  var def_id = document.getElementById(this.gen_id);
  var def_text = document.getElementById(this.gen_id).innerHTML.replace(/(<[^>]*>)|(<\/[^>]*>)/gi,'').replace(/^\s*|\s*$/gim,'');
  def_id.innerHTML=def_id.innerHTML.replace(def_text,g[this.save]);

  var input = def_id.innerHTML+='<input name="'+this.input+'" id="'+this.gen_id+'_hide"  type="hidden" value="'+p[this.save]+'">';
  if (this.form) this.form.submit();
  this.hide();
}


//Формирует отдельный div
Select.prototype.genSelect=function() {
  var id =document.getElementById(this.gen_id+'_button');
  var obj=this;
  document.open();
  document.write('<div id="'+this.gen_id+'_show" style="position:absolute;display:none;border:1px solid #6D4716;border-bottom:0">');
  var d = this.names.split('::');
  var g = new Array();
  g[0]=this.def_text;  for (i=0; i < d.length; i++) g[i+1]=d[i];
  var d2 = this.links.split('::');
  var p = new Array();
  p[0]=this.save;  for (i=0; i < d2.length; i++) p[i+1]=d2[i];

 if (this.php) {
   var def_id = document.getElementById(this.gen_id);
   var def_text = document.getElementById(this.gen_id).innerHTML.replace(/(<[^>]*>)|(<\/[^>]*>)/gi,'').replace(/^\s*|\s*$/gim,'');
   for (x=0; x < p.length; x++) if (this.php==p[x]) def_id.innerHTML=def_id.innerHTML.replace(def_text,g[x]);
 }


  if (this.save==0) {   document.write('<div id="'+this.gen_id+'_spisok'+(0)+'"' +
   'onclick="save2=\''+(0)+'\'"'+
   ' style="color:'+this.punkt+';cursor:pointer;width:'+(this.size-7)+'px;padding:3px 0 3px 7px;border-bottom:1px solid #804F0F;background:'+
   '#DFC5A7'+';">'+ this.def_text+
    '</div>');
  }

  for (i=0; i <p.length; i++) {
   if (this.save != i && g[i]) {
       document.write('<div id="'+this.gen_id+'_spisok'+(i)+'" onmouseover="this.style.backgroundColor=\''+this.highlight+'\'" onmouseout="this.style.backgroundColor=\''+this.background+'\'"' +
       'onclick="save2=\''+(i)+'\'"'+
       ' style="color:'+this.punkt+';cursor:pointer;width:'+(this.size-7)+'px;padding:3px 0 3px 7px; border-bottom:1px solid #804F0F;background:'+
       this.background+'">'+g[i]+
       '</div>');
    }
  }
  document.write('</div>');
  document.close();
}

Select.prototype.hide=function(v) {
   if (document.getElementById(this.gen_id+'_show')) {   	 document.getElementById(this.gen_id+'_show').style.display="none";
   	 document.images[this.gen_id+'_button'].src=this.path+"arr.gif";
   	 var d = this.names.split('::');
     var g = new Array();
     g[0]=this.def_text;  for (i=0; i < d.length; i++) g[i+1]=d[i];
   	 for (i=0; i <g.length; i++) if (i!=0) {document.getElementById(this.gen_id+'_spisok'+i).style.backgroundColor=this.background;}   }
}

Select.prototype.unhide=function() {
    var v = this; function get_new() {v.hide(v)}
    this.body=setTimeout(get_new,200);
}

Select.prototype.handlers=function() {
  this.exec();
  var obj=this;
  var id_top = document.getElementById(this.gen_id);
  var id_select = document.getElementById(this.gen_id+'_show');
  id_top.onmouseover=function() {clearTimeout(obj.body)}
  id_top.onmouseout=function() {obj.unhide()}
  id_select.onmouseover=function() {clearTimeout(obj.body)}
  id_select.onmouseout=function() {obj.unhide()}
  id_select.onclick=function() {obj.cats()}
}

