﻿/// <reference path="~/jquery-1.3.2-vsdoc.js />
/// this method would be call on load 
/// author::alok sharma

var rdoListDays;
var rdoListSeasons;
var rdoAge;
var rdoValue;
var _lblErrorMessage = "";
var _hdnSeasonStartDate = "";

$(function() {

    //For opening the more info dialog box. 
    moreInfoModalOpen(); 
	// For edit ticket case, query string has the following syntax -- Search=startdate,SKU,GUID,days
	rdoListDays = $('[id$=divNoofDays] input:radio');
	rdoListSeasons = $('.seasonListing input:radio');
	rdoAge = $("[id=byAge]:eq(0)");
	rdoValue = $("[id=byValue]:eq(0)");
    _hdnSeasonStartDate = $("[id$=hdnSeasonStartDate]");
    _lblErrorMessage = $("[id$=_lblErrorMessage]");
// Remove Remove all link in page Load
   $(".linkClear").attr("style"," color: #666; cursor: text; text-decoration: none");;
    var startdate;
    var searchCriteria;
	if( $("[id$='hdnStartDate']").length > 0 && $.trim( $("[id$='hdnStartDate']").eq(0).val() ).length > 0 ) {
		startdate = $("[id$='hdnStartDate']").eq(0).val();
		//$("[id$='hdnStartDate']").eq(0).val("");
	} else {
        startdate = getDefaultDate();
    }

	startdate = createDateObj(startdate);
	
	var minDate = createDateObj( getDefaultDate() );
	$("#startDatePicker").datepicker("option", "minDate", minDate);
	$("#startDatePicker").datepicker("setDate", startdate);
	$("#startDatePicker").datepicker("option", "onSelect", function(dateText, inst){
		onDateChange(dateText, true, "Please wait a moment while we search for your results");
		return false;
	});
	$("#startDatePicker").bind("change", function(){
		onDateChange(this.value, true, "Please wait a moment while we search for your results");
	});
	
    if ($("#sliderContainer").length > 0) {
        $("#sliderContainer").slider({
            animate: true,
            range: true,
            min: 1,
            max: 10,
            step: 1,
            values: [1, 10],
            change: function(event, ui) {
                ticketFilter(ui.values[0], ui.values[1]);
            }
        });
    }

    $('table.ageLiftTicket tbody tr:odd').addClass('alternateRow');
	
    initDragDrop();

    attachSaveToTripModal();
    
    initSeasonListing();
	initDayListing();
	onDateChange( $("#startDatePicker").val(), false, "Please wait a moment while we search for your results" ); // To Explicitly Set the Radio buttons according to datepicker, and avoid AJAX call
	
    rdoAge.unbind("click").bind("click", function() {
	    CheckByAge();
		getData("ByAge", "Please wait a moment while we search for your results");
	})
    rdoValue.unbind("click").bind("click", function() {
	    CheckByValue();
		getData("ByValue", "Please wait a moment while we search for your results");
	})
	// To conditionally show/hide filter components on page load
	if ( rdoAge.filter(":checked").length > 0 ){
		CheckByAge();
	} else {
		CheckByValue();
	}
	
	$(".selectThis").click(function(){
                animateToTray($(this));
    });   
    
 /* artf1008562: H | BC | BR | Lift tickets | Filter container is not aligned with the results container [SA]*/    

    if($('#beavercreek').length >0){
        $("#beavercreek .tripleColumn .liftTicket").css("margin-top","-20px");
    }
    
    /* for breckenridge only */
    if($('#breckenridge').length >0){
           if($.browser.msie){
            $("#breckenridge .tripleColumn .liftTicket").css("margin-top","-17px");
            }
            else {
                $("#breckenridge .tripleColumn .liftTicket").css("margin-top","-8px");
                }
      }
    
    /* for heavenly only */
    if($('#heavenly').length >0){
        $("#heavenly .tripleColumn .liftTicket").css("margin-top","-9px");
    }

/* end of fix - artf1008562 [SA]*/        

});

