/**
* 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+= '';
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+= '';
}
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 = '';
this.insert_html(htmlString)
};
this.render_mp3_list_player = function() {
this.fix_width();
var s1 = new SWFObject('/player/player.swf',this.player_id,this.width,'220','9');
s1.addParam('allowfullscreen','true');
s1.addParam('allowscriptaccess','always');
s1.addParam('wmode','opaque');
s1.addParam('flashvars','file='+this.media_url+'&height=20&playlistsize=200&playlist=bottom'+(this.autostart?'&autostart=true':''));
s1.write(this.container);
};
this.render_mp3_player = function() {
var s1 = new SWFObject('/player/player.swf',this.player_id,this.width,'20','9');
s1.addParam('allowfullscreen','true');
s1.addParam('allowscriptaccess','always');
s1.addParam('wmode','opaque');
s1.addParam('flashvars','file='+this.media_url+'&height=20'+(this.autostart?'&autostart=true':''));
s1.write(this.container);
};
/*
this.render_youtube_player = function() {
var s1 = new SWFObject(this.media_url+(this.autostart?'&autoplay=1':''),this.player_id,this.width,this.height,'9');
s1.addParam('allowfullscreen','true');
s1.addParam('allowscriptaccess','always');
s1.addParam('wmode','transparent');
s1.write(this.container);
};
*/
this.render_youtube_player = function() {
var 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"});