Julio Montoya vor 14 Jahren
Ursprung
Commit
55715df204

+ 28 - 28
main/admin/special_exports.php

@@ -72,13 +72,13 @@ if ((isset ($_POST['action']) && $_POST['action'] == 'course_select_form') || (i
 				$tbl_property = Database::get_course_table(TABLE_ITEM_PROPERTY, $_course['db_name']);
 				//Add tem to the zip file course
 				$sql = "SELECT path FROM $tbl_document AS docs, $tbl_property AS props
-					WHERE `props`.`tool`='".TOOL_DOCUMENT."'
-						AND `docs`.`id`=`props`.`ref`
-						AND `docs`.`path` LIKE '".$querypath."/%'
-						AND `docs`.`filetype`='file'
-						AND `docs`.`session_id` = '0'
-						AND `props`.`visibility`<>'2'
-						AND `props`.`to_group_id`=".$to_group_id."";
+					WHERE props.tool='".TOOL_DOCUMENT."'
+						AND docs.id=props.ref
+						AND docs.path LIKE '".$querypath."/%'
+						AND docs.filetype='file'
+						AND docs.session_id = '0'
+						AND props.visibility<>'2'
+						AND props.to_group_id=".$to_group_id."";
 				$query = Database::query($sql );
 				while ($rows_course_file = Database::fetch_assoc($query)) {
 					$zip_folder->add($FileZip['PATH_COURSE'].$_course['directory']."/document".$rows_course_file['path'],
@@ -90,13 +90,13 @@ if ((isset ($_POST['action']) && $_POST['action'] == 'course_select_form') || (i
 					$session_id = Security::remove_XSS($IdSession);
 					//Add tem to the zip file session course
 					$sql_session_doc = "SELECT path FROM $tbl_document AS docs,$tbl_property AS props
-						WHERE `props`.`tool`='".TOOL_DOCUMENT."'
-							AND `docs`.`id`=`props`.`ref`
-							AND `docs`.`path` LIKE '".$querypath."/%'
-							AND `docs`.`filetype`='file'
-							AND `docs`.`session_id` = '$session_id'
-							AND `props`.`visibility`<>'2'
-							AND `props`.`to_group_id`=".$to_group_id."";
+						WHERE props.tool='".TOOL_DOCUMENT."'
+							AND docs.id=props.ref
+							AND docs.path LIKE '".$querypath."/%'
+							AND docs.filetype='file'
+							AND docs.session_id = '$session_id'
+							AND props.visibility<>'2'
+							AND props.to_group_id=".$to_group_id."";
 					$query_session_doc = Database::query($sql_session_doc);
 					while ($rows_course_session_file = Database::fetch_assoc($query_session_doc)) {
 						$zip_folder->add($FileZip['PATH_COURSE'].$_course['directory'].'/document'.$rows_course_session_file['path'],
@@ -223,13 +223,13 @@ function fullexportspecial(){
             $tbl_property = Database::get_course_table(TABLE_ITEM_PROPERTY, $_course['db_name']);
             //Add tem to the zip file course
             $sql = "SELECT path FROM $tbl_document AS docs, $tbl_property AS props
-                WHERE `props`.`tool`='".TOOL_DOCUMENT."'
-                    AND `docs`.`id`=`props`.`ref`
-                    AND `docs`.`path` LIKE '".$querypath."/%'
-                    AND `docs`.`filetype`='file'
-                    AND `docs`.`session_id` = '0'
-                    AND `props`.`visibility`<>'2'
-                    AND `props`.`to_group_id`=".$to_group_id."";
+                WHERE props.tool='".TOOL_DOCUMENT."'
+                    AND docs.id=props.ref
+                    AND docs.path LIKE '".$querypath."/%'
+                    AND docs.filetype='file'
+                    AND docs.session_id = '0'
+                    AND props.visibility<>'2'
+                    AND props.to_group_id=".$to_group_id."";
             $query = Database::query($sql );
             while ($rows_course_file = Database::fetch_assoc($query)) {
                 $rows_course_file['path'];
@@ -247,13 +247,13 @@ function fullexportspecial(){
             while ($rows_session = Database::fetch_assoc($query_session)) {
                 $session_id = $rows_session['id'];
                 $sql_session_doc = "SELECT path FROM $tbl_document AS docs,$tbl_property AS props
-                    WHERE `props`.`tool`='".TOOL_DOCUMENT."'
-                        AND `docs`.`id`=`props`.`ref`
-                        AND `docs`.`path` LIKE '".$querypath."/%'
-                        AND `docs`.`filetype`='file'
-                        AND `docs`.`session_id` = '$session_id'
-                        AND `props`.`visibility`<>'2'
-                        AND `props`.`to_group_id`=".$to_group_id."";
+                    WHERE props.tool='".TOOL_DOCUMENT."'
+                        AND docs.id=props.ref
+                        AND docs.path LIKE '".$querypath."/%'
+                        AND docs.filetype='file'
+                        AND docs.session_id = '$session_id'
+                        AND props.visibility<>'2'
+                        AND props.to_group_id=".$to_group_id."";
                 $query_session_doc = Database::query($sql_session_doc);
                 while ($rows_course_session_file = Database::fetch_assoc($query_session_doc)) {
                     $zip_folder->add($FileZip['PATH_COURSE'].$_course['directory'].'/document'.$rows_course_session_file['path'],

+ 1 - 1
main/calendar/agenda.inc.php

@@ -3413,7 +3413,7 @@ function get_day_agendaitems($courses_dbs, $month, $year, $day) {
 								WHERE agenda.id = item_property.ref
 								AND DAYOFMONTH(start_date)='".$day."' AND MONTH(start_date)='".$month."' AND YEAR(start_date)='".$year."'
 								AND item_property.tool='".TOOL_CALENDAR_EVENT."'
-								AND	( item_property.to_user_id='".$_user['user_id']."' OR `item_property`.`to_group_id` IN (0, ".implode(", ", $group_memberships).") )
+								AND	( item_property.to_user_id='".$_user['user_id']."' OR item_property.to_group_id IN (0, ".implode(", ", $group_memberships).") )
 								AND item_property.visibility='1'
 								ORDER BY start_date ";
 			} else {

+ 4 - 4
main/document/downloadfolder.inc.php

@@ -79,7 +79,7 @@ if (is_allowed_to_edit()) {
 		$querypath = $path;
 	}
 	// Search for all files that are not deleted => visibility != 2
-	$query = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props  WHERE `props`.`tool`='".TOOL_DOCUMENT."' AND `docs`.`id`=`props`.`ref` AND `docs`.`path` LIKE '".$querypath."/%' AND `docs`.`filetype`='file' AND `props`.`visibility`<>'2' AND `props`.`to_group_id`=".$to_group_id."");
+	$query = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props  WHERE props.tool='".TOOL_DOCUMENT."' AND docs.id=props.ref AND docs.path LIKE '".$querypath."/%' AND docs.filetype='file' AND props.visibility<>'2' AND props.to_group_id=".$to_group_id."");
 	// Add tem to the zip file
 	while ($not_deleted_file = Database::fetch_assoc($query)) {
 		$zip_folder->add($sys_course_path.$_course['path'].'/document'.$not_deleted_file['path'], PCLZIP_OPT_REMOVE_PATH, $sys_course_path.$_course['path'].'/document'.$remove_dir);
@@ -95,7 +95,7 @@ else {
 	// A big problem: Visible files that are in a hidden folder are included when we do a query for visiblity='v'
 	// So... I do it in a couple of steps:
 	// 1st: Get all files that are visible in the given path
-	$query = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props WHERE `props`.`tool`='".TOOL_DOCUMENT."' AND `docs`.`id`=`props`.`ref` AND `docs`.`path` LIKE '".$querypath."/%' AND `props`.`visibility`='1' AND `docs`.`filetype`='file' AND `props`.`to_group_id`=".$to_group_id);
+	$query = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props WHERE props.tool='".TOOL_DOCUMENT."' AND docs.id=props.ref AND docs.path LIKE '".$querypath."/%' AND props.visibility='1' AND docs.filetype='file' AND props.to_group_id=".$to_group_id);
 	// Add them to an array
 	while ($all_visible_files = Database::fetch_assoc($query)) {
 		$all_visible_files_path[] = $all_visible_files['path'];
@@ -105,14 +105,14 @@ else {
 	//print_r($all_visible_files_path);
 	//echo('</pre>');
 	// 2nd: Get all folders that are invisible in the given path
-	$query2 = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props WHERE `props`.`tool`='".TOOL_DOCUMENT."' AND `docs`.`id`=`props`.`ref` AND `docs`.`path` LIKE '".$querypath."/%' AND `props`.`visibility`<>'1' AND `docs`.`filetype`='folder'");
+	$query2 = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props WHERE props.tool='".TOOL_DOCUMENT."' AND docs.id=props.ref AND docs.path LIKE '".$querypath."/%' AND props.visibility<>'1' AND docs.filetype='folder'");
 	// If we get invisible folders, we have to filter out these results from all visible files we found
 	if (Database::num_rows($query2) > 0) {
 		// Add tem to an array
 		while ($invisible_folders = Database::fetch_assoc($query2)) {
 		//3rd: Get all files that are in the found invisible folder (these are "invisible" too)
 			//echo "<br /><br />invisible folders: ".$sys_course_path.$_course['path'].'/document'.$invisible_folders['path'].'<br />';
-			$query3 = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props  WHERE `props`.`tool`='".TOOL_DOCUMENT."' AND `docs`.`id`=`props`.`ref` AND `docs`.`path` LIKE '".$invisible_folders['path']."/%' AND `docs`.`filetype`='file' AND `props`.`visibility`='1'");
+			$query3 = Database::query("SELECT path FROM $doc_table AS docs,$prop_table AS props  WHERE props.tool='".TOOL_DOCUMENT."' AND docs.id=props.ref AND docs.path LIKE '".$invisible_folders['path']."/%' AND docs.filetype='file' AND props.visibility='1'");
 			// Add tem to an array
 			while ($files_in_invisible_folder = Database::fetch_assoc($query3)) {
 				$files_in_invisible_folder_path[] = $files_in_invisible_folder['path'];

+ 2 - 2
main/dropbox/dropbox_submit.php

@@ -246,7 +246,7 @@ if (isset($_GET['mailingIndex'])) { // examine or send
 		$var = api_strtoupper($nameParts[2]);  // the variable part of the name
 		$course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
 		$sel = "SELECT u.user_id, u.lastname, u.firstname, cu.status
-				FROM `".$_configuration['main_database']."`.`user` u
+				FROM ".$_configuration['main_database'].".user u
 				LEFT JOIN $course_user cu
 				ON cu.user_id = u.user_id AND cu.relation_type<>".COURSE_RELATION_TYPE_RRHH." AND cu.course_code = '".$_course['sysCode']."'";
 		$sel .= " WHERE u.".dropbox_cnf("mailingWhere".$var)." = '";
@@ -361,7 +361,7 @@ if (isset($_GET['mailingIndex'])) { // examine or send
 			$course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
 			$sql = "SELECT u.lastname, u.firstname
 					FROM $course_user cu
-					LEFT JOIN  `".$_configuration['main_database']."`.`user` u
+					LEFT JOIN  ".$_configuration['main_database'].".user u
 					ON cu.user_id = u.user_id AND cu.course_code = '".$_course['sysCode']."'
 					WHERE cu.status = 5
 					AND u.user_id NOT IN ('" . implode("', '" , $students) . "')";

+ 53 - 61
main/inc/lib/fckeditor/editor/plugins/flvPlayer/flvPlayer.js

@@ -1,4 +1,4 @@
-// Reworks and improvements by Ivan Tcholakov, JUL-2009.
+// Reworks and improvements by Ivan Tcholakov, JUL-2009, FEB-2011.
 
 var dialog = window.parent ;
 var oEditor = dialog.InnerDialogLoaded() ;
@@ -19,7 +19,7 @@ FCKLang['SecurityError'] = FCKLang['SecurityError'] ? FCKLang['SecurityError'] :
 FCKLang['ConnectorDisabled'] = FCKLang['ConnectorDisabled'] ? FCKLang['ConnectorDisabled'] : 'The upload feature (connector) is disabled.' ;
 FCKLang['UploadError'] = FCKLang['UploadError'] ? FCKLang['UploadError'] : 'Error on file upload. Error number: ' ;
 
-//#### Dialog Tabs
+// Dialog Tabs
 
 // Set the dialog tabs.
 dialog.AddTab( 'Info', FCKLang.DlgInfoTab ) ;
@@ -216,7 +216,7 @@ function LoadSelection()
     UpdatePreview() ;
 }
 
-//#### The OK button was hit.
+// The OK button was hit.
 function Ok()
 {
     var rbFileTypeVal = "single" ;
@@ -416,7 +416,9 @@ var Media = function ( o )
     this.playlistThumbs = '' ;
 
     if ( o )
+    {
         this.setObjectElement( o ) ;
+    }
 } ;
 
 Media.prototype.setObjectElement = function ( e )
@@ -428,11 +430,11 @@ Media.prototype.setObjectElement = function ( e )
 
 Media.prototype.setAttribute = function( attr, val )
 {
-    if ( val == "true" )
+    if ( val == 'true' )
     {
         this[attr] = true ;
     }
-    else if (val == "false" )
+    else if (val == 'false' )
     {
         this[attr] = false ;
     }
@@ -448,63 +450,32 @@ Media.prototype.getInnerHTML = function ( objectId )
     var thisWidth = this.width ;
     var thisHeight = this.height ;
 
-    var thisMediaType = "single" ;
+    var thisMediaType = 'single' ;
     if ( !GetE( 'rbFileType' ).checked )
     {
-        thisMediaType = "mpl" ;
+        thisMediaType = 'mpl' ;
     }
 
-    // Align
+    // Alignment
     var cssalign = '' ;
     var cssfloat = '' ;
-    if ( this.align == "center" )
+    if ( this.align == 'center' )
     {
         cssalign = 'margin-left: auto;margin-right: auto;' ;
     }
-    else if ( this.align == "right" )
+    else if ( this.align == 'right' )
     {
         cssfloat = 'float: right;' ;
     }
-    else if ( this.align == "left" )
+    else if ( this.align == 'left' )
     {
         cssfloat = 'float: left;' ;
     }
 
-    var s = "" ;
-
-/*
-    // Replacing the creation of the SWFObject to the use of the object tag in order to avoid HTMLPurifier conflicts see CT#1297
-
-    s+= '<div id="player' + randomnumber + '-parent" style="text-align:	center;' + cssfloat + '">\n';
-    s+= '<div style="border-style: none; height: ' + thisHeight + 'px; width:' + thisWidth + 'px; overflow: hidden; background-color: rgb(220, 220,	220); background-image: url(' + oEditor.FCKConfig.PluginsPath +	'flvPlayer/flvPlayer.gif); background-repeat:no-repeat;	background-position:center;' + cssalign + '">';
-    s+= '<script src="' + oEditor.FCKConfig.PluginsPath + 'flvPlayer/swfobject.js" type="text/javascript"></script>\n';
-    s+= '<script type="text/javascript">swfobject.registerObject("player' +	randomnumber + '","9.0.98","' + oEditor.FCKConfig.PluginsPath +	'flvPlayer/expressInstall.swf");</script>';
-
-    //s+= '<object id="player' + randomnumber + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player' + randomnumber + '" width="328" height="200">';
-    //s+= '<param name="movie" value="' + oEditor.FCKConfig.PluginsPath +	'flvPlayer/mediaplayer.swf" />';
-    //s+= '<param name="allowfullscreen" value="true" />';
-    //s+= '<param name="allowscriptaccess" value="always" />';
-    //s+= '<param name="height" value="' + thisHeight + '" />';
-    //s+= '<param name="width" value="' + thisWidth + '" />';
-    //s+= '<param name="flashvars" value="file=' + this.url + '"/>';
-
-    //s+= '<param name="flashvars" value="file=' + this.url + '&image=' +	this.iurl + '" />';
-    s+= '<object type="application/x-shockwave-flash" data="' +	oEditor.FCKConfig.PluginsPath + 'flvPlayer/mediaplayer.swf" width="328"	height="200">';
-    s+= '<param name="movie" value="' + oEditor.FCKConfig.PluginsPath +	'flvPlayer/mediaplayer.swf" />';
-    s+= '<param name="allowfullscreen" value="true" />';
-    s+= '<param name="allowscriptaccess" value="always" />';
-    s+= '<param name="height" value="' + thisHeight + '" />';
-    s+= '<param name="width" value="' + thisWidth + '" />';
-    //s+= '<param name="flashvars" value="file=' + this.url + '&image=' +	this.iurl + '" />';
-
-    s+= '<param name="flashvars" value="file=' + this.url + '" />';
-    s+= '<p><a href="http://get.adobe.com/flashplayer">Get Flash</a> to see	this player.</p>';
-    s+= '</object>';
-*/
-
+    var s = '' ;
 
     s += '\n' ;
-    s += '<div id="player' + randomnumber + '-parent" style="text-align: center;">\n'; //'<div id="player' + randomnumber + '-parent" style="text-align: center;' + cssfloat + '">\n';
+    s += '<div id="player' + randomnumber + '-parent" style="text-align: center;' + cssfloat + '">\n';
     s += '<div style="border-style: none; height: ' + thisHeight + 'px; width: ' + thisWidth + 'px; overflow: hidden; background-color: rgb(220, 220, 220); ' + cssalign + '">' ;
 
     s += '<script src="' + FCKConfig.ScriptSWFObject + '" type="text/javascript"></script>\n' ;
@@ -519,13 +490,14 @@ Media.prototype.getInnerHTML = function ( objectId )
         if ( !i || !this[i] ) continue ;
             if ( !i.match( /(set|get)/ ) )
             {
-                s += i + "=" + this[i] + " " ;
+                s += i + '=' + this[i] + ' ' ;
             }
     }
     s += '</div>' ;
     s += '</div>' ;
     s += '<script type="text/javascript">\n' ;
-    //s += '	//NOTE: FOR LIST OF POSSIBLE SETTINGS GOTO http://www.jeroenwijering.com/extras/readme.html\n' ;
+
+    // NOTE: FOR LIST OF POSSIBLE SETTINGS GOTO http://www.jeroenwijering.com/extras/readme.html\n' ;
 
     s += '	var s1 = new SWFObject("' + FCKConfig.FlashPlayerVideo + '","' + thisMediaType + '","' + thisWidth + '","' + thisHeight + '","7");\n' ;
 
@@ -543,9 +515,9 @@ Media.prototype.getInnerHTML = function ( objectId )
         var dispHeight = thisHeight ;
         var dispThumbs = false ;
 
-        if ( this.dispPlaylist != "none" )
+        if ( this.dispPlaylist != 'none' )
         {
-            if ( this.dispPlaylist == "right" )
+            if ( this.dispPlaylist == 'right' )
             {
                 if ( this.playlistDim.length > 0 )
                 {
@@ -580,7 +552,7 @@ Media.prototype.getInnerHTML = function ( objectId )
 
                 s += '	s1.addVariable("displaywidth","' + dispWidth + '");\n' ;
             }
-            else if ( this.dispPlaylist == "below" )
+            else if ( this.dispPlaylist == 'below' )
             {
                 dispThumbs = true ;
 
@@ -607,7 +579,7 @@ Media.prototype.getInnerHTML = function ( objectId )
                 s += '	s1.addVariable("displayheight","' + dispHeight + '");\n' ;
             }
 
-            if ( this.playlistThumbs == "false" )
+            if ( this.playlistThumbs == 'false' )
             {
                 dispThumbs = false ;
             }
@@ -643,28 +615,28 @@ Media.prototype.getInnerHTML = function ( objectId )
     var colorChoice1 = this.toolcolor ;
     if ( colorChoice1.length > 0 )
     {
-        colorChoice1 = colorChoice1.replace( "#", "0x" ) ;
+        colorChoice1 = colorChoice1.replace( '#', '0x' ) ;
         s += '	s1.addVariable("backcolor","' + colorChoice1 + '");\n' ;
     }
     // SET THE COLOR OF THE TOOLBARS TEXT AND BUTTONS
     var colorChoice2 = this.tooltcolor ;
     if ( colorChoice2.length > 0 )
     {
-        colorChoice2 = colorChoice2.replace( "#", "0x" ) ;
+        colorChoice2 = colorChoice2.replace( '#', '0x' ) ;
         s += '	s1.addVariable("frontcolor","' + colorChoice2 + '");\n' ;
     }
-    //SET COLOR OF ROLLOVER TEXT AND BUTTONS
+    // SET COLOR OF ROLLOVER TEXT AND BUTTONS
     var colorChoice3 = this.tooltrcolor ;
     if ( colorChoice3.length > 0 )
     {
-        colorChoice3 = colorChoice3.replace( "#", "0x" ) ;
+        colorChoice3 = colorChoice3.replace( '#', '0x' ) ;
         s += '	s1.addVariable("lightcolor","' + colorChoice3 + '");\n' ;
     }
-    //SET COLOR OF BACKGROUND
+    // SET COLOR OF BACKGROUND
     var colorChoice4 = this.bgcolor ;
     if ( colorChoice4.length > 0 )
     {
-        colorChoice4 = colorChoice4.replace( "#", "0x" ) ;
+        colorChoice4 = colorChoice4.replace( '#', '0x' ) ;
         s += '	s1.addVariable("screencolor","' + colorChoice4 + '");\n' ;
     }
 
@@ -674,10 +646,6 @@ Media.prototype.getInnerHTML = function ( objectId )
         s += '	s1.addVariable("recommendations","' + this.rurl + '");\n' ;
     }
 
-    //s += '	//s1.addVariable("largecontrols","true");\n' ;
-    //s += '	//s1.addVariable("bufferlength","3");\n' ;
-    //s += '	//s1.addVariable("audio","http://www.jeroenwijering.com/extras/readme.html");\n' ;
-
     s += '	s1.write("player' + randomnumber + '");\n' ;
     s += '</script>\n' ;
     s += '</div>\n' ;
@@ -744,7 +712,9 @@ var ePreview ;
 function IsValidMedia( oMedia )
 {
     if ( !oMedia )
+    {
         return false ;
+    }
 
     var url = oMedia.url ;
     var purl = oMedia.purl ;
@@ -752,19 +722,29 @@ function IsValidMedia( oMedia )
     var height = oMedia.height ;
 
     if ( url.length == 0 && purl.length == 0 )
+    {
         return false ;
+    }
 
     if ( isNaN( width ) )
+    {
         return false ;
+    }
 
     if ( parseInt( width, 10 ) <= 0 )
+    {
         return false ;
+    }
 
     if ( isNaN( height ) )
+    {
         return false ;
+    }
 
     if ( parseInt( height, 10 ) <= 0 )
+    {
         return false ;
+    }
 
     return true ;
 }
@@ -774,16 +754,22 @@ function SetPreviewElement( previewEl )
     ePreview = previewEl ;
 
     if ( IsValidMedia( oMedia ) )
+    {
         UpdatePreview() ;
+    }
 }
 
 function UpdatePreview()
 {
     if ( !ePreview )
+    {
         return ;
+    }
 
     while ( ePreview.firstChild )
+    {
         ePreview.removeChild( ePreview.firstChild ) ;
+    }
 
     if ( !oMedia )
     {
@@ -792,7 +778,9 @@ function UpdatePreview()
     }
 
     if ( !IsValidMedia( oMedia ) )
+    {
         ePreview.innerHTML = '&nbsp;' ;
+    }
     else
     {
         var max_width = 710 ;
@@ -835,10 +823,14 @@ function UpdatePreview()
 function ClearPreview()
 {
     if ( !ePreview )
+    {
         return ;
+    }
 
     while ( ePreview.firstChild )
+    {
         ePreview.removeChild( ePreview.firstChild ) ;
+    }
 
     ePreview.innerHTML = '&nbsp;' ;
 }
@@ -903,7 +895,7 @@ function CheckUpload()
         return false ;
     }
 
-    // Show animation
+    // Show animation.
     window.parent.Throbber.Show( 100 ) ;
     GetE( 'divUpload' ).style.display  = 'none' ;
 

+ 923 - 924
main/inc/lib/swfobject/swfobject_source/swfobject_source.js

@@ -52,220 +52,220 @@ if(typeof deconcept == "undefined") var deconcept = new Object();
 if(typeof deconcept.util == "undefined") deconcept.util = new Object();
 if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object();
 deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) {
-	if (!document.getElementById) { return; }
-	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
-	this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
-	this.params = new Object();
-	this.variables = new Object();
-	this.attributes = new Array();
-	if(swf) { this.setAttribute('swf', swf); }
-	if(id) { this.setAttribute('id', id); }
-	if(w) { this.setAttribute('width', w); }
-	if(h) { this.setAttribute('height', h); }
-	if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
-	this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
-	if (!window.opera && document.all && this.installedVer.major > 7) {
-		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
-		deconcept.SWFObject.doPrepUnload = true;
-	}
-	if(c) { this.addParam('bgcolor', c); }
-	var q = quality ? quality : 'high';
-	this.addParam('quality', q);
-	this.setAttribute('useExpressInstall', false);
-	this.setAttribute('doExpressInstall', false);
-	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
-	this.setAttribute('xiRedirectUrl', xir);
-	this.setAttribute('redirectUrl', '');
-	if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); }
+    if (!document.getElementById) { return; }
+    this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
+    this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
+    this.params = new Object();
+    this.variables = new Object();
+    this.attributes = new Array();
+    if(swf) { this.setAttribute('swf', swf); }
+    if(id) { this.setAttribute('id', id); }
+    if(w) { this.setAttribute('width', w); }
+    if(h) { this.setAttribute('height', h); }
+    if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
+    this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
+    if (!window.opera && document.all && this.installedVer.major > 7) {
+        // only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
+        deconcept.SWFObject.doPrepUnload = true;
+    }
+    if(c) { this.addParam('bgcolor', c); }
+    var q = quality ? quality : 'high';
+    this.addParam('quality', q);
+    this.setAttribute('useExpressInstall', false);
+    this.setAttribute('doExpressInstall', false);
+    var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
+    this.setAttribute('xiRedirectUrl', xir);
+    this.setAttribute('redirectUrl', '');
+    if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); }
 }
 deconcept.SWFObject.prototype = {
-	useExpressInstall: function(path) {
-		this.xiSWFPath = !path ? "expressinstall.swf" : path;
-		this.setAttribute('useExpressInstall', true);
-	},
-	setAttribute: function(name, value){
-		this.attributes[name] = value;
-	},
-	getAttribute: function(name){
-		return this.attributes[name];
-	},
-	addParam: function(name, value){
-		this.params[name] = value;
-	},
-	getParams: function(){
-		return this.params;
-	},
-	addVariable: function(name, value){
-		this.variables[name] = value;
-	},
-	getVariable: function(name){
-		return this.variables[name];
-	},
-	getVariables: function(){
-		return this.variables;
-	},
-	getVariablePairs: function(){
-		var variablePairs = new Array();
-		var key;
-		var variables = this.getVariables();
-		for(key in variables){
-			variablePairs[variablePairs.length] = key +"="+ variables[key];
-		}
-		return variablePairs;
-	},
-	getSWFHTML: function() {
-		var swfNode = "";
-		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "PlugIn");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
-			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
-			var params = this.getParams();
-			 for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }
-			var pairs = this.getVariablePairs().join("&");
-			 if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
-			swfNode += '/>';
-		} else { // PC IE
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "ActiveX");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
-			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
-			var params = this.getParams();
-			for(var key in params) {
-			 swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
-			}
-			var pairs = this.getVariablePairs().join("&");
-			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
-			swfNode += "</object>";
-		}
-		return swfNode;
-	},
-	write: function(elementId){
-		if(this.getAttribute('useExpressInstall')) {
-			// check to see if we need to do an express install
-			var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
-			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
-				this.setAttribute('doExpressInstall', true);
-				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
-				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
-				this.addVariable("MMdoctitle", document.title);
-			}
-		}
-		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){
-			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
-			n.innerHTML = this.getSWFHTML();
-			return true;
-		}else{
-			if(this.getAttribute('redirectUrl') != "") {
-				document.location.replace(this.getAttribute('redirectUrl'));
-			}
-		}
-		return false;
-	}
+    useExpressInstall: function(path) {
+        this.xiSWFPath = !path ? "expressinstall.swf" : path;
+        this.setAttribute('useExpressInstall', true);
+    },
+    setAttribute: function(name, value){
+        this.attributes[name] = value;
+    },
+    getAttribute: function(name){
+        return this.attributes[name];
+    },
+    addParam: function(name, value){
+        this.params[name] = value;
+    },
+    getParams: function(){
+        return this.params;
+    },
+    addVariable: function(name, value){
+        this.variables[name] = value;
+    },
+    getVariable: function(name){
+        return this.variables[name];
+    },
+    getVariables: function(){
+        return this.variables;
+    },
+    getVariablePairs: function(){
+        var variablePairs = new Array();
+        var key;
+        var variables = this.getVariables();
+        for(key in variables){
+            variablePairs[variablePairs.length] = key +"="+ variables[key];
+        }
+        return variablePairs;
+    },
+    getSWFHTML: function() {
+        var swfNode = "";
+        if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
+            if (this.getAttribute("doExpressInstall")) {
+                this.addVariable("MMplayerType", "PlugIn");
+                this.setAttribute('swf', this.xiSWFPath);
+            }
+            swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
+            swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
+            var params = this.getParams();
+             for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }
+            var pairs = this.getVariablePairs().join("&");
+             if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
+            swfNode += '/>';
+        } else { // PC IE
+            if (this.getAttribute("doExpressInstall")) {
+                this.addVariable("MMplayerType", "ActiveX");
+                this.setAttribute('swf', this.xiSWFPath);
+            }
+            swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
+            swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
+            var params = this.getParams();
+            for(var key in params) {
+             swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
+            }
+            var pairs = this.getVariablePairs().join("&");
+            if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
+            swfNode += "</object>";
+        }
+        return swfNode;
+    },
+    write: function(elementId){
+        if(this.getAttribute('useExpressInstall')) {
+            // check to see if we need to do an express install
+            var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
+            if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
+                this.setAttribute('doExpressInstall', true);
+                this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
+                document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+                this.addVariable("MMdoctitle", document.title);
+            }
+        }
+        if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){
+            var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
+            n.innerHTML = this.getSWFHTML();
+            return true;
+        }else{
+            if(this.getAttribute('redirectUrl') != "") {
+                document.location.replace(this.getAttribute('redirectUrl'));
+            }
+        }
+        return false;
+    }
 }
 
 /* ---- detection functions ---- */
 deconcept.SWFObjectUtil.getPlayerVersion = function(){
-	var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
-	if(navigator.plugins && navigator.mimeTypes.length){
-		var x = navigator.plugins["Shockwave Flash"];
-		if(x && x.description) {
-			PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
-		}
-	}else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ // if Windows CE
-		var axo = 1;
-		var counter = 3;
-		while(axo) {
-			try {
-				counter++;
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
+    var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
+    if(navigator.plugins && navigator.mimeTypes.length){
+        var x = navigator.plugins["Shockwave Flash"];
+        if(x && x.description) {
+            PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
+        }
+    }else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ // if Windows CE
+        var axo = 1;
+        var counter = 3;
+        while(axo) {
+            try {
+                counter++;
+                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
 //				document.write("player v: "+ counter);
-				PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
-			} catch (e) {
-				axo = null;
-			}
-		}
-	} else { // Win IE (non mobile)
-		// do minor version lookup in IE, but avoid fp6 crashing issues
-		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
-		try{
-			var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
-		}catch(e){
-			try {
-				var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-				PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
-				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
-			} catch(e) {
-				if (PlayerVersion.major == 6) {
-					return PlayerVersion;
-				}
-			}
-			try {
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
-			} catch(e) {}
-		}
-		if (axo != null) {
-			PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
-		}
-	}
-	return PlayerVersion;
+                PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
+            } catch (e) {
+                axo = null;
+            }
+        }
+    } else { // Win IE (non mobile)
+        // do minor version lookup in IE, but avoid fp6 crashing issues
+        // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
+        try{
+            var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+        }catch(e){
+            try {
+                var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+                PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
+                axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
+            } catch(e) {
+                if (PlayerVersion.major == 6) {
+                    return PlayerVersion;
+                }
+            }
+            try {
+                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+            } catch(e) {}
+        }
+        if (axo != null) {
+            PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
+        }
+    }
+    return PlayerVersion;
 }
 deconcept.PlayerVersion = function(arrVersion){
-	this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
-	this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
-	this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0;
+    this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
+    this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
+    this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0;
 }
 deconcept.PlayerVersion.prototype.versionIsValid = function(fv){
-	if(this.major < fv.major) return false;
-	if(this.major > fv.major) return true;
-	if(this.minor < fv.minor) return false;
-	if(this.minor > fv.minor) return true;
-	if(this.rev < fv.rev) return false;
-	return true;
+    if(this.major < fv.major) return false;
+    if(this.major > fv.major) return true;
+    if(this.minor < fv.minor) return false;
+    if(this.minor > fv.minor) return true;
+    if(this.rev < fv.rev) return false;
+    return true;
 }
 /* ---- get value of query string param ---- */
 deconcept.util = {
-	getRequestParameter: function(param) {
-		var q = document.location.search || document.location.hash;
-		if (param == null) { return q; }
-		if(q) {
-			var pairs = q.substring(1).split("&");
-			for (var i=0; i < pairs.length; i++) {
-				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
-					return pairs[i].substring((pairs[i].indexOf("=")+1));
-				}
-			}
-		}
-		return "";
-	}
+    getRequestParameter: function(param) {
+        var q = document.location.search || document.location.hash;
+        if (param == null) { return q; }
+        if(q) {
+            var pairs = q.substring(1).split("&");
+            for (var i=0; i < pairs.length; i++) {
+                if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
+                    return pairs[i].substring((pairs[i].indexOf("=")+1));
+                }
+            }
+        }
+        return "";
+    }
 }
 /* fix for video streaming bug */
 deconcept.SWFObjectUtil.cleanupSWFs = function() {
-	var objects = document.getElementsByTagName("OBJECT");
-	for (var i = objects.length - 1; i >= 0; i--) {
-		objects[i].style.display = 'none';
-		for (var x in objects[i]) {
-			if (typeof objects[i][x] == 'function') {
-				objects[i][x] = function(){};
-			}
-		}
-	}
+    var objects = document.getElementsByTagName("OBJECT");
+    for (var i = objects.length - 1; i >= 0; i--) {
+        objects[i].style.display = 'none';
+        for (var x in objects[i]) {
+            if (typeof objects[i][x] == 'function') {
+                objects[i][x] = function(){};
+            }
+        }
+    }
 }
 // fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
 if (deconcept.SWFObject.doPrepUnload) {
-	if (!deconcept.unloadSet) {
-		deconcept.SWFObjectUtil.prepUnload = function() {
-			__flash_unloadHandler = function(){};
-			__flash_savedUnloadHandler = function(){};
-			window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
-		}
-		window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
-		deconcept.unloadSet = true;
-	}
+    if (!deconcept.unloadSet) {
+        deconcept.SWFObjectUtil.prepUnload = function() {
+            __flash_unloadHandler = function(){};
+            __flash_savedUnloadHandler = function(){};
+            window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
+        }
+        window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
+        deconcept.unloadSet = true;
+    }
 }
 /* add document.getElementById if needed (mobile IE < 5) */
 if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }}
@@ -280,783 +280,782 @@ var SWFObject = deconcept.SWFObject;
 
 
 /*!	SWFObject v2.2 <http://code.google.com/p/swfobject/>
-	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
+    is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
 */
 
 var swfobject = function() {
 
-	var UNDEF = "undefined",
-		OBJECT = "object",
-		SHOCKWAVE_FLASH = "Shockwave Flash",
-		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
-		FLASH_MIME_TYPE = "application/x-shockwave-flash",
-		EXPRESS_INSTALL_ID = "SWFObjectExprInst",
-		ON_READY_STATE_CHANGE = "onreadystatechange",
+    var UNDEF = "undefined",
+        OBJECT = "object",
+        SHOCKWAVE_FLASH = "Shockwave Flash",
+        SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
+        FLASH_MIME_TYPE = "application/x-shockwave-flash",
+        EXPRESS_INSTALL_ID = "SWFObjectExprInst",
+        ON_READY_STATE_CHANGE = "onreadystatechange",
 
-		win = window,
-		doc = document,
-		nav = navigator,
+        win = window,
+        doc = document,
+        nav = navigator,
 
-		plugin = false,
-		domLoadFnArr = [main],
-		regObjArr = [],
-		objIdArr = [],
-		listenersArr = [],
-		storedAltContent,
-		storedAltContentId,
-		storedCallbackFn,
-		storedCallbackObj,
-		isDomLoaded = false,
-		isExpressInstallActive = false,
-		dynamicStylesheet,
-		dynamicStylesheetMedia,
-		autoHideShow = true,
+        plugin = false,
+        domLoadFnArr = [main],
+        regObjArr = [],
+        objIdArr = [],
+        listenersArr = [],
+        storedAltContent,
+        storedAltContentId,
+        storedCallbackFn,
+        storedCallbackObj,
+        isDomLoaded = false,
+        isExpressInstallActive = false,
+        dynamicStylesheet,
+        dynamicStylesheetMedia,
+        autoHideShow = true,
 
-	/* Centralized function for browser feature detection
-		- User agent string detection is only used when no good alternative is possible
-		- Is executed directly for optimal performance
-	*/
-	ua = function() {
-		var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
-			u = nav.userAgent.toLowerCase(),
-			p = nav.platform.toLowerCase(),
-			windows = p ? /win/.test(p) : /win/.test(u),
-			mac = p ? /mac/.test(p) : /mac/.test(u),
-			webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
-			ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
-			playerVersion = [0,0,0],
-			d = null;
-		if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
-			d = nav.plugins[SHOCKWAVE_FLASH].description;
-			if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
-				plugin = true;
-				ie = false; // cascaded feature detection for Internet Explorer
-				d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
-				playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
-				playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
-				playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
-			}
-		}
-		else if (typeof win.ActiveXObject != UNDEF) {
-			try {
-				var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
-				if (a) { // a will return null when ActiveX is disabled
-					d = a.GetVariable("$version");
-					if (d) {
-						ie = true; // cascaded feature detection for Internet Explorer
-						d = d.split(" ")[1].split(",");
-						playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
-					}
-				}
-			}
-			catch(e) {}
-		}
-		return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
-	}(),
+    /* Centralized function for browser feature detection
+        - User agent string detection is only used when no good alternative is possible
+        - Is executed directly for optimal performance
+    */
+    ua = function() {
+        var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
+            u = nav.userAgent.toLowerCase(),
+            p = nav.platform.toLowerCase(),
+            windows = p ? /win/.test(p) : /win/.test(u),
+            mac = p ? /mac/.test(p) : /mac/.test(u),
+            webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
+            ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
+            playerVersion = [0,0,0],
+            d = null;
+        if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
+            d = nav.plugins[SHOCKWAVE_FLASH].description;
+            if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
+                plugin = true;
+                ie = false; // cascaded feature detection for Internet Explorer
+                d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
+                playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
+                playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
+                playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
+            }
+        }
+        else if (typeof win.ActiveXObject != UNDEF) {
+            try {
+                var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
+                if (a) { // a will return null when ActiveX is disabled
+                    d = a.GetVariable("$version");
+                    if (d) {
+                        ie = true; // cascaded feature detection for Internet Explorer
+                        d = d.split(" ")[1].split(",");
+                        playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+                    }
+                }
+            }
+            catch(e) {}
+        }
+        return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
+    }(),
 
