/*
 loginValidator.js
 utils.js
 searchValidator.js
 menu.js
 floating_login.js
 
 DOMhelp.js
 home.js
 home_hover.js
 home_cookies.js
*/

/*
-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------- loginValidator.js
-----------------------------------------------------------------------------------------------------------------------------
*/

function validateLogin() {
	if(trim(document.getElementById("username").value)=="" || trim(document.getElementById("password").value)=="") {
	   document.getElementById("loginError_loginForm").innerHTML = "Please enter a valid username and password";
	   document.getElementById("loginError_loginForm").style.display="block";
	   document.getElementById("password").value="";
		document.getElementById("username").value="";
		return false;
	}
	return true;
}

/*
-----------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------- utils.js
-----------------------------------------------------------------------------------------------------------------------------
*/

function LTrim( value ) {
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}

function RTrim( value ) {
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}

function trim( value ) {
	return LTrim(RTrim(value));
}

function validateInputField(fieldId, minLength, errorDivId, errorMessage) {
	var trimmedFieldValue = new String(trim(document.getElementById(fieldId).value));
	if(trimmedFieldValue.length < minLength) {
		document.getElementById(errorDivId).innerHTML = errorMessage;
		document.getElementById(errorDivId).style.display = 'block';
		document.getElementById(errorDivId + "1").style.display = 'block';
		
		return false;
	} else {
		if(document.getElementById(errorDivId).innerHTML.length > 0) {
		  document.getElementById(errorDivId).innerHTML = "";
		  document.getElementById(errorDivId).style.display = 'none';	  
		  document.getElementById(errorDivId + "1").style.display = 'none';
		 
		}
		return true;
	}
}

function validateEmailField(emailAddressDivId, errorDivId, errorMessage) {
	var trimmedFieldValue = new String(trim(document.getElementById(emailAddressDivId).value));
	var emailReg = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
	var regex = new RegExp(emailReg);
	var valid = regex.test(trimmedFieldValue);
	if(valid) {
		document.getElementById(errorDivId).innerHTML = "";
		document.getElementById(errorDivId).style.display = 'none';
		document.getElementById(errorDivId + "1").style.display = 'none';
	
		
	} else {
		document.getElementById(errorDivId).innerHTML = errorMessage;
		document.getElementById(errorDivId).style.display = 'block';
		document.getElementById(errorDivId + "1").style.display = 'block';
	}
	return valid;
}

function showHidePreview (inVal) {
            if (document.getElementById('preview' + inVal).style.display == "block") {
                        document.getElementById('preview' + inVal).style.display = 'none';
            }
            else {
                        document.getElementById('preview' + inVal).style.display = 'block';
            }
}

function hideDiv(divId) {
	document.getElementById(divId).style.display = 'none';
}

/*
 * This function is used to clear and close the floating login form, which is displayed on all pages.
 * Invoked when user clicks on the login link, or the 'x' in the top right hand corner of the login box. 
 */
function resetLoginFormAndHideIt() {
	document.getElementById('loginError_loginForm').innerHTML = '';
	document.getElementById('loginError_loginForm').style.display = 'none';
	document.getElementById('loginForm').username.value = "";
	document.getElementById('loginForm').password.value = "";		
	document.getElementById('floating_login_form').style.display = 'none';
}

/* convenience method for calling unica tagging with an onclick 
 * fixes IE vs Firefox bug when target=_blank
 */
function callUnica(unicaString) {
	ntptLinkTag(this, unicaString);
	return true;
}

function getCookieValue(name) {
	var nameValuePairs = document.cookie.split(';');
	for(var i=0;i < nameValuePairs.length;i++) {
		var nameValuePair = unescape(nameValuePairs[i].replace(" ","")); // spaces used for display in the document.cookie() removed
		if(nameValuePair.indexOf(name+"=")!= -1) {
			return nameValuePair.substring(name.length + 1, nameValuePair.length);
		}
	}
	return "";
}

function deleteCookie(name) {
	// A cookie can only be deleted by setting its expiry date to one in the past.
	// Internally javascript stores all dates as a number from the 1st of January 1970
	// so by setting cookies expiry date to this we are effectively setting the date to zero.
	document.cookie = name +'=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
}

function storeCookie(name, value) {
	document.cookie = name+"="+escape(value);
}

/*
-----------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- searchValidator.js
-----------------------------------------------------------------------------------------------------------------------------
*/

