/**
 * Klasse für die Bildergalerie.
 * 
 * @author  Helmut Lüdders <luedders@topconcepts.de>
 */
var CM_ImageGallerySwitch = Class.create();

CM_ImageGallerySwitch.prototype = {
    /**
     * Vorschau Url des aktuellen Bildes.
     * 
     * @type    {String}
     */
    _currentPreview: undefined,

    /**
     * Wie die Bilder durchgetauscht werden.
     * 
     * @type    {Number}
     */
    _displayType: undefined,

    /**
     * Die Id der Galerie.
     * 
     * @type    {Number}
     */
    _id: undefined,



    /**
     * Setzt den Effekt auf die Links
     * @constructor
     * 
     * @param   {Number}    id              Die Id der Bildergalerie.
     * @param   {Number}    displayType     Wie die Bilder durchgetauscht werden.
     * @param   {String}    [currentPreview]  Vorschau Url des aktuellen Bildes.
     */
    initialize: function(id, displayType, currentPreview) {
        this._id = id;
        this._displayType = displayType;
        this._currentPreview = currentPreview;

        var links = $('image_gallery_' + id).getElementsByTagName('a');
        $A(links).each(
            function(element) {
                element.onclick = this.change.bind(this, element);
            }.bind(this)
        );
    },



    /**
     * Wechselt das aktuelle Bild.
     * 
     * @param   {Object}    element Das angeklickte Element.
     */
    change: function(element) {
        var detail = $('image_gallery_detail_' + this._id);
        var img = detail.getElementsByTagName('img')[0];
        var title = detail.getElementsByTagName('div')[0];
        var description = detail.getElementsByTagName('p')[0];

        if (this._displayType == 1) {
            img.src = element.href;
            img.alt = element.title;
            title.firstChild.nodeValue = element.title;
            description.innerHTML = element.parentNode.getElementsByTagName('div')[0].innerHTML;
        } else {
            this.swap([img, 'src'], [element, 'href']);
            element.parentNode.getElementsByTagName('a')[1].href = element.href;
            this.swap([this, '_currentPreview'], [element.firstChild, 'src']);
            this.swap([img, 'alt'], [element, 'title']);
            element.parentNode.getElementsByTagName('a')[1].title = element.title;
            element.firstChild.alt = element.title;
            this.swap([title.firstChild, 'nodeValue'], [element.parentNode.getElementsByTagName('span')[0].firstChild, 'nodeValue']);
            this.swap([description, 'innerHTML'], [element.parentNode.getElementsByTagName('div')[0], 'innerHTML']);
        }

        return false;
    },



    /**
     * Wechselt zwei Attribute aus.
     * 
     * @param   {Array} from    Array mit dem Element und dem Attributnamen.
     * @param   {Array} to      Array mit dem zweiten Element und dem zweiten
     *                          Attributnamen.
     */
    swap: function(from, to) {
        var temp = from[0][from[1]];
        from[0][from[1]] = to[0][to[1]];
        to[0][to[1]] = temp;
    }
}