HJ.OrganizeVolunteers = Class.create();

HJ.OrganizeVolunteers.prototype = Object.extend(new Af.StepsMaker(), {
	
	initialize: function(listObj, step1TargetContainerId) {
		this.url = {
			"step1":basePageURL + "OrganizeVolunteers.htm",
			"step2":basePageURL + "OrganizeVolunteers.htm",
			"stepPaymentRequest":basePageURL + "PaymentRequestStep.htm",
			"stepPaymentRequestThroughAmazon":basePageURL + "AmazonPaymentRequestStep.htm",
			"step3":basePageURL + "StepsEmails.htm",
			"step4":basePageURL + "OrganizeVolunteersRecipient.htm",
			"stepPaymentAttempt":basePageURL + "PaymentAttemptStep.htm",
			"stepPaymentAttemptThroughAmazon":basePageURL + "AmazonPaymentAttemptStep.htm",
			"step5":basePageURL + "SenderConfirm.htm",
			"step6":basePageURL + "RSVPConfirm.htm"
		};		

		this.targetContainerId = {
			"step1":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,
			"step2":"bodyContainer",
			"stepPaymentRequest":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,		
			"stepPaymentRequestThroughAmazon":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,		
			"step3":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,
			"step4":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,
		    "stepPaymentAttempt":step1TargetContainerId == null ?
		                    "bodyContainer" : step1TargetContainerId,
		    "stepPaymentAttemptThroughAmazon":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,		
			"step5":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,
			"step6":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId			
		};
		
		this.listObj = listObj;

		// Must declare templateType per template		
		this.data = new Array;
		this.data['item'] = new Array;
		this.data['item'][0] = new Object();
			
		this.tl = null;
		//  Row Divs as not to rely on tables for the front end.  
		//  name should match the 
		this.rowDiv = "<div class=\"simpleListItems\"><input type=\"text\" name=\"description\" value=\"\" class=\"dark\"/></div>" +
                 "<span class=\"signUpVolunteerHide\" name=\"helper\"><input disabled=\"disabled\" type=\"hidden\" value=\"Volunteer Name Will Go Here\" class=\"dark\"/></span>" +
                "<div class=\"helperIdHide\" id=\"helperId\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"helperEventIdHide\" id=\"helperEventId\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"listItemUUID\" id=\"listItemUUID\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"volunteerNotesHide\" id=\"volunteerNotes\"><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"driveDelete\"><a href=\"#\"><span class=\"closeBtn\" title=\"Delete\"></span></a></div>" +
				"<div class=\"AddItem\" valign=\"middle;\"><a href=\"#\"><img src=\"image/icon_add.gif\" border=\"0\" class=\"addIcon\">Add item</a></div>";

		this.rowDivHelper = "<div class=\"signUpItemBig\"><input type=\"text\" name=\"description\" value=\"\" class=\"dark\"/></div>" +
				"<div class=\"signUpVolunteer\" name=\"helper\" ><input type=\"text\" value=\"Volunteer Name Will Go Here\" class=\"\"/></div>" +
                "<div class=\"helperId\" id=\"helperId\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"helperEventId\" id=\"helperEventId\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"listItemUUID\" id=\"listItemUUID\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"volunteerNotes\" id=\"volunteerNotes\" ><input type=\"text\" value=\"\" class=\"\"/></div>";

		this.rowDiv2 = "<span name=\"description\" class=\"signUpItemBig\"></span>" +
                    "<span class=\"signUpVolunteer\" name=\"helper\"><input disabled=\"disabled\" type=\"text\" value=\"\" class=\"dark\"/></span>" +
                    "<span name=\"removeHelper\" ><a href=\"#\" style=\"display:none;\">Remove</a></span>" +
                "<div class=\"helperId\" id=\"helperId\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
                "<div class=\"helperEventId\" id=\"helperEventId\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" + 
                "<div class=\"listItemUUID\" id=\"listItemUUID\" ><input type=\"hidden\" value=\"\" class=\"\"/></div>" +
    			"<span class=\"volunteerNotes\" name=\"notes\"><input type=\"text\" value=\"\" class=\"dark\"/></span>";
                

		this.listFields = new Array('lastEmailString', 'lastEmailSubject',
                     'lastEmailNote', 'fromTime', 'toTime', 'startDT', 'notes',
					 'helperEmail',
                     'collectPayments', 'suggestedAmount', 
                     'helperCanModifyAmount', 'showFeesToHelper', 'nextStep',
                     'notifyOrganizerOnSignup', 'col1Name', 'col2Name', 'col3Name', 'eventReminderDay', 'allowVolunteerChanges');
		this.listItemFields = new Array('description',
                        'helper', 'helperId', 'helperEventId', 'helperEmail', 'UUID', 'notes');
		this.templateType = HJ.TEMPLATE_TYPE_ORGANIZE_VOLUNTEERS;
		this.itemCount = 0;
		
		this.initializeSelectedStepFromQueryString();		
		this.setDataObject();
	},
	
	//  Map Workspace data to local data..
	setDataObject: function() {
		if (this.listObj!=null)	{	
			this.data = this.listObj;
			this.doInitialRoute();
			
			var milliStart = null;
			if (this.data['startDT'] != null && this.data['startDT'] != "") {
				milliStart = new Date(parseInt(this.data['startDT']));
				this.data['startDT'] = milliStart.getMonth() + 1 + "/" + milliStart.getDate()
	            + "/" + milliStart.getFullYear();
			}
			
		}
	},	

	//  Save Step 1 to work locally.
	saveHoldData: function() {								
	
		if (this.selectedStep != 4) {
			var inputs = document.getElementsByName('directData');
		  	for (var i=0; i<inputs.length; i++) {
		  		this.data[inputs[i].id] = inputs[i].value;		  	
		  	}	
		  	
		  	if (this.data['startDT']==null || this.data['startDT']=='undefined') {
                this.data['startDT']='';
		  	}
	  	
		  	var notifyOrganizerOnSignupElem = document.getElementById('notifyOrganizerOnSignup');
			if (notifyOrganizerOnSignupElem != null && notifyOrganizerOnSignupElem.checked) {
				this.data['notifyOrganizerOnSignup'] = "true";
			} else {
				this.data['notifyOrganizerOnSignup'] = "false";
			}

		  	var allowVolunteerChangesElem = document.getElementById('allowVolunteerChanges');
			if (allowVolunteerChangesElem != null && allowVolunteerChangesElem.checked) {
				this.data['allowVolunteerChanges'] = "true";
			} else {
				this.data['allowVolunteerChanges'] = "false";
			}

		  	var eventReminderDay = document.getElementById('eventReminderDay');
			if (eventReminderDay != null && eventReminderDay.selectedIndex >= 0 ) {
				this.data['eventReminderDay'] = eventReminderDay.options[eventReminderDay.selectedIndex].value;
			} else {
				this.data['eventReminderDay'] = 3; // default value
			}
		
		  	var textareas = document.getElementsByTagName('textarea');
		  	for (var i=0; i<textareas.length; i++) {
		  		this.data[textareas[i].id] = textareas[i].value;	  	
		  	}	
		  	
		  	this.data['col1Name'] = document.getElementById('organizeVolunteerHeadingField').value;
		  	this.data['col2Name'] = document.getElementById('helperHeadingField').value;

		  	this.data['col3Name'] = document.getElementById('volunteerNotesHeadingField').value;
		}
		//  listitems
		var listDivs = this.listContainer.childNodes;
		var listData = new Array();
		var idx = 0;
		for (var i=0; i<listDivs.length; i++) {
			var listItem = listDivs[i];
			if (listItem.tagName != 'DIV') {
				continue;
			}
			var listItemInputs = listItem.getElementsByTagName('input');
			if (this.selectedStep == 4) {
				this.data['item'][idx].notes = listItemInputs[4].value;
				idx++;
			} else {
				var rowData = new Object();
				rowData['description'] = listItemInputs[0].value;
				rowData['helper'] = listItemInputs[1].value;
				rowData['helperId'] = listItemInputs[2].value;
				rowData['helperEventId'] = listItemInputs[3].value;
				rowData['helperEmail'] = this.data['item'][idx++].helperEmail;
				rowData['UUID'] = listItemInputs[4].value;
				rowData['notes'] = listItemInputs[5].value;
				listData.push(rowData);
			}
		} 
		if (this.selectedStep != 4) {
			this.data['item'] = listData;
		}
 	},

	//  Step 1
	loadStep1:function() {
	   	this.helperHeading = document.getElementById('helperHeading');
	   	this.notes = document.getElementById('notes');
		this.selectedStep == 1
                ? this.helperHeading.style.display = 'none'
                : this.helperHeading.style.display = 'block';
	  
	    this.helperNotesHeading = document.getElementById('volunteerNotesHeading');
		this.selectedStep == 1 ? this.helperNotesHeading.className='hide' : null;

		if ( this.data['col1Name'] != null || this.data['col1Name'] != undefined ) {
			document.getElementById('organizeVolunteerHeadingField').value = this.data['col1Name'];
		}
		
		if ( this.data['col2Name'] != null || this.data['col2Name'] != undefined ) {
			document.getElementById('helperHeadingField').value = this.data['col2Name'];
		}
		  	
		if ( this.data['col3Name'] != null || this.data['col3Name'] != undefined ) {
			document.getElementById('volunteerNotesHeadingField').value = this.data['col3Name'];
		}

		this.startDT = document.getElementById('startDT');
		this.startCal = document.getElementById('startCal');
		this.startDT.onclick = this.showMiniCal.bindAsEventListener(this);
		this.startDT.onfocus = this.showMiniCal.bindAsEventListener(this);
		this.startCal.onclick = this.showMiniCal.bindAsEventListener(this);

		this.fromTime = document.getElementById('fromTime');
		this.fromTimePicker = document.getElementById('fromTimePicker');
		
		this.toTime = document.getElementById('toTime');
		this.toTimePicker = document.getElementById('toTimePicker');


		// Set timePicker..	
		var timePicker = new Af.TimeDropDown(this.fromTime,
                                this.fromTimePicker, this, null,null);
		//timePicker.setValue("570");	
		
		// Set timePicker..	
		var timePicker2 = new Af.TimeDropDown(this.toTime,
                                this.toTimePicker, this, null,null);
		//timePicker2.setValue("570");	

		// Load directData info
		var inputs = document.getElementsByName('directData');
 		for (var i=0; i<inputs.length; i++) {
 			var elem = inputs[i];
			if (this.data[elem.id]!=null){
 				elem.value = this.data[elem.id]; 			
 			} else {
 				elem.value = '';
 			}
 		}
		
		
		this.fromTime.value == '' ? timePicker.setValue('570'):null;
		this.toTime.value == '' ? timePicker2.setValue('570'):null;

		this.signupNameFieldElement = document.getElementById('name');

		Element.extend(this.signupNameFieldElement);
		Event.observe(this.signupNameFieldElement, 'keypress',
             this.processSignupNameFieldKeyPress.bindAsEventListener(this));
        
        Event.observe(this.notes, 'click',
             this.eraseDefaultField.bindAsEventListener(this));
        Event.observe(this.notes, 'keypress',
             this.eraseDefaultField.bindAsEventListener(this));
        
		
		//  Container Div for itemlists..
        //  Not universal since step3 doesn't use it
		this.listContainer = document.getElementById('listItems');
		
		//  Universal Nav bars - resides in Step 1 and remains
		this.sideNavBar = document.getElementById('sideNavBar');
		
	
		this.navDivs = this.sideNavBar.getElementsByTagName('div');
		for (var i=0; i<this.navDivs.length; i++) {
			this.navDivs[i].onclick =
                    this.navBarClicked.bindAsEventListener(this);
		}
		
		if (this.data['name']!=null){
			document.getElementById('name').value = this.data['name'];						
		}

		this.notes.value == '' ?
        	this.notes.className = 'organizeNotesDark':
        	this.notes.className = 'dark';		
		
		var notifyOrganizerOnSignupElem = document.getElementById('notifyOrganizerOnSignup');
		if (notifyOrganizerOnSignupElem != null) {
			if (this.data['notifyOrganizerOnSignup'] != null && 
				this.data['notifyOrganizerOnSignup'] != undefined &&
				this.data['notifyOrganizerOnSignup'] == "true") {
				notifyOrganizerOnSignupElem.checked = true;
			} else {
				notifyOrganizerOnSignupElem.checked = false;
			}
		}

		var allowVolunteerChangesElem = document.getElementById('allowVolunteerChanges');
		if (allowVolunteerChangesElem != null) 
		{
			if (this.data['allowVolunteerChanges'] != null && 
				this.data['allowVolunteerChanges'] != undefined &&
				this.data['allowVolunteerChanges'] == "true") {
				allowVolunteerChangesElem.checked = true;
			} else {
				allowVolunteerChangesElem.checked = false;
			}
		}

		var eventReminderDay = document.getElementById('eventReminderDay');
		if (eventReminderDay != null) 
		{
			if (this.data['eventReminderDay'] != null && 
				this.data['eventReminderDay'] != undefined) {
				eventReminderDay.selectedIndex = this.data['eventReminderDay'] - 1;
			} else {
				eventReminderDay.selectedIndex = 2;
			}
			eventReminderDay.onchange = this.checkEventReminderDay.bind(this);
		}

		this.itemCount = 0;			
		if (this.data['item']!=null) {
			var items = this.data['item'];
			for (var i=0; i<items.length; i++) {
				this.addItem(items[i], i);	
			}				
		} else {
			this.addItem('first');
		}	
		document.getElementById('name').focus();

		//if list is saved hide reminder option
		// XXX lets ask to confirm since date could be change
		//if ( this.data['UUID'] != null )
		//{
		//	var reminderOptionsElem = document.getElementById("sendReminderOptions");
		//	if(reminderOptionsElem != null)
		//		reminderOptionsElem.style.display = "None";

		//}
	},	
	// Step 2 - Step 3 is email and universal
	loadStep2:function() {			

		this.loadStep1();

		if (this.sideNavBar!=null)
			this.sideNavBar.className = 'navStep2';

		this.backButton.style.display = 'block';
		
		document.getElementById('topInstructions').innerHTML = "Take a moment to review. Pre-assign participants by clicking in the volunteer field.";
	},

	loadStep4:function() {
		
		if (this.data['name']!=null || this.data['name']!=undefined) {
			document.getElementById('name').innerHTML = this.data['name'];
		}
		
		if (this.data['notes']!=null || this.data['notes']!=undefined) {
			document.getElementById('notes').innerHTML = textDisplay(this.data['notes']);
		}
		
		if (this.data['fromTime']!=null || this.data['fromTime']!=undefined) {
			document.getElementById('fromTime').innerHTML = this.data['fromTime'];
		}
		
		if (this.data['startDT']!=null || this.data['startDT']!=undefined) {
			document.getElementById('startDT').innerHTML = this.data['startDT'];
		}
		
		if (this.data['toTime']!=null || this.data['toTime']!=undefined) {
			document.getElementById('toTime').innerHTML = this.data['toTime'];
		}

		if (this.data['col1Name']!=null || this.data['col1Name']!=undefined) {
			document.getElementById('organizeVolunteerHeadingField').innerHTML = this.data['col1Name'];
		}
		
		if (this.data['col2Name']!=null || this.data['col2Name']!=undefined) {
			document.getElementById('helperHeadingField').innerHTML = this.data['col2Name'];
		}
		
		if (this.data['col3Name']!=null || this.data['col3Name']!=undefined) {
			document.getElementById('volunteerNotesHeadingField').innerHTML = this.data['col3Name'];
		}
		this.listContainer = document.getElementById('listItems');		
		var listItems = this.data['item'];
	
		if (listItems!=null) {
			for (var i=0; i<listItems.length; i++) {
				var signupDiv = document.createElement('div');
				signupDiv.innerHTML = this.rowDiv2;
				signupDiv.className = "driveFormCont";
							
				signupDiv.id = listItems[i].divName = 'signupDiv_'+i;
				var dataFields = signupDiv.getElementsByTagName('span');

				if (listItems[i].description==null || listItems[i].description=='undefined') {
					listItems[i].description='';
				}

				dataFields[0].innerHTML = textDisplay(listItems[i].description);
				
				var helperInputField = signupDiv.getElementsByTagName('input');
				
                var helper = listItems[i].helper;
				if (helper == null || helper == 'undefined' || helper == 'Volunteer Name Will Go Here') {
					listItems[i].helper = helper = '';
				}
				helperInputField[0].value = helper;	
				
                var helperId = listItems[i].helperId;
				if (helperId == null || helperId == 'undefined' || helperId == '') {
					listItems[i].helperId = helperId = '';
					listItems[i].helper = helper = '';
				}
				helperInputField[1].value = helperId;	

                var helperEventId = listItems[i].helperEventId;
				if (helperEventId == null || helperEventId == 'undefined') {
					listItems[i].helperEventId = helperEventId = '';
				}
				helperInputField[2].value = helperEventId;	

                var listItemUUID = listItems[i].UUID;
				if (listItemUUID == null || listItemUUID == 'undefined') {
					listItems[i].UUID = listItemUUID = '';
				}
				helperInputField[3].value = listItemUUID;	

				// notes field
                		var notes = listItems[i].notes;
				if (notes == null || notes == 'undefined' || notes == '') {
					listItems[i].notes = notes = '';
				}
				helperInputField[4].value = notes;
				helperInputField[4].id = "notes_"+i;

				if (helperId != null && helperId != ""  && login==null) {
					if(helper != null && helper != ''  && helper != 'undefined') {
						helperInputField[0].disabled = 'disabled';
						helperInputField[4].disabled = 'disabled';
					}
					else { 
						helperInputField[0].disabled = false;	
						helperInputField[4].disabled = false;							
					}
				} else {
					helperInputField[0].disabled = false;
					helperInputField[4].disabled = false;							
				    helperInputField[0].onclick = this.selectHelper.bindAsEventListener(this);
				    helperInputField[0].onfocus = this.selectHelper.bindAsEventListener(this);
				}
				/*  ----  fix for bug id 3498
				if (helperId != null && helperId != "" && this.data['helperID'] == helperId) {
					var aTag = signupDiv.getElementsByTagName("a")[0];
					aTag.style.display = "block";
					aTag.name = i.toString();
					aTag.onclick = this.removeHelper.bindAsEventListener(this, i);
				}
				*/
				this.listContainer.appendChild(signupDiv);
			}		
		}
	},

	//  Add lilst item..  Div name index corresponds to item index in this.data	
	addItem:function (item, index) {
		var myItem = item; 
		var firstFlag = false;
		
		myItem == 'first' ? firstFlag=true:null;

		if (index == null) {
			if (this.data['item']!=null) {
				index = this.data['item'].length;
			} else {
				index = 0;
			}
		}
		
		var itemDiv = document.createElement('div');
		this.selectedStep==1
                ? itemDiv.innerHTML = this.rowDiv
                : itemDiv.innerHTML = this.rowDivHelper;
		//itemDiv.innerHTML = this.rowDiv;
		itemDiv.className = "driveFormCont";		
		itemDiv.id = "item_" + index;
		var itemFields = itemDiv.getElementsByTagName('input');
		var itemDelete = itemDiv.getElementsByTagName('a')[0];
		var itemAdd = itemDiv.getElementsByTagName('a')[1];
		
		if (myItem!=null){
			myItem['description']==null || myItem['description']=='undefined'
                    ? myItem['description']='':null;
			itemFields[0].value = myItem['description'];

            myItem['helper']==null || myItem['helper']=='undefined'
                    ? myItem['helper']='':null;
			itemFields[1].value = myItem['helper'];		

			myItem['helperId']==null || myItem['helperId']=='undefined'
                    ? myItem['helperId']='':null;
			itemFields[2].value = myItem['helperId'];		

			myItem['helperEventId']==null ||
                                    myItem['helperEventId']=='undefined'
                    ? myItem['helperEventId']='':null;
			itemFields[3].value = myItem['helperEventId'];		

			myItem['UUID']==null || myItem['UUID']=='undefined'
						? myItem['UUID']='':null;
			itemFields[4].value = myItem['UUID'];		

			myItem['notes']==null || myItem['notes']=='undefined'
				? myItem['notes']='':null;
			itemFields[5].value = myItem['notes'];
			itemFields[5].id = 'notes_'+index;
		}

		if (itemFields[1] != null) {
		    itemFields[1].onclick = this.selectHelper.bindAsEventListener(this);
		    itemFields[1].onfocus = this.selectHelper.bindAsEventListener(this);
			itemFields[1].onkeypress = HJ.ignoreAnyKeyPress;
        }

		if (itemDelete != null) {
			itemDelete.id = 'delete' + index;
			itemDelete.onclick = this.deleteItem.bindAsEventListener(this);
		}
		if (itemAdd != null) {
			itemAdd.id = 'add' + index;
			itemAdd.onclick = this.processAddItemEvent.bindAsEventListener(this);
		}
		
		Element.extend(itemDiv);
		Event.observe(itemDiv, 'keypress',
                       this.processItemFieldKeyPress.bindAsEventListener(this));
		
		this.addItemElementToDisplay(itemDiv, index);
		this.shiftFocusToTextChild(itemDiv);
		
		this.itemCount++;
		
		return false;
	},

	checkEventReminderDay: function()
	{

		var eventReminderDayOptions = document.getElementById('eventReminderDay');
		if(eventReminderDayOptions != null)
		{
			var listDate = document.getElementById('startDT');
			var selectedDay = eventReminderDayOptions.value;
			if(listDate != null &&
				listDate.value != '')
			{
				var startDt = new Date(listDate.value);
				var _now = new Date();
				//get date only
				var curDate = new Date(_now.toLocaleDateString());
				var _startDtMillisec = startDt.getTime();
				var _curDateMillisec = curDate.getTime();
				var diffDay = (_startDtMillisec - _curDateMillisec) / 1000 / 86400;
				if( diffDay > 0 && diffDay < selectedDay)
				{

					showMessageDialog("The date you have chosen to send a reminder has already passed. Your volunteers will not receive a reminder. Please decrease the number of days for when your reminder will be sent.", "An Error", 300, 100 );
					eventReminderDayOptions.focus();

					return false;
				}
						
			}
		}

		return true;
	}
});

