/**
 * @author Tom Buers
 */

(function($){$.fn.subform=function(sfElCont,options){var defaultValues={addButton:"<button href='#'>Add</button>",removeButton:"<button href='#'>Remove</button>",confirmRemove:true,confirmMessage:"Are you sure you want to delete this row?",subformChangeHandler:function(){},useTraversing:true,traverseOptions:{disableButton:true,moveHandler:function(){}}};var options=$.extend(true,defaultValues,options);var btnPanel=$("<span class='subform-btn-panel'></span>");var addBtn=$(options.addButton);var remBtn=$(options.removeButton);addBtn.addClass('subform-add-btn');remBtn.addClass('subform-remove-btn');var _empty_sfElCont={};defaultValues=null;if(options.useTraversing&&$.fn.traverse==undefined){alert("Can't find traversing plugin. Traversing disabled");options.useTraversing=false;}
var btnPanels=null;var updateButtons=function(el,pCont){if(pCont==undefined){throw"No parent Container";}
var sf=$(pCont);var $this=$(el);var subFormBtnPanel=$('.subform-btn-panel',$this);var currentButtons=subFormBtnPanel.children();if($this.is(':first-child')&&$this.is(':last-child')){if(currentButtons.length==1&&currentButtons.hasClass('subform-add-btn')){return null;}
if(subFormBtnPanel.length>0){subFormBtnPanel.replaceWith((btnPanels.add).clone(true));}else{$this.append((btnPanels.add).clone(true));}
return null;}else if($this.is(':last-child')){if(currentButtons.length==2){return null;}
if(subFormBtnPanel.length>0){subFormBtnPanel.replaceWith((btnPanels.both).clone(true));}else{$this.append((btnPanels.both).clone(true));}
return null;}else{if(currentButtons.length==1&&currentButtons.hasClass('subform-remove-btn')){return null;}
if(subFormBtnPanel.length>0){subFormBtnPanel.replaceWith((btnPanels.remove).clone(true));}else{$this.append((btnPanels.remove).clone(true));}}};return this.each(function(i){var sf=$(this);sf.attr('subformindex',i);sf.bind('subform_change',options.subformChangeHandler);_empty_sfElCont[i]=$(sfElCont+':first',sf).clone(true);if(_empty_sfElCont[i].length<=0){return alert("Subform inputcontainer is not declared");}
$('input',_empty_sfElCont[i]).val("");addBtn.unbind('click');remBtn.unbind('click');addBtn.click(function(){var sf=$(this).parent().parent().parent();var lastSf=$(sfElCont+':last',sf);var newSf=_empty_sfElCont[sf.attr('subformindex')].clone(true);lastSf.after(newSf);updateButtons(lastSf,sf);updateButtons(newSf,sf);if(options.useTraversing){$.fn.traverse.setButtons(lastSf);newSf.traverse(options.traverseOptions);}
sf.trigger('subform_change');return false});remBtn.unbind('click');remBtn.click(function(){if(options.confirmRemove&&!confirm(options.confirmMessage)){return null;}
var sf=$(this).parent().parent().parent();var delSubform=$(this).parents(sfElCont);if($(sfElCont,sf).length>1){delSubform.remove();var lastSf=$(sfElCont+':last',sf);updateButtons(lastSf,sf);if(options.useTraversing){$.fn.traverse.setButtons(lastSf);}
sf.trigger('subform_change');return false;}});if(options.useTraversing){var mHandle=options.traverseOptions.moveHandler;options.traverseOptions.moveHandler=function(){var $this=$(this);try{updateButtons($this,$this.parent());if($this.is(':last-child')){updateButtons($this.prev(),$this.parent());}else{updateButtons($(sfElCont+':last',$this.parent()),$this.parent());}}catch(e){return false;}
mHandle();}
$(sfElCont,sf).traverse(options.traverseOptions);}
btnPanels={add:((btnPanel.clone()).append(addBtn.clone(true))),remove:((btnPanel.clone()).append(remBtn.clone(true))),both:(((btnPanel.clone()).append(addBtn.clone(true))).append(remBtn.clone(true)))}
$(sfElCont,sf).each(function(){updateButtons(this,sf);});});}})(jQuery);