-	/* Cross-browser onDomLoad
-		- Will fire an event as soon as the DOM of a web page is loaded
-		- Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
-		- Regular onload serves as fallback
-	*/
-	onDomLoad = function() {
-		if (!ua.w3) { return; }
-		if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically
-			callDomLoadFunctions();
-		}
-		if (!isDomLoaded) {
-			if (typeof doc.addEventListener != UNDEF) {
-				doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
-			}
-			if (ua.ie && ua.win) {
-				doc.attachEvent(ON_READY_STATE_CHANGE, function() {
-					if (doc.readyState == "complete") {
-						doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
-						callDomLoadFunctions();
-					}
-				});
-				if (win == top) { // if not inside an iframe
-					(function(){
-						if (isDomLoaded) { return; }
-						try {
-							doc.documentElement.doScroll("left");
-						}
-						catch(e) {
-							setTimeout(arguments.callee, 0);
-							return;
-						}
-						callDomLoadFunctions();
-					})();
-				}
-			}
-			if (ua.wk) {
-				(function(){
-					if (isDomLoaded) { return; }
-					if (!/loaded|complete/.test(doc.readyState)) {
-						setTimeout(arguments.callee, 0);
-						return;
-					}
-					callDomLoadFunctions();
-				})();
-			}
-			addLoadEvent(callDomLoadFunctions);
-		}
-	}();
+    /* Cross-browser onDomLoad
+        - Will fire an event as soon as the DOM of a web page is loaded
+        - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
+        - Regular onload serves as fallback
+    */
+    onDomLoad = function() {
+        if (!ua.w3) { return; }
+        if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically
+            callDomLoadFunctions();
+        }
+        if (!isDomLoaded) {
+            if (typeof doc.addEventListener != UNDEF) {
+                doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
+            }
+            if (ua.ie && ua.win) {
+                doc.attachEvent(ON_READY_STATE_CHANGE, function() {
+                    if (doc.readyState == "complete") {
+                        doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
+                        callDomLoadFunctions();
+                    }
+                });
+                if (win == top) { // if not inside an iframe
+                    (function(){
+                        if (isDomLoaded) { return; }
+                        try {
+                            doc.documentElement.doScroll("left");
+                        }
+                        catch(e) {
+                            setTimeout(arguments.callee, 0);
+                            return;
+                        }
+                        callDomLoadFunctions();
+                    })();
+                }
+            }
+            if (ua.wk) {
+                (function(){
+                    if (isDomLoaded) { return; }
+                    if (!/loaded|complete/.test(doc.readyState)) {
+                        setTimeout(arguments.callee, 0);
+                        return;
+                    }
+                    callDomLoadFunctions();
+                })();
+            }
+            addLoadEvent(callDomLoadFunctions);
+        }
+    }();
 
