/*
 * Evolution Rotator v1
 *
 */
(function($){

    $.fn.evolutionRotator = function(options) {
        
	// setup options
	var defaultOptions = {
	    slices:15,
	    duration:800
	};
	var options = $.extend({}, defaultOptions, options);
	//mobile decection
	var agent=navigator.userAgent.toLowerCase();
	var is_iphone = (agent.indexOf('iphone')!='-1');
	var is_ipad = (agent.indexOf('ipad')!='-1');
	
	// support mutltiple elements - doubt it will ever be used
	if (this.length > 1){
	    this.each(function() {
		$(this).evolutionRotator(options)
	    });
	    return this;
	}

	// SETUP private variabls;
	var items = [];
	var currentSlide = -1;
	var slider = $(this);
	var self = this;
	slider.append('<div class="evolutionRotatorContainer"></div><div class="evolutionTransitionContainer></div>');
	slider.css('position','relative');
	var container = $('.evolutionRotatorContainer',slider);
	var transitionContainer = $('.evolutionTransitionContainer');
	var lastSlide;
	// SETUP private functions;

	//Add initial slices
	for(var i = 0; i < options.slices; i++){
	    var sliceWidth = Math.round(slider.width()/options.slices);
	    if(i == options.slices-1){
		transitionContainer.append(
		    $('<div class="evolutionRotator-slice"></div>').css({
			left:(sliceWidth*i)+'px',
			width:(slider.width()-(sliceWidth*i))+'px'
		    })
		    );
	    } else {
		transitionContainer.append(
		    $('<div class="evolutionRotator-slice"></div>').css({
			left:(sliceWidth*i)+'px',
			width:sliceWidth+'px'
		    })
		    );
	    }
	}
	var transitionIn = function(){
	    $('.evolutionRotator-slice').each(function(i){
		$(this).delay(i* 90).fadeOut(50 +(i*50),function(){
		    $(this).remove();
		});
	    })
	}
	var transitionOut = function(){
	    $('.evolutionRotator-slice').each(function(i){
		$(this).delay(i*50).fadeIn(100);
	    })
	}
	// iphone and ipad compatibility
	// TODO: generalize for more devices
	var mobilizeEmbed = function(c){
	    var embed = c;
	    var reg =  new RegExp(/clip_id=\d*/gi);
	    var clipid = embed.match(reg);
           var id;
           
	    if(clipid != null){
		
		if(clipid.length){
                id = clipid[0];
            	}else{
                id = clipid;
       	}
		
		if (is_iphone) {
		    embed = "<video src='http://www.vimeo.com/play_redirect?"+ id + "&quality=mobile' autoplay='autoplay' controls='controls' width='100%' height='100%'></video>";
		}
		else if (is_ipad) {
		    embed = "<video src='http://www.vimeo.com/play_redirect?"+ id +"' controls='controls' width='100%' height='100%'></video>";
		}
	    }
	    return embed;
	}
	var showSlide = function(c){

	    var content  = mobilizeEmbed(c.content);
//	    content =  mobilizeEmbed(content);
            
	    container.append('<div id="evolutionRotatorSlide'+currentSlide+'" class="evolutionRotatorSlide" style="display:none;position:absolute;z-index:'+(currentSlide+1)+';width:100%;height:100%;">'+content+'</div>');
	    var slide = $('#evolutionRotatorSlide'+currentSlide);
	    var w = container.width();
	    var h = container.height();

	    //get transition
	    var tranny = c.transition;
	    var duration = options.duration;

	    switch(tranny){
		case  'Slide Up':
		    slide.css({
			'top':h+'px'
		    }).show();
		    slide.animate({
			top: '0',
			opacity : 1
		    }, duration);
		    break;
		case  'Slide Down':
		    slide.css({
			'top':-h+'px'
		    }).show();
		    slide.animate({
			top: '0',
			opacity : 1
		    }, duration);
		    break;
		case  'Slide Left':
		    slide.css({
			'left':w+'px'
		    }).show();
		    slide.animate({
			left: '0',
			opacity : 1
		    }, duration);
		    break;
		case  'Slide Right':
		    slide.css({
			'left':-w+'px'
		    }).show();
		    slide.animate({
			left: '0',
			opacity : 1
		    }, duration);
		    break;
		default :
		    slide.fadeIn(duration);
	    }
	    // page background
	    var color = c.color;
	    var background = c.background;
	    if(color && background){
		$('body').css({
		    'background-image': 'url('+background+')',
		    'background-color':'#'+color
		});
	    }
	    if(lastSlide)lastSlide.fadeOut(400,function(){
		$(this).remove()
	    });
	    lastSlide = $('#evolutionRotatorSlide'+currentSlide);
	}

	var addControls = function(){
	    slider.append('<div class="evolutionRotator-directionNav"><a class="evolutionRotator-prevNav" title="Previous">Prev</a><a class="evolutionRotator-nextNav"  title="Next">Next</a></div>');
			
	    //Hide Direction nav
	    $('.evolutionRotator-directionNav', slider).hide();
	    slider.hover(function(){
		$('.evolutionRotator-directionNav', slider).fadeIn();
	    }, function(){
		$('.evolutionRotator-directionNav', slider).fadeOut();
	    });

	    $('a.evolutionRotator-prevNav', slider).live('click', function(){
		self.previous();
	    });

	    $('a.evolutionRotator-nextNav', slider).live('click', function(){

		self.next();
	    });

	}

	transitionIn();
		
	this.intialize = function() {
                
	    return this;
	};
	this.setData = function(i){
	    items = i;
	    addControls();
	    transitionIn();
	    self.next();
	}
	this.next = function() {
	    currentSlide ++;
	    if(currentSlide > items.length-1){
		currentSlide = 0
	    }
	    showSlide(items[currentSlide]);
	};
	this.previous = function(){
	    currentSlide --;
	    if(currentSlide < 0){
		currentSlide = items.length-1;
	    }
	    showSlide(items[currentSlide]);
	}
		
	this.getOptions = function() {
	    return options;
	};

	return this.intialize();
    }
})(jQuery);
