/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
(function($) {
$.fn.cycle.transitions.bounceUp = function($cont, $slides, opts) {
    var $el = $($slides[0]);
    var w = $el.width();
    var h = $el.height();
    var startX = 0 - h - 10;

    opts.sync      = 0;
    opts.easeOut   = 'easeIn';
    opts.easeIn    = 'easeOut';
    opts.cssBefore = {top: startX, left: 0, display: 'block'};
    opts.animIn    = {top: 0};
    opts.animOut   = {top: -h};
    opts.cssAfter  = {display: 'none'};
    opts.speedIn   = 500;
    opts.speedOut  = 500;
};
$.fn.cycle.transitions.sliceDown = function($cont, $slides, opts) {
    opts.fxFn = function(curr,next,opts,after){
        tyliai_vertical_animation(curr,next,opts,after,'sliceDown')
    };
};
$.fn.cycle.transitions.sliceUp = function($cont, $slides, opts) {
    opts.fxFn = function(curr,next,opts,after){
        tyliai_vertical_animation(curr,next,opts,after,'sliceUp')
    };

};
$.fn.cycle.transitions.sliceFold = function($cont, $slides, opts) {
    opts.fxFn = function(curr,next,opts,after){
        tyliai_vertical_animation(curr,next,opts,after,'sliceFold')
    };
};
$.fn.cycle.transitions.sliceUpDown = function($cont, $slides, opts) {
    opts.fxFn = function(curr,next,opts,after){
        tyliai_vertical_animation(curr,next,opts,after,'sliceUpDown')
    };
};
$.fn.cycle.transitions.sliceSquareFromLeft = function($cont, $slides, opts) {
    opts.fxFn = function(curr,next,opts,after){
        tyliai_square_animation(curr,next,opts,after, 'SquareFromLeft')
    };
};
$.fn.cycle.transitions.sliceSquareFromTop = function($cont, $slides, opts) {
    opts.fxFn = function(curr,next,opts,after){
        tyliai_square_animation(curr,next,opts,after, 'SquareFromTop')
    };
};
$.fn.cycle.transitions.sliceSquareRandom = function($cont, $slides, opts) {
    opts.fxFn = function(curr,next,opts,after){
        tyliai_square_animation(curr,next,opts,after, 'SquareRandom')
    };
};

$.fn.cycle.transitions.RandomText = function($cont, $slides, opts) {
    transitions = []
//    transitions = ['sliceUpDown', 'sliceFold']
//    transitions = ['cover','sliceDown','bounceUp','curtainY','sliceDown','sliceFold','sliceSquareRandom','sliceUpDown', 'sliceSquareFromLeft','sliceSquareFromTop','sliceSquareRandom']
//    transitions = ['sliceDown','sliceUp','sliceFold','sliceUpDown', 'sliceSquareFromLeft','sliceSquareFromTop','sliceSquareRandom']
    //transitions = ['scrollHorz','blindX','sliceUpDown', 'sliceFold']
    //transitions = ['sliceUpDown','sliceFold','bounceUp','wipe','toss','uncover','cover','curtainY','curtainX','growY','growX','blindZ','blindY','blindX','fadeZoom','zoom','turnRight','turnLeft','turnDown','turnUp','shuffle','slideY','slideX','scrollVert','scrollHorz','scrollRight','scrollLeft','scrollDown','scrollUp','none','fade']
    // get all transitions
    for(i in $.fn.cycle.transitions) {
        if (i != 'test' && i.indexOf('slice') != 0 && i.indexOf('Random') != 0 && i.indexOf('none') != 0){ // skip some types of transitions
            transitions.push(i) 
        }
    }
    transition = transitions[Math.floor(Math.random()*transitions.length)]
//    opts.before.push(function(curr,next,opts) {
//        if(!opts.cssAfter){
//            opts.cssAfter = {}
//        }
//        opts.cssAfter.opacity = 1
//        $.fn.cycle.commonReset(curr,next,opts,true,true,false);
//    });
//    if(jQuery($cont).data('animation_on')){
//        jQuery($cont).data('animation_on', false)
//        after = jQuery($cont).data('after')
//        after();
//    }
    $.fn.cycle.transitions[transition]($cont, $slides, opts)
};

$.fn.cycle.transitions.RandomAll = function($cont, $slides, opts) {
//    transitions = ['sliceUpDown', 'sliceFold']
//    transitions = ['cover','sliceDown','bounceUp','curtainY','sliceDown','sliceFold','sliceSquareRandom','sliceUpDown', 'sliceSquareFromLeft','sliceSquareFromTop','sliceSquareRandom']
//    transitions = ['sliceDown','sliceUp','sliceFold','sliceUpDown', 'sliceSquareFromLeft','sliceSquareFromTop','sliceSquareRandom']
    //transitions = ['scrollHorz','blindX','sliceUpDown', 'sliceFold']
    //transitions = ['sliceUpDown','sliceFold','bounceUp','wipe','toss','uncover','cover','curtainY','curtainX','growY','growX','blindZ','blindY','blindX','fadeZoom','zoom','turnRight','turnLeft','turnDown','turnUp','shuffle','slideY','slideX','scrollVert','scrollHorz','scrollRight','scrollLeft','scrollDown','scrollUp','none','fade']
    for(i in $.fn.cycle.transitions) {
        if (i != 'test'){
            transitions.push(i) // get all transitions
        }
    }

    transition = transitions[Math.floor(Math.random()*transitions.length)]
    opts.before.push(function(curr,next,opts) {
        if(!opts.cssAfter){
            opts.cssAfter = {}
        }
        opts.cssAfter.opacity = 1
        $.fn.cycle.commonReset(curr,next,opts,true,true,false);
    });
    if(jQuery($cont).data('animation_on')){
        jQuery($cont).data('animation_on', false)
        after = jQuery($cont).data('after')
        after();
    }
    $.fn.cycle.transitions[transition]($cont, $slides, opts)
};

})(jQuery);

