function update_captcha(el){
    if (el == undefined){
        $.getJSON('/captcha/update/?nocache='+(new Date()).getTime(), function(data){
            $('.captcha').attr({'src': '/captcha/image/'+data.key+'/'});
            $('#id_captcha_0').val(data.key);
        });
    }else{
        $.getJSON('/captcha/update/?nocache='+(new Date()).getTime(), function(data){
            el.find('.captcha').attr({'src': '/captcha/image/'+data.key+'/'});
            el.find('.captchatextinput[name=captcha_0]').val(data.key);
        });
    }
};

var TIMEOUT_STD = 1000; //таймауты
var TIMEOUT_SHORT = 300;
var TIMEOUT_LONG = 3000;

function show_error(text, selector){
    if (selector == undefined){
	selector = '.error';
    }

    $(selector).html(text);
    $(selector).show();
}

function hide_error(selector){
    if (selector == undefined){
	selector = '.error';
    }

    $(selector).html('');
    $(selector).hide();
}

function check_task_result(params){
    var options = jQuery.extend({fade_not_clear:false}, params);
    var task_id = params.task_id;
    var interval_name = options.interval_name;
    
    if (task_id.error != undefined){
        if (params.form_obj != undefined){
            options.form_obj.fadeform_clear(interval_name);
        }
        clearInterval(window[interval_name]);
        popup(task_id['error']);
        return;
    }
    
    $.ajax({
        url: '/crmapi/taskstatus/'+task_id+'/?nocache='+(new Date()).getTime(),
        dataType: 'json',
        success: function(task_status){
            if ((task_status.status == 'SUCCESS') || (task_status.status == 'FAILURE') || (task_status.status == 'REVOKED') || (task_status.cached != undefined)){
                if (options.form_obj != undefined && !options.fade_not_clear){
                    options.form_obj.fadeform_clear(options.interval_name);
                }else{
                    if (options.fade_clear_form != undefined){
                        $(options.fade_clear_form).fadeform_clear(options.interval_name);
                    }
                    clearInterval(window[options.interval_name]);
                }
                
                if ( // TODO: all except validation error
                        (task_status.result.success != undefined) ||
                        (task_status.result.customer != undefined) ||
                        (task_status.result.contactsStatus != undefined) ||
                        (task_status.result.list != undefined) ||
                        (task_status.result.activityData != undefined) ||
                        (task_status.result.userBalance != undefined)
                    )
                {
                    if ((options.callbacks != undefined) && (options.callbacks.success_clb != undefined)){
                        options.callbacks.success_clb(task_status);
                    }
                }else{                    
                    clearInterval(window[options.interval_name]);
                    if (options.form_obj != undefined){
                        options.form_obj.fadeform_clear(options.interval_name);
                    }
                    
                    if (task_status.result.error && task_status.result.error == 500){
                        popup('Внутренняя ошибка сервера');
                    
                    } else if (task_status.result.error && task_status.result.error == 400){
                        if ((task_status.result.error_message != undefined) && (task_status.result.error_message != '')){
			    popup(task_status.result.error_message);
                        }else{
                            popup('Ошибка 400');
                        }
                    }else{
                        var globalErrors = [];
                        var globalErrorsStr = '';
                        if (task_status.result.validationErrors != undefined){
                            if (task_status.result.validationErrors.validationError.length == undefined){
                                task_status.result.validationErrors.validationError = [task_status.result.validationErrors.validationError];
                            }
                            $.each(task_status.result.validationErrors.validationError, function(k,v){
                                globalErrors.push(this);
                                globalErrorsStr += this.message+'<br \/>';
                            });
                        }
                        
                        if (globalErrorsStr == ''){
                            globalErrorsStr = 'Внутренняя ошибка сервера';
                        }

                       hide_error();
                       popup(globalErrorsStr);
                        
                        $('#crm-message-popup .close, #crm-message-popup .bg').unbind();
                        $('#crm-message-popup .close, #crm-message-popup .bg').click(function(){
                            $('.popup').css({'left':'-9999px','height':'10px'});
                        });
                        
                        update_captcha();
                        //console.log(globalErrors);
                        //color_popup('База данных недоступна, попробуйте позже');
                    }
                    
                }
                // success or error message
            }else{
                // polling
            }
        },
        error: function(){
            clearInterval(window[interval_name]);
            popup('Внутренняя ошибка сервера');
        }
    });
};



