/**
 * horizon.slim.0.2.js
 * Javascript Class - where the magic happens ;)
 *
 * @package      "Horizon Slim"
 * @version      0.2.6_RC3
 *
 * @description  A horizontal Accordion Slider for various purposes
 *
 * @author       Jan Jost <support@negetics.de>
 * @link         http://www.negetics.de
 * @linkProject  http://extensions.negetics.de
 * @copyright    Copyright (C) 2010 Jan Jost! All Rights Reserved
 * @license      GNU/GPLv3 see GPL.txt
 */
var descFader = new Array();

function horizon() {
    var x, v, r, C, E, D, k, u, c, f, F, b, y, q, j, h, B, s, i, e, d, o, a, A, z, n, g, p;
    this.build = function (R, L, U, K, W, G, X, M, ac, ab, ae, H, S, ad, I, t, w, N, l, P, T) {
        x = document.getElementById(R);
        v = L;
        r = U;
        C = K;
        W = W;
        E = G;
        x.clickEffect = X;
        x.even = M;
        u = ac;
        f = ab;
        F = ae;
        x.fC = H;
        b = x.getElementsByTagName("li");
        y = b.length;
        q = x.offsetWidth;
        j = Math.floor((q - v) / (y - 1));
        z = (q - (j * (y - 1)) - v);
        n = Math.floor(q / y);
        g = q - (Math.floor(q / y) * y);
        x.aSD = P;
        x.dDFO = T;
        l = l;
        x.dS = w;
        x.o = false;
        x.active = false;
        x.list_width = q / y;
        x.dD = S;
        x.dDH = ad;
        x.lastOver = false;
        x.lastOut = false;
        x.firstActive = x.active;
        x.aPOn = I;
        x.aPPause = false;
        x.clickStopsaP = t;
        x.aPSpeed = N;
        if (W != null) {
            x.a = b[W - 1]
        }
        if (navigator.appName.indexOf("Microsoft") != -1) {
            x.ie = true
        } else {
            x.ie = false
        }
        if (navigator.userAgent.indexOf("Mozilla") != -1) {
            x.mozilla = true
        } else {
            x.mozilla = false
        }
        if (navigator.userAgent.indexOf("Firefox") == -1) {
            r = parseInt(U * 2);
            C = parseInt(K / 2)
        }
        x.h = this;
        for (var V = 0; V < y; V++) {
            var Q = b[V];
            Q.style.width = x.list_width + "px";
            var af = Q.getElementsByTagName("div");
            var aa = af[0].getElementsByTagName("div");
            if (x.slideMin) {
                af[0].style.width = x.slideO + "px"
            }
            var Y;
            Q.desc = false;
            for (var J = 0; J < aa.length; J++) {
                if (aa[J].className == "neHSf") {
                    Y = aa[J];
                    Q.fader = aa[J]
                }
                if (aa[J].className == "neHSb") {
                    Q.desc = aa[J];
                    Q.desc.m = x;
                    if (!x.aSD) {
                        if (x.dD == 0) {
                            Q.desc.style.top = (Q.desc.parentNode.offsetHeight) + "px"
                        }
                        if (x.dD == 1) {
                            Q.desc.style.top = (0 - Q.desc.offsetHeight) + "px"
                        }
                        if (x.dDH == 0) {
                            Q.desc.style.left = (Q.desc.parentNode.offsetWidth) + "px"
                        }
                        if (x.dDH == 1) {
                            Q.desc.style.left = "-" + (Q.desc.offsetWidth) + "px"
                        }
                    } else {
                        if (x.dD == 0) {
                            Q.desc.style.top = (Q.desc.parentNode.offsetHeight - Q.desc.offsetHeight) + "px"
                        }
                        if (x.dD == 1) {
                            Q.desc.style.top = (0) + "px"
                        }
                        if (x.dDH == 0) {
                            Q.desc.style.left = (Q.desc.parentNode.offsetWidth - Q.desc.offsetWidth) + "px"
                        }
                        if (x.dDH == 1) {
                            Q.desc.style.left = "-" + (0) + "px"
                        }
                    }
                    var O = Q.desc.getElementsByTagName("div");
                    Q.desc.beBa = O[0];
                    Q.desc.beTe = O[1];
                    x.h.sO(Q.desc.beBa, l);
                    Q.desc.beBa.style.width = Q.desc.offsetWidth + "px";
                    Q.desc.beBa.style.height = Q.desc.offsetHeight + "px";
                    Q.desc.s = Q;
                    Q.desc.beBa.s = Q;
                    this.setClick(Q.desc.beBa)
                }
                if (aa[J].className == "neHSiO") {
                    Q.fadeInImg = aa[J];
                    x.h.sO(Q.fadeInImg, 0);
                    Q.fadeInImg.s = Q;
                    this.setClick(Q.fadeInImg)
                }
                if (aa[J].className == "neHSi") {
                    Q.img = aa[J];
                    Q.img.s = Q;
                    this.setClick(Q.img)
                }
                var m = aa[J].parentNode.getElementsByTagName("img");
                if (m.length > 0) {
                    var Z = m[0];
                    Q.handle = Z;
                    Q.handle.s = Q;
                    this.setClick(Q.handle)
                }
            }
            Q.num = V;
            this.sO(Y, 0);
            if (V == W - 1) {
                x.a = Q
            }
            this.timerFade(Q)
        }
        if (W != null) {
            x.o = b[W - 1];
            x.a = b[W - 1]
        }
        x.timerFade = setInterval(function () {
            x.h.fade(false)
        }, r);
        x.onmouseout = function () {
            if (x.fC) {
                x.a = false
            }
            x.lastOver = x.o;
            x.o = false;
            x.aPPause = false
        };
        if (x.aPOn) {
            x.h.startaP()
        }
        return (this)
    };
    this.setClick = function (l) {
        if (x.clickEffect || (l.s.handle && l.s.handle == l)) {
            l.onclick = function () {
                x.slideEnded = false;
                l = this.s;
                if (x.clickStopsaP) {
                    x.h.stopaP()
                }
                if (l == x.a && !E) {
                    var m = -1;
                    for (var t = 0; t < y; t++) {
                        var w = b[t];
                        if (w == x.a && m == -1) {
                            m = parseInt(t)
                        }
                    }
                    if (u == 0) {
                        if (m < y - 1 && m != -1) {
                            x.a = b[m + 1];
                            l = b[m + 1]
                        } else {
                            x.a = b[0];
                            l = b[0]
                        }
                    } else {
                        if (m > 0 && m != -1) {
                            x.a = b[m - 1];
                            l = b[m - 1]
                        } else {
                            x.a = b[y - 1];
                            l = b[y - 1]
                        }
                    }
                } else {
                    x.a = l
                }
                clearInterval(x.timerFade);
                x.timerFade = setInterval(function () {
                    x.h.fade(l)
                }, r)
            }
        }
    };
    this.fadeDesc = function (m) {
        if (x.o) {
            m = x.o.desc
        } else {
            if (x.a) {
                m = x.a.desc
            }
        }
        var l = false;
        if (x.aSD == false && (m && (m.s == x.o || m.s == x.a) && m.parentNode.style.width == m.parentNode.parentNode.style.width)) {
            l = x.h.moveIt(m, x.dD, true)
        }
        if (x.aSD == false && (x.a && x.a.desc && x.a.desc.parentNode.style.width == x.a.desc.parentNode.parentNode.style.width) && (!x.dDFO || x.o == x.a)) {
            l = x.h.moveIt(x.a.desc, x.dD, true)
        }
        x.h.clearDesc(m.s);
        x.re = l;
        return (l)
    };
    this.clearDesc = function (w) {
        if (x.o) {
            w = x.o
        } else {
            if (x.a) {
                w = x.a
            }
        }
        var m = true;
        for (var l = 0; l < b.length; l++) {
            var t = b[l].desc;
            if (x.aSD == false && ((t && w != t.s && (!x.a || t.s != x.a)) || (x.dDFO && x.o && x.o != t.s) || (t.parentNode.style.width != t.parentNode.parentNode.style.width && (x.dDFO || (x.a && x.a != t.s))))) {
                m = x.h.moveIt(t, x.dD, false)
            }
        }
        return (m)
    };
    this.moveIt = function (M, w, G) {
        var K = x.dD;
        var L = true;
        var H;
        var t;
        if (G) {
            t = 2
        } else {
            t = 1
        }
        if (M.style) {
            if (x.dD == 0) {
                if (G) {
                    H = M.offsetHeight
                } else {
                    H = 0
                }
                var m = (M.parentNode.offsetHeight - H);
                var J = parseInt(M.style.top);
                if (J > m || (!G && J < m)) {
                    var l;
                    if (G) {
                        l = parseInt((J - m) / x.dS)
                    } else {
                        l = parseInt((m - J) / x.dS)
                    }
                    l = (l > 0) ? l : t;
                    if (!G) {
                        l = l * -1
                    }
                    var I = J - l;
                    if (I > m || (!G && J < m)) {
                        M.style.top = I + "px"
                    } else {
                        M.style.top = m + "px";
                        L = true
                    }
                }
            }
            if (x.dD == 1) {
                if (!G) {
                    H = M.offsetHeight
                } else {
                    H = 0
                }
                var m = 0 - H;
                var J = parseInt(M.style.top);
                if (J < m || (!G && J > m)) {
                    var l;
                    if (G) {
                        l = parseInt((m - J) / x.dS)
                    } else {
                        l = parseInt((J - m) / x.dS)
                    }
                    l = (l > 0) ? l : t;
                    if (!G) {
                        l = l * -1
                    }
                    var I = J + l;
                    if (I < m || (!G && J > m)) {
                        M.style.top = I + "px"
                    } else {
                        M.style.top = m + "px";
                        L = true
                    }
                }
            }
            if (x.dDH == 0) {
                if (G) {
                    H = M.offsetWidth
                } else {
                    H = 0
                }
                var m = (M.parentNode.offsetWidth - H);
                var J = parseInt(M.style.left);
                if (J > m || (!G && J < m)) {
                    var l;
                    if (G) {
                        l = parseInt((J - m) / x.dS)
                    } else {
                        l = parseInt((m - J) / x.dS)
                    }
                    l = (l > 0) ? l : t;
                    if (!G) {
                        l = l * -1
                    }
                    var I = J - l;
                    if (I > m || (!G && J < m)) {
                        M.style.left = I + "px"
                    } else {
                        M.style.left = m + "px";
                        L = true
                    }
                }
            }
            if (x.dDH == 1) {
                if (!G) {
                    H = M.offsetWidth
                } else {
                    H = 0
                }
                var m = 0 - H;
                var J = parseInt(M.style.left);
                if (J < m || (!G && J > m)) {
                    var l;
                    if (G) {
                        l = parseInt((m + -J) / x.dS)
                    } else {
                        l = parseInt((J - m) / x.dS)
                    }
                    l = (l > 0) ? l : t;
                    if (!G) {
                        l = l * -1
                    }
                    var I = J + l;
                    if (I < m || (!G && J > m)) {
                        M.style.left = I + "px"
                    } else {
                        M.style.left = m + "px";
                        L = true
                    }
                }
            }
        }
        return (L)
    };
    this.timerFade = function (l) {
        l.onmouseover = function () {
            x.o = l;
            x.aPPause = true;
            if ((!x.lastOver && !x.o) || (x.lastOver.num && x.lastOver.num != x.o.num) || (x.fC && !E)) {
                clearInterval(x.timerFade);
                x.timerFade = setInterval(function () {
                    x.h.fade(l)
                }, r)
            }
            x.lastOver = l
        }
    };
    this.startaP = function () {
        if (x.aP) {
            clearInterval(x.aP)
        }
        x.o = false;
        x.aP = setInterval(function () {
            x.h.aP()
        }, x.aPSpeed)
    };
    this.stopaP = function () {
        if (x.aP) {
            clearInterval(x.aP)
        }
    };
    this.aP = function () {
        if (!x.aPPause) {
            if (!x.a) {
                x.a = b[b.length - 1]
            }
            var l = x.a.num;
            var m = false;
            if (u == 0) {
                if (l < y - 1 && l != -1) {
                    x.a = b[l + 1];
                    m = b[l + 1]
                } else {
                    x.a = b[0];
                    m = b[0]
                }
            } else {
                if (l > 0 && l != -1) {
                    x.a = b[l - 1];
                    m = b[l - 1]
                } else {
                    x.a = b[y - 1];
                    m = b[y - 1]
                }
            }
            clearInterval(x.timerFade);
            x.timerFade = setInterval(function () {
                x.h.fade(m)
            }, r)
        }
    };
    this.slide = function (J) {
        var Q = x.list_width;
        x.slideEnded = false;
        if (J == undefined) {
            J = false
        }
        if (J.style) {
            var t = parseInt(J.style.width)
        }
        if (J == false && x.even == true && !x.a || (x.a == undefined && !J)) {
            if (Q != parseInt(Q)) {
                Q = Q - (0.003 * y)
            }
            x.h.clearDesc(J);
            x.slideEnded = true;
            var T = new Array();
            var V = new Array();
            var K = 0;
            for (var R = 0; R < y; R++) {
                O = b[R];
                w = parseInt(O.style.width);
                if (w <= n) {
                    V[V.length] = O;
                    K = K + parseInt(O.style.width)
                } else {
                    if (w > n) {
                        T[T.length] = O
                    }
                }
            }
            var S = q;
            var N = g;
            var U = y;
            for (var R = 0; R < T.length; R++) {
                var O, w, G;
                var L = 0;
                O = T[R];
                w = parseInt(O.style.width);
                L = Math.ceil((w - n) / C);
                L = (L > 0) ? L : 1;
                if (w - L > n) {
                    G = w - L;
                    x.slideEnded = false
                } else {
                    G = n;
                    if (N > 0) {
                        var I = Math.ceil(N / U);
                        G = G + I;
                        N = N - I
                    }
                }
                if (S - G < 0) {
                    G = G + (S - G)
                }
                O.style.width = (G) + "px";S = S - G;U--
            }
            var m = V.length;
            L = Math.floor((S - K) / m);
            L = (L > 0) ? L : 1;
            for (var R = 0; R < V.length; R++) {
                O = V[R];
                w = parseInt(O.style.width);
                if (w + L <= n || (N > 0 && w + L <= n + 1)) {
                    G = w + L;
                    if (w + L < n + 1) {
                        x.slideEnded = false
                    }
                } else {
                    G = n
                }
                if (R == V.length - 1) {
                    G = (S)
                }
                if (N > 0) {
                    var I = Math.ceil(N / U);
                    G = G + I;
                    N = N - I
                }
                if (S - G < 0) {
                    G = G + (S - G)
                }
                O.style.width = (G) + "px";
                S = S - G;
                U--
            }
        } else {
            if (t < v || (J == false && x.a && parseInt(x.a.style.width) < v)) {
                x.h.clearDesc(J);
                var H = 0;
                var R = 0;
                var M = z;
                for (R; R < y; R++) {
                    if (b[R] != J || (J == false && b[R] != x.a)) {
                        var O, w;
                        var L = 0;
                        O = b[R];
                        w = parseInt(O.style.width);
                        if (w > j) {
                            L = Math.floor((w - j) / C);
                            L = (L > 0) ? L : 1;
                            var l = w - L;
                            if (l == j && M > 0) {
                                l++;
                                M--;
                                L--
                            }
                            O.style.width = (l) + "px"
                        }
                        H = H + (w - L)
                    }
                }
                if (J.style) {
                    J.style.width = (q - H) + "px"
                } else {
                    if (J == false && x.a) {
                        var P = parseInt(q);
                        for (var R = 0; R < y; R++) {
                            if (b[R] != x.a) {
                                P = P - parseInt(b[R].style.width)
                            }
                        }
                        x.a.style.width = (P) + "px"
                    }
                }
            } else {
                x.slideEnded = true;
                if (x.a && x.a.desc) {
                    x.a.desc.aktiv = true;
                    x.slideEnded = x.h.fadeDesc(x.a.desc)
                }
                if ((J && J.desc) && J != x.a) {
                    J.desc.aktiv = true;
                    x.slideEnded = x.h.fadeDesc(J.desc)
                }
            }
        }
    };
    this.fade = function (L) {
        if ((E || x.fC)) {
            if (x.o != false && E) {
                x.h.slide(x.o)
            } else {
                if (x.fC && L == false) {
                    x.a = false;
                    x.o = false
                }
                if (x.even && L == false) {
                    x.h.slide(false)
                } else {
                    if (x.a) {
                        x.h.slide(x.a)
                    } else {
                        x.h.slide(false)
                    }
                }
            }
        } else {
            if (x.a) {
                x.h.slide(x.a)
            }
        }
        var w = 0;
        var J = x.getElementsByTagName("li");
        var t = J.length;
        var G = 1;
        for (w; w < t; w++) {
            var H;
            var I = J[w];
            H = this.gO(I.fader);
            if (I != x.a || (x.dDFO && x.a != x.o)) {
                if (H < F) {
                    I.fader.style.display = "block";
                    H = H + 0.04;
                    this.sO(I.fader, H);
                    if (H < F) {
                        G = 0
                    }
                }
                if (I.fadeInImg && I != x.o) {
                    var m = this.gO(I.fadeInImg);
                    m = m - 0.04;
                    m = (m > 0) ? m : 0;this.sO(I.fadeInImg, m);
                    if (m > 0) {
                        G = 0
                    }
                }
            }
        }
        if (x.a && (!x.dDFO || (x.dDFO && !x.o))) {
            H = H - f;
            if (x.a.fader.style.display != "none") {
                this.sO(x.a.fader, 0);
                x.a.fader.style.display = "none"
            }
            if (x.a.fadeInImg) {
                var m = this.gO(x.a.fadeInImg);
                m = m + 0.04;
                if (m < 1) {
                    this.sO(x.a.fadeInImg, m);
                    if (m < 1) {
                        G = 0
                    }
                } else {
                    this.sO(x.a.fadeInImg, 1)
                }
            }
        }
        if (x.o) {
            var H;
            H = this.gO(x.o.fader);
            if (H > 0) {
                H = H - f;
                if (x.o.fader.style.display != "none") {
                    this.sO(x.o.fader, 0);
                    x.o.fader.style.display = "none"
                }
            }
            if (x.o.fadeInImg) {
                var m = this.gO(x.o.fadeInImg);
                m = m + 0.04;
                m = (m < 1) ? m : 1;
                if (m < 1) {
                    this.sO(x.o.fadeInImg, m);
                    if (m < 1) {
                        G = 0
                    }
                } else {
                    this.sO(x.o.fadeInImg, 1)
                }
            }
        }
        var K = true;
        if (x.a) {
            K = x.h.clearDesc(x.a)
        }
        if (G == 1 && K && (x.slideEnded || (x.slideEnded == undefined && x.even))) {
            x.o = false;
            x.lastOver = false
        }
    };
    this.sO = function (l, m) {
        if (x.ie) {
            var t = parseInt(m * 100);
            if (t > (100)) {
                t = 100
            }
            l.style.filter = "alpha(opacity=" + t + ")"
        } else {
            l.style.opacity = m
        }
    };
    this.gO = function (l) {
        var m;
        if (x.ie) {
            m = parseInt(parseFloat(l.style.filter.replace(/[\D\.]/g, ""))) / 100
        } else {
            m = parseFloat(l.style.opacity)
        }
        return (m)
    }
};
