//***************************inne funkcje**********************
/** Lista parametrów przeliczających się po zmianie wartości.
* Jeśli parametr jest na liście submitted, to działa na nim przeliczanie po zmianie wartości. Jeśl go nie ma, wówczas zmiana wartości parametru nie powoduje wysłania jego wartości do serwera. Chodzi o to, aby każdy parametr miał na początku świadomie przypisaną przez użytkownika wartość. Jeśli natomiast już raz wartość została wprowadzona, wówczas składka przeliczy się automatycznie.
*/ 
var submitted = new Object();
var lastTimer = new Object();

/** Sprawdza czy parametr był wcześniej przliczony.
*
*/
function isRequestSubmitted(param) {
	if (param == undefined) return true;
	if (submitted[param] == undefined)
		return false;
	return true;
}

/**	Dodaje parametr do tabeli submitted.
*	Jednocześnie usuwa z formularza przycisk umożliwiający ręczne wysłanie wartości kontrolki do serwera.
*/
function addSubmittedParam(param) {
	if (param == undefined) return;
	if (submitted[param] == undefined) {
		submitted[param] = true;
		var s = document.getElementById(param+'_submit');
		s.parentNode.removeChild(s);
	}
}

/**	
* Wyciaga z treści przekazywanej do makeRequest nazwę parametru.
*
*/
function getParamName(tresc) {
	if (tresc == '') return undefined;
	var par = JSON.parse(tresc);
	for (a in par)
		return a;
	return undefined;
}

function makeSubmitRequest(tresc) {
	addSubmittedParam(getParamName(tresc));
	if (typeof window.ActiveXObject != 'undefined' )
		var conn=h = new ActiveXObject("Microsoft.XMLHTTP");
	else 
		var conn=new XMLHttpRequest();
		
	//createLoader();
	conn.onreadystatechange = function() {
		if (conn.readyState==4 && conn.status==200) {
			parseResponse(conn.responseText);
		}
		
	}
	conn.open('POST',getGuiFile(kalkulator),true);
	conn.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	conn.send(getSessionDataField(kalkulator)+'='+encodeURIComponent(tresc));	
	return true;
}

function showLoader(param) {
	if (param == undefined) return;
	var p = document.getElementById(param);
	if (p == undefined) return;
	var l = document.getElementById(param+'loader');
	if (l == undefined) return;
	l.style.display = '';
	
}

function hideLoader(param) {
	if (param == undefined) return;
	var p = document.getElementById(param);
	if (p == undefined) return;
	var l = document.getElementById(param+'loader');
	if (l == undefined) return;
	l.style.display = 'none';
}

function makeRequest(tresc) {
	var param = getParamName(tresc);
	showLoader(param);
	if (typeof window.ActiveXObject != 'undefined' )
		var conn=h = new ActiveXObject("Microsoft.XMLHTTP");
	else 
		var conn=new XMLHttpRequest();
		
	conn.onreadystatechange = function() {
		if (conn.readyState==4 && conn.status==200) {
			parseResponse(conn.responseText);
			hideLoader(param);
		}
		
	}
	conn.open('POST',getGuiFile(kalkulator),true);
	conn.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	conn.send(getSessionDataField(kalkulator)+'='+encodeURIComponent(tresc));
	
	return true;
}

function makeDelayRequest(timeout, id, param) {
	if (lastTimer[id] != null)
		lastTimer[id]++;
	else lastTimer[id] = 0;
	var lt = lastTimer[id];
	var cmd = 'startTimer('+lt+', \''+id+'\', \''+param+'\')';
	setTimeout(cmd,timeout*1000);
}

function startTimer(lt, id, param) {
	if (lt == lastTimer[id]) {
		makeRequest(param);
	}
}

function getGuiFile(kalkulator) {
	switch(kalkulator) {
		case 'nieruchomosci': return '/GUI_recalc.php'; break;
		case 'turystyka': return '/GUI_trcalc.php'; break;
	}
}

function getSessionDataField(kalkulator) {
	switch(kalkulator) {
		case 'nieruchomosci': return 'recalcdane'; break;
		case 'turystyka': return 'trcalcdane'; break;
	}
}