function tyliai_vertical_animation(curr,next,opts,after,type){
    var slider = jQuery(next).parent()
    var animation_id = Math.random();
    slider.data('slice_owner', animation_id)
    //jQuery(next).css({top: 0,left: 0, opacity:1, height: slider.height(), width: slider.width()});
    //jQuery('.slice', slider).remove()
    if(jQuery('.slice-v', slider).length == 0)
        tyliai_create_vertical_slices(curr,next,opts,after,slider)
    tyliai_set_vertical_bg(curr,next,opts,after,slider)
    tyliai_reset_vertical_slices(curr,next,opts,after,slider)
    jQuery('.cr_slide', slider).hide()
    jQuery(curr).show()
    tyliai_set_link(curr,next,opts,after,slider)
    if(!slider.data('animation_on')){
        //return false;
    }
    var timeBuff = 0;
    var i = 0;
    var v = 0;
    var slices_orig = jQuery('.cr_slice', slider).get();
    animSpeed = opts.speed
    var slice_delay = parseInt(opts.slice_delay)
    if(opts.backwards){
        slices_orig.reverse()
    }

    jQuery.each(slices_orig, function(){
        var slice = jQuery(this);
        switch(type){
            case 'sliceDown':
                slice.css('top','0px');
                animate = {height:'100%', opacity:'1.0'}
                break;
            case 'sliceUp':
                slice.css('bottom','0px');
                animate = {height:'100%', opacity:'1.0'}
                break;
            case 'sliceFold':
                slice.css({top:'0px', height:'100%', width:'0px'});
                origWidth = slice.data('origWidth');
                animate = {width:parseInt(origWidth)+'px', opacity:'1.0'}
                break;
            case 'sliceUpDown':
                if(v == 0){
                    slice.css('top','0px');
                    v++;
                } else {
                    slice.css('bottom','0px');
                    v = 0;
                }
                animate = {height:'100%', opacity:'1.0'}
                break;
        }
        if(i == opts.slices_v_nr-1){
            //slider.data('after', after)
            switch(type){
                case 'sliceFold':
                    setTimeout(function(){
                        if(slider.data('slice_owner') == animation_id){
                            slice.animate({width: slice.data('origWidth'), opacity:'1.0'}, animSpeed, opts.easeIn, function(){
                                jQuery(next).show()//.css({top: 0,left: 0});
                                jQuery(curr).hide();
                                //jQuery('.slice', slider).remove()
                                if(slider.data('animation_on')){
                                    slider.data('animation_on', false)
                                    after();
                                }
                            });
                        }
                    }, (100+timeBuff))
                    break;
                default:
                    setTimeout(function(){
                        if(slider.data('slice_owner') == animation_id){
                            slice.animate(animate, animSpeed, opts.easeIn, function(){
                                jQuery(next).show()//.css({top: 0,left: 0});
                                jQuery(curr).hide();
                                //jQuery('.slice', slider).remove()
                                if(slider.data('animation_on')){
                                    slider.data('animation_on', false)
                                    after();
                                }
                            });
                        }
                    }, (100+timeBuff))
                    break;
            }
        } else {
            switch(type){
                case 'sliceFold':
                    setTimeout(function(){
                        if(slider.data('slice_owner') == animation_id){
                            slider.data('animation_on', true)
                            slice.animate({width: slice.data('origWidth'), opacity:'1.0'}, animSpeed, opts.easeIn);
                        }
                    }, (100 + timeBuff));
                    break;
                default:
                    setTimeout(function(){
                        if(slider.data('slice_owner') == animation_id){
                            slider.data('animation_on', true)
                            slice.animate(animate, animSpeed, opts.easeIn);
                        }
                    }, (100 + timeBuff));
                    break;
            }
        }
        //after();
        timeBuff += slice_delay;
        i++;
    });
}

