if ($.tablesorter != undefined) {
    $.tablesorter.addParser({
        id: 'customTodyDate',
        is: function(s) {
            return false;
        },
        format: function(s) {
            var opts = s.split('/');
            return new Date(opts[2], parseInt(opts[1], 10) - 1, opts[0]);
        },
        type: 'numeric'
    });
    $.tablesorter.addParser({
        id: 'customTodyDateTime',
        is: function(s) {
            return false;
        },
        format: function(s) {
            s = $.trim(s);
            var split = s.split(' ');
            var datePart = split[0];
            var timePart = split[1];
            var opts = datePart.split('/');
            var minutes = timePart.split('');
            return new Date(opts[2], parseInt(opts[1], 10) - 1, opts[0], minutes[0], minutes[1]);
        },
        type: 'numeric'
    });
}

$(document).ready(function() {
    $(".needsAllAttribute").each(function() {
        var name = $(this).find("input").attr("name");
        var html = '<input type="radio" id="' + $(this).attr("id") + '_All" value="Toate" name="' + name + '"><label id="' + $(this).attr("id") + '_All_Label" for="' + $(this).attr("id") + '_All">Toate</label>';
        $(this).prepend(html);
    });

    var url = window.location;
    var stringUrl = url + "";
    if (stringUrl.indexOf("exactSearch=false") != -1) {
        $("input[id=btnSubmitSearch]").removeClass("submit");
        $("input[id=btnSubmitSearch]").addClass("submitGray");
    }
    if (stringUrl.indexOf("exactSearch=true") != -1) {
        $("input[id=btnSubmitExactSearch]").removeClass("submit");
        $("input[id=btnSubmitExactSearch]").addClass("submitGray");
    }

    $("input[id*=searchfilterlist]").click(function() {
        $("#searchfilterlist").find("input[id*=searchfilterlist]").removeAttr('checked');
        $(this).attr('checked', 'checked');
    });

    var trafficLink = $("a[href=http://www.trafic.ro/?rid=tody]");
    if (trafficLink != null && (typeof outboundLinkTitleTrafic != 'undefined')) {
        $(trafficLink).attr("title", outboundLinkTitleTrafic);
    }

});


String.prototype.format = function() {
    var result = new String(this);
    for (var i = 0; i < arguments.length; i++) {
        var reg = new RegExp("\\{" + i + "\\}", "gm");
        result = result.replace(reg, arguments[i]);
    }

    return result;
}

String.prototype.endsWith = function(suffix) {
    return (this.substr(this.length - suffix.length) === suffix);
}

String.prototype.startsWith = function(prefix) {
    return (this.substr(0, prefix.length) === prefix);
}

if (!Array.prototype.forEach) {
    Array.prototype.forEach = function(fun /*, thisp*/) {
        var len = this.length;
        if (typeof fun != "function")
            throw new TypeError();

        var thisp = arguments[1];
        for (var i = 0; i < len; i++) {
            if (i in this)
                fun.call(thisp, this[i], i, this);
        }
    };
}

Array.prototype.groupBy = function(keyName) {
    var res = {};
    this.forEach(function(x) {
        var k = x[keyName];
        var v = res[k];
        if (!v) v = res[k] = [];
        v.push(x);
    });
    return res;
};

Array.prototype.indexOf = function(obj, fromIndex, predicate) {
    if (fromIndex == null) {
        fromIndex = 0;
    } else if (fromIndex < 0) {
        fromIndex = Math.max(0, this.length + fromIndex);
    }

    if ($.isFunction(obj)) {
        predicate = obj;
    }

    for (var i = fromIndex, j = this.length; i < j; i++) {
        if ((predicate && predicate(this[i])) || this[i] === obj) {
            return i;
        }
    }
    return -1;
};

// http: //ejohn.org/blog/javascript-array-remove/
Array.prototype.remove = function(from, to) {
    var rest = this.slice((to || from) + 1 || this.length);
    this.length = from < 0 ? this.length + from : from;
    return this.push.apply(this, rest);
};

Array.prototype.removeBy = function(predicate) {
    var idx = this.indexOf(predicate);
    if (idx > -1)
        this.remove(idx);
    else
        throw "Could not remove item from array. The index: " + idx + " is outside the range : [0.." + this.length + "]";
    return this;
}



Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}