-	function callDomLoadFunctions() {
-		if (isDomLoaded) { return; }
-		try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
-			var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
-			t.parentNode.removeChild(t);
-		}
-		catch (e) { return; }
-		isDomLoaded = true;
-		var dl = domLoadFnArr.length;
-		for (var i = 0; i < dl; i++) {
-			domLoadFnArr[i]();
-		}
-	}
+    function callDomLoadFunctions() {
+        if (isDomLoaded) { return; }
+        try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
+            var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
+            t.parentNode.removeChild(t);
+        }
+        catch (e) { return; }
+        isDomLoaded = true;
+        var dl = domLoadFnArr.length;
+        for (var i = 0; i < dl; i++) {
+            domLoadFnArr[i]();
+        }
+    }
 
-	function addDomLoadEvent(fn) {
-		if (isDomLoaded) {
-			fn();
-		}
-		else {
-			domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
-		}
-	}
+    function addDomLoadEvent(fn) {
+        if (isDomLoaded) {
+            fn();
+        }
+        else {
+            domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
+        }
+    }
 
-	/* Cross-browser onload
-		- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
-		- Will fire an event as soon as a web page including all of its assets are loaded
-	 */
-	function addLoadEvent(fn) {
-		if (typeof win.addEventListener != UNDEF) {
-			win.addEventListener("load", fn, false);
-		}
-		else if (typeof doc.addEventListener != UNDEF) {
-			doc.addEventListener("load", fn, false);
-		}
-		else if (typeof win.attachEvent != UNDEF) {
-			addListener(win, "onload", fn);
-		}
-		else if (typeof win.onload == "function") {
-			var fnOld = win.onload;
-			win.onload = function() {
-				fnOld();
-				fn();
-			};
-		}
-		else {
-			win.onload = fn;
-		}
-	}
+    /* Cross-browser onload
+        - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
+        - Will fire an event as soon as a web page including all of its assets are loaded
+     */
+    function addLoadEvent(fn) {
+        if (typeof win.addEventListener != UNDEF) {
+            win.addEventListener("load", fn, false);
+        }
+        else if (typeof doc.addEventListener != UNDEF) {
+            doc.addEventListener("load", fn, false);
+        }
+        else if (typeof win.attachEvent != UNDEF) {
+            addListener(win, "onload", fn);
+        }
+        else if (typeof win.onload == "function") {
+            var fnOld = win.onload;
+            win.onload = function() {
+                fnOld();
+                fn();
+            };
+        }
+        else {
+            win.onload = fn;
+        }
+    }
 
