var accordionHeadingSelector = 'h3';
var accordionBodySelector = 'div';


function HeaderMenus() {
	var objMenus = this;
	///// Properties \\\\\
	objMenus.strActiveClass = 'Active';
	objMenus.strMenuElementClass = 'Menu';
	objMenus.strMenuBarTextElementClass = 'MenuBarText';
	objMenus.arrMenus = $$('.'+objMenus.strMenuElementClass);
	objMenus.bitActivatedViaClick = false;
	//objMenus.bitMouseHovering = false;
	
	///// Methods \\\\\
	objMenus.Show = function(eleMenu) {
		//if (objMenus.bitMouseHovering) {
			eleMenu.addClass(objMenus.strActiveClass);
		//}
		//var eleMenuContents = eleMenu.getElement('.MenuContents');
		//if (eleMenuContents) {
		//	eleMenuContents.show();
		//}
	}
	objMenus.Hide = function(eleMenu) {
		eleMenu.removeClass(objMenus.strActiveClass);
		//var eleMenuContents = eleMenu.getElement('.MenuContents');
		//if (eleMenuContents) {
		//	eleMenuContents.hide();
		//}
	}
	objMenus.Activate = function(eleMenu) {
		eleMenu = (eleMenu && !eleMenu.event) ? eleMenu : this;
		objMenus.Show(eleMenu);
		
		if (objMenus.bitActivatedViaClick == true) {
			objMenus.arrMenus.each( function(eleLocalMenu) {
				if (eleLocalMenu !== eleMenu && eleLocalMenu.hasClass(objMenus.strActiveClass)) {
					objMenus.Hide(eleLocalMenu);
				}
			});
		}
	}
	objMenus.Deactivate = function() {
		eleMenu = this;
		if (objMenus.bitActivatedViaClick == false) {
			objMenus.Hide(eleMenu);
		}
	}
	objMenus.DeactivateAll = function() {
		objMenus.arrMenus.each( function(eleMenu) {
			eleMenu.removeClass(objMenus.strActiveClass);
		});
	}
	
	///// Event Attachments \\\\\
	objMenus.arrMenus.each( function(eleMenu, intMenuIndex, arrMenus) {
		eleMenu.addEvent('mouseenter', objMenus.Activate, eleMenu);
		//eleMenu.addEvent('mouseenter', function() {
		//	objMenus.bitMouseHovering = true;
		//	objMenus.Activate.delay(1000, eleMenu);
		//});
		eleMenu.addEvent('mouseleave', objMenus.Deactivate, eleMenu);
		//eleMenu.addEvent('mouseleave', function() {
		//	objMenus.bitMouseHovering = false;
		//	objMenus.Deactivate.delay(1000, eleMenu);
		//});
		eleMenu.addEvent('mouseleave', objMenus.Deactivate, eleMenu);
		eleMenu.addEvent('click', function() {
			/// Toggle the activated via click bit.
			objMenus.bitActivatedViaClick = objMenus.bitActivatedViaClick ? false : true;
			
			if (objMenus.bitActivatedViaClick == false) {
				objMenus.Activate(eleMenu);
			}
			return true;
		});
	});
}

function UpdateSubjectFields() {
	//var eleSampleSubject = $('SampleSubject');
	//var eleSampleSubject = $('SampleSubject');
	//$$('.Subject').each(function(eleSubjectCell) {
	$$('.ResultsTable td').each(function(eleSubjectCell) {
		//var strNewSubjectText = eleSampleSubject.value;
		//eleSubjectCell.set('text', eleSubjectCell);
		//if (eleSubjectCell.getParent('#Simplified')) {
			strNewSubjectText = SimplifySubject(eleSubjectCell);
			if (strNewSubjectText) {
				eleSubjectCell.set('html', strNewSubjectText);
				//console.log('Altering', eleSubjectCell);
			}
		//}
	});
}

function SimplifySubject(eleSubjectCell) {
	eleSubjectCell = $(eleSubjectCell);
	var strSubjectText = eleSubjectCell.get('text');
	if ( strSubjectText.indexOf('--') >= 0 ) {
		/// remove multiple whitespaces
		strSubjectText = strSubjectText.replace(/(\s)\s+/, '$1');
		/// Drop trailing whitespace
		strSubjectText = strSubjectText.replace(/\s*$/, '');
		var arrTerms = strSubjectText.split(/\s*\-\-+\s*|\s*\.?;\s*|\s+–\s+|\s*—\s*/);
		
		for (var i = 0; i < arrTerms.length; i++) {
			arrTerms[i] = arrTerms[i].replace(/\s*\.\s*$/, '');
		}
		
		arrTerms = arrTerms.unique();
		
		for (var i = 0; i < arrTerms.length; i++) {
			arrTerms[i] = '<a href="/cdm4/results.php?CISOOP1=all&CISOBOX1=' + escape(arrTerms[i]) + '&CISOFIELD1=subjec&CISOROOT=all&t=s">' + arrTerms[i] + '</a>';
		}
		return arrTerms.join(', ');
	}
	return false;
}

