/*
 *		a2x / Ajax
 */

var a2x_state = null;

var a2x_userMode = true;
var a2x_userSession = null;
var a2x_userName = null;
var a2x_userPassword = null;

//// Request Functions
              
function a2x_sendRequest(url, params, method) {
	
	a2x_state = 'running';
	
	if ( ! method || method == 1) {
		method = "GET";
	} else {
		method = "POST";
	}

	var now = new Date();
	params += '&t='+now.getTime();
	
	if (a2x_userMode) {
		if (a2x_userSession) {
			params += '&userSession='+a2x_userSession;	
		}
		if (a2x_userName) {
			params += '&userName='+a2x_userName;
		}
		if (a2x_userPassword) {
			params += '&userPassword='+a2x_userPassword;	
		}
	}
	
	var _request = new XMLHttpRequest();

	url += params;

    try {
    
	  	_request.open(method, url, false);
	  	_request.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");
	  	//_request.setRequestHeader("Cache-Control", "no-cache, must-revalidate");
	  	//_request.setRequestHeader("Pragma", "no-cache");     
  		_request.send(params);
    }
    catch(_exception) {
    
      //alert(_exception.name + ': ' + _exception.message);
      //alert(_exception.message+' - '+url);
    }

	if (_request.readyState == 4) {	
		a2x_state = 'ready';
		return _request.responseText;
	}
	
	return a2x_parseState(_request.readyState);
}

function a2x_parseState(state) {

	var State = new Array();
	
	State[0] = 'Uninitialized';
	State[1] = 'Opened';
	State[2] = 'Partially';
	State[3] = 'Interactive';
	State[4] = 'Completed';
	
	return State[state];
}

function a2x_setUserSession(session_id) {
	
	a2x_userSession = session_id;
}
function a2x_setUserName(userName) {
	
	a2x_userName = userName;	
}
function a2x_setUserPassword(userPassword) {
	
	a2x_userPassword = userPassword;	
}

function a2x_file(_body, url, params) {

	_body.innerHTML = 'Loading';
	_body.innerHTML = a2x_sendRequest(url, params);
}

