window.action = new Array();
function generateFormXProgress(formID) {
    uuid = "";
    for (i = 0; i < 32; i++) {
        uuid += Math.floor(Math.random() * 16).toString(16);
    }

    $("#"+formID).find('.hiddenXProgress').remove();
    var hiddenInput = $('<input />',{
        'type': 'hidden',
        'value': uuid,
        'name': 'X-Progress-ID',
        'class': 'hiddenXProgress'
    });

    if (window.action[formID] == undefined) {
        formAction = $("#"+formID).attr("action");
        window.action[formID] = {
            formAction: formAction
        };
        
    } else {
        
        if (window.action[formID] !== undefined) {
            if (window.action[formID].formAction !== undefined) {
                formAction = window.action[formID].formAction
            } else {
                formAction = $("#"+formID).attr("action");
            }
        }
    }
    
    $("#"+formID).prepend(hiddenInput);
    $("#"+formID).attr("action", formAction + "?X-Progress-ID="+uuid);
    return uuid;
};

function defaultAnswerHandler(response,status,xhr,jForm) {
    response = $.parseJSON(response);
    if (window.interval !== undefined) {
        window.clearTimeout(interval);
    }
    if (jForm) {
        var pb = jForm.find('.progressBar');
        if (pb.length > 0) {
            pb.progressBar(100);
            pb.fadeOut('slow', function(){$(this).progressBar(0)});
            generateFormXProgress(jForm.attr('id'));
        }
        //jForm.find(":submit").attr('disabled', '');
    }
    if (response.success == 0) {
        if (response.errors.form) {
            var form = response.errors.form;
            var el;
            for (key in form) {
                for (errorKey in form[key]) {
                    el = $("[name="+errorKey+"]");
                    var message = form[key][errorKey];
                    
                    el.parent().find('label').each(function(){
                        $(this).remove();
                    });
                    var error = '';
                    if (typeof message == 'string') {
                        el = $("[name="+key+"]");
                        error = $("<label/>",{
                            "class": "error",
                            html: message
                        });
                        el.after(error);
                    } else {
                        for (m in message) {
                            error = $("<label/>",{
                                "class": "error",
                                html: message[m]
                            });
    //                        console.log(message[m]);
                            el.after(error);
                        }
                    }
                }
            }
        }

    }
    
    if (response.messages) {
        $.blockUI({ 
            message: response.messages.join('; '),
            css: {
                'z-index': 9999999,
                border: 'none', 
                padding: '15px', 
                backgroundColor: '#000', 
                'border-radius': '10px', 
                opacity: 0.8, 
                color: '#fff',
                'font-size': '1.2em'
            },
            overlayCSS: {
                'z-index': 999999
            }
        });
    } else {
        $.blockUI({ 
            message: 'Пожалуйста подождите',
            css: {
                'z-index': 9999999,
                border: 'none', 
                padding: '15px', 
                backgroundColor: '#000', 
                'border-radius': '10px', 
                opacity: .5, 
                color: '#fff',
                'font-size': '1.2em'
            },
            overlayCSS: {
                'z-index': 999999
            }
        });
    }
 
    setTimeout(function(){
        $.unblockUI();
        if (jForm) {
            doResult(response, jForm);
        } else {
            doResult(response, jForm);
        }
        
    }, 2000); 
    
//    if (response.messages) {
//        
//        
//        if (response.result == 4) {
//            if (jForm) {
//                setTimeout('$.alerts._hide();', 2000);
//                doResult(response,jForm);
//            } else {
//                setTimeout('$.alerts._hide();', 2000);
//                doResult(response);
//            }
//        }
//        
//        jAlert(response.messages.join(";"),'Внимание',function(r){
//            if (jForm) {
//                doResult(response,jForm);
//            } else {
//                doResult(response);
//            }
//        });
//        
//    } else {
//        if (jForm) {
//            doResult(response,jForm);
//        } else {
//            doResult(response);
//        }
//    }

    
    return false;
}

function doResult(response,jform) {
    if (response.success == 1) {
        if (response.result == 0) {
            return false;
        }
        if (response.result == 1) {
            if (jform) {
                var modalID = jform.attr("id")+"_modal";
                $("[rel=#"+modalID+"]").each(function(){
                    $(this).overlay().close();
                });
            }
        }
        if(response.result == 2) {
            window.location = response.forwardurl;
        }

        if (response.result == 3) {
            var f = eval(response.callback);
        }

        if (response.result == 4) {
            window.location.reload(true);
        }
    }
    return false;
}

function showUploadProgress(id) {
    var pb = $("#"+id).find('.progressBar');
    if (pb.length > 0) {
        pb.fadeIn();
        var hidden = $('#'+id).find('input:hidden');
        var uuid = hidden.val();
        var pbID = $("#"+id).find('.progressBar').attr('id');

        interval = window.setInterval(function(){
            updateUploadProgress(pbID, uuid);
        }, 500 );
    }
}

function updateUploadProgress(id, uuid) {
    $.ajax({
        url: "/f11a08f5",
        beforeSend: function(xhr) {
            xhr.setRequestHeader("X-Progress-ID", uuid)
        },
        success:function(response){
            response = eval(response);
            if (response.state == "done") {
                window.clearTimeout(interval);
                $("#"+id).progressBar(100);
                $("#"+id).fadeOut('slow',function(){
                    $(this).progressBar(0);
                });
            }
            if (response.state == "error") {
                window.clearTimeout(interval);
            }
            if (response.state == "uploading") {
                var percentage = Math.floor(100 * response.received / response.size);
                $("#"+id).progressBar(percentage);
                if (response.received == response.size) {
                    $("#"+id).fadeOut();
                }
            }
        },
        error: function() {
            window.clearTimeout(interval);
            $("#"+id).progressBar(percentage);
        }
    });
}

