// JavaScript Document
function ytPlayer(playerId) {
	var timer = null;
	var isPlaying = false;
	var trackPlayStart = false;
	var bL = 0;
	var pos = 0;
	var dur = 0;
	var ytid = '';
	var pid = playerId;
	var p = null;
	var title = null;
	/*
	function loadTitle(vId) {
		if(vId) {
			var url = 'http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch?v%3D' + vId + '&format=xml';
			var x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
			
			if (x){
				x.onreadystatechange = function(){
					//trace('ready state change: ' + x.readyState + ', ' + x.status);
					if (x.readyState == 4 && x.status == 200) {
						//trace('response: ' + x.responseText);
					}
				}
				x.open("GET", url, true);
				x.send(null);
			}
		}
	}
	*/
	// Public members
	this.isOpen = false;
	this.init = function() {
		p = document.getElementById(pid);
		if(p) {
			var isIE = /*@cc_on!@*/false;
			var isWebkit = ((document.childNodes) && (!document.all) && (!navigator.taintEnabled) && (!navigator.accentColorName)) || window.chrome;
			
			if(!isIE && !isWebkit) { // not IE or Webkit
				// Attempt to find nested object/embed tag
				var pp = p.getElementsByTagName('embed');
				if(pp.length > 0) {
					p = pp[0];
				} else {
					pp = p.getElementsByTagName('object');
					if(pp.length > 0) {
						p = pp[0];
					}
				}
			}
			
			var u = p.getVideoUrl();
			ytid = ytTracker.gqp(u, 'v');
			
			p.addEventListener('onStateChange', 'ytTracker.players[\'' + pid + '\'].playerStateChange');
			// loadTitle(ytid);
		}
	}
	
	this.stopAndClose = function(t, doClose) {
		t = t == null ? pos : t;
		//trace('stopAndClose(' + t + ', ' + doClose + '); - IsPlaying: ' + isPlaying + ', IsOpen: ' + this.isOpen);
		if(this.isOpen) {
			if(isPlaying) {
				s.Media.stop(ytid, t);
				isPlaying = false;
				trackPlayStart = false;
				//trace('Media.stop(' + ytid + ', ' + t + ');\n');
			}
			if(doClose) {
				s.Media.close(ytid);
				this.isOpen = false;
				clearInterval(timer);
				//trace('Media.close(' + ytid + ');\n');
			}
		}
	}
	
	this.playerStateChange = function(n) {
		switch(n) {
			case 0: // end
				this.stopAndClose(dur, true);
				break;
				
			case 1: // play
				bL = p.getVideoBytesLoaded();
				//trace('Bytes Loaded: ' + bL);
				
				if(isPlaying || bL <= 0) {
					break;
				}
				
				dur = p.getDuration();
				
				if(!this.isOpen) {
					s.Media.open(ytid, dur, "YouTube Embedded Player");
					this.isOpen = true;
					//trace('Media.open(' + ytid + ', ' + dur + ', "YouTube Embedded Player");\n');
				}
				
				clearInterval(timer);
				timer = setInterval(timerInterval, 500);
				trackPlayStart = true;
				break;
				
			case 2: // pause
				pos = p.getCurrentTime();
				this.stopAndClose(Math.floor(pos), false);
				break;
				
			case 3: // buffering
				bL = p.getVideoBytesLoaded();
				if (bL == -1) {
					this.stopAndClose(null, true)
				}
				break;
			case 5: // intit
				break;
			default:
				break;
		}
	}
	
	function timerInterval() {
		//trace('timeInterval - isPlaying: ' + isPlaying + ', trackPlayStart: ' + trackPlayStart);
		if (p != null && (isPlaying || trackPlayStart)) {
			pos = p.getCurrentTime();
			if (trackPlayStart) {
				s.Media.play(ytid, Math.floor(pos));
				trace('Media.play(' + ytid + ', ' + pos + ');\n');
				isPlaying = true;
				trackPlayStart = false;
			}
		}
	}

	return this;
}


var ytTracker = {};
ytTracker.playerLoaded = false;
ytTracker.players = {};
ytTracker.addEH = function (a, b, c) {
    if (typeof a == 'object' && a !== null) {
        if (a.attachEvent) {
            a['e' + b + c] = c;
            a[b + c] = function () {
                a['e' + b + c](window.event)
            };
            a.attachEvent('on' + b, a[b + c])
        } else {
            a.addEventListener(b, c, false)
        }
    }
};

ytTracker.gqp = function (a, b) {
    var c = a.indexOf('?');
    var d = a.indexOf('#');
    if (c < 0) {
        return '';
    }
    var e = a.substr(c + 1);
    if (d > 0) {
        e = a.substring(c + 1, d);
    }
    var f = e.split('&');
    for (var i = 0; i < f.length; i++) {
        var g = f[i].split('=');
        g[0] = unescape(g[0]);
        if (g[0] == b) {
            g[1] = unescape(g[1]);
            if (g[1].indexOf('"') > -1) {
                var h = /"/g;
                g[1] = g[1].replace(h, '\\"')
            }
            if (g[1].indexOf('+') > -1) {
                var j = /\+/g;
                g[1] = g[1].replace(j, ' ')
            }
            return g[1]
        }
    }
    return ""
};

ytTracker.trackPlayer = function(pid) {
	pid = unescape(pid);
	var p = ytTracker.players[pid];
	if(p) {;
		p.stopAndClose(null, true);
	} else {
		ytTracker.players[pid] = new ytPlayer(pid);
		ytTracker.players[pid].init();
		
		if(!ytTracker.playerLoaded) {
			ytTracker.playerLoaded = true;
			ytTracker.addEH(window, 'unload', ytTracker.unloadVideos)
		}
	}
}

ytTracker.unloadVideos = function(e) {
	for(var pid in ytTracker.players) {
		var p = ytTracker.players[pid];
		if(p.isOpen) {
			p.stopAndClose(null, true);
		}
	}
}

function onYouTubePlayerReady(pid) {
	if(pid) {
		ytTracker.trackPlayer(pid);
	}
}