document.write('<script type="text/javascript" src="/script/ajaxRequest.js"></script>');
document.write('<script type="text/javascript" src="/script/xparse.js"></script>');

var debug = false;
//var debug = true;

// *******************************************************************************
// --------------------- A J A X   F O R M   S U B M I T  ------------------------
// *------------------------------------------------------------------------------
// * Function ajaxFormSubmit (formName,redirect,typ)
// *
// * formNam...... form name
// * redirect..... where to submit/redirect form/page after ajax submit
// * typ.......... what to do after ajax submit (1->submit, 2->redirect, 3->nothing)
// * i............ form number (multiple form support)
// * clearAfterSubmit...... clear input fields afrer submit (true | false)
// * allowMultipleSubmit... allows process of multiple submits on a page
// * disableFormFields..... disables form fields while submitting
// -------------------------------------------------------------------------------
function ajaxFormSubmit(formName,redirect,typ,i,clearAfterSubmit,allowMultipleSubmit,disableFormFields) {
	if (i) {} else { var i = '';}
	if (disableFormFields == undefined)  var disableFormFields = true;
	if (clearAfterSubmit == undefined) var clearAfterSubmit = true;
	//alert(formName);
	//alert(AjaxRequest.numActiveAjaxRequests+", multilpe:"+allowMultipleSubmit);
	if (AjaxRequest.numActiveAjaxRequests==0 || allowMultipleSubmit==true) {	
		displayBusyIndicator(true,i);																							// show busy indicator		
		displayDisabledButton(true,i);																						// show disabledButton				
		eval('if (window.displayStatusMsg'+i+') displayStatusMsg'+i+'(false)');	
		// hide status message
		
		AjaxRequest.submit(
    	document.forms[formName]
    	,{
    		'onLoading':function() {
    			if (disableFormFields)
    			
    				disableFormElements(formName,true,i);
    		}
    	 	//,'onComplete':function() { 
    	 	//	displayBusyIndicator(false,i); 
    	 	//	displayDisabledButton(false,i);
    	 	//	disableFormElements(formName,false);
    	 	//}
      	,'onSuccess':function(req){ 
      		//alert(req.responseText+"redirect:"+redirect+"forma:"+formName+"tip:"+typ+"i:"+i);	
      		ajaxFormSubmitProcess(req.responseText,redirect,formName,typ,i,clearAfterSubmit); 
      	}
      	,'onError':function(req) { 
      		alert('Unknown error'); 
      	}
	    }
  	); 
	}
}

// *------------------------------------------------------------------------------
// * Function ajaxFormSubmitProcess(responseText,redirect,formName,typ,i)
// *	
// * responseText... returned XML
// * redirect....... where to submit/redirect form/page after ajax submit
// * formNam........ form name
// * typ............ what to do after ajax submit (1->submit, 2->redirect, 3->nothing)
// * i.............. form number (multiple form support)
// --------------------------------------------------------------------------------	
function ajaxFormSubmitProcess(responseText,redirect,formName,typ,i,clearAfterSubmit) {		
	var statusCode;
	var statusMsg;
	var statusFocus;
	var statusRedirect;
	
	var err = false;	
	var root = Xparse(responseText);	
	
	if (debug) alert(responseText);

	if (root.contents != null) {		
		if (root.contents[1]) {
			root = root.contents[1];
			if (root.contents.length > 2) { statusCode = root.contents[1].contents[0].value; }	// statusCode					
			if (root.contents.length > 4) { statusMsg = root.contents[3].contents[0].value; }		// statusMsg			
			if (root.contents.length > 6) {					
				if (root.contents[5].name == 'focus') { statusFocus = root.contents[5].contents[0].value; } 						// statusFocus				
				else if (root.contents[5].name == 'redirect') { statusRedirect = root.contents[5].contents[0].value; } // statusRedirect
			}
		}
	}
	
	//alert("code:"+statusCode+", tip:"+typ);
	
	if (statusCode == '') {
		alert('Error: bad response!');
	}
		
	// * status codes:
	// * -1 ........ Simple error
	// * -2 ........ Error with automatic redirect
	// * -3 ........ Error with input focus
	// *  1 ........ OK
	// *  2 ........ OK with dynamic redirect
				
	if (statusCode < 0 || typ == 1 || typ == 3) {
		displayBusyIndicator(false,i); 
    displayDisabledButton(false,i);
   	disableFormElements(formName,false,i);
	}

	// *** Error ***
	if (statusCode == -1) 
	{
		err = true;
	} 

	// *** Error with automatic redirect ***
	else if (statusCode == -2) 
	{		
		err = true;		
		document.redirect = statusRedirect;
				
		if (document.redirect != '') {			
			setTimeout('window.location = document.redirect',5000);		
		} else {
			alert('Error: redirect failed! [1]');
		}
	} 
	
	// *** Error with input focus ***
	else if (statusCode == -3) 
	{
		err = true;
		
		if (statusFocus != '') {				
			var fokus = document.forms[formName].elements[statusFocus];										
			if (fokus && fokus.type != 'hidden') {
				if (fokus.length > 0) { fokus[0].focus(); } 
				else { fokus.focus(); }					
				eval('if (window.displaySpecialFocus'+i+') displaySpecialFocus'+i+'(fokus,true,statusMsg)');
			}						
		} else {
			alert('Error: focus failed!');
		}			
	}
	
	// *** OK
	else if (statusCode == 1)
	{
		if (typ == 1) {						// submit
			document.forms[formName].action = redirect
			document.forms[formName].submit();
		} else if (typ == 2) { 		// redirect
			window.location = redirect;
		}	else if (typ == 3) { 		// nothing
			if (clearAfterSubmit) clearFormElements(formName);
		} else {
			alert('Error: unknown type [1]!');
		}
	} 
	
	// *** OK with dynamic redirect
	else if (statusCode == 2) 
	{					
		if (statusRedirect != '') {
			if (typ == 1) {						// submit
				document.forms[formName].action = statusRedirect;
				document.forms[formName].submit();
			} else if (typ == 2) {		// redirect
				//alert(statusRedirect);
				window.location = statusRedirect;
			}	else {				
				alert('Error: unknown type [2]!');
			}
		} else {
			alert('Error: redirect failed! [1]');
		}
	}		
	
	else 
	{				
		alert('Error: Unknown error [1]');
		if (debug) alert(responseText);
		err = true;
		statusMsg += responseText;		
	}	
	eval('if (window.displayStatusMsg'+i+') displayStatusMsg'+i+'(true,statusMsg,err,i)');	
}