function a2x_encodeBase64(decStr) {

	 var bits;
	 var dual;
	 var i = 0;
	 var encOut = '';
	 
	 while(decStr.length >= i + 3)
	 {
	  bits = (decStr.charCodeAt(i++) & 0xff) <<16 |
	         (decStr.charCodeAt(i++) & 0xff) <<8  |
	          decStr.charCodeAt(i++) & 0xff;
	  encOut += base64s.charAt((bits & 0x00fc0000) >>18) +
	            base64s.charAt((bits & 0x0003f000) >>12) +
	            base64s.charAt((bits & 0x00000fc0) >> 6) +
	            base64s.charAt((bits & 0x0000003f));
	 }
	 if(decStr.length -i > 0 && decStr.length -i < 3)
	 {
	  dual = Boolean(decStr.length -i -1);
	  bits = ((decStr.charCodeAt(i++) & 0xff) <<16) |
	         (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
	  encOut += base64s.charAt((bits & 0x00fc0000) >>18) +
	            base64s.charAt((bits & 0x0003f000) >>12) +
	            (dual ? base64s.charAt((bits & 0x00000fc0)             >>6) : '=') +
	            '=';
	 }
	 return(encOut);
}

function a2x_load() {
	
	var code = o1t_createLoading(40);	
	o1t_arearizeContent(code);
}
function a2x_loading(url, params) {
	
	var code = a2x_sendRequest(url, params);
	o1t_arearizeContent(code);
}

//// AJAX Content Switch

var a2x_ajaxContentSwitch_Process = new Array();

function a2x_ajaxContentSwitch_register(id_navigation, id_content, timeInterval, script_url, num_steps, view_mode) {
	
	var _process = new Object();
	
	_process.id = (a2x_ajaxContentSwitch_Process.length+1);
	_process.timeInterval = timeInterval;
	_process.id_navigation = id_navigation;
	_process.id_content = id_content;
	_process.num_steps = num_steps;
	_process.script_url = script_url;
	_process.step_counter = 0;
	_process.view_mode = view_mode;
	_process.active = true;
	
	a2x_ajaxContentSwitch_Process[_process.id] = _process;
	
	window.setInterval('a2x_ajaxContentSwitch_baseProcess(\''+_process.id+'\')', timeInterval);
}

function a2x_ajaxContentSwitch_baseProcess(id_process) {
	
	var _process = a2x_ajaxContentSwitch_Process[id_process];
	var actual_step = null;
		
	if (_process.active == false) {
		return true;
	}
	
	_process.step_counter++;
	actual_step = _process.step_counter % _process.num_steps;
	if (actual_step == 0) {
		actual_step = _process.num_steps;
	}
		
	a2x_ajaxContentSwitch_createContent(_process.id_content, _process.script_url, actual_step);	
	a2x_ajaxContentSwitch_createNavigation(_process.id_navigation, _process.num_steps, actual_step, _process.view_mode);	
}

function a2x_ajaxContentSwitch_createContent(id_content, script_url, step) {
	
	var _content = null;
	
	var params = '';
	params += '&step='+step;
	
	var content = a2x_sendRequest(script_url, params);
	
	_content = document.getElementById(id_content);
	o1t_innerHTML(_content, content);
}

function a2x_ajaxContentSwitch_createNavigation(id_navigation, num_steps, actual_step, view_mode) {
	
	var code = '';
	var style = '';
	var _navigation = null;
	
	code += '<table cellspacing="0" cellpadding="0">';
	code += '<tr>';
	
	for (var i=1; i<=num_steps; i++) {
			
		style = '';
		if (actual_step == i) {
			style += 'font-weight: bold;';
			style += 'font-size: 12px;';
		}
			
		if (view_mode == 1 && i > 1) {
			code += '<tr>';
		}
			
		code += '<td align="center" style="'+style+'">'+i+'</td>';
		
		if (i != num_steps) {
			if (view_mode == 1) {
				code += '</tr>';
			}
			else if (view_mode == 2)  {
				code += '<td width="5" nowrap></td>';
			}
		}
	}
	
	code += '</tr>';
	code += '</table>';
	
	code = o1t_createCase(code);
	
	_navigation = document.getElementById(id_navigation);
	o1t_innerHTML(_navigation, code);
}

//// Popup Functions

var a2x_updateInputFieldWithOptions_mainProcessInitialized = false;

var a2x_updateInputFieldWithOptions_request_leftTimeSteps = 0; // x * 100ms
var a2x_updateInputFieldWithOptions_request_defaultLeftTimeSteps  = 1000; // ms
var a2x_updateInputFieldWithOptions_request_state = null; // 1: Ready | 2: Waiting until Send | 3: Waiting for Answer)
var a2x_updateInputFieldWithOptions_request_scriptPath;;
var a2x_updateInputFieldWithOptions_request_scriptParams;
var a2x_updateInputFieldWithOptions_request_oldColor;
var a2x_updateInputFieldWithOptions_request_lastInput;
var _a2x_updateInputFieldWithOptions_request_div = null;
var _a2x_updateInputFieldWithOptions_request_position = null;
var _a2x_updateInputFieldWithOptions_request_input = null;

function a2x_updateInputFieldWithOptions_mainProcess_interval() {
	
	if (a2x_updateInputFieldWithOptions_request_leftTimeSteps < 0) {
		return true;	
	}
	
	 a2x_updateInputFieldWithOptions_request_leftTimeSteps -= 500;
	 
	 if ( a2x_updateInputFieldWithOptions_request_leftTimeSteps == 0 && a2x_updateInputFieldWithOptions_request_state == 2) {	
	 
		a2x_updateInputFieldWithOptions_request_oldColor = _a2x_updateInputFieldWithOptions_request_input.style.color;

		_a2x_updateInputFieldWithOptions_request_input.style.background = '#c0c0c0';
		_a2x_updateInputFieldWithOptions_request_input.style.color = '#888888';
		_a2x_updateInputFieldWithOptions_request_input.readOnly = true;

	 	a2x_openAjaxPopup(
	 		_a2x_updateInputFieldWithOptions_request_div, 
	 		_a2x_updateInputFieldWithOptions_request_position, 
	 		a2x_updateInputFieldWithOptions_request_scriptPath, 
	 		a2x_updateInputFieldWithOptions_request_scriptParams	
	 	);
	 	
	 	_a2x_updateInputFieldWithOptions_request_input.style.background = '#ffffff';
		_a2x_updateInputFieldWithOptions_request_input.style.color = a2x_updateInputFieldWithOptions_request_oldColor;
		_a2x_updateInputFieldWithOptions_request_input.readOnly = false;
		
		a2x_updateInputFieldWithOptions_request_state = 1;
	 }
}

function a2x_updateInputFieldWithOptions(_input, scriptPath, scriptParamName, scriptParams, div_id) {

	a2x_updateInputFieldWithOptions_request_leftTimeSteps = a2x_updateInputFieldWithOptions_request_defaultLeftTimeSteps;

	if (a2x_state == 'running') {
		return false;
	}
	
	if (a2x_updateInputFieldWithOptions_request_lastInput == _input.value) {
		return true;
	}
	else {
		a2x_updateInputFieldWithOptions_request_lastInput = _input.value;
	}
	
	if (a2x_updateInputFieldWithOptions_mainProcessInitialized == false) {
		window.setInterval('a2x_updateInputFieldWithOptions_mainProcess_interval()', 500);
		a2x_updateInputFieldWithOptions_mainProcessInitialized = true;
	}

	var _div = document.getElementById(div_id);
	
	if ( ! scriptParams) {
      	scriptParams = '';
    }    
    
    var params = '?';
    params += scriptParamName;
    params += '=';
    params += _input.value;
    params += scriptParams;

	var _position = o1t_locate(_input);
	_position.y += 24;
				
	var state;
	if (_input.value.length < 3) {
		state = 1;	
		_div.style.display = 'none';
	}
	else {
		state = 2;
		_div.style.display = 'block';
	}
				
	a2x_updateInputFieldWithOptions_request_state = state; // 1: Ready | 2: Waiting until Send | 3: Waiting for Answer)
	a2x_updateInputFieldWithOptions_request_scriptPath = scriptPath;
	a2x_updateInputFieldWithOptions_request_scriptParams = params;
	_a2x_updateInputFieldWithOptions_request_div = _div;
	_a2x_updateInputFieldWithOptions_request_position = _position;
	_a2x_updateInputFieldWithOptions_request_input = _input;
}

function a2x_hideInputFieldBox() {

	var regex_div = /^a2x_inputFieldBox_/;

	var DivElement = document.getElementsByTagName('div');
	for (var i=0; i<DivElement.length; i++) {
		if (DivElement[i].id && regex_div.exec(DivElement[i].id)) {
			DivElement[i].style.display = 'none';
		}
	}	
}

function a2x_openAjaxPopup(_div, _position, scriptPath, scriptParams) {
	
    if ( ! scriptParams) {
      scriptParams = '';
    }
    
    _div.style.position = 'absolute';
    _div.style.left = _position.x;
    _div.style.top = _position.y;
            
    var content = a2x_sendRequest(scriptPath, scriptParams);
       
    o1t_innerHTML(_div, content);
}