function onDateChange(dateText, makeAjax, loadingStr){
    if ( !loadingStr ){
        var loadingStr = "";
    }
	var validDate = true;
	var selectedDate = createDateObj(dateText);
	var seasonStartDate = createDateObj(getDefaultDate());
	var divError = $(".noProduct");
	divError.html('');

	if( $.trim(dateText).length == 0 ) {
        var errorMsg = [""
			,"<span id='lblErrorMessage'>"
			,	"Please complete the required fields:"
			,	"<ul><li>Start Date</li></ul>"
			,"</span>"
		].join(""); 
        divError.html(errorMsg);
		validDate = false;		
    } else if ( !IsDateMMDDYYYY(dateText) ) {
        var errorMsg = [""
			,"<span id='lblErrorMessage'>"
			,	"You have entered the following invalid data:"
			,	"<ul>"
			,		"<li>Start Date - date format must be MM/DD/YYYY</li>"
			,   "</ul>"
			,	"Please re-enter your data."			
			,"</span>"
		].join(""); 
        divError.html(errorMsg);
		validDate = false;		
    } else if ( selectedDate < seasonStartDate ) {
        var errorMsg = [""
			,"<span id='lblErrorMessage'>"
			,	//"You have entered the following invalid data:"
			,	"<ul>"
			,		"<li>You have entered an invalid date, "+createDateStr(selectedDate)+". Please revise your date to be "+createDateStr(seasonStartDate)+" or later</li>" 
			,	"</ul>"
			,"</span>"
		].join(""); 
        divError.html(errorMsg);
		validDate = false;		
	}
	else if ( IsMaximumDateRange(selectedDate))
    {                   
        var errorMsg = [""
            ,"<span id='lblErrorMessage'>"
            ,   "You have entered the following invalid data:"
            ,   "<ul>"
            ,       "<li>Start Date should not be more then 365 days from now.</li>"
            ,   "</ul>"
            ,   "Please re-enter your data."
            ,"</span>"
        ].join("");        
        divError.html(errorMsg);
	    validDate = false;	                                                                                                                      
    }

	rdoListSeasons.attr("checked", "");
	var date = createDateObj(dateText);
	for(var x = 0; x < rdoListSeasons.length; x++){
		var startDate = createDateObj( rdoListSeasons.eq(x).siblings(".seasonStartDate").val() );
		var endDate = createDateObj( rdoListSeasons.eq(x).siblings(".seasonEndDate").val() );
		if ( startDate <= date && date <= endDate ){
			rdoListSeasons.eq(x).attr("checked", "checked");
			break;
		}
	}
	
	if ( validDate && makeAjax ){
		getData("ByAge", loadingStr);
	}
}

function CheckByAge() {    
	if (rdoAge.filter(":checked").length > 0) {
		$(".seasonListing, #dateSelection, #noOfDaysSlider").css("display", "block");
		$("#divNoofDays").css("display", "none");
		$(".listFilterContainer h3").eq(0).show();
	}
}

function CheckByValue() {
	if (rdoValue.filter(":checked").length > 0) {
		$(".seasonListing, #dateSelection, #noOfDaysSlider").css("display", "none");
		$("#divNoofDays").css("display", "block");
		$(".listFilterContainer h3").eq(0).hide();
	}
}

//Function Name : initSeasonListing
//Purpose : This function is used to grayout checkboxes with endDate passed.
//Parameters : NA
function initSeasonListing(){
    $('.listFilterFormContainer .seasonListing').each(function(i) {
        var currentDate = getCurrentDate();
        var endDate     = createDateObj( $(this).find('.seasonEndDate').val() );
        var rdoBtn		= $(this).find('input:radio');
		
        if(currentDate > endDate){
            rdoBtn.removeAttr("checked").attr("disabled", "disabled");
        } else {
            rdoBtn.removeAttr("disabled");
        }
	});
	
    if ( rdoListSeasons.filter(":checked").length == 0 ){
        rdoListSeasons.filter(":enabled").eq(0).attr("checked", "checked");
    }

	$("#sliderContainer").slider('values', 0, 1);
	$("#sliderContainer").slider('values', 1, 10);
	
	rdoListSeasons.unbind("click").bind("click", function(){
		rdoListSeasons.attr("checked", "");
		$(this).attr("checked", "checked");
		
	    var date = createDateObj( $(this).val() );
		$("#startDatePicker").datepicker("setDate", date);
		getData("ByAge", "Please wait a moment while we search for your results");
	});
}

