/** * Dex DHTML multimedia player * @package CMS * @author Jonathan Dortheimer * @copyright Dex technologies L.T.D * @version 1.0 */ dex.player = function(container_id, media_url, link_url, sandbox_url) { this.jv = false; this.autostart = false; this.set_media_url = function(media_url){ this.media_url = media_url; this.set_ext(this.media_url.substring(this.media_url.lastIndexOf('.'))); }; this.set_link_url = function(link_url) { this.link_url = link_url; }; this.set_type = function(type){ switch (type){ case 'application/x-shockwave-flash': return this.set_ext( 'swf'); case 'video/quicktime': return this.set_ext( 'mov'); case 'video/x-msvideo': return this.set_ext( 'mov'); case 'audio/midi': return this.set_ext( 'mid'); case 'audio/basic': return this.set_ext( 'au'); case 'video/mpeg': return this.set_ext( 'mpg'); case 'video/x-ms-wm': return this.set_ext( 'wm'); case 'video/x-ms-wma': return this.set_ext( 'wma'); case 'video/x-ms-wmv': return this.set_ext( 'wmv'); case 'video/x-ms-wvx': return this.set_ext( 'wvx'); case 'video/x-ms-wmv': return this.set_ext( 'wmv'); case 'video/x-flv': return this.set_ext( 'flv'); case 'image/jpeg': return this.set_ext( 'jpg'); case 'image/gif': return this.set_ext( 'gif'); case 'image/png': return this.set_ext( 'png'); } }; this.set_autostart = function(value){ this.autostart = value ? true : false; }; this.set_ext = function(ext){ ext = ext.replace('.',''); this.media_ext = ext; }; this.set_logo = function(url) { this.logo = url }; this.set_volume = function(volume) { this.volume = parseInt(volume); }; this.set_preview_image = function(url) { this.set_preview_image = url }; this.set_width = function(width) { this.width = width; }; this.set_height = function(height) { this.height = height; }; this.fix_width = function() { var height, width, img, img_height, img_width; width = parseInt(this.get_width(this.container)*0.95); if (this.container.style.height) height = parseInt(parseInt(this.container.style.height)*0.95); else height = parseInt(width*0.61); // Sometime we have an image in the div, so we can get it's size from there. img = this.container.getElementsByTagName('IMG'); if (img && img[0]) { var image =img[0]; img_height = image.height; img_width = image.width; if (img_width'; htmlString+= ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; this.insert_html(htmlString); }; this.guess_player = function(){ var os = dex.utils.ua.os(); var mplayers = new Array(0,-1,-1,-1,-1,-1,-1,-1); var playerSupport = new Array(); //browser playerSupport[1] = new Array('jpeg','jpg','gif','tif','tiff','png','bmp'); //flash playerSupport[2] = new Array('swf'); //quicktime playerSupport[3] = new Array('mov','qt','qtm','avi','vfw','wav','bwf','aif','aiff','au','mid','midi','smf','mpeg','mpg','m1s','m1v','m1a','mpm','mpv','mpa','mp4','mpg4','swa','wmv'); //media player playerSupport[4] = new Array('asf','asx','wpl','wm','wmx','wmd','wmz','wma','wax','wmv','wvx','avi','wav','mpeg','mpg','mpe','m1v','mp2','mp2v','mpa','mid','midi','rmi','au','snd'); //real player playerSupport[5] = new Array('rm','rt','ra','ram','rp','rv','avi','mpeg','mpg','m1s','m1v','m1a','mpm','mpv','mpa','mp4','mpg4','wav','mid','midi','mov','qt'); //flv player playerSupport[6] = new Array('flv'); //swf mp3 player playerSupport[7] = new Array('mp3'); playerSupport[8] = new Array('flv'); var browserSupport = new Array(); browserSupport[1]= browserSupport[2] = browserSupport[6] = browserSupport[7] = browserSupport[8] = true; browserSupport[3] = true;//(pluginlist.indexOf("QuickTime")!=-1); browserSupport[4] = true;// (pluginlist.indexOf("MediaPlayer")!=-1); browserSupport[5] = true;// (pluginlist.indexOf("RealPlayer")!=-1 || pluginlist.indexOf("RealVideo")!=-1); //loop on installed plugins for (i=1;i<8;i++){ //loop on plugin ext for (j=0;playerSupport[i][j];j++){ if (playerSupport[i][j]==this.media_ext) mplayers[i]=1; } } //set windows if (this.media_url.indexOf('youtube.com')!=-1){ return 8; } else if (os == 'Windows' && mplayers[4]>0) return 4; else if (os == 'Windows' && mplayers[3]>0) return 3; else if (os == 'Mac' && mplayers[3]>0) return 3; else if (mplayers[5]>0) return 5; else{ for (i=1;i<8;i++){ if (mplayers[i]>0 && browserSupport[i]){ return i; } } } return false; }; this.render = function(media_url, ext, link_url) { if (media_url) this.set_media_url(media_url); if (ext) this.set_ext(ext); if (link_url) this.set_link_url(link_url); this.fix_width(); var html = ''; var playerid = this.guess_player(); switch (playerid){ case 1: this.render_image(); break; case 2: if (this.sandbox_url){ this.render_sandbox(); } else { this.render_flash(); } break; case 3: this.render_quicktime(); break; case 4: this.render_media_player(); break; case 5: break; case 6: this.render_flv_player(); break; case 7: this.render_mp3_player(); break; case 8: this.render_youtube_player(); break; default: this.insert_html(''+this.media_ext+' file'); break; } }; this.insert_html = function(html) { // This is an IE hack. // remove elements while ( this.container.hasChildNodes() ){ this.container.removeChild( this.container.firstChild ); } // append new element var newdiv = document.createElement("div"); newdiv.innerHTML = html; this.container.appendChild(newdiv); if (this.sandbox_url && document.getElementById(this.player_id+'_form')){ document.getElementById(this.player_id+'_form').submit(); } }; this.render_image = function (){ var htmlString; //windows media if (!this.link_url) { htmlString= ''; } else { htmlString= ''; } htmlString+= ''; this.insert_html(htmlString) }; this.render_media_player = function (){ var os = dex.utils.ua.os(); var htmlString; if (YAHOO.env.ua.ie>0 && os == 'Windows'){ htmlString = ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; htmlString+= ''; } else{ htmlString=' '; } this.insert_html(htmlString); }; this.render_flash = function () { var s1 = new SWFObject(this.media_url,this.player_id,this.width,this.height,'9'); s1.addParam('allowfullscreen','false'); s1.addParam('allowscriptaccess','never'); s1.addParam('quality','false'); s1.addParam('wmode','opaque'); s1.addParam('wmode','transparent'); s1.addParam('flashvars','file='+this.get_flv_link()+'&skin=/player/overlay.swf&frontcolor=ffffff&lightcolor=cc9900&controlbar=over&stretching=fill'); s1.write(this.container); }; this.get_flv_link = function() { var url = 'file='+this.media_url+'&autostart='+(this.autostart?"true":"false"); if (this.logo) { url+='&image='+this.logo; } if (this.preview_image) { url+='&logo='+this.preview_image; } if (this.volume) { url+='&volume='+this.volume; } return url; }; this.render_flv_player = function() { var s1 = new SWFObject('/player/player.swf',this.player_id,this.width,this.height,'9'); s1.addParam('allowfullscreen','false'); s1.addParam('allowscriptaccess','never'); s1.addParam('wmode','opaque'); s1.addVariable('plugins',''); //s1.addParam('flashvars','&file='+this.get_flv_link()+'&frontcolor=ffffff&lightcolor=cc9900&skin=http://www.longtailvideo.com/jw/upload/overlay.swf&controlbar=over&autostart=true'); s1.addParam('flashvars',this.get_flv_link()+'&skin=/player/overlay.swf&frontcolor=ffffff&lightcolor=cc9900&controlbar=over&stretching=fill'); s1.write(this.container); }; this.render_quicktime = function() { var htmlString = ''; htmlString+=''; this.insert_html(htmlString) }; this.preview = function() { if (this.jv) return false; this.jv = new SWFObject('/player/player.swf',this.player_id,this.width,this.height,'9'); this.jv.addParam('allowfullscreen','true'); this.jv.addParam('allowscriptaccess','always'); this.jv.addParam('wmode','transparent'); this.jv.addVariable('file',this.media_url); this.jv.addVariable('plugins',''); this.jv.addVariable('bufferlength','0'); this.jv.addVariable('controlbar','none'); this.jv.addVariable('dock','false'); this.jv.addVariable('icons','false'); this.jv.addVariable('repeat','always'); this.jv.addVariable('autostart','true'); this.jv.addVariable('stretching','exactfit'); this.jv.write(this.container); return this.jv; } this.preview_hide = function() { this.jv = false; this.container.innerHTML = ''; } var os = dex.utils.ua.os(); // Add vb script to check on plugins if (YAHOO.env.ua.ie>0 && os == 'Windows'){ if (!document.getElementById('vbscript_for_plugins')){ var script = document.createElement('script'); script.language = "VBscript"; script.id = 'vbscript_for_plugins'; var script_str = 'Function detect()\n'; script_str+= 'detectableWithVB = False\n'; script_str+= 'If ScriptEngineMajorVersion >= 2 then\n'; script_str+= 'detect= True\n'; script_str+= 'Else\n'; script_str+= 'detect= False\n'; script_str+= 'End If\n'; script_str+= 'End function\n'; script_str+= 'Function detectActiveXControl(activeXControlName)\n'; script_str+= 'on error resume next\n'; script_str+= 'detectActiveXControl = False\n'; script_str+= 'detectActiveXControl = IsObject(CreateObject(activeXControlName))\n'; script_str+= 'End Function\n'; script_str+= 'Function detectQuickTimeActiveXControl()\n'; script_str+= 'on error resume next\n'; script_str+= 'detectQuickTimeActiveXControl = False\n'; script_str+= 'hasQuickTimeChecker = false\n'; script_str+= 'Set hasQuickTimeChecker = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1")\n'; script_str+= 'If IsObject(hasQuickTimeChecker) Then\n'; script_str+= 'If hasQuickTimeChecker.IsQuickTimeAvailable(0) Then\n'; script_str+= 'detectQuickTimeActiveXControl = True\n'; script_str+= 'End If\n'; script_str+= 'End If\n'; script_str+= 'End Function\n'; script.innerHtml = script_str; document.getElementById(container_id).appendChild(script); } }; this.set_media_url(media_url); this.set_container(container_id); // dex.events.subscribe('page_refresh', function() { // //console.log(this); // this.render(); // }, this); }; dex.player.fix_width_onload = function(image,width, height){ if (image.width > width){ image.height = (image.height*width)/image.width; image.width = width; } image.style.visibility = 'visible'; }; YAHOO.register("dex.player", dex.player, {version: "1", build: "1"});