var FSI = (function (name) {return name;}(FSI || {}));
FSI.Controller.Animation = (function(){
    var caller, callback, count = 0, animObjects=[];
    var animObject = {
        count:0,caller:{},callback:"",len:0,
        init:function(item,c,cb,dir,onStage){
            this.dir = dir || 'next';
            this.isOnStage = onStage;
            this.start(item,c,cb);
        },
        start:function(item,c,cb){
            var self = this;
            this.caller = c;
            this.callback = cb;
            var state = 'on';  
            if(!self.isOnStage){ state="off"; }        
            var view = FSI.Controller.AnimationViews[item][this.dir][state];
            this.len = view.length;
            $.each(view,function(i){
                var that = this;
                if(!self.isOnStage){ $(that.item).css(that.initProperties);} // make sure CSS puts the offstage animation object in the corrrect state (eg position, opacity etc)
                $(that.item).oneTime(that.delay , 'label',
                    function(){
                        $(this).animate(that.properties,that.duration,function(){self.onComplete();
                    });}
                );
            });
        },
        onComplete:function(){
            this.count++;
            if(this.count==this.len){ // only instigate a callback from this animObject when all the items have finished their animation
                makeCallBack();
                this.count = 0;
            }
        }           
    };
    var makeCallBack = function(){
        count++;
        if(count==2){ // when 2 animObjects have finished because animObject = visual 'View'
            caller[callback](); // only instigate a callback from FSI.Controller.Animation when all the animObjects have finished their animations
            count=0;
            animObjects=[]; // tidy up after ourselves
        }
    };
    return{
        start:function(item,c,cb,dir,onStage){
            caller = c;
            callback = cb;
            animObjects.push(Object.create(animObject).init(item,c,cb,dir,onStage));
        }
    };
}());
/*
    item : the jQuery selector of the element you'd like to animate
    duration : how long the animation takes to complete (the 'speed' basically)
    delay : how long to wait before the animation starts
    properties : the CSS properties you'd like the element to have after the animation has taken place
    initProperties : the CSS properties you'd like the element to have before any animation has taken place
    on/off : the element's current condition - on/off the stage
*/


