///////////////////////////////////////////////////////////////////////////////////////////
// ------------------ Глобални параметри ------------------
// Версията на Браузера
	var isIE = true;		

// Форма от която ще се вземат параметрите и ще се предадат към API функцията
	var rpc_form = "CalcForm";

// Да се извежда ли debug информация
	var rpc_debug = false;

// Име на скрипта, който ще обслужва заявките
	var rpc_api_action = 'calc.php';

// обект - прозореца за debug
	var _debug_win;	
	var _debug_win_style="<style>\n body {background-color: #FAFBFE; padding: 0px;border: 0px;margin: 0px;font-family: arial, sans-serif;font-size: 9pt;} font.header{font-weight: bold;} p{font-size: 9pt;}</style>\n";


// Създава XMLHTTP обект за комуникация със API функция
	function getXMLHTTP() {
		var xmlhttp=false;
		/*@cc_on @*/
		/*@if (@_jscript_version >= 5)
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {
			xmlhttp = false;
		}
		@end @*/
		if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
			isIE=false;
			xmlhttp = new XMLHttpRequest();
		}
		return xmlhttp;
	}

// създава debug прозорец
	function create_debug_window()
	{
		var sizeX=780;
		var sizeY=580;
		if (document.all) var xMax = screen.width, yMax = screen.height;
		else
			if (document.layers) var xMax = window.outerWidth, yMax = window.outerHeight;
			else var xMax = 800, yMax=600;
		var xOffset = (xMax - sizeX)/2, yOffset = (yMax - sizeY)/2;
		if (yOffset > 30) {yOffset = yOffset - 30}
		else yOffset = 0;
		resolveit = 'width=' + sizeX + ', height=' + sizeY + ', directories=0, hotkeys=0, location=0, menubar=0, resizable=1, screenX='+ xOffset +', screenY=' + yOffset +', scrollbars=1, status=0, toolbar=0, left=' + xOffset +', top=' + yOffset;

		_debug_win = window.open('', 'xmlRPC_Debug_Calc', resolveit);
		_debug_win.focus();

		_debug_win.document.open("text/html","replace");
		_debug_win.document.write('<html><head><title>xmlRPC Debug Window</title>'+_debug_win_style+'</head><body><table><tr><td>');
	}
	
// Взема съдържанието на елементите във формата и ги пакетира като GET параметри
	function form2POST() 
	{
		str = '';
		
		if( form=document.getElementById(rpc_form) ) 
			for(i=0;i<form.elements.length;i++){

				if(form.elements[i].name != '' && form.elements[i].name != 'undefined') {
					if(form.elements[i].tagName == 'SELECT') {
						for(j=0;j<form.elements[i].options.length;j++)
						if(form.elements[i].options[j].selected == true) {
							str += (str == '' ? "" : "&") + form.elements[i].name + '=' + encodeURIComponent(form.elements[i].options[j].value);
						}
						continue;
					}
					if(form.elements[i].tagName == 'INPUT' && form.elements[i].type.toUpperCase() == 'RADIO') {
						if(form.elements[i].checked == true)
						str += (str == '' ? "" : "&") + form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value);
						continue;
					}
					if(form.elements[i].tagName == 'INPUT' && form.elements[i].type.toUpperCase() == 'CHECKBOX') {
						str += (str == '' ? "" : "&") + form.elements[i].name + '=' + encodeURIComponent(form.elements[i].checked == true ? 1 : 0);
						continue;
					}
					if (form.elements[i].tagName == 'TEXTAREA') {
						str += (str == '' ? "" : "&") + form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value);
						continue;
					}

					if (form.elements[i].tagName == 'INPUT') str += (str == '' ? "" : "&") + form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value);
				}
			}
		return str;
	}

// подменя с стринг - s всички '<', '>' с '&lt;','&gt;' за да се покажат в debug прозореца
	function htmlspecialchars(s){
		return "<pre>"+s.replace(/</g,'&lt;').replace(/>/g,'&gt;')+"</pre>";
	}
	
// заявка към API функцията
	function Calc( api_action, changed_element ) 
	{
		
			if( rpc_debug )
			{ 
				if( !_debug_win || _debug_win.closed )
					create_debug_window();
			}

			try 
			{
				var xmlhttp;
				if ( ! xmlhttp )
					xmlhttp = getXMLHTTP();
					
				var params = "";
				params = form2POST();
				params += (params == '' ? "" : "&") + 'api_action=' + api_action + '&changed_element=' + changed_element;

				// Зареждане на данните
				if( rpc_debug  )
				{
					
					_debug_win.document.write("<p><font class='header'>loadXMLDoc ( '"+api_action+"' )</font></p><hr>\n");
					_debug_win.document.write("<p><font class='header'>Request to:</font></p><p>"+decodeURIComponent(rpc_api_action+'?'+params)+"</p><hr>\n");
				}

				if (xmlhttp) 
				{
				
					xmlhttp.open("POST",rpc_api_action, true);
					
					xmlhttp.onreadystatechange=

					//  *************** Извличане на XML данни ***************
							function GetXML(aEvt)
							{
								
								if( xmlhttp.readyState == 4 )
								{

									if( rpc_debug )
									{
										if( !_debug_win || _debug_win.closed )
											create_debug_window();
											
										_debug_win.document.write("<p><font class='header'>Response:</font></p><p>"+htmlspecialchars(xmlhttp.responseText)+'</p><hr>\n');
									}
									
									if ( isIE && xmlhttp.responseXML.parseError.errorCode !=0 )
									{ 
										// Проблем в структурата на XML файла
										if( rpc_debug )
											_debug_win.document.write("<p><font class='header'>Response error :  </font>"+xmlhttp.responseXML.parseError.reason+"</p><hr>");	
											
									} 
									else 
									{
										// XML файла е ОК
										try
										{	
											eval( xmlhttp.responseText );
										}
										catch(e) 
										{
										// Грешка при при изпълнението на S
											var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
											
											if( rpc_debug )
												_debug_win.document.write("<hr><p><font class='header'>JS error:</font></p><p>"+msg+'</p><hr>\n');
										}
										

									}
								}
							}
						//  ******************************
						
						
					xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					
					xmlhttp.send(params);
				}
			}	
			catch(e) 
			{
			// Грешка при създаването на връзка към API
				var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
				if( rpc_debug )
					_debug_win.document.write("<hr><p><font class='header'>RPC error:</font></p><p>"+msg+'</p><hr>\n');
			}

		if( rpc_debug )
			_debug_win.document.write("</td></tr></table></body>");
				
		return false;
	}
	

