var accordionHeadingSelector = 'h3';
var accordionBodySelector = 'div';


/****************************
/
/ Double flash an element's background
/
/***************************/
function HighlightThis(element, origbgcolor ) {
	if (element) {
		var origbgcolor = origbgcolor || element.getStyle('background-color');
		//window.alert(origbgcolor);
		if (origbgcolor == 'transparent') {
			origbgcolor = '#ddd';
		}
		
		//var myFx = new Fx.Tween(element, {property: 'opacity', duration: 150});
		//myFx.start(0.3).chain(
			//Notice that "this" refers to the calling object (in this case, the myFx object).
		//	function(){ this.start(1); },
		//	function(){ this.start(0.3); },
		//	function(){ this.start(1); }
		//);
		var myFx = new Fx.Tween(element, {property: 'background-color', duration: 150});
		myFx.start('#fff').chain(
			//Notice that "this" refers to the calling object (in this case, the myFx object).
			function(){ this.start(origbgcolor); },
			function(){ this.start('#fff'); },
			function(){ this.start(origbgcolor); }
		);
	}
}

function ActivateAccordionHeading(hash) {
	hash = hash.replace(/^#/, '');
	if (hash) {
		//window.alert(hash);
		var accheadinganchor = $$('a[name='+hash+']');
		if (accheadinganchor) {
			accheadinganchor = accheadinganchor[0];
			var accparent = accheadinganchor.getParent('.Accordion');
			if (accparent) {
				var accheading = accheadinganchor.getParent(accordionHeadingSelector);
				//console.log(accheadinganchor, accparent, accparent.retrieve('accordion'));
				var myAccordion = accparent.retrieve('accordion');
				if (myAccordion) {
					myAccordion.display(accheading.retrieve('index'));
				}
			}
		}
	}
}


/*** Initializers ******************************/

function InitializeAside(item) {
	if (item.hasClass('GuideSections')) {
		item.removeClass('GuideSections');
		item.addClass('Aside');
	}
	//if (Browser.Engine.webkit || Browser.Engine.gecko) {
		// Do whatever. i don't care. you browsers already know what to do.
	//}
	//else {
		item.parentNode.addClass('AsideContainer');
	//}
	return item;
}

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[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);
			});
		}
	});
}

var initializeattentiongettersdone = false;
function InitializeAttentionGetters() {
	
	function Blink() {
		$(this).highlight('#fff');
	}
	function Pulse() {
		element = $(this);
		var origbgcolor = element.getStyle('background-color');
		//window.alert(origbgcolor);
		if (origbgcolor == 'transparent') {
			origbgcolor = '#ddd';
		}
		var myFx = new Fx.Tween(element, {property: 'background-color', duration: 1000});
		//element.set('tween', {property: 'background-color', duration: 1000})
		myFx.start('#fff').chain(
			function(){ this.start(origbgcolor); }
		);
	}
	
	if (initializeattentiongettersdone == false) {
		var BlinkSlows = $$('.BlinkSlow');
		BlinkSlows.each( function(item) {
			Blink.periodical(2000, item);
		});
		
		var Blinks = $$('.Blink');
		Blinks.each( function(item) {
			Blink.periodical(750, item);
		});
		
		var Pulses = $$('.Pulse');
		Pulses.each( function(item) {
			//item.Pulse();
			Pulse.periodical(2000, item);
		});
		
		initializeattentiongettersdone = true;
	}
}

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.getElements(accordionBodySelector), {});
		item.store('accordion', myAccordion);
	});
	
	var AnchorRefs = $$('a[href^=#]');
	AnchorRefs.each( function(atag) {
		var hash = atag.hash;
		atag.addEvent('click', function() {
			ActivateAccordionHeading(hash);
		});
	});
}

function InitializeAlternatingRows() {
	//var AllElements = document.getElementsByTagName("*");
	//if (AllElements) {
	//	var AlternatingRowObjects = new Array();
	//	for (var i = 0; i < AllElements.length; i++) {
	//window.alert('running the alternate rows thing');
	//		if ( AllElements[i] && AllElements[i].className && AllElements[i].className.search(/AlternateRows/i) >= 0 ) {
	var AlternateRows = $$('.AlternateRows, .DataTable');
	AlternateRows.each( function(row, rindex) {
	
		//AlternatingRowObjects.push(AllElements[i]);
		//window.status+= ' ' + AllElements[i].className + ' at '+i+'! ';
		var RowNodes = row.childNodes;
		var RowNodesInsideTBODY = RowNodes;
		for(var j = 0; j < RowNodesInsideTBODY.length; j++) {
			if (RowNodesInsideTBODY[j].nodeName.toLowerCase() == 'tbody') {
				// We are inside a table with a tbody tag. so get *it's* children and then continue;
				RowNodes = RowNodesInsideTBODY[j].childNodes;
				// Exit the loop by forging completion
				j = RowNodesInsideTBODY.length;
			}
		}
		var rowindex = 0;
		for(var j = 0; j < RowNodes.length; j++) {
			if (RowNodes[j].nodeType == 1) {
				$(RowNodes[j]).addClass( (rowindex % 2) ? 'RowOdd' : 'RowEven');
				rowindex++;
			}
		}
	});
	//		}
	//	}
		/*if (AlternatingRowObjects.length > 0) {
			for (var i = 0; i < AlternatingRowObjects()
				var RowNodes = AllElements[i].childNodes;
				for(var j = 1; i < RowNodes.length; i++) {
					RowNodes[i].className = (i % 2) ? 'RowOdd' : 'RowEven';
				}*/
	//}
}


/*** Events ************************************/

window.addEvent('domready', function() {
	//InitializeCSSLinkTagLocations();
	//window.alert('test');
	//var Shadows = $$('.Aside, aside, .GuideSections, .HasShadow');
	//Shadows.each( AddShadow );
	
	var Asides = $$('.Aside, aside');
	Asides.each( InitializeAside );
	
	InitializeSearchFields();
	//InitializeHeadings();
	
	InitializeAccordions();
	var hash = window.location.hash;
	ActivateAccordionHeading(hash);
	
	InitializeAlternatingRows();
	InitializeAttentionGetters();
	//InitializeSideBarOptions();
	//InitializeAlternatingRows();
	//InitializeAccordions();
});