FSI.Controller.AnimationViews = {
    heritage:{
        next:{
            on:[              
                {item:'.heritage.secondary_content',duration:1000,properties:{left:-1000},delay:1},
                {item:'.heritage.buckets',duration:1000,properties:{left:-1000},delay:1},
                {item:'.heritage.primary_content',duration:900,properties:{left:-1000},delay:1}
            ],
            off:[
                {item:'.heritage.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},       
                {item:'.heritage.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.heritage.primary_content',duration:1000,properties:{left:220},delay:1,initProperties:{left:1000}}
            ]        
        },
        prev:{
            on:[              
                {item:'.heritage.secondary_content',duration:1000,properties:{left:1100},delay:1},
                {item:'.heritage.buckets',duration:1000,properties:{left:1100},delay:1},
                {item:'.heritage.primary_content',duration:800,properties:{left:1200},delay:1}
            ],
            off:[
                {item:'.heritage.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.heritage.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.heritage.primary_content',duration:1000,properties:{left:220},delay:1,initProperties:{left:-1000}}
            ]
        }
    },
    built_in_canada:{
        next:{
            on:[
                {item:'.built_in_canada.secondary_content',duration:1000,properties:{left:-1000},delay:1},
                {item:'.built_in_canada.buckets',duration:1000,properties:{left:-1000},delay:1},
                {item:'.built_in_canada.primary_content',duration:900,properties:{left:-1000},delay:1}
            ],
            off:[
                {item:'.built_in_canada.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},           
                {item:'.built_in_canada.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.built_in_canada.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:1000}}
            ]     
        },
        prev:{
            on:[
                {item:'.built_in_canada.secondary_content',duration:1000,properties:{left:1100},delay:1},               
                {item:'.built_in_canada.buckets',duration:1000,properties:{left:1100},delay:1},
                {item:'.built_in_canada.primary_content',duration:800,properties:{left:1200},delay:1}
            ],
            off:[
                {item:'.built_in_canada.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.built_in_canada.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.built_in_canada.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:-1000}}
            ]
        }
    },
    model_lineup:{
        next:{
            on:[
                {item:'.model_lineup.secondary_content',duration:1000,properties:{left:-1000},delay:1},
                {item:'.model_lineup.buckets',duration:1000,properties:{left:-1000},delay:1},
                {item:'.model_lineup.primary_content',duration:900,properties:{left:-1000},delay:1}
            ],
            off:[
                {item:'.model_lineup.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},           
                {item:'.model_lineup.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.model_lineup.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:1000}}
            ]     
        },
        prev:{
            on:[
                {item:'.model_lineup.secondary_content',duration:1000,properties:{left:1100},delay:1},               
                {item:'.model_lineup.buckets',duration:1000,properties:{left:1100},delay:1},
                {item:'.model_lineup.primary_content',duration:800,properties:{left:1200},delay:1}
            ],
            off:[
                {item:'.model_lineup.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.model_lineup.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.model_lineup.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:-1000}}
            ]
        }
    },
    stylish_features:{
        next:{
            on:[
                {item:'.stylish_features.secondary_content',duration:1000,properties:{left:-1000},delay:1},
                {item:'.stylish_features.buckets',duration:1000,properties:{left:-1000},delay:1},
                {item:'.stylish_features.primary_content',duration:900,properties:{left:-1000},delay:1}
            ],
            off:[
                {item:'.stylish_features.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.stylish_features.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.stylish_features.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:1000}}
            ]     
        },
        prev:{
            on:[
                {item:'.stylish_features.secondary_content',duration:1000,properties:{left:1100},delay:1},
                {item:'.stylish_features.buckets',duration:1000,properties:{left:1100},delay:1},
                {item:'.stylish_features.primary_content',duration:800,properties:{left:1200},delay:1}
            ],
            off:[
                {item:'.stylish_features.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.stylish_features.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.stylish_features.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:-1000}}
            ]
        }
    },
	audio:{
		next:{
	        on:[
	            {item:'.audio.secondary_content',duration:1000,properties:{left:-1000},delay:1},
	            {item:'.audio.buckets',duration:1000,properties:{left:-1000},delay:1},
	            {item:'.audio.primary_content',duration:900,properties:{left:-1000},delay:1}
	        ],
	        off:[
	            {item:'.audio.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
	            {item:'.audio.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
	            {item:'.audio.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:1000}}
	        ]     
	    },
	    prev:{
	        on:[
	            {item:'.audio.secondary_content',duration:1000,properties:{left:1100},delay:1},
	            {item:'.audio.buckets',duration:1000,properties:{left:1100},delay:1},
	            {item:'.audio.primary_content',duration:800,properties:{left:1200},delay:1}
	        ],
	        off:[
	            {item:'.audio.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
	            {item:'.audio.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
	            {item:'.audio.primary_content',duration:1000,properties:{left:190},delay:1,initProperties:{left:-1000}}
	        ]
	    }
	},
	thank_you:{
		next:{
	        on:[
	            {item:'.thank_you.secondary_content',duration:1000,properties:{left:-1000},delay:1},
	            {item:'.thank_you.buckets',duration:1000,properties:{left:-1000},delay:1},
	            {item:'.thank_you.primary_content',duration:900,properties:{left:-1000},delay:1}
	        ],
	        off:[
	            {item:'.thank_you.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
	            {item:'.thank_you.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
	            {item:'.thank_you.primary_content',duration:1000,properties:{left:243},delay:1,initProperties:{left:1000}}
	        ]     
	    },
	    prev:{
	        on:[
	            {item:'.thank_you.secondary_content',duration:1000,properties:{left:1100},delay:1},
	            {item:'.thank_you.buckets',duration:1000,properties:{left:1100},delay:1},
	            {item:'.thank_you.primary_content',duration:800,properties:{left:1200},delay:1}
	        ],
	        off:[
	            {item:'.thank_you.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
	            {item:'.thank_you.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
	            {item:'.thank_you.primary_content',duration:1000,properties:{left:243},delay:1,initProperties:{left:-1000}}
	        ]
	    }
	},
    toyota_matrix:{
        next:{
            on:[
                {item:'.toyota_matrix.secondary_content',duration:1000,properties:{left:-1000},delay:1},
                {item:'.toyota_matrix.buckets',duration:1000,properties:{left:-1000},delay:1},
                {item:'.toyota_matrix.primary_content',duration:900,properties:{left:-1000},delay:1}
            ],
            off:[
                {item:'.toyota_matrix.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.toyota_matrix.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.toyota_matrix.primary_content',duration:1000,properties:{left:273},delay:1,initProperties:{left:1000}}
            ]     
        },
        prev:{
            on:[
                {item:'.toyota_matrix.secondary_content',duration:1000,properties:{left:1100},delay:1},
                {item:'.toyota_matrix.buckets',duration:1000,properties:{left:1100},delay:1},
                {item:'.toyota_matrix.primary_content',duration:800,properties:{left:1200},delay:1}
            ],
            off:[
                {item:'.toyota_matrix.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.toyota_matrix.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.toyota_matrix.primary_content',duration:1000,properties:{left:273},delay:1,initProperties:{left:-1000}}
            ]
        }
    },
    star_safety_system:{
        next:{
            on:[
                {item:'.star_safety_system.secondary_content',duration:1000,properties:{left:-1000},delay:1},
                {item:'.star_safety_system.buckets',duration:1000,properties:{left:-1000},delay:1},
                {item:'.star_safety_system.primary_content',duration:900,properties:{left:-1000},delay:1}
            ],
            off:[
                {item:'.star_safety_system.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.star_safety_system.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:1000}},
                {item:'.star_safety_system.primary_content',duration:1000,properties:{left:233},delay:1,initProperties:{left:1000}}
            ]     
        },
        prev:{
            on:[
                {item:'.star_safety_system.secondary_content',duration:1000,properties:{left:1100},delay:1},
                {item:'.star_safety_system.buckets',duration:1000,properties:{left:1100},delay:1},
                {item:'.star_safety_system.primary_content',duration:800,properties:{left:1200},delay:1}
            ],
            off:[
                {item:'.star_safety_system.secondary_content',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.star_safety_system.buckets',duration:750,properties:{left:20},delay:250,initProperties:{left:-1000}},
                {item:'.star_safety_system.primary_content',duration:1000,properties:{left:233},delay:1,initProperties:{left:-1000}}
            ]
        }
    }
};



