/******************************
SIMPLE CHANGERS
******************************/
function changeImageSimple(id,img) { 
	document[id].src = img;
}
function changeClassSimple(id,newclass) {
	$(id).className = newclass;
}
/******************************
SLIDER
******************************/
//SLIDER - slides a column out of the side
slider_width = 375;
slider_interval_id = window.setInterval(sliderColumn, 50);
slider_currentPosValue = -1 * slider_width;
slider_currentPos = "hide";
slider_cursorY = 0;
slider_moveIt = false;
slider_divspeed = 35;

//sets the client height
function setClientHeight(cursorPos) {
	temp = cursorPos+30
	//if (BrowserDetect.browser!= "Safari") {
		var x,y;
		if (self.pageYOffset) // all except Explorer
		{
			x = self.pageXOffset;
			y = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop)
			// Explorer 6 Strict
		{
			x = document.documentElement.scrollLeft;
			y = document.documentElement.scrollTop;
		}
		else if (document.body) // all other Explorers
		{
			x = document.body.scrollLeft;
			y = document.body.scrollTop;
		}	
		
		slider_cursorY = temp+y;
//	} else {
	//	alert(cursorPos + "-" + y)
	//	slider_cursorY = temp;
//	}
}

function sliderColumn() {
	if (slider_moveIt) {
		(slider_currentPos =="shown") ? slider_currentPosValue -= slider_divspeed : slider_currentPosValue += slider_divspeed;				
		$('slider_box').style.left = slider_currentPosValue + 'px';
		
		if (slider_currentPos =="shown" && slider_currentPosValue <= (-1*slider_width)) {
			slider_moveIt = false;
			slider_currentPos = "hide";
			slider_currentPosValue = -1*slider_width;
			$('slider_wrapper').style.top = '-1000px';
		} else if (slider_currentPos =="hide" && slider_currentPosValue >=0) {
			slider_moveIt = false;
			slider_currentPos = "shown";
			slider_currentPosValue = 0;
		}
	}
}
//open link from click
function slider_click_link(e, id) {
	if (!e) e = window.event;
	if (slider_currentPos == "hide") {
		setClientHeight(e.clientY);
		loadAjaxPage(id);
	} else {
	}
		
}
//open link from load page
function slider_open_link(id) {
	//setClientHeight();
	slider_cursorY = slider_width;
	loadAjaxPage(id);
}
//close link from close button
function slider_close_link() {
	slider_moveIt=true;
}

/******************************
FORM VALIDATION
******************************/
//form validation for spread the word form
function validate_spread_the_word(form) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var alertlist = "";
	var alertlist_count = 1;

	//email field
	if (form.email.value == "") {
		alertlist += alertlist_count++ + ". Please enter your email.\n";
		form.email.focus();
	} else 	if (!filter.test(form.email.value)){
		alertlist += alertlist_count++ + ". You have entered an invalid email.\n";
		form.email.focus();
	}
	
	//friend email field
	if (form.to_email.value == "") {
		alertlist += alertlist_count++ + ". Please enter your friend's email.\n";
		form.to_email.focus();
	} else 	if (!filter.test(form.to_email.value)){
		alertlist += alertlist_count++ + ". You have entered an invalid email for your friend.\n";
		form.to_email.focus();
	}	
	
	if (alertlist != "") {
		alert (alertlist);
		return false;
	} else {
		return true;	
	}
}

//good life submit names of people form
function validate_guests_names(form) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var alertlist = "";
	var alertlist_count = 1;

	//name field
	if (form.order_name.value == "") {
		alertlist += alertlist_count++ + ". Please enter the order name.\n";
		form.order_name.focus();
	}
	
	//email field
	if (form.order_email.value == "") {
		alertlist += alertlist_count++ + ". Please enter the order email.\n";
		form.order_email.focus();
	} else 	if (!filter.test(form.order_email.value)){
		alertlist += alertlist_count++ + ". You have entered an invalid order email.\n";
		form.order_email.focus();
	}	
	
	if (alertlist != "") {
		alert (alertlist);
		return false;
	} else {
		return true;	
	}
}

