﻿// Plugin created by Daenu Probst http://codebrewery.blogspot.com/
// Modified by George Papadopoulos
(function ($) {
    $.fn.microAccordion = function (options) {
        var opts = $.extend({}, $.fn.microAccordion.defaults, options);
        return this.each(function () {
            var obj = $(this);
            var e = 0;
            var c = opts.cssClassClosed;
            var o = opts.cssClassOpen;
			var hc = opts.cssClassHoverClosed;
			var oc = opts.cssClassHoverOpen;
			var ci = opts.cssClassContentInit;
			obj.children(opts.container).children(opts.toggler).hover(function() {
				($(this).hasClass(c)) ? $(this).addClass(hc).removeClass(oc) : $(this).addClass(oc).removeClass(hc);
			}, function() {
				$(this).removeClass(hc).removeClass(oc);
			});
            obj.children(opts.container).each(function () {
                $(this).attr('id', 'micro-' + e);
				$(this).children().each(function () {
						var a = $(this);
						if ($(this) != opts.toggler) {
							// $(this).addClass(opts.cssClassContent);
							$(this).addClass(c);
						}
				});
                $(this).children(opts.toggler).click(function () {
                    var a = $(this);
                    /* if (opts.openSingle) {
                        obj.children(opts.container).each(function () {
                            if ($(this).attr('id') != a.parent().attr('id')) {
                                opts.closeFunction($(this).children(opts.element));
                                $(this).children(opts.toggler).removeClass(o).addClass(c);
                            }
                        });
                    } */
                    opts.toggleFunction(a.siblings());
                    (a.hasClass(c)) ? a.addClass(o).removeClass(c) : a.addClass(c).removeClass(o);
                    return false;
                }).each(function () {
                    (e == opts.defaultOpen) ? $(this).addClass(o).removeClass(c) : $(this).addClass(c).siblings().addClass(ci);
                });
                e++;
            });
        });
    };
    $.fn.microAccordion2 = function (options) {
        var opts = $.extend({}, $.fn.microAccordion.defaults, options);
        return this.each(function () {
            var obj = $(this);
            var e = 0;
            var c = opts.cssClassClosed;
            var o = opts.cssClassOpen;
			var hc = opts.cssClassHoverClosed;
			var oc = opts.cssClassHoverOpen;
			var ci = opts.cssClassContentInit;
			obj.children(opts.container).children(opts.toggler).hover(function() {
				($(this).hasClass(c)) ? $(this).addClass(hc).removeClass(oc) : $(this).addClass(oc).removeClass(hc);
			}, function() {
				$(this).removeClass(hc).removeClass(oc);
			});
            obj.children(opts.container).each(function () {
                $(this).attr('id', 'micro2-' + e);
				$(this).children().each(function () {
						var a = $(this);
						if ($(this) != opts.toggler) {
							// $(this).addClass(opts.cssClassContent);
							$(this).addClass(c);
						}
				});
                $(this).children(opts.toggler).click(function () {
                    var a = $(this);
                    /* if (opts.openSingle) {
                        obj.children(opts.container).each(function () {
                            if ($(this).attr('id') != a.parent().attr('id')) {
                                opts.closeFunction($(this).children(opts.element));
                                $(this).children(opts.toggler).removeClass(o).addClass(c);
                            }
                        });
                    } */
                    opts.toggleFunction(a.siblings());
                    (a.hasClass(c)) ? a.addClass(o).removeClass(c) : a.addClass(c).removeClass(o);
                    return false;
                }).each(function () {
                    (e == opts.defaultOpen) ? $(this).addClass(o).removeClass(c) : $(this).addClass(c).siblings().addClass(ci);
                });
                e++;
            });
        });
    };
    
     $.fn.microAccordion3 = function (options) {
        var opts = $.extend({}, $.fn.microAccordion.defaults, options);
        return this.each(function () {
            var obj = $(this);
            var e = 0;
            var c = opts.cssClassClosed;
            var o = opts.cssClassOpen;
			var hc = opts.cssClassHoverClosed;
			var oc = opts.cssClassHoverOpen;
			var ci = opts.cssClassContentInit;
			obj.children(opts.container).children(opts.toggler).hover(function() {
				($(this).hasClass(c)) ? $(this).addClass(hc).removeClass(oc) : $(this).addClass(oc).removeClass(hc);
			}, function() {
				$(this).removeClass(hc).removeClass(oc);
			});
            obj.children(opts.container).each(function () {
                $(this).attr('id', 'micro3-' + e);
				$(this).children().each(function () {
						var a = $(this);
						if ($(this) != opts.toggler) {
							// $(this).addClass(opts.cssClassContent);
							$(this).addClass(c);
						}
				});
                $(this).children(opts.toggler).click(function () {
                    var a = $(this);
                    /* if (opts.openSingle) {
                        obj.children(opts.container).each(function () {
                            if ($(this).attr('id') != a.parent().attr('id')) {
                                opts.closeFunction($(this).children(opts.element));
                                $(this).children(opts.toggler).removeClass(o).addClass(c);
                            }
                        });
                    } */
                    opts.toggleFunction(a.siblings());
                    (a.hasClass(c)) ? a.addClass(o).removeClass(c) : a.addClass(c).removeClass(o);
                    return false;
                }).each(function () {
                    (e == opts.defaultOpen) ? $(this).addClass(o).removeClass(c) : $(this).addClass(c).siblings().addClass(ci);
                });
                e++;
            });
        });
    };
    $.fn.microAccordion.defaults = {
    	container: 'div.micro',
    	toggler: 'a',
        cssClassOpen: 'micro-open',
        cssClassClosed: 'micro-closed',
		cssClassHoverOpen: 'micro-hover-open',
		cssClassHoverClosed: 'micro-hover-closed',
		cssClassContent: 'micro-content',
		cssClassContentInit: 'micro-hidden',
        openSingle: false,
        toggleFunction: function (obj) {
            obj.slideToggle();
        },
        closeFunction: function (obj) {
            obj.slideUp();
        },
        defaultOpen: 0
    };
})(jQuery);