function validateSearchString() {
	if(isBlank("searchTerm") ) {
 		document.getElementById("searchError").innerHTML = "Please enter a search term.";
		return false;
 	}
 	return true;
}

function isBlank(elementId) {
	if(trim(document.getElementById(elementId).value)=="" ) {
		return true;
 	}
	return false;
}

/*
-----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------- menu.js
-----------------------------------------------------------------------------------------------------------------------------
*/

ie6Hover = function() {
    var sfEls = document.getElementById("qm0").getElementsByTagName("LI");
    for (var i=0; i<sfEls.length; i++) {
        sfEls[i].onmouseover=function() {
            this.className+=" ie6hover";
        }
        sfEls[i].onmouseout=function() {
            this.className=this.className.replace(new RegExp(" ie6hover\\b"), "");
        }
    }
}

if (window.attachEvent) window.attachEvent("onload", ie6Hover);

/*
-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------- floating_login.js
-----------------------------------------------------------------------------------------------------------------------------
*/

function checkUsernameAndPasswordEnteredAndDisplayErrorIfNot (formId) {
	var usernameAndPasswordEnteredCorrectly = false;
	usernameAndPasswordEnteredCorrectly = document.getElementById(formId).username.value != "" && document.getElementById(formId).password.value != "";
	if (!usernameAndPasswordEnteredCorrectly) showErrorWithCorrectMessage(formId);
	return usernameAndPasswordEnteredCorrectly;

	function showErrorWithCorrectMessage(formId) {
		setErrorMessageText(formId);
	    document.getElementById(toErrorDivId(formId)).style.display = 'block';
		if (document.getElementById(formId).password.value == "") { document.getElementById(formId).password.focus(); }
		if (document.getElementById(formId).username.value == "") { document.getElementById(formId).username.focus(); }
	}
	
	function setErrorMessageText(formId) {
		var form = document.getElementById(formId);
		if (form.username.value == "" && form.password.value == "") {
			document.getElementById(toErrorDivId(formId)).innerHTML = "Enter a username and password"; 
		}
		else if (form.username.value == "") {
			document.getElementById(toErrorDivId(formId)).innerHTML = "Please enter a username"; 
		}
		else if (form.password.value == "") {
			document.getElementById(toErrorDivId(formId)).innerHTML = "Please enter a password"; 
		}
	}
}

function toggleLoginDisplay () {
	if (document.getElementById('floating_login_form').style.display == "block") {
		resetLoginFormAndHideIt();
	}
	else {
		document.getElementById('floating_login_form').style.display = 'block';
		document.loginForm.username.focus();
	}
}

function closeLogin () {
	resetLoginFormAndHideIt();
}

function calcYoffset () {
	var dsoctop;
	if (navigator.userAgent.indexOf("Firefox") != -1) {
		dsoctop = window.pageYOffset;
	}
	else { 
		var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;
		dsoctop = iebody.scrollTop; 
	}

	document.getElementById('floating_login_form').style.top = document.getElementById("AE_links_container").offsetTop - dsoctop + 18 + "px";

	var tmpx;
	tmpx = (document.documentElement.clientWidth - 1000) / 2;
	document.getElementById('floating_login_form').style.left = document.documentElement.clientWidth - 263 - tmpx + 6 + "px";
}

function toErrorDivId(formId) {
	return 'loginError_' + formId;
}

/*
-----------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------ DOMhelp.js
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
*/

