//(c) 2009 Michael Manning (actingthemaggot.com) 
jQuery.getAttributes=function(F,C){var F=((typeof F==="string")?jQuery(F)[0]:F[0]),D=0,F=F.attributes,B=F.length,E=["abort","blur","change","click","dblclick","error","focus","keydown","keypress","keyup","load","mousedown","mousemove","mouseout","mouseover","mouseup","reset","resize","select","submit","unload"],A={};for(D;D<B;D++){if(C||!C&&jQuery.inArray(F[D].nodeName.replace(/^on/,""),E)==-1){A[F[D].nodeName]=F[D].nodeValue}}return A}

$(document).ready(function() {
  $(".dropdown dt a").live('click',function(e) {
    e.preventDefault();
    dropdown_close();
    
    var id = $(this).parents('.dropdown').attr("id");
    $("#" + id + " dd ul").toggle();
    
    
    $(this).parent().toggleClass("active");
    $(this).parents('dl').toggleClass("expanded");
    
    $("#" + id + " dd ul").css('width', $(this).parents('dl').width());
    $("#" + id + " dd ul li").css('width', $(this).parents('dl').width());
    
    $("#" + id + " dd ul li:last").addClass("last");
  });
  
  $(".dropdown").each(function(){
    var selectedValue = $(this).find("dd ul li[selected=selected]");

    if(selectedValue.length == 1) {
      $(this).find("dt a span").html(selectedValue.find('a').html());
      $("#" + $(this).attr('id') + "_input").val($(selectedValue).find(".value").text());
    }
    //$(this).find("dd ul li:last").addClass("last");
    
    // show native dropdown on ipad en iphone
    if(myBrowserChk().mobilesafari) {
      $(this).hide();
      constructNativeDropdown($(this));
    }
  });
  
  $(".dropdown dd ul li a").live('click',function(e) {
    e.preventDefault();
    
    var id = $(this).parents('.dropdown').attr("id");
    var text = $(this).html();
    $("#" + id + " dt a span").html(text);

    $("#" + id + "_input").val($(this).find(".value").html());
    
    // for sizes box
    if($(this).parent().attr('ss_available') != undefined) {
      $("#" + id + "_input").attr('ss_available', $(this).parent().attr('ss_available'));
    }
    
    // stats  hack
    if($("#" + id + "_input").attr('ss_statsvalue') != undefined) {
      $("#" + id + "_input").attr('ss_statsvalue', $(this).html().substr(0,$(this).html().indexOf('<')));
    }
    
    $("#" + id + "_input").change();
    
    dropdown_close(id);
  });

  function dropdown_close(id) { 
    if(id && id < 0) {
      $("#" + id + " dd ul").hide();
      $("#" + id + " dt").removeClass("active");
      $("#" + id).removeClass("expanded");      
    } else {
      $(".dropdown dd ul").hide();
      $(".dropdown dt").removeClass("active");
      $(".dropdown").removeClass("expanded");
    }
  }

  function getSelectedValue(id) {
    return $("#" + id).find("dt a span.value").html();
  }

  $(document).bind("click", function(e) {
    var $clicked = $(e.target);
    
    if (! $clicked.parents().hasClass("dropdown"))
        dropdown_close();
  });
});

function constructNativeDropdown(current) {
  var c=$(current);
  var cName = c.attr('id');
  
  var s='<select id="'+cName+'">';
  var opName='';
  var opVal = '';
  
  c.find('dd ul li a').each(function() {
    opName=$(this).html().substr(0,$(this).html().indexOf('<span class="value"'));
    opVal=$(this).find('span.value').text();
    
    // check attributes (eg selected)
    var attrs = $.getAttributes($(this).parent());
    var attrString = '';
    for(var attr in attrs) {
      attrString = attr + '="' + attrs[attr] + '" ';
    }
    
    s += '<option value="'+opVal+'" ' + attrString + '>' + opName + '</option>';
  });
  s+='</select>';
  
  var nativeDropdown = $(s);
  
  c.after(nativeDropdown);
  nativeDropdown.change(function() {
    var ipt = $('#'+cName + '_input');
    ipt.val($(this).val());
    
    // stats hack
    if(ipt.attr('ss_statsvalue') != undefined) {
      ipt.attr('ss_statsvalue', $(this).find(':selected').text());
    }
    
    // transport option attributes to input
    var optAttr = $.getAttributes($(this).find(':selected'));
    for(var attr in optAttr) {
      if(attr != 'value') {
        ipt.attr(attr, optAttr[attr]);
      }
    }
    
    ipt.change();
  });
  
  c.remove();
}

function refreshDropdowns() {
  $(".dropdown").each(function() {
    if(myBrowserChk().mobilesafari) {
      $(this).hide();
      constructNativeDropdown($(this));
    }
  }); 
}
