var zlContainerId = new Array();
var zlPagingElementsId = new Array();
var zlListOffset = new Array();
var zlScreenName = new Array();
var zlListSize = new Array();
var zlImageSize = new Array();
var zlState = new Array();

var Zaplive = {
    Wording : {
      Previous            : "&laquo; Previous",
      Next                : "Next &raquo;"
      },
    STATE_WAITING         : 'waiting',
    STATE_READY           : 'ready',
    CSS_CLASS_DEACTIVATED : "zl-paging-deactivated",
    LIVE_RECORDED         : "LiveRecorded",
    SCHEDULED             : "Scheduled",
    HOTSPOTS              : "Hotspots",
    
    Config : {
      Language     : 'en',
      LiveRecorded : {
        ScreenName   : '',
        ImageSize    : 'S',
        ItemsPerPage : 10
        },
      Scheduled : {
        ScreenName   : '',
        ImageSize    : 'S',
        ItemsPerPage : 10
        },
      Hotspots : {
        ScreenName   : '',
        ImageSize    : 'S',
        ItemsPerPage : 10
        }
      },
    
    Player : {
      play : function(streamIdParam, startParam, hotspotIdParam) {
        var player = flowplayer();
        player.setClip(
        {
          "url"      : streamIdParam,
          "zlStart"  : startParam,
          "provider" : "zapliveRtmp",
          "zlLocale" : Zaplive.Config.Language
        });
        player.play();
        return false;
      }
    },
    
    Util : {
      getParameter : function ( requestParameterName, defaultStreamId ) {
         var queryString = window.top.location.search.substring(1);
         var parameterName = requestParameterName + "=";
         if ( queryString.length > 0 ) {
            begin = queryString.indexOf ( parameterName );
            if ( begin != -1 ) {
              begin += parameterName.length;
              end = queryString.indexOf ( "&" , begin );
              if ( end == -1 ) {
                end = queryString.length
              }
              return unescape ( queryString.substring ( begin, end ) );
            }
         }
         return defaultStreamId;
      }
    },
    
    renderLiveRecordedBroadcasts : function() {
      zlListOffset[Zaplive.LIVE_RECORDED] = 0;
      zlScreenName[Zaplive.LIVE_RECORDED] = Zaplive.Config.LiveRecorded.ScreenName;
      zlListSize[Zaplive.LIVE_RECORDED]   = Zaplive.Config.LiveRecorded.ItemsPerPage;
      zlImageSize[Zaplive.LIVE_RECORDED]  = Zaplive.Config.LiveRecorded.ImageSize;
      Zaplive.Internal.createContainer(Zaplive.LIVE_RECORDED);
      Zaplive.Internal.createPagingElements(Zaplive.LIVE_RECORDED);
      Zaplive.Internal.init(Zaplive.LIVE_RECORDED);
      Zaplive.Internal.update(Zaplive.LIVE_RECORDED);
    },
    renderScheduledBroadcasts : function() {
      zlListOffset[Zaplive.SCHEDULED] = 0;
      zlScreenName[Zaplive.SCHEDULED] = Zaplive.Config.Scheduled.ScreenName;     
      zlListSize[Zaplive.SCHEDULED]   = Zaplive.Config.Scheduled.ItemsPerPage;   
      zlImageSize[Zaplive.SCHEDULED]  = Zaplive.Config.Scheduled.ImageSize;      
      Zaplive.Internal.createContainer(Zaplive.SCHEDULED);
      Zaplive.Internal.createPagingElements(Zaplive.SCHEDULED);
      Zaplive.Internal.init(Zaplive.SCHEDULED);
      Zaplive.Internal.update(Zaplive.SCHEDULED);
    },
    renderHotspots : function() {
      zlListOffset[Zaplive.HOTSPOTS] = 0;
      zlScreenName[Zaplive.HOTSPOTS] = Zaplive.Config.Hotspots.ScreenName;     
      zlListSize[Zaplive.HOTSPOTS]   = Zaplive.Config.Hotspots.ItemsPerPage;   
      zlImageSize[Zaplive.HOTSPOTS]  = Zaplive.Config.Hotspots.ImageSize;      
      Zaplive.Internal.createContainer(Zaplive.HOTSPOTS);
      Zaplive.Internal.createPagingElements(Zaplive.HOTSPOTS);
      Zaplive.Internal.init(Zaplive.HOTSPOTS);
      Zaplive.Internal.update(Zaplive.HOTSPOTS);
    },
    
    Internal : {
    	
	    createContainer : function(id) {
		  zlContainerId[id] = id + ("" + Math.random()).replace(/\./,"");
		  document.write("<div id='"+zlContainerId[id]+"'></div>");
		},
		
		createPagingElements : function(id) {
		    zlPagingElementsId[id] = id + ("" + Math.random()).replace(/\./,"");
		    document.write("<div id='"+zlPagingElementsId[id]+"'></div>");
		    
		    jQuery("#"+zlPagingElementsId[id]).html(
		      "<span class='zl-paging zl-previous"+id+"'><a href='#'>"+Zaplive.Wording.Previous+"</a></span>" + 
		      "<span class='zl-paging zl-next"+id+"'><a href='#'>"+Zaplive.Wording.Next+"</a></span>");
		},

    	update : function(id) {
			var serverUrl = "http://cdn06.zaplive.tv/zaplive-rest/widget/list/{type}/{screenname}/{language}/{imagesize}/{startWithNthBroadcastStr}/{numberOfBroadcastsStr}";
			  
			zlState[id] = Zaplive.STATE_WAITING;
			
			if (id == Zaplive.LIVE_RECORDED) {
				serverUrl = serverUrl.replace(/\{type\}/,"recorded");
			} else if (id == Zaplive.SCHEDULED) {
				serverUrl = serverUrl.replace(/\{type\}/,"scheduled");
			} else if (id == Zaplive.HOTSPOTS) {
				serverUrl = serverUrl.replace(/\{type\}/,"hotspot");
			}
			  
			serverUrl = serverUrl.replace(/\{screenname\}/, zlScreenName[id]);
			serverUrl = serverUrl.replace(/\{language\}/, Zaplive.Config.Language);
			serverUrl = serverUrl.replace(/\{imagesize\}/, zlImageSize[id]);
			serverUrl = serverUrl.replace(/\{startWithNthBroadcastStr\}/, zlListOffset[id]);
			serverUrl = serverUrl.replace(/\{numberOfBroadcastsStr\}/, zlListSize[id]);
			  
			jQuery.ajax({
				dataType: 'jsonp',
				jsonp: 'hash',
				url: serverUrl,
				complete: function(result) {
					zlState[id] = Zaplive.STATE_READY;
				},
				error: function() {
				},
				success: function (result) {
					// set data
					jQuery("#"+zlContainerId[id]).html(result.data);
					
					// update previous link
					if (zlListOffset[id] - zlListSize[id] >= 0) {
						jQuery(".zl-previous"+id).removeClass(Zaplive.CSS_CLASS_DEACTIVATED);
					} else {
						jQuery(".zl-previous"+id).addClass(Zaplive.CSS_CLASS_DEACTIVATED);
					}
					
					// update next link
					if (zlListOffset[id] + zlListSize[id] <= result.total) {
						jQuery(".zl-next"+id).removeClass(Zaplive.CSS_CLASS_DEACTIVATED);
					} else {
						jQuery(".zl-next"+id).addClass(Zaplive.CSS_CLASS_DEACTIVATED);
					}
				}
			});
		},

    	isWaitingForResponse : function(id) {
			return (zlState[id] == Zaplive.STATE_WAITING);
    	},

    	init : function(id) {
    	  // PREVIOUS
    	  jQuery(".zl-previous"+id).click(function() {
    	    if (!jQuery(".zl-previous"+id).hasClass(Zaplive.CSS_CLASS_DEACTIVATED) 
    	    		&& !Zaplive.Internal.isWaitingForResponse(id)) {
    	      if (zlListOffset[id] - zlListSize[id] >= 0) {
    	        zlListOffset[id] -= zlListSize[id];
    	      } else {
    	        zlListOffset[id] = 0;
    	      }
    	      Zaplive.Internal.update(id);
    	    }
    	  });
    	  
    	  // NEXT
    	  jQuery(".zl-next"+id).click(function() {
    	    if (!jQuery(".zl-next"+id).hasClass(Zaplive.CSS_CLASS_DEACTIVATED)
    	    		&& !Zaplive.Internal.isWaitingForResponse(id)) {
    	    	zlListOffset[id] += zlListSize[id];
    	    	Zaplive.Internal.update(id);
    	    }
    	  });
    	}   
    }
}

jQuery(document).ready(function(){
   
});