function setChildsDisable(control, disable) {
	if ($(control) == undefined) return;
	
	if ($(control).childNodes.length > 0) {
		for (var i = 0; i < control.childNodes.length; i++) {
			setChildsDisable(control.childNodes[i], disable);
		}
	}
	var n = control.nodeName;
	if (disable) {//wyszazam
		switch (n.toLowerCase()) {
			case 'input':
			case 'select':
				control.setAttribute('disabled', 'disabled');
				break;
			default: break;
		}
	} else {//pokazuje na nowo
		switch (n.toLowerCase()) {
			case 'input':
			case 'select':
				control.removeAttribute('disabled');
				break;
			default: break;
		}
	}
}

function disableControl(control, disable) {
	if (disable == null) disable = true;

	if (IPOLISA_NOWY_LAYOUT) {
		if (disable) {
			addClass(control, 'nieaktywny');
		} else { 
			removeClass(control, 'nieaktywny');
		}
		setChildsDisable(control, disable);
		return;
	}

	if (control.childNodes.length > 0)

	for (var i = 0; i < control.childNodes.length; i++) {
		disableControl(control.childNodes[i], disable);
	}
	var n = control.nodeName;
	if (disable == true) {//wyszazam
		switch (n.toLowerCase()) {
			case 'input':
			case 'select':
				control.setAttribute('disabled', 'disabled');
				break;
			case 'div':
				control.style.backgroundColor = '#eeeeee';
				break;
			default: break;
		}
	} else {//pokazuje na nowo
		switch (n.toLowerCase()) {
			case 'input':
			case 'select':
				control.removeAttribute('disabled');
				break;
			case 'div':
				control.style.backgroundColor = '#ffffff';
				break;
			default: break;
		}
	}
	return;
}

function markColor(control, color) {
	if(control == null) return;
	if (control.childNodes.length > 0)
		for (var i = 0; i < control.childNodes.length; i++) {
			markColor(control.childNodes[i], color);
		}
	var n = control.nodeName;
	switch (n.toLowerCase()) {
		case 'input':
		case 'select':
			control.style.backgroundColor = '#'+color;
			break;
		default: break;
	}
	return;
}

