Form = {
    id: null,
    target: '#main',
    trigger: null,
    obj: null,
    opts:{},
 
    submit : function (obj, trigger, options){
        try{
            objType = typeof obj;

            if(options){
                $.extend(Form.opts, options);
            }

            if(objType == "string") {
                // id formy
                Form.id = obj;
                Form.obj = $('#' + obj);
            } else {
                Form.obj = $(Form.findParent(obj, 'form'));
                Form.id = Form.obj.attr('id');
            }


            xhr = true;

            if(options != undefined){
                if(options.xhr!=undefined) {
                    xhr = options.xhr;
                }
            }

            Form.setTrigger(trigger);

            try{
                if(xhr){
                    Form.xhr();
                } else {
                    obj.form.submit();
                }
            } catch (e) {
                console.log('Nie udalo sie wykonac Form.submit()');
                console.log(obj, 'obj');
                console.log(target, 'target');
                console.log(xhr, 'xhr');
                return false;
            }

        } catch(e) {
            console.log('Cos sie zjebalo');
            return false;
        } 

        return false;
    },

    setTrigger: function (tValue, formId) {
        if(tValue != undefined) {
            Form.trigger = tValue;

            if(formId != undefined) {
                Form.id = formId;
            }
             
            $trigger = Form.obj.find('#'+Form.id+'_trigger').val(Form.trigger);
            //console.log($trigger,'TRIGGER');
        }
    },
 
	
    /**
     * Odswierza formularz
     *
     * @example Form.refresh(this.form);
     * @name refresh
     * @return null
     */
    refresh : function (obj){
        obj.form.refresh.value = obj.name;
        obj.form.submit();
    },

    xhr : function (target) {

        if(target == undefined){
            Form.target = $('#' + Form.id);
        }

        var options = {
        //  target:        "#" + forma.id,   // target element(s) to be updated with server response
            beforeSubmit:  Form.showRequest,  // pre-submit callback
            success:       Form.showResponse,  // post-submit callback
            error:         Form.showError,

        // other available options:
        //  url:       url         // override for form's 'action' attribute
        //  type:      type        // 'get' or 'post', override for form's 'method' attribute
          dataType:  'xml'        // 'xml', 'script', or 'json' (expected server response type)
        //  clearForm: true        // clear all form fields after successful submit
        //  resetForm: true        // reset the form after successful submit

        // $.ajax options can be used here too, for example:
        //  timeout:   3000
        };

        // bind form using 'ajaxForm'
        
        $("#" + Form.id).ajaxSubmit(options);
        return false;
    },
    
    showRequest : function(formData, jqForm, options) {
        Form.disable(true);
    },
    
    showResponse : function (responseText, statusText) {
        if(responseText) {
            try{
                return Form.responseHandler(responseText);
            } catch(e) {
                console.log('Nie udalo sie przeladowac formularza danymi\n' + e.message);
                Form.setTrigger('null');
                Form.disable(false);
            }
        }
    },

    showError : function () {
        console.log('Blad ladowania danych formularza\n');
        Form.disable(false);
    },

    findParent: function (obj, selector, asArray){
        if(asArray == undefined) {
            asArray = false;
        }

        $parents = $(obj).parents(selector);

        return asArray ? $parents.get() : $parents.get(0);
    },

    disable: function( opt ) {
        if(Form.id) {
            $('#' + Form.id).find('input[type!=hidden],button,textarea,select').each(function() {
                if(opt!=undefined){
                    this.disabled = opt ?  "disbaled" : null;
                } else {
                    if(!this.disabled){
                        this.disabled = "disbaled";
                    } else {
                        this.disabled = null;
                    }
                }
            });
        }
    },

    responseHandler: function(xml) {
        $response = $('response', xml);

        try{
            $form = $('html>obj', $response);
            $msg  = $('html>msg', $response);

            isError =  parseInt($('error', $response).text());
            formContent = $form.text();//$($form.text()).html();
            
            
            msgContent  = $($msg.text()).html();
        } catch(e) {
            console.log('Nie udalo sie ustalic parametrow: ' + e.message );
        }
        
        if(isError) {
            jsOnError  = $('js>onError', $response).text();
            
            if(jsOnError) {
                try{
                    eval(jsOnError);
                } catch(e) {
                    console.log('onSucces error: ' + e.message);
                }
                
                console.log('jsOnError po ' + jsOnError );
            }
            
            Form.setContent(formContent, msgContent);
            Form.setTrigger('null');
            Form.disable(false);

            return false;
        } else {
            jsOnSucces = $('js>onSuccess', $response).text();
            
            if(jsOnSucces) {
                try{
                    eval(jsOnSucces);
                } catch(e) {
                    console.log('jsOnSucces error: ' + e.message + '\n-----\n' + jsOnSucces);
                }
            } else {
                Form.setContent(formContent, msgContent);
            }
            
            Form.setTrigger('null');
            Form.disable(false);


            return true;
        }
    },

    setContent: function (html, messages) {
        $target = $(Form.target);

        //$msgContainer = $target.parent().find('.msg-container');
        //$msgContainer.html( messages );

        $target.replaceWith( html );
        $target.effect('highlight');
    },

    element : {
        datePicker : function (obj) {
            /**
             * @todo: przenies do jakiegos globalnego JS
             */
            $.datepicker.setDefaults({ dateFormat: 'yy-mm-dd' });

                                
            $(obj).datepicker($.datepicker.regional['pl']);

            $(obj).datepicker('show');
        }
    }
}

/**
 * XXX : Przerzucic do osobnego pliku.
 */
FormHelper = {
    topic : function (obj) {
        Modal.o('helpWindow', obj.href, {title: 'Pomoc'});
        return false;
    }
}
