function DynTube(){
	var my = this;

	this.defaults = {
		BaseUrl: "http://www.youtube.com/v/",
		
		LinkSrcRegex: "v=(.*)&|v=(.*)"
	}

	this.init = function (options){
		for(var name in my.defaults){
			this[name] = (options !== undefined && options[name] !== undefined) ? options[name] : my.defaults[name];
		}

		var regex = new RegExp(my.LinkSrcRegex);
		var links = document.getElementsByTagName("a");
		if(document.getElementsByTagName && links.length > 0) {
			for (i=0;i<links.length;i ++) {
				var match = regex.exec(links[i].href);

				if(match != null){
					var keyval;
					if(match[1] == undefined || match[1] == ""){
						keyval = match[2];
					}else{
						keyval = match[1];
					}
					if(keyval != undefined && keyval != "" && keyval.length > 4){
						links[i].href = "javascript:DynTubeInstance.getVideo('"+ keyval +"');"
						links[i].target = "";
					}
				}
				/*Links[i].style.display = 'none';*/
			}
		}
		
	};
	this.getVideo = function(key){
		document.getElementById("video").style.display = 'inline';
		document.getElementById("video").children[0].innerHTML = '<param value="'+my.BaseUrl + key+'" name="movie"><param value="true" name="allowFullScreen"><param value="always" name="allowscriptaccess"><param value="transparent" name="wmode"><embed width="100%" height="100%" allowfullscreen="true" allowscriptaccess="always" wmode="transparent" type="application/x-shockwave-flash" src="'+my.BaseUrl + key+'">';
	};
	this.Helper = {
		/* Add events */
		addEvent: function(obj, type, fn){
			if(obj.addEventListener){
				obj.addEventListener(type, fn, false);
			}else if(obj.attachEvent){
				obj["e"+type+fn] = fn;
				obj[type+fn] = function() { obj["e"+type+fn]( window.event ); };
				obj.attachEvent( "on"+type, obj[type+fn] );
			}
		},
	
		/* Remove events */
		removeEvent: function( obj, type, fn ){
			if (obj.removeEventListener){
				obj.removeEventListener( type, fn, false );
			}else if (obj.detachEvent){
				/* The IE breaks if you're trying to detach an unattached event http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx */
				if(obj[type+fn] === undefined){
					alert('Helper.removeEvent » Pointer to detach event is undefined - perhaps you are trying to detach an unattached event?');
				}
				obj.detachEvent( 'on'+type, obj[type+fn] );
				obj[type+fn] = null;
				obj['e'+type+fn] = null;
			}
		},
	
		/* Set image opacity */
		setOpacity: function(object, value){
			if(my.opacity === true){
				object.style.opacity = value/10;
				object.style.filter = 'alpha(opacity=' + value*10 + ')';
			}
		},
	
		/* Create HTML elements */
		createDocumentElement: function(type, id, optionalClass){
			var element = document.createElement(type);
			element.setAttribute('id', my.dyntube+'_'+id);
			if(optionalClass !== undefined){
				id += ' '+optionalClass;
			}
			my.Helper.setClassName(element, id);
			return element;
		},
	
		/* Set CSS class */
		setClassName: function(element, className){
			if(element){
				element.setAttribute('class', className);
				element.setAttribute('className', className);
			}
		},
	
		/* Suppress default browser behaviour to avoid image/text selection while dragging */
		suppressBrowserDefault: function(e){
			if(e.preventDefault){
				e.preventDefault();
			}else{
				e.returnValue = false;
			}
			return false;
		},
	
		/* Add functions to the window.onresize event - can not be done by addEvent */
		addResizeEvent: function(){
			var otherFunctions = window.onresize;
			if(typeof window.onresize != 'function'){
				window.onresize = function(){
					my.refresh();
				};
			}else{
				window.onresize = function(){
					if (otherFunctions){
						otherFunctions();
					}
					my.refresh();
				};
			}
		}
	};
}

