var ListPadding='<div class="pad10"></div><div class="thinRule"></div><div class="pad10"></div>';
var thisURL=location.href.replace('http://','');

thisURL=thisURL.split('/');
var MonthsObj={	'January':0,'Febuary':1,'March':2,'April':3,'May':4,'June':5,
				'July':6,'August':7,'September':8,'October':9,'November':10,'December':11};		

var currentTime = new Date();
				
var thisMonthYear=currentTime.getMonthName()+' '+currentTime.getFullYear();				  

function eValid(email) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   return reg.test(email);		// True or false
}

function submitRSVP(formid){
	formObj=document.getElementById(formid);
	
	var reqText='REQUIRED INFORMATION:\n';
	reqText+='Please enter the following required information\nin order to submit the form:\n';
	var reqTrue=false;
	var reqfields=Array('fname','lname','address1','city','state','zip');
	var reqNames={'fname':'    First Name','lname':'    Last Name',
								'address1':'    Address Line 1','city':'    City',
								'state':'    State','zip':'    Zip Code'};

	for (var i=0;i<reqfields.length;i++){
		if (eval('formObj.'+reqfields[i]+'.value')==''){
			reqText+=reqNames[reqfields[i]]+"\n";
			reqTrue=true;
		}	
	}
	if (reqTrue!=true) reqText = '';
	
	// Optional info check.
	var num=formObj.num.value;
	var phoneChk=eval('formObj.phoneOK'+num);
	var emailChk=eval('formObj.emailOK'+num);
	var phoneFld=eval('formObj.phone'+num);
	var emailFld=eval('formObj.email'+num);
	var optTrue=false;
	if ((phoneChk.checked == true) || (emailChk.checked == true)) {
		var optText='IMPORTANT NOTICE:\n';
		optText+='Please note that we are unable to contact you via ';	
		if (phoneChk.checked == true && phoneFld.value==''){
			optText+="phone";
			if (emailChk.checked == true) {
				optText+=" or email";
			}
			optTrue = true;
		} else if (emailChk.checked == true && !eValid(emailFld.value)){
			optText+="email";
			optTrue = true;
		}
		optText+='\nif you do not provide that information on the form.';
	}
	if (optTrue == true) {
		if (reqText != '') reqText+='\n\n';
		reqText+=optText;
	}
	
	if (reqText==''){	
	  
		var url='/';
		for (var i=1;i<thisURL.length-1;i++){
			url+=thisURL[i]+'/';
		}
		url+='RSVPevent.php';	
		var dString='formid='+formid;
		var elFields=['location','locationAddress','locationCityState','date','fname',
									'lname','address1','address2','city','state','zip'];
		var elNames=['Venue','Venue_address','Venue_city/state','Date','First_name',
								 'Last_name','Address_line_1','Address_line_2','City','State','Zip'];
		for (i=0;i<elFields.length;i++){
			dString+='&'+elNames[i]+'='+eval('formObj.'+elFields[i]).value;
		}
		if (phoneFld.value!='') {
			dString+='&Phone_contact_OK='+((phoneChk.checked==true) ? 'yes':'no');
			dString+='&Phone_number='+phoneFld.value;
		}
		if (emailFld.value!='') {
			dString+='&Email_contact_OK='+((emailChk.checked==true) ? 'yes':'no');
			dString+='&Email_address='+emailFld.value;
		}
		dString+='&Transport_requested='+((formObj.transport.checked==true) ? 'yes' : 'no');
		sendRSVP(url,dString);
		
	} else {
		alert(reqText);
	}	
}		
function sendRSVP(url,dString){
		var xmlRSVP=$.ajax({
			type: "POST",
			url: url,
			data: dString,
			dataType: "xml",
			success: function(xml){
				var success=xml.getElementsByTagName('success')[0].firstChild.nodeValue;
				if (success=='yes'){
					var formid=xml.getElementsByTagName('formid')[0].firstChild.nodeValue;
					toggleDisplay(toggledDisplay[formid], formid);
					formObj=document.getElementById(formid);
					for (var i=0; i<formObj.elements.length;i++){
						if (formObj.elements[i].type=='text'){
							formObj.elements[i].value='';
						} else if (formObj.elements[i].type=='checkbox'){
							formObj.elements[i].selected=false;
						} else if (formObj.elements[i].type=='select'){
							formObj.elements[i].selectedIndex=0;
						}	
					}	
					document.getElementById("RSVPresult_"+formid).innerHTML='<span class="resultText">Thank you for your interest!  Your request has been sent.</span>';
				} else {
					var reason=xml.getElementsByTagName('reason')[0].firstChild.nodeValue;
					alert("RSVP did not go through, reason: "+reason+"\n");
				}		
				
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
			  // typically only one of textStatus or errorThrown 
			  // will have info
			  //this; // the options for this ajax request
			  alert("ERROR:"+XMLHttpRequest+"\n"+textStatus+"\n"+errorThrown);
			}
	});
}
		
