/* 
 * Javascript functions to be used in conjunction with
 * the tuwa:button taglib and adaptive flows (or similar).
 * Example of usage in jsp-file:
 * 
 * <html:form action="/bestall/adaptiveflow/step.do">
 * <html:hidden property="command" value="error"/>
 * ...
 * <tuwa:button type="clear" href="javascript:btnClear(document.adaptiveForm);"/>
 * </html:form>
 * 
 *
 * @author Bokedal, Calle (cabo02)
 *
 * Change History <br>
 * Date       Author Comment <br>
 * ---------- ------ ---------------------------------------------- <br>
 * 2005-06-03 cabo02 Initial version.
 * 2005-06-16 cabo02 Removed undefined check to get script to work on old browsers.
 *                   NOTE! Previous impl. check was supported by ECMA-262.
 * 2005-06-23 cabo02 Updated btnPrint function.
 * 2005-09-12 cabo02 Renamed form element "method" to "command" to prevent Safari bug. 
 * 2008-08-26 rasu01 Added dynamic help text inclusion for the adaptive flow CTCQ00019974 
 * 2008-09-01 rasu01 Added enter key listener for next action CTCQ00020016 
 * 2010-02-18 dagr09 TSE-1069, added $()-syntax to fix IE-bug, and default submit in adaptive
 * 2010-02-25 dagr09 Made a function to bind observers to adaptiveForm
 * 2011-08-15 joho49 Excluded textareas from event handling
 */


function bindEventListenersToForm() {
	if (document.forms["adaptiveForm"] != undefined) {
		$(document.forms["adaptiveForm"]).observe('keydown', function(event) {
			if (Event.KEY_RETURN == event.keyCode) {
				var currentElement = $(Event.element(event));
				if (currentElement.type != "textarea" && currentElement.tagName != "textarea"){
					event.stop();
				}
			}
		});

		$(document.forms["adaptiveForm"]).observe('keyup', function(event) {
			if (Event.KEY_RETURN == event.keyCode) {
			    var currentElement = $(Event.element(event));
				if (currentElement.type != "textarea" && currentElement.tagName != "textarea"){
                    			event.stop();
					if (document.forms["adaptiveForm"].jspstate.value != "confirm") {
                        			var autoComplete = currentElement.readAttribute("autocomplete");
                        			if (autoComplete == null || autoComplete != "off") {
                            				btnNext(document.forms["adaptiveForm"]);
                        			}
                    			}
                		}
			}
		});
		if (document.forms["adaptiveForm"].jspstate.value != "confirm" && !document.forms["adaptiveForm"].jspstate.value.startsWith("setupPackage") && document.forms["adaptiveForm"].jspstate.value != "selectAuthentication") {
			$(document.forms["adaptiveForm"]).focusFirstElement();
		}
	}
}	

document.observe("dom:loaded", bindEventListenersToForm);
 
/*
 * "Public" functions to handle flow buttons
 */
function btnClear(formObj)			{handleButton(formObj,'clear');}
function btnPrevious(formObj)	{handleButton(formObj,'previous');}
function btnNext(formObj)			{handleButton(formObj,'next');}
function btnCancel(formObj)		{handleButton(formObj,'cancel');}
function btnOrder(formObj)		{handleButton(formObj,'order');}
function btnEdit(formObj,name)	{handleEditButton(formObj,'edit',name);}
function btnInit(formObj,name)	{handleButton(formObj,'init');}
function btnPrint(pageURL)		{
	window.open(pageURL, "PrintingWindow", "toolbar=no,location=no,directories=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=760,height=760,top=0,left=100");
}
 
/*
 * "Private" function
 * Handles a button click. Updates 'method' property in form 
 * (Not the form method, but the property method in the form).
 * Parameters:
 * formObj - a form object
 * cmd - The command to set
 * Note: 
 *  - Avoid using this function directly from any jsp page!
 */
function handleButton(formObj,cmd) {
	if(formObj != undefined && formObj.command != undefined) {
		formObj.command.value = cmd;
		
		if(formObj.sl) {
			var state = "";
			
			// Set sl-parameter
			if(formObj.jspstate) {state = formObj.jspstate.value;}
			else {state = "setup";}
			formObj.sl.value = state + "_" + formObj.OID.value + "_" + cmd;
		}
		formObj.submit();
	}
}

/*
 * Private function to handle edit of a state.
 */
function handleEditButton(formObj,cmd,name) {
	formObj.tostate.value = name;
	handleButton(formObj,cmd);
}

/*
 * This codes replaces helpTextScript.js
 */
dojo.addOnLoad(function() {
	dojo.some(dojo.query("#adaptiveForm span.tsRichPurple"),function(entry, i) {
		if(i > 0 && entry.innerHTML == "*") {
			dojo.removeAttr("required_info_text", "style");
			dojo.style(dojo.query("#adaptiveForm span.tsRichPurple")[0], "display", "inline");
			return true;
		}
	});
});