//good life guests members form
function validate_guests_members(form) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var alertlist = "";
	var alertlist_count = 1;
		
	//name field
	if (form.name.value == "") {
		alertlist += alertlist_count++ + ". Please enter your name.\n";
		form.name.focus();
	}
	

	//email field
	if (form.email.value == "") {
		alertlist += alertlist_count++ + ". Please enter your email.\n";
		form.email.focus();
	} else 	if (!filter.test(form.email.value)){
		alertlist += alertlist_count++ + ". You have entered an invalid email.\n";
		form.email.focus();
	}	
	
	//phone field
	if (form.phone.value == "") {
		alertlist += alertlist_count++ + ". Please enter your phone.\n";
		form.phone.focus();
	}
	

	//credit card number
	if (form.card_number.value == "") {
		alertlist += alertlist_count++ + ". Please enter your credit card information.\n";
		form.card_number.focus();
	}
	
	
	if (alertlist != "") {
		alert (alertlist);
		return false;
	} else {
		return true;	
	}
}


//good life submit names of people form
function validate_guests_payment(form) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var alertlist = "";
	var alertlist_count = 1;

	//email field
	if (form.order_name.value == "") {
		alertlist += alertlist_count++ + ". Please enter the order name.\n";
		form.order_name.focus();
	}
	
	//email field
	if (form.order_email.value == "") {
		alertlist += alertlist_count++ + ". Please enter the order email.\n";
		form.order_email.focus();
	} else 	if (!filter.test(form.order_email.value)){
		alertlist += alertlist_count++ + ". You have entered an invalid order email.\n";
		form.order_email.focus();
	}	
	
	//phone number
	if (form.daytime_phone.value == "") {
		alertlist += alertlist_count++ + ". Please enter the daytime phone number.\n";
		form.daytime_phone.focus();
	}
	
	
	/*
	//require credit card
	if (form.amount_1.value == "" && form.amount_2.value == "" && form.amount_3.value == "" && form.amount_4.value == "") {
		alertlist += alertlist_count++ + ". Please enter an amount to charge.\n";
		form.amount_1.focus();
	}
	
	
	
	//name on card
	if (form.cardname_1.value == "") {
		alertlist += alertlist_count++ + ". Please enter the name on the credit card.\n";
		form.cardname_1.focus();
	}	
	
	//amount
	if (form.amount_1.value == "") {
		alertlist += alertlist_count++ + ". Please enter the payment amount.\n";
		form.amount_1.focus();
	}	
	
	//num
	if (form.num_1.value == "") {
		alertlist += alertlist_count++ + ". Please enter the credit card number.\n";
		form.num_1.focus();
	}	
	
	//exp month
	if (form.exp_month_1.value == "") {
		alertlist += alertlist_count++ + ". Please enter the daytime phone number.\n";
		form.exp_month_1.focus();
	}	
	
	//exp year
	if (form.exp_year_1.value == "") {
		alertlist += alertlist_count++ + ". Please enter the expiration year.\n";
		form.exp_year_1.focus();
	}	

	//cvc
	if (form.cvc_1.value == "") {
		alertlist += alertlist_count++ + ". Please enter the three digit cvc number found on the back of your card.\n";
		form.cvc_1.focus();
	}	
	
	//type
	if (form.cardtype_1.value == "" || form.cardtype_1.value == "Choose One") {
		alertlist += alertlist_count++ + ". Please enter the credit card type.\n";
		form.cardtype_1.focus();
	}	
	*/
	
	if (alertlist != "") {
		alert (alertlist);
		return false;
	} else {
		return true;	
	}
}


//clears a form - skips is an array of keys to skip
//skipfields = Array('submit','clear','cancel');
function clearform(frm,skips) {
	//alert(frm.name + "-" + frm.elements.length);
	var skipslen = (skips=="" || skips==undefined) ? 0 : skips.length;
	with(frm) {
		var len = frm.elements.length;
		
		for(var i=0; i<len; i++) {
			var clearit=true;
			for(var ii=0; ii<skipslen; ii++) {
				if (frm.elements[i].name == skips[ii]) clearit=false;
			}
			if (clearit) frm.elements[i].value = "";
		}
	}
}