$(function()
  {
	var EventsArray=null;
	EventsMonths={};
	var AllEvents=new Array();
	
	var callBacker= function($td,thisDate, month, year){
		//alert("called back:"+thisDate);
		if ($td.is('.current-month')){
			if (thisDate.getDate()==1){
				if (thisDate.getMonthName() + ' ' + thisDate.getFullYear() !=  thisMonthYear){
					thisMonthYear= thisDate.getMonthName() + ' ' + thisDate.getFullYear();
					//alert("fixed thisMonthYear");
					drawEvents();
				}	
			}	
			for (var i=0;i<AllEvents.length;i++){
				if (AllEvents[i]['month']==thisDate.getMonthName() && AllEvents[i]['date']==thisDate.getDate() && AllEvents[i]['year']==thisDate.getFullYear()){
					//alert("found a event this month");
					$td.bind(
							'click',
							function()
							{
								// anchor name: {{location}}_{{month}}_{{date}}_{{year}}_{{time}}_{{ampm}}
								for (var i=0;i<AllEvents.length;i++){
									if (AllEvents[i]['month']==thisDate.getMonthName() && AllEvents[i]['date']==thisDate.getDate() && AllEvents[i]['year']==thisDate.getFullYear()){
										location.href='#'+AllEvents[i]['location']+'_'+AllEvents[i]['month']+'_'+AllEvents[i]['date']+'_'+AllEvents[i]['year']+'_'+AllEvents[i]['time']+'_'+AllEvents[i]['ampm'];
										//alert('You clicked on a event Date ' + thisDate.getDate() + '/' + (Number(month)+1) + '/' + year);
										break;
									}
								}		
							}
						).addClass('meetingDay');

				}	
			}	
		}	
	};	
  
    var drawCalendar=function() {
		$('.datePickerContainer')
		.datePicker({inline:true,renderCallback:callBacker})
		.bind(
			'dateSelected',
			function(e, selectedDate, $td) {
				if (! $td.is('.meetingDay')){
					alert('There is not an event on ' + selectedDate);
				}	
			}
		);
	};	
	$('#monthPickerForm').bind(
		'submit',
		function()
		{
			var monthYear=this.monthPicker.options[this.monthPicker.selectedIndex].value;
			var parts=monthYear.split(' ');
			//$('.datePickerContainer').renderCalendar({month:MonthsObj[parts[0]], year:parts[1],showHeader:$.dpConst.SHOW_HEADER_LONG});
			$('.datePickerContainer').dpSetDisplayedMonth(MonthsObj[parts[0]], parts[1]);
			//alert ("YOU CHOSE: "+monthYear+ "\n"+parts[0]+"::"+parts[1]);
			thisMonthYear=parts[0]+' '+parts[1];
			drawEvents();
			return false;
		}
	);

	
	// Event Object
	function Event(obj){
		this.group=obj.getAttribute('month')+' '+obj.getAttribute('year');
		this.location=obj.getAttribute('location');
		this.month=obj.getAttribute('month');
		this.date=obj.getAttribute('date');
		this.year=obj.getAttribute('year');
		this.time=obj.getAttribute('time');
		this.ampm=obj.getAttribute('ampm');
		this.address1=obj.getAttribute('address1');
		this.city=obj.getAttribute('city');
		this.state=obj.getAttribute('state');
	};	
	var afterMeet=function (xml){
		EventsArray=xml.getElementsByTagName('event');
		//alert ("XMLMEET:"+EventsArray+"\n"+xml);
		initEvents();
	};	
	
	
	var initEvents= function(){
		//alert("running init");
		var hasMeetings = false;
		if (EventsArray[0]){			
			for (var i=0;i<EventsArray.length;i++){
				var month=EventsArray[i].getAttribute('month');
				var year=EventsArray[i].getAttribute('year');
				if ((MonthsObj[month]>=currentTime.getMonth() && parseInt(year)>=currentTime.getFullYear()) || 
						(parseInt(year)>currentTime.getFullYear())) {
					addDropDown(month,year);
					hasMeetings = true;
				}	 	
				AllEvents.push(new Event(EventsArray[i]));
			}
		}
		if(!hasMeetings) {
			// If no meetings are available, enter a default message.
			addDropDown(null,null);
		}
		drawCalendar();
		drawEvents();	
	};	
	var drawEvents=function(){
		//alert('drawEvents for '+ thisMonthYear);
		document.getElementById('eventListings').innerHTML='&nbsp;';
		var newHtml=''	
		var nums=new Array();
		var misses=0;
		for (var i=0;i<AllEvents.length;i++){
			
			if (AllEvents[i]['group']==thisMonthYear ){
				var ok=true;
				if (MonthsObj[AllEvents[i]['month']]== currentTime.getMonth() && parseInt(AllEvents[i]['date']) < currentTime.getDate()){
					ok=false;
					misses++;
				}
				if (ok==true){	
					//alert("matching month:"+AllEvents[i]['group']);
					var meetHtml=EventTxt.replace(/{{location}}/g,AllEvents[i]['location']);
					meetHtml=meetHtml.replace(/{{month}}/g,AllEvents[i]['month']);
					meetHtml=meetHtml.replace(/{{date}}/g,AllEvents[i]['date']);
					meetHtml=meetHtml.replace(/{{year}}/g,AllEvents[i]['year']);
					meetHtml=meetHtml.replace(/{{time}}/g,AllEvents[i]['time']);
					meetHtml=meetHtml.replace(/{{ampm}}/g,AllEvents[i]['ampm']);
					meetHtml=meetHtml.replace(/{{address1}}/g,AllEvents[i]['address1']);
					meetHtml=meetHtml.replace(/{{city}}/g,AllEvents[i]['city']);
					meetHtml=meetHtml.replace(/{{state}}/g,AllEvents[i]['state']);
					var mquery=AllEvents[i]['address1'].replace(/ /g,'+')+',+'+AllEvents[i]['city'].replace(/ /g,'+')+',+'+AllEvents[i]['state'];
					meetHtml=meetHtml.replace(/{{mapquery}}/g,mquery);
					meetHtml=meetHtml.replace(/{{productName}}/g,productName);
					if (i+1-misses <= 9){
						var num='0'+(i+1-misses);
					} else {
						var num =(i+1-misses);
					}	
					//toggledDisplay['rsvp'+num] = true;
					//alert('toggled '+num+'::'+toggledDisplay['rsvp'+num] );
					meetHtml=meetHtml.replace(/{{num}}/g,num);
					nums.push(num);
					if (AllEvents.length-i > 1){
						meetHtml+=ListPadding;
					}	
					//alert('meet html'+meetHtml);
					newHtml+=meetHtml;
				}	
			} else {
				misses++;
			}	
				
		}
		//alert('event lisiting inner'+document.getElementById('eventListings').innerHTML.innerHTML);
		if (newHtml=='') {
			// No meetings available.
			newHtml = '<p class="zoomable"><br /><strong>There are no events scheduled for the month selected above.</strong><br /></p>';
		}
		document.getElementById('eventListings').innerHTML=newHtml;
		if (nums.length>0){
			for (i=0;i<nums.length;i++){
					//alert('checking rsvpArrow'+nums[i]+"\n"+document.getElementById('rsvpArrow'+nums[i]).className);
				if (document.getElementById('rsvpArrow'+nums[i]).className=='rsvpTableOpened'){
					alert('must fix open arrow '+nums[i]);
				}	
				
				// Toggle functionality.
				var toggleHandler=function() {
					if (this.checked!=true) {
						this.field.disabled=true;
						this.field.style.backgroundColor='#d4d0c8'; 
						this.field.value='';
					} else if (this.checked==true){
						this.field.disabled=false; 
						this.field.style.backgroundColor='#fff';
					}
				}
				// Phone
				var check=document.getElementById('phoneOK'+nums[i]);
				check.field = document.getElementById('phone'+nums[i]);
				check.onclick=toggleHandler;
				// Email
				var check=document.getElementById('emailOK'+nums[i]);
				check.field = document.getElementById('email'+nums[i]);
				check.onclick=toggleHandler;
			}	
		}	
	};	
	var addDropDown= function(month,year){
		var opt = document.createElement('option');
		if (month == null) {
			opt.text="No events available"; 
			opt.value=""; 
			document.getElementById('monthPicker').remove(0);
			try {
				document.getElementById('monthPicker').add(opt, null);
			} catch (ex){
				document.getElementById('monthPicker').add(opt);
			}
			return;
		}
		var opttext=month+' '+year;
		if (! EventsMonths[opttext]){
			//alert("running dropdownadd");
			opt.text=opttext; 
			opt.value=opttext; 
			try {
				document.getElementById('monthPicker').add(opt, null);
			} catch (ex){
				document.getElementById('monthPicker').add(opt);
			}		
			EventsMonths[opttext]=1;
		}	
	};	
	
	$(document).ready(function(){
		var url='/';
		for (var i=1;i<thisURL.length-1;i++){
			url+=thisURL[i]+'/';
		}
		url+='xml/events.xml';	
		var xmlMeetReq=$.ajax({
  		type: "GET",
  		url: url,
  		dataType: "xml",
		success: function(xml){
			afterMeet(xml);
   		}

		});
	});	
  }
);