-	/* Main function
-		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
-	*/
-	function main() {
-		if (plugin) {
-			testPlayerVersion();
-		}
-		else {
-			matchVersions();
-		}
-	}
+    /* Main function
+        - Will preferably execute onDomLoad, otherwise onload (as a fallback)
+    */
+    function main() {
+        if (plugin) {
+            testPlayerVersion();
+        }
+        else {
+            matchVersions();
+        }
+    }
 
-	/* Detect the Flash Player version for non-Internet Explorer browsers
-		- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
-		  a. Both release and build numbers can be detected
-		  b. Avoid wrong descriptions by corrupt installers provided by Adobe
-		  c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
-		- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
-	*/
-	function testPlayerVersion() {
-		var b = doc.getElementsByTagName("body")[0];
-		var o = createElement(OBJECT);
-		o.setAttribute("type", FLASH_MIME_TYPE);
-		var t = b.appendChild(o);
-		if (t) {
-			var counter = 0;
-			(function(){
-				if (typeof t.GetVariable != UNDEF) {
-					var d = t.GetVariable("$version");
-					if (d) {
-						d = d.split(" ")[1].split(",");
-						ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
-					}
-				}
-				else if (counter < 10) {
-					counter++;
-					setTimeout(arguments.callee, 10);
-					return;
-				}
-				b.removeChild(o);
-				t = null;
-				matchVersions();
-			})();
-		}
-		else {
-			matchVersions();
-		}
-	}
+    /* Detect the Flash Player version for non-Internet Explorer browsers
+        - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
+          a. Both release and build numbers can be detected
+          b. Avoid wrong descriptions by corrupt installers provided by Adobe
+          c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
+        - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
+    */
+    function testPlayerVersion() {
+        var b = doc.getElementsByTagName("body")[0];
+        var o = createElement(OBJECT);
+        o.setAttribute("type", FLASH_MIME_TYPE);
+        var t = b.appendChild(o);
+        if (t) {
+            var counter = 0;
+            (function(){
+                if (typeof t.GetVariable != UNDEF) {
+                    var d = t.GetVariable("$version");
+                    if (d) {
+                        d = d.split(" ")[1].split(",");
+                        ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+                    }
+                }
+                else if (counter < 10) {
+                    counter++;
+                    setTimeout(arguments.callee, 10);
+                    return;
+                }
+                b.removeChild(o);
+                t = null;
+                matchVersions();
+            })();
+        }
+        else {
+            matchVersions();
+        }
+    }
 