/******************************
AJAX
******************************/
//initiates a new xho for multiple browsers
function getXmlHttpObject() {
	var xmlHttp=null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

//loads a page ala ajax
function loadAjaxPage(id) {
	if (id != "" && id !="undefined") {
		var url="../lib/participant_loader.php?id=" + id;
			xhp=getXmlHttpObject();
		if (xhp==null) {
			$("slider_content").innerHTML="This site requires a modern browser and JavaScript enabled.";
			return;
		}
		xhp.onreadystatechange=stateChanged;
		xhp.open("GET",url,true);
		xhp.send(null);
	}
}

//function called when there is a state change
function stateChanged() { 
	if (xhp.readyState==4) { //aka complete
		var rt = xhp.responseText;
		$("slider_content").innerHTML=rt;
		$("slider_content").innerHTML.evalScripts();  //run the eval on the completed script
		
		$('slider_wrapper').style.top = slider_cursorY + "px";
		slider_moveIt=true;
	}
}


//loads a page ala ajax
function loadFeaturePanel(section) {
	if (section != "" && section !="undefined") {
		var url="/lib/feature_panel_loader.php?section=" + section;
			xhp=getXmlHttpObject();
		if (xhp==null) {
			$("slider_content").innerHTML="This site requires a modern browser and JavaScript enabled.";
			return;
		}
		xhp.onreadystatechange=loadFeaturePanelChanged;
		xhp.open("GET",url,true);
		xhp.send(null);
	}
}

//function called when there is a state change
function loadFeaturePanelChanged() { 
	if (xhp.readyState==4) { //aka complete
		var rt = xhp.responseText;
		$("home_feature_content").innerHTML=rt;
		$("home_feature_content").innerHTML.evalScripts();  //run the eval on the completed script
	}
}

//loads a page ala ajax
function loadGallery(widgetid,tot,act) {
	if (widgetid != "" && widgetid !="undefined") {
		var url="/lib/gallery_loader.php?widgetid=" + widgetid + "&gal_tot="+tot+"&gal_active="+act;
			xhp=getXmlHttpObject();
		if (xhp==null) {
			$("gallery_embed").innerHTML="This site requires a modern browser and JavaScript enabled.";
			return;
		}
		xhp.onreadystatechange=stateChangedGallery;
		xhp.open("GET",url,true);
		xhp.send(null);
	}
}
//function called when there is a state change
function stateChangedGallery() { 
	if (xhp.readyState==4) { //aka complete
		var rt = xhp.responseText;
		$("gallery_embed").innerHTML=rt;
		$("gallery_embed").innerHTML.evalScripts();  //run the eval on the completed script
	}
}


/******************************
EXPANDABLES
******************************/
function expandablesToggle(id) {
	if ($(id).className=="expandable_body") {
		$(id).className="expandable_body display_none";
	} else {
		$(id).className="expandable_body";
	}
}
function expandAll(thecount, tagprefix,theyear) {
	if (theyear==undefined) theyear="";
	for (i=0;i<thecount;i++) {
		$(tagprefix+theyear+i).className="expandable_body";
	}
	$(tagprefix+theyear+'expandcollapse').innerHTML='<a onclick="collapseAll(' + thecount + ', \'' + tagprefix + '\', \'' + theyear + '\') ">collapse all</a>';
}
function collapseAll(thecount, tagprefix,theyear) {
	if (theyear==undefined) theyear="";
	for (i=0;i<thecount;i++) {
		$(tagprefix+theyear+i).className="expandable_body display_none";
	}
	$(tagprefix+theyear+'expandcollapse').innerHTML='<a onclick="expandAll(' + thecount + ', \'' + tagprefix + '\', \'' + theyear + '\') ">expand all</a>';
}

/******************************
SLEEP HEADERS
******************************/
function sleepToggle(id) {
	if ($(id).className=="sleep_sub_option") {
		$(id).className="sleep_sub_option display_none";
	} else {
		$(id).className="sleep_sub_option";
	}
}

function printGoodLifeGuide(pos) {
	if (pos==undefined) pos ="";
	document.write("<a");
	document.write(" onmouseover=\"changeImageSimple('goodlifeguide" + pos + "', '/images/site/sleep/goodlife_guide_over.jpg');return true;\"");
	document.write(" onmouseout=\"changeImageSimple('goodlifeguide" + pos + "', '/images/site/sleep/goodlife_guide_off.jpg');return true;\"");
	document.write(" href='/sleeping/Rothbury_GoodLife_Guide.pdf'");
	document.write(" target='_blank'");
	document.write("><img class='border_none' alt='the good life' name='goodlifeguide" + pos + "' src='/images/site/sleep/goodlife_guide_off.jpg'/></a>");
}

/******************************
DIV DISPLAY TOGGLE
******************************/
function divToggle(id, theclass) {
	if ($(id).className==theclass) {
		$(id).className=theclass + " display_none";
	} else {
		$(id).className=theclass;
	}
}

/******************************
2008/2009 toggle tabls
******************************/
var currToggle="2009";
function toggle(obj) {
	if (currToggle != obj) { 
		if (obj=="2008") { 
			changeImageSimple('2008image', '/images/site/tabs/2008_on.png');
			changeImageSimple('2009image', '/images/site/tabs/2009_off.png');
			changeClassSimple('2008holder', 'year_tab_year year_tab_year_active');
			changeClassSimple('2009holder', 'year_tab_year year_tab_year_inactive');
			var el = document.getElementById("2008");
			el.style.display = '';
			var el = document.getElementById("2009");
			el.style.display = 'none';
			currToggle="2008";
		} else {
			changeImageSimple('2009image', '/images/site/tabs/2009_on.png');
			changeImageSimple('2008image', '/images/site/tabs/2008_off.png');
			changeClassSimple('2009holder', 'year_tab_year year_tab_year_active');
			changeClassSimple('2008holder', 'year_tab_year year_tab_year_inactive');
			var el = document.getElementById("2009");
			el.style.display = '';
			var el = document.getElementById("2008");
			el.style.display = 'none';
			currToggle="2009";
		}
	}
}

function rollOverTab(tab) {
	var el = document.getElementById(tab);
	if (el.style.display == 'none') {
		changeImageSimple(tab + "image", '/images/site/tabs/' + tab + "_on.png");
	}
}

function rollOutTab(tab) {
	var el = document.getElementById(tab);
	if (el.style.display == 'none') {
		changeImageSimple(tab + "image", '/images/site/tabs/' + tab + "_off.png");
	}
}

/******************************
Left Navigator
******************************/

//used in left nav
function changeBorderOver(id) {
	$(id).className = "border_img_over";	
}
function changeBorderOut(id) {
	$(id).className = "border_img";	
}

//user in right column
function changeRightcolBorderOver(id) {
	$(id).className = "rightcol_border_img_over";	
}
function changeRightcolBorderOut(id) {
	$(id).className = "rightcol_border_img";	
}




/******************************
HANDLEBAR SLIDER
******************************/
/* slider functions */
// mouse wheel code from http://adomas.org/javascript-mouse-wheel/
function handle(delta, slider) {
	slider.setValueBy(-delta);
}
/** Event handler for mouse wheel event. */
function wheel(event, slider){
	var delta = 0;
	if (!event) /* For IE. */
		event = window.event;
	if (event.wheelDelta) { /* IE/Opera. */
		delta = event.wheelDelta/120;
		/** In Opera 9, delta differs in sign as compared to IE. */
		if (window.opera)
			delta = -delta;
	} else if (event.detail) { /** Mozilla case. */
		/** In Mozilla, sign of delta is different than in IE.
		* Also, delta is multiple of 3.
		*/
		delta = -event.detail/3;
	}

	/** If delta is nonzero, handle it.
	* Basically, delta is now positive if wheel was scrolled up,
	* and negative, if wheel was scrolled down.
	*/
	if (delta)
		handle(delta, slider);

	/** Prevent default actions caused by mouse wheel.
	* That might be ugly, but we handle scrolls somehow
	* anyway, so don't bother here..
	*/
	if (event.preventDefault)
		event.preventDefault();
	
	event.returnValue = false;
}
// scroll the element vertically based on its width and the slider maximum value
function scrollVertical(value, element, slider) {
	element.scrollTop = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
}

//loads a page with an individual slider on that page
//this uses prototype.js and slider.js
function loadSlider(id1, track1, handle1) {
	if (id1!=undefined&& id1!="") {
		// vertical slider control
		var slider1 = new Control.Slider(handle1, track1, {
			axis: 'vertical',
			range: $R(0,20),
			onSlide: function(v) { scrollVertical(v, $(id1), slider1);  },
			onChange: function(v) { scrollVertical(v, $(id1), slider1); }
		});
		
		// hide scrollbar  feature
		if ($(id1).scrollHeight <= $(id1).offsetHeight) {
			slider1.setDisabled();
			$(track1).hide();
		}
		
		Event.observe(id1, 'DOMMouseScroll', function(e){wheel(e, slider1)}); // mozilla
		Event.observe(id1, 'mousewheel', function(e){wheel(e, slider1)}); // IE/Opera
	}

}

/******************************
ON LOAD GOOD NEWSS
******************************/
function loadHome() {
	loadPage();
}
function loadPage() {
	preloadImages();
}


/******************************
GALLERY
******************************/
function makeGalleryActive(tot,act) { 
	//alert(tot);
	for (var i=0;i<tot;i++) { 
		if (i==act) { 
			$("gal"+i).className="gallery_header_active";
		} else { 
			$("gal"+i).className="";
		}
	}
}

/******************************
BROWSER DETECT
******************************/

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();