var PopCorn = function()//{{{
{
    var self = this;

    self.body = $(document.getElementsByTagName('body')[0]);
    self.mainNode = $('main');
    self.mainNodeDim = self.mainNode.getDimensions();
    self.openPopup = null;
    self.links = [];

    var links = document.getElementsByTagName('a');

    for (var i = 0; i < links.length; i++)
    {
        if (links[i].getAttribute('link'))
            self.addLink(links[i]);
    }

    window.onresize = function ()
    {
        if (self.openPopup == null
            || !self.openPopup.visible()) return;

        self.openPopup.position();
    }
    
    $$('.weiter').each( function(e, i) {
    	Event.observe(
            e,
            'click',
            function (nEvt)
            {
                var elm = e.up(".popupwraper");
                
                if (elm.currContent + 1 > elm.contents.length - 1)
                    elm.currContent = 0;
                else
                    elm.currContent++;

                for (var k = 0; k < elm.contents.length; k++)
                {
                    if (k != elm.currContent)
                        elm.contents[k].hide();
                }

                elm.contents[elm.currContent].show();
                
                Event.stop(nEvt);
            }
        );
    }
    );

}//}}}

PopCorn.prototype.addLink = function (elm)//{{{
{
    var self = this;
    

    var targetElement = $(elm.getAttribute('link'));

    if (!targetElement) return;

    var index = self.links.length;
    elm.index = index;
    self.links[elm.index] = elm;

    // {{{ rewrap
    elm.targetElement = targetElement.parentNode;

    if (elm.targetElement.className != 'popupwraper')
    {
        elm.targetElement = $(document.createElement('div'));
        elm.targetElement.className = 'popupwraper';
        elm.targetElement.hide();
        self.body.appendChild(elm.targetElement);
        targetElement.remove();
        elm.targetElement.appendChild(targetElement);
        targetElement.style.display = 'block';
    }
    // }}} rewrap

    elm.posTop = 30;
    elm.posLeft = 130;
    if (elm.targetElement.getAttribute('top'))
        elm.posTop = parseInt(elm.targetElement.getAttribute('top'));

    if (elm.targetElement.getAttribute('left'))
        elm.posLeft = parseInt(elm.targetElement.getAttribute('left'));

    // {{{ open effect
    elm.open = Effect.BlindDown;

    if (targetElement.getAttribute('open'))
    {
        try {
            var o = eval(targetElement.getAttribute('open'));
            if (typeof o == 'function') elm.open = o;
        } catch (err) {
            // tssst...
        }
    }
    // }}} open effect

    // {{{ close effect
    elm.close = Effect.BlindUp;

    if (targetElement.getAttribute('close'))
    {
        try {
            var c = eval(targetElement.getAttribute('close'));
            if (typeof c == 'function') elm.close = c;
        } catch (err) {
            // tssst...
        }
    }
    // }}} close effect

    var singleView = true, ch = null;
    elm.targetElement.contents = self.filter({elm: targetElement, attr: 'class', val: 'content'});
    elm.targetElement.currContent = 0;

    var n = {};
    elm.targetElement.head = self.filter({elm: targetElement, attr: 'class', val: 'title'})[0];

    // {{{ multiview
	 if (elm.targetElement.contents.length > 1)
    {
        for (var i = 0; i < elm.targetElement.contents.length; i++)
        {
            ch = $(elm.targetElement.contents[i]);
            if (i == 0) continue;

            ch.hide();
        }
		
		if (!Prototype.Browser.IE) {
			var pagx = elm.targetElement.head.down(".pager");    
       		if (pagx) pagx.remove();
       	}
        n.pager = document.createElement('div');
        n.pager.className = 'pager';
        elm.targetElement.head.appendChild(n.pager);

        n.prev = document.createElement('div');
        n.prev.className = 'prev';
        n.pager.appendChild(n.prev);

        n.prev.appendChild(document.createTextNode('<<'));

        // {{{ prev()
        Event.observe(
            n.prev,
            'click',
            function (pEvt)
            {
                if (elm.targetElement.currContent - 1 < 0)
                    elm.targetElement.currContent = elm.targetElement.contents.length - 1;
                else
                    elm.targetElement.currContent--;

                for (var k = 0; k < elm.targetElement.contents.length; k++)
                {
                    if (k != elm.targetElement.currContent)
                        elm.targetElement.contents[k].hide();
                }

                elm.targetElement.contents[elm.targetElement.currContent].show();

                Event.stop(pEvt);
            }
        );

        // }}} prev()

        n.next = document.createElement('div');
        n.next.className = 'next';
        n.pager.appendChild(n.next);

        n.next.appendChild(document.createTextNode('>>'));

        // {{{ next()
        Event.observe(
            n.next,
            'click',
            function (nEvt)
            {
                if (elm.targetElement.currContent + 1 > elm.targetElement.contents.length - 1)
                    elm.targetElement.currContent = 0;
                else
                    elm.targetElement.currContent++;

                for (var k = 0; k < elm.targetElement.contents.length; k++)
                {
                    if (k != elm.targetElement.currContent)
                        elm.targetElement.contents[k].hide();
                }

                elm.targetElement.contents[elm.targetElement.currContent].show();
                Event.stop(nEvt);
            }
        );
        // }}} next()

    }
    // }}} multiview

    // {{{ footer
    n.footer = document.createElement('div');
    n.footer.className = 'footer';
    targetElement.appendChild(n.footer);

    n.footer.appendChild(document.createTextNode('Schlie\u00dfen'));

    Event.observe(
        n.footer,
        'click',
        function (fEvt)
        {
            elm.close(elm.targetElement);
        }
    );
    
    // }}} footer
    
    var d, b = null, open = null, close = null;

    elm.position = function ()//{{{
    {
        self.mainNodePos = Position.cumulativeOffset(self.mainNode);
        b = self.body.getDimensions();
        d = elm.targetElement.getDimensions();
        var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;

        elm.targetElement.style.top = (h + elm.posTop) + 'px';
        if (b.width > 1000) elm.targetElement.style.left = (self.mainNodePos.left - elm.posLeft) + 'px';
        else elm.targetElement.style.left = Math.round((b.width - d.width) / 2) + 'px';
    }//}}}

    // {{{ open
    var popup = function ()
    {
        self.openPopup = elm;
        elm.position()
        elm.open(elm.targetElement);
    };

    Event.observe(
        elm,
        'click',
        function (cEvt)
        {
            // check for open popups and close
            // set a timeout to open the new one after
            // the one open is closed
            var tout = 0;
            for (var i = 0; i < self.links.length; i++)
            {
                if (i != elm.index && self.links[i].targetElement.visible())
                {
                    elm.close(self.links[i].targetElement);
                    tout = 700;
                }
            }

            if (tout > 0)
                window.setTimeout(popup, tout);
            else
                popup();
        }
    );
    // }}} open

}//}}}

PopCorn.prototype.filter = function (args)//{{{
{
    var self = this;

    var list = [], ch = null;

    for (var i = 0; i < args.elm.childNodes.length; i++)
    {
        ch = args.elm.childNodes[i];
        if ((ch.getAttribute && ch.getAttribute(args.attr) == args.val)
            ||
            (args.attr == 'class' && ch.className == args.val))
        {
            list[list.length] = ch;
        }
    }

    return list;
}//}}}
