var reg = {
	
	addGuest : function() {
		
		new Insertion.Bottom('guest_wrapper',$('guest_template').innerHTML)
	
	},
	addAttendee : function() {
		new Insertion.Bottom('attendee_wrapper',$('attendee_template').innerHTML)
	
	},
	addGuest2 : function(field_id) {
		new Insertion.Bottom('guest2_wrapper_'+field_id,$('guest2_template_'+field_id).innerHTML)
	},
	billSame : function(cbox) {
		if (cbox.checked) {
		  $('registration_billing_first_name').value = $F('registration_first_name')
			$('registration_billing_last_name').value = $F('registration_last_name')
			$('registration_billing_address').value = $F('registration_address')
			$('registration_billing_city').value = $F('registration_city')
			$('registration_billing_country').value = $F('registration_country')
			reg.toggleState($('registration_billing_country'));
			$('registration_billing_state').value = $F('registration_state')
			$('registration_billing_zip_code').value = $F('registration_zip_code')
			
		}
	},
	
	stateOptions : '',
	
	toggleState : function(el) {
		//cache state options
		if (reg.stateOptions.length == 0) {
			reg.stateOptions = $('registration_state').innerHTML;
		}
		if ($(el).id == 'registration_country') {
			 var name_and_id = 'name="registration[state]" id="registration_state"'
			 var wrapper_id  = 'state_wrapper';
			 var address_id   = 'address_wrapper';
			 var zip_id      = 'zip_code_wrapper';
			 var req         = 'state_req';
		} else {
			 var name_and_id = 'name="registration[billing_state]" id="registration_billing_state"'
			 var wrapper_id  = 'billing_state_wrapper';
			  var address_id   = 'billing_address_wrapper';
			 var zip_id      = 'billing_zip_code_wrapper';
			 var req         = 'billing_state_req';
		}
		 if ($F(el) == 'US') {
			 var html = '<select '+ name_and_id +'>' + reg.stateOptions + '</select>';
			 $(wrapper_id).update(html); 
			 $(address_id).show();
			 $(zip_id).show();
			 $(req).show();
		 } else if ($F(el) == 'CA') {
			 var html = '<input type="text"'+name_and_id + ' size="2"/>';
			 $(wrapper_id).update(html); 
			 $(address_id).show();
			 $(zip_id).show();
			 $(req).show();
		 } else {
			 var html = '<input type="text"'+name_and_id + ' size="2"/>';
			 $(wrapper_id).update(html); 
			 $(address_id).hide();
			 $(zip_id).hide();
			 $(req).hide();
		 }
	},
	calcTotal : function() {
		if ($('registration_number_of_tickets')) {
		var num = reg.getInt('registration_number_of_tickets') * $F('price_per_ticket');
		var pledge = $('registration_like_to_pledge') && $('registration_like_to_pledge').checked  ? 
		            reg.getFloat('registration_pledge_total') : 0;
		num += pledge;
		} else if ($('sleeping_room_rate')) {
			var num = reg.getFloat('sleeping_room_rate')
			var depart = $('registration_sr_departure_date').value
			var arrive = $('registration_sr_arrival_date').value
			if (depart.length == 0 || arrive.length == 0) return;
			var ar_date = toDate(arrive).getTime()
			var dp_date = toDate(depart).getTime()
			var days = (dp_date - ar_date) / (3600 * 24 * 1000)
			if (days <= 0) { 
			  alert('Departure Date must be after Arrival Date'); 
			  days = 0
			} 
			num = num * days
		} else {
			return;
		}
		if (isNaN(num)) {
			reg.updateTotalCost('$0.00');
		} else {
		  reg.updateTotalCost(formatCurrency(num.toFixed(2)));
		}
	},
	updateTotalCost : function(amount) {
	  $$('.total_cost').each(function(e) {
		  e.update(amount);																
		});
	},
	updateTotal : function(url) {
    new Ajax.Request(url, { parameters : Form.serialize('registration_form')});
	},
	getInt : function(e) {
		if (isNaN($F(e)) || $F(e).length == 0) {
			return 0;
		}
		return parseInt($F(e));
	},
	getFloat : function(e) {
		if (isNaN($F(e)) || $F(e).length == 0) {
			return 0;
		}
		return parseFloat($F(e));
	},
	/*Add additional params for other types of fields */
	addField : function(params) {
		$('field_notice').show();
		if (!params) {
			params = '';
		}
		else {
			params = '&' + params;
		}
		new Ajax.Request('/events/fields',{ parameters : Form.serialize('customize_form') + '&' + Sortable.serialize('field_list') + params });
	},
	fieldTypes : ['field', 'header', 'multi_ticket','guest','exhibitor'],
	
	showWidget : function(type) {
		reg.fieldTypes.each(function(e) { $(e + '_template').hide() } )
	  $(type + '_template').show()
	},
	resetFieldForm : function() {
		reg.fieldTypes.each(function(e) {
		  Form.getElements(e + '_template').each(function(e) { e.value = '' })
		});
	},
	setFieldPositions : function(){
		var vals =  Sortable.serialize('field_list').split('&')
		var fields = []
		for(var i=0;i<vals.length;i++) {
		  fields.push(vals[i].split('=')[1])
		}
		$('field_list_string').value = fields.join(',');
	},
	deleteField : function(el,id) {
		if (!confirm('Are you sure?')) return;
		$(el).remove();
		if (id && id.length != 0) {
			new Ajax.Request('/events/destroy_field/'+id);
		}
	},
	deleteTPField : function(el,id) {
		if (!confirm('Are you sure?')) return;
		$(el).remove();
		if (id && id.length != 0) {
			new Ajax.Request('/events/destroy_tp_field/'+id);
		}
	},
	editField : function(id) {
	  new Ajax.Request('/events/edit_field/'+id);
	},
	updateField : function(id) {
		if ($('field_attributes_header_desc_edit')) {
		  reg.setFromWys('field_attributes_header_desc_edit');
	  }
		new Ajax.Request('/events/update_field/'+id, {parameters : Form.serialize('customize_form') + '&' + Form.serialize('edit_field') + '&' + Sortable.serialize('field_list')});
	},
	showMultiChoiceField : function(el) {
		if ($F(el).match(/Choice/)) {
			$('multiple_choice_tr').show();
			if ($F(el).match(/Single Choice/i)) {
				$('dollar_option').show();
			} else {
				$('dollar_option').hide();
			}
		} else {
			$('multiple_choice_tr').hide();
			$('dollar_option').hide();
		}
	},
	previewEvent : function(url) {
		$('preview_button').update('Loading Preview...');
		reg.setFieldPositions();
		//Remove hidden _method field
		var params = Form.serialize('event_form').replace('_method=put&','');
		new Ajax.Request(url, {parameters : params})
	},
	setFromWys : function(field) {
		$(field).value = FCKeditorAPI.GetInstance(field).GetHTML(true);
	}
}
function toDate(date) {
  var new_date = new Date()
	var date_parts = date.split('-')
  new_date.setDate(date_parts[2])
	new_date.setMonth(date_parts[1]-1)
	new_date.setYear(date_parts[0])
	return new_date
}
function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	if (x.length > 1 && x[1].length == 0) {
		x2 = '.' + x[1] + '0'
	} else if(x.length > 1 && x[1].length >= 2) {
		x2 = '.' + x[1]
	} else {
	  x2 = '.00';
	}

	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
  return x1 + x2;
	
}
function formatCurrency(str) {
	return '$' + addCommas(str);
}
