var defaults = {
    variant: 'help',
    ready: false,
    solo: false,
    prerender: false,
    title: '',
    text: '...',
    dont_clone: false,
    url: false,
    data: null,
    close: false,
    tip: true,
    position_target: false,
    scroll: true,
    resize: true,
    show_event: 'mouseover',
    show_delay: 140,
    hide_event: 'unfocus',
    hide_effect_type: 'fade',
    hide_effect_length: 100,
    hide_delay: 0,
    hide_fixed: false,
    name: 'cream',
    minwidth: false,
    maxwidth: false,
    padding: '5px',
    border_width: 9,
    border_radius: 9,
    beforeRender: function(){},
    onRender: function(){},
    beforeShow: function(){},
    beforeHIde: function(){},
    onShow: function(){}
}

var options_for_modal_dialog = function(){
    return {
        prerender: true,
        ready: true,
        solo: true,
        position_corner_tooltip: 'center',
        position_corner_target: 'center',
        position_target:  $(document.body),
        close: 'Close',
        resize: false,
        scroll: false
    }
}

var prepare_modal_dialog = function(){
    //from: http://craigsworks.com/projects/qtip/demos/effects/modal#
    //Create the modal backdrop on document load so all modal tooltips can use it
    $('<div id="qtip-blanket">').css({
        position: 'absolute',
        top: $(document).scrollTop(), // Use document scrollTop so it's on-screen even if the window is scrolled
        left: 0,
        height: $(document).height(), // Span the full document height...
        width: '100%', // ...and full width
        opacity: 0.7, // Make it slightly transparent
        backgroundColor: 'black',
        zIndex: 5000  // Make sure the zIndex is below 6000 to keep it below tooltips!
    }).appendTo(document.body).hide();
}


var generate_content = function(settings){
    return {
        prerender: settings.prerender,
        title: { 
            text: settings.title, 
            button: settings.close 
        },
        text: settings.text,
        dont_clone: settings.dont_clone,
        url: settings.url,
        data: settings.data
    }
}

var generate_show = function(settings){
    return { 
        delay: settings.show_delay,
        ready: settings.ready,
        solo: settings.solo,
        when: {
            event: settings.show_event
        }
    };
}
var generate_hide = function(settings){
    return { 
        delay: settings.hide_delay,
        hide: settings.hide_fixed,
        when: { 
            event: settings.hide_event
        }, effect: {
            type: settings.hide_effect_type,
            length: settings.hide_effect_length
        }
    };
}
var generate_position = function(settings){
    return {
        target: settings.position_target,
        corner: {
            tooltip: settings.position_corner_tooltip,
            target: settings.position_corner_target
        },
        adjust: {
            resize: settings.resize,
            scroll: settings.scroll
        }
    };
}
var generate_style = function(settings){
    return {
        tip: settings.tip,
        width: {
            min: settings.minwidth,
            max: settings.maxwidth
        },
        'padding': settings.padding,
        border: {
            width: settings.border_width,
            radius: settings.border_radius
        },
        name: settings.name
    }
}
var generate_api = function(settings){
    return { 
        beforeRender: settings.beforeRender,
        onRender: settings.onRender,
        beforeShow: settings.beforeShow,
        beforeHide: settings.beforeHide,
        onShow: settings.onShow
    }
}

var generate_qtip = function(jqdiv, settings){
    jqdiv.qtip({
        content: generate_content(settings),
        position: generate_position(settings),
        show: generate_show(settings),
        hide: generate_hide(settings),
        style: generate_style(settings),
        api: generate_api(settings)
    });
}


