HJ.GenericInvitation = Class.create();

HJ.GenericInvitation.prototype = Object.extend(new Af.StepsMaker(), {

	initialize: function(listObj, step1TargetContainerId) {
		this.url = {
			"step1":basePageURL + "GenericInvitation.htm",
			"step2":basePageURL + "GenericInvitationStep2.htm",
			"step3":basePageURL + "StepsEmails.htm"
		};		

		this.targetContainerId = {
			"step1":step1TargetContainerId == null ? "bodyContainer" : step1TargetContainerId,
			"step2":"blueround",
			"step3":"blueround"
		};
		
		this.listObj = listObj;

		// Testing Data..  listObj will be passed to me, that is the MyList object with items included
		//this.listObj = app.workspace['myList'][3];
		//this.listObj = null;
		// Must declare templateType per template		
		this.data = new Array;
			
		this.templateType = 'GenericInvitation';

		this.tl = null;
		//  Row Divs as not to rely on tables for the front end.  
		//  name should match the 
		this.rowDiv = "<span class=\"driveTimeLong\"><input type=\"text\" name=\"name\" value=\"\" class=\"dark\"/></span>" +
				"<span class=\"driveLocationLong\"><input name=\"description\" type=\"text\" value=\"\" class=\"dark\"/></span>" +
                "<div class=\"driveDelete\"><a href=\"#\"><span class=\"closeBtn\" title=\"Delete\"></span></a></div>";

		this.rowDiv2 = "<span name=\"description\" class=\"signUpDoneItems\"></span>" +
                    "<span class=\"signUpDueDate\" name=\"dueDate\"></span>" +
                    "<span class=\"signUpVolunteer\" class=\"short\"><input disabled=\"disabled\" type=\"text\" value=\"\" class=\"dark\"/></span>" +
                    "<span class=\"signUpVolunteer\"><input disabled=\"disabled\" type=\"text\" value=\"\" class=\"dark\"/></span>";

		this.listFields = new Array('name', 'organizerName', 'date', 'time', 'location', 'phone',
				'notes', 'lastEmailString', 'lastEmailSubject', 'lastEmailNote');
		this.listGuestFields = new Array('name', 'email');
		this.listItemFields = new Array('description', 'dueDate');
		this.selectedStep = 1;
        this.lastEmailString = "";
		this.setDataObject();
	},
	
	//  Map Workspace data to local data..
	setDataObject: function() {
		var listFields = new Array('name', 'organizerName', 'date', 'time',
                        'location', 'phone', 'notes',
                        'lastEmailString', 'lastEmailSubject', 'lastEmailNote');

		if (this.listObj!=null)		
			this.data = this.listObj;
			
	},	

	//  Save Step 1 to work locally.
	saveHoldData: function() {								
		//  
		//this.data['name'] = this.eventName.value;		
		// Top Inputs
		var inputs = document.getElementsByName('directData');
		for (var i = 0; i < inputs.length; ++i) {
			this.data[inputs[i].id] = inputs[i].value;
		}
		
		var textareas = document.getElementsByTagName('textarea');
		for (var i = 0; i < inputs.length; ++i) {
			this.data[inputs[i].id] = inputs[i].value;
		}

		//  listitems
		var listDivs = this.listContainer.childNodes;
		var listData = new Array;				
		for (var i=0; i<listDivs.length; i++) {
			var listItem = listDivs[i];
			var listItemInputs = listItem.getElementsByTagName('input');
			var rowData = new Array;
			if (this.selectedStep == 1) {
				rowData['name'] = listItemInputs[0].value;
				rowData['email'] = listItemInputs[1].value;
				//this.date['lastEmailString'] += rowData['email'];
			//} else {
				rowData['description'] = listItemInputs[0].value;
				rowData['dueDate'] = listItemInputs[1].value;
			}
			listData.push(rowData);
		}
		
		if (this.selectedStep == 1)
			this.data['guest'] = listData;
		//else
			this.data['item'] = listData;
 	},			

	//  Step 1
	loadStep1:function() {

			this.startDT = document.getElementById('startDT');
			//this.startCal = document.getElementById('startCal');
			this.startDT.onclick = this.showMiniCal.bindAsEventListener(this);
			//this.startCal.onclick = this.showMiniCal.bindAsEventListener(this);

			//this.endDT = document.getElementById('endDT');
			//this.endCal = document.getElementById('endCal');
			//this.endDT.onclick = this.showMiniCal.bindAsEventListener(this);
			//this.endCal.onclick = this.showMiniCal.bindAsEventListener(this);

			this.addButton = document.getElementById('addItemButton');
			this.addButton.onclick = this.addItem.bindAsEventListener(this);
			
			this.addLink = document.getElementById('addItemLink');
			this.addLink.onclick = this.addItem.bindAsEventListener(this);

			// 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 = '';
				}
			}

			//  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);
			}
			
			this.eventName = document.getElementById('name');
			
			if (this.data['name']!=null){
				this.eventName.value = this.data['name'];						
			}
			
			if (this.data['item']!=null) {
				var items = this.data['item'];
				for (var i=0; i<items.length; i++) {
					this.addItem(items[i], i);	
                    this.lastEmailString += items[i].dueDate;
                    if (i != (items.length-1))
                        this.lastEmailString += ", ";
				}
                this.data['lastEmailString'] = this.lastEmailString;
			}		
	},	
	// Step 2 - Step 3 is email and universal
	loadStep2:function() {			
		this.sideNavBar.className = 'navStep2';
		 
        var loadFields = new Array('name', 'organizerName', 'time', 'phone', 'date',
                        'location', 'notes');

        for (var i = 0; i < loadFields.length; ++i) {
                var elemID = loadFields[i];
                var elem = document.getElementById(elemID);
                if (this.data[elemID] != null) {
                    elem.innerHTML = this.data[elemID];
                } else {
                    elem.innerHTML = '';
                }
        }
        document.getElementById('date').innerHTML = this.data['startDT'] +"<br>";
		//document.getElementById('name').innerHTML = this.data['name'];
		
		this.listContainer = document.getElementById('guestList');
		
		var listItems = this.data['item'];
		
		for (var i=0; i<listItems.length; i++) {
			var signupDiv = document.createElement('div');
			signupDiv.innerHTML = listItems[i].description;

			//signupDiv.innerHTML = this.rowDiv2;
			//signupDiv.className = "driveFormCont";
						
			//signupDiv.id = listItems[i].divName;
			//var dataFields = signupDiv.getElementsByTagName('span');
			//dataFields[0].innerHTML = listItems[i].description;
			//dataFields[1].innerHTML = listItems[i].dueDate;
			
			this.listContainer.appendChild(signupDiv);
		}
		
	},

	//  Add lilst item..  Div name index corresponds to item index in this.data	
	addItem:function (item, index) {
		if (index == null) {
			item = null;
			if (this.data['item']!=null)	
				index = this.data['item'].length;
			else 
				index = 0;
		}
		
		var itemDiv = document.createElement('div');
		itemDiv.innerHTML = this.rowDiv;
		itemDiv.className = "driveFormCont";		
		itemDiv.id = "item" + index;
		var itemFields = itemDiv.getElementsByTagName('input');
		var itemDelete = itemDiv.getElementsByTagName('a')[0];
		if (item!=null){
			itemFields[0].value = item['description'];
			itemFields[1].value = item['dueDate'];		
		}

		itemDelete.id = 'delete' + index;
		itemDelete.onclick = this.deleteItem.bindAsEventListener(this);				
		
		this.listContainer.appendChild(itemDiv);
	},
	
	//  Delete row, triggered by circle in the row Div
	deleteItem:function (evt) {
		var e = evt.target ? evt.target : evt.srcElement;
		//  srcElement is the inner span..  pick up parent id to process
		var index = e.parentNode.id.substr(e['id'].length-1);
		
		var deleteDiv = document.getElementById('item' + index);
		this.listContainer.removeChild(deleteDiv);				
	}
		
});
