/*
	$HeadURL: http://scm.corp.convio.com/svn/convio/customer/trunk/npt/site_data/899/00001899/static_data/js/vm_stag_jukebox.js $
	$Id: vm_stag_jukebox.js 193201 2011-08-04 14:56:35Z pjoiner@convio.com $
*/
Y.namespace ("Convio.vm.jukebox");
/* vars */

Y.Convio.vm.jukebox.selectedEventId = null;
Y.Convio.vm.jukebox.selectedJobId = null;
Y.Convio.vm.jukebox.selectedShiftId = null;

Y.Convio.vm.jukebox.eventListPageOffset = null;
Y.Convio.vm.jukebox.jobListPageOffset = null;
Y.Convio.vm.jukebox.shiftListPageOffset = null;

Y.Convio.vm.jukebox.eventListPageMax = null;
Y.Convio.vm.jukebox.jobListPageMax = null;
Y.Convio.vm.jukebox.shiftListPageMax = null;

/* constants */

Y.Convio.vm.jukebox.EVENT_ROW_ID_PREFIX = "vm_event_row_";
Y.Convio.vm.jukebox.JOB_ROW_ID_PREFIX = "vm_job_row_";
Y.Convio.vm.jukebox.SHIFT_ROW_ID_PREFIX = "vm_shift_row_";

Y.Convio.vm.jukebox.LIST_PAGE_SIZE = null;
Y.Convio.vm.jukebox.FETCH_URL = null;
Y.Convio.vm.jukebox.SIGNUP_URL = null;
Y.Convio.vm.jukebox.EVENT_TAGS = null;

/* load function */
function onLoadJukeBox() {

	Y.Convio.vm.jukebox.LIST_PAGE_SIZE = document.getElementById('JukeBoxPageSize').value;
	Y.Convio.vm.jukebox.FETCH_URL = document.getElementById('JukeBoxFetchUrl').value;
	Y.Convio.vm.jukebox.SIGNUP_URL = document.getElementById('JukeBoxSignUpUrl').value;
	Y.Convio.vm.jukebox.EVENT_TAGS = document.getElementById('JukeBoxEventTags').value;	
	
	fetchEventList();	
	
}

/* misc functions */

function clearShiftsList() {
	document.getElementById('ShiftsList').innerHTML = "";	
}

function clearJobsList() {
	document.getElementById('JobsList').innerHTML = "";		
}

function clearEventsList() {
	document.getElementById('EventsList').innerHTML = "";		
}

function clearPreviewPane(clearContent) {
	
	if(clearContent != null) {
		document.getElementById('VMUserJukeBoxPreviewPane').innerHTML = clearContent;		
	}
	else {
		document.getElementById('VMUserJukeBoxPreviewPane').innerHTML = '<img src="../images/progress/indicator_small.gif"/>';
	}
}

function updateSelected(eventId, jobId, shiftId) {
	
	if(eventId) {
		YAHOO.util.Dom.removeClass(Y.Convio.vm.jukebox.EVENT_ROW_ID_PREFIX + Y.Convio.vm.jukebox.selectedEventId, 'SelectedEvent');
		YAHOO.util.Dom.addClass(Y.Convio.vm.jukebox.EVENT_ROW_ID_PREFIX + eventId, 'SelectedEvent');
		Y.Convio.vm.jukebox.selectedEventId = eventId;
		Y.Convio.vm.jukebox.selectedJobId = null;
		Y.Convio.vm.jukebox.selectedShiftId = null;
		
		// clear out shifts
		clearShiftsList();
		activateSignUpUrl(false);				
	}
	
	if(jobId) {
		YAHOO.util.Dom.removeClass(Y.Convio.vm.jukebox.JOB_ROW_ID_PREFIX + Y.Convio.vm.jukebox.selectedJobId, 'SelectedJob');
		YAHOO.util.Dom.addClass(Y.Convio.vm.jukebox.JOB_ROW_ID_PREFIX + jobId, 'SelectedJob');		
		Y.Convio.vm.jukebox.selectedJobId = jobId;
		Y.Convio.vm.jukebox.selectedShiftId = null;
		
		activateSignUpUrl(false);		
	}
	
	if(shiftId) {
		YAHOO.util.Dom.removeClass(Y.Convio.vm.jukebox.SHIFT_ROW_ID_PREFIX + Y.Convio.vm.jukebox.selectedShiftId, 'SelectedShift');
		YAHOO.util.Dom.addClass(Y.Convio.vm.jukebox.SHIFT_ROW_ID_PREFIX + shiftId, 'SelectedShift');		
		Y.Convio.vm.jukebox.selectedShiftId = shiftId;
		
		activateSignUpUrl(true);

	}
}

