$this.flipList = function()

in assets/www/scripts/MetroJs.lt.js [751:878]


				$this.flipList = function (callback) {
					if (typeof (callback) == "undefined" || callback == null)
						callback = null;
					if (tdata.repeatCount > -1) {
						if (tdata.loopCount > tdata.repeatCount) {
							tdata.stopTimer(false);
							tdata.loopCount = 0;
							tdata.hasRun = false;
							$this.data("LiveTile", tdata);
							return;
						} else {
							tdata.loopCount += 1;
						}
					}
					var fBag = [];  // two bags to make sure we don't duplicate images
					var bBag = [];
					var $tiles = $this.find(stgs.tileCssSelector);
					//in case we want to pick one image per loop
					var fStaticRndm = 0;
					if (swapFrontSource) {
						if (frontRandomBag.length == 0) {
							for (var i = 0; i < stgs.frontImages.length; i++) {
								if (i != prevFrontIndex || stgs.frontImages.length == 1)
									frontRandomBag[i] = i;
							}
							frontRandomBag = privMethods.shuffleArray(frontRandomBag);
						}
						fStaticRndm = frontRandomBag.pop();
						prevFrontIndex = fStaticRndm;
					}
					var bStaticRndm = 0;
					if (swapBackSource) {
						if (backRandomBag.length == 0) {
							for (var i = 0; i < stgs.backImages.length; i++) {
								if (i != prevBackIndex || stgs.backImages.length == 1)
									backRandomBag[i] = i;
							}
							backRandomBag = privMethods.shuffleArray(backRandomBag);
						}
						bStaticRndm = backRandomBag.pop();
						prevBackIndex = bStaticRndm;
					}
					$tiles.each(function (idx) {
						var $t = jQuery(this);
						if (flistData.length < idx + 1) {
							// cache the selector
							var data = {};
							data.$front = $t.find(stgs.listTileCssSelector).first();
							data.$back = $t.find(stgs.listTileCssSelector).last();
							data.isReversed = false;
							flistData[idx] = data;
						}
						var $front = flistData[idx].$front;
						var $back = flistData[idx].$back;

						var tDelay = stgs.triggerDelay(idx);
						var triggerSpeed = (tDelay > 0) ? (tdata.speed + tDelay) : tdata.speed;
						var trigger = (!stgs.alwaysTrigger) ? ((Math.random() * 351) > 150 ? true : false) : true;
						var newImage;
						if (flistData[idx].isReversed) {
							if (trigger && tDelay >= 0) {
								window.setTimeout(function () {
									flistData[idx].isReversed = false;
									if (!swapFrontSource) {
										$this.flipListItem(true, $t, $front, $back);
									} else {
										var isRandom = stgs.frontIsRandom;
										var isInGrid = stgs.frontIsInGrid;
										var isBground = stgs.frontIsBackgroundImage;
										var frontImages = stgs.frontImages;
										if (isRandom && !isInGrid) {
											//make sure the random bag is ready
											if (fBag.length == 0) {
												for (var i = 0; i < stgs.frontImages.length; i++) {
													fBag[i] = i;
												}
												fBag = privMethods.shuffleArray(fBag);
											}
											newImage = frontImages[fBag.pop()];
										} else {
											if (!isInGrid) {
												newImage = frontImages[Math.min(idx, frontImages.length)];
											} else {
												newImage = frontImages[Math.min(fStaticRndm, frontImages.length)];
											}
										}
										$this.flipListItem(true, $t, $front, $back, newImage, isBground);
									}
								}, triggerSpeed);
							}
						} else {
							if (trigger && tDelay >= 0) {
								window.setTimeout(function () {
									flistData[idx].isReversed = true;
									if (!swapBackSource) {
										$this.flipListItem(false, $t, $back, $front);
									} else {
										var isRandom = stgs.backIsRandom;
										var isInGrid = stgs.backIsInGrid;
										var isBground = stgs.backIsBackgroundImage;
										var backImages = stgs.backImages;
										if (isRandom && !isInGrid) {
											//make sure the random bag is ready
											if (bBag.length == 0) {
												for (var i = 0; i < stgs.backImages.length; i++) {
													bBag[i] = i;
												}
												bBag = privMethods.shuffleArray(bBag);
											}
											newImage = backImages[bBag.pop()];
										} else {
											if (!isInGrid) {
												newImage = backImages[Math.min(idx, backImages.length)];
											} else {
												newImage = backImages[Math.min(bStaticRndm, backImages.length)];
											}
										}
										$this.flipListItem(false, $t, $back, $front, newImage, isBground);
									}
								}, triggerSpeed);
							}
						}
					});
					window.setTimeout(function () {
						tdata.isReversed = !tdata.isReversed;
					}, tdata.speed);

				};