/*
These scripts makes extensive use of the Prototype JS library.
See http://www.sergiopereira.com/articles/prototype.js.html for Developer Notes reference

Lines commented with "{PT}" denote that there is a prototype object, method, or property being used.
The $() function is used very extensively and will not be commented. For all intents and purposes, here it is equivalent to document.getElementById().
*/

window.onload = function(){
	attachListeners(true);
}

function attachListeners(resetModules){
	// initialize Product-related Questions & Services module, hide and slide close the sliding div
	if(resetModules){
		if(document.getElementById('pqs') && document.getElementById('pqsExpandedWrapper')){
			setModuleUI('pqs','collapsed');
		}

		// initialize EPIR module, hide and slide close the sliding div
		if(document.getElementById('emq') && document.getElementById('emqExpandedWrapper')){
			setModuleUI('emq','collapsed');
		}
	}

	// set up event listeners on required fields for the MOC form for enabling submit button
	if(document.getElementById('moc')){
		var formId = 'moc';
		var buttonId = 'mocsubmit';
		enableForm(formId);

		if(document.getElementById('phonerqrd')){
			Event.observe($('phonerqrd'),'keyup',function(){enableForm(formId)},false); // {PT} attach fcn for req field onkeyup
			Event.observe($('phonerqrd'),'blur',function(){enableForm(formId)},false); // {PT} fix for browser autocomplete
			Event.observe($('phonerqrd'),'keypress',function(event){return clickButton(event,buttonId)},false);
		}
		if(document.getElementById('ext')){
			Event.observe($('ext'),'keypress',function(event){return clickButton(event,buttonId)},false);
		}
	}

	// set up event listeners on required fields for the PQs form for enabling submit button
	if(document.getElementById('nsccallback')){
		var nscFormId = 'nsccallback';
		var nscButtonId = 'nsccallbacksubmit';
		enableForm(nscFormId);

		// {PT} The following set up listener on req fields that check if form should be enabled
		if(document.getElementById('fnamerqrd')){
			Event.observe($('fnamerqrd'),'keyup',function(){enableForm(nscFormId)},false);
			Event.observe($('fnamerqrd'),'blur',function(){enableForm(nscFormId)},false);
			Event.observe($('fnamerqrd'),'keypress',function(event){return clickButton(event,nscButtonId)},false);
		}
		if(document.getElementById('lnamerqrd')){
			Event.observe($('lnamerqrd'),'keyup',function(){enableForm(nscFormId)},false);
			Event.observe($('lnamerqrd'),'blur',function(){enableForm(nscFormId)},false);
			Event.observe($('lnamerqrd'),'keypress',function(event){return clickButton(event,nscButtonId)},false);
		}
		if(document.getElementById('zipcoderqrd')){
			Event.observe($('zipcoderqrd'),'keyup',function(){enableForm(nscFormId)},false);
			Event.observe($('zipcoderqrd'),'blur',function(){enableForm(nscFormId)},false);
			Event.observe($('zipcoderqrd'),'keypress',function(event){return clickButton(event,nscButtonId)},false);
		}
		if(document.getElementById('phonerqrd')){
			Event.observe($('phonerqrd'),'keyup',function(){enableForm(nscFormId)},false);
			Event.observe($('phonerqrd'),'blur',function(){enableForm(nscFormId)},false);
			Event.observe($('phonerqrd'),'keypress',function(event){return clickButton(event,nscButtonId)},false);
		}
		if(document.getElementById('ext')){Event.observe($('ext'),'keypress',function(event){return clickButton(event,nscButtonId)},false);}
		if(document.getElementById('mins5')){Event.observe($('mins5'),'keypress',function(event){return clickButton(event,nscButtonId)},false);}
		if(document.getElementById('mins10')){Event.observe($('mins10'),'keypress',function(event){return clickButton(event,nscButtonId)},false);}
		if(document.getElementById('mins15')){Event.observe($('mins15'),'keypress',function(event){return clickButton(event,nscButtonId)},false);}
		if(document.getElementById('concerningvaccine')){Event.observe($('concerningvaccine'),'keypress',function(event){return clickButton(event,nscButtonId)},false);}
	}

	// set up event listeners on required fields for the PQs form for enabling submit button
	if(document.getElementById('nbgcallback')){
		var nbgFormId = 'nbgcallback';
		var nbgButtonId = 'nbgcallbacksubmit';
		enableForm(nbgFormId);

		// {PT} The following set up listener on req fields that check if form should be enabled
		if(document.getElementById('fnamerqrd')){
			Event.observe($('fnamerqrd'),'keyup',function(){enableForm(nbgFormId)},false);
			Event.observe($('fnamerqrd'),'blur',function(){enableForm(nbgFormId)},false);
			Event.observe($('fnamerqrd'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);
		}
		if(document.getElementById('lnamerqrd')){
			Event.observe($('lnamerqrd'),'keyup',function(){enableForm(nbgFormId)},false);
			Event.observe($('lnamerqrd'),'blur',function(){enableForm(nbgFormId)},false);
			Event.observe($('lnamerqrd'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);
		}
		if(document.getElementById('zipcoderqrd')){
			Event.observe($('zipcoderqrd'),'keyup',function(){enableForm(nbgFormId)},false);
			Event.observe($('zipcoderqrd'),'blur',function(){enableForm(nbgFormId)},false);
			Event.observe($('zipcoderqrd'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);
		}
		if(document.getElementById('phonerqrd')){
			Event.observe($('phonerqrd'),'keyup',function(){enableForm(nbgFormId)},false);
			Event.observe($('phonerqrd'),'blur',function(){enableForm(nbgFormId)},false);
			Event.observe($('phonerqrd'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);
		}
		if(document.getElementById('ext')){Event.observe($('ext'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);}
		if(document.getElementById('mins5')){Event.observe($('mins5'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);}
		if(document.getElementById('mins10')){Event.observe($('mins10'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);}
		if(document.getElementById('mins15')){Event.observe($('mins15'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);}
		if(document.getElementById('concerningvaccine')){Event.observe($('concerningvaccine'),'keypress',function(event){return clickButton(event,nbgButtonId)},false);}
	}

	// set up event listeners on required fields for the EPIR form for enabling submit button
	if(document.getElementById('epirq')){
		var formId = 'epirq';
		var buttonId = 'epirqsubmit';
		enableForm(formId);

		// {PT} see above
		if(document.getElementById('productrqrd')){
			Event.observe($('productrqrd'),'change',function(){enableForm(formId)},false);
			Event.observe($('productrqrd'),'blur',function(){enableForm(formId)},false);
		}
		if(document.getElementById('questionrqrd')){
			Event.observe($('questionrqrd'),'keyup',function(){enableForm(formId)},false);
			Event.observe($('questionrqrd'),'blur',function(){enableForm(formId)},false);
			Event.observe($('questionrqrd'),'click',function(){enableForm(formId)},false);
		}
	}

	// set up event listeners on required fields for the Site Technical Support form for enabling submit button
	if(document.getElementById('stsq')){
		var stsFormId = 'stsq';
		var stsButtonId = 'stsqsubmit';
		enableForm(stsFormId);

		// {PT} see above
		if(document.getElementById('fnamerqrd')){
			Event.observe($('fnamerqrd'),'keyup',function(){enableForm(stsFormId)},false);
			Event.observe($('fnamerqrd'),'blur',function(){enableForm(stsFormId)},false);
			Event.observe($('fnamerqrd'),'keypress',function(event){return clickButton(event,stsButtonId)},false);
		}
		if(document.getElementById('lnamerqrd')){
			Event.observe($('lnamerqrd'),'keyup',function(){enableForm(stsFormId)},false);
			Event.observe($('lnamerqrd'),'blur',function(){enableForm(stsFormId)},false);
			Event.observe($('lnamerqrd'),'keypress',function(event){return clickButton(event,stsButtonId)},false);
		}
		if(document.getElementById('emailrqrd')){
			Event.observe($('emailrqrd'),'keyup',function(){enableForm(stsFormId)},false);
			Event.observe($('emailrqrd'),'blur',function(){enableForm(stsFormId)},false);
			Event.observe($('emailrqrd'),'keypress',function(event){return clickButton(event,stsButtonId)},false);
		}
		if(document.getElementById('questionrqrd')){
			Event.observe($('questionrqrd'),'keyup',function(){enableForm(stsFormId)},false);
			Event.observe($('questionrqrd'),'blur',function(){enableForm(stsFormId)},false);
			Event.observe($('questionrqrd'),'click',function(){enableForm(stsFormId)},false);
		}
	}

	// Initialize the character limit count display
	if(document.getElementById('questionrqrd')){
		var charMax = 1000;
		if(document.getElementById('countdown')){$('countdown').value=charMax;}
		Event.observe($('questionrqrd'),'keyup',function(){checkCharLength($('questionrqrd'),charMax,'countdown');},false); // {PT} ttach character length checker to the question textbox
		Event.observe($('questionrqrd'),'blur',function(){checkCharLength($('questionrqrd'),charMax,'countdown');},false); // {PT} ttach character length checker to the question textbox
		Event.observe($('questionrqrd'),'click',function(){checkCharLength($('questionrqrd'),charMax,'countdown');},false); // {PT} ttach character length checker to the question textbox
	}
}

/* Form validation functions */

/*
*	Assumption for getRequiredInputs():
*	Required text inputs will have an id ending in "rqrd"
*	Returns array of IDs of required fields
*/
function getRequiredInputs(formId){
	var allInputs = Form.getElements(formId); // {PT} gets all inputs for given form
	var requiredInputIds = new Array();
	allInputs.each( // {PT} loops through object
		function(input){
			// check that rqrd is appended to end of ID and add items to array
			if(input.id.lastIndexOf('rqrd')==(input.id.length-4) && input.id.length > 4){
				requiredInputIds.push(input.id);// add fields that are rqrd to the rqrdInputs array
			}
		}
	);
	return requiredInputIds;
}
/*
*	validateForm checks that all required fields have valid user input,
*	if no invalid input is found, form is submitted using appropriate submit function
*/
function validateForm(formId,handlerURL){
	var rqrdInputIds = getRequiredInputs(formId); // {PT} gets all inputs for given form
	var isValidArray = new Array();
	rqrdInputIds.each( // {PT} loops through object
		function(inputElementId){
			isValidArray.push(validateRqrdInput(inputElementId)); // fills the array with either 'valid' or 'invalid' for each input
		}
	);
	if(isValidArray.indexOf("invalid")==-1){ // {PT, extension of Array} checks for any of the items in the array to have a value of 'invalid', as returned from the validateRqrdField method, if not found, call submit function
		switch(formId){
			case "stsq":
				stsqSubmit(handlerURL);
				break;
			case "epirq":
				epirqSubmit(handlerURL);
				break;
			case "nsccallback":
				nscCallbackSubmit(handlerURL);
				break;
			case "nbgcallback":
				nbgCallbackSubmit(handlerURL);
				break;
			case "moc":
				mocCallbackSubmit(handlerURL);
				break;
		}
	}
}

// Regular expressions to validate data format
var regExpSelect=-1; // not a regex
var regExpName=/^[A-Za-z0-9 '-]{1,20}$/;
var regExpQuestion=/^[^\s][\sA-Za-z0-9-.!~,?'"()]+$/;
var regExpZip=/^(\d{5})$/;
var regExpPhone=/^\(?([2-9])(\d{2})\)?[- .]?(\d{3})[- .]?(\d{4})$/;
var regExpEmail=/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$/;

/*
*	validateRqrdField assumptions:
*	1. The required field id has "rqrd" concatenated. ex. fnamerqrd, emailrqrd
*	2. The required field is inside of a list-item (<li>) with an id in the form <inputid>+li. ex. fnameli,emailli
*	3. The error message is placed directly after the input
*/
function validateRqrdInput(fieldId){
	var regex = '';
	var errormsg = '';
	// set regex and error msg according to the name, check if the element is SELECT first
	if($(fieldId).tagName.toLowerCase()=="select"){
		regex = regExpSelect;
		errormsg = 'Please select a product';
	}
	else if(fieldId.indexOf("fname")>-1){
		regex = regExpName;
		errormsg = 'Please enter your First Name';
	}
	else if (fieldId.indexOf("lname")>-1){
		regex = regExpName;
		errormsg = 'Please enter your Last Name';
	}
	else if (fieldId.indexOf("question")>-1){
		regex = regExpQuestion;
		errormsg = 'Illegal character(s) entered. Only the following special characters are permitted (- . , ! ? \' ").';
	}
	else if (fieldId.indexOf("email")>-1){
		regex = regExpEmail;
		errormsg = 'Please enter a valid email address';
	}
	else if (fieldId.indexOf("zipcode")>-1){
		regex = regExpZip;
		errormsg = 'Please enter a valid zip code';
	}
	else if (fieldId.indexOf("phone")>-1){
		regex = regExpPhone;
		errormsg = 'Please enter a valid phone number';
	}
	if(regex!=null){//make sure there's a regex obj
		var containingLi = fieldId.substring(fieldId,fieldId.indexOf("rqrd"))+"li"; // (see assumption #2 above)

		// remove all <p class="error"> from given LI each time to ensure messages aren't repeated
		var errorArray = document.getElementsByClassName("error",containingLi).each( // {PT} getElementsByClassName and looping
			function(errorElement){
				errorElement.parentNode.removeChild(errorElement);
			}
		);
		if(regex==-1){// for SELECT inputs, don't test against a regex
			if ($F(fieldId)==regex||$F(fieldId)=="null"){ // {PT} $F() gets value of element
				Element.addClassName($(containingLi),'invalid'); // {PT} adds 'invalid' class to the LI, (see assumption #2 above)
				if(errormsg!=''){new Insertion.After(fieldId,'<p class="error">'+errormsg+'</p>')}; // {PT} insert error message into DOM tree, (see assumption #3 above)
				return 'invalid';
			}
		}
		else{
			if(!regex.test($F(fieldId))){ // {PT} $F() gets value of element
				Element.addClassName($(containingLi),'invalid'); // {PT} adds 'invalid' class to the LI, (see assumption #2 above)
				if(errormsg!=''){new Insertion.After(fieldId,'<p class="error">'+errormsg+'</p>')}; // {PT} insert error message into DOM tree, (see assumption #3 above)
				return 'invalid';
			}
			else {
				Element.removeClassName($(containingLi),'invalid'); // {PT} removes 'invalid' class from the LI, (see assumption #2 above)
				return 'valid';
			}
		}
	}// end if(regex!=null)
}

/*
*	Checks if form button should be enabled
*	Assumptions:
*	1. Submit button has the ID of the form with "submit" concatenated, e.g. mocsubmit, epirqsubmit
*	2. Required fields have "rqrd" concatenated to the ID
*/
function enableForm(formId){
	var isCompleted = false;

	var rqrdInputs = getRequiredInputs(formId); // array of IDs of required fields for given form ID

	var emptyflag = '';
	if(rqrdInputs.length>0){ // not empty
		rqrdInputs.each( // {PT} looping through object
			function(input){
				// add the ID to the emptyflag string if the field, textbox or drop-down is in default state
				if(($(input).tagName.toLowerCase()=="input" || $(input).tagName.toLowerCase()=="textarea") && $F(input).length==0){
					emptyflag+=input;
				}
				else if($(input).tagName.toLowerCase()=="select" && ($F(input)==-1||$F(input)=="null")){
					emptyflag+=input;
				}
				isCompleted = (emptyflag=='');
			}
		);
	}
	else {isCompleted=true;}

	var submitBtn = $(formId+'submit');

	if(isCompleted && submitBtn){ // enable button if the form is in a submittable state and the button exists
		submitBtn.disabled=false;
		Element.removeClassName(submitBtn,'disabled'); // {PT} class handles active/inactive bg image
	}
	else {
		submitBtn.disabled=true;
		Element.addClassName(submitBtn,'disabled'); // {PT} class handles active/inactive bg image
	}
}

// character length check
function checkCharLength (textField,maxLength,counterId){
	if($F(textField).length > maxLength){ // {PT} $F() returns the value of the form element argument
		Element.addClassName($(counterId+'li'),'invalid'); //{PT}
		textField.value = $F(textField).substring(0,maxLength); // {PT}
		$(counterId).value = 0;
	}
	else {
		$(counterId).value = maxLength - $F(textField).length; // {PT}
		if((maxLength - $F(textField).length)==0){
			Element.addClassName($(counterId+'li'),'invalid'); // {PT}
		}
		else{
			Element.removeClassName($(counterId+'li'),'invalid'); // {PT}
		}

	}
}
/* END Form validation functions */

/* Site Technical Support AJAX functions */
function stsqSubmit(stsURL){
	var stsqurl = stsURL;
	var stsqparams = Form.serialize('stsq'); // {PT} converts name/value pairs of form into a querystring

	stsqurl += ((stsqurl.indexOf("?")>-1)?"&":"?") + stsqparams;

	var myAjax = new Ajax.Request( // {PT} AJAX object
		stsqurl,
		{
			method: 'post',
			parameters: '',
			onComplete: stsqResponse
		});
}
function stsqResponse(originalRequest){// {PT} AJAX handler function

	if (sessionExpired(originalRequest.responseText)){
		window.location.href = "/portal/site/merckproductservices/?front_door=true&epi-content=ERRORSTO";
	}
	else
	{
		//need to replace node with response text
		var newStsNode = document.createElement('div'); // create new DOM node
		newStsNode.innerHTML = originalRequest.responseText; // fill node with response
		stsNodeToReplace = $('sts'); // get handle on node to replace
		stsNodeToReplace.parentNode.replaceChild(newStsNode,stsNodeToReplace); // replace

		if(document.getElementById('stsq')){Form.reset($('stsq'));}
		enableForm('stsq');
		attachListeners(false);
	}
}
/* end Site Technical Support AJAX functions */

/* Email Medical Question AJAX functions */
function epirqSubmit(epirURL){
	var epirqurl = epirURL;
	var epirqparams = Form.serialize($('epirq')); // {PT} converts name/value pairs of form into a querystring

	epirqurl += ((epirqurl.indexOf("?")>-1)?"&":"?") + epirqparams;

	var myAjax = new Ajax.Request(//{PT} AJAX object
		epirqurl,
		{
			method: 'post',
			parameters: '',
			onComplete: epirqResponse
		});

}
function epirqResponse(originalRequest){//{PT} AJAX handler function
	if (sessionExpired(originalRequest.responseText)){
		window.location.href = "/portal/site/merckproductservices/?front_door=true&epi-content=ERRORSTO";
	}
	else{
		slideClose('emq');
		if($('sentProd')){
			$('sentProd').innerHTML = "<strong>Product:</strong><br>"+$F('productrqrd');
		}
		if($('sentQues')){
			$('sentQues').innerHTML = "<strong>Question:</strong><br>"+$F('questionrqrd');
		}
		// hide default, display thank you
		$('emqDefault').style.display = "none";
		$('emqExpandedWrapper').style.display = "none";
		$('emqThankyou').style.display = "block";

		//need to replace node with response text
		var newEmqNode = document.createElement('div'); // create new DOM node
		newEmqNode.innerHTML = originalRequest.responseText; // fill node with response
		emqNodeToReplace = $('emqresponses'); // get handle on node to replace
		emqNodeToReplace.parentNode.replaceChild(newEmqNode,emqNodeToReplace); // replace

		Form.reset($('epirq'));
		attachListeners(false);

		if(document.getElementById('questionrqrd')){
			Element.removeClassName($('countdownli'),'invalid');
		}
		setTimeout(
			function(){
				if(document.getElementById('emqCollapsedView'))
					new Effect.Highlight($('emqCollapsedView'), {startcolor:'#FFFF99', endcolor:'#F2F5FA',duration:1.0})
				if(document.getElementById('emqresponsesCollapsedView'))
					new Effect.Highlight($('emqresponsesCollapsedView'), {startcolor:'#FFFF99', endcolor:'#F2F5FA',duration:1.0})
			},
			400
		);
	}
}
/* end Email Medical Question AJAX functions */

/* NSC Callback AJAX functions */
function nscCallbackSubmit(nscURL){
	var nsccallbackurl = nscURL;
	var nsccallbackparams = Form.serialize($('nsccallback')); // {PT} converts name/value pairs of form into a querystring

	nsccallbackurl += ((nsccallbackurl.indexOf("?")>-1)?"&":"?") + nsccallbackparams;

	var myAjax = new Ajax.Request(// {PT} AJAX object
		nsccallbackurl,
		{
			method: 'post',
			parameters: '',
			onComplete: nscCallbackResponse
		});
}
function nscCallbackResponse(originalRequest){ // {PT} AJAX handler
	if (sessionExpired(originalRequest.responseText)){
		window.location.href = "/portal/site/merckproductservices/?front_door=true&epi-content=ERRORSTO";
	}
	else
	{
		//need to replace node with response text
		var newNscNode = document.createElement('div'); // create new DOM node
		newNscNode.innerHTML = originalRequest.responseText; // fill node with response
		nscNodeToReplace = $('pqs'); // get handle on node to replace
		nscNodeToReplace.parentNode.replaceChild(newNscNode,nscNodeToReplace); // replace
		slideClose('pqs');
		attachListeners(true);
	}
}
/* end NSC Callback AJAX functions */

/* NSC Callback AJAX functions */
/* MOC Callback Submit function */
function nbgCallbackSubmit(nbgURL){
	var nbgcallbackurl = nbgURL;
	var nbgcallbackparams = Form.serialize($('nbgcallback')); // {PT} converts name/value pairs of form into a querystring

	nbgcallbackurl += ((nbgcallbackurl.indexOf("?")>-1)?"&":"?") + nbgcallbackparams;

	var myAjax = new Ajax.Request(// {PT} AJAX object
			nbgcallbackurl,
			{
				method: 'post',
				parameters: '',
				onComplete: nbgCallbackResponse
		});
}

function nbgCallbackResponse(originalRequest){
	if (sessionExpired(originalRequest.responseText)){
		window.location.href = "/portal/site/merckproductservices/?front_door=true&epi-content=ERRORSTO";
	}
	else
	{
		//need to replace node with response text
		var newNbgNode = document.createElement('div'); // create new DOM node
		newNbgNode.innerHTML = originalRequest.responseText; // fill node with response
		nbgNodeToReplace = $('lpdnbg'); // get handle on node to replace
		nbgNodeToReplace.parentNode.replaceChild(newNbgNode,nbgNodeToReplace); // replace
		attachListeners(false);
	}

}
/* end NSC Callback AJAX functions */

/* MOC Callback Submit function */
function mocCallbackSubmit(mocURL){
	var moccallbackurl = mocURL;
	var moccallbackparams = Form.serialize($('moc')); // {PT} converts name/value pairs of form into a querystring

	moccallbackurl += ((moccallbackurl.indexOf("?")>-1)?"&":"?") + moccallbackparams;

	var myAjax = new Ajax.Request(// {PT} AJAX object
			moccallbackurl,
			{
				method: 'post',
				parameters: '',
				onComplete: mocCallbackResponse
		});
}

function popMoc(moccallbackurl){
	//alert(typeof mocpopup);
	// Detect existence of the popup
	try {
			if(typeof mocpopup!="object"){ // check if the pop-up was created
			mocpopup = window.open("/portal/mocredirect.jsp?"+moccallbackurl,"mocwin","height=1024, width=1280,dialog=yes,top=0,left=0,location=no,scrollbars=yes,menubars=yes,toolbar=yes,resizable=yes");
			// detect if popup window obj created
			if(mocpopup!=null){// not blocked
				mocSuccess();
			}
			else {// blocked
				mocFailure();
			}
		}
		//MPS-45 moc-safari issue added redirect uri
		else if(typeof mocpopup=="object" && mocpopup.closed){ // check if mocpopup was created, but the window is closed
			mocpopup = window.open("/portal/mocredirect.jsp?"+moccallbackurl,"mocwin","height=1024, width=1280,dialog=yes,top=0,left=0,location=no,scrollbars=yes,menubars=yes,toolbar=yes,resizable=yes");
		}
	}
	catch (ex){// occurs when IE google toolbar blocks window. window object is created, but object.closed property does not exist.
		mocpopup = window.open("/portal/mocredirect.jsp?"+moccallbackurl,"mocwin","height=1024, width=1280,dialog=yes,top=0,left=0,location=no,scrollbars=yes,menubars=yes,toolbar=yes,resizable=yes");
	}

	mocpopup.focus();
}
function closeMocPopUp(){
	if(typeof mocpopup=="object" && !mocpopup.closed){
		mocpopup.close();
	}
}

function mocCallbackResponse(originalRequest){

	if (sessionExpired(originalRequest.responseText)){
		window.location.href = "/portal/site/merckproductservices/?front_door=true&epi-content=ERRORSTO";
	}
	else
	{
		//need to replace node with response text
		var newMocNode = document.createElement('div'); // create new DOM node
		newMocNode.innerHTML = originalRequest.responseText; // fill node with response
		mocNodeToReplace = $('lpdmoc'); // get handle on node to replace
		mocNodeToReplace.parentNode.replaceChild(newMocNode,mocNodeToReplace); // replace
		attachListeners(false);
		if(document.getElementById("mocURL"))
		{
			popMoc(document.getElementById("mocURL").value);
		}

	}
}
function mocSuccess(){
	// do nothing
}
function mocFailure(){
	var failureHTML = "<p class=\"alert\">It appears there was a problem starting your session.</p>\n";
	failureHTML += "<p><em>Merck OnCall</em>&reg; opens in a unique window on your computer. If you do not see <em>Merck OnCall</em>&reg; or if you have pop-up blocking installed, you must allow <em>Merck OnCall</em>&reg; to open in a pop-up window. Depending on the software you have, the pop-up may appear as a yellow bar across the top of this window. Click on the notification and follow the instructions to allow pop-ups on this site.</p>\n";
	newCpHTML = "When finished, click on the Start Session button below to start your <em>Merck OnCall</em>&reg; session.";

	new Insertion.Before($('moccp'),failureHTML);
	Element.update($('moccp'),newCpHTML);
}

/* MOC Callback Submit function */

/* sliding module functions */
function setModuleUI(rootElementId,state){
	switch(state){
		case "expanded":
			$(rootElementId + 'CollapsedView').style.display = "none";
			displayValue = "none"; // whether the full div clickable links are displayed or not
			Element.addClassName(rootElementId + 'Headline','open'); // {PT} add css class to change display of headline
			break;
		case "collapsed":
			$(rootElementId + 'CollapsedView').style.display = "block";
			displayValue = "block";// whether the full div clickable links are displayed or not
			Element.removeClassName(rootElementId + 'Headline','open'); // {PT} remove css class to revert display of headline
			break;
	}

	/* changes the clickable divs */
	var clickableLinks = document.getElementsByClassName('clickablemodule',rootElementId); // {PT}
	clickableLinks.each( // {PT}
		function(linkElement){
			Element.setStyle(linkElement,{display:displayValue});
		}
	);
}

var isClickable = true;

function slideOpen(rootDiv){
	if(isClickable){// added to prevent clicking this while form is sliding
		isClickable = false; // disable clickability
		var divToOpen = rootDiv + 'ExpandedWrapper';
		var defaultDiv = rootDiv + 'Default';
		var thankyouDiv = rootDiv + 'Thankyou';
		var confirmDiv = rootDiv + 'confirm';
		var slideDiv = rootDiv + 'SlideLink';

		if(document.getElementById(confirmDiv)){$(confirmDiv).style.display="none";}

		durationInSeconds = 0.5;
		new Effect.SlideDown(divToOpen,{duration:durationInSeconds},{queue:{scope:'myscope', position:'end', limit: 1}}) // {PT} Scriptaculous
		setModuleUI(rootDiv,'expanded');
		document.getElementById(slideDiv).onclick = function(){slideClose(rootDiv);return false;};

		setTimeout(function(){isClickable=true},durationInSeconds*1000); // enable clickability
	}
}


function slideOpenBack(rootDiv){
		isClickable =true;
		attachListeners(true);
	if(isClickable){// added to prevent clicking this while form is sliding
		isClickable = false; // disable clickability
		var divToOpen = rootDiv + 'ExpandedWrapper';
		var defaultDiv = rootDiv + 'Default';
		var thankyouDiv = rootDiv + 'Thankyou';
		var confirmDiv = rootDiv + 'confirm';
		var slideDiv = rootDiv + 'SlideLink';
		if(document.getElementById(confirmDiv)){$(confirmDiv).style.display="none";}
		durationInSeconds = 0.5;
		new Effect.SlideDown(divToOpen,{duration:durationInSeconds},{queue:{scope:'myscope', position:'end', limit: 1}}) // {PT} Scriptaculous
		setModuleUI(rootDiv,'expanded');
		setTimeout(function(){isClickable=true},durationInSeconds*1000); // enable clickability
		attachListeners(false);
		
	}
}

function slideClose(rootDiv){
	if(isClickable){// added to prevent clicking this while form is sliding

		isClickable = false; // disable clickability
		var divToClose = rootDiv + 'ExpandedWrapper';
		var collapsedViewDiv = rootDiv + 'CollapsedView';
		var slideDiv = rootDiv + 'SlideLink';

		durationInSeconds = 0.5;
		new Effect.SlideUp(divToClose,{duration:durationInSeconds},{queue:{scope:'myscope', position:'end', limit: 1}}) // {PT} Scriptaculous
		new Effect.SlideDown(collapsedViewDiv,{duration:durationInSeconds-0.1},{queue:{scope:'myscope', position:'end', limit: 1}}) // {PT} Scriptaculous

		setModuleUI(rootDiv,'collapsed');
		document.getElementById(slideDiv).onclick = function(){slideOpen(rootDiv);return false;};

		setTimeout(function(){isClickable=true},durationInSeconds*1000); // enable clickability
	}
}
/* end sliding module functions */

// Check reponse for error
function sessionExpired(theResponse){
	isExpired = false;
	isExpired = (theResponse.indexOf("ERRORSTO") != -1 || theResponse.indexOf("authorized to view") != -1)?true:false;
	return isExpired;
}

//Associates a field to a form "submission" button
function clickButton(e, buttonid){
	var bt = document.getElementById(buttonid);
	if (typeof bt == 'object'){
		if(e){
			if (e.keyCode && e.keyCode == 13){
				bt.click();
				return false;
			}
		}
		else if (event){
			if (event.keyCode && event.keyCode == 13){
				bt.click();
				return false;
			}
		}
	}
}