/*window.addEvent('domready', function() {
	UpdateSubjectFields();
	var eleSampleSubject = $('SampleSubject');
	eleSampleSubject.addEvents({
		'change': UpdateSubjectFields,
		'focus': UpdateSubjectFields,
		'keydown': UpdateSubjectFields,
		'keyup': UpdateSubjectFields,
		'keypress': UpdateSubjectFields
	});
});*/

/***********************************************/
/*** Initializers ******************************/
/***********************************************/

function InitializeHeaderMenus() {
	var objHeaderMenu = new HeaderMenus();
}

function InitializeHRs() {
	/// 2 possible approaches here:
	/// Select exactly only what we need... Lots of selectors and garbage that takes time to look through
	/// OR
	/// Select everything and weed out the ones we don't want.
	//var Headings = $$('#LibArticle>h3, #LibArticle>h4, #LibArticle>h5, #LibArticle>section>h3, #LibArticle>section>h4, #LibArticle>section>h5, #LibArticle>div.ThinBlock>h3, #LibArticle>div.ThinBlock>h4, #LibArticle>div.ThinBlock>h5');
	var Headings = $$('hr');
	Headings.each( function(item) {
		//var parentnode = item.getParent();
		var heading = new Element('div', {'class': 'hr'});
		heading.wraps(item);
	});
}

function InitializeQuickLinks() {
	var arrAllSelects = $$('form select.QuickLinks');
	arrAllSelects.each( function(eleSelect) {
		var eleParentForm = eleSelect.getParent('form');
		var strParentFormAction = eleParentForm.get('action');
		//window.alert(strParentFormAction);
		eleSelect.addEvent('change', function() {
			if (strParentFormAction == null || strParentFormAction == '') {
				/// No form action, so just go to the dropdown's URL
				window.location = eleSelect.value;
			}
			else {
				/// A form action exists, just submit the form;
				eleParentForm.submit();
			}
		});
	});
}

function InitializeSearchFields() {
	function FocusField(obj) {
		obj = $(obj);
		if ( obj.value == obj.get('placeholder') ) {
			obj.value = '';
			obj.removeClass('Blank');
		}
	}
	function BlurField(obj) {
		obj = $(obj);
		if ( obj.value == '' ) {
			obj.value = obj.get('placeholder');
			obj.addClass('Blank');
		}
	}
	
	var SearchFields = $$('input[placeholder]'); //input[type=search], 
	
	SearchFields.each( function(item, index, array) {
		FocusField(item);
		BlurField(item);
		
		item.addEvent('focus', function() {
			FocusField(item);
		});
		item.addEvent('blur', function() {
			BlurField(item);
		});
		
		var parentFormObj = item.getParent('form');
		if (parentFormObj) {
			parentFormObj.addEvent('submit', function() {
				FocusField(item);
			});
		}
	});
}

function InitializeAccordions() {
	var Accordions = $$('.Accordion');
	Accordions.each( function(item) {
		var Headers = item.getElements(accordionHeadingSelector);
		Headers.each( function(header, hindex) {
			header.store('index', hindex);
		});
		var myAccordion = new Accordion(Headers, item.getChildren(accordionBodySelector), {
			onActive: function(toggler, block) {
				toggler.addClass('Active');
				//this.ActiveBlock = block;
			},
			onBackground: function(toggler, block) {
				toggler.removeClass('Active');
			}
		});
		item.store('accordion', myAccordion);
	});
	
	var AnchorRefs = $$('a[href^=#]');
	AnchorRefs.each( function(atag) {
		var hash = atag.hash;
		atag.addEvent('click', function() {
			ActivateAccordionHeading(hash);
		});
	});
}




window.addEvent('domready', UpdateSubjectFields);
window.addEvent('domready', InitializeHeaderMenus);
window.addEvent('domready', InitializeHRs);
window.addEvent('domready', InitializeQuickLinks);
window.addEvent('domready', InitializeSearchFields);
window.addEvent('domready', InitializeAccordions);

