// updated handleEvents to support the past, current, upcoming buttons
var eventDataFileStub = "events_"
var eventDataExt = ".json"
var blankimageUrl = "images/spacer.gif"
//
var eventOptions
var currentEvent
var tab
var project
var resultEvents
var ui_ExpandImagePopup
var ui_ExpandImage
function handleEventsV2()
{
    Log.info("Eventsv2::handleEventsV2()")
    $("#rsvp").show()
    // load the all-in-one data file  
    loadJSONFile("events.json", parseData, handleEventDataError);
}



function loadJSONFile(filename, successFunction, errorFunction)
{
    $.ajax({
        url: filename,
        dataType: 'json',
        success: successFunction,
        error: errorFunction
    });
}



function handleEventDataError(XMLHttpRequest, textStatus, errorThrown)
{
    //Log.warn("Loading event data file:" + textStatus + " XMLHttpRequest:" + XMLHttpRequest)
    tab = new EventTab()
    //addYearsToPage()
    renderWithOptions()
}



function parseData(data)
{
    var parser = new EventTabJSONParser()
    tab = parser.parse(data)
    //HACK: In later interation, we will call the projectJSON parser to parse 
    // the project and all tabs until then get the project info from the Tab parser
    project = parser.project
    //HACK: A New field in the JSON data to determine event type may not be present 
    // in legacy project data look at the project name if it has 'installation' 
    // its an installation if it has 'session' it is a session else it is performance
    // Remove this once all project data has been updated
	Log.info("parseData->data has eventType of "+tab.eventType)
    if (tab.eventType == "") 
    {
        var pname = project.projectName.toLowerCase()
        Log.warn('HACK: No eventType found in' + project.projectName)
        if (pname.indexOf("installation") > -1) 
        {
            Log.info('tab.eventType = "installation"')
            tab.eventType = "installation"
        }
        else if (pname.indexOf("session") > -1) 
        {
            Log.info('tab.eventType = "session"')
            tab.eventType = "session"
        }
        else 
        {
            Log.info('tab.eventType = "performance"')
            tab.eventType = "performance"
        }
        Log.info("tab.eventType:" + tab.eventType)
    }
    //HACK END
	


    //Add flash event selectors to the page
    if (tab.eventType == "session") 
    {
        addStatesToPage()
        //Use getStatesWithSessions() to get a list of states with session
		// Note this must happen before we 
        //This is a stub for future improvement to highlight states with session
    }
    else 
    {
        addTimeFrameToPage()
        addYearsTimeFrame()
    }

	// Currently this page does not support deeplinking to a timeframe and state/year
    //  but I have stubbed it out
	var optionFromHash = null
    eventOptions = getViewOptions(tab.eventType, optionFromHash)
	
    renderWithOptions()
}



// Add Deep-linking Support
function getViewOptions(eventType, option)
{
    var eventOptions = new EventDisplayOptions()
    if (tab.eventType == "session") 
    
	{
		eventOptions.year = getYear()
        eventOptions.setTimeFrame("notpast")
        if (option) 
        {
            eventOptions.setState(option)
        }
        else 
        {
            eventOptions.setState("all")
        }
    }
    else 
    {
        if (option)    
		{
			if (option == "current" || option=="future")
			{
				eventOptions.year = getYear()
        		eventOptions.setTimeFrame(option)
			} else 
			{
				eventOptions.year = option
        		eventOptions.setTimeFrame("past")
			}
            eventOptions.setTimeFrame("option")
        }
        else 
        {
            eventOptions.year = getYear()
        	eventOptions.setTimeFrame("current")
        }
    }
	return eventOptions

}


// This function loops
function getStatesWithSessions()
{
    eventOptions = new EventDisplayOptions()
	eventOptions.setTimeFrame("notpast")
    eventOptions.setState("all")
    var events = getEventsToRender()
    var stateMap = {}
    var avEvent
    var eventDate
    for (var i = 0, event_len = events.length; i < event_len; i++) 
    {
        avEvent = events[i]
        if (avEvent["hasFutureDates"]) 
        {
            if (avEvent.hasFutureDates()) 
            {
                eventDate = avEvent.getFutureDates()[0]
                stateMap[eventDate.eventState] = 1
            }
        }
        else 
        {
            Log.warn("avEvent is not an AVEvent:" + avEvent)
        }
    }
    //Log.info("renderWithOptions->create stateMap"+stateMap)
    availableStates = []
    for (var s in stateMap) 
    {
        availableStates.push(s)
    }
    availableStates.sort()
    
    return availableStates
}



