//delay is the time between the movements
//target is the items inside the parent to move
//duration is how long the movement takes to occur
//action is what animation to call. options:scroll,drop,fade


$.fn.imageSlide = function(options){
    
	var slide = new Object();
	slide.defaults = {
        'delay': 3000,
        'target': 'div',
        'duration': 1000,
        'action': 'scroll',
        'linkChange': 'none'
    };
    

    slide.called = $(this);
    
	slide.unique = $('*').index(slide.called);
	
    $.extend(slide.defaults, options);
    slide.targets = new Array();
	
	$($(slide.called).find(slide.defaults.target)).each(function(){
		slide.targets.push(this);
	});
	
    slide.count = slide.targets.length;
    slide.slideTimer = new Array();
    slide.length = $(slide.targets).length - 1;
    slide.slideCount = 0;

    if (slide.count > 1) {
    
        switch (slide.defaults.action) {
            case 'scroll':
                $(slide.targets).css('position', 'relative');
                break;
            case 'drop':
                $(slide.targets).each(function(){
                    $(this).prependTo($(this).parent());
                });
                
                $(slide.targets).css('position', 'absolute');
                break;
            case 'fade':
                $(slide.targets).each(function(){
                    $(this).prependTo($(this).parent());
                });
                
                $(slide.targets).css('position', 'absolute');
                break;
        }
        
        if (slide.defaults.action != 'fade' && slide.defaults.linkChange != 'none') {
            slide.copyWidth = $(slide.called).width();
            slide.copyHeight = $(slide.called).height();
            slide.copyFloat = $(slide.called).css('float');
            slide.copyMarginT = $(slide.called).css('margin-top');
            slide.copyMarginR = $(slide.called).css('margin-right');
            slide.copyMarginB = $(slide.called).css('margin-bottom');
            slide.copyMarginL = $(slide.called).css('margin-left');
            slide.allMargins = slide.copyMarginT + ' ' + slide.copyMarginR + ' ' + slide.copyMarginB + ' ' + slide.copyMarginL;
            $(slide.called).css('margin', '0px');
            $(slide.called).wrap('<div id="newWrapper" style="overflow:visible;float:' + slide.copyFloat + ';margin:' + slide.allMargins + ';width:' + slide.copyWidth + 'px;height:' + slide.copyHeight + 'px;position:relative;"></div>');
            slide.linking = $(slide.defaults.linkChange);
            $('#newWrapper').append(slide.linking);
            if (jQuery.browser.version == '6.0') {
                $(slide.linking).wrap('<span></span>');
            }
        }
        
        slide.first = $(slide.targets[0]);
        slide.height = 0 - $(slide.called).height();
        slide.width = 0 - $(slide.called).width();
        $(slide.targets).css({
            'margin-bottom': '0px',
            'height': Math.abs(slide.height),
            'overflow': 'hidden',
            'width': Math.abs(slide.width)
        });
        


		slide.doMove = function(){
        
			slide.point2 = $(slide.targets[slide.slideCount]);
            
            switch (slide.defaults.action) {
                case 'scroll':
                    $(slide.point2).animate({
                        marginTop: slide.height + 'px'
                    }, slide.defaults.duration, function(){
                        $(slide.called).append(slide.point2);
                        $(slide.point2).css('margin-top', '0px');
                        slide.newLink = $(slide.first).attr('link');
                        $(slide.defaults.linkChange).attr('href', slide.newLink);
                    });
                    break;
                case 'drop':
                    $(slide.point2).animate({
                        top: Math.abs(slide.height) + 'px'
                    }, slide.defaults.duration, function(){
                        $(slide.called).prepend(slide.point2);
                        $(slide.point2).css('top', '0px');
                        slide.newLink = $(slide.first).attr('link');
                        $(slide.defaults.linkChange).attr('href', slide.newLink);
                    });
                    break;
                case 'fade':
                    $(slide.point2).fadeOut(slide.defaults.duration, function(){
                        $(slide.called).prepend(slide.point2);
                        $(slide.point2).show();
                        slide.newLink = $(slide.first).attr('link');
                        $(slide.defaults.linkChange).attr('href', slide.newLink);
                    });
                    break;
            };
            slide.slideCount++;
            
            if (slide.slideCount > slide.length) {
                slide.slideCount = 0;
            }
            
        };
        
        slide.initLink = $(slide.first).attr('link');
        $(slide.defaults.linkChange).attr('href', slide.initLink);
        
        slide.slideTimer = setInterval(function(){slide.doMove();}, slide.defaults.delay);

        
        $.imageSlidePause = function(){
            clearInterval(slide.slideTimer);
        };
        
        $.imageSlideResume = function(){
            clearInterval(slide.slideTimer);
            slide.slideTimer = setInterval('slide.doMove();', 1000);
        };
		
		
    }

};



