jQuery(function(){

    $.fn.uberSlider = function(options) {

        var defaults  = {
            init : function(){ },
            beforeSlide : function(data){
           
            },
            afterSlide : function(data){
           
            },
            width : 200,
            height : 120,
            animateSlide : true,
            easing : 'swing',
            speed :800,
            swipe: true,
            bounceback :true,
            bouncebackSpeed:150,
            bouncebackDistance:20,
            min_move_x: 30,
            dragEndObject: "html",
            pagination: true,
            paginationPrevLabel: 'prev',
            paginationNextLabel: 'next'
        }
        var options = $.extend(defaults, options);
        var count = 0;
        var slideCounter = [];
        
        return this.each(function(){
            count++;
            
            //get slider ID
            sliderId = $(this).attr("id");
            
            //if there is no ID, assign one
            if (!sliderId) {
                sliderId = 'uberSlider'+count;
                $(this).attr("id",sliderId);
            }
            
            var startX = 0;
            var startY = 0;
            var isMoving = false;
            var touchCapable = false; //check weather this browser is capable of receiving touch events (iphone, android, etc)
            var slideWidth = options.width;
            numberOfSlides = $("#"+sliderId+">li").length;
            var sliderWidth = numberOfSlides * slideWidth;
            var currentSlide = 1;
            var movingSliderId = ''; //stores the ID of the slider that is currently sliding

            //create the wrapper to contain the slider
            $(this).wrap('<div id="'+sliderId+'_wrapper">');

            //set the correct styles for the wrapper
            $("#"+sliderId+"_wrapper").
            css('overflow','hidden').
            css('display','block').
            css('width',options.width+'px').
            css('height',options.height+'px').
            css('margin','0').
            css('padding','0');

            if ($.browser.msie) $("#"+sliderId+"_wrapper").css('position','relative'); //overflow-fix for older IE
            
            //set CSS for the UL
            $(this).
            css('width',sliderWidth+'px').
            css('height',options.height+'px').
            css('margin','0').
            css('padding','0').
            css('list-style','none');

            pagination = '<ul class="pagination" style="position:absolute">\n\
                            <li class="prev"><a rel="'+sliderId+'" href="#prev">'+options.paginationPrevLabel+'</a></li>';
            
            //toop trough slides
            i=1;
            $("#"+sliderId+">li").each(function(){
                //assign a unique number
                $(this).addClass("slide"+i);
                if (i==numberOfSlides) $(this).addClass("lastslide");

                //make pagination
                //pagination += '<li class="num num'+i+'"><a rel="'+sliderId+'" href="#'+i+'" title="'+$(this).attr("title")+'">'+i+'</a></li>';
                //i++;
            });

            pagination += '<li class="next"><a rel="'+sliderId+'" href="#next">'+options.paginationNextLabel+'</a></li>\n\
                            </ul>';


            //add pagination
            if (options.pagination) {
                $("#"+sliderId+"_wrapper").prepend(pagination);
                $("a[rel="+sliderId+"]").click(function(){
                    action = $(this).attr("href").split("#");
                    action = action[action.length-1];
                    thisSliderId = $(this).attr("rel");
                    slideAction(thisSliderId,action);
                    return false;
                })

            }
            
            //set CSS for the LI's
            $("#"+sliderId+">li").
            css('float','left').
            css('width',options.width+'px').
            css('height',options.height+'px');
         
            slideCounter[sliderId] = 0;

            //feedback
            feedback = [];
            feedback['currentSlide'] = currentSlide;
            feedback['numberOfSlides'] = numberOfSlides;
            feedback['sliderId'] = sliderId;
            feedback['slideId'] = $("#"+sliderId+">.slide"+currentSlide).attr("id");
            feedback['sliderCounter'] = slideCounter[sliderId];

            //return values for init function
            options.init(feedback);

            //touch events
            function onTouchStart(e,sliderId) {
                touchCapable = true;
                if (e.touches.length == 1) {
                    startX = e.touches[0].pageX;
                    isMoving = true;
                    movingSliderId = sliderId;
                    this.addEventListener('touchmove', onTouchMove, false);
                }
            }

            function cancelTouch() {
                this.removeEventListener('touchmove', onTouchMove);
                startX = null;
                isMoving = false;
            }

            function onTouchMove(e) {
                var x = e.touches[0].pageX;
                e.preventDefault();
                if(isMoving) {
                    var x = e.touches[0].pageX;
                    var dx = startX - x;
                    if(Math.abs(dx) >= defaults.min_move_x) {
                        cancelTouch();
                        if(dx > 0) {
                            slideAction(movingSliderId,"next");
                        }
                        else {
                            slideAction(movingSliderId,"prev");
                        }
                    }
                }
            }

            //function for mouse swipe
            function startMouseSlide(sliderId,e) {
                if (touchCapable) return false; //browser is capable of using touch, no need for mouse events
                startX = e.pageX;
                isMoving = true;
                movingSliderId = sliderId;
               
            }
            function endMouseSlide(e) {
                //console.log('swipe stopped');
                if (!isMoving) return false; //nothing happening
                if (touchCapable) return false; //browser is capable of using touch, no need for mouse events
                dist = parseInt(e.pageX-startX);
                if(dist<-defaults.min_move_x) slideAction(movingSliderId,"next");
                if(dist>defaults.min_move_x) slideAction(movingSliderId,"prev");
            }


            //eventlisteners for swipe
            if (options.swipe) {

                $(this).bind("dragstart mousedown",function(e) {
                    //if (e.which!=1) return false;  //only slide with left mouse button
                    startMouseSlide($(this).attr("id"),e);
                    return false; //prevent default action
                });

                //$(options.dragEndObject).bind("dragend mouseup",function(e){
                $(this).bind("dragend mouseup",function(e){
                    if (e.which!=1) return false;  //only slide with left mouse button
                    endMouseSlide(e);
                    return false; //prevent default action
                });


                    
                if (!$.browser.msie) { //bind touch eventhandler, omit IE since it will give an error
                    this.addEventListener('touchstart', function(e){
                        onTouchStart(e,$(this).attr("id"))
                    }, false);
                }
            }

            slideAction(sliderId,currentSlide);
        });

        //function to handle the actual sliding
        //the action variable can handle a (slide) number or 'next' or 'prev'
        function slideAction(sliderId,action) {
            obj = $("#"+sliderId);
            sliderWidth = options.width;
            numberOfSlides = $("#"+sliderId+">li").length;
            marginLeft = Math.round(obj.css('marginLeft').substr(1).split('px')[0].split('pt')[0]);
            currentSlide = Math.round(marginLeft/sliderWidth+1);
            bounceback = false;
           
            if (action=='first') {
                currentSlide=1;
            }
            else if (action=='next') {
                if (currentSlide < numberOfSlides) {
                    currentSlide++;
                } else {
                    bounceback = true;
                }
            }
            else if (action=='prev') {
                if (currentSlide > 1) {
                    currentSlide--;
                } else {
                    bounceback = true;
                }
            }
            else if (action=='last') {
                currentSlide = numberOfSlides;
            }
            else { //number
                if (action<1) action = 1;
                if (action>numberOfSlides) action = numberOfSlides;
                currentSlide = action;
            }

            //set current pagination number active
            if (options.pagination) {
                $("#"+sliderId+"_wrapper>.pagination>li.num").removeClass('active').addClass('inactive');
                $("#"+sliderId+"_wrapper>.pagination>li.num"+currentSlide).addClass('active').removeClass('inactive');
            }

            ml = currentSlide * sliderWidth-sliderWidth;

            if ( (bounceback) && (options.bounceback) ) {
                if (action=='next') {
                    bounceto = ml + options.bouncebackDistance;
                    start = '-'+bounceto+'px';
                }
                if (action=='prev') {
                    bounceto = options.bouncebackDistance;
                    start = bounceto+'px';
                }

               
                obj.animate({
                    marginLeft:start
                },options.bouncebackSpeed,options.easing,function(){
                    obj.animate({
                        marginLeft:'-'+ml+'px'
                    },options.bouncebackSpeed,options.easing);
                });
                

                return false;
            }

            if (marginLeft==ml) return false //slider is already at the right position

         
            options.beforeSlide(feedback);

            obj.addClass("uberSlider-sliding");

            slideCounter[sliderId]++;
            feedback['currentSlide'] = currentSlide;
            feedback['sliderId'] = sliderId;
            feedback['slideId'] = $("#"+sliderId+">.slide"+currentSlide).attr("id");
            feedback['sliderCounter'] = slideCounter[sliderId];
            if (options.animateSlide) {
                obj.animate({
                    marginLeft:'-'+ml+'px'
                },400,function(){ //callback
                    obj.removeClass("uberSlider-sliding");
                    options.easing,options.afterSlide(feedback)

                });
            }
            else {
                obj.css('marginLeft','-'+ml+'px');
            }

           
            return false;
        }
    };


    $(".slider3").uberSlider({
        width:200,
        height:120,
        paginationPrevLabel:'',
        paginationNextLabel:''
    });
	obj3 = $(".contact");
	obj1 = $(".portfolio1");
	obj2 = $(".about");
	$(".contactb").click(function(){
  	if (obj3.is(":hidden")) { obj3.slideDown(); } else { obj3.slideUp(); }
  	obj1.slideUp()+obj2.slideUp();
	return false;
	});
	$(".portfoliob").click(function(){
  	if (obj1.is(":hidden")) { obj1.slideDown(); } else { obj1.slideUp(); }
	obj3.slideUp()+obj2.slideUp();
	return false;
	});
	$(".aboutb").click(function(){
  	if (obj2.is(":hidden")) { obj2.slideDown(); } else { obj2.slideUp(); }
	obj1.slideUp()+obj3.slideUp();
	return false;
	});
	$(".close").click(function(){
  	obj3.slideUp()+obj1.slideUp()+obj2.slideUp();
	return false;
	});
	
	
	
	$(function(){
	function overlabel()
		{
		$(".overlabel").each(function() { if ($(this).val()=='') { $(this).val($(this).attr("title")).addClass('overlabel_inactief'); } });
		$(".overlabel").focus(function() { if ($(this).val()==$(this).attr("title")) {$(this).val('').removeClass('overlabel_inactief'); } });
		$(".overlabel").blur(function() { if ($(this).val()=='') {$(this).val($(this).attr("title")).addClass('overlabel_inactief'); }});
		}
		overlabel();
		
		function validate_email(email)
			{
			var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			if (filter.test(email)) { return true; } else { return false; }
			}
		
		$("form.nieuwsbrief").submit(function(){
		if (!validate_email( $("input[name='email']").val() ))
		{ $('.error').removeClass('error').addClass('erroractive');
		
		}
		});
		
	}); 
	setTimeout('$(".succes").fadeOut();',3000);
	setTimeout('$(".error").fadeOut();',3000);
	$(function(){
		$(".customer").hover(function(){
			this_id = $(this).attr("id");
			$('.portfolioimage').removeClass().addClass('portfolioimage').addClass(this_id);
			});
		});
		
		
      $(".tweet").tweet({
        join_text: "auto",
        avatar_size: 48,
        count: 4,
        loading_text: "loading tweets..."
      });

});
