From 3b32a168137c8bd383b3faecce91eadd72e564ad Mon Sep 17 00:00:00 2001
From: Naomi Aro <naomiaro@gmail.com>
Date: Mon, 12 Mar 2012 13:25:03 +0100
Subject: [PATCH] CC-3174 : showbuilder

setting a timeout to refresh when the first item on the timeline starts incse there is no "current" item.
---
 .../application/models/ShowBuilder.php        | 13 ++++++++++-
 .../public/js/airtime/showbuilder/builder.js  | 22 ++++++++++++++++---
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/airtime_mvc/application/models/ShowBuilder.php b/airtime_mvc/application/models/ShowBuilder.php
index 355621872..bb87c9e6a 100644
--- a/airtime_mvc/application/models/ShowBuilder.php
+++ b/airtime_mvc/application/models/ShowBuilder.php
@@ -17,6 +17,8 @@ class Application_Model_ShowBuilder {
 
     private $contentDT;
     private $epoch_now;
+    
+    private $hasCurrent;
 
     private $defaultRowArray = array(
         "header" => false,
@@ -51,6 +53,8 @@ class Application_Model_ShowBuilder {
         $this->user = Application_Model_User::GetCurrentUser();
         $this->opts = $p_opts;
         $this->epoch_now = time();
+        
+        $this->hasCurrent = false;
     }
 
     //check to see if this row should be editable.
@@ -98,6 +102,8 @@ class Application_Model_ShowBuilder {
             $row["current"] = true;
             //how many seconds the view should wait to redraw itself.
             $row["refresh"] = $p_epochItemEnd - $this->epoch_now;
+            
+            $this->hasCurrent = true;
         }
     }
 
@@ -115,6 +121,7 @@ class Application_Model_ShowBuilder {
 
         $row["header"] = true;
         $row["starts"] = $showStartDT->format("Y-m-d H:i");
+        $row["timeUntil"] = intval($showStartDT->format("U")) - $this->epoch_now;
         $row["ends"] = $showEndDT->format("Y-m-d H:i");
         $row["duration"] = $showEndDT->format("U") - $showStartDT->format("U");
         $row["title"] = $p_item["show_name"];
@@ -266,7 +273,7 @@ class Application_Model_ShowBuilder {
                     //pass in the previous row as it's the last row for the previous show.
                     $display_items[] = $this->makeFooterRow($scheduled_items[$i-1]);
                 }
-
+                
                 $display_items[] = $this->makeHeaderRow($item);
 
                 $current_id = $item["si_id"];
@@ -284,6 +291,10 @@ class Application_Model_ShowBuilder {
         if (count($scheduled_items) > 0) {
             $display_items[] = $this->makeFooterRow($scheduled_items[count($scheduled_items)-1]);
         }
+        
+        if (!$this->hasCurrent) {
+        	
+        }
 
         return $display_items;
     }
diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js
index 21f0f5350..6a54357ec 100644
--- a/airtime_mvc/public/js/airtime/showbuilder/builder.js
+++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js
@@ -14,6 +14,8 @@ var AIRTIME = (function(AIRTIME){
 		}
 	}
 	
+	mod.timeout = undefined;
+	
 	mod.resetTimestamp = function() {
 		var timestamp = $("#sb_timestamp");
 		//reset timestamp value since input values could have changed.
@@ -301,7 +303,11 @@ var AIRTIME = (function(AIRTIME){
 					markerDiv,
 					td,
 					$lib = $("#library_content"),
-					tr;
+					tr,
+					oTable = $('#show_builder_table').dataTable(),
+					aData;
+				
+				clearTimeout(AIRTIME.showbuilder.timeout);
 				
 				//only create the cursor arrows if the library is on the page.
 				if ($lib.length > 0 && $lib.filter(":visible").length > 0) {
@@ -329,15 +335,25 @@ var AIRTIME = (function(AIRTIME){
 				
 				//if the now playing song is visible set a timeout to redraw the table at the start of the next song.
 				tr = tableDiv.find("tr.sb-now-playing");
+				
 				if (tr.length > 0) {
-					var oTable = $('#show_builder_table').dataTable(),
-						aData = tr.data("aData");
+					aData = tr.data("aData");
 					
 					setTimeout(function(){
 						AIRTIME.showbuilder.resetTimestamp();
 						oTable.fnDraw();
 					}, aData.refresh * 1000); //need refresh in milliseconds
 				}
+				//current song is not set, set a timeout to refresh when the first item on the timeline starts.
+				else {
+					tr = tableDiv.find("tbody tr:first");
+					aData = tr.data("aData");
+					
+					AIRTIME.showbuilder.timeout = setTimeout(function(){
+						AIRTIME.showbuilder.resetTimestamp();
+						oTable.fnDraw();
+					}, aData.timeUntil * 1000); //need refresh in milliseconds
+				}
 		    },
 			"fnHeaderCallback": function(nHead) {
 				$(nHead).find("input[type=checkbox]").attr("checked", false);