/**
* He modificado este archivo para que no salte el evento CHANGE tantas veces como cambios he hecho en el SELECT padre
* jQuery jSelect plugin
* @requires	jQuery v1.2+
* @licenses	Creative Commons BY-SA [ http://creativecommons.org/licenses/by-sa/2.0/deed.fr ]
* @desc		Plugin jQuery that enable load and add Option in Select
* @author	Hervé GOUCHET [ contact(at)rvdevsign(dot)net ]
* @version	1.3.1
* @date		2009/03/17
* @doc		http://www.rvdevsign.net/ressources/javascript/jselect-plugin-jquery.html
*/

(function($){$.fn.jselect=function(settings){var jElements=this;var settings=$.extend({},$.fn.jselect.defaults,settings);var data=[];if(settings.loadUrl){$.ajax({type:settings.loadType,url:settings.loadUrl,data:settings.loadData,dataType:settings.loadDataType,success:function(msg){var is_load=false;if(msg){is_load=true}if(settings.data.length>0){parseData(settings.data,settings.dataType,!is_load,false)}if(is_load==true){parseData(msg,settings.loadDataType,is_load,false)}},error:function(){settings.loadUrl=null;if($.isFunction(settings.loadOnError)){settings.loadOnError()}}})}else if(settings.data.length>0){parseData(settings.data,settings.dataType,true,false)}else{jselect()}function jselect(){return jElements.each(function(){if(jElements.is("select")==true){manageSelect($(jElements));if($.isFunction(settings.onComplete)){settings.onComplete($(jElements))}}})}function parseData(pData,pDataType,pCreate,pGet){var properties={oValue:"",oText:"",oSelected:"",oClass:""};var gData=[];if(pDataType=='xml'||pDataType=='html'){$('option',pData).each(function(){oValue=$(this).attr('value');oText=(pDataType=='xml'?$(this).attr('text'):$(this).text());oSelected=($(this).attr('selected')=="true"||$(this).attr('selected')=="selected"?true:false);if(oValue!==""&&oText!==""){var option={oValue:oValue,oText:oText,oSelected:oSelected,oClass:$(this).attr('class')};option=$.extend({},properties,option);if(pGet==false){data.push(option)}else{gData.push(option)}}})}else if(pDataType=='array'){var lenData=pData.length;for(var i=0;i<lenData;i++){if(pData[i].constructor.toString().indexOf("Array")==-1){if(pData[i]!==""){var option={oValue:pData[i],oText:pData[i],oSelected:false,oClass:""};option=$.extend({},properties,option);if(pGet==false){data.push(option)}else{gData.push(option)}}}else if(pData[i].length>1){if(pData[i][1]!==""){var option={oValue:pData[i][0],oText:pData[i][1],oSelected:(typeof pData[i][2]!="undefined"?pData[i][2]:false),oClass:(typeof pData[i][3]!="undefined"?pData[i][3]:"")};option=$.extend({},properties,option);if(pGet==false){data.push(option)}else{gData.push(option)}}}}}else if(pDataType=='json'){var lenData=pData.select.length;for(var i=0;i<lenData;i++){if(pData.select[i].oValue!==""&&pData.select[i].oText!==""){var option=$.extend({},properties,pData.select[i]);if(pGet==false){data.push(option)}else{gData.push(option)}}}}if(pCreate==true&&pGet==false){jselect()}if(pGet==true){return gData}}function manageSelect(jSelect){var oData=data;if(settings.replaceAll==false){var gData=parseData(jSelect,"html",false,true);oData=gData.concat(oData)}jSelect.empty();if(settings.addOption==true){oData.push({oValue:settings.addOptionValue,oText:settings.addOptionText,oSelected:false,oClass:settings.addOptionClass})}manageOption(jSelect,oData);jSelect.unbind("change");jSelect.change(function(){if(settings.addOption==true){getOption(jSelect)}if($.isFunction(settings.onChange)){settings.onChange($(this).val(),$(this).find("option[value='"+$(this).val()+"']").html(),$(this))}})}function manageOption(jSelect,oData){var dSelect=jSelect.get(0);var lenData=oData.length;dSelect.options.length=lenData;for(var o=0;o<lenData;o++){createOption(dSelect,o,oData[o])}}function createOption(dSelect,posOption,objOption){dSelect.options[posOption]=new Option(objOption.oText,objOption.oValue);if(objOption.oSelected&&objOption.oSelected==true){dSelect.options[posOption].selected=true}if(objOption.oClass){dSelect.options[posOption].setAttribute("class",objOption.oClass)}}function getOption(jSelect){if(jSelect.val()==settings.addOptionValue){var textOption=prompt(settings.addOptionPrompt,"");if(textOption&&settings.addOptionUrl){newOption(jSelect,textOption)}}}function newOption(jSelect,textOption){$.ajax({type:settings.addOptionType,url:settings.addOptionUrl,data:settings.addOptionData+textOption,success:function(valueOption){if(valueOption&&valueOption!=""){addOption(jSelect,valueOption,textOption)}else{errorOption(jSelect,textOption)}},error:function(){errorOption(jSelect,textOption)}})}function errorOption(jSelect,textOption){settings.addOptionUrl=null;jSelect.get(0)[0].selected=true;if($.isFunction(settings.addOptionOnError)){settings.addOptionOnError(textOption,jSelect)}}function addOption(jSelect,valueOption,textOption){var oData=[];oData=parseData(jSelect,"html",false,true);if(settings.addOption==true){oData.pop()}oData.push({oValue:valueOption,oText:textOption,oSelected:settings.addOptionSetSelected,oClass:settings.addOptionSetClass});if(settings.addOption==true){oData.push({oValue:settings.addOptionValue,oText:settings.addOptionText,oSelected:false,oClass:settings.addOptionClass})}manageOption(jSelect,oData);if($.isFunction(settings.addOptionOnComplete)){settings.addOptionOnComplete(valueOption,textOption,jSelect)}}};$.fn.jselect.defaults={data:[],dataType:"array",replaceAll:true,onChange:function(){},onComplete:function(){},loadUrl:null,loadData:null,loadType:"POST",loadOnError:function(){},loadDataType:"xml",addOption:false,addOptionUrl:null,addOptionData:"newOption=",addOptionType:"POST",addOptionValue:"-1",addOptionText:"Add an option",addOptionClass:null,addOptionPrompt:"Text of the new option:",addOptionSetSelected:true,addOptionSetClass:null,addOptiononComplete:function(){},addOptionOnError:function(){}}})(jQuery);