-	/* Perform Flash Player and SWF version matching; static publishing only
-	*/
-	function matchVersions() {
-		var rl = regObjArr.length;
-		if (rl > 0) {
-			for (var i = 0; i < rl; i++) { // for each registered object element
-				var id = regObjArr[i].id;
-				var cb = regObjArr[i].callbackFn;
-				var cbObj = {success:false, id:id};
-				if (ua.pv[0] > 0) {
-					var obj = getElementById(id);
-					if (obj) {
-						if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
-							setVisibility(id, true);
-							if (cb) {
-								cbObj.success = true;
-								cbObj.ref = getObjectById(id);
-								cb(cbObj);
-							}
-						}
-						else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
-							var att = {};
-							att.data = regObjArr[i].expressInstall;
-							att.width = obj.getAttribute("width") || "0";
-							att.height = obj.getAttribute("height") || "0";
-							if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
-							if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
-							// parse HTML object param element's name-value pairs
-							var par = {};
-							var p = obj.getElementsByTagName("param");
-							var pl = p.length;
-							for (var j = 0; j < pl; j++) {
-								if (p[j].getAttribute("name").toLowerCase() != "movie") {
-									par[p[j].getAttribute("name")] = p[j].getAttribute("value");
-								}
-							}
-							showExpressInstall(att, par, id, cb);
-						}
-						else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF
-							displayAltContent(obj);
-							if (cb) { cb(cbObj); }
-						}
-					}
-				}
-				else {	// if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)
-					setVisibility(id, true);
-					if (cb) {
-						var o = getObjectById(id); // test whether there is an HTML object element or not
-						if (o && typeof o.SetVariable != UNDEF) {
-							cbObj.success = true;
-							cbObj.ref = o;
-						}
-						cb(cbObj);
-					}
-				}
-			}
-		}
-	}
+    /* Perform Flash Player and SWF version matching; static publishing only
+    */
+    function matchVersions() {
+        var rl = regObjArr.length;
+        if (rl > 0) {
+            for (var i = 0; i < rl; i++) { // for each registered object element
+                var id = regObjArr[i].id;
+                var cb = regObjArr[i].callbackFn;
+                var cbObj = {success:false, id:id};
+                if (ua.pv[0] > 0) {
+                    var obj = getElementById(id);
+                    if (obj) {
+                        if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
+                            setVisibility(id, true);
+                            if (cb) {
+                                cbObj.success = true;
+                                cbObj.ref = getObjectById(id);
+                                cb(cbObj);
+                            }
+                        }
+                        else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
+                            var att = {};
+                            att.data = regObjArr[i].expressInstall;
+                            att.width = obj.getAttribute("width") || "0";
+                            att.height = obj.getAttribute("height") || "0";
+                            if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
+                            if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
+                            // parse HTML object param element's name-value pairs
+                            var par = {};
+                            var p = obj.getElementsByTagName("param");
+                            var pl = p.length;
+                            for (var j = 0; j < pl; j++) {
+                                if (p[j].getAttribute("name").toLowerCase() != "movie") {
+                                    par[p[j].getAttribute("name")] = p[j].getAttribute("value");
+                                }
+                            }
+                            showExpressInstall(att, par, id, cb);
+                        }
+                        else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF
+                            displayAltContent(obj);
+                            if (cb) { cb(cbObj); }
+                        }
+                    }
+                }
+                else {	// if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)
+                    setVisibility(id, true);
+                    if (cb) {
+                        var o = getObjectById(id); // test whether there is an HTML object element or not
+                        if (o && typeof o.SetVariable != UNDEF) {
+                            cbObj.success = true;
+                            cbObj.ref = o;
+                        }
+                        cb(cbObj);
+                    }
+                }
+            }
+        }
+    }
 