function tyliai_square_animation(curr,next,opts,after,order){
    //sliceSquare
    var slider = jQuery(next).parent()
    var animation_id = Math.random();
    slider.data('slice_owner', animation_id)
    jQuery(next).css({top: 0,left: 0, opacity:1, height: slider.height(), width: slider.width()});
    if(jQuery('.cr_slice', slider).length == 0){
        tyliai_create_square_slices(curr,next,opts,after,slider)
    }
    tyliai_set_square_bg(curr,next,opts,after,slider)
    tyliai_set_link(curr,next,opts,after,slider)
    jQuery('.cr_slide', slider).hide()
    jQuery(curr).show()
    var timeBuff = 0;
    var x = 0;
    var y = 0;
    var slices_nr_v = opts.slices_v_nr // vertical
    var slices_nr_h = opts.slices_h_nr // horizontal
    var slice_delay = parseInt(opts.slice_delay)
    var slices_orig = jQuery('.cr_slice', slider).get();
    var slices = new Array
    var i = 0
    var total = slices_nr_v * slices_nr_h
    switch(order){
        case 'SquareFromLeft':
            slices = slices_orig
            if(opts.backwards){
                slices.reverse()
            }
            break;
        case 'SquareFromTop':
            for(x = 0; x < slices_nr_h ; x++){
                for(y = 0; y < slices_nr_v ; y++){
                    slices.push(slices_orig[(y * slices_nr_h + x)])
                }
            }
            if(opts.backwards){
                slices.reverse()
            }
            //slices.reverse()
            break;
        case 'SquareRandom':
            slices = slices_orig
            slices.sort(function(){
                return (Math.round(Math.random())-0.5);
            })
            slices.sort(function(){
                return (Math.round(Math.random())-0.5);
            })
            break;
    }

    animSpeed = opts.speed;
    //jQuery(curr).show();
    animate = {opacity:'1.0'}
    jQuery.each(slices, function(){
        i++
        //for(i=0; i< slices.length;i++){
        //slice = jQuery(slices[i]);
        var slice = jQuery(this);
        slice.stop(true, true).addClass('nr'+i);
        if(i == total){
            slider.data('after', after)
            setTimeout(function(){
                if(slider.data('slice_owner') == animation_id){
                    slice.animate(animate, animSpeed, opts.easeIn, function(){
                        if(slider.data('slice_owner') == animation_id){
                            jQuery(next).show().css({top: 0,left: 0});
                            jQuery(curr).hide();
                            //jQuery('.slice', slider).remove()
                            if(slider.data('animation_on')){
                                slider.data('animation_on', false)
                                after();
                            }
                        }
                    });
                }
       //         tyliai_animate_slice_last(slider, slice, animate, animSpeed, opts, next, curr, animation_id, after)
            }, (50 + timeBuff));
        } else {
            setTimeout(function(){
                if(slider.data('slice_owner') == animation_id){
                    slider.data('animation_on', true)
                    slice.animate(animate, animSpeed, opts.easeIn);
                }
            }, (50 + timeBuff));
        }
        timeBuff += slice_delay;
    })
}