/* DOMContentLoaded event handler - by Tanny O'Haley [4] */
var domReadyEvent =
{
	name: "domReadyEvent",
	/* Array of DOMContentLoaded event handlers.*/
	events: {},
	domReadyID: 1,
	bDone: false,
	DOMContentLoadedCustom: null,

	/* Function that adds DOMContentLoaded listeners to the array.*/
	add: function(handler)
	{
		/* Assign each event handler a unique ID. If the handler has an ID, it has already been added to the events object or been run.*/
		if (!handler.$$domReadyID)
		{
			handler.$$domReadyID = this.domReadyID++;

			/* If the DOMContentLoaded event has happened, run the function. */
			if(this.bDone)
			{
				handler();
			}

			/* store the event handler in the hash table */
			this.events[handler.$$domReadyID] = handler;
		}
	},

	remove: function(handler)
	{
		/* Delete the event handler from the hash table */
		if (handler.$$domReadyID)
		{
			delete this.events[handler.$$domReadyID];
		}
	},

	/* Function to process the DOMContentLoaded events array. */
	run: function()
	{
		/* quit if this function has already been called */
		if (this.bDone)
		{
			return;
		}

		/* Flag this function so we don't do the same thing twice */
		this.bDone = true;

		/* iterates through array of registered functions */
		for (var i in this.events)
		{
			this.events[i]();
		}
	},

	schedule: function()
	{
		/* Quit if the init function has already been called*/
		if (this.bDone)
		{
			return;
		}

		/* First, check for Safari or KHTML.*/
		if(/KHTML|WebKit/i.test(navigator.userAgent))
		{
			if(/loaded|complete/.test(document.readyState))
			{
				this.run();
			}
			else
			{
				/* Not ready yet, wait a little more.*/
				setTimeout(this.name + ".schedule()", 100);
			}
		}
		else if(document.getElementById("__ie_onload"))
		{
			/* Second, check for IE.*/
			return true;
		}

		/* Check for custom developer provided function.*/
		if(typeof this.DOMContentLoadedCustom === "function")
		{
			/* if DOM methods are supported, and the body element exists (using a double-check
			including document.body, for the benefit of older moz builds [eg ns7.1] in which
			getElementsByTagName('body')[0] is undefined, unless this script is in the body section) */
			if(typeof document.getElementsByTagName !== 'undefined' && (document.getElementsByTagName('body')[0] !== null || document.body !== null))
			{
				/* Call custom function. */
				if(this.DOMContentLoadedCustom())
				{
					this.run();
				}
				else
				{
					/* Not ready yet, wait a little more. */
					setTimeout(this.name + ".schedule()", 250);
				}
			}
		}
		return true;
	},

	init: function()
	{
		/* If addEventListener supports the DOMContentLoaded event.*/
		if(document.addEventListener)
		{
			document.addEventListener("DOMContentLoaded", function() { domReadyEvent.run(); }, false);
		}

		/* Schedule to run the init function.*/
		setTimeout("domReadyEvent.schedule()", 100);

		function run()
		{
			domReadyEvent.run();
		}

		/* Just in case window.onload happens first, add it to onload using an available method.*/
		if(typeof addEvent !== "undefined")
		{
			addEvent(window, "load", run);
		}
		else if(document.addEventListener)
		{
			document.addEventListener("load", run, false);
		}
		else if(typeof window.onload === "function")
		{
			var oldonload = window.onload;
			window.onload = function()
			{
				domReadyEvent.run();
				oldonload();
			};
		}
		else
		{
			window.onload = run;
		}

		/* for Internet Explorer */
		/*@cc_on
			@if (@_win32 || @_win64)
			document.write("<script id=__ie_onload defer src=\"//:\"><\/script>");
			var script = document.getElementById("__ie_onload");
			script.onreadystatechange = function()
			{
				if (this.readyState == "complete")
				{
					domReadyEvent.run(); // call the onload handler
				}
			};
			@end
		@*/
	}
};
var domReady = function(handler) { domReadyEvent.add(handler); };
domReadyEvent.init();
var DynTubeInstance;

domReady(function(){
	DynTubeInstance = new DynTube();
	DynTubeInstance.init({});
});
