    var Popup_Fancybox_Content_Height = 0;
    var Popup_Fancybox_Settings = {'scrollPane':0, 'width':450, 'height':'auto', 'heightChange':'auto', 'selectCustom':0, 'method':'get', 'captchaRefresh':false, 'captchaUrl':'', 'preloaderShow':0, 'submitDisable':0, 'submitDisableClass':0, 'submitSelector':'', 'submitOnce':1};
    var Popup_Fancybox_Settings_Private = {'submitRunning':0};
    var Popup_Fancybox_Preloader_Selector = "#fancybox-content"; 

    function Show_FancyBox_Ajax_Content(link, options, s) {
        if (link) {
            data = options || {'id':0};
            empty = {};
            settings = $.extend(empty, Popup_Fancybox_Settings, s);

            if (settings.submitOnce == 1 && Popup_Fancybox_Settings_Private.submitRunning == 1) return false;
            Popup_Fancybox_Settings_Private.submitRunning = 1;
            
            if (settings.submitDisable == 1) {
                if (settings.submitSelector != '') {
                    if (settings.submitDisableClass == 1) {
                        currentClass = $(settings.submitSelector).attr('class');
                        $(settings.submitSelector).attr('class',currentClass+' disabled');
                    }
                    else {
                        $(settings.submitSelector).attr('disabled', 'disabled');
                    }
                }
                else {
                    if (settings.submitDisableClass == 1) {
                        currentClass = $("#fancybox-submit-form").attr('class');
                        $("#fancybox-submit-form").attr('class',currentClass+' disabled');
                    }
                    else {
                        $("#fancybox-submit-form").attr('disabled', 'disabled');
                    }
                }
            }
            if (settings.preloaderShow == 1) (new Resizer()).startPreloader(Popup_Fancybox_Preloader_Selector);
            
            $.ajax({
                url: link,
                type: settings.method,
                data: data,
                dataType: settings.ajaxDataType,
                success: function(response) {
                    if (settings.preloaderShow == 1) (new Resizer()).stopPreloader();
                
                    Show_FancyBox_Content(response, settings);
                    Popup_Fancybox_Content_Height = $('#fancybox-content').height();
                    
                    // need because if server return result very quickly, we can send form twice visually.
                    window.setTimeout(function(){ Popup_Fancybox_Settings_Private.submitRunning = 0; },100);
                }
            });
            
            if (settings.submitDisable == 1) {
                if (settings.submitSelector != '') {
                    if (settings.submitDisableClass == 1) {
                        $(settings.submitSelector).attr('class',currentClass);
                    }
                    else {
                        $(settings.submitSelector).attr('disabled', '');
                    }
                }
                else {
                    if (settings.submitDisableClass == 1) {
                        $("#fancybox-submit-form").attr('class',currentClass);
                    }
                    else {
                        $("#fancybox-submit-form").attr('disabled', '');
                    }
                }
            }
        }
    }
    
    function Show_FancyBox_Json_Content(link, options, s) {
        if (link) {
            data = options || {'id':0};
            empty = {};
            settings = $.extend(empty, Popup_Fancybox_Settings, s);

            if (settings.submitOnce == 1 && Popup_Fancybox_Settings_Private.submitRunning == 1) return false;
            Popup_Fancybox_Settings_Private.submitRunning = 1;
            
            if (settings.submitDisable == 1) {
                if (settings.submitSelector != '') {
                    if (settings.submitDisableClass == 1) {
                        currentClass = $(settings.submitSelector).attr('class');
                        $(settings.submitSelector).attr('class',currentClass+' disabled');
                    }
                    else {
                        $(settings.submitSelector).attr('disabled', 'disabled');
                    }
                }
                else {
                    if (settings.submitDisableClass == 1) {
                        currentClass = $("#fancybox-submit-form").attr('class');
                        $("#fancybox-submit-form").attr('class',currentClass+' disabled');
                    }
                    else {
                        $("#fancybox-submit-form").attr('disabled', 'disabled');
                    }
                }
            }
            if (settings.preloaderShow == 1) {
                (new Resizer()).startPreloader(Popup_Fancybox_Preloader_Selector);
            }
            
            $.ajax({
                url: link,
                type: settings.method,
                data: data,
                dataType: 'json',
                success: function(response) {
                    if (settings.preloaderShow == 1) (new Resizer()).stopPreloader();
                    
                    FancyBox_Json_Response(response, settings);
                    Popup_Fancybox_Content_Height = $('#fancybox-content').height();
                    
                    // need because if server return result very quickly, we can send form twice visually.
                    window.setTimeout(function(){ Popup_Fancybox_Settings_Private.submitRunning = 0; },100);
                }
            });

            if (settings.submitDisable == 1) {
                if (settings.submitSelector != '') {
                    if (settings.submitDisableClass == 1) {
                        $(settings.submitSelector).attr('class',currentClass);
                    }
                    else {
                        $(settings.submitSelector).attr('disabled', '');
                    }
                }
                else {
                    if (settings.submitDisableClass == 1) {
                        $("#fancybox-submit-form").attr('class',currentClass);
                    }
                    else {
                        $("#fancybox-submit-form").attr('disabled', '');
                    }
                }
            }
        }
    }

    function FancyBox_Json_Response(response, s) {
        if (response) {
            
            if(response.AjaxManager) {
                return (new AjaxManager).parseAjaxResponce(response);
            }
            
            if(response.status == 1) {
                if (response.result) {
                    Show_FancyBox_Content(response.result, s);
                }
                else {
                    $.fancybox.close();
                }
            }
            else {
                if (settings.heightChange == "auto") {
                    currentFancyH = $('#fancybox-content').height();
                    hCurrent = $('#popup_content').height();
                }
                 
                $('#fancybox-content span.errors').remove();
                    
                //attach errors to the corresponding fields
                for(var invalidFieldId in response.errors) {
                    $('#'+invalidFieldId).after('<span class="errors">'+response.errors[invalidFieldId]+'</span>');
                }
                
                if (settings.heightChange == "auto") {
                    hDiff = $('#popup_content').height() - hCurrent;
                    $('#fancybox-content').height(currentFancyH + hDiff);
                }
                
                if (response.url) {
                    $.ajax({
                        url: response.url,
                        type: 'get',
                        data: {},
                        dataType: 'json',
                        success: function(response_data) {
                            if(response_data.length != 0) {
                                //find captcha image and reload image
                                $('#fancybox-content p.captcha').find('img').attr('src', response_data.url);
                            }
                        }
                    });
                }
            }
            if (response.script) {
                eval(response.script);
            }
        }
    }

    function Show_FancyBox_Content(content, s) {

        if (content) {
            
            if (content instanceof Object) {
                return (new AjaxManager).parseAjaxResponce(content);
            }
            
            settings = $.extend({'width':Popup_Fancybox_Settings.width, 'height':Popup_Fancybox_Settings.height, 'auto':true}, s);
            if ((settings.width !== Popup_Fancybox_Settings.width) || (settings.height !== Popup_Fancybox_Settings.height)) {
                settings.auto = false;
            }
        
            $.fancybox(
                content,
                {
                        'autoDimensions'    : settings.auto,
                        'width'             : settings.width,
                        'height'            : settings.height,
                        'transitionIn'      : 'none',
                        'transitionOut'     : 'none',
                        'scrolling'         : 'no',
                        //'noScrollDiv'     : true,
                        'onComplete'        : 
                            function() {
                                if (settings.captchaRefresh && settings.captchaUrl) {
                                    $.get(
                                          settings.captchaUrl, 
                                          {'refresh':1},
                                          function(data) {
                                              if (data.url) {
                                                  $('.captcha img').attr('src',data.url);
                                              }
                                          }, 'json');
                                }
                                if (settings.selectCustom) {
                                    if ($('#fancybox-content select').size()) {
                                        $('#fancybox-content select').selectBox({hideOnMouseOut : true});
                                    }
                                }
                                if (settings.scrollPane) {
                                    fancyPaneApi = makeCustomScroll('#inner-scrolling'); // #fancybox-content 
                                }
                                return true;
                        }
                }
            );
        }
    }

    function Click_Enquire_Car(e) {
        _preventDefault(e);
        
        data = {
                'carId':$(this).attr('data-carid'), 
                'carTitle':$(this).attr('data-title')
        };
        Show_FancyBox_Ajax_Content('/car/processEnquiryBox', data, {'captchaRefresh':1, 'captchaUrl':'/car/captcha'});
        return false;
    }

    function Click_Enquire_Company(e) {
        _preventDefault(e);

        data = {
                'companyId':$(this).attr('data-id'), 
                'companyName':$(this).attr('data-title')
        };
        Show_FancyBox_Json_Content('/companies/processEnquiryBox', data, {'captchaRefresh':1, 'captchaUrl':'/companies/captcha'});
        return false;
    }

    function Click_Comment_News(e) {
        _preventDefault(e);

        Show_FancyBox_Ajax_Content('/news/processComment', { 'news_id':$(this).attr('data-newsid') });
        return false;
    }

    function Click_ReviewBox_Company(e) {
        _preventDefault(e);

        data = {
                'cid':$(this).attr('data-id'),
                'topic_id':$(this).attr('data-topic-id')
        };
        Show_FancyBox_Ajax_Content('/companies/processReviewBox', data);
        return false;
    }
    
    function Click_Claim_Company(e) {
        _preventDefault(e);

        data = {
                'id':$(this).attr('data-id'),
                'topic_id':$(this).attr('data-topic-id')
        };
        Show_FancyBox_Ajax_Content('/companies/processClaimRequest', data, {selectCustom:1});
        return false;
    }

    function Click_Wiki_Edit_Link(e, objA) {

        if (objA != undefined) {
                data = {
                        'id':$(objA).attr('data-id'), 
                        'type':$(objA).attr('data-type') 
                };
        }
        else {
            _preventDefault(e);
            data = {
                    'id':$(this).attr('data-id'), 
                    'type':$(this).attr('data-type') 
            };
        }

        Show_FancyBox_Ajax_Content('/car/processWikiBox', data, {'scrollPane':1});
        return false;
    }

    function Click_Share_Email_Link(e) {
        _preventDefault(e);

        data = {
                'id':$(this).attr('data-id'), 
                'type':$(this).attr('data-type') 
        };
        Show_FancyBox_Ajax_Content('/link/ProcessShareBox', data);
        return false;
    }

    function Popup_Privacy(e) {
        _preventDefault(e);
        
        Show_FancyBox_Ajax_Content('/help/GetPrivacyPolicy', {'type':'fancy'}, {'height':540, 'scrollPane':1});
        return false;
    }

    function Popup_Agreement(e) {
        _preventDefault(e);
        
        Show_FancyBox_Ajax_Content('/help/GetUserAgreement', {'type':'fancy'}, {'height':540, 'scrollPane':1});
        return false;
    }
    
    function Popup_Subscription(master_make_id, master_model_id, color_id) {
        
        Show_FancyBox_Ajax_Content("/subscribe/subscribeForm", {'master_make_id': master_make_id, 'master_model_id': master_model_id, 'color_id': color_id}, null);
        
        return false;
    }
    
    function _preventDefault(e) {
        if (e != undefined) {
            if (e.preventDefault) e.preventDefault();
            if (e.stopPropagation) e.stopPropagation();
        }
    }

