
var WMedia;

(function() {

	WMedia = {
		create: function(_url, _div, _options, _width, _height) {
			if(_width) _options.width = _width;
			if(_height) _options.height = _height;

			var width, height, container;
			var options, preload, url, mediaType = "none", mediaSplit;
			var src = "", flashvars = "";
			var extratext = "", error = "";
			var defaultWidth = 500;
			var defaultHeight = 282;

			if(_div) {
				if(typeof _div == "string") _div = document.getElementById(_div);
				if(!_div) return false;
				container = _div;
			} else {
				container = new Element("div");
			}

			options = $extend({
				width: 0,
				height: 0,
				sizeForControls: true,
				id: '',
				loop: false,
				
				textExtra: false,
				textGoggles: false,
//			Global media options
				scriptaccess: 'true',		// Allow script access to flash files
				fullscreen: 'true',			// Use fullscreen
				fullscreenNum: '1',			// 1 = true
				autoplay: '0',			// Plays the video as soon as it's opened
//				volume: '50',				// 0-100 (not currently implemented)
				bgcolor: '#000000',			// Background color, used for both flash and QT media
				wmode: 'opaque',			// Background setting for Adobe Flash ('opaque' and 'transparent' are most common)
//			JW Media Player settings and options
				playerpath: 'http://js.team9000.net/jw.swf',	// Path to the mediaplayer.swf or flvplayer.swf file
				backcolor:	'000000',		// Base color for the controller, color name / hex value (0x000000)
				frontcolor: '999999',		// Text and button color for the controller, color name / hex value (0x000000)
				lightcolor: '000000',		// Rollover color for the controller, color name / hex value (0x000000)
				screencolor: '000000',		// Rollover color for the controller, color name / hex value (0x000000)
				controlbar: 'bottom',			// bottom, over, none (this setting is ignored when playing audio files)
//			NonverBlaster
				useNB: false,				// use NonverBlaster in place of the JW Media Player for .flv and .mp4 files
				NBpath: 'http://js.team9000.net/nb.swf',	// Path to NonverBlaster.swf
				controlColor: '0xFFFFFF',	// set the controlbar color
				controlBackColor: '0x000000',	// set the controlbar color
				showTimecode: 'false',		// turn timecode display off or on
//			Quicktime options
				controller: 'true',		// Show controller, true / false
//			Flickr options
				flInfo: 'true',			// Show title and info at video start
//			Revver options
//				revverID: '187866',		// Revver affiliate ID, required for ad revinue sharing
				revverID: '0',
				revverFullscreen: 'true',	// Fullscreen option
				revverBack: '000000',		// Background color
				revverFront: 'ffffff',		// Foreground color
				revverGrad: '000000',		// Gradation color
//			Ustream options
				usViewers: 'true',				// Show online viewer count (true/false)
//			Youtube options
				ytBorder: '0',			// Outline				(1=true, 0=false)
				ytColor1: '000000',		// Outline color
				ytColor2: '333333',		// Base interface color (highlight colors stay consistent)
				ytHD: 0,			// 1 = HD Default, 0 = Non-HD Default
				ytIv: 3,
				ytRel: '0',			// Show related videos	(1=true, 0=false)
				ytInfo: '1',			// Show video info		(1=true, 0=false)
				ytSearch: '0',			// Show search field	(1=true, 0=false)
				ytNewPlayer: false,
//			Viddyou options
				vuPlayer: 'basic',		// Use 'full' or 'basic' players
//			Vimeo options
				vmTitle: '1',			// Show video title
				vmByline: '1',			// Show byline
				vmPortrait: '1',		// Show author portrait
				vmColor: 'ffffff'		// Custom controller colors, hex value minus the # sign, defult is 5ca0b5
			}, _options || {});

			url = encodeURI(_url).replace("(","%28").replace(")","%29");
			if(options.id == '') options.id = "wMedia_"+Math.random();
			options.autoplayTrue = options.autoplay == '1' ? 'true' : 'false';
			options.autoplayYes = options.autoplay == '1' ? 'yes' : 'no';

			var controlHeight = 0;
			var controlWidth = 0;
			var matches;

// Quietube and yFrog support
			if (url.match(/quietube\.com/i)) {
				mediaSplit = url.split('v.php/');
				url = mediaSplit[1];
			} else if (url.match(/\/\/yfrog/i)) {
				mediaType = (url.substring(url.length-1));
				if (mediaType.match(/b|g|j|p|t/i)) mediaType = 'image';
				if (mediaType == 's') mediaType = 'flash';
				if (mediaType.match(/f|z/i)) mediaType = 'video';
				url = url+":iphone";
			} else if(matches = url.match(/maniacworld\.com\/(.*)\.html/i)) {
				url = "http://www.maniacworld.com/flv/"+matches[1]+".flv";
			} else if(matches = url.match(/keygenjukebox\.com\/\?i=(.*)/i)) {
				url = "http://www.keygenjukebox.com/m/"+matches[1];
			}
			
			if(matches = url.match(/keygenjukebox\.com\/(?:\?i=|m\/)(.*)/i)) {
				extratext = "<a href=\"http://www.keygenjukebox.com/?i="+matches[1]+"\" target=\"_blank\">Found on KeygenJukebox</a>";
			}
			
			if (url.match(/\.flv|\.mp4/i) || mediaType == 'video') {
				controlHeight = 24;
				if (options.useNB) {
					src = ''+options.NBpath+'?mediaurl='+url+'&allowSmoothing=true&autoPlay='+options.autoplayTrue+'&buffer=6&showTimecode='+options.showTimecode+'&loop='+(options.loop?'1':'0')+'&controlColor='+options.controlColor+'&controlBackColor='+options.controlBackColor+'&scaleIfFullScreen=true&showScalingButton=true&crop=false';
				} else {
					src = ''+options.playerpath+'?file='+url+'&backcolor='+options.backcolor+'&frontcolor='+options.frontcolor+'&lightcolor='+options.lightcolor+'&screencolor='+options.screencolor+'&autostart='+options.autoplayTrue+'&controlbar='+options.controlbar+'&repeat='+(options.loop?'always':'none');
				}
			} else if (url.match(/\.mp3|\.aac|tweetmic\.com|tmic\.fm/i) || mediaType == 'audio') {
				options.height = 24;
				if (url.match(/tweetmic\.com|tmic\.fm/i)) {
					url = url.split('/');
					url[4] = url[4] || url[3];
					url = "http://media4.fjarnet.net/tweet/tweetmicapp-"+url[4]+'.mp3';
				}
				if (options.useNB) {
					src = ''+options.NBpath+'?mediaurl='+url+'&allowSmoothing=true&autoPlay='+options.autoplayTrue+'&buffer=6&showTimecode='+options.showTimecode+'&loop='+(options.loop?'1':'0')+'&controlColor='+options.controlColor+'&controlBackColor='+options.controlBackColor+'&scaleIfFullScreen=true&showScalingButton=true&crop=false';
				} else {
					src = ''+options.playerpath+'?file='+url+'&backcolor='+options.backcolor+'&frontcolor='+options.frontcolor+'&lightcolor='+options.lightcolor+'&screencolor='+options.screencolor+'&autostart='+options.autoplayTrue+'&repeat='+(options.loop?'always':'none');
				}
			} else if (url.match(/\.swf/i) || mediaType == 'flash') {
				src = url;
			} else if (url.match(/blip\.tv/i)) {
				src = url + '?backcolor=0x990000&autostart=false';
				controlHeight = 30;
			} else if (url.match(/break\.com/i)) {
				mediaSplit = url.match(/\d{6}/g)
				src = 'http://embed.break.com/'+mediaSplit;
			} else if (url.match(/dailymotion\.com/i)) {
				mediaType = 'obj';
				src = url;
			} else if (url.match(/facebook\.com/i)) {
				mediaSplit = url.split('v=');
				mediaSplit = mediaSplit[1].split('&');
				mediaSplit = mediaSplit[0];
				src = 'http://www.facebook.com/v/'+mediaSplit;
			} else if (url.match(/flickr\.com/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[5];
				src = 'http://www.flickr.com/apps/video/stewart.swf';
//				classid: 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
				flashvars = 'photo_id='+mediaSplit+'&amp;show_info_box='+options.flInfo;
			} else if (url.match(/fliggo\.com/i)) {
				src = url.replace('/video/', '/embed/');
			} else if (url.match(/gametrailers\.com/i)) {
//				controlHeight = 32;
				defaultWidth = 480;
				defaultHeight = 392;
				mediaSplit = url.match(/\d{5,}/g)
				src = 'http://www.gametrailers.com/remote_wrap.php?umid='+mediaSplit;
			} else if (url.match(/google\.com\/videoplay/i)) {
				mediaSplit = url.split('=');
				mediaSplit = mediaSplit[1];
				src = 'http://video.google.com/googleplayer.swf?docId='+mediaSplit+'&autoplay='+options.autoplay;
			} else if (url.match(/justin\.tv/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[3];
				src = 'http://www.justin.tv/widgets/jtv_player.swf';
				flashvars = 'channel='+mediaSplit;
			} else if (url.match(/liveleak\.com/i)) {
				mediaSplit = url.split('?i=');
				mediaSplit = mediaSplit[1];
				controlHeight = 20;
				src = 'http://www.liveleak.com/e/'+mediaSplit;
			} else if (url.match(/megavideo\.com/i)) {
				mediaSplit = url.split('=');
				mediaSplit = mediaSplit[1];
				src = 'http://wwwstatic.megavideo.com/mv_player.swf?v='+mediaSplit;
			} else if (url.match(/metacafe\.com\/watch/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[4];
				src = 'http://www.metacafe.com/fplayer/'+mediaSplit+'/.swf?playerVars=autoPlay='+options.autoplayYes;
			} else if (url.match(/myspacetv\.com|vids\.myspace\.com/i)) {
				mediaSplit = url.split('=');
				mediaSplit = mediaSplit[2];
				src = 'http://lads.myspace.com/videos/vplayer.swf?m='+mediaSplit+'&v=2&a='+options.autoplay+'&type=video';
			} else if (url.match(/revver\.com/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[4];
				src = 'http://flash.revver.com/player/1.0/player.swf?mediaId='+mediaSplit+'&affiliateId='+options.revverID+'&allowFullScreen='+options.revverFullscreen+'&autoStart='+options.autoplayTrue+'&backColor=#'+options.revverBack+'&frontColor=#'+options.revverFront+'&gradColor=#'+options.revverGrad+'&shareUrl=revver';
			} else if (url.match(/rutube\.ru/i)) {
				mediaSplit = url.split('=');
				mediaSplit = mediaSplit[1];
				src = 'http://video.rutube.ru/'+mediaSplit;
			} else if (url.match(/seesmic\.com/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[5];
				src = 'http://seesmic.com/Standalone.swf?video='+mediaSplit;
			} else if (url.match(/tudou\.com/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[5];
				src = 'http://www.tudou.com/v/'+mediaSplit;
			} else if (url.match(/twitcam\.com/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[3];
				src = 'http://static.livestream.com/chromelessPlayer/wrappers/TwitcamPlayer.swf?hash='+mediaSplit;
			} else if (url.match(/twitvid\.com/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[3];
				src = 'http://www.twitvid.com/player/'+mediaSplit;
			} else if (url.match(/twitvid\.io/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[3];
				src = 'http://twitvid.io/embed/'+mediaSplit;
			} else if (url.match(/ustream\.tv/i)) {
				src = url+'&amp;viewcount='+options.usViewers+'&amp;autoplay='+options.autoplayTrue;
			} else if (url.match(/youku\.com/i)) {
				mediaSplit = url.split('id_');
				mediaSplit = mediaSplit[1];
				src = 'http://player.youku.com/player.php/sid/'+mediaSplit+'=/v.swf';
			} else if (url.match(/youtube\.com/i)) {
				if(url.match(/youtube\.com\/watch/i)) {
					mediaSplit = url.split('v=');
					mediaSplit = mediaSplit[1];
					src = 'http://www.youtube.com/v/'+mediaSplit;
				} else if(url.match(/youtube\.com\/view/i)) {
					mediaSplit = url.split('p=');
					mediaSplit = mediaSplit[1];
					src = 'http://www.youtube.com/p/'+mediaSplit;
				}

				if(options.ytNewPlayer) {
					src += '?version=3';
					controlHeight = 31;
				} else {
					src += '?version=2';
					controlHeight = 30;
				}
				src += '&autoplay='+options.autoplay;
				src += '&loop='+(options.loop?'1':'0');
				src += '&fs='+options.fullscreenNum;
				src += '&border='+options.ytBorder;
				src += '&color1=0x'+options.ytColor1;
				src += '&color2=0x'+options.ytColor2;
				src += '&rel='+options.ytRel;
				src += '&showinfo='+options.ytInfo;
				src += '&showsearch='+options.ytSearch;
				src += '&iv_load_policy='+options.ytIv;
				src += '&hd='+options.ytHD;
				
				if(options.textGoggles)
					extratext = "<a href=\"http://www.team9000.net/xray#v="+mediaSplit+"\" target=\"_blank\">Watch on Team9000 Goggles</a>";
			} else if (url.match(/veoh\.com/i)) {
				mediaSplit = url.split('videos/');
				mediaSplit = mediaSplit[1];
				src = 'http://www.veoh.com/videodetails2.swf?permalinkId='+mediaSplit+'&player=videodetailsembedded&videoAutoPlay='+options.Autoplay;
			} else if (url.match(/viddler\.com/i)) {
				if(!url.match(/viddler\.com\/player\/[0-9a-z]*/i)) {
					error = "This viddler video wasn't embedded correctly :(. To embed viddler videos, click \"Embed\" on the video page, and find the url that looks like this (http://www.viddler.com/player/??????). Then, use that URL in your embed tag.";
				}
				controlHeight = 41;
				src = url;
			} else if (url.match(/viddyou\.com/i)) {
				mediaSplit = url.split('=');
				mediaSplit = mediaSplit[1];
				src = 'http://www.viddyou.com/get/v2_'+options.vuPlayer+'/'+mediaSplit+'.swf';
			} else if (url.match(/vimeo\.com/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[3];
				src = 'http://www.vimeo.com/moogaloop.swf?clip_id='+mediaSplit+'&amp;server=www.vimeo.com&amp;fullscreen='+options.fullscreenNum+'&amp;autoplay='+options.autoplay+'&amp;show_title='+options.vmTitle+'&amp;show_byline='+options.vmByline+'&amp;show_portrait='+options.vmPortrait+'&amp;color='+options.vmColor;
			} else if (url.match(/12seconds\.tv/i)) {
				mediaSplit = url.split('/');
				mediaSplit = mediaSplit[5];
				src = 'http://embed.12seconds.tv/players/remotePlayer.swf';
				flashvars = 'vid='+mediaSplit;
			}

			if(!options.width) options.width = defaultWidth;
			if(!options.height) options.height = defaultHeight;
			if(options.sizeForControls) {
				options.width += controlWidth;
				options.height += controlHeight;
			}

			if(src != "") {
				preload = new Swiff(src, {
					id: options.id,
					width: options.width,
					height: options.height,
					params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen, flashvars: flashvars}
					});
				mediaType = 'obj';
			} else {
				preload = "This media type is not supported";
				preload.id = options.id;
				mediaType = 'inline';
			}

			$(container).set('html', '');
			if (mediaType == "img") {
				// sizes aren't set early, because we don't know what they are
				width = preload.width;
				height = preload.height;
	
				if (Browser.Engine.trident) preload = $(preload);
				preload.inject(container);
			} else if (mediaType == "obj") {
				if(error != "") {
					$(container).set('html', '<b>Error</b><br/>'+error);
				} else if(Browser.Plugins.Flash.version<8) {
					$(container).set('html', '<b>Error</b><br/>Adobe Flash is either not installed or not up to date, please visit <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" title="Get Flash" target="_new">Adobe.com</a> to download the free player.');
				} else {
					preload.inject(container);
					if(extratext != "" && options.textExtra) {
						extratextdiv = new Element("div");
						$(extratextdiv).set('html', extratext);
						extratextdiv.inject(container);
					}
				}
			} else if (mediaType == "inline") {
				$(container).set('html', preload);
			} else if (mediaType == "url") {
				preload.inject(container);
			} else {
				$(container).set('html', '<b>Error</b><br/>A file type error has occoured, please contact the website author for more information.');
			}
			$(container).setStyles({width: width, height: height});
		}
	}

})();






// MEDIA TYPES
// IMAGES
/*			if (url.match(/\.gif|\.jpg|\.png|twitpic\.com/i) || mediaType == 'image') {
				mediaType = 'img';
				url = url.replace(/twitpic\.com/i, "twitpic.com/show/full");
				preload = new Image();
				preload.onload = loaded;
				preload.src = url;
				preload.id = options.id;
*/

// CONTENT TYPES
// INLINE
/*			} else if (url.match(/\#mb_/i)) {
				mediaType = 'inline';
				width = width || options.defaultWidth;
				height = height || options.defaultHeight;
				urlsplit = url.split('#');
				preload = $(urlsplit[1]).get('html');
				preload.id = options.id,
				loaded();
// HTML
			} else {
				mediaType = 'url';
				width = width || options.defaultWidth;
				height = height || options.defaultHeight;
				preload = new Element('iframe', {
					'src': url,
					'id': options.id,
					'width': width,
					'height': height,
//					'allowtransparency': 'true',
					'frameborder': 0
					});
				loaded();
			}*/