var HoverAccordion = Fx.Elements.extend({

	options: {
		onActive: Class.empty,
		onBackground: Class.empty,
		display: 0,
		show: false,
		height: true,
		width: false,
		opacity: true,
		fixedHeight: false,
		fixedWidth: false,
		wait: false,
		alwaysHide: false
	},

	initialize: function(){
		var options, togglers, elements, container;
		$each(arguments, function(argument, i){
			switch($type(argument)){
				case 'object': options = argument; break;
				case 'element': container = $(argument); break;
				default:
					var temp = $$(argument);
					if (!togglers) togglers = temp;
					else elements = temp;
			}
		});
		this.togglers = togglers || [];
		this.elements = elements || [];
		this.container = $(container);
		this.setOptions(options);
		this.previous = -1;
		if (this.options.alwaysHide) this.options.wait = true;
		if ($chk(this.options.show)){
			this.options.display = false;
			this.previous = this.options.show;
		}
		if (this.options.start){
			this.options.display = false;
			this.options.show = false;
		}
		this.effects = {};
		if (this.options.opacity) this.effects.opacity = 'fullOpacity';
		if (this.options.width) this.effects.width = this.options.fixedWidth ? 'fullWidth' : 'offsetWidth';
		if (this.options.height) this.effects.height = this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';
		for (var i = 0, l = this.togglers.length; i < l; i++) this.addSection(this.togglers[i], this.elements[i]);
		this.elements.each(function(el, i){
			if (this.options.show === i){
				this.fireEvent('onActive', [this.togglers[i], el]);
			} else {
				for (var fx in this.effects) el.setStyle(fx, 0);
			}
		}, this);
		this.parent(this.elements);
		if ($chk(this.options.display)) this.display(this.options.display);
	},

	addSection: function(toggler, element, pos){
		toggler = $(toggler);
		element = $(element);
		var test = this.togglers.contains(toggler);
		var len = this.togglers.length;
		this.togglers.include(toggler);
		this.elements.include(element);
		if (len && (!test || pos)){
			pos = $pick(pos, len - 1);
			toggler.injectBefore(this.togglers[pos]);
			element.injectAfter(toggler);
		} else if (this.container && !test){
			toggler.inject(this.container);
			element.inject(this.container);
		}
		var idx = this.togglers.indexOf(toggler);
		toggler.addEvent('mouseover', this.display.bind(this, idx));
		if (this.options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
		if (this.options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
		element.fullOpacity = 1;
		if (this.options.fixedWidth) element.fullWidth = this.options.fixedWidth;
		if (this.options.fixedHeight) element.fullHeight = this.options.fixedHeight;
		element.setStyle('overflow', 'hidden');
		if (!test){
			for (var fx in this.effects) element.setStyle(fx, 0);
		}
		return this;
	},

	display: function(index){
		index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
		this.previous = index;
		var obj = {};
		this.elements.each(function(el, i){
			obj[i] = {};
			var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0));
			this.fireEvent(hide ? 'onBackground' : 'onActive', [this.togglers[i], el]);
			for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
		}, this);
		return this.start(obj);
	},

	showThisHideOpen: function(index){return this.display(index);}

});

Fx.HoverAccordion = HoverAccordion;

var regexps = {
	name: {
		mask: /[a-zA-Z\s]+/,
		errorMsg: 'Field "##fieldName##" should contain only letters. Example: John Doe'
	},
	phone: {
		mask: /^[\d]{3}-[\d]{3}-[\d]{4}$/,
		errorMsg: 'Field "##fieldName##" should contain phone number in US format. Example: 555-555-5555'
	},
	email: {
		mask: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
		errorMsg: 'Field "##fieldName##" should contain valid email address. Example: name@example.com'
	},
	ccnumber: {
		mask: /^\d+$/,
		errorMsg: 'Field "##fieldName##" should contain valid credit card number. Example: 4111111111111111'
	},
	month: {
		mask: /^(01)|(02)|(03)|(04)|(05)|(06)|(07)|(08)|(09)|(10)|(11)|(12)$/,
		errorMsg: 'Field "##fieldName##" should contain 2-digit month number. Example: 12'
	},
	year: {
		mask: /^[\d]{2}$/,
		errorMsg: 'Field "##fieldName##" should contain short year number. Example: 99'
	},
	notEmpty: {
		mask: /.+/,
		errorMsg: 'Field "##fieldName##" is required.'
	}
};

var initPage = function(){
	initAccordion();
	initBios();
	initRegisterForm();
	initSendToFriendForm();
	initExternalLinks();
	initCheckboxes();
}

