/*++ CARNIVAL PARAMETERS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


var $CHeader, $CBody;
var $_nowDate; //new Date();
var $_currentDate; //new Date();
var $_maxDate;
var $_inProgress;
var _IMG = '&nbsp;<img src="/cms/Promotions/common/images/backgrounds/more11.gif" width="11" height="11" alt="+" style="vertical-align:baseline;" />';

function grid_init()
{
	$_nowDate = new Date(_PARAMS.FromDateRange); //new Date();
	$_currentDate = new Date(_PARAMS.FromDateRange); //new Date();
	$_inProgress = false;
	$_maxDate = new Date(_PARAMS.ToDateRange);

	$CHeader = $('#cruiser-calendar thead');
	$CBody = $('#cruiser-calendar tbody');	
	$handler_MonthsLoading();
	$CHeader.find('a.button-previous').bind( 'click', $handler_PreviousClick );
	$CHeader.find('a.button-next').bind( 'click', $handler_NextClick );
	$handler_GridLoad();
}

/*++ CALENDAR HANDLERS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

function $handler_PreviousClick()
{
	if( !$_inProgress )
	{
		$_inProgress=true;
		var $_month = $_currentDate.getMonth() - 6;
		$_currentDate.setMonth( $_month );
		if( $_currentDate<$_nowDate )
		{
			$_currentDate = new Date();
			$_inProgress=false;
		}
		else
		{
			$handler_MonthsHtml(-528);
		}
		if( $_currentDate.getMonth()-3==$_nowDate.getMonth() && $_currentDate.getFullYear()==$_nowDate.getFullYear() )
		{
			 $('#cruiser-calendar a.button-previous').addClass('inactive');	
		}
	}
}

function $handler_NextClick()
{
	if( !$_inProgress )
	{
		if( $_currentDate > $_maxDate ){
			return;
		}else{
			$_inProgress=true;
			$handler_MonthsHtml(528);
			$('#cruiser-calendar a.button-previous').removeClass('inactive');
		}
	}
}

function $handler_MonthsHtml(_left)
{
	$CBody.find('td.months-info-body').html('<div class="month-loading first-child"/><div class="month-loading"/><div class="month-loading last-child"/>');
	var _html = "<div class='months-box' style='left:"+_left.toString()+"px;'>"
	for(i=0;i<3;i++)
	{
		var tmpDate = getFormatMonth( $_currentDate );
		_html += '<div class="month"><span>'+tmpDate+'</span></div>';
		$_currentDate.setMonth( $_currentDate.getMonth()+1 );
	}
	_html += '</div>';
	
	$('div.months div.months-body').append(_html);
	
	$('#cruiser-calendar table tbody td.month-info, #cruiser-calendar table tbody td.month-noinfo')
		.addClass('month-loading')
		.html('');
	$('div.months div.months-box:first-child').animate({left:(_left*-1)},1000, function(){ $(this).remove(); });
	$('div.months div.months-box:last-child').animate({left:-29},1000, function(){ $handler_DataLoad();  });
	
	 if( $_currentDate > $_maxDate ){
		$('#cruiser-calendar a.button-next').addClass('inactive');	
	 }else{
		 $('#cruiser-calendar a.button-next').removeClass('inactive');	
	 }
}

function $handler_MonthsLoading()
{
	$('#cruiser-calendar thead div.month span').addClass('loading')
		.each(function()
			 {
				 $(this).text('')
						.removeClass('loading')
						.text( getFormatMonth( $_currentDate ) );
				 $_currentDate.setMonth( $_currentDate.getMonth()+1 );
			 });
	if( $_currentDate >= $_maxDate ){
	//if( $_currentDate.getMonth() >= $_maxDate.getMonth() && $_currentDate.getFullYear() >= $_maxDate.getFullYear() ){
		$('#cruiser-calendar a.button-next').addClass('inactive');	
	 }else{
		 $('#cruiser-calendar a.button-next').removeClass('inactive');	
	 }
}

function $handler_GridLoad()
{
	var _HTML = '';
	if( _PARAMS.Duration.days ){
		_PARAMS.Duration = Array(_PARAMS.Duration);
	}
	for( var p1 in _PARAMS.Duration ){
		var _DurationNode = _PARAMS.Duration[p1];
		var _Ports = null;
		if( !(_DurationNode.Port) ){
			_Ports = _PORTS_DEFAULT.Port;
		}else if( _DurationNode.Port.length>0){
			_Ports = _DurationNode.Port;
		}else if( _DurationNode.Port.code ){
			_Ports = Array( _DurationNode.Port );
		}
		_HTML += '<tr class="row-sailing" port="'+_Ports[0].code+'" duration="'+_DurationNode.days+'">';
		_HTML += '<td class="sailing">';
		_HTML += '<strong>'+_DurationNode.days+' Days</strong><span>from</span><div style="position: relative;z-index:1000;">';
		var _more='';
		if( _Ports.length>1){
			_more = _IMG;
		}
		_HTML += '	<p> <a class="port-from nobg" href="#" onclick="return false;">'+_Ports[0].description+_more+'</a></p>';
		if( _Ports.length>1)
		{
			_HTML += '	<div class="port-selector" style="width:{width}px">';
			var _width = 165;
			_HTML += '		<ul class="clearfix">';
			for( var p2 in _Ports )
			{
				if( ((p2) % 7) == 0 && p2!=0 ){
					_HTML += '		</ul><ul class="clearfix">';
					_width += 165;
				}
				var _Port = _Ports[p2];
				_HTML += '			<li><a href="#" onclick="return false;" sailing_port="'+_Port.code+'" sailing_description="'+_Port.description+'">'+_Port.description+'</a></li>';
			}
			_HTML = _HTML.replace('{width}',_width);
			_HTML += '		</ul>';
			_HTML += '	</div>';
			_HTML += '</div>';
		}
		_HTML += '</td>';
		_HTML += '<td class="months-info-body"><div class="month-noinfo first-child" /><div class="month-noinfo" /><div class="month-noinfo last-child" /></td>';
		_HTML += '</tr>';
	}
	$CBody.html(_HTML);
    $CBody.find('>tr:odd').addClass('odd');
	$CBody.find('>tr')
			.each(function(){
					$handler_SelectorEvent(this);
			   });
    $handler_DataLoad();
}

function $handler_SelectorEvent(_rowSelector)
{
	_rowSelector = $(_rowSelector);
	$_portSelector = _rowSelector.find('div.port-selector');
	var _parent = $_portSelector.parents('div');
	_rowSelector.find('a.port-from')
		.click(function(){
				_parent.css('z-index','2000');
				var _pselector = $(this).parents('tr.row-sailing').find('div.port-selector');
				_pselector.css('display','block');
				var _code = _rowSelector.attr('port');
				_pselector.find('a').removeClass('selected');
				_pselector.find('a[sailing_port='+_code+']').addClass('selected');
			  });
	$_portSelector
		.mouseover(function(){	$(this).css('display','block'); _parent.css('z-index','2000'); } )
		.mouseout(function(){	$(this).css('display','none'); _parent.css('z-index','1000'); 	} );
	$_portSelector.find('a')
		.click(function(){
				var _row = $(this).parents('tr.row-sailing');
				var _selector = _row.find('div.port-selector');
				var $_sPort = $(this).attr('sailing_port');
				var $_sDescription = $(this).attr('sailing_description');
				_selector.css('display','none');
				_row.attr( 'port', $_sPort )
					.find('a.port-from').html( $_sDescription+_IMG );
				$handler_RowLoad(_row);
			});
}
function $handler_DataLoad()
{
	$CBody.find('>tr').each(function(){
								$handler_RowLoad(this);
							} );
}
function $handler_RowLoad(_row)
{
	_row = $(_row);
	var _rowBody = _row.find('td.months-info-body');
	var _port = _row.attr('port');
	var _duration = _row.attr('duration');
	
    //Define de Begin and End of the Month
    var _year = $_currentDate.getFullYear();
    var $_cDateInit = new Date( _year, $_currentDate.getMonth()-3,1);
    var $_cDateEnd  = new Date( _year, $_currentDate.getMonth()+1,0);
	
	if( $_maxDate < $_cDateEnd ){
		$_cDateEnd=new Date( _year, $_maxDate.getMonth()+2,0);
	}
    
    var x = new CclPromoRequest();
	x.AddPortCode(_port);
	x.FromSailDate = $_cDateInit;
	x.ToSailDate = $_cDateEnd;
	x.AddDurationDay(_duration);
	x.PrimaryFareCode = _PARAMS.PrimaryFare.Code;
    x.CompareFareCode = _PARAMS.CompareFare.Code;
	x.DefaultFareCode = _PARAMS.DefaultFare.Code;
	x.getPromo(function(show){  //Loading Event
	        _rowBody.html('<div class="month-loading first-child"/><div class="month-loading"/><div class="month-loading last-child"/>');
	    },function(result){ //GetResult Event
            var output = ' ';
			var _tmp = $_cDateInit;
			for(var i=0; i<3; i++){
				output += $handler_RowRender( result, _tmp.getMonth(), _tmp.getFullYear() );
				_tmp.setMonth( _tmp.getMonth()+1);
			}
            _rowBody.html( output );
            _rowBody.find('>div:last-child')
		        .addClass('last-child')
		        .end()
		        .find('>div:first-child')
		        .addClass('first-child');
	        _rowBody.find('div.month-info')
		        .mouseover(function(){
						var _this = $(this);
				        $CBody.find('div.month-tooltip')
					        .css('display','none');
				        $CBody.css('z-index','50')
					        .find('div.month-info')
					        .css('z-index','50');
				        _this.css('z-index','55')
					        .find('div.month-tooltip')
					        .css({ 'display':'block', 'z-index':'55'} )
					        .mouseover(function(){
								        $(this).css('display','block');
							        })
					        .mouseout(function(){
								        $(this).css('display','none');
							        })
			        });
            $_inProgress=false;
	    },function(error){  //Error Event
	        _rowBody.html('<div class="month-noinfo">not available</div><div class="month-noinfo">not available</div><div class="month-noinfo">not available</div>');
	        $_inProgress=false;
	    });
}
function $handler_RowRender( result, month, year )
{
	var output = '';
	for(var pos=0; pos<result.PromoSummary[0].Sailings.length; pos++)
	{
		var summary =  result.PromoSummary[0];
		var sailing = summary.Sailings[pos];
		var _price = parseInt(sailing.PromoPrice.RateAmount);
		var _regular = parseInt(sailing.ComparePrice.RateAmount);
		var _discount = _regular - _price;
		if( _discount <0 ){
			_discount = 0;
		}
		var _departureDate = sailing.DepartureDate;
		_departureDate = _departureDate.match(/Date\((.*?)\)/)[1];
		_departureDate = new Date(parseInt(_departureDate));
		if( _departureDate.getFullYear()==year && _departureDate.getMonth()==month )
		{
			var _iMonth = parseInt(_departureDate.getMonth())+1;
			var _departureDateString = _iMonth+'/'+_departureDate.getDate()+'/'+_departureDate.getFullYear();
			var _href = 'http://www.carnival.com/Itinerary.aspx'+
						'?embkCode='+summary.EmbarkationPortCode+
						'&itinCode='+sailing.ItineraryId+
						'&durDays='+sailing.Duration+
						'&shipCode='+sailing.ShipCode+
						'&subRegionCode='+sailing.SubRegionCode+
						'&rateCode='+sailing.PromoPrice.RateCode+
						'&sailingID='+sailing.SailingId+
						'&sailDate='+_departureDateString;
			output += '<div class="month-info">';
			if( _PARAMS.CompareFare.Display=='On' ){
				output += '<p class="regular">Regularly <span class="amount">$'+_regular+'.00</span></p>';
			}
			output += '<p class="price">'+_PARAMS.PriceCaption+' <span class="amount">$'+_price+'.00</span></p>';
			if( _PARAMS.PrimaryFare.UseDescription=='Y' ){
				output += '<p class="info">'+_PARAMS.PrimaryFare.Description+'</p>';
			}
			//var _onclick = '';
			//if($.browser.msie){
				var _onclick=' onclick="document.location=\''+_href+'\';"';
			//}
			output += '<div class="month-tooltip" style="display: none;"'+_onclick+'><a href="'+_href+'"><table cellspacing="0" cellpadding="0" border="0"><tbody>';
			output += '<tr><td colspan="2"><p class="info"><strong>'+sailing.Duration+' days</strong> from '+sailing.DeparturePortDescription+' on '+_departureDateString+'</p></td></tr>';
			if( _PARAMS.CompareFare.Display=='On' ){
				output += '<tr><td><p class="regular">Fun Select</p></td><td><p class="regular"><span class="amount">$'+_regular+'.00</span></p></td></tr>';
			}
			output += '<tr><td><p class="price">'+_PARAMS.PriceCaption+'</p></td><td><p class="price"><span class="amount">$'+_price+'.00</span></p></td></tr>';
			if( _PARAMS.CompareFare.Display=='On' ){
				output += '<tr><td><p class="saving">Your Save</p></td><td><p class="saving">$'+_discount+'</p></td></tr>';
			}
			if( _PARAMS.PrimaryFare.UseDescription=='Y' ){
				output += '<tr><td colspan="2"><p class="info">'+_PARAMS.PrimaryFare.Description+'</p></td></tr>';
			}
			output += '<tr><td/><td class="detail-btn"><img src="/cms/Promotions/common/images/buttons/details.gif" alt="Details" title=""/></td></tr>';
			output += '</tbody></table></a></div></div>';
			return output;
		}
	}
	return '<div class="month-noinfo">not available</div>';
}
/*++ GENERAL METHODS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

function getParamMonth( p_Date, $i )
{
	var $_date = new Date(p_Date.getFullYear(),p_Date.getMonth(),1);
	$_date.setMonth( $_date.getMonth() - $i );
	var $_year = $_date.getFullYear();
	var $_month = $_date.getMonth();
	if( $_month.toString().length==1)
	{
		$_month='0'+$_month;
	}
	if( $.browser.msie )
		return "'"+$_year+"-"+$_month+"'";
	else
		return $_year+"-"+$_month;
}

function getFormatMonth( $_date )
{
	var $_result = '';
	switch( $_date.getMonth() )
	{
		case 0:	$_result = 'Jan'; break;
		case 1:	$_result = 'Feb'; break;
		case 2:	$_result = 'Mar'; break;
		case 3:	$_result = 'Apr'; break;
		case 4:	$_result = 'May'; break;
		case 5:	$_result = 'Jun'; break;
		case 6:	$_result = 'Jul'; break;
		case 7:	$_result = 'Aug'; break;
		case 8:	$_result = 'Sep'; break;
		case 9:	$_result = 'Oct'; break;
		case 10:$_result = 'Nov'; break;
		case 11:$_result = 'Dec'; break;
	}
	return $_result+' '+$_date.getFullYear();
}