// *------------------------------------------------------------------------------
// * Function disableFormElements(formName,show,i) 
// *	
// * formNam........ form name
// * show........... enable/disable form elements (true | false)
// * i.............. form number (multiple form support)
// --------------------------------------------------------------------------------	
function disableFormElements(formName,show,i) 
{
	var formElements = document.forms[formName].elements;
	
	for (var j=0; j<formElements.length;j++) {
		if (formElements[j].type != 'hidden') { eval('if (window.displaySpecialFocus'+i+') displaySpecialFocus'+i+'(formElements[j],false)'); }
		formElements[j].disabled = show;		
	}
}

// *------------------------------------------------------------------------------
// * Function clearFormElements(formName)
// *	
// * formNam........ form name
// --------------------------------------------------------------------------------	
// *** TODO: clear all html elements (select, checkbox,...)
// --------------------------------------------------------------------------------	
function clearFormElements(formName) 
{
	var formElements = document.forms[formName].elements;
	
	for (var j=0; j<formElements.length;j++) {
		if (formElements[j].type != 'hidden' && formElements[j].type != 'submit') {
			formElements[j].value = '';
		}
	}	
}

// *------------------------------------------------------------------------------
// * Function displayBusyIndicator(show,i)
// *	
// * show........... show/hide busy indicator (progress bar)
// * i.............. form number (multiple form support)
// --------------------------------------------------------------------------------	
function displayBusyIndicator(show,i) 
{	
	if (i) {} else { i = '';}	
	busyIndicator = document.getElementById('IMG_busyIndicator' + i) 	// BUSY INDICATOR

	if (busyIndicator) {
		if (show) {	busyIndicator.style.display = '';	} 
		else { busyIndicator.style.display = 'none'; }
	}
}

// *------------------------------------------------------------------------------
// * Function displayDisabledButton(show,i)
// *	
// * show........... show disabled submit button or hide it
// * i.............. form number (multiple form support)
// --------------------------------------------------------------------------------	
function displayDisabledButton(show,i) 
{
	if (i) {} else { i = '';}	
	var btn = document.getElementById('INPUT_postButton'+i);	// SUBMIT BUTTON
	
	if (btn) {
		var btnSrc = btn.src;
		var tmpBtnSrc = document.tmpButton;	
		var srcDisabled = btn.getAttribute('srcDisabled');		
				
		if (srcDisabled) // show disabled image (if exist)
		{	
			if (!tmpBtnSrc) {	document.tmpButton = btnSrc; }		
			if (show) { btn.src = srcDisabled; }
			else { btn.src = tmpBtnSrc; document.tmpButton = ''; }
		} 
		else // hide submit button
		{
			if (btn.style.visibility == 'hidden') { btn.style.visibility = 'visible'; }
			else { btn.style.visibility = 'hidden'; }		
		}	
	} 
	else if (debug) 
	{
		alert('Submit gumb nima IDja. Nastavi ID na "INPUT_postButton".');
	}
}

// *------------------------------------------------------------------------------
// * Function displaySpecialFocus(field,show,msg)
// *	
// * field.......... field name
// * show........... show/hide special focus
// * msg............ message
// --------------------------------------------------------------------------------	
/*
function displaySpecialFocus(field,show,msg) 
{	
}
*/

// *------------------------------------------------------------------------------
// * Function displayStatusMsg(show,msg,err)
// *	
// * show........... show/hide status message
// * msg............ message
// * err............ is error message? (true |false)
// --------------------------------------------------------------------------------	
/*
function displayStatusMsg(show,msg,err,i) 
{	
}
*/