function tyliai_set_link(curr,next,opts,after,slider){
    jQuery('.slice_link', slider).remove()
    if(jQuery('a', next).length != 0){
        link_url = jQuery('a', next).attr('href')
        jQuery('.cr_slice', slider).append(jQuery('<a href="'+link_url+'" class="slice_link"></a>'))
    }
}
function tyliai_set_vertical_bg(curr,next,opts,after,slider){
    var  i = 0;
    background = jQuery(next).css('background-image')
    jQuery('.cr_slice', slider).each(function(){
        var sliceWidth = Math.round(slider.width()/opts.slices_v_nr);
        jQuery(this).stop(true, false).css({
            background: background +' no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'});
        i++;
    });
}
function tyliai_reset_vertical_slices(curr,next,opts,after,slider){
    var  i = 0;
    jQuery('.cr_slice', slider).each(function(){
        jQuery(this).css({height:'0px', opacity:'0'});
        i++;
    });
}
function tyliai_set_square_bg(curr,next,opts,after,slider){
    var  x = 0;
    var  y = 0;
    slices_nr_v = opts.slices_v_nr // vertical
    slices_nr_h = opts.slices_h_nr // horizontal
    background = jQuery(next).css('background-image')
    jQuery('.cr_slice', slider).each(function(){
        var sliceWidth = Math.round(slider.width()/opts.slices_h_nr);
        var sliceHeight = Math.round(slider.height()/opts.slices_v_nr);
        jQuery(this).stop(true, false).css({opacity:'0',
            background: background +' no-repeat '
                +'-'+ (x * sliceWidth) +'px '
                +'-'+ (y * sliceHeight) +'px '});
        x++;
        if(x >= slices_nr_h){
           x = 0
           y++;
        }
    });
}
function tyliai_create_vertical_slices(curr,next,opts,after,slider){
    //vertical lines
    jQuery('.cr_slice', slider).remove() // remove all other type slices
    for(var i = 0; i < opts.slices_v_nr ; i++){
        var sliceWidth = Math.round(slider.width()/opts.slices_v_nr);
        if(i == opts.slices_v_nr-1){ // last slice can be different width
            sliceWidth = Math.round(slider.width()-(sliceWidth*i))
        }
        slider.append(
            jQuery('<div class="cr_slice slice-v"></div>').css({
                left:(sliceWidth*i)+'px',
                width:sliceWidth+'px'
            }).data('origWidth',sliceWidth)
        );
    }
}
function tyliai_create_square_slices(curr,next,opts,after,slider){
    //squares
    jQuery('.cr_slice', slider).remove()
    slices_nr_v = opts.slices_v_nr // vertical
    slices_nr_h = opts.slices_h_nr // horizontal
    var sliceWidth = Math.round(slider.width()/slices_nr_h);
    var sliceHeight = Math.round(slider.height()/slices_nr_v);
    for(var y = 0; y < slices_nr_v ; y++){
        for(var x = 0; x < slices_nr_h ; x++){
            square = jQuery('<div class="cr_slice slice-s"></div>').css({
                        left:(sliceWidth*x)+'px',
                        width:sliceWidth+'px',
                        top:sliceHeight*y+'px',
                        height:sliceHeight+'px'
                    })
            if(x == slices_nr_h-1){ // side slices can be different width
                square.width(slider.width()-(sliceWidth*x))
            }
            if(y == slices_nr_v-1){ // and different height
                square.height(slider.height()-(sliceHeight*y))
            }
            slider.append(square)
        }
    }
}