-	function getObjectById(objectIdStr) {
-		var r = null;
-		var o = getElementById(objectIdStr);
-		if (o && o.nodeName == "OBJECT") {
-			if (typeof o.SetVariable != UNDEF) {
-				r = o;
-			}
-			else {
-				var n = o.getElementsByTagName(OBJECT)[0];
-				if (n) {
-					r = n;
-				}
-			}
-		}
-		return r;
-	}
+    function getObjectById(objectIdStr) {
+        var r = null;
+        var o = getElementById(objectIdStr);
+        if (o && o.nodeName == "OBJECT") {
+            if (typeof o.SetVariable != UNDEF) {
+                r = o;
+            }
+            else {
+                var n = o.getElementsByTagName(OBJECT)[0];
+                if (n) {
+                    r = n;
+                }
+            }
+        }
+        return r;
+    }
 
-	/* Requirements for Adobe Express Install
-		- only one instance can be active at a time
-		- fp 6.0.65 or higher
-		- Win/Mac OS only
-		- no Webkit engines older than version 312
-	*/
-	function canExpressInstall() {
-		return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
-	}
+    /* Requirements for Adobe Express Install
+        - only one instance can be active at a time
+        - fp 6.0.65 or higher
+        - Win/Mac OS only
+        - no Webkit engines older than version 312
+    */
+    function canExpressInstall() {
+        return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
+    }
 
-	/* Show the Adobe Express Install dialog
-		- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
-	*/
-	function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
-		isExpressInstallActive = true;
-		storedCallbackFn = callbackFn || null;
-		storedCallbackObj = {success:false, id:replaceElemIdStr};
-		var obj = getElementById(replaceElemIdStr);
-		if (obj) {
-			if (obj.nodeName == "OBJECT") { // static publishing
-				storedAltContent = abstractAltContent(obj);
-				storedAltContentId = null;
-			}
-			else { // dynamic publishing
-				storedAltContent = obj;
-				storedAltContentId = replaceElemIdStr;
-			}
-			att.id = EXPRESS_INSTALL_ID;
-			if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
-			if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
-			doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
-			var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
-				fv = "MMredirectURL=" + win.location.toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
-			if (typeof par.flashvars != UNDEF) {
-				par.flashvars += "&" + fv;
-			}
-			else {
-				par.flashvars = fv;
-			}
-			// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
-			// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
-			if (ua.ie && ua.win && obj.readyState != 4) {
-				var newObj = createElement("div");
-				replaceElemIdStr += "SWFObjectNew";
-				newObj.setAttribute("id", replaceElemIdStr);
-				obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
-				obj.style.display = "none";
-				(function(){
-					if (obj.readyState == 4) {
-						obj.parentNode.removeChild(obj);
-					}
-					else {
-						setTimeout(arguments.callee, 10);
-					}
-				})();
-			}
-			createSWF(att, par, replaceElemIdStr);
-		}
-	}
+    /* Show the Adobe Express Install dialog
+        - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
+    */
+    function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
+        isExpressInstallActive = true;
+        storedCallbackFn = callbackFn || null;
+        storedCallbackObj = {success:false, id:replaceElemIdStr};
+        var obj = getElementById(replaceElemIdStr);
+        if (obj) {
+            if (obj.nodeName == "OBJECT") { // static publishing
+                storedAltContent = abstractAltContent(obj);
+                storedAltContentId = null;
+            }
+            else { // dynamic publishing
+                storedAltContent = obj;
+                storedAltContentId = replaceElemIdStr;
+            }
+            att.id = EXPRESS_INSTALL_ID;
+            if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
+            if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
+            doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
+            var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
+                fv = "MMredirectURL=" + win.location.toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
+            if (typeof par.flashvars != UNDEF) {
+                par.flashvars += "&" + fv;
+            }
+            else {
+                par.flashvars = fv;
+            }
+            // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
+            // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+            if (ua.ie && ua.win && obj.readyState != 4) {
+                var newObj = createElement("div");
+                replaceElemIdStr += "SWFObjectNew";
+                newObj.setAttribute("id", replaceElemIdStr);
+                obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
+                obj.style.display = "none";
+                (function(){
+                    if (obj.readyState == 4) {
+                        obj.parentNode.removeChild(obj);
+                    }
+                    else {
+                        setTimeout(arguments.callee, 10);
+                    }
+                })();
+            }
+            createSWF(att, par, replaceElemIdStr);
+        }
+    }
 
-	/* Functions to abstract and display alternative content
-	*/
-	function displayAltContent(obj) {
-		if (ua.ie && ua.win && obj.readyState != 4) {
-			// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
-			// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
-			var el = createElement("div");
-			obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
-			el.parentNode.replaceChild(abstractAltContent(obj), el);
-			obj.style.display = "none";
-			(function(){
-				if (obj.readyState == 4) {
-					obj.parentNode.removeChild(obj);
-				}
-				else {
-					setTimeout(arguments.callee, 10);
-				}
-			})();
-		}
-		else {
-			obj.parentNode.replaceChild(abstractAltContent(obj), obj);
-		}
-	}
+    /* Functions to abstract and display alternative content
+    */
+    function displayAltContent(obj) {
+        if (ua.ie && ua.win && obj.readyState != 4) {
+            // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
+            // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+            var el = createElement("div");
+            obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
+            el.parentNode.replaceChild(abstractAltContent(obj), el);
+            obj.style.display = "none";
+            (function(){
+                if (obj.readyState == 4) {
+                    obj.parentNode.removeChild(obj);
+                }
+                else {
+                    setTimeout(arguments.callee, 10);
+                }
+            })();
+        }
+        else {
+            obj.parentNode.replaceChild(abstractAltContent(obj), obj);
+        }
+    }
 
-	function abstractAltContent(obj) {
-		var ac = createElement("div");
-		if (ua.win && ua.ie) {
-			ac.innerHTML = obj.innerHTML;
-		}
-		else {
-			var nestedObj = obj.getElementsByTagName(OBJECT)[0];
-			if (nestedObj) {
-				var c = nestedObj.childNodes;
-				if (c) {
-					var cl = c.length;
-					for (var i = 0; i < cl; i++) {
-						if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
-							ac.appendChild(c[i].cloneNode(true));
-						}
-					}
-				}
-			}
-		}
-		return ac;
-	}
+    function abstractAltContent(obj) {
+        var ac = createElement("div");
+        if (ua.win && ua.ie) {
+            ac.innerHTML = obj.innerHTML;
+        }
+        else {
+            var nestedObj = obj.getElementsByTagName(OBJECT)[0];
+            if (nestedObj) {
+                var c = nestedObj.childNodes;
+                if (c) {
+                    var cl = c.length;
+                    for (var i = 0; i < cl; i++) {
+                        if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
+                            ac.appendChild(c[i].cloneNode(true));
+                        }
+                    }
+                }
+            }
+        }
+        return ac;
+    }
 
