(function ($, undefined) {

    $.extend(_TMS, {

		presets:{

			zoomer:{"reverseWay":false,"duration":"800","interval":"1","blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"zoomer",k:1.8,crds:{bottom:0,right:0}},

			fadeThree:{"reverseWay":false,"duration":"800","interval":"1","blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"fadeThree"},

			simpleFade:{"reverseWay":false,"duration":"800","interval":"1","blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"fade"},

			gSlider:{"reverseWay":false,"duration":400,"interval":40,"blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"gSlider"},

			vSlider:{"reverseWay":false,"duration":400,"interval":40,"blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"vSlider"},

			slideFromLeft:{"reverseWay":false,"duration":"800","interval":"1","blocksX":"1","blocksY":"1","easing":"easeOutBack","way":"lines","anim":"slideFromLeft"},

			slideFromTop:{"reverseWay":false,"duration":"800","interval":"1","blocksX":"1","blocksY":"1","easing":"easeOutBack","way":"lines","anim":"slideFromTop"},

			diagonalFade:{"reverseWay":false,"duration":800,"interval":40,"blocksX":12,"blocksY":6,"easing":"easeInQuad","way":"diagonal","anim":"fade"},

			diagonalExpand:{"reverseWay":false,"duration":400,"interval":40,"blocksX":10,"blocksY":5,"easing":"easeInQuad","way":"diagonal","anim":"expand"},

			fadeFromCenter:{"reverseWay":true,"duration":"600","interval":"10","blocksX":"10","blocksY":"6","easing":"","way":"spiral","anim":"fade"},

			zabor:{"reverseWay":false,"duration":400,"interval":40,"blocksX":"20","blocksY":"1","easing":"","way":"lines","anim":"slideRight"},

			vertivalLines:{"reverseWay":false,"duration":600,"interval":1,"blocksX":12,"blocksY":1,"easing":"swing","way":"lines","anim":"vSlideOdd"},

			gorizontalLines:{"reverseWay":false,"duration":600,"interval":1,"blocksX":1,"blocksY":12,"easing":"swing","way":"lines","anim":"gSlideOdd"}

		},

        ways: {

            lines: function () {

				var opt=this

                for (var ret = [], i = 0; i < opt.maskC.length; i++)

               		ret.push(opt.maskC.eq(i))

                return ret

            },

            spiral: function () {

                var opt=this,

					ret = [],

                    step = 0,

                    h = opt.blocksY,

                    w = opt.blocksX,

                    x, y, i, lr = function () {

                        for (i = step; i < w - 1 - step; i++)

                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[step][i])

                        else return false

                        rb()

                    },

                    rb = function () {

                        for (i = step; i < h - 1 - step; i++)

                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[i][w - 1 - step])

                        else return false

                        rl()

                    },

                    rl = function () {

                        for (i = step; i < w - 1 - step; i++)

                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[h - 1 - step][w - i - 1])

                        else return false

                        lt()

                    },

                    lt = function () {

                        for (i = step; i < h - 1 - step; i++)

                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[h - i - 1][step])

                        else return false

                        lr(step++)

                    }

                    lr()

                    return ret

            },

            vSnake: function () {

                var opt=this,

					ret = [],

                    h = opt.blocksY,

                    w = opt.blocksX,

                    j, i

                    for (i = 0; i < w; i++)

                    for (j = 0; j < h; j++)

                    if (i * .5 == ~~ (i / 2)) ret.push(opt.matrix[j][i])

                    else ret.push(opt.matrix[h - 1 - j][i])

                    return ret

            },

            gSnake: function () {

                var opt=this,

					ret = [],

                    h = opt.blocksY,

                    w = opt.blocksX,

                    j, i

                    for (i = 0; i < h; i++)

                    for (j = 0; j < w; j++)

                    if (i * .5 == ~~ (i / 2)) ret.push(opt.matrix[i][j])

                    else ret.push(opt.matrix[i][w - 1 - j])

                    return ret

            },

            diagonal: function () {

                var opt=this,

					ret = [],

                    h = opt.blocksY,

                    w = opt.blocksX,

                    i = j = n = 0

                for (i = 0; i < w; i++)

	            	for (ret[i] = [], j = 0; j <= i; j++)

    		        	if (j < h) ret[i].push(opt.matrix[j][i - j])

            				for (i = 1; i < h; i++)

                    			for (j = 0, ret[n = ret.length] = []; j < h - i; j++)

					            	ret[n].push(opt.matrix[i + j][w - 1 - j])

                return ret

            },

            chess: function () {

				var opt=this

                for (var i = 0, ret = [

                    [],

                    []

                ], odd = 0; i < opt.maskC.length; i++)

                ret[odd = odd ? 0 : 1].push(opt.maskC.eq(i))

                return ret

            },

            randomly: function () {

				var opt=this

                for (var ret = [], n = i = 0; i < opt.maskC.length; i++)

                ret.push(opt.maskC.eq(i))

                for (i = 0; i < opt.maskC.length; i++)

                ret.push(ret.splice(parseInt(Math.random() * opt.maskC.length - 1), 1)[0])

                return ret

            }

        },



        anims: {

			fadeThree:function(el,last){

				var _=this

				$(el).each(function(i){

					var th=$(this).show().css({left:-_.width/4,top:0,zIndex:2}),

						clone=th.clone().appendTo(th.parent()).css({left:_.width/4,top:_.height/4,zIndex:1}),

						clone2=th.clone().appendTo(th.parent()).css({left:0,top:-_.height/4,zIndex:1})

					clone

						.stop()

						.animate({

							left:0,

							top:0

						},{

							duration:_.duration,

							easing:_.easing

						})

					clone2

						.stop()

						.animate({

							left:0,

							top:0

						},{

							duration:_.duration,

							easing:_.easing

						})

					th	

						.stop()

						.animate({

							left:0,

							top:0

						},{

							duration:_.duration,

							easing:_.easing,

							step:function(now){

								var pc=now/_.width,

									opa=1+pc

								clone.css({opacity:opa*opa})

								clone2.css({opacity:opa*opa})

								th.css({opacity:opa*opa*opa})

							},

							complete:function(){

								if(last)_.afterShow()

								clone.remove()

								clone2.remove()

							}

						})

				})

			},

			zoomer:function(el,last){

				var _=this

				$(el).each(function(){

					var th=$(this),

						img=$(new Image()),

						from=_.direction>0?_.width*_.k:_.width,

						to=_.direction>0?_.width:_.width*_.k

					console.log(from+' '+to)

					img	

						.css({

							position:'absolute',

							zIndex:0,						

							opacity:0

						})

						.css(_.crds)

						.appendTo(_.pic)

						.load(function(){

							_.pic.find('img').not(img).remove()

							img

								.css({

									width:from,

									height:'auto'

								})

								.stop()

								.animate({

									opacity:1

								},{

									duration:200

								})

								.animate({

									width:to

								},{

									duration:_.duration,

									easing:_.easing

								})

							setTimeout(function(){if(last)_.afterShow()},400)

						})


						.attr({src:_.next})

				})

			},

            fade: function (el, last) {

				var opt=this

                $(el).each(function () {

                    $(this).css({

                        opacity: 0

                    }).show().stop().animate({

                        opacity: 1

                    }, {

                        duration: +opt.duration,

                        easing: opt.easing,

                        complete: function () {

                            if (last) opt.afterShow()

                        }

                    })

                })

            },		

            expand: function (el, last) {

				var opt=this

                $(el).each(function () {

                    $(this).hide().show(+opt.duration, function () {

                        if (last) opt.afterShow()

                    })

                })

            },

            slideDown: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this).show(),

                        h = th.height()

                        th.css({

                            height: 0

                        }).stop().animate({

                            height: h

                        }, {

                            duration: opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },

            slideLeft: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this).show(),

                        w = th.width()

                        th.css({

                            width: 0

                        }).stop().animate({

                            width: w

                        }, {

                            duration: opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },

            slideUp: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this).show(),

                        h = th.height(),

                        l = th.attr('offsetLeft'),

                        t = th.attr('offsetTop')

                        th.css({

                            height: 0,

                            top: t + h

                        }).stop().animate({

                            height: h

                        }, {

                            duration: opt.duration,

                            easing: opt.easing,

                            step: function (now) {

                                var top = t + h - now

                                th.css({

                                    top: top,

                                    backgroundPosition: '-' + l + 'px -' + top + 'px'

                                })

                            },

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },

            slideRight: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this).show(),

                        w = th.width(),

                        l = th.attr('offsetLeft'),

                        t = th.attr('offsetTop')

                        th.css({

                            width: 0,

                            left: l + w

                        }).stop().animate({

                            width: w

                        }, {

                            duration: opt.duration,

                            easing: opt.easing,

                            step: function (now) {

                                var left = l + w - now

                                th.css({

                                    left: left,

                                    backgroundPosition: '-' + left + 'px -' + t + 'px'

                                })

                            },

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },

            slideFromTop: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this),

                        t = th.show().css('top'),

                        h = th.height()

                        th.css({

                            top: -h

                        }).stop().animate({

                            top: t

                        }, {

                            duration: +opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },

            slideFromDown: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this),

                        t = th.show().css('top'),

                        h = th.height()

                        th.css({

                            top: h

                        }).stop().animate({

                            top: t

                        }, {

                            duration: +opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },

            slideFromLeft: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this),

                        l = th.show().css('left'),

                        w = th.width()

                        th.css({

                            left: -w

                        }).stop().animate({

                            left: l

                        }, {

                            duration: +opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },

            slideFromRight: function (el, last) {

				var opt=this

                $(el).each(function () {

                    var th = $(this),

                        l = th.show().css('left'),

                        w = th.width()

                        th.css({

                            left: w

                        }).stop().animate({

                            left: l

                        }, {

                            duration: +opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                })

            },			

            gSlider: function (el, last) {

                var opt=this,

					clone = opt.maskC.clone(),

                    w = clone.width()

                    clone.appendTo(opt.maskC.parent()).css({

                        background: opt.pic.css('backgroundImage')

                    }).show()

                    el.show().css({

                        left: opt.direction > 0 ? -w : w

                    }).stop().animate({

                        left: 0

                    }, {

                        duration: +opt.duration,

                        easing: opt.easing,

                        step: function (now) {

                            if (opt.direction > 0) clone.css('left', now + w)

                            else clone.css('left', now - w)

                        },

                        complete: function () {

                            clone.remove()

                            if (last) opt.afterShow()

                        }

                    })

            },

            vSlider: function (el, last) {

                var opt=this,

					clone = opt.maskC.clone(),

                    h = clone.height()

                    clone.appendTo(opt.maskC.parent()).css({

                        background: opt.pic.css('backgroundImage')

                    }).show()

                    el.show().css({

                        top: opt.direction > 0 ? -h : h

                    }).stop().animate({

                        top: 0

                    }, {

                        duration: +opt.duration,

                        easing: opt.easing,

                        step: function (now) {

                            if (opt.direction > 0) clone.css('top', now + h)

                            else clone.css('top', now - h)

                        },

                        complete: function () {

                            clone.remove()

                            if (last) opt.afterShow()

                        }

                    })

            },

            vSlideOdd: function (el, last) {

				 var opt=this

                $(el).each(function () {

                    var th = $(this),

                        t = th.show().css('top'),

                        h = th.height(),

                        odd = opt.odd

                        th.css({

                            top: odd ? -h : h

                        }).stop().animate({

                            top: t

                        }, {

                            duration: +opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                        opt.odd = opt.odd ? false : true



                })

            },

            gSlideOdd: function (el, last) {

				 var opt=this

                $(el).each(function () {

                    var th = $(this),

                        l = th.show().css('left'),

                        w = th.width(),

                        odd = opt.odd

                        th.css({

                            left: odd ? -w : w

                        }).stop().animate({

                            left: l

                        }, {

                            duration: +opt.duration,

                            easing: opt.easing,

                            complete: function () {

                                if (last) opt.afterShow()

                            }

                        })

                        opt.odd = opt.odd ? false : true



                })

            }

        }

    })

})(jQuery)// JavaScript Document