/*
	DOMhelp 1.0
	written by Chris Heilmann
	http://www.wait-till-i.com
*/
DOMhelp={
	debugWindowId:'DOMhelpdebug',
	init:function(){
		if(!document.getElementById || !document.createTextNode){return;}
	},
	
	getTarget:function(e){
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		while(target.nodeType!=1 && target.nodeName.toLowerCase()!='body'){
			target=target.parentNode;
		}
		return target;
	},
	
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		if (e && e.stopPropagation && e.preventDefault){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	addEvent: function(elm, evType, fn, useCapture){
		if (elm.addEventListener){
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	}
}

DOMhelp.addEvent(window, 'load', DOMhelp.init, false);

/*
-----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------- home.js
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
*/

	tabscript = {

		//global properties
		parentBox : 'box_1', //id of box we are working in
		tabMenu : 'box_1_tabs', //id of ul which holds tabs
		links : [], //array to hold links. Don't actually need right now
		tabs : [], //array to hold tabs
		divs : [], //array to hold divs
		current: 'box_1_tabinfo_1', ///currently selected tab
		
		//initialisation function
		init:function() {

			if(!document.getElementById || !document.createTextNode){return;} //check basic JS support

			var parentdiv=document.getElementById(tabscript.parentBox); //specify parent box
			var tablist=document.getElementById(tabscript.tabMenu); //specify tab set
			if(!parentdiv || !tablist){return;} //check they both exist

			var tablinks = tablist.getElementsByTagName('a'); //get list of links within tabs

			for(var i=0;i<tablinks.length;i++){
				DOMhelp.addEvent(tablinks[i],'click',tabscript.getSection,false);

				targetName=tablinks[i].getAttribute('href').replace(/.*#/,''); //find where the tab links point to, get rid of #
				tablinks[i].targetName=targetName;
				if(i==0){var presetLink=targetName};

		 		targetElement=document.getElementById(targetName); //id element tablink points at
					if(targetElement){ // add link, tab and target to arrays
						tabscript.divs[targetName]=targetElement.parentNode;
						tabscript.links[targetName]=tablinks[i];
						tabscript.tabs[targetName]=tablinks[i].parentNode;
					}
			}
		},

		//find which info section the clicked tab points to, trigger function to show that block
		getSection: function(e) {
			var t = DOMhelp.getTarget(e);
			var tt = t.parentNode;
			tabscript.showSection(tt.targetName);
			DOMhelp.cancelClick(e); //stop default jump-to-link behavior
		},

		showSection: function(sectionName) {
			if(tabscript.current!=null){
				tabscript.divs[tabscript.current].className = 'tabinfo';
				tabscript.tabs[tabscript.current].className = 'tab';
			}
			tabscript.divs[sectionName].className = 'tabinfo_selected';
			tabscript.tabs[sectionName].className = 'tab_selected';
			tabscript.current=sectionName;
		}
	}

	DOMhelp.addEvent(window,'load',tabscript.init,false);

/*
-----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------- home_hover.js
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
*/	

var curleft = 0;
var curtop = 0;
var shortjrnl;

function findPos(obj) {	// this routine determines absolute position of the incoming object
	curleft = 0;
	curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return;
}

function hoverIn (InPic,journalShortName) {
	
	shortjrnl = journalShortName;
	
	if (journalShortName == "laninf") { 
		InPic.style.borderTop = '3px solid #936FB1';
		InPic.style.borderLeft = '3px solid #936FB1';
		InPic.style.borderBottom = '3px solid #936FB1';
		document.getElementById("jrnl_hover").style.backgroundColor = '#936FB1';

	}
	else if (journalShortName == "laneur") { 
		InPic.style.borderTop = '3px solid #6CB33E';
		InPic.style.borderLeft = '3px solid #6CB33E';
		InPic.style.borderBottom = '3px solid #6CB33E';
		document.getElementById("jrnl_hover").style.backgroundColor = '#6CB33E';

	}
	else if (journalShortName == "lanonc") { 
		InPic.style.borderTop = '3px solid #ee3123';
		InPic.style.borderLeft = '3px solid #ee3123';
		InPic.style.borderBottom = '3px solid #ee3123';
		document.getElementById("jrnl_hover").style.backgroundColor = '#ee3123';

	}
	else if (journalShortName == "lancet") { 
		InPic.style.borderTop = '3px solid #4d6a75';
		InPic.style.borderLeft = '3px solid #4d6a75';
		InPic.style.borderBottom = '3px solid #4d6a75';
		document.getElementById("jrnl_hover").style.backgroundColor = '#4d6a75';
	}

	var tmpy = findPos (InPic);
	document.getElementById("jrnl_hover").style.top = curtop + 'px';
	document.getElementById("jrnl_hover").style.left = curleft + 115 + 'px';
	document.getElementById("jrnl_hover").innerHTML = document.getElementById(journalShortName + '_cover_hover').innerHTML;
	document.getElementById("jrnl_hover").style.display = 'block';
}

function hoverOut (InPic) {
	InPic.style.border = '3px solid #eaeaea';
	document.getElementById("jrnl_hover").style.display = 'none';
}

function hoverOn () {
	
	document.getElementById("jrnl_hover").style.display = 'block';
	var borderColor;
	
	if (shortjrnl == "laninf") { 
		borderColor = '3px solid #936FB1';
	}
	else if (shortjrnl == "laneur") { 
		borderColor = '3px solid #6CB33E';
	}
	else if (shortjrnl == "lanonc") { 
		borderColor = '3px solid #ee3123';
	}
	else if (shortjrnl == "lancet") { 
		borderColor = '3px solid #4d6a75';
	}
	
	document.getElementById("cover_image_" + shortjrnl).style.borderTop = borderColor;
	document.getElementById("cover_image_" + shortjrnl).style.borderLeft = borderColor;
	document.getElementById("cover_image_" + shortjrnl).style.borderBottom = borderColor;
}

function hoverOff () {
	document.getElementById("jrnl_hover").style.display = 'none';
	var borderColor = '3px solid #eaeaea';
	document.getElementById("cover_image_lancet").style.border = borderColor;
	document.getElementById("cover_image_laninf").style.border = borderColor;
	document.getElementById("cover_image_laneur").style.border = borderColor;
	document.getElementById("cover_image_lanonc").style.border = borderColor;
}

/*
-----------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------- home_cookies.js
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
*/	

function close_welcome () {
	document.getElementById('home_welcome_container').style.display = 'none';
	setCookie('lancet_welcome','closed',1);
}

function getCookie(c_name)
{
	if (document.cookie.length > 0)
	  {
	  c_start=document.cookie.indexOf(c_name + "=");
	  if (c_start!=-1)
	    { 
	    c_start=c_start + c_name.length+1 ;
	    c_end=document.cookie.indexOf(";",c_start);
	    if (c_end==-1) c_end=document.cookie.length
	    return unescape(document.cookie.substring(c_start,c_end));
	    } 
	  }
	return ""
}

function setCookie(c_name,value,expiredays)
{
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : "; expires="+"");
}

function check_welcome_cookie () {
	var tmpcookieval = getCookie('lancet_welcome');
	if (tmpcookieval == "closed") {
		document.getElementById('home_welcome_container').style.display = 'none';
	}
}

function check_home__tab_cookies () {
	// if TWIM tab was last selected ... make it visible
	tmpcookieval = getCookie('lancet_tabs_onlinefirst_twim');
	if (tmpcookieval == "twim") {
		document.getElementById('home_news_tab2').className = "selected";
		document.getElementById('home_news_tab1').className = "";
		document.getElementById('home_onlinefirst').style.display = 'none';
		document.getElementById('home_twim').style.display = 'block';
	}
	
	// if MOST CITED tab was last selected ... make it visible
	tmpcookieval = getCookie('lancet_tabs_mostread_mostcited');
	if (tmpcookieval == "mostcited") {
		document.getElementById('home_mosttab0').className = "selected";
		document.getElementById('home_mosttab1').className = "";
		document.getElementById('home_mostread').style.display = 'none';
		document.getElementById('home_mostcited').style.display = 'block';
	}

	// if VIDEO tab was last selected ... make it visible
	tmpcookieval = getCookie('lancet_tabs_video_audio');
	if (tmpcookieval == "video") {
		document.getElementById('home_video').style.display = 'block';
		document.getElementById('home_multimedia_tab1').className = "selected";
		document.getElementById('home_podcasts').style.display = 'none';
		document.getElementById('home_multimedia_tab2').className = "";
		document.getElementById('home_atl').style.display = 'none';
		document.getElementById('home_multimedia_tab3').className = "";
	}
	
	// if AUDIO tab was last selected ... make it visible
	tmpcookieval = getCookie('lancet_tabs_video_audio');
	if (tmpcookieval == "audio") {
		document.getElementById('home_video').style.display = 'none';
		document.getElementById('home_multimedia_tab1').className = "";
		document.getElementById('home_podcasts').style.display = 'block';
		document.getElementById('home_multimedia_tab2').className = "selected";
		document.getElementById('home_atl').style.display = 'none';
		document.getElementById('home_multimedia_tab3').className = "";
	}

	// if ATL tab was last selected ... make it visible
	tmpcookieval = getCookie('lancet_tabs_video_audio');
	if (tmpcookieval == "atl") {
		document.getElementById('home_video').style.display = 'none';
		document.getElementById('home_multimedia_tab1').className = "";
		document.getElementById('home_podcasts').style.display = '';
		document.getElementById('home_multimedia_tab2').className = "none";
		document.getElementById('home_atl').style.display = 'block';
		document.getElementById('home_multimedia_tab3').className = "selected";
        }
}
