/*
    Chained Selects for jQuery
    Copyright (C) 2008 Ziadin Givan www.CodeAssembly.com
*/
jQuery.fn.chainSelect = function( target, value_target, url, settings ) {
  return this.each( function() {
  $(this).change( function( ) {
    settings = jQuery.extend( {
      after : null,
      before : null,
      usePost : false,
      defaultValue : null,
      parameters : {'_id' : $(this).attr('id'), '_name' : $(this).attr('name')}
        } , settings);

    settings.parameters._value =  $(this).val();

    if (settings.before != null) {
      settings.before( target );
    }

    ajaxCallback = function(data, textStatus) {
      $(target).html(""); //clear old options
      if (data) {
        data = eval(data);  //get json array
        for (i = 0; i < data.length; i++) {
          for ( key in data[i] ) {
            $(target).get(0).add(new Option(data[i][key],[key]), document.all ? i : null);
          }
        }

        if (settings.defaultValue != null) {
          $(target).val(settings.defaultValue); //select default value
        } else {
          $("option:first", target).attr( "selected", "selected" ); //select first option
        }

        if (settings.after != null) {
          settings.after(target);
        }
          //call next chain
        $(target).change();
      }
    };

    if (settings.usePost == true) {
      $.post( url, settings.parameters, ajaxCallback );
    } else {
      $.get( url, settings.parameters, ajaxCallback );
    }
    if ($(this).val() != "-1") {
      $(value_target).val($(this).val());
    }
  });
  });
};