function activateSignUpUrl(setActive) {

	var signUpUrl = Y.Convio.vm.jukebox.SIGNUP_URL;
	signUpUrl = signUpUrl + '&event_id=' + Y.Convio.vm.jukebox.selectedEventId + '&job_id=' + Y.Convio.vm.jukebox.selectedJobId + '&shift_ids=' + Y.Convio.vm.jukebox.selectedShiftId;
	
	if(setActive) {
		document.getElementById('SignUpLinkContainer').innerHTML = '<div id="SignUpLink" class="Activated">' + '<a class="Activated" href="' + signUpUrl + '">Sign up!</a></div>';
	}
	else {
		document.getElementById('SignUpLinkContainer').innerHTML = '<div id="SignUpLink" class="Deactivated">' + '<span class="Deactivated">Sign up!</span></div>';		
	}
}



/* fetchers */

function fetchEvent(eventId) {
	
	clearPreviewPane();
	
	var postData = 'ajax_action=user_jukebox_get_event&event_id=' + eventId;
	YAHOO.util.Connect.asyncRequest('POST', Y.Convio.vm.jukebox.FETCH_URL, {success: handleFetchEvent, failure:onFailFetch }, postData );	
}

function fetchShift(shiftId) {
	
	clearPreviewPane();
	
	updateSelected(null, null, shiftId);
	
	var postData = 'ajax_action=user_jukebox_get_shift&shift_id=' + shiftId;
	YAHOO.util.Connect.asyncRequest('POST', Y.Convio.vm.jukebox.FETCH_URL, {success: handleFetchShift, failure:onFailFetch }, postData );	
}

function fetchJob(jobId) {
	
	clearPreviewPane();
	
	var postData = 'ajax_action=user_jukebox_get_job&job_id=' + jobId;
	YAHOO.util.Connect.asyncRequest('POST', Y.Convio.vm.jukebox.FETCH_URL, {success: handleFetchJob, failure:onFailFetch }, postData );	
}

function fetchEventList(prev, next) {
	
	clearPreviewPane();	
	clearEventsList();
	
	var postData = 'ajax_action=user_jukebox_list_events' + "&event_tags=" + Y.Convio.vm.jukebox.EVENT_TAGS;
	postData = Y.Convio.vm.common.appendPagingPostData(postData, prev, next, Y.Convio.vm.jukebox.eventListPageOffset, Y.Convio.vm.jukebox.eventListPageMax, Y.Convio.vm.jukebox.LIST_PAGE_SIZE);
	YAHOO.util.Connect.asyncRequest('POST', Y.Convio.vm.jukebox.FETCH_URL, {success: handleFetchEventList , failure:onFailFetch }, postData );
}

function fetchJobList(prev, next, eventId) {

	if(!eventId) {
		return;
	}
	
	clearJobsList();
	
	updateSelected(eventId);	
	fetchEvent(eventId); // paint preview pane	
	
	var postData = 'ajax_action=user_jukebox_list_jobs&event_id=' + eventId + "&event_tags=" + Y.Convio.vm.jukebox.EVENT_TAGS;
	postData = Y.Convio.vm.common.appendPagingPostData(postData, prev, next, Y.Convio.vm.jukebox.jobListPageOffset, Y.Convio.vm.jukebox.jobListPageMax, Y.Convio.vm.jukebox.LIST_PAGE_SIZE);
	YAHOO.util.Connect.asyncRequest('POST', Y.Convio.vm.jukebox.FETCH_URL, {success: handleFetchJobList , failure:onFailFetch }, postData );	
}