-	/* Cross-browser dynamic SWF creation
-	*/
-	function createSWF(attObj, parObj, id) {
-		var r, el = getElementById(id);
-		if (ua.wk && ua.wk < 312) { return r; }
-		if (el) {
-			if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
-				attObj.id = id;
-			}
-			if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
-				var att = "";
-				for (var i in attObj) {
-					if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
-						if (i.toLowerCase() == "data") {
-							parObj.movie = attObj[i];
-						}
-						else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
-							att += ' class="' + attObj[i] + '"';
-						}
-						else if (i.toLowerCase() != "classid") {
-							att += ' ' + i + '="' + attObj[i] + '"';
-						}
-					}
-				}
-				var par = "";
-				for (var j in parObj) {
-					if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
-						par += '<param name="' + j + '" value="' + parObj[j] + '" />';
-					}
-				}
-				el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
-				objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
-				r = getElementById(attObj.id);
-			}
-			else { // well-behaving browsers
-				var o = createElement(OBJECT);
-				o.setAttribute("type", FLASH_MIME_TYPE);
-				for (var m in attObj) {
-					if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
-						if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
-							o.setAttribute("class", attObj[m]);
-						}
-						else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
-							o.setAttribute(m, attObj[m]);
-						}
-					}
-				}
-				for (var n in parObj) {
-					if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
-						createObjParam(o, n, parObj[n]);
-					}
-				}
-				el.parentNode.replaceChild(o, el);
-				r = o;
-			}
-		}
-		return r;
-	}
+    /* Cross-browser dynamic SWF creation
+    */
+    function createSWF(attObj, parObj, id) {
+        var r, el = getElementById(id);
+        if (ua.wk && ua.wk < 312) { return r; }
+        if (el) {
+            if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
+                attObj.id = id;
+            }
+            if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
+                var att = "";
+                for (var i in attObj) {
+                    if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
+                        if (i.toLowerCase() == "data") {
+                            parObj.movie = attObj[i];
+                        }
+                        else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+                            att += ' class="' + attObj[i] + '"';
+                        }
+                        else if (i.toLowerCase() != "classid") {
+                            att += ' ' + i + '="' + attObj[i] + '"';
+                        }
+                    }
+                }
+                var par = "";
+                for (var j in parObj) {
+                    if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
+                        par += '<param name="' + j + '" value="' + parObj[j] + '" />';
+                    }
+                }
+                el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
+                objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
+                r = getElementById(attObj.id);
+            }
+            else { // well-behaving browsers
+                var o = createElement(OBJECT);
+                o.setAttribute("type", FLASH_MIME_TYPE);
+                for (var m in attObj) {
+                    if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
+                        if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+                            o.setAttribute("class", attObj[m]);
+                        }
+                        else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
+                            o.setAttribute(m, attObj[m]);
+                        }
+                    }
+                }
+                for (var n in parObj) {
+                    if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
+                        createObjParam(o, n, parObj[n]);
+                    }
+                }
+                el.parentNode.replaceChild(o, el);
+                r = o;
+            }
+        }
+        return r;
+    }
 
-	function createObjParam(el, pName, pValue) {
-		var p = createElement("param");
-		p.setAttribute("name", pName);
-		p.setAttribute("value", pValue);
-		el.appendChild(p);
-	}
+    function createObjParam(el, pName, pValue) {
+        var p = createElement("param");
+        p.setAttribute("name", pName);
+        p.setAttribute("value", pValue);
+        el.appendChild(p);
+    }
 
-	/* Cross-browser SWF removal
-		- Especially needed to safely and completely remove a SWF in Internet Explorer
-	*/
-	function removeSWF(id) {
-		var obj = getElementById(id);
-		if (obj && obj.nodeName == "OBJECT") {
-			if (ua.ie && ua.win) {
-				obj.style.display = "none";
-				(function(){
-					if (obj.readyState == 4) {
-						removeObjectInIE(id);
-					}
-					else {
-						setTimeout(arguments.callee, 10);
-					}
-				})();
-			}
-			else {
-				obj.parentNode.removeChild(obj);
-			}
-		}
-	}
+    /* Cross-browser SWF removal
+        - Especially needed to safely and completely remove a SWF in Internet Explorer
+    */
+    function removeSWF(id) {
+        var obj = getElementById(id);
+        if (obj && obj.nodeName == "OBJECT") {
+            if (ua.ie && ua.win) {
+                obj.style.display = "none";
+                (function(){
+                    if (obj.readyState == 4) {
+                        removeObjectInIE(id);
+                    }
+                    else {
+                        setTimeout(arguments.callee, 10);
+                    }
+                })();
+            }
+            else {
+                obj.parentNode.removeChild(obj);
+            }
+        }
+    }
 
-	function removeObjectInIE(id) {
-		var obj = getElementById(id);
-		if (obj) {
-			for (var i in obj) {
-				if (typeof obj[i] == "function") {
-					obj[i] = null;
-				}
-			}
-			obj.parentNode.removeChild(obj);
-		}
-	}
+    function removeObjectInIE(id) {
+        var obj = getElementById(id);
+        if (obj) {
+            for (var i in obj) {
+                if (typeof obj[i] == "function") {
+                    obj[i] = null;
+                }
+            }
+            obj.parentNode.removeChild(obj);
+        }
+    }
 
-	/* Functions to optimize JavaScript compression
-	*/
-	function getElementById(id) {
-		var el = null;
-		try {
-			el = doc.getElementById(id);
-		}
-		catch (e) {}
-		return el;
-	}
+    /* Functions to optimize JavaScript compression
+    */
+    function getElementById(id) {
+        var el = null;
+        try {
+            el = doc.getElementById(id);
+        }
+        catch (e) {}
+        return el;
+    }
 
-	function createElement(el) {
-		return doc.createElement(el);
-	}
+    function createElement(el) {
+        return doc.createElement(el);
+    }
 
-	/* Updated attachEvent function for Internet Explorer
-		- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
-	*/
-	function addListener(target, eventType, fn) {
-		target.attachEvent(eventType, fn);
-		listenersArr[listenersArr.length] = [target, eventType, fn];
-	}
+    /* Updated attachEvent function for Internet Explorer
+        - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
+    */
+    function addListener(target, eventType, fn) {
+        target.attachEvent(eventType, fn);
+        listenersArr[listenersArr.length] = [target, eventType, fn];
+    }
 
-	/* Flash Player and SWF content version matching
-	*/
-	function hasPlayerVersion(rv) {
-		var pv = ua.pv, v = rv.split(".");
-		v[0] = parseInt(v[0], 10);
-		v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
-		v[2] = parseInt(v[2], 10) || 0;
-		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
-	}
+    /* Flash Player and SWF content version matching
+    */
+    function hasPlayerVersion(rv) {
+        var pv = ua.pv, v = rv.split(".");
+        v[0] = parseInt(v[0], 10);
+        v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
+        v[2] = parseInt(v[2], 10) || 0;
+        return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
+    }
 
-	/* Cross-browser dynamic CSS creation
-		- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
-	*/
-	function createCSS(sel, decl, media, newStyle) {
-		if (ua.ie && ua.mac) { return; }
-		var h = doc.getElementsByTagName("head")[0];
-		if (!h) { return; } // to also support badly authored HTML pages that lack a head element
-		var m = (media && typeof media == "string") ? media : "screen";
-		if (newStyle) {
-			dynamicStylesheet = null;
-			dynamicStylesheetMedia = null;
-		}
-		if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
-			// create dynamic stylesheet + get a global reference to it
-			var s = createElement("style");
-			s.setAttribute("type", "text/css");
-			s.setAttribute("media", m);
-			dynamicStylesheet = h.appendChild(s);
-			if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
-				dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
-			}
-			dynamicStylesheetMedia = m;
-		}
-		// add style rule
-		if (ua.ie && ua.win) {
-			if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
-				dynamicStylesheet.addRule(sel, decl);
-			}
-		}
-		else {
-			if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
-				dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
-			}
-		}
-	}
+    /* Cross-browser dynamic CSS creation
+        - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
+    */
+    function createCSS(sel, decl, media, newStyle) {
+        if (ua.ie && ua.mac) { return; }
+        var h = doc.getElementsByTagName("head")[0];
+        if (!h) { return; } // to also support badly authored HTML pages that lack a head element
+        var m = (media && typeof media == "string") ? media : "screen";
+        if (newStyle) {
+            dynamicStylesheet = null;
+            dynamicStylesheetMedia = null;
+        }
+        if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
+            // create dynamic stylesheet + get a global reference to it
+            var s = createElement("style");
+            s.setAttribute("type", "text/css");
+            s.setAttribute("media", m);
+            dynamicStylesheet = h.appendChild(s);
+            if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
+                dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
+            }
+            dynamicStylesheetMedia = m;
+        }
+        // add style rule
+        if (ua.ie && ua.win) {
+            if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
+                dynamicStylesheet.addRule(sel, decl);
+            }
+        }
+        else {
+            if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
+                dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
+            }
+        }
+    }
 
-	function setVisibility(id, isVisible) {
-		if (!autoHideShow) { return; }
-		var v = isVisible ? "visible" : "hidden";
-		if (isDomLoaded && getElementById(id)) {
-			getElementById(id).style.visibility = v;
-		}
-		else {
-			createCSS("#" + id, "visibility:" + v);
-		}
-	}
+    function setVisibility(id, isVisible) {
+        if (!autoHideShow) { return; }
+        var v = isVisible ? "visible" : "hidden";
+        if (isDomLoaded && getElementById(id)) {
+            getElementById(id).style.visibility = v;
+        }
+        else {
+            createCSS("#" + id, "visibility:" + v);
+        }
+    }
 
