// Custom JavaScripts for conference

window.addEvent('domready', function() {
    if ($('main').getElements('.video')) {
        var videos	=	$('main').getElements('.video');
        videos.each(function(item,index) {
            var src		=	item.getProperty('src');
            var img		=	item.getProperty('img');
            var height	=	item.getProperty('height');
            var width	=	item.getProperty('width');
            item.setHTML('<object wmode="transparent"><param name="wmode" value="transparent"/><param name="FlashVars" value="file='+src+'&amp;backcolor=0x000000&amp;frontcolor=0xCCCCCC&amp;lightcolor=0x557722&amp;image='+img+'"/><embed type="application/x-shockwave-flash" src="http://entwickler.de/zonen/magazine/videos/flvplayer.swf" style="" id="single" name="single" quality="high" allowfullscreen="true" flashvars="file='+src+'&amp;backcolor=0x000000&amp;frontcolor=0xCCCCCC&amp;lightcolor=0x557722&amp;image='+img+'" height="'+height+'" width="'+width+'"></object>');
        });
    }
	
    if ($('twitter')) {
				
        twitterContainer	=	$('twitter');
        twitterID			=	twitterContainer.getProperty('user');
        twitterName			=	twitterContainer.getProperty('name');
        twitterLimit		=	4;
				
        // http://twitter.com/statuses/user_timeline/*twitterID*.json
        twitterRequestUrl		=	"/konferenzen/ext_scripts/v1/php/twitterJSON.php?twitterID=" + twitterID;
        twitterRequestUrl1                =        "/konferenzen/ext_scripts/v1/php/twitterJSON1.php?twitterID=" + twitterID;
        twitterRequestUrl2                =        "/konferenzen/ext_scripts/v1/php/twitterJSON2.php?twitterID=" + twitterID;

        var twitterJSON1 = new Json.Remote(twitterRequestUrl1, {
            onComplete: function(twitter){
                //alert(twitter);
                if(twitter != 0){
                    sortTwitterData(twitter);

                } else {
                    var twitterList =    new Element('ul').setProperty('id','twitterlists');
                    li = new Element('li').setStyle('visibility','hidden');
                    new Element('div').setProperty('class','content').setHTML("Twitter is currently not available.").injectInside(li);
                    li.injectInside(twitterList);
                    twitterList.injectInside(twitterContainer);

                    twitterContainerHeight = $('twitter').getStyle('height');
                    if (window.ie != true) {
                        twitterContainer.setStyle('height', 70);
                        new Fx.Style(twitterContainer, 'height', {
                            duration: 250,
                            transition: Fx.Transitions.linear
                            }).start(70,twitterContainerHeight);
                    } else {
                        col3Height	=	col3.getStyle('height').toInt();
                        col3.setStyle('height', col3Height+600);
                    }

                    twitterListings        =        $('twitterlists').getElements('li');
                    twitterListings.each(function(item,index) {
                        ( function(){
                            new Fx.Style(item, 'opacity', {
                                duration: 250,
                                transition: Fx.Transitions.linear
                                }).start(0.0,1.0);
                        }).delay(500*(index+1));
                    });

                }

                var twitterJSON2 = new Json.Remote(twitterRequestUrl2, {
                    onComplete: function(twitter){
                        if(twitter != 0){
                            var tw = document.getElementById('twitter');
                            var twl = document.getElementById('twitterlists');
                            twitterContainer.setStyle('height','');
                            tw.removeChild(twl);
                            sortTwitterData(twitter);
                        }
                    }
                }).send();

        }
        }).send();
	
				
    /*
		
				var twitterJSON = new Json.Remote(twitterRequestUrl, {onComplete: function(twitter){
					// alert(dump(twitter));
					sortTwitterData(twitter);
				}}).send();
				*/
				
				
    function sortTwitterData(data) {
        //alert(dump(data[0]));
					
        // auslesen der elemente des twitterObjects
        twitterObjectLength	=	data.length;
        twitterObject		=	data;
        twitterResults		= 	new Array();
					
					
        var	twitterList	=	new Element('ul').setProperty('id','twitterlists');
					
        twitterObject.each(function(item,index) {
            if (index < twitterLimit)	{
                twitterResults[index]				= 	new Array();
                twitterResults[index]["name"]		=	twitterObject[index]["user"]["name"];
                twitterResults[index]["location"]	=	twitterObject[index]["user"]["location"];
                twitterResults[index]["url"]		=	"http://twitter.com/"+twitterObject[index]["user"]["name"];
                twitterResults[index]["date"]		=	twitterObject[index]["created_at"];
                twitterResults[index]["text"]		=	twitterObject[index]["text"];
							
							
                // Datum transformieren
                // Fri Jun 27 13:31:43 +0000 2008 => Freitag, 27. Juni, 13:31 Uhr
							
                twitterResults[index]["date"]	=	twitterResults[index]["date"].substr(0, twitterResults[index]["date"].lastIndexOf("+"));
	
	
                // Urls in texten finden und ggfls formatieren
                if (twitterResults[index]["text"].contains('http')) {
                    twitterResults[index]["text"] = twitterResults[index]["text"].replace(/(http:\/\/\S*)/g, '<a href="$1">$1<\/a> ');
                } else if (twitterResults[index]["text"].contains('www') ){
                    twitterResults[index]["text"] = twitterResults[index]["text"].replace(/(www.\S*)/g, '<a href="http://$1">$1<\/a> ');
                }
                if (twitterResults[index]["text"].contains('@') ){
                    twitterResults[index]["text"] = twitterResults[index]["text"].replace(/(@\S*)/g, '<a href="http://www.twitter.com/$1">$1<\/a> ').replace('@','');
                }
                if (twitterResults[index]["text"].contains('#') ){
                    twitterResults[index]["text"] = twitterResults[index]["text"].replace(/(#\S*)/g, '<a href="http://twitter.com/search?q=$1">$1<\/a> ').replace('q=#','q=%23');
                }
							
                // erstellen des HTML Quellcoed
                li	=	new Element('li').setStyle('visibility','hidden');
                div	=	new Element('div').setProperty('class','content');
                // new Element('a').setProperty('href',twitterResults[index]["url"]).setText(twitterResults[index]["name"]+": ").injectInside(div);
                new Element('span').setHTML(twitterResults[index]["text"]).injectInside(div);
                new Element('div').setText(twitterResults[index]["date"]).setProperty('class','date').injectInside(div);
                div.injectInside(li);
                li.injectInside(twitterList);
            }
            if (index == twitterLimit)	{
                li	=	new Element('li').setStyle('visibility','hidden');
                new Element('div').setProperty('class','content').setHTML("Latest <b>"+ twitterLimit +"</b> Messages from Twitter.<br> More under <a href='http://twitter.com/"+twitterName+"'>http://twitter.com/"+twitterName+"</a> ").injectInside(li);
							
                li.injectInside(twitterList);
            }
        });
	
					
        twitterList.injectInside(twitterContainer);
        // shcnell holen der höhe und sofort verstecken!
        twitterContainerHeight	=	$('twitter').getStyle('height');
				
					
        if (window.ie != true) {
            // alert(twitterContainerHeight);
            twitterContainer.setStyle('height', 70);
						
            new Fx.Style(twitterContainer, 'height', {
                duration: 250,
                transition: Fx.Transitions.linear
                }).start(70,twitterContainerHeight);
        } else {
            col3Height	=	col3.getStyle('height').toInt();
            col3.setStyle('height', col3Height+600);
        }
	
						
        twitterListings	=	$('twitterlists').getElements('li');
        twitterListings.each(function(item,index) {
            ( function(){
                new Fx.Style(item, 'opacity', {
                    duration: 250,
                    transition: Fx.Transitions.linear
                    }).start(0.0,1.0);
            }).delay(500*(index+1));
        });
					
					
    // einfaden und ausfahren der twitterbox
    }
}

});
	
Slideshow = new Class({

    initialize: function(slideshow, props) {
        this.props = Object.extend({
            captions: false,
            classes: ['prev', 'next', 'active'],
            duration: [2000, 4000],
            height: false,
            hu: '/',
            images: [],
            navigation: false,
            pan: 100,
            resize: true,
            thumbnailre: [/\./, 't.'],
            transition: Fx.Transitions.sineInOut,
            type: 'fade',
            width: false,
            zoom: 50
        }, props || {});
        if (this.props.images.length <= 1) {
            return;
        }
        if (this.props.pan != 'rand') {
            if (isNaN(this.props.pan.toInt()) || this.props.pan.toInt() < 0 || this.props.pan.toInt() > 100) {
                this.props.pan = 0;
            }
        }
        if (this.props.zoom != 'rand') {
            if (isNaN(this.props.zoom.toInt()) || this.props.zoom.toInt() < 0 || this.props.zoom.toInt() > 100) {
                this.props.zoom = 0;
            }
        }
        this.slideshow = $(slideshow);
        this.a = img = $E('img', this.slideshow);
        this.fx = [];
        this.start();
    },

    start: function() {
        this.slideshow.setHTML('');
        this.a.setStyles({
            display: 'block',
            position: 'absolute',
            left: '0px',
            top: '0px',
            zIndex: 1
        });
        this.a.injectInside(this.slideshow);
        this.fx.each(function(fx) {
            fx.time = fx.options.duration = 0;
            fx.stop(true);
        });
        obj = this.a.getCoordinates();
        this.height = ((this.props.height) ? this.props.height : obj['height']);
        this.width = ((this.props.width) ? this.props.width : obj['width']);
        this.slideshow.setStyles({
            display: 'block',
            position: 'relative',
            width: this.width + 'px'
            });
        // Images appear within a bounding div inside of the slideshow div
        // This div may be used to attach events - such as myShow.div.onmouseover - in order to show / hide navigation or further manipulate the slideshow
        this.div = new Element('div');
        this.div.setStyles({
            display: 'block',
            height: (this.height + 'px'),
            overflow: 'hidden',
            position: 'relative',
            width: (this.width + 'px')
            });
        this.div.injectInside(this.slideshow);
        this.a.injectInside(this.div);
        if ((this.props.height || this.props.width) && this.props.resize) {
            dh = this.height / obj['height'];
            dw = this.width / obj['width'];
            n = (dw > dh) ? dw : dh;
            this.a.setStyles({
                height: Math.ceil(obj['height'] * n) + 'px',
                width: Math.ceil(obj['width'] * n) + 'px'
                });
        }			
        this.b = this.a.clone();
        this.b.setStyle('opacity', 0);
        this.b.injectAfter(this.a);
        if (this.props.navigation) {
            this.navigation();
        }
        if ($type(this.props.captions) == 'array') {
            this.p = new Element('p');
            this.p.setHTML(this.props.captions[0]);
            this.p.injectInside(this.slideshow);
        }
        this.direction = 'left';
        this.curr = [1, 1];
        this.timer = (this.timer) ? [0] : [(new Date).getTime() + this.props.duration[1], 0];
        this.loader = new Image();
        this.loader.src = this.props.hu + this.props.images[this.curr[0]].trim();
        this.preload();
    },

    preload: function(fast) {
        if (this.loader.complete && ((new Date).getTime() > this.timer[0])) {
            img = (this.curr[1] % 2) ? this.b : this.a;
            img.setStyles({
                height: 'auto',
                opacity: 0,
                width: 'auto',
                zIndex: this.curr[1]
                });
            img.setProperty('src', this.loader.src);
            dh = this.height / this.loader.height;
            dw = this.width / this.loader.width;
            n = (dw > dh) ? dw : dh;
            if (this.props.resize) {
                img.setStyles({
                    height: Math.ceil(this.loader.height * n) + 'px',
                    width: Math.ceil(this.loader.width * n) + 'px'
                    });
            }
            if (fast) {
                img.setStyles({
                    left: '0px',
                    opacity: 1,
                    top: '0px'
                });
                if ($type(this.props.captions) == 'array') {
                    this.p.setHTML(this.props.captions[this.curr[0]]).setStyle('opacity', 1);
                }
                return this.loaded();
            }
            this.fx = [];
            if ($type(this.props.captions) == 'array') {
                fn = function(i) {
                    if (this.props.captions[i]) {
                        this.p.setHTML(this.props.captions[i]);
                    }
                    fx = new Fx.Style(this.p, 'opacity');
                    fx.start(0, 1);
                    this.fx.push(fx);
                }.pass(this.curr[0], this);
	
                fx = new Fx.Style(this.p, 'opacity', {
                    onComplete: fn
                });
                fx.start(1, 0);
                this.fx.push(fx);
            }
            if (this.props.type.test(/push|wipe/)) {
                img.setStyles({
                    left: 'auto',
                    right: 'auto'
                });
                img.setStyle(this.direction, this.width + 'px');
                img.setStyle('opacity', 1);
                if (this.props.type == 'wipe') {
                    fx = new Fx.Style(img, this.direction, {
                        duration: this.props.duration[0],
                        transition: this.props.transition
                        });
                    fx.start(this.width, 0);
                    this.fx.push(fx);
                }
                else {
                    arr = [img, ((this.curr[1] % 2) ? this.a : this.b)];
                    p0 = {};
                    p0[this.direction] = [this.width, 0];
                    p1 = {};
                    p1[this.direction] = [0, (this.width * -1)];
                    // Navigation has changed direction
                    // The image shifts when changing from right <> left so we need to correct the positioning
                    if (arr[1].getStyle(this.direction) == 'auto') {
                        x = this.width - arr[1].getStyle('width').toInt();
                        arr[1].setStyle(this.direction, x + 'px');
                        arr[1].setStyle(((this.direction == 'left') ? 'right' : 'left'), 'auto');
                        p1[this.direction] = [x, (this.width * -1)];
                    }
                    fx = new Fx.Elements(arr, {
                        duration: this.props.duration[0],
                        transition: this.props.transition
                        });
                    fx.start({
                        '0': p0,
                        '1': p1
                    });
                    this.fx.push(fx);
                }
            }
            else {
                img.setStyles({
                    bottom: 'auto',
                    left: 'auto',
                    right: 'auto',
                    top: 'auto'
                });
                arr = ['left top', 'right top', 'left bottom', 'right bottom'][this.curr[1] % 4].split(' ');
                arr.each(function(p) {
                    img.setStyle(p, 0);
                });
                zoom = ((this.props.type).test(/zoom|combo/)) ? this.zoom() : {};			
                pan = ((this.props.type).test(/pan|combo/)) ? this.pan() : {};		
                fx = new Fx.Style(img, 'opacity', {
                    duration: this.props.duration[0]
                    });
                fx.start(0, 1);
                this.fx.push(fx);
                fx = new Fx.Styles(img, {
                    duration: (this.props.duration[0] + this.props.duration[1]),
                    transition: Fx.Transitions.linear
                    });
                fx.start(Object.extend(zoom, pan));
                this.fx.push(fx);
            }
            this.loaded();
        }
        else {
            this.timeout = this.preload.delay(100, this);
        }
    },

    loaded: function() {
        if (this.ul) {
            anchors = $ES('a[name]', this.ul);
            anchors.each(function(a, i) {
                if (i == this.curr[0]) {
                    a.addClass(this.props.classes[2]);
                }
                else {
                    a.removeClass(this.props.classes[2]);
                }
            }, this);
        }
        this.direction = 'left';
        this.curr[0] = (this.curr[0] == this.props.images.length - 1) ? 0 : this.curr[0] + 1;
        this.curr[1]++;
        this.timer[0] = (new Date).getTime() + this.props.duration[1] + ((this.props.type.test(/fade|push|wipe/)) ? this.props.duration[0] : 0);
        this.timer[1] = (new Date).getTime() + this.props.duration[0];
        this.loader = new Image();
        this.loader.src = this.props.hu + this.props.images[this.curr[0]].trim();	
        this.preload();
    },

    zoom: function() {
        z = (this.props.zoom == 'rand') ? Math.random() + 1 : (this.props.zoom.toInt() / 100.0) + 1;
        eh = Math.ceil(this.loader.height * n);
        ew = Math.ceil(this.loader.width * n);
        sh = parseInt(eh * z);
        sw = parseInt(ew * z);
        return {
            height: [sh, eh],
            width: [sw, ew]
            };
    },

    pan: function() {
        p = (this.props.pan == 'rand') ? Math.random() : Math.abs((this.props.pan.toInt() / 100.0) - 1);
        ex = (this.width - img.width);
        ey = (this.height - img.height);
        sx = parseInt(ex * p);
        sy = parseInt(ey * p);
        obj = {};
        if (dw > dh) {
            obj[arr[1]] = [sy, ey]
        }
        else {
            obj[arr[0]] = [sx, ex];
        }
        return obj;
    },

    navigation: function() {
        this.ul = new Element('ul');
        if (this.props.navigation.test(/arrows/)) {
            li = new Element('li');
            a = new Element('a');
            a.addClass(this.props.classes[0]);
            a.onclick = function() {
                if (this.props.navigation.test(/fast/) || (new Date).getTime() > this.timer[1]) {
                    $clear(this.timeout);
                    // Clear the FX array only for fast navigation since this stops combo effects
                    if (this.props.navigation.test(/fast/)) {
                        this.fx.each(function(fx) {
                            fx.time = fx.options.duration = 0;
                            fx.stop(true);
                        });
                    }
                    this.direction = 'right';
                    this.curr[0] = (this.curr[0] < 2) ? this.props.images.length - (2 - this.curr[0]) : this.curr[0] - 2;
                    this.timer = [0];
					
                    this.loader = new Image();
                    this.loader.src = this.props.hu + this.props.images[this.curr[0]].trim();

                    this.preload(this.props.navigation.test(/fast/));
                }
            }.bind(this);
            a.injectInside(li);
			
            li.injectInside(this.ul);
        }
        if (this.props.navigation.test(/arrows\+|thumbnails/)) {
            for (i = 0; i < this.props.images.length; i++) {
                li = new Element('li');
                a = new Element('a');
                a.setProperty('name', i);
                if (this.props.navigation.test(/thumbnails/)) {
                    src = this.props.hu + this.props.images[i].trim().replace(this.props.thumbnailre[0], this.props.thumbnailre[1]);
                    a.setStyle('background-image', 'url(' + src + ')');
                }
                if (i == 0) {
                    a.className = this.props.classes[2];
                }
                a.onclick = function(i) {
                    if (this.props.navigation.test(/fast/) || (new Date).getTime() > this.timer[1]) {
                        $clear(this.timeout);
				
                        // Clear the FX array only for fast navigation since this stops combo effects
                        if (this.props.navigation.test(/fast/)) {
                            this.fx.each(function(fx) {
                                fx.time = fx.options.duration = 0;
                                fx.stop(true);
                            });
                        }				
                        this.direction = (i < this.curr[0] || this.curr[0] == 0) ? 'right' : 'left';
                        this.curr[0] = i;
                        this.timer = [0];
                        this.loader = new Image();
                        this.loader.src = this.props.hu + this.props.images[this.curr[0]].trim();
                        this.preload(this.props.navigation.test(/fast/));
                    }
                }.pass(i, this);
                a.injectInside(li);
				
                li.injectInside(this.ul);
            }
        }
        if (this.props.navigation.test(/arrows/)) {
            li = new Element('li');
	
            a = new Element('a');
            a.addClass(this.props.classes[1]);
            a.onclick = function() {
                if (this.props.navigation.test(/fast/) || (new Date).getTime() > this.timer[1]) {
                    $clear(this.timeout);
                    // Clear the FX array only for fast navigation since this stops combo effects
                    if (this.props.navigation.test(/fast/)) {
                        this.fx.each(function(fx) {
                            fx.time = fx.options.duration = 0;
                            fx.stop(true);
                        });
                    }

                    this.timer = [0];

                    this.preload(this.props.navigation.test(/fast/));
                }
            }.bind(this);
            a.injectInside(li);
			
            li.injectInside(this.ul);
        }
        this.ul.injectInside(this.slideshow);
    }
});