//Function Name : initDayListing
//Purpose : This function is used to grayout checkboxes with endDate passed.
//Parameters : NA
function initDayListing() {

    var fullURL = unescape(parent.document.URL).toLowerCase();
    //var fullurl = document.location;
    //fullurl = fullurl.toLowerCase();

    if (fullURL.indexOf('search=') > -1) {
		var hdnval = $(".txtSearchClass").val();
		if (hdnval != "") {
			searchCriteria = hdnval.toString().split(',');
			addTicketToTrayFromSearchParameter(searchCriteria);
		}
		searchCriteria = fullURL.substr(1);
        searchCriteria = searchCriteria.split("&")[0].split("=")[1].split(",");
		if ( rdoValue.attr("checked") ){
			var days = eval( searchCriteria[3] );
			if ( days >= 7 ){
				rdoListDays.filter("[value=7]").attr("checked", "checked");
			} else {
				rdoListDays.filter("[value=" + days + "]").attr("checked", "checked");
			}
		}
	}
	
    if ( rdoListDays.filter(":checked").length == 0 ){
        rdoListDays.eq(0).attr("checked", "checked");
    }
	
    rdoListDays.unbind("click").bind("click", function(){
		getData("ByValue", "Please wait a moment while we search for your results");
	});
}

function getData(viewBy, loadingStr){
    if ( !loadingStr ){
        var loadingStr = "";
    }
	$(".noProduct").html('');
	switch( viewBy.toLowerCase() ){
		case "byvalue":
			var serviceUrl = "/vailresorts/sites/PlanningAndBooking/WebServices/LiftTicketDetails.svc/GetLiftTicketDatabyValue"
			
			var daysSelected = rdoListDays.filter(':checked');
			var filterCriteria = ( daysSelected.length > 0 ) ? daysSelected.val() : 0;
			
			var querystring = "";
			break;
		case "byage":
			var serviceUrl = "/vailresorts/sites/PlanningAndBooking/WebServices/LiftTicketDetails.svc/GetLiftTicketControl"
			
			if ( $.trim($("#startDatePicker").val()).length > 0 ){
				var filterCriteria = createDateStr( $.trim($("#startDatePicker").val()) );
			} else {
				var dateSelected = rdoListSeasons.filter(':checked');
				var filterCriteria = ( dateSelected.length > 0 ) ? createDateStr( dateSelected.val() ) : getDefaultDate();
			}
			
			var querystring = ",\"querystring\": \"\"";
			break;
	}
	
	Ajax({
		updateTarget: "#ajaxContentContainer",
		url: serviceUrl,
		data: "{\"displaytype\" : \"" + viewBy + "\",\"filterCriteria\": \"" + filterCriteria + "\"" + querystring + "}",
		loadingStr: loadingStr,
		success: function(){
			if (viewBy.toLowerCase() == "byvalue") {
			    if(filterCriteria < 7)
			        $('#divStartDate').html(filterCriteria + '-Day Tickets');
			    else
			        $('#divStartDate').html(filterCriteria + '-Days or More Tickets');
			} else {
				var minDays = $("#sliderContainer").slider('values', 0);
				var maxDays = $("#sliderContainer").slider('values', 1);
				ticketFilter(minDays, maxDays);
			}
		}
	});
}

