(function($){

    // AJAXOVÉ FORMULÁŘE
    // --------------------------------
    // verze: 1
    // vytvořil: Michal Matuška
    // editoval: 
    // 08.04.2010 | Michal Matuška | přidána kontrola typeof, vyhazovalo error pokud nebyla předána beforeSend funkce
    // 08.07.2010 | Michal Matuška | přidána kontrola prázdné action
    
    // Popis:
    // ---------------------------------
    // plugin pro ajaxové odesílání formuláře. ELEMENT na který je plugin volán získá click event, který kontroluje odesílání formuláře nebo formulářů.
    //
    // Plugin může být volán na:
    // 1) obalující element - v tu chvíli se kontroluje odesílání všech formulářů uvnitř
    // 2) konkrétní formulář
    //
    // Pokud se v success funkci nepřepíše (např. $('').replaceWith()) ELEMENT, není potřeba plugin opakovaně volat, plugin je napsán tak, že
    // se kontroluje klik v ELEMENTU na submit tlačítko.
    
    // Nastavení:
    // ---------------------------------
    // url (řetězec) = na jakou url se má odeslat formulář, pokud není zadána bere se z ACTION odesílaného formuláře nebo jde na stejnou url na jaké se formulář odesílá
    // type (řetězec) = typ odeslání požadavku, pokud není bere se z METHOD odesílaného formuláře nebo je GET
    // dataType (řetězec) = typ očekávaných dat v odpovědi
    // beforeSubmit (funkce) = callback funkce, která se provede před odesláním formuláře
    // success (funkce) = callback funkce, která vrací výsledek dotazu. MĚLA BY SE ZADÁVAT, BEZ NÍ SE NIC NESTANE =)
    
    // TODO:
    // ---------------------------------
    // 1) Není testováno pro file inputy
    
    $.fn.pdAjaxForm = function(ajax){
        
        return this.each(function(){
  
            var $box = $(this),
                $form = this.tagName == 'FORM' ? $box : $box.find('form'),
                submit = ':submit, :image';
                
            var a = ajax || {};
                           
            $box.bind('click', function(e){
                var $target = $(e.target);
                if($target.closest(submit).length){
                    var $this = $(e.target.form),
                        _this = e.target.form,
                        // target button
                        btn = $target.attr('name') != '' ? $target.attr('name') + '=' + $target.val() : '',
                        // form data
                        data = $this.serialize() + '&' + btn + '&ajax=true',      
                        // form url
                        act = _this.action.split('#')[0],
                        url = ( act == '' || act == ' ' ) ? '/' : act,
                        // type
                        type = _this.method.toUpperCase();
                        
                        
                    $.ajax({
                        url: a.url || url,
                        type: a.type || type,
                        dataType: a.dataType || null,
                        success: function(xml){
                            if(typeof a.success == 'function'){
                                a.success(xml, $box, $this);
                            }
                        },
                        beforeSend: function(){
                        	if(typeof a.beforeSend == 'function'){
                        		return a.beforeSend($box, $this, data, a)
                        	}
                        },
                        data: a.data || data
                    });
                        
                    return false;
                }
            });
                
        
        });
    
    };
    
    // Mazání formuláře FORMULÁŘE
    // --------------------------------
    // verze: 1.1
    // převzato: http://www.learningjquery.com/2007/08/clearing-form-data
    // doplněno: 1) kontrola prvků které se nemají mazat
    // editoval: Michal Matuška
    
    // Popis:
    // ---------------------------------
    // maže obsah formuláře nebo konkrétní inputy
    
    // Nastavení:
    // ---------------------------------
    // dontClear (řetězec) = elementy, které se nemají mazat. např 'input#id' - input#id se nebude mazat
      
    $.fn.clearForm = function(dontClear) {
        var not = dontClear || '';
    
        return this.not(not).each(function() {
            var type = this.type, tag = this.tagName.toLowerCase();
                
            if (tag == 'form'){
                return $(':input', this).clearForm(not);
            }

            if (type == 'text' || type == 'password' || tag == 'textarea'){
                this.value = '';
            }
            else if (type == 'checkbox' || type == 'radio'){
                this.checked = false;
            }
            else if (tag == 'select'){
                this.selectedIndex = -1;
            }
    
        });
    };
    
})($);