function defaultEventsContent()
{
	var _insertString = ""
	Log.info("defaultEventsContent()")
    if (tab.eventType == "session") {
		if (eventOptions.state == "all"){
		_insertString +="<div class='noevents'>";
		_insertString +="Sorry, there are no events currently scheduled, please check back soon.";
		_insertString +="</div>";
		} else {
		_insertString +="<div class='noevents'>";
		_insertString +="Sorry, there are no events in your state, please pick another state.";
		_insertString +="</div>";
		}	
	}
	else {
		_insertString +="<div id='defaultEvents'>";
		_insertString += "<p>CHECK BACK SOON FOR MORE UPCOMING EVENTS!</p>";
		_insertString += "<p>Navigate to:<br>";
		_insertString += "<a href='/art/index.html'>ART</a><br>";
		_insertString += "<a href='/film/index.html'>FILM</a><br>";
		_insertString += "<a href='/lifestyle/index.html'>LIFESTYLE</a><br>";
		_insertString += "<a href='/music/index.html'>MUSIC</a><br>";
		_insertString += "</p>";
		_insertString += "</div>";
	}
    //$('#more').html(_insertString);
    return _insertString
}



// getYear():String
function getYear()
{  
    return new Date().getFullYear()
}



function showDropDown()
{
    Log.info("showDropDown")
    $("#eventselector").css("height", "310px")
}



function hideDropDown()
{
    Log.info("hideDropDown")
    $("#eventselector").css("height", "50px")
}



function showPastYear(year)
{
    Log.info("showPastYear(" + year + ")")
    eventOptions = new EventDisplayOptions()
    eventOptions.year = year
    eventOptions.setTimeFrame("past")
    renderWithOptions()
}



function showPast()
{
    Log.info("showPast")
    // event.preventDefault();
    eventOptions = new EventDisplayOptions()
    eventOptions.year = getYear()
    eventOptions.setTimeFrame("past")
    renderWithOptions()
}



function showCurrent()
{
    Log.info("showCurrent")
    //event.preventDefault();
    eventOptions = new EventDisplayOptions()
    eventOptions.year = getYear()
    eventOptions.setTimeFrame("current")
    renderWithOptions()
}



// ExternalInterface
function showSessions(event)
{
    Log.info("showSessions")
    event.preventDefault();
    stateFilter = event.target.id
    filterSessions(stateFilter)
}



function filterSessions(stateFilter)
{
    Log.info("filterSessions")
    eventOptions = new EventDisplayOptions()
    eventOptions.year = getYear()
    eventOptions.setTimeFrame("notpast")
    eventOptions.setState(stateFilter)
    renderWithOptions()
}



function showUpcoming(event)
{
    Log.info("showUpcoming")
    //event.preventDefault();
    eventOptions = new EventDisplayOptions()
    eventOptions.year = getYear()
    eventOptions.setTimeFrame("future")
    renderWithOptions()
}