//Function Name : attachSaveToTripModal
//Purpose : This function is used to bind all the required events to the controls
//Parameters : NA
function attachSaveToTripModal(){
    //Add click Event to button to add to cart
    $("[id$='btnContinue']").bind("click", function(){
		SaveToCart();
		ContinueButtonClick();
	});

	if ( $('.saveToTripDialog').length > 0 && $('body > .ui-dialog .saveToTripDialog').length == 0 ){
	    $('.saveToTripDialog').eq(0).dialog({
	        bgiframe: true,
	        autoOpen: false,
	        width: 960,
	        height: 620,
	        modal: true,
	        resizable: false,
	        position: 'center',
	        closeOnEscape: true,
			draggable: false
	    });
	}
	
	var objModal = $('body > .ui-dialog .saveToTripDialog');

	$('[id$=hlSave]').eq(0).unbind("click").bind("click",function(e) {
	    e.preventDefault();
	    SaveToCart();
	    
	    var hdnField = $("[id$='_hdLiftTicket']").val();    
	    if ( $.trim(hdnField).length > 0 ){
		    // grabs url from href and loads it into the modal window
	        var urlContent = $(this).attr('href') + "&ProductId=" + hdnField;

	        $('iframe', objModal)
				.attr('src',urlContent)
				.attr('width','100%')
				.attr('height','100%')
				.attr('scrolling','no');
			
			try {
				objModal.dialog('open');
			} catch (e){}
	    }
        return false;
	});
}

function ContinueButtonClick()
{ 
 var hdLiftTicket=$("[id$='hdLiftTicket']").val();
 var hdLiftTicketEdit=$("[id$='hdLiftTicketEdit']").val();
 
        $.ajax
        ({
            type: "POST",
            url: "/vailresorts/sites/PlanningAndBooking/WebServices/LiftTicketDetails.svc/RedirectToCartSummary",
            async: false,
            data: "{\"hdLiftTicketData\" : \"" + hdLiftTicket + "\",\"hdLiftTicketDataEdit\" : \"" + hdLiftTicketEdit + "\"}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg)
            {               
                var response = msg.d;                
                if(response.indexOf('http')>=0)
                {              
                   parent.window.location = msg.d;
                }               
                
                 moreInfoModalOpen();                                                                   
            },
		    error: function(xhr, status, error) {
		        clearPurchaseTray();
		        var errMsg = "An unexpected error has occurred. Please try after some time or contact support center for assistance.";
		        $("#ajaxContentContainer").html('<span class="errorMessage">'+errMsg+'</span>');		        
		    }
        });
}


function moreInfoModalOpen()
{ 
    if ( $('.iFrameLiftTicketModal').length > 0 && $('body > .ui-dialog .iFrameLiftTicketModal').length == 0 ){
        $('.iFrameLiftTicketModal').eq(0).dialog({
            bgiframe: true,
            autoOpen: false,
            width: 600,
            height: 540,
            modal: true,
            resizable: false,
            position: 'center',
            closeOnEscape: true
        });
    }
    var objModalDialog = $('body > .ui-dialog .iFrameLiftTicketModal');

    $('.openLiftTicketIFrame').unbind('click').bind('click',function(event) {
	    event.preventDefault();	    
	    
	    var urlContent = $(this).attr('href');
	    $('iframe', objModalDialog)
	        .attr('src',urlContent)
	        .attr('width','100%')
	        .attr('height','100%')
	        .attr('scrolling','no');
	    try {
	        objModalDialog.dialog('open');
	    } catch (e){}
    });
}