var initExternalLinks = function(){
	$$('a[rel=external]').each(function(item,index){
		item.setProperty('target','_blank');
	});
}

var initBios = function(){
	var textClose = 'close bio &gt;';
	var textView = 'view extended bio &gt;';

	var boxes = $$('.box');
	boxes.each(function(item,index){
		item.setStyle('display','none');
	});

	var links = $$('.bios');
	links.each(function(item,index){
		item.addEvent('click',function(e){
			if (item.hasClass('active')){
				item.getPrevious().setStyle('display','none');
				item.setHTML(textView);
				item.removeClass('active');
			} else {
				item.getPrevious().setStyle('display','block');
				item.setHTML(textClose);
				item.addClass('active');
			}
			
			var event = new Event(e);
			event.stop();
		});
	});
}

var initRegisterForm = function(){
	var registerForm = $('register');
	if (registerForm){
		registerForm.addEvent('submit',function(e){

			var requiredFields = new Array(
				{title:'First Name',id:'first_name'},
				{title:'Last Name',id:'last_name'},
				{title:'Company',id:'company'},
				{title:'Title',id:'title'},
				{title:'Street',id:'street'},
				{title:'City',id:'city'},
				{title:'State',id:'state'},
				{title:'Zip',id:'zip'},
				{title:'Phone Number',id:'phone'},
				{title:'Cell Phone Number',id:'mobile'},
				{title:'E-mail Address',id:'email'}
			);
			
			var errors = [];
			requiredFields.each(function(item,index){
				if (isEmptyStr($(item.id).value)) {
					errors.push(regexps.notEmpty.errorMsg.replace('##fieldName##',item.title));
				}
			});
			
			var regexpFields = new Array(
				{title:'Phone Number',id:'phone',regexpr:regexps.phone},
				{title:'Cell Phone Number',id:'mobile',regexpr:regexps.phone},
				{title:'E-mail Address',id:'email',regexpr:regexps.email}
			);
			
			regexpFields.each(function(item,index){
				if (!item.regexpr.mask.test($(item.id).value)) {
					errors.push(item.regexpr.errorMsg.replace('##fieldName##',item.title));
				}
			});
			
			var CheckYes = $('00N000000071TGn');
			var CheckNo = $('00N000000071THC');
			
			if (!CheckYes.checked && !CheckNo.checked){
		    errors.push('Please check if you are attending the Networking Cocktail Hour or not');
      }
			
			if (errors.length > 0){
				var errText = '';
				errors.each(function(item,index){
					errText += item + '\n';
				});
				alert(errText);
				
				var event = new Event(e);
				event.stop();
			}
		});
	}
}

var initSendToFriendForm = function(){
	var stfForm = $('send-to-friend');
	if (stfForm){
		stfForm.addEvent('submit',function(e){
			var requiredFields = new Array(
				{title:'E-mail Address',id:'email'}
			);
			
			var errors = [];
			requiredFields.each(function(item,index){
				if (isEmptyStr($(item.id).value)) {
					errors.push(regexps.notEmpty.errorMsg.replace('##fieldName##',item.title));
				}
			});
			
			var regexpFields = new Array(
				{title:'E-mail Address',id:'email',regexpr:regexps.email}
			);
			
			regexpFields.each(function(item,index){
				if (!item.regexpr.mask.test($(item.id).value)) {
					errors.push(item.regexpr.errorMsg.replace('##fieldName##',item.title));
				}
			});
			
			if (errors.length > 0){
				var errText = '';
				errors.each(function(item,index){
					errText += item + '\n';
				});
				alert(errText);
				
				var event = new Event(e);
				event.stop();
			}
		});
	}	
}

var initAccordion = function(){
	var headers = $$('#rightcol .accordion h3');
	var boxes = $$('#rightcol .accordion .content');
	var myEffect = new Fx.HoverAccordion(headers, boxes,{});
}

var initCheckboxes = function(){
		var CheckYes = $('00N000000071TGn');
		var CheckNo = $('00N000000071THC');
    
    if (CheckYes && CheckNo){
      CheckYes.addEvent('click', function(e){
          if (CheckYes.checked) 
            CheckNo.checked = false;
          }
        )
      CheckNo.addEvent('click', function(e){
          if (CheckNo.checked)            
            CheckYes.checked = false;          
        }
      )        
    }      
}

function isEmptyStr(str) {
	if (str.trim().length == 0) return true;
	return false;
}

window.addEvent('domready',initPage);
