var scnDialogHelper = {
    needsPreview: false,
    setUpButtons: function () {
        var a = this;
        jQuery("#scn-btn-cancel").click(function () {
            a.closeDialog()
        });
        jQuery("#scn-btn-insert").click(function () {
            a.insertAction()
        });
        jQuery("#scn-btn-preview").click(function () {
            a.previewAction()
        })
    },
    loadShortcodeDetails: function () {
        if (scnSelectedShortcodeType) {
            var a = this;
            jQuery.getScript(avia_framework_globals.frameworkUrl + "php/avia_shortcodes/sc/" + scnSelectedShortcodeType + ".js", function () {
                a.initializeDialog()
            })
        }
    },
    initializeDialog: function () {
        if (typeof scnShortcodeMeta == "undefined") jQuery("#scn-options").append("<p>Error loading details for shortcode: " + scnSelectedShortcodeType + "</p>");
        else {
            if (scnShortcodeMeta.disablePreview) {
                jQuery("#scn-preview").remove();
                jQuery("#scn-btn-preview").remove()
            }
            var a = scnShortcodeMeta.attributes,
                b = jQuery("#scn-options-table");
            for (var c in a) {
                var f = "scn-value-" + a[c].id,
                    d = a[c].isRequired ? "scn-required" : "",
                    g = jQuery('<th valign="top" scope="row"></th>');
                jQuery("<label/>").attr("for", f).attr("class", d).html(a[c].label).appendTo(g);
                f = jQuery("<td/>");
                d = (d = a[c].controlType) ? d : "text-control";
                switch (d) {
                case "column-control":
                    this.createColumnControl(a[c], f, c == 0);
                    break;
                case "icon-control":
                case "color-control":
                case "link-control":
                case "text-control":
                    this.createTextControl(a[c], f, c == 0);
                    break
                case "select-control":
                    this.createSelectControl(a[c], f, c == 0);
                    break;
                case "tab-control":
                    this.createTabControl(a[c], f, c == 0);
                    break;
                case "table-control":
                    this.createTableControl(a[c], f, c == 0);
                    break;
               case "sidebar-tab-control":
                    this.createsbTabControl(a[c], f, c == 0);
                    break;
                }
                jQuery("<tr/>").append(g).append(f).appendTo(b)
            }
            jQuery(".scn-focus-here").first().focus()
        }
    },
     createsbTabControl: function (a, b, c) {
        new scnSBTabMaker(b, 20, c ? "scn-focus-here" : null);
        b.addClass("scn-marker-sidebar-tab-control")
    },
    
    createColumnControl: function (a, b, c) {
        
        new ScnColumnMaker(b, 5, c ? "scn-focus-here" : null);
        b.addClass("scn-marker-column-control")
    },
    
     createTableControl: function (a, b, c) {
          
        new ScnTableMaker(b, 5, c ? "scn-focus-here" : null);
        b.addClass("scn-marker-table-control")
    },
    
    createTextControl: function (a, b, c) {
        var f = a.validatelink ? "scn-validation-marker" : "",
            d = a.isRequired ? "scn-required" : "",
            g = "scn-value-" + a.id;
        jQuery('<input type="text">').attr("id", g).attr("name", g).addClass(f).addClass(d).addClass(c ? "scn-focus-here" : "").appendTo(b);
        if (a = a.help) {
            jQuery("<br/>").appendTo(b);
            jQuery("<span/>").addClass("scn-input-help").html(a).appendTo(b)
        }
        var h = this;
        b.find("#" + g).on("keydown focusout", function (e) {
            if (e.type == "keydown" && e.which != 13 && e.which != 9 && !e.shiftKey) h.needsPreview = true;
            else if (h.needsPreview && (e.type == "focusout" || e.which == 13)) {
                h.previewAction(e.target);
                h.needsPreview = false
            }
        })
    },
    createSelectControl: function (a, b, c) {
        var f = a.validatelink ? "scn-validation-marker" : "",
            d = a.isRequired ? "scn-required" : "",
            g = "scn-value-" + a.id;
        var selectNode = jQuery('<select>').attr("id", g).attr("name", g).addClass(f).addClass(d).addClass('select input-select').addClass(c ? "scn-focus-here" : "");
        b.addClass('scn-marker-select-control');
        var selectBoxValues = a.selectValues;
        for (v in selectBoxValues) {
            var value = selectBoxValues[v];
            var label = selectBoxValues[v];
            var selected = '';
            if (value == '') {
                if (a.defaultValue == value) {
                    label = a.defaultText;
                } // End IF Statement
            } else {
                if (value == a.defaultValue) {
                    label = a.defaultText;
                } // End IF Statement
            } // End IF Statement
            if (value == a.defaultValue) {
                selected = ' selected="selected"';
            } // End IF Statement
            selectNode.append('<option value="' + value + '"' + selected + '>' + label + '</option>');
        } // End FOREACH Loop
        selectNode.appendTo(b);
        if (a = a.help) {
            jQuery("<br/>").appendTo(b);
            jQuery("<span/>").addClass("scn-input-help").html(a).appendTo(b)
        }
        var h = this;
        b.find("#" + g).on("change", function (e) {
            if ((e.type == "change" || e.type == "focusout") || e.which == 9) {
                h.needsPreview = true;
            }
            if (h.needsPreview) {
                h.previewAction(e.target);
                h.needsPreview = false
            }
        })

    },
    createTabControl: function (a, b, c) {
        new scnTabMaker(b, 6, c ? "scn-focus-here" : null);
        b.addClass("scn-marker-tab-control")
    },
    getTextKeyValue: function (a) {
        var b = a.find("input");
        if (!b.length) return null;
        if (b.attr("id") == undefined) return null;
        a = b.attr("id").substring(10);
        b = b.val();
        return {
            key: a,
            value: b
        }
    },
    getColumnKeyValue: function (a) {
        var b = a.find("#scn-column-text").text();
        if (a = Number(a.find("select option:selected").val())) return {
            key: "data",
            value: {
                content: b,
                numColumns: a
            }
        }
    },
    getSelectKeyValue: function (a) {
        var b = a.find("select");
        if (!b.length) return null;
        a = b.attr("id").substring(10);
        b = b.val();
        return {
            key: a,
            value: b
        }
    },
     getTabKeyValue: function (a) {
        var b = a.find("#scn-tab-text").text();
        if (a = Number(a.find("select option:selected").val())) return {
            key: "data",
            value: {
                content: b,
                numTabs: a
            }
        }
    },
    
    getsidebarTabKeyValue: function (a) {
    
        var b = a.find("#scn-tab-text").text();
        var x = a.parents('#scn-options-table').find("select[name='scn_tab_icon']");
       
        if (a = Number(a.find("select option:selected").val())) return {
            key: "data",
            value: {
                content: b,
                icons: x,
                numTabs: a
            }
        }
    },
    
    getTableKeyValue: function (a) {
    
    	var table_data = a.parents('#TB_window').eq( 0 ).find('#top .avia_table');
    	
    	table_data.find('table').removeClass('undefined scn-generated-table');
    
        if (table_data.length) return {
            key: "data",
            value: {
                table: table_data,
                html: table_data.html()
            }
        }
    },
    
    makeShortcode: function () {
        var a = {},
            b = this;
            
        jQuery("#scn-options-table td").each(function () {
            var h = jQuery(this),
                e = null;
                
            if (e = h.hasClass("scn-marker-column-control") ? b.getColumnKeyValue(h) : b.getTextKeyValue(h)) a[e.key] = e.value
            if (e = h.hasClass("scn-marker-select-control") ? b.getSelectKeyValue(h) : b.getTextKeyValue(h)) a[e.key] = e.value
            if (e = h.hasClass("scn-marker-tab-control") ? b.getTabKeyValue(h) : b.getTextKeyValue(h)) a[e.key] = e.value
            if (e = h.hasClass("scn-marker-sidebar-tab-control") ? b.getsidebarTabKeyValue(h) : b.getTextKeyValue(h)) a[e.key] = e.value
            if (e = h.hasClass("scn-marker-table-control") ? b.getTableKeyValue(h) : b.getTextKeyValue(h)) a[e.key] = e.value
        
        
        
        });
        
        if (scnShortcodeMeta.customMakeShortcode) return scnShortcodeMeta.customMakeShortcode(a);
        var c = a.content ? a.content : scnShortcodeMeta.defaultContent,
            f = "";
        for (var d in a) {
            var g = a[d];
            if (g && d != "content") f += " " + d + '="' + g + '"'
        }
        return "[" + scnShortcodeMeta.shortcode + f + "]" + (c ? c + "[/" + scnShortcodeMeta.shortcode + "] " : " ")
    },
    insertAction: function () {
        if (typeof scnShortcodeMeta != "undefined") {
            var a = this.makeShortcode();
            tinyMCE.activeEditor.execCommand("mceInsertContent", false, a);
            this.closeDialog()
        }
    },
    closeDialog: function () {
        this.needsPreview = false;
        tb_remove();
        jQuery("#scn-dialog").remove()
    },
    previewAction: function (a) {
    	var nonce = avia_shortcode_preview || false;
    	
    	if(!nonce) return;
        jQuery(a).hasClass("scn-validation-marker") && this.validatelinkFor(a);
        jQuery("#scn-preview h3").first().addClass("scn-loading");
        jQuery("#scn-preview-iframe").attr("src", avia_framework_globals.frameworkUrl + "php/avia_shortcodes/av-prev.php?nonce="+nonce+"&shortcode=" + encodeURIComponent(this.makeShortcode()))
    },
    validatelinkFor: function (a) {
        var b = jQuery(a);
        b.removeClass("scn-validation-error");
        b.removeClass("scn-validated");
        if (a = b.val()) {
            b.addClass("scn-validating");
            jQuery.ajax({
                url: ajaxurl,
                dataType: "json",
                data: {
                    action: "scn_check_url_action",
                    url: a
                },
                error: function () {
                    b.removeClass("scn-validating")
                },
                success: function (c) {
                    b.removeClass("scn-validating");
                    c.error || b.addClass(c.exists ? "scn-validated" : "scn-validation-error")
                }
            })
        }
    }
};
scnDialogHelper.setUpButtons();
scnDialogHelper.loadShortcodeDetails();