// Create a date object from an american date format mm/dd/yyyy
function createDateObj(str) {
	// str = mm/dd/yyyy
	// date = yyyy/mm/dd
	
	if( str == null ){ return null; }
	
	if ( str.indexOf("/") > -1 ){
	    var arrDate = str.split("/");
	    var strDate = [arrDate[2], arrDate[0], arrDate[1]].join("/");
	    var o = new Date(strDate);
	    if (o.toString() == "NaN") {
		    return null;
	    } else {
		    return o;
	    }
	} else {
        var arrMonth = ["", "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];

        var arrDate = str.split(",");
        var month = $.trim( arrDate[1] ).split(" ")[0];
            month = ($.inArray(month.toLowerCase(), arrMonth)).toString();
        var date = $.trim( arrDate[1] ).split(" ")[1];
        var year = $.trim( arrDate[2] ).split(" ")[0];
	    var strDate = [year, month, date].join("/");
	    var o = new Date(strDate);
	    if (o.toString() == "NaN") {
		    return null;
	    } else {
		    return o;
	    }
	}

}

function createDateStr(date){
	if( date == null ){ return null; }
	
	if (typeof date == "string"){
		date = createDateObj( date );
	}
	return date.getMonth() + 1 + "/" + date.getDate() + "/" + date.getFullYear();
}

function ticketFilter(minDays, maxDays) {
	$(".ageLiftTicket input:hidden[name = NumberofDays]").each(function(i) {
	    var dayCount = eval( this.value );
		if (dayCount < minDays) {
			$(this).closest("tr").addClass("hideDiv");
		}
	    if (maxDays == 10){
	        if (dayCount >= minDays) {
		        $(this).closest("tr").removeClass("hideDiv");
	        }
	    } else {
	        if (dayCount >= minDays && dayCount <= maxDays) {
		        $(this).closest("tr").removeClass("hideDiv");
	        } else {
	            $(this).closest("tr").addClass("hideDiv");
	        }
	    }
	});
	if ( $(".ageLiftTicket tbody tr:not(.hideDiv)").length > 0 ){
	     $("#errorMessage").html("");
	    $(".ageLiftTicket").removeClass("hideDiv");
	    $(".ageLiftTicketError").addClass("hideDiv");
	} else {
	   
	    $("#errorMessage").html("No results found that match your filter criteria. Please adjust filters to view results.").addClass("errorMessage");
	    $(".ageLiftTicketError").removeClass("hideDiv");
	    $(".ageLiftTicket").addClass("hideDiv");
	    
	}
}

function addTicketToTray(draggedObj, selectedDate) {
	var ticket = $("#hiddenDroppableTicketTemplate").clone().appendTo(".dropItem").attr("id", "");
	var ticketPrice = draggedObj.find(".amount").html();
	ticket.find("h6").html(draggedObj.find("h6").html());
	ticket.find(".amount").html(ticketPrice);
	ticket.find(".startDate").html('Starting:' + selectedDate);
	ticket.find(".iconDelete").click(function() {
		$(this).parents("li").remove();
		// Remove Remove all link if data not in cart box
	 	 if($(".dropItem li:not(:hidden)").length==0)
                {
                   $(".linkClear").attr("style"," color: #666; cursor: text; text-decoration: none");;
                }
	})
	 if($("#droppable ul li").length > 0)
    {
        var divError = $(".noProduct")
        divError.html('');
	}
	// Display Remove all link if data not in cart box
	$(".linkClear").attr("style"," ");
}

function addTicketToTrayFromSearchParameter(search) {
	var ticket = $("#hiddenDroppableTicketTemplate").clone().appendTo(".dropItem").attr("id", "");
	ticket.find("input[name='SelectedDate']").val(search[0]);
	ticket.find("input[name='SelectedSKU']").val(search[1]);
	ticket.find(".amount").html(search[2]);
	ticket.find(".startDate").html('Starting:' + search[0]);
	ticket.find("h6").html(search[3]);
	ticket.find(".iconDelete").click(function() {
		$(this).parents("li").remove();
		// Remove Remove all link if data not in cart box
	 	 if($(".dropItem li:not(:hidden)").length==0)
                {
                   $(".linkClear").attr("style"," color: #666; cursor: text; text-decoration: none");;
                }
	})
	$(".linkClear").attr("style"," ");
}


function clearPurchaseTray() {
    // Remove from tray
	$(".dropItem li").not("#hiddenDroppableTicketTemplate").remove();
    // Remove from hidden variable
	$("[id$='_hdLiftTicket']").val('');
	// Remove Remove all link if data not in cart box
	$(".linkClear").attr("style"," color: #666; cursor: text; text-decoration: none");;
}

function getDefaultDate() {
	// Default date is todays date + 2 days
	// We are already getting minDate as Today + 1
	var d = createDateObj( $("[id$=hdMinDate]").eq(0).val() );	
    d.setDate(d.getDate() + 6);
    return createDateStr(d);
}

function getCurrentDate(returnString) {
	if ( returnString ) {
		return createDateStr( $("[id$=hdMinDate]").eq(0).val() );
	} else {
		return createDateObj( $("[id$=hdMinDate]").eq(0).val() );
	}
}

function initDragDrop(){
	$(".ageLiftTicket td .draggable").draggable({
		helper: 'clone',
		containment: 'document',
		drag: function(e, ui){
			ui.helper.width($(ui.helper.context).outerWidth());
			ui.helper.height($(ui.helper.context).outerHeight());
		}
	}); //Make ticket price boxes draggable
	$("#droppable").droppable({
		drop: ByAgeAndByValueValidation
	});
}


/*
    loadTarget: optional
    updateTarget: optional
    type: optional
    url: optional
    data: optional
    contentType: optional
    dataType: optional
    success: optional
    error: optional
    callback: optional
*/

function Ajax(options){
	var defaults = {
	    loadTarget: "",
	    loadingStr: "",
	    updateTarget: "",
		type: "POST",
		url: "/vailresorts/sites/PlanningAndBooking/WebServices/LiftTicketDetails.svc/GetLiftTicketControl",
		data: "",
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function(msg){
		},
		error: function(xhr, status, error) {
		},
		callback: function(){}
	};
	var options = $.extend(defaults, options);
	
	
    if ( options.loadTarget != "" && $(options.loadTarget).length > 0 && options.loadTarget != options.updateTarget ){
        $(options.loadTarget).showLoading({ loadingStr: options.loadingStr });
    } else if ( options.updateTarget != "" && $(options.updateTarget).length > 0 ){
        $(options.updateTarget).showLoading({ loadingStr: options.loadingStr });
    }
	
	$.ajax({
		type: options.type,
		url: options.url,
		data: options.data,
		contentType: options.contentType,
		dataType: options.dataType,
		success: function(msg){
		    if ( options.updateTarget != "" && $(options.updateTarget).length > 0 ){
	            if ( msg.d ){
        	        $(options.updateTarget).html( msg.d );
        	    } else {
         	        $(options.updateTarget).html( msg );
           	    }
	        }
	        if ( options.loadTarget != "" && options.loadTarget != options.updateTarget && $(options.loadTarget).length > 0 ){
                $(options.loadTarget).hideLoading();
	        }
	        $('#divStartDate').html($("#startDatePicker").val());
			$('table.ageLiftTicket tbody tr:odd').addClass('alternateRow');
	        
	            
            // To replace 0 with N/A in tickets and prevent drag and drop on such tickets
            $("#tblContainer input.ticketSKU[value='']")
                .siblings("span.amount")
                .html("N/A")
                .closest("div.draggable")
                .removeClass("draggable");

            $(".selectThis").click(function(){
                animateToTray($(this));
            });

	        initDragDrop();
		    options.success();
		    
		    moreInfoModalOpen();
		    
		},
		error: function(xhr, status, error) {
			handlePnB_LiftTicket_Error(xhr, status, error);
			options.error();
		}
	});
}

function handlePnB_LiftTicket_Error(xhr, status, error){
    var errMsg = getErrorMessage(xhr,status,error);
    $("#ajaxContentContainer").html('<span class="errorMessage">'+errMsg+'</span>');
}

//Funtion called when button  Continue is clicked 
//Iterate the cart items in the bucket and concat all the hidden values to one asp hidden textbox 
//so as to access them on the server side
function SaveToCart()
{
    if($("#droppable ul li").length <= 1)
    {
        var divError = $(".noProduct")
        var errorMsg = "<span id='lblErrorMessage' class='errorMessage'>Please select a product before proceeding.</span>"; 
        divError.html(errorMsg);
		return false;		
	}
    var hd=$("[id$='_hdLiftTicket']");
    hd.val("");    
    $("ul.dropItem li").each(function(i){
        if ( $(this).attr("id") == "hiddenDroppableTicketTemplate" ){ return true; } // Skip the first dummy element
        
        if(hd.val()=='')
        {
            hd.val(
				$(this).find("input[type=hidden][name=SelectedSKU]").val() + '|' +
				$(this).find("input[type=hidden][name=SelectedDate]").val()
			);
        }
        else
        {
            hd.val(
				hd.val() + ',' + 
				$(this).find("input[type=hidden][name=SelectedSKU]").val() + '|' +
				$(this).find("input[type=hidden][name=SelectedDate]").val()
			);
        }
        
    });    
	//debugger;
}

function IsDateGreater(DateValue1, DateValue2)
{
 if ( new Date(DateValue1) > new Date(DateValue2) )
    return true;
 else
    return false;
}

function GetSeasonStartDate(hdSeasonStartDate)
{
    var year = new Date(hdSeasonStartDate).getYear()+1901;
    var month = new Date(hdSeasonStartDate).getMonth()+1;
    var dt = new Date(hdSeasonStartDate).getDate();
    var seasonStartDate= month +'/'+ dt +'/'+  year;
    return seasonStartDate;
}


function animateToTray(obj){	
    //To display no. of dgraggable items in the tray.
    if($(".hiddenIsLodging").length > 0){
	          if($(".hiddenIsLodging").val() == "true"){
	                if($("#droppable ul li:not(:hidden)").length > 18)
	                {
	                    return;		        
	                 }
	            } 
	            else {
	                if($("#droppable ul li:not(:hidden)").length > 7){
	                    return;	
	                }
            }
    }
    
    var clickedItem = obj.closest(".draggable");
    var positionX = clickedItem.offset().left+"px";
	var positionY = clickedItem.offset().top+"px";
    
	myTicket = clickedItem.clone();
	myTd = obj.closest("td");
	myTicket.css({
		'position':'absolute',
		'top': positionY,
		'left' : positionX,
		'z-index':9999,
		'width': myTd.width(),
		'height': myTd.height()
	});
	
	$('body').append(myTicket);
	//myTicket.prependTo(myTd);

    var purchaseTray = $('[id$=droppable]').offset();
    var endPosX = purchaseTray.left + "px";
    var endPosY = purchaseTray.top + "px";
    
	myTicket.animate( {
		'top':endPosY,
		'left':endPosX
	}, 800,function(){
	    ByAgeAndByValueValidation(window.event, {draggable: clickedItem});
		$(this).fadeOut(function(){
			$(this).remove();
		});
	});
}

function ByAgeAndByValueValidation(event, ui) {
		    if($(".hiddenIsLodging").val() == "true"){
		        if($("#droppable ul li").length > 19)
		            return;		        
		    } else {
		        if($("#droppable ul li").length > 8)
		            return;	
		    }
		    
			var datePickerModal = $("#datePickerModal");
			if ($("#byValue").is(":checked")) {
				if (datePickerModal.length == 0) {
					$("body").append("<div id='datePickerModal'></div>");
					datePickerModal = $("#datePickerModal");
					datePickerModal.html(['',
						'<div class="gBoxWrapper">', 
							'<div class="roundedCornerTopLeft"><span></span></div>', 
							'<div class="roundedCornerMiddleLeft">', 
								'<div class="roundedCornerMiddleRight gBoxContentContainer">', 
									'<div class="whiteBox">', 
										'<div class="selectStartDate">', 
											'<ul>', 
												'<li>', 
													'<span>Start Date:</span>', 
													'<input name="" type="text" class="textBoxSmall withCalendar" />', 
												'</li>', 
												'<li>', 
													'<div class="clearfix">', 
														'<span class="btnGrey"><input type="button" value="Ok" /></span>', 
													'</div>', 
												'</li>', 
											'</ul>', 
										'</div>', 
									'</div>', 
								'</div>', 
							'</div>', 
							'<div class="roundedCornerBottomLeft"><span></span></div>', 
						'</div>'
					].join(''));
					datePickerModal.dialog({
						bgiframe: true,
						autoOpen: false,
						width: 500,
						modal: true,
						resizable: false,
						position: 'center',
						closeOnEscape: true
					});
                    
					datePickerModal.bind('dialogbeforeclose', function(event, ui) {
						datePickerModal.find(".withCalendar").datepicker( 'hide' , 1 );
					});
					
                    /* artf1008566 - to fix calander icon issue on lift tkt by value page [SA] */
					var buttonImg = "";
					var bodyId = $('body').attr('id');
					switch(bodyId)
					{
					    case 'keystone':
				            buttonImg = '/VailResorts/sites/Keystone/assets/img/icon_calender.gif';
				            break;
				            
					    case 'breckenridge':
                            buttonImg = '/VailResorts/sites/breckenridge/assets/img/icon_calender.gif';
				            break;
					       
				       case 'beavercreek':
				            buttonImg = '/VailResorts/sites/beavercreek/assets/img/icon_calendar.gif';
				            break;
				       
				       case 'vail':
				            buttonImg = '/VailResorts/sites/vail/assets/img/icon_calender.gif';
				            break;
				       
				       case 'heavenly':
				            buttonImg = '/VailResorts/sites/heavenly/assets/img/icon_calender.gif';
				            break;     
					}
					/*  end of fix - artf1008566 [SA] */
					
					$(".withCalendar", datePickerModal).datepicker({
						showOn: 'both',
						buttonImage: buttonImg, /* artf1008566 [SA]*/
						buttonImageOnly: true
					});
					
					
					datePickerModal.find(".btnGrey").click(function() {
					    var draggable = datePickerModal.find(".btnGrey").data("draggable");
						var dataCell = draggable.parents("tr").find("td:first");
						var startDate = createDateObj(dataCell.find("input[name='StartDate']").val());
						var endDate = createDateObj(dataCell.find("input[name='EndDate']").val());
						var strSelectedDate = datePickerModal.find("input:text").val();
						
						var selectedDate = createDateObj(strSelectedDate);
						
						if(strSelectedDate == null || strSelectedDate == ""){
							datePickerModal.find(".selectStartDate ul li.errorMessage").remove();
							datePickerModal.find(".selectStartDate ul").prepend("<li class='errorMessage'>Please complete the required fields:<br/> Start Date.</li>");
						} 
                        else{
						    if(selectedDate == null || selectedDate == "Invalid Date"){
							    datePickerModal.find(".selectStartDate ul li.errorMessage").remove();
							    var errorMsg="<li class='errorMessage'>You have entered the following invalid data:<br>Start Date - date format must be MM/DD/YYYY<br>Please re-enter your data.</li>"
							    datePickerModal.find(".selectStartDate ul").prepend(errorMsg);
						    } else if (startDate <= selectedDate && selectedDate <= endDate) {
							    addTicketToTray(draggable, strSelectedDate);
                				
			                    var hiddenSelectedDate = $("#droppable li:last input[name='SelectedDate']");
			                    hiddenSelectedDate.val(strSelectedDate);
    							
			                    var hiddenSelectedSKU = $("#droppable li:last input[name='SelectedSKU']");
			                    var SKU = ui.draggable.find("input:hidden").val();
			                    hiddenSelectedSKU.val( SKU );
    			                
							    datePickerModal.dialog("close");
						    } else {
							    datePickerModal.find(".selectStartDate ul li.errorMessage").remove();
							    datePickerModal.find(".selectStartDate ul").prepend("<li class='errorMessage'>You have entered an invalid date, [" + createDateStr(selectedDate) + "]. Selected date should lie between [" + createDateStr(startDate) + "] - [" + createDateStr(endDate) + "]</li>");
						    }
						 }
					});
				}
				var dataCell = ui.draggable.closest("tr").find("td:first");
				var startDate = createDateObj(dataCell.find("input[name='StartDate']").val());
				var endDate = createDateObj(dataCell.find("input[name='EndDate']").val());
				$(".withCalendar", datePickerModal).datepicker('option', 'minDate', startDate);
				$(".withCalendar", datePickerModal).datepicker('option', 'maxDate', endDate);
				
				datePickerModal.find(".btnGrey").data("draggable", ui.draggable);
				datePickerModal.find(".selectStartDate input:text").val("");
				datePickerModal.find(".selectStartDate ul li.errorMessage").remove();
				datePickerModal.find(".selectStartDate span:contains('Start Date:')").removeClass("errorMessage");
				$(".withCalendar", datePickerModal).datepicker('disable');
				datePickerModal.dialog('open');
				$(".withCalendar", datePickerModal).datepicker('enable');
			} else {
				var selectedDate = $("#divStartDate").text();
				addTicketToTray(ui.draggable,selectedDate);				
				
				var hiddenSelectedDate = $("#droppable li:last input[name='SelectedDate']");
				hiddenSelectedDate.val(selectedDate);
				
				var SKU = ui.draggable.find("input:hidden");
				var hiddenSelectedSKU = $("#droppable li:last input[name='SelectedSKU']");
				hiddenSelectedSKU.val( SKU.val() );
			}
		}