function fetchShiftsList(prev, next, jobId) {
	
	if(!jobId) {
		return;
	}	
	
	clearShiftsList();
	
	updateSelected(null, jobId);		
	fetchJob(jobId); // paint preview pane		
	
	var postData = 'ajax_action=user_jukebox_list_shifts&job_id=' + jobId + "&event_tags=" + Y.Convio.vm.jukebox.EVENT_TAGS;
	postData = Y.Convio.vm.common.appendPagingPostData(postData, prev, next, Y.Convio.vm.jukebox.shiftListPageOffset, Y.Convio.vm.jukebox.shiftListPageMax, Y.Convio.vm.jukebox.LIST_PAGE_SIZE);	
	YAHOO.util.Connect.asyncRequest('POST', Y.Convio.vm.jukebox.FETCH_URL, {success: handleFetchShiftsList , failure:onFailFetch }, postData );	
}

/* handlers */

function handleFetchEvent(response) {
	
	var responseJSON = YAHOO.lang.JSON.parse(response.responseText)
	var buf = [];

	buf.push('<span class="PreviewHeader">' + 'EVENT INFORMATION' + '</span>');	
	buf.push('<span class="PreviewEventName">' + responseJSON.event.name + '</span>');
	buf.push('<span class="PreviewEventDescription">' + responseJSON.event.description + '</span>');	
	
	document.getElementById('VMUserJukeBoxPreviewPane').innerHTML = buf.join("");
	
}	
	

function handleFetchJob(response) {
	
	var responseJSON = YAHOO.lang.JSON.parse(response.responseText)
	var buf = [];
	
	buf.push('<span class="PreviewHeader">' + 'JOB INFORMATION' + '</span>');		
	buf.push('<span class="PreviewJobName">' + responseJSON.job.name + '</span>');
	buf.push('<span class="PreviewJobLocationName">' + responseJSON.job.locationName + '</span>');	
	buf.push('<span class="PreviewJobAddress">' + responseJSON.job.address + '</span>');		
	buf.push('<span class="PreviewJobDescription">' + responseJSON.job.description + '</span>');	
	
	document.getElementById('VMUserJukeBoxPreviewPane').innerHTML = buf.join("");
	
}	

function handleFetchShift(response) {
	
	var responseJSON = YAHOO.lang.JSON.parse(response.responseText)
	var buf = [];
	
	buf.push('<span class="PreviewHeader">' + 'SHIFT INFORMATION' + '</span>');

	buf.push('<span class="PreviewShiftName">' + responseJSON.shift.numSlotsOpen + '/' + responseJSON.shift.numSlots + ' team members needed for ' + responseJSON.shift.jobName + '</span>');			
	
	buf.push('<span class="PreviewShiftLocationName">' + responseJSON.shift.locationName + '</span>');	
	buf.push('<span class="PreviewShiftAddress">' + responseJSON.shift.address + '</span>');		
	
	buf.push('<span class="PreviewShiftDate">' + responseJSON.shift.date + '</span>');
	buf.push(' from ');
	buf.push('<span class="PreviewShiftTime">' + responseJSON.shift.startTime + '-' + responseJSON.shift.endTime + '</span>');					
	buf.push('<span class="PreviewShiftAdditionalInfo">' + responseJSON.shift.additionalInfo + '</span>');						
	
	document.getElementById('VMUserJukeBoxPreviewPane').innerHTML = buf.join("");
	
}