var new_wi_tip = function(jqdiv, options){
    ///////////////////////////////////////
    if ('availability' == options.variant){
        var variant_options = {
            minwidth: 300,
            name: 'cream',
            padding: '10',
            show_delay: 0,
            show_event: 'click',
            hide_effect_length: 1,
            position_corner_tooltip: 'topLeft',
            position_corner_target: 'bottomLeft'
        };
        settings = $.extend({}, defaults, variant_options, options);
        jqdiv.qtip({
            content: generate_content(settings),
            position: generate_position(settings),
            show: generate_show(settings),
            hide: generate_hide(settings),
            style: generate_style(settings),
            api: generate_api(settings)
        });
    
    //////////////////////////////////////
    } else if ('help' == options.variant){
        var variant_options = {
            ready: false,
            hide_delay: 1000,
            solo: true,
            show_event: 'mouseover',
            show_delay: 0,
            position_corner_tooltip: 'bottomLeft',
            position_corner_target: 'topRight'
        };
        settings = $.extend({}, defaults, variant_options, options);
        generate_qtip(jqdiv, settings);
    
    //////////////////////////////////////////////////////
    } else if ('profile_completeness' == options.variant){
        var variant_options = {
            prerender: true,
            solo: true,
            position_corner_tooltip: 'topMiddle',
            position_corner_target: 'bottomMiddle',
            title: false,
            show_event: 'click',
            hide_event: 'inactive',
            close: 'Close'
        };
        settings = $.extend({}, defaults, variant_options, options);
        jqdiv.qtip({
            content: generate_content(settings),
            position: generate_position(settings),
            show: generate_show(settings),
            hide: generate_hide(settings),
            style: generate_style(settings),
            api: generate_api(settings)
        });
        
    //////////////////////////////////////////////
    } else if ('ebay_recommended' == options.variant){
        var variant_options = {
            prerender: true,
            solo: true,
            ready: true,
            position_corner_tooltip: 'leftMiddle',
            position_corner_target: 'rightMiddle',
            title: false,
            show_event: 'click',
            hide_event: 'inactive',
            close: 'Close'
        };
        settings = $.extend({}, defaults, variant_options, options);
        jqdiv.qtip({
            content: generate_content(settings),
            position: generate_position(settings),
            show: generate_show(settings),
            hide: generate_hide(settings),
            style: generate_style(settings),
            api: generate_api(settings)
        });
        
    //////////////////////////////////////////////
    } else if ('profile_step' == options.variant){
        var variant_options = {
            position_corner_tooltip: 'leftMiddle',
            position_corner_target: 'rightMiddle'
        };
        settings = $.extend({}, defaults, variant_options, options);
        generate_qtip(jqdiv, settings);

    //////////////////////////////////////////////
    } else if ('predefined_search' == options.variant){
        var variant_options = {
            prerender: true,
            title: 'Choose and click',
            show_event: 'click',
            hide_event: 'unfocus',
            close: 'Close',
            solo: true,
            ready: false,
            hide_delay: 1000
        };
        settings = $.extend({}, defaults, variant_options, options);
        jqdiv.qtip({
            content: generate_content(settings),
            position: generate_position(settings),
            show: generate_show(settings),
            hide: generate_hide(settings),
            style: generate_style(settings),
            api: generate_api(settings)
        });

    //////////////////////////////////////////////
    } else if ('last_admin_objects' == options.variant){
        var variant_options = {
            position_corner_tooltip: 'bottomLeft',
            position_corner_target: 'topLeft',
            hide_fixed: true,
            name: 'dark',
            show_event: 'mouseover',
            show_delay: 0,
            hide_delay: 1100,
            solo: true,
            title: false,
            padding: '',
            border_width: '2'
        };
        settings = $.extend({}, defaults, variant_options, options);
        jqdiv.qtip({
            content: generate_content(settings),
            position: generate_position(settings),
            show: generate_show(settings),
            hide: generate_hide(settings),
            style: generate_style(settings),
            api: generate_api(settings)
        });

    //////////////////////////////////////////////
    } else if ('modal_dialog' == options.variant){
        var variant_options = {
            dont_clone: true
        }
        settings = $.extend({}, defaults, variant_options, options_for_modal_dialog(), options);
        prepare_modal_dialog();
        jqdiv.qtip({
            content: generate_content(settings),
            position: generate_position(settings),
            show: generate_show(settings),
            hide: generate_hide(settings),
            style: generate_style(settings),
            api: generate_api(settings)
        });

    //////////////////////////////////////////////
    } else if ('incoming_numbers' == options.variant){
        var variant_options = { };
        settings = $.extend({}, defaults, variant_options, options);
        jqdiv.qtip({
            content: settings.content,
            show: 'click',
            hide: 'unfocus',
            position: {
                corner: {
                    target: 'bottomMiddle',
                    tooltip: 'topMiddle'
                }
            },
            style: {
                border: { radius: 4 },
                name: 'cream',
                padding: '10px 13px',
                width: { max: 600, min: 600 },
                tip: true
            }
        });
        
    }
}
        
