


(function(jQuery) {

    var LEFTARROWREF = "scrollLeft";
    var RIGHTARROWREF = "scrollRight";
    var DISABLEDREF = "disabled";
    //var DISABLEDREF = "endofday";
	var EPGREF = ".EPG";
    var DATESCROLLBUTTONSREF = ".EPGDates .scroller";
    var DATESCROLLER = ".dateScroller";
    var PROGRAMSREF = ".EPGPrograms";
    var PREVIOUSWEEKSAVAILABLE = 4;
    var DATESSCROLLACTIONWIDTH = "364";
    var PROGRAMSCROLLBUTTONSREF = PROGRAMSREF+" .scroller";
    var PROGRAMSCROLLERREF = ".EPGMainView";
    var EPGTIMESREF = ".EPGTimes";
    var EPGTDATESREF = "EPGDates";
    var LOADERREF = PROGRAMSREF+" .loading";
    var PROGRAMSCROLLWIDTH = "255";
    var LISTVIEWTOGGLEREF = ".toggleViews";
    var LISTVIEWCLASS = "EPGList";
    var TEASERVIEWCLASS = "EPGTeaser";
    var SELECTEDTIMEREF = "selected";
    var DESELECTEDTIMEREF = "deselected";
	
	
   
   jQuery.fn.newHorizontalScroller = function(scrollContainer, sScrollIncrement, iAnimationSpeed) {
      
       var scrollParameters = {
                           scrollContainer: scrollContainer,
                           scrollButtons: this,
                           sScrollIncrement: sScrollIncrement,
                           iAnimationSpeed : iAnimationSpeed
                        };
       $(this).bind("click", scrollParameters, scrollClick).bind("scroller.checkScrollButtonState", scrollParameters, checkScrollButtonState);
   };
    
    var scrollClick = function(event) {
		event.preventDefault();
		var scrollParameters = event.data;
        var iAnimationSpeed = scrollParameters.iAnimationSpeed;
        var sScrollDirectionAmount;
        var joScrollerContainer = $(scrollParameters.scrollContainer);
        var iCurrentScrollPos = joScrollerContainer.scrollLeft();
        var newScrollPos = 0;
		if(!$(this).hasClass("disabled")){
			if($(this).parent().hasClass(EPGTDATESREF)){
					$(".EPGDates .scrollLeft").addClass(DISABLEDREF);
					$(".EPGDates .scrollRight").addClass(DISABLEDREF);
			}
			if($(this).hasClass(LEFTARROWREF)) {
				if(iCurrentScrollPos===0) {
					
					var iCurrentScrollPosition = $(DATESCROLLER).scrollLeft();
					if(!(iCurrentScrollPosition===0 &&  $(DATESCROLLER).children("ul").eq(0).children("li").eq(0).hasClass("highlighted"))){
						$.createQueueCallback = function(jElm, fn, type){
							type = type ||
								'fx';
							return function(){
								var that = this,
									args = arguments;
						 
								jElm = $(jElm);
								jElm.queue(type, function(){
									fn.apply(that, args);
									jElm.dequeue(type);
								});
							};
						};
					
					
						gestern_li = $(".highlighted").eq(0).prev();
						gestern =  $(".highlighted").eq(0).prev().children().eq(0).attr("href");
						var live = $(PROGRAMSCROLLERREF).css("opacity", 0.5);
						$(LOADERREF).show();
						$.ajax({
							url: gestern,
							success: $.createQueueCallback(live, function(data){
								live.html(data).css("opacity", 1);
								var iPosItem = $("#teaserItemLast");
								posSelectedProgramTeaserView(iPosItem, 0);
								resizeProgramsHolder();
								$(".selected").removeClass("selected").addClass("deselected");
								$(".highlighted").removeClass("highlighted");
								gestern_li.addClass("highlighted");
								$("#Nacht").addClass("selected");
								hideProgramLoader();
								//scrollDayToCenter();
								//timesChange_DayDefault();
							}),
							error: function(){
								//immer errors handeln
							}
						});
						return false;
					}
					
					
					 
				}
				else {
					newScrollPos = (Math.round(iCurrentScrollPos/scrollParameters.sScrollIncrement)*scrollParameters.sScrollIncrement)-Number(scrollParameters.sScrollIncrement);
					/*if($(this).parent().hasClass(EPGTDATESREF)){//alert("huhu");
					//alert($(this).attr("class"));
						//scrollParameters.scrollButtons.trigger("scroller.checkScrollButtonState", [joScrollerContainer]);
						checkScrollButtonState(event,joScrollerContainer, $(this));
					}*/
				}
			} else {
				
				if(iCurrentScrollPos===(joScrollerContainer[0].scrollWidth - joScrollerContainer.innerWidth())) {
					
					var iValueToDisableOn = $(DATESCROLLER)[0].scrollWidth - $(DATESCROLLER).innerWidth();
					var iCurrentScrollPosition = $(DATESCROLLER).scrollLeft();
					//alert($(DATESCROLLER).children("ul").eq(0).children("li:last").hasClass("highlighted"))
					if(!(iCurrentScrollPosition===iValueToDisableOn &&  $(DATESCROLLER).children("ul").eq(0).children("li:last").hasClass("highlighted"))){
						$.createQueueCallback = function(jElm, fn, type){
							type = type ||
								'fx';
							return function(){
								var that = this,
									args = arguments;
						 
								jElm = $(jElm);
								jElm.queue(type, function(){
									fn.apply(that, args);
									jElm.dequeue(type);
								});
							};
						};
						
						
						morgen_li =  $(".highlighted").eq(0).next();
						morgen = $(".highlighted").eq(0).next().children().eq(0).attr("href");
							var live = $(PROGRAMSCROLLERREF).css("opacity", 0.5);
							$(LOADERREF).show();
							$.ajax({
								url: morgen,
								success: $.createQueueCallback(live, function(data){
									live.html(data).css("opacity", 1);
									var iPosItem = $("#teaserItem1");
									posSelectedProgramTeaserView(iPosItem, 0);
									resizeProgramsHolder();
									$(".selected").removeClass("selected").addClass("deselected");
									$(".highlighted").removeClass("highlighted");
									morgen_li.addClass("highlighted");
									$("#Vormittag").addClass("selected");
									hideProgramLoader();
									//scrollDayToCenter();
									//timesChange_DayDefault();
								}),
								error: function(){
									//immer errors handeln
								}
						});
						return false;
					}
				}
				else {
					newScrollPos = (Math.round(iCurrentScrollPos/scrollParameters.sScrollIncrement)*scrollParameters.sScrollIncrement)+Number(scrollParameters.sScrollIncrement);
					
				}
			}
			
			joScrollerContainer.stop().animate({
				scrollLeft: newScrollPos
			}, iAnimationSpeed, null, function() {
				changeCurrentTimeController(null);
				//scrollParameters.scrollButtons.trigger("scroller.checkScrollButtonState", [joScrollerContainer]);
				if($(this).parent().hasClass(EPGTDATESREF)){
					//alert($(this).attr("class"));
						//scrollParameters.scrollButtons.trigger("scroller.checkScrollButtonState", [joScrollerContainer]);
						checkScrollButtonState(event,joScrollerContainer, $(this));
					}
			});
		}
        return false;
    };
    
    var checkScrollButtonState = function(event, scrollContainer, buttn) {
        var iCurrentScrollPosition = scrollContainer.scrollLeft();
		var iValueToDisableOn = scrollContainer[0].scrollWidth - scrollContainer.innerWidth();
        if(buttn.hasClass(LEFTARROWREF)) {
            iValueToDisableOn = 0;
			
        }
		//alert(iValueToDisableOn + " " + iCurrentScrollPosition + " " + buttn.attr("class") + " " + scrollContainer[0].scrollWidth +" "+ scrollContainer.innerWidth());
        //alert(scrollContainer.attr("class"));
        /*if(iCurrentScrollPosition === iValueToDisableOn) {
            buttn.addClass(DISABLEDREF);
        } else {
            buttn.removeClass(DISABLEDREF);
        }*/
		
		if(iCurrentScrollPosition===0){
			$(".EPGDates .scrollLeft").addClass(DISABLEDREF);
		}else{
			$(".EPGDates .scrollLeft").removeClass(DISABLEDREF);
		}
		
		if(iValueToDisableOn === iCurrentScrollPosition){
			$(".EPGDates .scrollRight").addClass(DISABLEDREF);
		}
		else{
			$(".EPGDates .scrollRight").removeClass(DISABLEDREF);
		}
    };
	
	
	
	
})(jQuery);

 
