 
(function() {

	var smirkQueue = Array();
	var __frameDelay = 120;

	if (typeof(jQuery) == 'undefined') {
		var jq = document.createElement("script")
		jq.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js";
		document.documentElement.getElementsByTagName("HEAD")[0].appendChild(jq);
		var jqLoad = setInterval(function() {
			if (typeof(jQuery) != 'undefined') {
				jQuery.noConflict();
				clearInterval(jqLoad);
				smirkAnimatorLoad(jQuery);
			}
		}, 25);
	}
	else {
		smirkAnimatorLoad(jQuery);
	}
	
	function parseNvClasses(classValue) {
		var nvPairs = "{";
		var cls = classValue.split(/\s+/);
		jQuery(cls).each(function() {
			if (this.indexOf("-is-") > 0) {
				var a = this.split("-is-");
				if (nvPairs.length > 1) nvPairs += ",'"+a[0]+"' : '"+a[1]+"'";
				else nvPairs += "'"+a[0]+"' : '"+a[1]+"'";
			}
		});
		nvPairs += "}";
		return eval('('+nvPairs+')');
	}

	function smirkAnimatorStart($) {
		
		$(".smirktacular").each(function() {
		
			var nv = parseNvClasses($(this).attr("class"));
			
			var sa = new smirkAnimation();
			sa.uuid = nv.uuid;
			sa.iid = (nv.iid) ? nv.iid : 0;
			sa.targetElement = this;
			sa.loop = nv.loop == 'true' ? true : false; // comes over as a string, not bool
			if (! sa.loop) { 
				var index = smirkQueue.length;
				sa.shouldAnimate = false;
				$(this)
					.mouseover(function() {
						smirkQueue[index].shouldAnimate = true;
					})
					.mouseout(function() {
						smirkQueue[index].shouldAnimate = false;
					});
			}
			$.getJSON("http://mysmirks.com/iid_version_jsonp.php?u="+sa.uuid+"&i="+sa.iid+"&jsoncallback=?", function(j) {
				if (j.iid) {
					
					sa.imageBase = j.iid;
					sa.isS3 = j.is_s3;
						
					for (var i=0; i<sa.smirkFrames; i++) {
						var imgStub = new Image();
						if (sa.isS3) imgStub.src = "http://s3.amazonaws.com/smirk/jpg/" +sa.imageBase+""+(i+1)+".jpg";					
						else imgStub.src = "http://mysmirks.com/vids/" + sa.uuid + "/" +sa.imageBase+""+(i+1)+".jpg";	
						sa.imageObjects.push(imgStub);
					}
					
					// set the initial image
					if (sa.targetElement.nodeName.toLowerCase() == "img") {
						$(sa.targetElement).attr("src", sa.imageObjects[sa.currentFrame-1].src);
					}
					else {
						$(sa.targetElement).css({
							background: "url("+sa.imageObjects[sa.currentFrame-1].src+") top left repeat", 
							backgroundSize: "100%"
						})
					}
					
					smirkQueue.push(sa);
				}
			
			});
			
		});
		
	}
	
	function smirkAnimatorLoad($) {
		$(function() {
			if (typeof(smirkFrameDelay) != 'undefined') __frameDelay = smirkFrameDelay;
			// create the animator loop
			var animationRef = setInterval(function() {
				for (var x = 0; x < smirkQueue.length; x++) {
				
					var sa = smirkQueue[x];
					if (sa.shouldAnimate) {
					
						if (sa.currentFrame > sa.smirkFrames) {
						
							sa.currentFrame = sa.smirkFrames - 1;
							sa.forwards = false;
							
						}
						
						else if (sa.currentFrame < 1) {
						
							sa.currentFrame = 2;
							sa.forwards = true;
							
						}
						
						if (typeof(sa.imageObjects[sa.currentFrame-1]) != 'undefined') {
							if (sa.targetElement.nodeName.toLowerCase() == "img") {
								$(sa.targetElement).attr("src", sa.imageObjects[sa.currentFrame-1].src);
							}
							else {
								$(sa.targetElement).css({
									background: "url("+sa.imageObjects[sa.currentFrame-1].src+") top left repeat"
								})
							}
							if (sa.forwards) sa.currentFrame ++;
							else sa.currentFrame --;
						}
					}
				}
			
			}, __frameDelay);
			smirkAnimatorStart($)
		});
	}
	
	function smirkAnimation() {
		this.imageObjects = Array();
		this.imageBase = "";
		this.smirkFrames = 21;
	  this.imageObjects = new Array(); // total frames is 21 for now
		this.forwards = true;
		this.currentFrame = 1;
		this.isS3 = false;
		this.shouldAnimate = true;
		this.uuid = "";
		this.targetElement = "";
	}
	
})();

