﻿function TmeJobsFlag(options) {

    this.toggle = function(o) {
        var element = jQuery("#" + o.elementId);
        if (!element) return;

        if (element.data("TmeJobsFlag.isSelected") == undefined) {
            element.data("TmeJobsFlag.isSelected", o.isSelected);
        };

        if (element.data("TmeJobsFlag.isInv") || element.attr("class") == o.cssClassInvisible) return;

        var lSelected = element.data("TmeJobsFlag.isSelected");
        var ldefaultTextSelected = o.defaultTextSelected;
        var ldefaultTextNotSelected = o.defaultTextNotSelected;
        var ldefaultTipSelected = o.defaultTipSelected;
        var ldefaultTipNotSelected = o.defaultTipNotSelected;
        var lFunction = (lSelected) ? options.removeFunction : options.addFunction;
        var lCssClass = (lSelected) ? o.cssClass : o.cssClassSelected;



        zajaxm.call({
            postType: "GET",
            assembly: options.assembly,
            methodClass: options.methodClass,
            methodName: lFunction,
            args: o.arguments,
            onOk: function() {

                if (options.methodClass.indexOf("FlagFavourites") > -1) {
                    var resultvalue = '';
                    var fav_element = jQuery(".i_star");
                    if (fav_element) {
                        var eltext = "";
                        var numberel = jQuery(".i_star").children("b");
                        if (numberel.length > 0)
                            eltext = jQuery(".i_star").children("b").text().replace(/ /g, "");
                        else {
                            eltext = "";
                            jQuery(".i_star").append("&nbsp;<b style='font-weight:normal;'></b>");
                        }
                        if (eltext != "") {
                            var descval;
                            if (lFunction == options.removeFunction)
                                var descval = eltext * 1 - 1;
                            else
                                var descval = eltext * 1 + 1;
                            resultvalue = String(descval);
                        } else {
                            if (lFunction == options.addFunction)
                                resultvalue = "1";
                        }
                        var rezvalue = '';
                        if (resultvalue != "0" && resultvalue != '')
                            rezvalue = resultvalue;
                        fav_element.children("b").text(rezvalue);
                    }
                }

                element.data("TmeJobsFlag.isSelected", !lSelected);
                element.attr("class", lCssClass);
                element.text((!lSelected ? ldefaultTextSelected : ldefaultTextNotSelected));
                element.attr("vtipbody", (!lSelected ? ldefaultTipSelected : ldefaultTipNotSelected))
                if (o.additionalFunction) {
                    eval(o.additionalFunction + "(" + !lSelected + ",'" + o.additionalArgument + "')");
                }

                if (arguments[0]) {

                    var result = (new Function("return( " + arguments[0] + " );"))();

                    if (o.resultFunction) {
                        eval(o.resultFunction + "(" + JSON.stringify(result) + ", " + JSON.stringify(o) +" )");
                    }

                    if (result.isFreeToAddNew) {
                        jQuery('.' + o.cssClassInvisible).attr("class", o.cssClass).data("TmeJobsFlag.isInv", false);
                    } else {
                        jQuery('.' + o.cssClass).attr("class", o.cssClassInvisible).data("TmeJobsFlag.isInv", true);
                        if (!result.isAdded) jQuery("#" + o.elementId).attr("class", o.cssClassInvisible).data("TmeJobsFlag.isInv", true);
                        if (!result.isAdded && o.hideFunction) eval(o.hideFunction);
                    }

                }

                if (o.reload) {
                    window.location.href = window.location.href;
                }
            },
            onError: function() {

            }
        });


    }
};