-	/* Filter to avoid XSS attacks
-	*/
-	function urlEncodeIfNecessary(s) {
-		var regex = /[\\\"<>\.;]/;
-		var hasBadChars = regex.exec(s) != null;
-		return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
-	}
+    /* Filter to avoid XSS attacks
+    */
+    function urlEncodeIfNecessary(s) {
+        var regex = /[\\\"<>\.;]/;
+        var hasBadChars = regex.exec(s) != null;
+        return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
+    }
 
-	/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
-	*/
-	var cleanup = function() {
-		if (ua.ie && ua.win) {
-			window.attachEvent("onunload", function() {
-				// remove listeners to avoid memory leaks
-				var ll = listenersArr.length;
-				for (var i = 0; i < ll; i++) {
-					listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
-				}
-				// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
-				var il = objIdArr.length;
-				for (var j = 0; j < il; j++) {
-					removeSWF(objIdArr[j]);
-				}
-				// cleanup library's main closures to avoid memory leaks
-				for (var k in ua) {
-					ua[k] = null;
-				}
-				ua = null;
-				for (var l in swfobject) {
-					swfobject[l] = null;
-				}
-				swfobject = null;
-			});
-		}
-	}();
+    /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
+    */
+    var cleanup = function() {
+        if (ua.ie && ua.win) {
+            window.attachEvent("onunload", function() {
+                // remove listeners to avoid memory leaks
+                var ll = listenersArr.length;
+                for (var i = 0; i < ll; i++) {
+                    listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
+                }
+                // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
+                var il = objIdArr.length;
+                for (var j = 0; j < il; j++) {
+                    removeSWF(objIdArr[j]);
+                }
+                // cleanup library's main closures to avoid memory leaks
+                for (var k in ua) {
+                    ua[k] = null;
+                }
+                ua = null;
+                for (var l in swfobject) {
+                    swfobject[l] = null;
+                }
+                swfobject = null;
+            });
+        }
+    }();
 
-	return {
-		/* Public API
-			- Reference: http://code.google.com/p/swfobject/wiki/documentation
-		*/
-		registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
-			if (ua.w3 && objectIdStr && swfVersionStr) {
-				var regObj = {};
-				regObj.id = objectIdStr;
-				regObj.swfVersion = swfVersionStr;
-				regObj.expressInstall = xiSwfUrlStr;
-				regObj.callbackFn = callbackFn;
-				regObjArr[regObjArr.length] = regObj;
-				setVisibility(objectIdStr, false);
-			}
-			else if (callbackFn) {
-				callbackFn({success:false, id:objectIdStr});
-			}
-		},
+    return {
+        /* Public API
+            - Reference: http://code.google.com/p/swfobject/wiki/documentation
+        */
+        registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
+            if (ua.w3 && objectIdStr && swfVersionStr) {
+                var regObj = {};
+                regObj.id = objectIdStr;
+                regObj.swfVersion = swfVersionStr;
+                regObj.expressInstall = xiSwfUrlStr;
+                regObj.callbackFn = callbackFn;
+                regObjArr[regObjArr.length] = regObj;
+                setVisibility(objectIdStr, false);
+            }
+            else if (callbackFn) {
+                callbackFn({success:false, id:objectIdStr});
+            }
+        },
 
-		getObjectById: function(objectIdStr) {
-			if (ua.w3) {
-				return getObjectById(objectIdStr);
-			}
-		},
+        getObjectById: function(objectIdStr) {
+            if (ua.w3) {
+                return getObjectById(objectIdStr);
+            }
+        },
 
-		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
-			var callbackObj = {success:false, id:replaceElemIdStr};
-			if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
-				setVisibility(replaceElemIdStr, false);
-				addDomLoadEvent(function() {
-					widthStr += ""; // auto-convert to string
-					heightStr += "";
-					var att = {};
-					if (attObj && typeof attObj === OBJECT) {
-						for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
-							att[i] = attObj[i];
-						}
-					}
-					att.data = swfUrlStr;
-					att.width = widthStr;
-					att.height = heightStr;
-					var par = {};
-					if (parObj && typeof parObj === OBJECT) {
-						for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
-							par[j] = parObj[j];
-						}
-					}
-					if (flashvarsObj && typeof flashvarsObj === OBJECT) {
-						for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
-							if (typeof par.flashvars != UNDEF) {
-								par.flashvars += "&" + k + "=" + flashvarsObj[k];
-							}
-							else {
-								par.flashvars = k + "=" + flashvarsObj[k];
-							}
-						}
-					}
-					if (hasPlayerVersion(swfVersionStr)) { // create SWF
-						var obj = createSWF(att, par, replaceElemIdStr);
-						if (att.id == replaceElemIdStr) {
-							setVisibility(replaceElemIdStr, true);
-						}
-						callbackObj.success = true;
-						callbackObj.ref = obj;
-					}
-					else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
-						att.data = xiSwfUrlStr;
-						showExpressInstall(att, par, replaceElemIdStr, callbackFn);
-						return;
-					}
-					else { // show alternative content
-						setVisibility(replaceElemIdStr, true);
-					}
-					if (callbackFn) { callbackFn(callbackObj); }
-				});
-			}
-			else if (callbackFn) { callbackFn(callbackObj);	}
-		},
+        embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
+            var callbackObj = {success:false, id:replaceElemIdStr};
+            if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
+                setVisibility(replaceElemIdStr, false);
+                addDomLoadEvent(function() {
+                    widthStr += ""; // auto-convert to string
+                    heightStr += "";
+                    var att = {};
+                    if (attObj && typeof attObj === OBJECT) {
+                        for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
+                            att[i] = attObj[i];
+                        }
+                    }
+                    att.data = swfUrlStr;
+                    att.width = widthStr;
+                    att.height = heightStr;
+                    var par = {};
+                    if (parObj && typeof parObj === OBJECT) {
+                        for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
+                            par[j] = parObj[j];
+                        }
+                    }
+                    if (flashvarsObj && typeof flashvarsObj === OBJECT) {
+                        for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
+                            if (typeof par.flashvars != UNDEF) {
+                                par.flashvars += "&" + k + "=" + flashvarsObj[k];
+                            }
+                            else {
+                                par.flashvars = k + "=" + flashvarsObj[k];
+                            }
+                        }
+                    }
+                    if (hasPlayerVersion(swfVersionStr)) { // create SWF
+                        var obj = createSWF(att, par, replaceElemIdStr);
+                        if (att.id == replaceElemIdStr) {
+                            setVisibility(replaceElemIdStr, true);
+                        }
+                        callbackObj.success = true;
+                        callbackObj.ref = obj;
+                    }
+                    else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
+                        att.data = xiSwfUrlStr;
+                        showExpressInstall(att, par, replaceElemIdStr, callbackFn);
+                        return;
+                    }
+                    else { // show alternative content
+                        setVisibility(replaceElemIdStr, true);
+                    }
+                    if (callbackFn) { callbackFn(callbackObj); }
+                });
+            }
+            else if (callbackFn) { callbackFn(callbackObj);	}
+        },
 
-		switchOffAutoHideShow: function() {
-			autoHideShow = false;
-		},
+        switchOffAutoHideShow: function() {
+            autoHideShow = false;
+        },
 
-		ua: ua,
+        ua: ua,
 
-		getFlashPlayerVersion: function() {
-			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
-		},
+        getFlashPlayerVersion: function() {
+            return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
+        },
 
-		hasFlashPlayerVersion: hasPlayerVersion,
+        hasFlashPlayerVersion: hasPlayerVersion,
 
-		createSWF: function(attObj, parObj, replaceElemIdStr) {
-			if (ua.w3) {
-				return createSWF(attObj, parObj, replaceElemIdStr);
-			}
-			else {
-				return undefined;
-			}
-		},
+        createSWF: function(attObj, parObj, replaceElemIdStr) {
+            if (ua.w3) {
+                return createSWF(attObj, parObj, replaceElemIdStr);
+            }
+            else {
+                return undefined;
+            }
+        },
 
-		showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
-			if (ua.w3 && canExpressInstall()) {
-				showExpressInstall(att, par, replaceElemIdStr, callbackFn);
-			}
-		},
+        showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
+            if (ua.w3 && canExpressInstall()) {
+                showExpressInstall(att, par, replaceElemIdStr, callbackFn);
+            }
+        },
 
-		removeSWF: function(objElemIdStr) {
-			if (ua.w3) {
-				removeSWF(objElemIdStr);
-			}
-		},
+        removeSWF: function(objElemIdStr) {
+            if (ua.w3) {
+                removeSWF(objElemIdStr);
+            }
+        },
 
-		createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
-			if (ua.w3) {
-				createCSS(selStr, declStr, mediaStr, newStyleBoolean);
-			}
-		},
+        createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
+            if (ua.w3) {
+                createCSS(selStr, declStr, mediaStr, newStyleBoolean);
+            }
+        },
 
-		addDomLoadEvent: addDomLoadEvent,
+        addDomLoadEvent: addDomLoadEvent,
 
-		addLoadEvent: addLoadEvent,
+        addLoadEvent: addLoadEvent,
 
-		getQueryParamValue: function(param) {
-			var q = doc.location.search || doc.location.hash;
-			if (q) {
-				if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
-				if (param == null) {
-					return urlEncodeIfNecessary(q);
-				}
-				var pairs = q.split("&");
-				for (var i = 0; i < pairs.length; i++) {
-					if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
-						return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
-					}
-				}
-			}
-			return "";
-		},
+        getQueryParamValue: function(param) {
+            var q = doc.location.search || doc.location.hash;
+            if (q) {
+                if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
+                if (param == null) {
+                    return urlEncodeIfNecessary(q);
+                }
+                var pairs = q.split("&");
+                for (var i = 0; i < pairs.length; i++) {
+                    if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
+                        return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
+                    }
+                }
+            }
+            return "";
+        },
 
-		// For internal usage only
-		expressInstallCallback: function() {
-			if (isExpressInstallActive) {
-				var obj = getElementById(EXPRESS_INSTALL_ID);
-				if (obj && storedAltContent) {
-					obj.parentNode.replaceChild(storedAltContent, obj);
-					if (storedAltContentId) {
-						setVisibility(storedAltContentId, true);
-						if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }
-					}
-					if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }
-				}
-				isExpressInstallActive = false;
-			}
-		}
-	};
+        // For internal usage only
+        expressInstallCallback: function() {
+            if (isExpressInstallActive) {
+                var obj = getElementById(EXPRESS_INSTALL_ID);
+                if (obj && storedAltContent) {
+                    obj.parentNode.replaceChild(storedAltContent, obj);
+                    if (storedAltContentId) {
+                        setVisibility(storedAltContentId, true);
+                        if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }
+                    }
+                    if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }
+                }
+                isExpressInstallActive = false;
+            }
+        }
+    };
 }();
-alert(SWFObject());
 
 
 /******************************************************************************/