

jQuery.fn.chainSelect = function( target, url, settings )
{
  return this.each( function()
  {
	$(this).change( function()
	{
		settings = jQuery.extend(
		{
			after : null,
			before : null,
			usePost : false,
			defaultValue : '0',
            		selectedVal : null,
			parameters : {'_id' : $(this).attr('id'), '_name' : $(this).attr('name')},
			eType: null,
			extraOptions: null
        	} , settings);
        
        	settings.parameters.extraOption = settings.extraOption;
		if(settings.eType == 'multiple')
		{
			var str='';
			$('#'+$(this).attr('id')+' :selected').each(function(i, selected){
			    str += $(selected).val()+',';
			});
			settings.parameters._value =  str;
		}
		else
			settings.parameters._value =  $(this).val();

        //document.write($(this).attr('id'));
		if (settings.before != null)
		{
			settings.before( target );
		}

		ajaxCallback = function(data, textStatus)
		{
			$(target).html("");//clear old options
			data  = eval("("+data+")");
		  for (key1 in data )//get key => value
		  {
                  /*var o=0;
                  for (key in data[i][key1] )//get key => value
                  {
                      if(o==0)
                          fname = data[i][key1][key];
                      else if(o==1)
                          value = data[i][key1][key];
                      o++;
                  }*/
                    if(document.all)
                        $(target).get(0).add(new Option(data[key1],key1));
                    else
                        $(target).get(0).add(new Option(data[key1],key1),null);
                  //$(target).get(0).add(new Option(data[key1],key1));
       }
			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);
			}

			$(target).change();//call next chain
		};
		//alert(url);
		if (settings.usePost == true)
		{
			$.post( url, settings.parameters, ajaxCallback );
		} else
		{
			$.get( url, settings.parameters, ajaxCallback );
		}
	});
  });
};

jQuery.fn.chainSelectonload = function(source, target, url, settings )
{
  return this.each( function()
  {
     $(document).ready(function()
     {
		settings = jQuery.extend(
		{
			after : null,
			before : null,
			usePost : false,
			defaultValue : '0',
            		selectedVal : null,
			parameters : {'_id' : $(source).attr('id'), '_name' : $(source).attr('name')},
			extraOptions: null
        	} , settings);
        	
			settings.parameters.extraOption = settings.extraOption;
                //document.write($(this).attr('id'));
                
		settings.parameters._value =  $(source).val();

		if (settings.before != null)
		{
			settings.before( target );
		}

		ajaxCallback1 = function(string, textStatus)
		{
		  try{
			$(target).html("");//clear old options

			data  = eval("("+string+")");
			//for (i = 0; i < data.length; i++)//iterate over all options
			//{
			  for (key1 in data )//get key => value
			  {
                    /*var o=0;
                    for (key in data[i][key1] )//get key => value
                    {
                        if(o==0)
                            fname = data[i][key1][key];
                        else if(o==1)
                            value = data[i][key1][key];
                        o++;
                    }*/
                    if(document.all)
                        $(target).get(0).add(new Option(data[key1],key1));
                    else
                        $(target).get(0).add(new Option(data[key1],key1),null);
         }
			//}
			//alert(settings.selectedVal+"==")
			if (settings.selectedVal != "")
			{
				$(target).val(settings.selectedVal);//select default value
			} else
			{
				$(target).val(settings.defaultValue);//select default value
				//$("option:first", target).attr( "selected", "selected" );//select first option
			}

			if (settings.after != null)
			{
				settings.after(target);
			}

			$(target).change();//call next chain
			}catch(err){}
		};

		if (settings.usePost == true)
		{
				try{
			$.post(url, settings.parameters, ajaxCallback1 );
			}catch(err){}
		} else
		{
			$.get( url, settings.parameters, ajaxCallback1 );
		}
	});
 });
};
