
 var FancyViewer = function(settings) {

  // $('#debug').append('<BR><BR>NEW VIEWER!');
  
  /*******************************************************************************
  													    PROPERTIES
  *******************************************************************************/  

	this.version = '0.3.6';  
  
  // info about this viewer
  this.viewerId = 'fancyviewer_' + Math.floor(Math.random()*11) + Math.floor(Math.random()*11) + Math.floor(Math.random()*11);
  this.viewer = null; // jquery object of viewer container
  this.settings = {};
  this.settings.viewerMargin = 20; // margin of viewer from window.
  this.theme = settings.theme ? settings.theme : 'default';
  
  // info about current fileset
  this.fileset = new Array();
  
  // info about active file in fileset  
  this.currFile = null;
  this.currFileIndex = null;
  /* single files have the following info avail:
  filename;
  title;
  descr;
  type
  subtype
  isUrl // file is a webpage
  previewMode // is it being previewed? 
  */
  
  switch (this.theme) {
  case 'default':
  // default theme
  var htmlInject = '<table border="0" class="fv_container" id="' + this.viewerId + '" style="visibility: hidden;" border="0" cellspacing="0" cellpadding="0"><tr class="fv_top_row"><td class="fv_top_left">&nbsp;</td><td class="fv_top_middle">&nbsp;</td><td class="fv_top_right">&nbsp;</td></tr><tr class="fv_middle_row"><td class="fv_middle_left"></td><td class="fv_middle" align="center" valign="middle"><div class="fv_content"><!-- loader: hide & display --><!-- sample content: change this--><div class="fv_file"></div><!-- maximize/minimize: hide & display --><a href="#" class="fv_maximize" title="Maximize">Maximize</a><!-- navigation: hide & display --><div class="fv_hover"><a class="fv_next" href="#">next</a><a class="fv_prev" href="#">prev</a></div></div><!-- toolbar --><!-- toolbar: populate this on request --><div class="fv_toolbar"><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td align="left" valign="top"><div class="fv_file_info"><h1 class="fv_title"></h1><p class="fv_descr"></div><!-- /.fv_file_info --></td><td valign="bottom"><div class="fv_navigation"><a href="#" class="fv_close_preview">Close preview</a><a href="#" class="fv_arrow_prev">Previous</a><p class="fv_index"></p><a href="#" class="fv_arrow_next">Next</a><a class="fv_close" href="#">Close</a></div></td></tr></table><!-- /.fv_navigation --><div style="clear:both"></div></div><!-- /.fv_toolbar --></td><td class="fv_middle_right"></td></tr><tr class="fv_bottom_row"><td class="fv_bottom_left">&nbsp;</td><td class="fv_bottom_middle">&nbsp;</td><td class="fv_bottom_right">&nbsp;</td></tr></table>';
	break;
	case 'home':
		var htmlInject = '<table cellspacing="0" id="' + this.viewerId + '" cellpadding="0" border="0" class="fv_container" style="visibility: hidden;">	<tbody><tr class="fv_top_row"><td class="fv_top_left" width="27px" height="48px"><div style="width:27px; height:48px; " ></div></td><td class="fv_top_middle">	<h1 class="fv_title"></h1>	<!--	<div class="fv_navigation"><a href="#" class="fv_close">Close</a><a href="#" class="fv_maximize">Maximize</a><a href="#" class="fv_minimize">Minimize</a>	</div>	-->	<div style="clear: both;"></div></td><td class="fv_top_right"><div style="width:27px;"></div></td>	</tr>	<tr class="fv_middle_row"><td class="fv_middle_left"></td><td valign="middle" align="center" class="fv_middle"><!-- content: change this--><div class="fv_file"><!-- /content --><!-- loader: hide & display --><!-- <div class="fv_loader"></div> --></div>	<!-- /content --></td><td class="fv_middle_right"></td>	</tr>	<tr class="fv_bottom_row"><td class="fv_bottom_left"><label><input type="checkbox" id="at_start">Non mostrare pi&ugrave; questa finestra all\'avvio del sito</label></td><td class="fv_bottom_middle">	</td><td class="fv_bottom_right"><a href="/it/home" class="bt">Chiudi e comincia a navigare</a></td></tr></tbody></table>';
		break;
  case 'camargue':
  // camargue modal theme
  var htmlInject = '<table border="0" class="fv_container" id="' + this.viewerId + '" style="visibility: hidden;" border="0" cellspacing="0" cellpadding="0"><tr class="fv_top_row"><td class="fv_top_left">&nbsp;</td><td class="fv_top_middle"><h1 class="fv_title"></h1><div class="fv_navigation"><a href="#" class="fv_close">Close</a><!-- <a href="#" class="fv_maximize">Maximize</a> --><a href="#" class="fv_minimize">Minimize</a></div><div style="clear: both;"></div></td><td class="fv_top_right">&nbsp;</td></tr><tr class="fv_middle_row"><td class="fv_middle_left"></td><td class="fv_middle" align="center" valign="middle"><!-- content: change this--><div class="fv_file"><!-- /content --></td><td class="fv_middle_right"></td></tr><tr class="fv_bottom_row"><td class="fv_bottom_left">&nbsp;</td><td class="fv_bottom_middle"><p class="fv_descr">module: _ page manager _ v.0.1.1 _ vendor: _ <a href="http://www.manadv.com">man</a> _ last update: _ 06-11-09</p></td><td class="fv_bottom_right">&nbsp;</td></tr></table>'; 
	break;
   case 'giuntios_green':
  case 'giuntios_blu':
  // giuntios_green modal theme
  var htmlInject = '<table cellspacing="0" id="' + this.viewerId + '" cellpadding="0" border="0" class="fv_container" style="visibility: hidden;">	<tbody><tr class="fv_top_row"><td class="fv_top_left" width="27px" height="48px"><div style="width:27px; height:48px; " ></div></td><td class="fv_top_middle">	<h1 class="fv_title"></h1>	<!--	<div class="fv_navigation"><a href="#" class="fv_close">Close</a><a href="#" class="fv_maximize">Maximize</a><a href="#" class="fv_minimize">Minimize</a>	</div>	-->	<div style="clear: both;"></div></td><td class="fv_top_right"><div style="width:27px;"></div></td>	</tr>	<tr class="fv_middle_row"><td class="fv_middle_left"></td><td valign="middle" align="center" class="fv_middle"><!-- content: change this--><div class="fv_file"><!-- /content --><!-- loader: hide & display --><!-- <div class="fv_loader"></div> --></div>	<!-- /content --></td><td class="fv_middle_right"></td>	</tr>	<tr class="fv_bottom_row"><td class="fv_bottom_left">&nbsp;</td><td class="fv_bottom_middle">	<!-- <p class="fv_descr"></p> --></td><td class="fv_bottom_right">&nbsp;</td>	</tr></tbody></table>';
	break; 
  case 'empty':
  // camargue modal theme
  var htmlInject = '<table border="0" class="fv_container" id="' + this.viewerId + '" style="visibility: hidden;" border="0" cellspacing="0" cellpadding="0"><tr class="fv_middle_row"><td class="fv_middle_left"></td><td class="fv_middle" align="center" valign="middle"><!-- content: change this--><div class="fv_file"><!-- /content --></td><td class="fv_middle_right"></td></tr></table>'; 
	break;
  
}

  // file formats - grouped by type, contains the string to search the URL for
  var fileTypes = new Array();
  fileTypes['image'] = new Array();
  fileTypes['audio'] = new Array();
  fileTypes['video'] = new Array();
  fileTypes['doc']   = new Array();
  fileTypes['embedded'] = new Array();
  fileTypes['iframe'] = new Array();
  
  fileTypes['image']['exp'] = new Array();
  fileTypes['audio']['exp'] = new Array();
  fileTypes['video']['exp'] = new Array();
  fileTypes['doc']['exp']   = new Array();  
  fileTypes['embedded']['exp'] = new Array();  
  fileTypes['iframe']['exp'] = new Array();  
  
  fileTypes['image']['opener'] = new Array();
  fileTypes['audio']['opener'] = new Array();
  fileTypes['video']['opener'] = new Array();
  fileTypes['doc']['opener']   = new Array();    
  fileTypes['embedded']['opener'] = new Array(); 
  fileTypes['iframe']['opener'] = new Array(); 
  
  fileTypes['image']['skip_dialog'] = new Array();
  fileTypes['audio']['skip_dialog'] = new Array();
  fileTypes['video']['skip_dialog'] = new Array();
  fileTypes['doc']['skip_dialog']   = new Array();    
  fileTypes['embedded']['skip_dialog'] = new Array();  
  fileTypes['iframe']['skip_dialog'] = new Array();      
          
     

     
  
  // image file formats
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.3dm'; // Rhino 3D Model
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.3dmf'; // QuickDraw 3D Metafile
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.abm'; // Photo Album
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.ai'; // Adobe Illustrator File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.art'; // Art Document
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.blend'; // Blender 3D Data File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.bmp'; // Bitmap Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = 'INJECT';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 1;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.br5'; // Bryce 3D Scene File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.cpt'; // Corel Photo-Paint Document
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.cr2'; // Canon Raw Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.dgn'; // MicroStation Design File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;    
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.dng'; // Digital Negative Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.drw'; // Drawing File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.dwg'; // AutoCAD Drawing Database File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.dxf'; // Drawing Exchange Format File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.emf'; // Enhanced Windows Metafile
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.emz'; // Windows Compressed Enhanced Metafile
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   

  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.eps'; // Encapsulated PostScript File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.exif'; // Exchangeable Image Information File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.fpf'; // IKEA Home Planner File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.fxg'; // Flash XML Graphics File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.gif'; // Graphical Interchange Format File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = 'INJECT';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 1;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.hdp'; // HD Photo File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.indd'; // Adobe InDesign File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.inx'; // InDesign Interchange File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.jpeg'; // JPEG Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = 'INJECT';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 1;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.jpg'; // JPEG Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = 'INJECT';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 1;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.jpx'; // JPEG 2000 Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;    
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.ma'; // Maya Project File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.max'; // PaperPort Scanned Document
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.mb'; // Maya Binary Project File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.mng'; // Multiple Network Graphic
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.obj'; // 3D Object File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.pct'; // Picture File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.pln'; // ArchiCAD Project File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.png'; // Portable Network Graphic
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = 'INJECT';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 1;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.ppm'; // Portable Pixmap Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.ps'; // PostScript File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.psd'; // Photoshop Document
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.psp'; // Paint Shop Pro Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   

  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.qxd'; // QuarkXPress Document
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.qxp'; // QuarkXPress Project File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.sdb'; // SAP2000 Model File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.shp'; // Shapes File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.stl'; // Stereolithography File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.svg'; // Scalable Vector Graphics File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  /*
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.svgz'; // Compressed SVG File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.tex'; // Texture File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.tga'; // Targa Graphic
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.thm'; // Thumbnail Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  */
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.tif'; // Tagged Image File
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  fileTypes['image']['exp'][fileTypes['image']['exp'].length] = '.xcf'; // GIMP Image File  
  fileTypes['image']['opener'][fileTypes['image']['opener'].length] = '';
  fileTypes['image']['skip_dialog'][fileTypes['image']['skip_dialog'].length] = 0;   
  
  // audio file formats
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.aa3'; // ATRAC Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.aac'; // Advanced Audio Coding File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.aif'; // Audio Interchange File Format
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  /*
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.cpr'; // Cubase Project
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.flac'; // Free Lossless Audio Codec File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.iff'; // Interchange File Format
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.m3u'; // Media Playlist File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  */
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.m4a'; // Apple Lossless Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  /*
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.m4b'; // MPEG-4 Audio Book File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.m4p'; // iTunes Music Store Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.m4r'; // iPhone Ringtone File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  */
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.mid'; // MIDI File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.midi'; // MIDI File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  /*
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.mod'; // Amiga Music Module File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  */
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.mp3'; // MP3 Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.mpa'; // MPEG-2 Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.ogg'; // Ogg Vorbis Compressed Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.ra'; // Real Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.ram'; // Real Audio Media
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  /*
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.sib'; // Sibelius Score
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.snd'; // Sound File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  */
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.wav'; // WAVE Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  fileTypes['audio']['exp'][fileTypes['audio']['exp'].length] = '.wma'; // Windows Media Audio File
  fileTypes['audio']['opener'][fileTypes['audio']['opener'].length] = '';
  fileTypes['audio']['skip_dialog'][fileTypes['audio']['skip_dialog'].length] = 0;   
  
  
  // video file formats
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.3g2'; // 3GPP2 Multimedia File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;   
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.3gp'; // 3GPP Multimedia File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.asf'; // Advanced Systems Format File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.asx'; // Microsoft ASF Redirector File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.avi'; // Audio Video Interleave File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'WINDOWS_MEDIA_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.divx'; // DivX-Encoded Movie File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'WINDOWS_MEDIA_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.dvr-ms'; // Microsoft Digital Video Recording
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.f4v'; // Flash MP4 Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.fbr'; // FlashBack Screen Recording
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.flv'; // Flash Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'FLOWPLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.m4v'; // iTunes Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.mkv'; // Matroska Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.mov'; // Apple QuickTime Movie
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'QUICKTIME_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.mp4'; // MPEG-4 Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'FLOWPLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.mpeg'; // MPEG Movie
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'WINDOWS_MEDIA_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.mpg'; // MPEG Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'WINDOWS_MEDIA_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.mts'; // AVCHD Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.ogm'; // Ogg Media File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.qt'; // Apple QuickTime Movie
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'QUICKTIME_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.rcproject'; // iMovie '08 Project
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.rm'; // Real Media File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'REAL_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.smil'; // SMIL Presentation File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.stx'; // Pinnacle Studio Project File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.swf'; // Flash Movie
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'FLASH_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;   
  /*
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.vob'; // DVD Video Object File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.vro'; // DVD Video Recording Format
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = '';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  */
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.wmv'; // Windows Media Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'WINDOWS_MEDIA_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  fileTypes['video']['exp'][fileTypes['video']['exp'].length] = '.xvid'; // Xvid-Encoded Video File
  fileTypes['video']['opener'][fileTypes['video']['opener'].length] = 'WINDOWS_MEDIA_PLAYER';
  fileTypes['video']['skip_dialog'][fileTypes['video']['skip_dialog'].length] = 0;     
  
  // documents
  fileTypes['doc']['exp'][fileTypes['doc']['exp'].length] = '.doc'; // Microsoft Word
  fileTypes['doc']['opener'][fileTypes['doc']['opener'].length] = 'ZOHO_VIEWER';  
  fileTypes['doc']['skip_dialog'][fileTypes['doc']['skip_dialog'].length] = 0;   
    
  fileTypes['doc']['exp'][fileTypes['doc']['exp'].length] = '.docx'; // Microsoft Word
  fileTypes['doc']['opener'][fileTypes['doc']['opener'].length] = 'ZOHO_VIEWER'; 
  fileTypes['doc']['skip_dialog'][fileTypes['doc']['skip_dialog'].length] = 0;  
  
  fileTypes['doc']['exp'][fileTypes['doc']['exp'].length] = '.pdf'; // Adobe PDF
  fileTypes['doc']['opener'][fileTypes['doc']['opener'].length] = 'ZOHO_VIEWER'; 
  fileTypes['doc']['skip_dialog'][fileTypes['doc']['skip_dialog'].length] = 0;         
  
  // embedded
  fileTypes['embedded']['exp'][fileTypes['embedded']['exp'].length] = 'youtube.com/watch';
  fileTypes['embedded']['opener'][fileTypes['embedded']['opener'].length] = 'YOUTUBE_PLAYER';
  fileTypes['embedded']['skip_dialog'][fileTypes['embedded']['skip_dialog'].length] = 1;   
  
  fileTypes['embedded']['exp'][fileTypes['embedded']['exp'].length] = 'vimeo.com';
  fileTypes['embedded']['opener'][fileTypes['embedded']['opener'].length] = 'VIMEO_PLAYER';  
  fileTypes['embedded']['skip_dialog'][fileTypes['embedded']['skip_dialog'].length] = 1;
  
  // iframe
  fileTypes['iframe']['exp'][fileTypes['iframe']['exp'].length] = '.htm';
  fileTypes['iframe']['opener'][fileTypes['iframe']['opener'].length] = 'IFRAME';
  fileTypes['iframe']['skip_dialog'][fileTypes['iframe']['skip_dialog'].length] = 1;   
  
  fileTypes['iframe']['exp'][fileTypes['iframe']['exp'].length] = '.html';
  fileTypes['iframe']['opener'][fileTypes['iframe']['opener'].length] = 'IFRAME';  
  fileTypes['iframe']['skip_dialog'][fileTypes['iframe']['skip_dialog'].length] = 1; 
  
  fileTypes['iframe']['exp'][fileTypes['iframe']['exp'].length] = '.asp';
  fileTypes['iframe']['opener'][fileTypes['iframe']['opener'].length] = 'IFRAME';  
  fileTypes['iframe']['skip_dialog'][fileTypes['iframe']['skip_dialog'].length] = 1; 
  
  fileTypes['iframe']['exp'][fileTypes['iframe']['exp'].length] = '.aspx';
  fileTypes['iframe']['opener'][fileTypes['iframe']['opener'].length] = 'IFRAME';  
  fileTypes['iframe']['skip_dialog'][fileTypes['iframe']['skip_dialog'].length] = 1;  
  
  fileTypes['iframe']['exp'][fileTypes['iframe']['exp'].length] = '.php';
  fileTypes['iframe']['opener'][fileTypes['iframe']['opener'].length] = 'IFRAME';  
  fileTypes['iframe']['skip_dialog'][fileTypes['iframe']['skip_dialog'].length] = 1; 
  
  fileTypes['iframe']['exp'][fileTypes['iframe']['exp'].length] = '.jsp';
  fileTypes['iframe']['opener'][fileTypes['iframe']['opener'].length] = 'IFRAME';  
  fileTypes['iframe']['skip_dialog'][fileTypes['iframe']['skip_dialog'].length] = 1;           
  





  /*******************************************************************************
  													    PRIVATE METHODS
  *******************************************************************************/

	this._getFileInfo = function(filename) {
  	filename = filename.toLowerCase();
    //remove trailing slash
    if (filename.charAt(filename.length - 1) == "/") {
      filename = filename.substring(0, filename.length - 1);
    }    
      
    var fileInfo = new Array();
    fileInfo['type'] = '';
    fileInfo['ext'] = '';
    fileInfo['opener'] = '';
    fileInfo['skip_dialog'] = '';
    
    // alert('find extention...');
    // alert('filename: ' + filename);
    fileInfo['ext'] = filename.substr(filename.lastIndexOf('.')).split('?')[0];
    // alert(fileInfo['ext']);
    
    if ($.inArray(fileInfo['ext'], fileTypes['image']['exp']) != '-1') {
    
    	fileInfo['type'] = 'image';
      var i = $.inArray(fileInfo['ext'], fileTypes['image']['exp']);
      fileInfo['opener'] = fileTypes['image']['opener'][i];
      fileInfo['skip_dialog'] = fileTypes['image']['skip_dialog'][i];
    
    } else if ($.inArray(fileInfo['ext'], fileTypes['audio']['exp']) != '-1') {
    
    	fileInfo['type'] = 'audio';
      var i = $.inArray(fileInfo['ext'], fileTypes['audio']['exp']);
      fileInfo['opener'] = fileTypes['audio']['opener'][i];
      fileInfo['skip_dialog'] = fileTypes['audio']['skip_dialog'][i];      
    
    } else if ($.inArray(fileInfo['ext'], fileTypes['video']['exp']) != '-1') {
    
    	fileInfo['type'] = 'video';
      var i = $.inArray(fileInfo['ext'], fileTypes['video']['exp']);     
      fileInfo['opener'] = fileTypes['video']['opener'][i];
      fileInfo['skip_dialog'] = fileTypes['video']['skip_dialog'][i];       
    
    } else if ($.inArray(fileInfo['ext'], fileTypes['doc']['exp']) != '-1') {
    	// alert('ext: ' + fileInfo['ext']);
    	// alert('doc');
    	fileInfo['type'] = 'doc';
      var i = $.inArray(fileInfo['ext'], fileTypes['doc']['exp']);
      fileInfo['opener'] = fileTypes['doc']['opener'][i];
      fileInfo['skip_dialog'] = fileTypes['doc']['skip_dialog'][i];      
    
    } else if ($.inArray(fileInfo['ext'], fileTypes['embedded']['exp']) != '-1') {
    	// alert('try embedded');
    	fileInfo['type'] = 'embedded';
      var i = $.inArray(fileInfo['ext'], fileTypes['embedded']['exp']);
      fileInfo['opener'] = fileTypes['embedded']['opener'][i];
      fileInfo['skip_dialog'] = fileTypes['embedded']['skip_dialog'][i];  
         
    } else if ($.inArray(fileInfo['ext'], fileTypes['iframe']['exp']) != '-1') {
    	// alert('try iframe');
    	fileInfo['type'] = 'iframe';
      var i = $.inArray(fileInfo['ext'], fileTypes['iframe']['exp']);
      fileInfo['opener'] = fileTypes['iframe']['opener'][i];
      fileInfo['skip_dialog'] = fileTypes['iframe']['skip_dialog'][i];  
         
    } else {
      fileInfo['type'] = '';
      fileInfo['ext'] = '';
      fileInfo['opener'] = '';
      fileInfo['skip_dialog'] = 0; 
    }
   
   	// $('#debug').append('<BR>File info: ' + fileInfo['type'] + '/' + fileInfo['ext'] + '/' + fileInfo['opener'] + '/' + fileInfo['skip_dialog']);
    return fileInfo;    
	};
  
  
  
  
  
  this._getFileExtension = function (filename) {
  	var ext = /^.+\.([^.]+)$/.exec(filename);
  	return ext == null ? "" : ext[1].toLowerCase();
  };





	this._injectMarkup = function(markup) {               
    
    // inject content
    this.viewer.find('.fv_file')[0].innerHTML = markup;           
    
    // show descr/title/controls
    this.viewer.find('.fv_toolbar').css('visibility', 'visible');      
    
    // show content
    this.viewer.find('.fv_file').css('visibility', 'visible'); 
    
    // init
    this._setBehaviors();
       
  }    
    
    
    
    
    
  this._setBehaviors = function() {
    var currFancyViewer = this; // fix scope
      
  	// bottom arrows next/prev
  	this.viewer.find('.fv_arrow_prev').unbind('click');
    this.viewer.find('.fv_arrow_prev').bind('click', function() {currFancyViewer.prev(); return false;});
    this.viewer.find('.fv_arrow_next').unbind('click');
  	this.viewer.find('.fv_arrow_next').bind('click', function() {currFancyViewer.next(); return false;}); 
    
    // big arrows next/prev 
  	this.viewer.find('.fv_prev').unbind('click');
    this.viewer.find('.fv_prev').bind('click', function() {currFancyViewer.prev(); return false;});
    this.viewer.find('.fv_next').unbind('click');
  	this.viewer.find('.fv_next').bind('click', function() {currFancyViewer.next(); return false;});     
    
    // close
		this.viewer.find('.fv_close').unbind('click');
		this.viewer.find('.fv_close').bind('click', function() {currFancyViewer.close(); return false;});         
    
    // nth of n
    this.viewer.find('.fv_index').html((this.currFileIndex+1) + ' of ' + this.fileset.length);  
    
    // file preview
    var currFancyViewer = this;
    this.viewer.find('a[rel=fv_preview]').each(function() {
			$(this).unbind('click');		
    	$(this).bind('click', function() {      	        
        currFancyViewer._injectPreview();
        return false;        
      });  
    });  
    
    // close preview button
    if (this.currFile['previewMode']) {
      var currFancyViewer = this;
      if (!currFancyViewer.currFile['skip_dialog']) {		      
    		this.viewer.find('a.fv_close_preview').css('visibility', 'visible');
        this.viewer.find('a.fv_close_preview').unbind('click');
        this.viewer.find('a.fv_close_preview').bind('click', function() {
    	    currFancyViewer.viewer.find('a.fv_close_preview').css('visibility', 'hidden'); 
            currFancyViewer.currFile['previewMode'] = 0;               
          	currFancyViewer.jumpTo(currFancyViewer.currFileIndex); 
            return false;
        	});  
      }
    } else {
    	// make sure button hasn't remained visible
      this.viewer.find('a.fv_close_preview').css('visibility', 'hidden');      
    }
  }
  
  
  
  
  
   this._grabParam = function(name,url){
     name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
     var regexS = "[\\?&]"+name+"=([^&#]*)";
     var regex = new RegExp( regexS );
     var results = regex.exec( url );
     if( results == null )
       return "";
     else
       return results[1];
   }
  
  
  
  
  
   
   this._grabHash = function(separator,url){
    var results = url.substring(url.lastIndexOf(separator)+1);
    if( results == null )
    	return "";
    else
    	return results;
   }   
   
  
  
  this._injectPreview = function() {
  
		// create markup for file+process
    switch (this.currFile['opener']) {
    	case 'INJECT':
      	if (this.currFile['type'] == 'image') {
    			var imgPreloader = new Image();  
          imgPreloader.src = this.currFile['filename'];
          var currFancyViewer = this; // make 'this' available inside functions
          imgPreloader.onload = function() {    
            var imgH = $(window).height() - (currFancyViewer.viewer.height() - currFancyViewer.viewer.find('.fv_content').height() -  currFancyViewer.settings.viewerMargin*2); // as big as possibile
            var ratio = imgH/imgPreloader.height;
            var imgW = imgPreloader.width*(ratio);
      			markup = '<img style="width:' + imgW + 'px; height:"' + imgH + 'px" src="' + currFancyViewer.currFile['filename'] + '">';
            contentWidth = imgW; 
            contentHeight = imgH;    
            currFancyViewer._injectMarkup(markup); 
            currFancyViewer.currFile['previewMode'] = 1;
            currFancyViewer._setBehaviors();
          };
        }
			break;
           
  
  
  
  			case 'YOUTUBE_PLAYER':
        	// build html
          fm_typeMarkyp = '';
  				markup += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="425" height="344"><param name="allowfullscreen" value="true" />';
          markup += '<param name="allowscriptaccess" value="always" />';
          markup += '<param name="movie" value="http://www.youtube.com/v/'+this._grabParam('v',this.currFile['filename'])+'&hd='+this._grabParam('hd',this.currFile['filename'])+'" />';
  				markup += '<embed src="http://www.youtube.com/v/'+this._grabParam('v',this.currFile['filename'])+'&hd='+this._grabParam('hd',this.currFile['filename'])+'" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="425" height="344"></embed>';
          markup += '</object>';     
          this._injectMarkup(markup); 
          this.currFile['previewMode'] = 1; 
          this._setBehaviors();  
        break;
        
  
        
        
  			case 'VIMEO_PLAYER':
  				markup = '<object width="'+this._correctSizes['width']+'" height="'+this._correctSizes['height']+'"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id='+_grabHash('/',this.currFile['filename'])+'&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id='+_grabHash('/',this.currFile['filename'])+'&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="'+this._correctSizes['width']+'" height="'+this._correctSizes['height']+'"></embed></object>'
          this._injectMarkup(markup); 
          this.currFile['previewMode'] = 1; 
          this._setBehaviors();  
        break;
        
  
  
        
        
        case 'QUICKTIME_PLAYER':
        	// build html
          var movie_width = 480;
          var movie_height = 287;
          fm_typeMarkyp = '';
  				markup = '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="' + movie_height+'" width="'+movie_width+'"><param name="src" value="'+this.currFile['filename']+'"><param name="autoplay" value="true"><param name="type" value="video/quicktime"><embed src="'+this.currFile['filename']+'" height="'+movie_height+'" width="'+movie_width+'" autoplay="true" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>';        
          this._injectMarkup(markup); 
          this.currFile['previewMode'] = 1; 
          this._setBehaviors();  
        break;
        
        
        
        
        
        
        case 'FLASH_PLAYER':
  				flash_vars = this.currFile['filename'];
  				flash_vars = flash_vars.substring(this.currFile['filename'].indexOf('flashvars') + 10,this.currFile['filename'].length);
  				filename = this.currFile['filename'];
  				filename = filename.substring(0,filename.indexOf('?'));
  				markup = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+this._correctSizes['width']+'" height="'+this._correctSizes['height']+'"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="'+filename+'?'+flash_vars+'" /><embed src="'+filename+'?'+flash_vars+'" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="'+this._correctSizes['width']+'" height="'+this._correctSizes['height']+'"></embed></object>';
          this._injectMarkup(markup); 
          this.currFile['previewMode'] = 1; 
          this._setBehaviors();  
        break;
        



        
        
        case 'ZOHO_VIEWER':
        	if (this.currFile['filename'].indexOf('http://') == '-1') {
          	alert('This file must be published to be viewed.');
          }
          var myHeight = $(window).height() - (this.viewer.height() - this.viewer.find('.fv_content').height() - this.settings.viewerMargin*2); // as big as possibile  
          markup = '<iframe src="http://viewer.zoho.com/api/view.do?url=' + this.currFile['filename'] + '&embed=true" width="700px" height="' + myHeight + 'px" style="border: none;"></iframe>';
          this._injectMarkup(markup); 
          this.currFile['previewMode'] = 1; 
          this._setBehaviors();  
        break;          
        
        default:
        	alert('No opener!');                    
        break; 
        
        case 'IFRAME':
          // var myWidth = $(window).width() - (this.viewer.width() - this.viewer.find('.fv_content').width() - this.settings.viewerMargin*2); // as big as possibile
          var myWidth = this.currFile['width'] ? this.currFile['width'] : 800;
          var myHeight = this.currFile['height'] ? this.currFile['height'] : $(window).height() - this.viewer.height() - this.viewer.find('.fv_content').height() - this.settings.viewerMargin*2; // as big as possibile  ;        
          markup = '<iframe src="' + this.currFile['filename'] + '" width="' + myWidth + 'px" height="' + myHeight + 'px" style="border: none;" border="0"  frameborder="0" marginheight="0" marginwidth="0"></iframe>';
          this._injectMarkup(markup); 
          this.currFile['previewMode'] = 1; 
          this._setBehaviors(); 
          // following is temp stuff top make it work (center thing to window)			
			this.viewer.css('left', '50%');  
			this.viewer.css('marginLeft', '-' + myWidth/2 + 'px');
			this.viewer.css('top', '50%'); 
			this.viewer.css('marginTop', '-' + myHeight/2 - 50 + 'px');
			if( $.browser.msie && $.browser.version < 7) {
				this.viewer.css('position', 'absolute');
				this.viewer.css('marginTop', '-' + myHeight/2 - 50 + $(window).scrollTop() + 'px');
			}			

        break;                    
        

    } // switch opener  
  }
  
  /*******************************************************************************
  													    PUBLIC METHODS
  *******************************************************************************/
 
  
  
	// adds a file to fileset
	this.addToSet = function (filename, title, descr, options) {
  	if (!options) options = {};
    // $('#debug').append('<BR>this.addToSet called.');  
    var fileinfo = this._getFileInfo(filename);
  	var arr = new Array();
    arr['filename']      = filename;
    arr['title']         = title;
    arr['descr']         = descr;
    arr['type']          = fileinfo['type'];
    arr['ext']           = fileinfo['ext'].replace('.', '');
    arr['opener']        = fileinfo['opener'];
		arr['skip_dialog']   = fileinfo['skip_dialog'];    
    // arr['isUrl']      = fileinfo['isUrl'];
    arr['previewMode']   = 0;
    arr['width']         = options.width ? options.width : null;
    arr['height']        = options.height ? options.height : null;
   
  	this.fileset[this.fileset.length] = arr;
    // $('#debug').append('<BR>--> items in array (updated): ' + this.fileset.length);    
  }    
      
      
      
      
      
       
  // go to file in specified startIndex
	this.jumpTo = function(startIndex) {
  	if (this.fileset[startIndex] == undefined) {
    	// alert('No file at that index!');
    	return 0;  
    }     
   
  	var currFancyViewer = this; // make 'this' available to sub-functions	
    var markup = null; // html of the file

    // save init vars  
  	this.currFile = this.fileset[startIndex];
    this.currFileIndex = startIndex;   
    this.currFile['previewMode'] = 0; // reset preview flag
       
    // 'remove' preview
		this.viewer.find('.fv_preview_dialog').hide(); 
    
    // hide content
    this.viewer.find('.fv_content').css('visibility', 'hidden');
    
    // hide title, descr, bottom controls
    this.viewer.find('.fv_toolbar').css('visibility', 'hidden');     
    
    // insert new title/descr
    this.viewer.find('.fv_title').text(this.currFile['title']);
    this.viewer.find('.fv_descr').html(this.currFile['descr']);  
    
  	// alert(this.currFile['skip_dialog']);
          
    if (this.currFile['skip_dialog']) {
    	this._injectPreview();
    } else {
      // insert preview
      markup = '';
      var icon = this.currFile['ext'] ? this.currFile['ext'] + '.png' : 'default.png';
      markup += '<div class="fv_preview_dialog">';
      markup += '<img src="themes/' + this.theme + '/images/fancymedia_icons/' + icon + '" style="margin: 50px 150px;" >';
      markup += '<div class="clear buttons">';
      markup += '<div class="spacer"></div>';
      markup += '<a rel="fv_download" href="' + this.currFile['filename'] + '" class="button left" ><span>download</span></a>';
      markup += '<a rel="fv_preview" href="' + this.currFile['filename'] + '" class="button" ><span>preview</span></a></div>';
      markup += '</div>';
      markup += '</div>';          
      
      this._injectMarkup(markup);     
    }
    
    this._setBehaviors();         
    
    return;
    
  }
 
 
 
  

	// goes to next file
  this.next = function() {
  	return this.jumpTo(this.currFileIndex+1);
  };
  
  
  
  
  
  
  // goes to previous file
  this.prev = function() {
  	return this.jumpTo(this.currFileIndex-1);
  };
  
  
  
  
  
  
  
  
  // opens the viewer, shows first file in fileset
	this.open = function(startIndex) {
  
    // append theme
  $('head').append('<link id="test-this" rel="stylesheet" type="text/css" href="/CAMARGUE/js/api/required/FANCY_VIEWER/fv-0.3.6/themes/' + this.theme + '/css/style.css">'); 
  
  	if (!startIndex) startIndex = 0;
  	
    // $('#debug').append('<BR>this.open called.');
    
  	// insert HTML
  	$('body').append(htmlInject);
    
    // save viewer object
    this.viewer = $('.fv_container[id=' + this.viewerId + ']');
    
    // $('#debug').append('<BR>viewer (check with id): ' + this.viewer.attr('id'));
      
    // process curr file
    this.jumpTo(startIndex);
      
    // show viewer
    this.viewer.css('visibility', 'visible');  	
      
  }
  
  
  
  
  // closes the viewer, erasing HTML
  this.close = function() {
  	$('#fancy_viewer_wrapper').remove();
  	this.viewer.remove();
    return false;
  }

};		