function handleFetchShiftsList(response) {
	
	var responseJSON = YAHOO.lang.JSON.parse(response.responseText)
	var shifts = responseJSON.shifts;	
	var buf = [];
	
	Y.Convio.vm.jukebox.shiftListPageOffset = responseJSON.pageOffset;
	Y.Convio.vm.jukebox.shiftListPageMax = Y.Convio.vm.common.calcMaxPages(responseJSON.totalNumResults, Y.Convio.vm.jukebox.LIST_PAGE_SIZE);	
	document.getElementById('ShiftListPageNum').innerHTML = 'page ' + (responseJSON.pageOffset + 1) + '/' + Y.Convio.vm.jukebox.shiftListPageMax;	
	
	buf.push('<ul>');	
	for(var i=0;i<shifts.length;i++) {
		
		buf.push('<li onclick="fetchShift(');
		buf.push(shifts[i].id);
		buf.push(')" ');		
		buf.push('id="' + Y.Convio.vm.jukebox.SHIFT_ROW_ID_PREFIX + shifts[i].id + '" ');				
		
		if(i % 2 == 0) {
			buf.push('class="TrEven">');
		}
		else {
			buf.push('class="TrOdd">');
		}
		
		buf.push('<span class="ShiftDate">' + shifts[i].date + '</span>');
		buf.push('<span class="ShiftDuration"> (' + shifts[i].duration + ') </span>');
		buf.push('at <span class="ShiftStartTime">' + shifts[i].startTime + "</span>");		
		buf.push(' - <span class="ShiftSlotsOpen">' + shifts[i].shiftNumSlotsOpen + '/' + shifts[i].shiftNumSlots + ' needed</span>');				
		buf.push('</li>');
	}
	buf.push('</ul>');	
	
	document.getElementById('ShiftsList').innerHTML = buf.join("");
	
}

function handleFetchEventList(response) {
	
	var responseJSON = YAHOO.lang.JSON.parse(response.responseText)
	var events = responseJSON.events;
	var buf = [];
	
	Y.Convio.vm.jukebox.eventListPageOffset = responseJSON.pageOffset;
	Y.Convio.vm.jukebox.eventListPageMax = Y.Convio.vm.common.calcMaxPages(responseJSON.totalNumResults, Y.Convio.vm.jukebox.LIST_PAGE_SIZE);		
	document.getElementById('EventListPageNum').innerHTML = 'page ' + (responseJSON.pageOffset + 1) + '/' + Y.Convio.vm.jukebox.eventListPageMax;
	
	buf.push('<ul>');
	for(var i=0;i<events.length;i++) {
		
		buf.push('<li onclick="fetchJobList(null,null,');
		buf.push(events[i].id);
		buf.push(')" ');
		buf.push('id="' + Y.Convio.vm.jukebox.EVENT_ROW_ID_PREFIX + events[i].id + '" ');	

		if(i % 2 == 0) {
			buf.push('class="TrEven">');
		}
		else {
			buf.push('class="TrOdd">');
		}
		
		buf.push(events[i].name);
		buf.push('</li>');
	}
	buf.push('</ul>');
	
	document.getElementById('EventsList').innerHTML = buf.join("");
	
	clearPreviewPane('');
	
}	

function handleFetchJobList(response) {
	var responseJSON = YAHOO.lang.JSON.parse(response.responseText)
	var jobs = responseJSON.jobs;
	var buf = [];
	
	Y.Convio.vm.jukebox.jobListPageOffset = responseJSON.pageOffset;
	Y.Convio.vm.jukebox.jobListPageMax = Y.Convio.vm.common.calcMaxPages(responseJSON.totalNumResults, Y.Convio.vm.jukebox.LIST_PAGE_SIZE);			
	document.getElementById('JobListPageNum').innerHTML = 'page ' + (responseJSON.pageOffset + 1) + '/' + Y.Convio.vm.jukebox.jobListPageMax;;	
	
	buf.push('<ul>');	
	for(var i=0;i<jobs.length;i++) {
		
		buf.push('<li onclick="fetchShiftsList(null,null,');
		buf.push(jobs[i].id);
		buf.push(')" ');
		buf.push('id="' + Y.Convio.vm.jukebox.JOB_ROW_ID_PREFIX + jobs[i].id + '" ');						
		
		if(i % 2 == 0) {
			buf.push('class="TrEven">');
		}
		else {
			buf.push('class="TrOdd">');
		}
		
		buf.push(jobs[i].name);
		buf.push('</li>');
	}
	buf.push('</ul>');	
	
	document.getElementById('JobsList').innerHTML = buf.join("");
	
}

function onFailFetch(response) {}	