function parseResponse(tresc) {
	var odp = JSON.parse(tresc);
	var pyt = '';
	var wyniki = '';
	
	if (odp.nuid != undefined && nuid!= undefined && odp.nuid != nuid)
		goToUrl(odp.url+'Kalkulator-ubezpieczen-nieruchomosci,nieruchomosci');
	
	if (odp.tuid != undefined && tuid!= undefined && odp.tuid != tuid)
		goToUrl(odp.url+'Kalkulator-ubezpieczen-turystycznych,turystyka');
	
	//dla wszystkich parametrow jakie aktulanie sa znane:
	//- oznaczam je jako widoczne
	//- sprwdzam czy przyjechaly jakieś błędy, jeśli tak to je wyświetlam
	for (a in odp.nazwyParametrow) {
		var b = document.getElementById('div'+odp.nazwyParametrow[a]);
		if(b!=null) {
			disableControl(b, false);
			markColor(b, 'FFFFFF');
		}
		var err = document.getElementById('error_'+odp.parametry);
		
	}

	for (a in odp.nazwyParametrow) {
		var bl;
		//czyszczę wszystkie komunikaty błędów
		if ((bl = $('blad_'+odp.nazwyParametrow[a])) != undefined) {
			while (bl.firstChild) {
				bl.removeChild(bl.firstChild);
			}
		}
	}
	
	for (a in odp.bledy) {
		var bl;
		if ((bl = $('blad_'+a)) != undefined) {
			bl.appendChild(document.createTextNode(odp.bledy[a]));
		}
	}
	
	for (a in odp.nazwyWszystkichBrakujacych) {
		var b = document.getElementById('div'+odp.nazwyWszystkichBrakujacych[a]);
		if (b != null) {
			disableControl(b, false);
		}
	}
	
	//wyszazam niepotrzebne
	for(a in odp.doukrycia) {
		var b = document.getElementById('div'+odp.doukrycia[a])
		if(b != null) {
			disableControl(b, true);
		} 
	}
	
	createResultField(odp.wyniki);
	
	for(usuniety in odp.usuniete) {
		var u = document.getElementById('div'+odp.usuniete[usuniety]);
		if (u != null) {
			var i = u.childNodes.length;
			while (i>0) {
				u.removeChild(u.childNodes[i-1]);
				i--;
			}
			u.style.display = 'none';
		}
	}
	
	for(parametr in odp.brakujace) {//rysuje brakujace wspolne dla wszystkich
		if(((document.getElementById("div"+parametr) == null) || (odp.brakujace[parametr].type == 'ParametrRadio')) && odp.brakujace[parametr].wylacznie == null) {
			//alert('brakuje '+odp.brakujace[parametr].parametr);
			switch(odp.brakujace[parametr].type) {
				case 'ParametrData':
					createDateField(odp.brakujace[parametr], true);
					break;
				case 'ParametrComboBox':
					createSelectField(odp.brakujace[parametr], true);
					break;
				case 'ParametrCheckBox':
					createCheckBoxField(odp.brakujace[parametr], true);
					break;
				case 'ParametrGroupCheckBox':
					createGroupCheckBoxField(odp.brakujace[parametr], true);
					break;
				case 'ParametrFloat':
					createFloatField(odp.brakujace[parametr], true);
					break;
				case 'ParametrRadio':
					createRadioField(odp.brakujace[parametr], true);
					break;
				case 'ParametrKodPocztowy':
					createZipCodeField(odp.brakujace[parametr], true);
					break;
				case 'ParametrEmail':
					createEmailField(odp.brakujace[parametr], true);
					break;
				case 'ParametrPass':
					createPassField(odp.brakujace[parametr], true);
					break;
			}
		}
	}
	
	for(parametr in odp.brakujace) {//rysuje brakujace charakterystyczne dla wybranego ubezpieczyciela
		if((document.getElementById("div"+parametr) == null) && odp.brakujace[parametr].wylacznie != null) {
			switch(odp.brakujace[parametr].type) {
				case 'ParametrData':
					createDateField(odp.brakujace[parametr], true);
					break;
				case 'ParametrComboBox':
					createSelectField(odp.brakujace[parametr], true);
					break;
				case 'ParametrCheckBox':
					createCheckBoxField(odp.brakujace[parametr], true);
					break;
				case 'ParametrGroupCheckBox':
					createGroupCheckBoxField(odp.brakujace[parametr], true);
					break;
				case 'ParametrFloat':
					createFloatField(odp.brakujace[parametr], true);
					break;
				case 'ParametrRadio':
					createRadioField(odp.brakujace[parametr], true);
					break;
				case 'ParametrKodPocztowy':
					createZipCodeField(odp.brakujace[parametr], true);
					break;
				case 'ParametrEmail':
					createEmailField(odp.brakujace[parametr], true);
					break;
				case 'ParametrPass':
					createPassField(odp.brakujace[parametr], true);
					break;
			}
		}
	}
	//oznaczam na czerwono parametry niezbędne w danym kroku
	/*for(p in odp.parametryPoWyjatkach) {
		var control = document.getElementById('div'+odp.parametryPoWyjatkach[p]);
		if (control != null)
			markColor(control, 'ff6060');
	}*/
	//removeLoader('wszystko');
}

//rysuje parametry ktore przyjezdzaja. (potrzebne przy odśweizeniu strony - rysuje na interfejsie to co bylo przed rysowaniem)
function restoreInterface(params) {
	var dane = JSON.parse(params);
	createResultField('');
	for(d in dane) {
		//alert('restore '+dane[d].parametr);
		switch(dane[d].type) {
			case 'ParametrData':
				createDateField(dane[d], false);
				break;
			case 'ParametrComboBox':
				createSelectField(dane[d], false);
				break;
			case 'ParametrCheckBox':
				createCheckBoxField(dane[d], false);
				break;
			case 'ParametrGroupCheckBox':
				createGroupCheckBoxField(dane[d], false);
				break;
			case 'ParametrFloat':
				createFloatField(dane[d], false);
				break;
			case 'ParametrRadio':
				createRadioField(dane[d], false);
				break;
			case 'ParametrKodPocztowy':
				createZipCodeField(dane[d], false);
				break;
			case 'ParametrEmail':
				createEmailField(dane[d], false);
				break;
			case 'ParametrPass':
				createPassField(dane[d], false);
				break;
		}
	}
	makeRequest('');
}