/*
Synopsis: vMix Multi-Media Widget Core jQuery Functions
Author: Jason Starnes - Interactive Media Manager - The Herald
Date: 16-Nov-2007 v.8b
Copyright 2007 The Herald Publishing Company, Rock Hill, SC
*/

$(document).ready(function (){

   // The widgetOpts object contains all of the user-defineable options for the widget
   var widgetOpts = new Object();
   widgetOpts.siteUrl = 'http://www.heraldonline.com';                                // Base URL of affiliate site
   widgetOpts.pathToWidget = '/cgi-bin/vmix/mmWidget.php';                           // Path to widget AJAX implementation
   widgetOpts.pathToImages = '/cgi-bin/vmix/images/';                                 // Path to widget images
   widgetOpts.pathToPlayer = '/cgi-bin/vmix/player.php';                             // Path to player implementation
   widgetOpts.pathToSubmitForm = '/cgi-bin/vmix/upload_form.php';                    // Path to community upload form
   widgetOpts.defaultTab = 'video';                                                   // Tab to display by default: 'video', 'audio', 'image', 'apvideo'
   widgetOpts.tDuration = 200;                                                        // Animation speed of tabs/content in 'ms'
   widgetOpts.mediaLimit = 5;                                                         // Maximum # of results to query from vMix
   widgetOpts.autoPlay = 0;                                                           // Auto play flag for emmeded player: 0-User start, 1-Auto start
   widgetOpts.descLength = 65;                                                        // Number of characters to display from description before trimming
   widgetOpts.popUpWidth = 770;                                                       // Width of the vmix popup player window
   widgetOpts.popUpHeight = 850;                                                      // Height of the vmix popup player window

   // The getMedia object defines where to AJAX the specified media from. Valid options are 'vmix' and 'pubsys'
   widgetOpts.getMedia = new Object();
      widgetOpts.getMedia.video = 'vmix';
      widgetOpts.getMedia.audio = 'vmix';
      widgetOpts.getMedia.image = 'vmix';

   // The pubSysPathToMedia object is used to define a URL to a PubSys generated page that will be AJAX-ed into the widget
   widgetOpts.pubSysPathToMedia = new Object();
       widgetOpts.pubSysPathToMedia.video = '';
       widgetOpts.pubSysPathToMedia.audio = '';
       widgetOpts.pubSysPathToMedia.image = '';
	   
   // Set default gerne ids for media types
   widgetOpts.defaultGenre = new Object();
       widgetOpts.defaultGenre.video = '00001643';
   	   widgetOpts.defaultGenre.audio = '00001920';
	   widgetOpts.defaultGenre.image = '00002157';

   // DO NOT ALTER ANY CODE BEYOND THIS POINT
   widgetOpts.tClosed = '90px';                                                        // Closed tab width in 'px'
   widgetOpts.tOpen = '135px';                                                         // Open tab width in 'px'
   widgetOpts.playerWidth = 200;                                                       // Width of embedded player
   widgetOpts.videoPlayerHeight = 157;                                                 // Height of embedded player
   widgetOpts.audioPlayerHeight = 25;
   		
   widgetOpts.tClass = new Object();
       widgetOpts.tClass.videoTab = 'currentLeft';
	   widgetOpts.tClass.audioTab = 'current';
	   widgetOpts.tClass.imageTab = 'current';
	   widgetOpts.tClass.apvideoTab = 'currentRight'; //change submit
	   
   widgetTabData = new Object();

   function tabHandler(event){
          $("#mmWidgetNav a[class!='tab']").addClass('tab');
          widgetTabData.cTab = $(this).parent('li');                                                         
    	  widgetTabData.cDiv = $("div.content[id='"+($(this).attr('href')).substr(1)+"Box']");
 	      $(this).removeClass('tab');
           if (typeof(widgetTabData.aTab)=='undefined'){
			   $(widgetTabData.cTab)
	                .addClass(widgetOpts.tClass[$(widgetTabData.cTab).attr("id")])
		            .animate({width: widgetOpts.tOpen}, widgetOpts.tDuration)
					.end();
               $(widgetTabData.cDiv)
			        .fadeIn(widgetOpts.tDuration)
					.end();
				widgetTabData.aTab =widgetTabData.cTab;
				widgetTabData.aDiv =widgetTabData.cDiv;
	
		   }else if (widgetTabData.aTab.attr("id") !=widgetTabData.cTab.attr("id")){
	    	   widgetTabData.aDiv
			        .fadeOut(widgetOpts.tDuration)
				    .queue(function () {
			           // $("#mmWidgetContentContainer .preloader").toggle();
                       widgetTabData.cTab.addClass(widgetOpts.tClass[widgetTabData.cTab.attr("id")]);
                       widgetTabData.aTab
				            .animate({width: widgetOpts.tClosed}, widgetOpts.tDuration, 'linear')
	    		            .queue(function () {
                               widgetTabData.aTab.removeClass(widgetTabData.aTab.attr("class"));
                                $(this).dequeue();
                            });

                       widgetTabData.cTab
				            .animate({width: widgetOpts.tOpen}, widgetOpts.tDuration, 'linear')
	                        .queue(function () {
		                       // $("#mmWidgetContentContainer .preloader").toggle();
		   	                   widgetTabData.cDiv.fadeIn(widgetOpts.tDuration);
								widgetTabData.aTab =widgetTabData.cTab;                                                      
                               widgetTabData.aDiv =widgetTabData.cDiv;
                                $(this).dequeue();
                            });

                            $(this).dequeue();
	    	        });           

           }

           event.preventDefault();

    } // end tab handler


   function launchPlayer(event){
       window.open(event.data.clickUrl,'MediaPlayer','width='+widgetOpts.popUpWidth+',height='+widgetOpts.popUpHeight+',scrollbars=no,resizable=no,location=no,statusbar=no');
	   event.preventDefault();
   }

    // attach click handler to tabs
    $("#mmWidgetNav a.tab")
       .bind('click',tabHandler);
		
	//$("#mmWidgetNav a.tab").each(function(){alert($(this).attr('href'))})

   // Begin API calls for each media type
   var widgetMedia = new Object();
   $.each(widgetOpts.getMedia, function(mediaType){
       if (this == 'vmix'){ // for vmix integration
           $.getJSON(widgetOpts.siteUrl + widgetOpts.pathToWidget + '?action=getMediaList&mediaType=' + mediaType + '&jsoncallback=?', function(data){
			if(data.total_count!=0){
		       var rSeed = ((data.media).length > widgetOpts.mediaLimit)?widgetOpts.mediaLimit : (data.media).length - 1;
		       var randomMediaObj = data.media[(Math.round(rSeed * Math.random()))]; // Get a random media object
		       var flashVars = 'ad_url=&pre_roll=&post_roll=&auto_play=' + widgetOpts.autoPlay;
		           flashVars += '&token=' + randomMediaObj.token;
				   flashVars += '&tracking=&debug=1&dev_url=http://media.vmixcore.com/vmixcore&env=&ref='+location.href;
		       var movie = 'http://media.vmixcore.com/player/'
			       movie += randomMediaObj.token;
				   movie += (mediaType == 'audio') ? '/audio_player.swf' : '/player.swf';
		       var duration = new Object();
				   duration.minutes = Math.floor(randomMediaObj.duration / 60);
				   duration.seconds = ((randomMediaObj.duration % 60) < 10) ? '0' + (randomMediaObj.duration % 60) : (randomMediaObj.duration % 60);
			   var mediaUrl = widgetOpts.siteUrl + widgetOpts.pathToPlayer+'?ID='+randomMediaObj.id+'&GENRES='+widgetOpts.defaultGenre[mediaType];
		       if (mediaType == 'video'){
				  // Build player from random media object
				   $("div[id='videoBox'] .player").empty();
				   var videoPlayerObj = new SWFObject(movie, "vmixVideoPlayer", widgetOpts.playerWidth, widgetOpts.videoPlayerHeight, "8");
				   videoPlayerObj.addParam("quality", "best");
				   videoPlayerObj.addParam("bgcolor", "#FFFFFF");
				   videoPlayerObj.addVariable("auto_play", widgetOpts.autoPlay);
				   videoPlayerObj.addVariable("token", randomMediaObj.token);
				   videoPlayerObj.addVariable("ad_url", "");
				   videoPlayerObj.addVariable("pre_roll", "");
				   videoPlayerObj.addVariable("post_roll", "");
				   videoPlayerObj.addVariable("tracking", "");
				   videoPlayerObj.addVariable("debug", "1");
				   videoPlayerObj.addVariable("dev_url", "http://media.vmixcore.com/vmixcore");
				   videoPlayerObj.addVariable("env", "");
				   videoPlayerObj.addVariable("ref", location.href);
				   videoPlayerObj.write("widgetVideoPlayer");
					   
			   }else if(mediaType == 'audio'){
				   var audioPlayerObj = new SWFObject(movie, "vmixAudioPlayer", widgetOpts.playerWidth, widgetOpts.audioPlayerHeight, "8");
				   audioPlayerObj.addParam("quality", "best");
				   audioPlayerObj.addParam("bgcolor", "#FFFFFF");
				   audioPlayerObj.addVariable("auto_play", widgetOpts.autoPlay);
				   audioPlayerObj.addVariable("token", randomMediaObj.token);
				   audioPlayerObj.addVariable("ad_url", "");
				   audioPlayerObj.addVariable("pre_roll", "");
				   audioPlayerObj.addVariable("post_roll", "");
				   audioPlayerObj.addVariable("tracking", "");
				   audioPlayerObj.addVariable("debug", "1");
				   audioPlayerObj.addVariable("dev_url", "http://media.vmixcore.com/vmixcore");
				   audioPlayerObj.addVariable("env", "");
				   audioPlayerObj.addVariable("ref", location.href);
				   audioPlayerObj.write("widgetAudioPlayer");
				   if (typeof(randomMediaObj.thumbnail[0]) != 'undefined'){
			           $("div[id='audioBox'] .player")
				           .prepend($("<img>")
					                   .attr({
						                      src:randomMediaObj.thumbnail[0].url,
						                      height:widgetOpts.videoPlayerHeight - 25
						                })
					       );
				   }else{
					   //add a stock img here
					   
				   }

               }else{ // for image media
                   if (typeof(randomMediaObj.thumbnail[0]) != 'undefined'){
                       $($("div[id='imageBox'] .player").empty())
				           .append($("<img>")
                                        .attr({
                                               src:randomMediaObj.thumbnail[0].url,
                                               width:'200'
                                        })
					       );
				   }

               } // end if

				   // Build detail from random media object
                   randomMediaObj.description = ((randomMediaObj.description).length > widgetOpts.descLength) ? (randomMediaObj.description).substring(0,widgetOpts.descLength-1)+' . . .' : randomMediaObj.description;
				   $($("div[id='"+mediaType+"Box'] .detail").empty())
				       .append($("<span></span>")
					               .addClass('head')
                                   .append($("<a></a>")
								               .attr('href',mediaUrl)
								               .bind('click',{clickUrl:mediaUrl},launchPlayer)
						                       .text(randomMediaObj.title)
								          )
						      )
					   .append($("<span></span>")
					               .addClass('length')
							   	   .text(' ('+duration.minutes+':'+duration.seconds+')')
						      )
					   .append($("<span></span>")
					               .addClass('description')
								   .text(' - ' + randomMediaObj.description)
						      );

                   // Add footer links
                   var enlargeLink = (mediaType != 'image') ? 'Enlarge this '+mediaType+' clip' : 'Enlarge this image';
                   var moreLink = (mediaType != 'image') ? ' Show more '+mediaType+' clips' : 'Show more '+mediaType+'s';
                   $($("div[id='"+mediaType+"Box'] .footer").empty())
                       .append($("<a></a>")
								    .attr('href',mediaUrl)
								    .bind('click',{clickUrl:mediaUrl},launchPlayer)
						            .text(enlargeLink)
							   )
					   .append(' | ')
                       .append($("<a></a>")
								    .attr('href',widgetOpts.siteUrl+widgetOpts.pathToPlayer+'?GENRES='+widgetOpts.defaultGenre[mediaType])
								    .bind('click',{clickUrl:widgetOpts.siteUrl+widgetOpts.pathToPlayer+'?GENRES='+widgetOpts.defaultGenre[mediaType]})
						            .text(moreLink)
							   )
					   .append(' | ')
                       .append($("<a></a>")
								    .attr('href',widgetOpts.siteUrl+widgetOpts.pathToSubmitForm)
								    .bind('click',{clickUrl:widgetOpts.siteUrl+widgetOpts.pathToSubmitForm},launchPlayer)
						            .text(' Submit your own!')
							   );
							
				   // Build the list of recent media items
                   $.each(data.media, function(i,mediaItem){
				       mediaUrl = widgetOpts.siteUrl + widgetOpts.pathToPlayer+'?ID='+this.id+'&GENRES='+widgetOpts.defaultGenre[mediaType];
				       duration.minutes = Math.floor(this.duration / 60);
				       duration.seconds = ((this.duration % 60) < 10) ? '0' + (this.duration % 60) : (this.duration % 60);

					   if(i == 0) $("div[id='"+mediaType+"Box'] .list").empty();
                       $("div[id='"+mediaType+"Box'] .list")
					       .append($("<li></li>")
					                   .addClass(mediaType+'Link')
					                   .append($("<a></a>")
					                               .attr('href',mediaUrl)
									   			   .bind('click',{clickUrl:mediaUrl},launchPlayer)
								                   .append($("<span></span>")
								                               .addClass('head')
										                       .text(this.title)
										                  )
							                  )
					                   .append($("<span></span>")
					                              .addClass('length')
						                          .append($("<img>")
									                          .addClass('icon')
										                      .attr('src',widgetOpts.siteUrl+widgetOpts.pathToImages+mediaType+'Inactive.gif')
										                 )
									              .append((mediaType!="image") ? ' (' + duration.minutes +':'+duration.seconds +')' : ' (' + (this.date_approved).split(" ")[0] +')')
								              )
						               .append($("<span></span>").addClass('clear'))
						          );
						 if(typeof(this.thumbnail[0])!='undefined'){
							 $("div[id='"+mediaType+"Box'] .list a:last")
							     .prepend($("<img>").addClass('thumb')
											 .attr('src',this.thumbnail[0].url)
								 );
								 
						 }
                       if ( i == (data.media).length - 1 ) $('li.'+mediaType+'Link').wrapAll("<ul>"); 
					   
                   });
			}

              });


		   
        }else if (this == 'pubsys'){ // for pubsys integration

		
		}

    });	
   
    $("#mmWidgetNav a[href='#"+widgetOpts.defaultTab+"']").ajaxSuccess(function(evt, request, settings){
        (typeof(widgetTabData.numSuccess) == 'undefined') ?widgetTabData.numSuccess = 1 : widgetTabData.numSuccess += 1
		if (widgetTabData.numSuccess == 3){
			$(this).click();
			
		}
		
    });

});