var DROP = {
  requiredAttrParams: ["btn_type" , "btn_lbl" ],

  create: function( SO , id , parentid ) {
    DROP.setElementDisplay(parentid, "none");
    var loadfn = function() {
      if (DROP.hasRequiredAttrParams(SO)) {
        DROP.init( SO, id , parentid );
      }
      DROP.setElementDisplay(parentid, "block");
    };
    DROP.addLoadEvent(loadfn);
  },

  init: function( SO , id , parentid ){

    if( !document.getElementById || !document.getElementsByTagName ) return;
    var objTarget = document.getElementById( id );
    var objParent = document.getElementById( parentid );
    if (typeof objTarget.innerHTML == "undefined" || typeof objParent.innerHTML == "undefined") return;

    var aList = objTarget.getElementsByTagName( 'a' );
    if( aList.length > 0 ){

      var strOptions = '';
      var strOutPut = '';

      if( objTarget.getElementsByTagName( 'p' )[0] ){
        strOptions += DROP.addOption( '' , objTarget.getElementsByTagName( 'p' )[0].innerHTML );
      }

      for( x=0 ; x<aList.length ; x++ ){
        strOptions += DROP.addOption( aList[x].href , aList[x].innerHTML );
      }        

      objTarget.innerHTML = '';

      strOutPut += '<form action="" method="post">\n';
      strOutPut += '<select id="' + id + '_options">\n';
      strOutPut += strOptions;
      strOutPut += '</select><br />\n';

      strOutPut += '<a href="#" title="' + SO.btn_lbl + '" class="btn btn' + SO.btn_type + '" id="' + id + '_btn" target="_blank" ><span>' + SO.btn_lbl + '</span></a>\n';
      strOutPut += '</form>\n';

      objTarget.innerHTML = strOutPut;

      button = document.getElementById( id + '_btn' );
      if( button ){
        addEvent( button , 'click' , DROP.processClick , false );
      }

      addclass( objTarget , 'selector' );
      objParent.style.overflow = 'visible';
      objParent.style.overflow = '';

    }
  },

  addOption: function( strval , strtext ){
    strTemp = '<option value="' + strval + '">' + strtext + '</option>\n';
    return strTemp;
  },

  processClick: function(e){
    var curNode = window.event ? window.event.srcElement: e ? e.target : null;
    if( curNode == null ) return;

    divBase = ascendDOM( curNode , 'div' );

    if( divBase.nodeName.toLowerCase() != 'div' || !divBase.id ) return;

    fldOptions = document.getElementById( divBase.id + '_options' );

    if( fldOptions == null ) return false;

    strSelected = fldOptions.options[fldOptions.selectedIndex].value;
    strCurPath = document.URL.substring( 0 , document.URL.lastIndexOf( '/' ) + 1 );

    strSelected = ( strSelected == '' || strSelected == strCurPath ) ? '#' : strSelected;

    curNode.href = strSelected;
    return true;
  },

  setElementDisplay: function(id, display) {
    if (!document.createElement || !document.getElementsByTagName) return;
    var DROP = "#" + id;
    var property = "display: " + display;
    var style = document.createElement("style");
    style.setAttribute("type", "text/css");
    style.setAttribute("media", "screen");
    document.getElementsByTagName("head")[0].appendChild(style);
    var agt = navigator.userAgent.toLowerCase(); 
    var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    var is_win = (agt.indexOf("win") != -1);
    if (!(is_ie && is_win)) {
      var styles = document.getElementsByTagName("style");
      if (styles && styles.length > 0 && document.createTextNode) {
        var lastStyle = styles[styles.length - 1];
        var rule = document.createTextNode(DROP + " {" + property + ";}");
        lastStyle.appendChild(rule); // Hopelessly bugs in IE/Win
      }
    }
    else if (document.styleSheets && document.styleSheets.length > 0) {
      var stylesheet = document.styleSheets[document.styleSheets.length - 1];
      if (typeof stylesheet.addRule == "object"){ // This test bugs in IE/Mac and Safari
        stylesheet.addRule(DROP, property);
      }
    }
  },

  hasRequiredAttrParams: function(SO) {
    for (var i = 0; i < DROP.requiredAttrParams.length; i++) {
      if (typeof SO[DROP.requiredAttrParams[i]] == "undefined") return false;
    }
    return true;
  },

  addLoadEvent: function(fn) {
    if (window.addEventListener) {
      window.addEventListener("load", fn, false);
    }
    else if (document.addEventListener) {
      document.addEventListener("load", fn, false);
    }
    else if (window.attachEvent) {
      window.attachEvent("onload", fn);
    }
    else if (typeof window.onload == "function") {
      var fnOld = window.onload;
      window.onload = function(){
        fnOld();
        fn();
      };
    }
    else {
      window.onload = fn;
    }
  }

};
