
var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

Function.prototype.bind = function(object) {
  var __method = this;
  return function() {
    return __method.apply(object, arguments);
  }
}

function $$() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}

var codesky={};

codesky.selects=new Array();
codesky.setSelect=function(name)
{
    for(var i=0;i<codesky.selects.length;i++)
    {
        if(codesky.selects[i].name==name)
        {
            codesky.selects[i].outdiv.style.zIndex=10;
        }else
        {
            codesky.selects[i].outdiv.style.zIndex=1;
            codesky.selects[i].optionsdiv.style.display="none";
        }
    }
}

codesky.select=Class.create();
codesky.select.prototype={

    initialize:function(name,distname,content,Optional)
    {
        this.name=name;
        this.distname=name;
        this.content=content;
        this.Optional=Optional;
		if(this.Optional.light==null){
			this.hspan='';
			this.fspan='';
			this.lightborder='1px #E2E2E2 solid';
			this.border='1px #E2E2E2 solid';
		}else{
			this.hspan='';
			this.fspan='';
			this.lightborder='1px #E2E2E2 solid';
			this.border='1px #E2E2E2 solid';
		}

        var outdiv=document.createElement("div");
		outdiv.style.position="relative";
        outdiv.style.clear="both";
        if(Optional.height!=null&&Optional.height!='')
        {
			outdiv.style.overflow="auto";
			outdiv.style.height='200px';
        }
        this.outdiv=outdiv;
        
        if(content==null)
        {
            content=[];
        }

        if(Optional!=null && (parseInt(Optional.width)+"")!="NaN")
        {
            w=parseInt(Optional.width);
        }else
        {
            w=100;
        }
        
        this.w=w;

        if(Optional!=null && (Optional.defaultvalue)!=null) 
        {
            var key=Optional.defaultvalue;
            var value='';
            for(var i=0;i<content.length;i++)
            {
                if(key==content[i][0])
                {
                    value=content[i][1];
                    break;
                }
            }
            defaultvalue=[key,value];
            
        }else
        {
            if(content.length>0)
            defaultvalue=content[0];
            else
            defaultvalue=['',''];
        }
 
        var selectDiv=document.createElement("div");
        selectDiv.className="select_input";
        if(Optional!=null && (Optional.selectImage))
        {
            selectDiv.style.backgroundImage="url("+Optional.selectImage+")";
        }
        if(Optional!=null && (Optional.fontColor))
        {
            selectDiv.style.color=Optional.fontColor;
        }
        if(Optional!=null && (Optional.backgroundColor))
        {
            selectDiv.style.backgroundColor=Optional.backgroundColor;
        }
        selectDiv.id=name+"_select";
		if(navigator.userAgent.indexOf("MSIE")<1){ 
			selectDiv.style.width=(w-5)+"px";
		}else{
			selectDiv.style.width=(w)+"px";
		}
		if(parseInt(defaultvalue[0])>0){
			selectDiv.innerHTML=this.hspan+defaultvalue[1]+this.fspan;
			selectDiv.style.border=this.lightborder;
		}else{
			selectDiv.innerHTML=""+defaultvalue[1];
			selectDiv.style.border=this.border;
		}

        var othis=this;

        selectDiv.onclick=function(evt)
        {
			if(evt!=null)event=evt;//add
            codesky.setSelect(name);
            if($$(name+"_optionsdiv").style.display=="none")
            {
                othis.clearAllSelect();
                var select=$$(othis.name).value;
                if($$(name+"_option"+"_"+select)!=null)
                {
                   $$(name+"_option"+"_"+select).className="selecton"; 
                }
                $$(name+"_optionsdiv").style.display="block";
            }else
            {
                othis.clearAllSelect();
                $$(name+"_optionsdiv").style.display="none";
            }
            event.cancelBubble=true;
        }
        outdiv.appendChild(selectDiv);
        
        
        
        var optionsdiv=document.createElement("div");
        optionsdiv.className="select_options";
        optionsdiv.style.display="none";
        optionsdiv.id=name+"_optionsdiv";
        optionsdiv.style.width=w+"px";
        if(Optional!=null && Optional.optionsHeight!=null)
        {
            optionsdiv.style.height=parseInt(Optional.optionsHeight);
        }
        outdiv.appendChild(optionsdiv);
        

        var hidden=document.createElement("input");
		hidden.name=name;
        hidden.type="hidden";
        hidden.value=defaultvalue[0];
        outdiv.appendChild(hidden);
        

        this.optionsdiv=optionsdiv;
        for(var i=0;i<content.length;i++)
        {
            this.addOption(content[i][0],content[i][1]);
        }
        
        $$(distname).appendChild(outdiv);
        

        
		if (document.all){
            document.attachEvent("onclick",function(){$$(name+"_optionsdiv").style.display="none";});
        }else{ 
			document.addEventListener("click",function(){$$(name+"_optionsdiv").style.display="none";},false);
		}

        codesky.selects[codesky.selects.length]=this;
    },

    option_on:function(evt)
    {
		if(evt!=null)event=evt;//add
        //var obj=event.srcElement;
		var obj=event.srcElement || event.target; //add
        var select=$$(this.name).value;
        var selctDiv=$$(this.name+"_option"+"_"+select);
        if(selctDiv!=null)
        {
            selctDiv.className="";
        }
        obj.className="selecton";
    },
    option_off:function(evt)
    {
		if(evt!=null)event=evt;//add
        //var obj=event.srcElement;
		var obj=event.srcElement || event.target; //add
        obj.className="";
    },
    option_click:function(evt)
    {
		  if(evt!=null)event=evt;//add

          //var obj=event.srcElement;
		  var obj=event.srcElement || event.target; //add
          var name=this.name;
          var Optional=this.Optional;
          
          
          var beginValue=$$(name).value;
          $$(name).value=obj.key;
          
		  if(obj.key!=this.content[0][0]){
			$$(name+"_select").innerHTML=this.hspan+obj.innerHTML+this.fspan;
				$$(name+"_select").style.border=this.lightborder;
		  }else{
			$$(name+"_select").innerHTML=""+obj.innerHTML;
			$$(name+"_select").style.border=this.border;
		  }

          $$(name+"_optionsdiv").style.display="none";   
            if(beginValue!=obj.key)
            {

                if(Optional!=null&&Optional.onchange!=null)
                {
                    if(typeof(Optional.onchange) == "string")
                    {
                        eval(Optional.onchange);
                    }else
                    {
                        var k=Optional.onchange.bind($$(name));
                        k(obj.key);
                    }
                }
            }
            event.cancelBubble=true;
    },
    setDefaultSelectDiv:function(key)
    {
          var divs=this.optionsdiv.childNodes;
          for(var i=0;i<divs.length;i++)
          {
               if(divs[i].key==key)
               {
                   divs[i].className="selecton"; 
               }else
               {
                   div[i].className="";
               }
          }
    },

    clearAllSelect:function()
    {
        var divs=this.optionsdiv.childNodes;
        for(var i=0;i<divs.length;i++)
         {
               divs[i].className='';
          }
    },

    addOption:function(key,value)
    {
            var t=document.createElement("div");
            t.key=key;
            t.id=this.name+"_option"+"_"+key;
            t.innerHTML=value;
            t.onmouseover=this.option_on.bind(this);
            t.onmouseout=this.option_off.bind(this);
            t.onclick=this.option_click.bind(this);
            t.style.width=(this.w-2)+"px";
            this.optionsdiv.appendChild(t);
    },
    //setselct
    setSelect:function(key)
    {
         var d=$$(this.name+"_option"+"_"+key);
         if(d!=null)
         {
            $$(this.name).value=d.key;
            $$(this.name+"_select").innerHTML=this.hspan+d.innerHTML+this.fspan;
         }
    },
    //clearAll
    clearAll:function()
    {
        $$(this.name+"_select").innerHTML='';
        $$(this.name).value='';
        this.optionsdiv.innerHTML='';
    },
    getSelectValue:function()
    {
        return  $$(this.name).value;
    }
}