function ajax_task(params){ //form_selector, callbacks, nobind
    var options = jQuery.extend({fade_not_clear:false}, params);
    var form_selector = options.form_selector;
    var callbacks = options.callbacks != undefined ? options.callbacks : {};
    var timeout = options.timeout != undefined ? options.timeout : TIMEOUT_SHORT;
    
    if (form_selector == undefined){
        
        $.getJSON(options.url, function(data){ // todo $.ajax
            var task_id = data.task_id;
            window[options.interval_name] = setInterval(function(){
                check_task_result({
                    task_id: task_id,
                    interval_name: options.interval_name,
                    callbacks: callbacks
                })
            }, timeout);
        });
        
    }else{
        
        function form_handler(){
            if (callbacks.presubmit_clb != undefined){
                if (callbacks.presubmit_clb(this) == 'stop'){
                    return;
                }
                
            }
            
            var form_obj = $(form_selector);
            form_obj.find('.errorList').remove();        
            form_obj.fadeform();
            
            var interval_name = form_obj.attr('id')+'_interval_id';
            $.post(form_obj.attr('action'), form_obj.serialize(), function(data){
                if (data['form_with_errors'] != undefined){
		    form_obj.fadeform_clear(interval_name);
		    form_obj.parents('.wrapper').html(data['form_with_errors']);
                    if (callbacks.form_with_errors_clb != undefined){
                        callbacks.form_with_errors_clb(data);
                    }
                }else{
                    var task_id = data.task_id;
                    window[interval_name] = setInterval(function(){
                        check_task_result(jQuery.extend({
                            task_id: data.task_id,
                            form_obj: form_obj,
                            interval_name: interval_name
                        }, options));                        
                    }, timeout);
                }
            }).error(function() {
                form_obj.fadeform_clear(interval_name);
                clearInterval(window[interval_name]);
                popup('Ошибка сервера, попробуйте позже.');
            })
        }
        
        if(options.nobind == undefined){
            $(form_selector).live('submit', function(e){
                form_handler();
                e.preventDefault();
            });
        }else{
            form_handler();
        }
        
    }
};


function popup(params){
    if (typeof(params) == "string"){
        params = {
            text: params
        };
    };

    $('#popup_crm .popup_content').html(params.text);

    $("div.popup").hide();
    $("#popup_crm").show();
    centerPopup();
    loadPopup();
    app.LargePhoto();

    var popup_elem = $("#popup");

     popup_elem.css({
         "position": "fixed",
         "top": "183px",
         "left": "530px"
     });

     $("#popup #popup_close").css({
         'left': popup_elem.width()+'px',
         "top": "-9px",
         "z-index": "1000"
     });

    return false;
     
}

function enter_code(){
    $.get('/code_reg/', function(data){
        //var code_html = '';
        popup({
            text: data
        });
    });
    
}

function track_ad_cookie(){
    var params = $.url(window.location.href).param();
    if ('utm_campaign' in params){
        var companies = $.cookie('ad_companies');
        if (companies == null){
            $.cookie('ad_companies', params['utm_campaign'], { expires: 3, path: '/'});
        }
        else {
            companies = companies.split(',');
            if ($.inArray(params['utm_campaign'], companies) == -1){
                companies.push(params['utm_campaign']);
            }
            companies = companies.join(',');
            $.cookie('ad_companies', companies, { expires: 3, path: '/'});
        }
    }
}

/*
function color_popup(params) {
    if (typeof(params) == "string"){
        params = {
            'text': params
        };
    };
    params = jQuery.extend({
        header: 'Сообщение',
        header_id: 'h-message',
        text: '',
        html: '',
        popup: 'popup',
        scrolling: false,
        transition: 'fade',
        onComplete: function(){ jQuery('#cboxLoadedContent a.popup-btn-close').click( function(){ jQuery.colorbox.close(); return false; } ); }
    }, params);
    var cp = '<div class="window ' + params.popup + '"><div class="window-bottom"><div class="window-middle"><a href="#" class="popup-btn-close">Закрыть</a>';
    if ( (params.header_id.length) && (params.header.length > 0) ) {
        cp += '<h3 id="' + params.header_id + '" class="graphic">' + params.header + '</h3>';
    }
    if ( params.html.length <= 0 ) {
        cp += '<p>' + params.text + '</p>';
    }else {
        cp += params.html;
    }
    cp += '</div></div></div>';
    params.html = cp;
    jQuery.colorbox(params);
    
}
*/

$('#link-avatar a').live('click', function(){
    popupHeight ();
    $('#download-avatar').css('left','0px');
});

$('#download-avatar .bg, #download-avatar .close').live('click', function(){
    //alert('123');
    location.href = '/registration/';
});

function check_placeholder() {
    test = document.createElement('input');
    if('placeholder' in test) 
        return true;
    return false;
}


$(function(){    
    $('.captcha,.captcha_refresh,.refresh').live('click', function(){
        update_captcha($(this).parents('.id_captcha'));
    });
    
    //use plug-in only if there is no built-in support
    if(!check_placeholder()){
        jQuery(':input[placeholder], textarea[placeholder]').placeholder();
    }
    
    track_ad_cookie();
});