String.prototype.containsOneOf = function(array) {
    var i = array.length;
    while (i--) {
        var x = ".*" + array[i] + ".*";
        if (this.match(x)) {
            return true;
        }
    }
    return false;
}

var _basePath = '/';
var _buttonCSSClass = 'btnBlue';
var lastSubmittedForm;
var _pagesThatSupportSearch = ['paidorder', 'freeorder', 'additionalact', 'catalog'];
var profileAssistanceOffCookieName = 'profileAssistanceOffCookie';

var imageUrl = function(filename) {
    return (_basePath + 'content/images/' + filename).replace('//', '/');
};

var actionUrl = function(url) {
    return (_basePath + url).replace('//', '/');
};

var actionAdminUrl = function(url) {
    return (_basePath + "adminmvc/" + url).replace('//', '/');
};

if (typeof (Tody) === "undefined") var Tody = {};

(function($) {


    Tody.Common = {

        verifyHtml: function(ed, e, textLength, dontShowNotice) {

            if (e == "mceRepaint" || e == "mceSetContent") return;

            var editorId = ed.id;
            var elem = "#" + editorId;
            var control = $(elem);
            var parent = $(control).parent();
            var containerDiv = "<div class='characterCount'></div>"
            if ($(parent).find('.characterCount').length <= 0) {
                $(parent).append(containerDiv);
            }

            $(parent).find('.characterCount').html("");

            if (dontShowNotice) return;

            $(parent).find('.characterCount').append("<label style='color:Red;font-style:italic; width: 100%;'>Daca modificati prea mult html-ul este posibil ca pagina sa nu mai fie valida html</label><br/>");



            txt = tinymce.activeEditor.getContent().replace(/&nbsp;/ig, " ");
            if (textLength) {
                if (txt.length > textLength) {
                    txt = txt.substring(0, textLength);
                    tinymce.execCommand('mceSetContent', false, txt);
                }
            }

            var html = "<p>Numar de caractere cu html: " + txt.length + "</p>";
            $(parent).find('.characterCount').append(html);

            var txtNoHtml = txt.replace(/(<([^>]+)>)/ig, "").replace(/&nbsp;/ig, " ");
            txtNoHtml = txtNoHtml.replace(/ /g, "");
            html = "<p>Numar de caractere fara html: " + txtNoHtml.length + "</p><br/>";
            $(parent).find('.characterCount').append(html);


        },

        addToUpperFunction: function() {

            $("input:text.toUppercase")
                          .blur(function() {
                              var str = $(this).val().toUpperCase();
                              $(this).val(str);
                          });
        },

        addToLowerFunction: function() {

            $("input:text.toLowercase")
                          .blur(function() {
                              var str = $(this).val().toLowerCase();
                              $(this).val(str);
                          });
        },

        showLoading: function(elementToOverlay) {
            var width = $(elementToOverlay).outerWidth();
            var height = $(elementToOverlay).outerHeight();

            var offset = $(elementToOverlay).offset();

            var overlayDiv = $('<div />').attr('id', 'overlay').hide().appendTo('body')
						     .css('border-width', 0)
						     .css('margin', 0)
						     .css('padding', 0)
						     .css('background', '#fff none repeat scroll 0 0')
						     .css('display', 'none')
						     .css('height', height + 'px')
							   .css('width', width + 'px')
						     .css('top', offset.top)
						     .css('left', offset.left)
						     .css('filter', 'alpha(opacity=50)')
						     .css('opacity', '0.70')
						     .css('width', width)
						     .css('z-index', 50)
						     .css('vertical-align', 'middle')
						     .css('position', 'absolute')
						     .addClass('wraptocenter');

            var innerDiv = $("<div style='margin:auto;height:16px;width:16px;'/>").css('top', height / 2);

            innerDiv.appendTo(overlayDiv);

            var innerImage = $("<img/>").attr({
                src: actionUrl("/Content/ajax-loader.gif"),
                alt: 'loader'
            })
                                        .css('margin', 'auto')
                                        .appendTo(innerDiv);


            overlayDiv.show();


            return overlayDiv;

        },
        hideLoading: function(overlayToHide) {
            $(overlayToHide).hide();
        },

        submitFormOnEnter: function(element, event) {
            if (event.keyCode == 13 && $(event.target || event.srcElement).is("input")) {
                if ($(element).children("form:eq(0)").valid()) {
                    $(element).children('input').blur();
                    var submitBtn = $(element).find('.btnBlue');
                    submitBtn.after($('<div class="btnBlue"><img src="' + imageUrl('working-button.gif') + '" alt="loader"/><span>Va rugam sa asteptati..</span></div>'));
                    submitBtn.remove();
                    $(element).children("form:eq(0)").submit();
                }
            }
        },

        doSearchOnEnter: function(event) {
            if (event.keyCode == 13) {
                $(event.target).parent().find("input[id=btnSubmitSearch]").click();
            }
        },

        submitForm: function(link, confirmationQuestion) {

            if (confirmationQuestion) {
                Boxy.confirm(confirmationQuestion,
		            function() {
		                Tody.Common.submitForm(link);
		            },
		            function() {
		                $(link).setWorking(false);
		            },
                {
                    title: "Confirmare",
                    closeOnButtonClick: true
                }
              );
                return false;
            } else {
                var formToSubmit = $(link).parents('form:eq(0)');
                formToSubmit.submit();
                return false;
            }
        },

        submitFormWithId: function(link, id) {
            var formToSubmit = $('#' + id);
            formToSubmit.submit();
            lastSubmittedForm = formToSubmit;
            return false;
        },

        changePageSize: function(selectEl, prefix) {

            var newPageSizeValue = $(selectEl).find(":selected").val();

            var propertyName = "pagesize";

            if (prefix) {
                propertyName = prefix + propertyName;
            }

            var redirectUrl = Tody.Common.createRedirectUrl(propertyName, newPageSizeValue);
            window.location = redirectUrl;
        },

        searchFor: function(btn, exactSearch) {
            var textToSearch = $(btn).parent().find("input:text").val();

            var filters = "";
            var allFilters = $(btn).parent().find("input:checkbox[name=searchfilterlist]:checked");
            allFilters.each(function() {
                filters += $(this).val() + ",";
            });
            if (filters != "") {
                filters = filters.substr(0, filters.length - 1);
            }
            var redirectUrl = Tody.Common.createRedirectUrlForSearch("searchstring", textToSearch, "exactSearch", exactSearch, "searchFilter", filters);
            window.location = redirectUrl;
        },

        recalculateContentPadding: function() {

            //	        if($.browser.msie && $.browser.version == "6.0"){
            ////	          $("#content_outer").addClass("notlogged");
            ////	          $("#content_outer").removeAttr('id');
            //	        }else{
            ////	          var height = $("#header").height();
            ////	          $("#content_outer").css("padding-top",height + "px");
            //	        }


        },

        createRedirectUrl: function(propName, val, excludeProperties) {

            var resultQueryString = "?";

            var qStringParts = (location.search.substr(1)).split("&");
            for (var i = 0; i < qStringParts.length; i++) {
                var keyValue = qStringParts[i].split("=");

                if (keyValue[0].toLowerCase() === propName.toLowerCase())
                    continue;
                if (excludeProperties && excludeProperties.contains(keyValue[0].toLowerCase()))
                    continue;

                resultQueryString += qStringParts[i] + "&";
            }

            resultQueryString = resultQueryString.replace(/\&$/gi, "");

            resultQueryString += "&" + propName + "=" + val;

            resultQueryString = resultQueryString.replace(/^\?\&/gi, "?");
            return location.pathname + resultQueryString;
        },

        createRedirectUrlMvc: function(propName, val, excludeProperties) {

            var resultQueryString = "?";

            var qStringParts = (location.search.substr(1)).split("&");
            for (var i = 0; i < qStringParts.length; i++) {
                var keyValue = qStringParts[i].split("=");

                if (keyValue[0].toLowerCase() === propName)
                    continue;
                if (excludeProperties && excludeProperties.contains(keyValue[0].toLowerCase()))
                    continue;

                resultQueryString += qStringParts[i] + "&";
            }

            resultQueryString = resultQueryString.replace(/\&$/gi, "");

            resultQueryString += "&" + propName + "=" + val;

            resultQueryString = resultQueryString.replace(/^\?\&/gi, "?");

            var root = location.pathname.toLowerCase().replace("/tody/", "");
            var index = root.indexOf("/");

            if (index > 0)
                root = root.substring(0, index);

            return actionUrl(root + resultQueryString);
        },

        createRedirectUrlForSearch: function(propName, val, searchType, searchTypeVal, searchFilter, filters) {
            var resultQueryString = "?";

            if (location.pathname.containsOneOf(_pagesThatSupportSearch)) {

                var qStringParts = (location.search.substr(1)).split("&");
                for (var i = 0; i < qStringParts.length; i++) {
                    var keyValue = qStringParts[i].split("=");

                    var lowerCaseKeyValue = keyValue[0].toLowerCase();

                    if (lowerCaseKeyValue === propName || lowerCaseKeyValue === searchType.toLowerCase() || lowerCaseKeyValue === searchFilter.toLowerCase())
                        continue;

                    resultQueryString += qStringParts[i] + "&";
                }

                resultQueryString = resultQueryString.replace(/\&$/gi, "");
                resultQueryString += "&" + propName + "=" + encodeURIComponent(val);
                resultQueryString += "&" + searchType + "=" + encodeURIComponent(searchTypeVal);
                resultQueryString += "&" + searchFilter + "=" + encodeURIComponent(filters);
                resultQueryString = resultQueryString.replace(/^\?\&/gi, "?");

                return location.pathname + resultQueryString;
            }
            else {
                return actionUrl("/catalog?" + propName + "=" + encodeURIComponent(val) + "&" + searchType + "=" + searchTypeVal + "&" + searchFilter + "=" + filters);
            }
        },

        getLinkButton: function(action, title, icon) {

            var href = actionUrl(action);
            var cssclass = "";

            if (title === "DA" || title === "Da")
                cssclass = "btnGreen";
            else
                cssclass = "btnBlue";

            return "<a href='" + href + "' class='" + cssclass + "'><img src='" + imageUrl(icon) + "' alt='link' />" + title + "</a>";
        },

        getUtilButton: function(action, title, icon, onclick) {

            var href = actionUrl(action);

            var link = $("<a/>").attr('href', href)
                        .addClass(_buttonCSSClass);

            link.append($("<img/>").attr({ src: imageUrl(icon),
                alt: 'util'
            }));
            link.append(title);

            if (onclick)
                link.attr('onclick', onclick + ';return false;');

            return $("<li></li>").append(link)[0];

            //return "<li><a href='" + href + "' class='" + _buttonCSSClass + "'><img src='" + imageUrl(icon) + "' />" + title + "</a></li>";

        },

        getBoxyCloseButton: function(title, icon) {

            return "<a href='#' onclick='Tody.Common.closeBoxy(this);' class='" + _buttonCSSClass + "'><img src='content/images/" + icon + "' alt='close' />" + title + "</a>";

        },

        closeBoxy: function(button) {

            var box = Boxy.get(button);
            box.hideAndUnload();
        },

        popupWindow: function(url) {
            return window.open(url, null,
                      'top=0,left=0,width=' +
                          (window.screen.width) +
                          ',height='
                          + (window.screen.height)
                          + ',resizable=yes,status=yes,toolbar=no,menubar=no,location=yes,scrollbars=yes');
        },

        printWindow: function(url) {
            var newwindow = Tody.Common.popupWindow(url);

            if (jQuery.browser.mozilla) {
                newwindow.onload = function() {
                    newwindow.print();
                }
            } else {
                newwindow.print();
            }
        },

        showBoxyAlert: function(message) {
            Boxy.alert(message, null,
                {
                    title: "Atentie",
                    closeOnButtonClick: true
                }
              );
        },

        getUrlParameter: function(name) {
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(window.location.href);
            if (results == null)
                return "";
            else
                return results[1];
        },

        goToPage: function(imgButton) {
            var newPage = $(imgButton).parent().find("input:text").val();
            if (isNaN(newPage)) {
                Tody.Common.showBoxyAlert("Trebuie sa introduceti un numar pentru a putea naviga la acea pagina");
                return;
            }

            window.location = Tody.Common.createRedirectUrl("page", newPage);
        }
    };

})(jQuery);