function embedStatesSelector()
{
    Log.info("embedStatesSelector")
    flashvars = {};
    params = {
		scale: "noborder",
        wmode: "transparent"
    };
    attributes = {};
    $('#eventnav').append('<div id="eventselector" />');
    attributes.id = "eventselector";
    attributes.name = "eventselector";
    swfobject.embedSWF("/flash/states.swf", "eventselector", "560", "210", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
}



function addTimeFrameToPage()
{
    Log.info("addTimeFrameToPage >>>>>>>")
    $("#content").append('<div id="eventnav"></div><div id="more" class="events"><ul class="text"><li id="currentEvent" class="on">This is events</li></ul></div>')
}



function addYearsTimeFrame()
{
    var currentYear = new Date().getFullYear()
    var availableYears = tab.getAvailableYears()
    if (availableYears.length < 1) 
    {
        availableYears.push(getYear())
    }
    Log.info("embed timeframe selector with years:" + availableYears.join(","))
    flashvars = {
        years: availableYears.join(",")
    };
    params = {
		scale: "noborder",
        wmode: "transparent"
    };
    attributes = {};
    $('#eventnav').append('<div id="eventselector" />');
    attributes.id = "eventselector";
    attributes.name = "eventselector";
    swfobject.embedSWF("/flash/timeframe.swf", "eventselector", "560", "210", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
}



function addStatesToPage()
{
    $("#content").append('<div id="eventnav"></div><div id="more" class="events"><ul class="text"><li id="currentEvent" class="on"></li></ul></div>')
    embedStatesSelector()
}



function addLinksToStates(availableStates)
{
    //TODO Repllace this mock up function to hold the place when the flash selector is complete
    var eventHTML = ""
    for (var i = 0, states_len = availableStates.length; i < states_len; i++) 
    {
        eventHTML += '<a href="#' + availableStates[i] + '" class="filterstate" id="' + availableStates[i] + '">' + availableStates[i] + '</a>'
    };
    
    $("#states").html(eventHTML)
    $("#all").click(handleFilterState);
    $(".filterstate").click(handleFilterState)
}



function handlePastYear(event)
{
    event.preventDefault();
    //Log.info("handleYear(" + event.target.id + ")")
    showPastYear(event.target.id)
}



function handleFilterState(event)
{
    event.preventDefault();
    //Log.info("handleFilterState(" + event.target.id + ")")
    filterSessions(event.target.id)
}



function handleLinkToMedia(evt)
{
    evt.preventDefault()
    var currentHash = window.location.hash
    // get rid of hash char
    var currentHash = currentHash.substr(1)
    //Log.info("handleLinkToMedia currentHash:" + currentHash)
    var currentHashParts = currentHash.split(",")
    var currentTab = currentHashParts[0]
    //Log.info("handleLinkToMedia currentTab:" + currentTab)
    var theUrl = evt.target.href
    //Log.info("handleLinkToMedia href:" + theUrl)
    var theHash = theUrl.split("#")[1]
    //Log.info("handleLinkToMedia hash:" + theHash)
    var hashParts = theHash.split(",")
    //Log.info("handleLinkToMedia hashParts:" + hashParts)
    var section = hashParts[0]
    //Log.info("handleLinkToMedia section:" + section)
    var assetid = hashParts[1]
    //Log.info("handleLinkToMedia assetid:" + assetid)
    var newUrl = section + ".incl"
    //Log.info("handleLinkToMedia newUrl:" + newUrl)
    var newHash = section
    //Log.info("handleLinkToMedia newHash:" + newHash)
    theTab = section
    theAsset = assetid
    $("#li" + currentHash).removeClass("on")
    $("#li" + newHash).addClass("on")
    window.location.hash = newHash + "," + assetid
    //
    $('#content').empty().load(newUrl, helperFunctions);
    //window.location = theUrl;
}



/*
 function updateHash(asset) {
 var whash = "" + window.location.hash;
 whash = whash.split(',');
 window.location.hash = whash[0] + ',' + asset;
 }
 */
function getEventsToRender()
{
    var events = []
    //Log.info("getEventsToRender-> has year(" + eventOptions.year + ")" + tab.hasYearEvent(eventOptions.year))
    if (tab.hasYearEvent(eventOptions.year)) 
    {
        var eventYear = tab.getYearEvents(eventOptions.year)
        //
        //Log.info("getEventsToRender:" + eventYear)
        if (eventOptions.timeFrame == "past") 
        {
            Log.info("renderWithOptions -> get Past Events")
            events = eventYear.getPast()
        }
        else if (eventOptions.timeFrame == "future") 
        {
            Log.info("getEventsToRender -> get future Events")
            events = eventYear.getFuture()
        }
        else if (eventOptions.timeFrame == "notpast") 
        {
            //events = eventYear.getCurrent().concat(eventYear.getFuture())
            events = eventYear.getEventByState(eventOptions.state)
        }
        else 
        {
            Log.info("getEventsToRender -> get current Events")
            events = eventYear.getCurrent()
        }
    }
    
    //Log.info("getEventsToRender -> render thses events" + events)
    return events
}



function getRenderer()
{
    var theYear = new Date().getFullYear()
    var rendererClass
    var rendersMap = {}
    rendersMap["installation"] = {}
    rendersMap.installation["past"] = RenderPastInstallationEvents
    rendersMap.installation["current"] = RenderUpcomingInstallationEvents
    rendersMap.installation["future"] = RenderUpcomingInstallationEvents
    rendersMap["session"] = {}
    rendersMap.session["past"] = RenderUpcomingSessionEvents
    rendersMap.session["current"] = RenderUpcomingSessionEvents
    rendersMap.session["future"] = RenderUpcomingSessionEvents
    rendersMap.session["notpast"] = RenderUpcomingSessionEvents
    rendersMap["performance"] = {}
    rendersMap.performance["past"] = RenderPastPerformanceEvents
    rendersMap.performance["current"] = RenderUpcomingPerformanceEvents
    rendersMap.performance["future"] = RenderUpcomingPerformanceEvents
    if (theYear == eventOptions.year) 
    {
        Log.info("tab.eventType:" + tab.eventType)
        Log.info("eventOptions.timeFrame:" + eventOptions.timeFrame)
        rendererClass = rendersMap[tab.eventType][eventOptions.timeFrame]
    }
    else 
    {
        //Log.info("renderWithOptions -> get ")
        rendererClass = rendersMap[tab.eventType]["past"]
    }
    Log.info(rendererClass)
    
    return new rendererClass()
}



function renderWithOptions()
{
   // Log.info("*********renderWithOptions*********")
    var renderer = getRenderer()
    var events = getEventsToRender()
    Log.info("render events:" + events.length)
    var eventHTML
    if (events.length > 0) 
    {
        eventHTML = renderer.render(events)
    }
    else 
    {
        eventHTML = defaultEventsContent()
    }
    //Log.info("eventHTML:" + eventHTML)
    addEventsToPage(eventHTML)
    attachEventPageUI()
}



function addEventsToPage(eventHTML)
{
    Log.info("addEventsToPage(events)")
    var insertPoint = $("#currentEvent");
    insertPoint.empty();
    insertPoint.append(eventHTML)
}



function attachEventPageUI()
{
    ui_ExpandImagePopup = $("#imagewrapper")
    ui_ExpandImage = $("#extendimage > img")
    $(".dates a").click(clickEventDate)
    $(".expandImage").click(clickExpandImage)
    $(".eventlinks").click(handleLinkToMedia)
    // this block attaches the RSVP form
    $(".date>a").addClass("rsvp")
    $(".date>a").click(openRSVP)
    //$("a.rsvp").click(openRSVP)
    attachRSVPUI()
    //
    hideExpandImageOverlay()
}



/********************************************
 *  Event Date Functions
 ********************************************/
function clickEventDate(event)
{
    event.preventDefault();
    var linkText = $(event.target).attr("href")
    var hash = linkText.split("#")[1];
    var id = hash.split(",")[0];
    var fullId = hash.split(",")[1];
    var eventData = getEventDataFromID(fullId)
    var avEvent = eventData.event
    var eventDate = eventData.date
    Log.info("clickEventDate(" + id + ")");
    // update date titles and details
    $(event.target).addClass('on').siblings('.on').removeClass('on');
    $(event.target).siblings('.date').eq(id).addClass('on')
    $(event.target).parent().siblings('.date').removeClass('on').eq(id).addClass('on')
    // update thumbnail and expand
    var eventDiv = $(event.target).parent().parent().parent();
	//var eventDiv = $(event.target).parentsUntil(".event")
	Log.info("eventDiv.hasClass('event'):"+eventDiv.hasClass('event'))
    var imageUrl
   
    if (eventDate.eventThumbNailImage.length > 0) 
    {
        Log.info("change thumnail image to:" + eventDate.eventThumbNailImage)
	    imageUrl = eventDate.eventThumbNailImage;
    }
    else 
    {
        imageUrl = blankimageUrl
    }
    $(eventDiv).children('.flyer').children('img').attr("src", imageUrl)
	Log.info("eventDiv.children.length:"+eventDiv.children.length)
    if (eventDate.showExpandImage()) 
    {
        Log.info("change detail image to:" + eventDate.eventDetailImage)
        $(eventDiv).children('.flyer').children('.expandImage').removeClass('off').attr("href", eventDate.eventDetailImage)
        //$(eventDiv).children('.flyer').children('.expandImage').attr("href",eventDate.eventDetailImage )
    }
    else 
    {
        $(eventDiv).children('.flyer').children('.expandImage').addClass('off')
    }
    
    return false;
}



function getEventDataFromID(fulleventId)
{
    var eventId = fulleventId.split("-")[0];
    var dateId = fulleventId.split("-")[1];
    var year = tab.getYearEvents(eventOptions.year)
    var avEvent = year.getEvent(eventId)
    var eventDate = avEvent.getEventDate(dateId)
    var obj = {}
    obj.event = avEvent;
    obj.date = eventDate;
    
    return obj;
}

function getEventDateFromEventId(eventId){
	 var year = tab.getYearEvents(eventOptions.year)
	 var event = year.getEventDateByEventId(eventId)
	 return event
}


function clickExpandImage(event)
{
    event.preventDefault();
    Log.info("clickExpandImage(" + event.target.href + ")");
    positionImage()
    $(ui_ExpandImage).attr("src", event.target.href)
    showExpandImageOverlay()
    $(ui_cover).click(hideExpandImageOverlay)
}

function showExpandImageOverlay()
{
    Log.info("showExpandImageOverlay()")
    popupStatus = 1;
    if (ui_cover.hasClass(displayHiddenClass)) 
    {
        Log.info("showExpandImageOverlay()-> remove class '" + displayHiddenClass + "' from ui_cover")
        ui_cover.removeClass(displayHiddenClass);
    }
    // this should have already been removed
    if (ui_ExpandImagePopup.hasClass(displayHiddenClass)) 
    {
        Log.warn("showExpandImageOverlay-> ui_popup should have already had its '" + displayHiddenClass + "' class removed")
        ui_ExpandImagePopup.removeClass(displayHiddenClass);
    }
    //ui_cover.fadeTo("slow", 0.7);
    ui_ExpandImagePopup.fadeIn(1000);
    ui_ExpandImage.click(hideExpandImageOverlay)
}



function hideExpandImageOverlay()
{
    Log.info("hideExpandImageOverlay()")
    //ui_cover.fadeOut("fast");
    if (!ui_cover.hasClass(displayHiddenClass)) 
    {
        Log.info("hideOverlay()-> add '" + displayHiddenClass + "' from ui_cover")
        ui_cover.addClass(displayHiddenClass);
    }
    ui_ExpandImagePopup.fadeOut("fast", completeHide);
}



function positionImage()
{
    //var newMargin = ui_ExpandImagePopup.offset().top + rsvpDialogMarginTop
    var newMargin = ui_ExpandImagePopup.offset().top
    // IE 7 cannot handle negative padding
    if (newMargin < 0) 
    {
        newMargin = 0
    }
    ui_ExpandImagePopup.css("padding-top", newMargin + "px")
}



/* RSVP Popup */
// page elements
var ui_popup
var ui_dialog
var ui_cover
var ui_eventitle
var ui_flyer
var ui_what
var ui_who
var ui_where
var ui_when
var ui_evetname
var ui_submit
var ui_close
var ui_form
// CSS classname var
var disaplyNoneClass
// Style Properties
var rsvpDialogMarginTop = 100
function attachRSVPUI()
{
    Log.info("attachRSVPUI()")
    ui_popup = $("#rsvpwrapper");
    ui_dialog = $("#rsvpdialog");
    ui_formcontent = $("#formcontent");
    ui_successcontent = $("#successcontent");
    ui_errorcontent = $("#errorcontent");
    ui_cover = $(".modal");
    ui_eventitle = $("#eventtitle");
    ui_flyer = $("#flyer");
    ui_what = $("#what");
    ui_who = $("#who");
    ui_where = $("#where");
    ui_when = $("#when");
    ui_evetname = $("#eventname");
    ui_close = $("#close");
    ui_form = $("#rsvpform");
    ui_submit = $("#formsubmit");
    //
    displayHiddenClass = "rsvpoff"
    displayNoneClass = "rsvpnone"
    //
    ui_close.click(closeRVSPForm)
    ui_submit.click(submitRSVPForm)
    hideOverlay();
}


function buildRSVPDialog()
{
}

function log(msg)
{
	Log.info(msg)		
}
function doSubmit(theData)
{
	var flashvars = theData
	var params = {};
	var attributes = {};
	var protocol
	params = {
		wmode: "transparent",
		allowscriptaccess: "always"
	};
	// https://secure.staging.scion.com/rsvp/secureURLRequest.swf
	// https://secure.staging.scion.com/ScionAV/rsvpServlet?
	var relativeUrl = "/ScionAV/rsvpServlet"
	var host = window.location.host
	//var host = "www.scionav.com"
	if (host.indexOf("staging")>-1){
		protocol = "https://secure.staging.scion.com"
	} else {
		protocol = "https://secure.scion.com"
	}
	var theUrl = protocol+relativeUrl
	Log.info("Make the RSVP call to:"+theUrl)
	flashvars.url = theUrl
	flashvars.onSuccess = "doRSVPSuccess"
	flashvars.onError = "showError"
	relativeUrl = "/rsvp/secureURLRequest.swf"
	theUrl = protocol + relativeUrl
	Log.info("embed Flash from :"+theUrl)
	$(".imageblock").append("<div id='req'></div>")
	swfobject.embedSWF(theUrl, "req", "1", "1", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
}

function showOverlay()
{
    Log.info("showOverlay()")
    popupStatus = 1;
    if (ui_cover.hasClass(displayHiddenClass)) 
    {
        Log.info("showOverlay()-> remove class '" + displayHiddenClass + "' from ui_cover")
        ui_cover.removeClass(displayHiddenClass);
    }
    // this should have already been removed
    if (ui_popup.hasClass(displayHiddenClass)) 
    {
        Log.warn("showOverlay-> ui_popup should have already had its '" + displayHiddenClass + "' class removed")
        ui_popup.removeClass(displayHiddenClass);
    }
    //ui_cover.fadeTo("slow", 0.7);
    ui_popup.fadeIn(1000);
}



function hideOverlay()
{
    Log.info("hideOverlay()")
	swfobject.removeSWF("emailerror")
    //ui_cover.fadeOut("fast");
    if (!ui_cover.hasClass(displayHiddenClass)) 
    {
        Log.info("hideOverlay()-> add '" + displayHiddenClass + "' from ui_cover")
        ui_cover.addClass(displayHiddenClass);
    }
    ui_popup.fadeOut("fast", completeHide);
	swfobject.removeSWF("req")
	$("#req").remove()
}



function completeHide()
{
    // remove off so popup can fade on
    if (ui_popup.hasClass(displayHiddenClass)) 
    {
        ui_popup.removeClass(displayHiddenClass)
    }
}



function getEventData(eventid)
{
    var eventData = getEventDataFromID(eventid)
    var avEvent = eventData.event
    var eventDate = eventData.date
    var eventObj = {};
    //eventObj.title = project.projectName + "/" + avEvent.eventTourName.replace(/ /g, "_") + "/" + eventDate.eventTitle;
    eventObj.title = project.projectName + " / " + avEvent.eventTourName + " / " + eventDate.eventTitle;
	eventObj.what = project.projectName;
    eventObj.who = avEvent.eventTourName;
    eventObj.where = eventDate.eventVenue + "<br />" + eventDate.eventAddress + "<br />" + eventDate.eventCity;
    eventObj.when = eventDate.eventStartDate;
    eventObj.flyer = eventDate.eventThumbNailImage;
    eventObj.ename = eventDate.eventTitle;
    eventObj.ages = eventDate.eventAge;
    eventObj.eventId = eventDate.eventId;
	eventObj.eventAddress = eventDate.eventAddress;
	eventObj.eventCity = eventDate.eventCity;
	eventObj.eventState = eventDate.eventState;
	eventObj.eventTime = eventDate.eventTime;
	eventObj.eventCapacity = eventDate.eventCapacity;
	//
	eventObj.rsvpStartDate = formatRSVPDateAsString(eventDate.rsvp_s_Date)
	eventObj.rsvpEndDate = formatRSVPDateAsString(eventDate.rsvp_e_Date)
	
	// 
    return eventObj
}
function formatRSVPDateAsString(dateObj){
	var str = ""
	var d = dateObj
	var year = d.getUTCFullYear()
	var month = d.getUTCMonth()+1
	var date = d.getUTCDate()
	var hour = d.getUTCHours()
	var minute = d.getUTCMinutes()
	return month.toString() + "/" + date.toString() +"/" + year.toString()+" "+hour.toString()+":"+minute.toString()
}

function positionForm()
{
    var newMargin = ui_popup.offset().top + rsvpDialogMarginTop
    ui_dialog.css("padding-top", newMargin + "px")
}



function populateForm(){
	data = currentEvent;
    ui_eventitle.text(data.title);
    ui_flyer.attr({
        "src": data.flyer
    });
    ui_what.text(data.what);
    ui_who.text(data.who);
    ui_where.html(data.where);
    ui_when.text(data.when);
    // if there is ages data, add ages to form
    Log.info('$("#where").length:' + $("#where").length);
    if (data.ages.length > 0) 
    {
        //
        if ($("#ages").length < 1) 
        {
            Log.info("populateForm: add ages");
            var agesitem = '<div class="infoitem"><div class="label">Ages:</div><div class="data" id="ages">' + data.ages + '</div></div>';
            Log.info($("#infoblock").length);
            $(".infoblock").append(agesitem);
        }
        else 
        {
            Log.info("populateForm: use ages")
            $("#ages").text(data.ages)
        }
    }
    ui_evetname.attr({
        "value": data.eventId
    });
	Log.info('$("#sslrsvp").length:'+$("sslrsvp").length);
}

function updateCurrentEvent(linkId){
	Log.info("updateCurrentEvent(" + linkId + ")");
    var data = getEventData(linkId);
	currentEvent = data;
}

function openRSVP(event)
{
    // TODO: This needs to be redone and move event options and events to a persistant object

	event.preventDefault();
    Log.info("open RSVP " + event.target + "");
    var linkText = $(event.target).attr("href");
    var linkid = linkText.split("#")[1];
    Log.info("linkText " + linkText + " id:" + linkid);
	updateCurrentEvent(linkid);
	doEventAvailableTest()

}

function doEventAvailableTest(){
	    var data = {}
        data.eventId = currentEvent.eventId
		data.eventCapacity = currentEvent.eventCapacity
		data.startEventDate = currentEvent.rsvpStartDate
		data.endEventDate = currentEvent.rsvpEndDate
		
		var relativeUrl = "/ScionAV/rsvpServlet"
		//var relativeUrl = "http://devcpd3.scionav.com/ScionAV/rsvpServlet"
		// debug uncomment below to actually do the check

	  $.ajax({
        url: relativeUrl,
        type: 'get',
        dataType: 'script',
        data: data,
        success: parseResponse,
        error: showError,
        timeout: 3000
    });
    // */
	// remove the following line for production
	//doSuccess(0)
}
function doSuccess(val){
	clearForm();
   	updateDialogState(val)
    positionForm();
	
    populateForm();
    showOverlay();
}
function clearForm()
{
    ui_evetname.attr({
        "value": ""
    });
    var allInputs = $(":input");
    Log.info("allInputs:" + allInputs.length)
    for (var i = 0; i < allInputs.length; i++) 
    {
        var input = allInputs[i]
        Log.info("input:" + input)
        if (input["value"]) 
        {
            input["value"] = ""
        }
    }
    var fnameerror = $("#fnameerror")
    var lnameerror = $("#lnameerror")
    var emailerror = $("#emailerror")
    hideInputError(fnameerror, "rsvpoff")
    hideInputError(lnameerror, "rsvpoff")
    hideInputError(emailerror, "rsvpoff")
}



function closeRVSPForm(event)
{
    event.preventDefault();
    Log.info("close RSVP #" + event.target.id + "");
    clearForm();
    hideOverlay();
}



function submitRSVPForm(event)
{
    event.preventDefault();
    var preventSubmit = false;
    var fname = $("#firstname")
    var fnameerror = $("#fnameerror")
    var lname = $("#lastname")
    var lnameerror = $("#lnameerror")
    var email = $("#email")
    var emailerror = $("#emailerror")
    var eventname = $("#eventname")
    Log.info("lnameerror:" + lnameerror)
    Log.info('isNameValid(fname.attr("value")):' + (isNameValid(fname.attr("value"))))
    if (isNameValid(fname.attr("value"))) 
    {
        hideInputError(fnameerror, "rsvpoff")
    }
    else 
    {
        preventSubmit = true
        showInputError(fnameerror, "rsvpoff", "Your first name is required")
    }
    if (isNameValid(lname.attr("value"))) 
    {
        hideInputError(lnameerror, "rsvpoff")
    }
    else 
    {
        preventSubmit = true
        showInputError(lnameerror, "rsvpoff", "Your last name is required")
    }
    if (isEmailValid(email.attr("value"))) 
    {
        hideInputError(emailerror, "rsvpoff")
    }
    else 
    {
        preventSubmit = true
        showInputError(emailerror, "rsvpoff", "A valid email address is required")
    }
    if (!preventSubmit) 
    {
        //Log.info("submitRVSPForm name:" + ui_form.serialize())
		//
		//var evt = getEventDateFromEventId(eventname.attr("value"))
        var data = {}
		data.eventTitle = currentEvent.title
        data.firstName = fname.attr("value")
        data.lastName = lname.attr("value")
        data.email = email.attr("value")
        data.eventId = currentEvent.eventId
		data.eventDate = currentEvent.eventStartDate
		data.eventTime = currentEvent.eventTime
		data.eventAddress1 = currentEvent.eventAddress
		data.eventCity = currentEvent.eventCity
		data.eventState = currentEvent.eventState
		data.eventCapacity = currentEvent.eventCapacity
		data.startEventDate = currentEvent.rsvpStartDate
		data.endEventDate = currentEvent.rsvpEndDate
        doSubmit(data);
    }

    return !preventSubmit
}



function isNameValid(str)
{
    var isValid = false
    if (str) 
    {
        if (str.length > 1) 
        {
            isValid = true
        }
    }
    
    return isValid
}



function isEmailValid(str)
{
    var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
    
    return (filter.test(str))
}



function showInputError(element, className, msg)
{
    if (element && className) 
    {
        if (element.hasClass(className)) 
        {
            element.removeClass(className)
        }
        element.text(msg)
    }
}



function hideInputError(element, className)
{
    if (element && className) 
    {
        if (!element.hasClass(className)) 
        {
            element.addClass(className)
        }
        element.html("&nbsp;")
    }
}



function validateForm()
{
    Log.info("validate")
    
    return false;
}

function updateDialogState(val){
	 if (val == 1) 
    {
        showDialogState("success")
    }
	else if (val == 2){
		showDialogState("form")
	}
    else if (val == 3)
    {
        showDialogState("closed")
    } else {
		showDialogState("error")
	}
}



function doRSVPSuccess(data)
{
	Log.info(data)
	var dataSplit = data.split("(")
	var val = parseInt(dataSplit[1])
    updateDialogState(val)
}



function parseResponse(responseXML)
{
    Log.info("response:" + responseXML)
    /*
     var success = responseXML.getElementsByTagName("success").length
     if (!success)
     {
     // showDialogState("error")
     }
     else
     {
     //showDialogState("success")
     }
     */
}



//success(data, textStatus, XMLHttpRequest
function showError(XMLHttpRequest, textStatus, errorThrown)
{
    Log.info("form post failed event: XMLHttpRequest: " + XMLHttpRequest)
    Log.info("form post failed event:textStatus: " + textStatus)
    Log.info("form post failed errorThrown: " + errorThrown)
    showDialogState("error")
}



function showDialogState(state)
{
    ui_formcontent.hide()
    ui_successcontent.hide()
    ui_errorcontent.hide()
	if($("#rsvclosed").length<1){
		$("#errorcontent").after(' <div id="rsvclosed"><img src="../../images/rsvpform/rsvp_closed.gif" width="495" height="272" alt="Sorry, Registration for this event is closed" /></div>')
	}
	$("#rsvclosed").hide()
    switch (state) {
        case "form":
            ui_formcontent.show();
            break;
        case "success":
            ui_successcontent.show();
            break;
        case "error":
			//$(eventDiv).children('.flyer').children('img').attr("src", imageUrl)
            ui_errorcontent.show();
            break;
		case "closed":
           $("#rsvclosed").show();
            break;
		case "none":
			//no-op
			break;
        default:
            ui_formcontent.show();
    }
}



$.fn.hoverClass = function(classname)
{
    
    return this.hover(function()
    {
        $(this).addClass(classname);
    }, function()
    {
        $(this).removeClass(classname);
    });
};
