var msie = /*@cc_on!@*/false;
var msieold = false;

/* ie 6 */
if (msie) {
	msieold = (typeof window.XMLHttpRequest == -1) ? false : true;
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.utfTable = function()
{
	var table = {
		'á' : 'a', 'Á' : 'A', 'ä' : 'a', 'Ä' : 'A', 'â' : 'a', 'Â' : 'A', 'ă' : 'a', 'Ă' : 'A', 'ą' : 'a', 'Ą' : 'A',
		'č' : 'c', 'Č' : 'C', 'ç' : 'c', 'Ç' : 'C', 'ć' : 'c', 'Ć' : 'C', 'ď' : 'd', 'Ď' : 'D', 'đ' : 'd', 'Đ' : 'D',
		'é' : 'e', 'É' : 'E', 'ě' : 'e', 'Ě' : 'E', 'ë' : 'e', 'Ë' : 'E', 'ę' : 'e', 'Ę' : 'E', 'í' : 'i', 'Í' : 'I',
		'î' : 'i', 'Î' : 'I', 'ł' : 'l', 'Ł' : 'L', 'ľ' : 'l', 'Ľ' : 'L', 'ĺ' : 'l', 'Ĺ' : 'L', 'ń' : 'n', 'Ń' : 'N',
		'ň' : 'n', 'Ň' : 'N', 'ó' : 'o', 'Ó' : 'O', 'ô' : 'o', 'Ô' : 'O', 'ö' : 'o', 'Ö' : 'O', 'ő' : 'o', 'Ő' : 'O',
		//'o' : 'o', 'O' : 'O', // proč tohle tady je...
		'ř' : 'r', 'Ř' : 'R', 'ŕ' : 'r', 'Ŕ' : 'R', 'š' : 's', 'Š' : 'S', 'ś' : 's', 'Ś' : 'S',
		'ş' : 's', 'Ş' : 'S', 'ť' : 't', 'Ť' : 'T', 'ţ' : 't', 'Ţ' : 'T', 'ú' : 'u', 'Ú' : 'U', 'ů' : 'u', 'Ů' : 'U',
		'ü' : 'u', 'Ü' : 'U', 'ű' : 'u', 'Ű' : 'U', 'ý' : 'y', 'Ý' : 'Y', 'ž' : 'z', 'Ž' : 'Z', 'ź' : 'z', 'Ź' : 'Z',
		'ż' : 'z', 'Ż' : 'Z', 'ß' : 'ss'
	};
	
	return table;
}

String.prototype.utf2gsm7 = function()
{
	var unallowed = /[^a-zA-Z0-9@£$¥èéùìòÇLFØøCRÅåΔ_ΦΓΛΩΠΨΣΘΞESCÆæßÉ!\"#¤%&\'\(\)\*\+,\-\./:;\<\=\>\?¡ÄÖÑÜ§¿äöñüà\n\^{}\\\[~\]\|€\ ]/;
	var gsm7 = this.replace(unallowed, '?');
	return gsm7;
}

String.prototype.isUtf = function()
{
	for (var i = 1; i <= this.length; i++) {
		ch = this[i];
		if (typeof this.utfTable()[ch] != 'undefined') {
			return true;
		}
	}
	return false;
}

String.prototype.utf2ascii = function()
{
	var ascii = '';
	for (var i = 0; i < this.length; i++) {
		var ch = this.charAt(i);
		if (typeof this.utfTable()[ch] != 'undefined') {
			ascii += this.utfTable()[ch];
		} else {
			ascii += ch;
		}
	}

	return ascii;
}

var titles = new Array();

function SMS_onload()
{
	$('#target')[0].focus();
}

function makeFocus(elem, permanent){
	elem.className += ' active';
}

function checkParent(){
	if (top.location != document.location) {
		tfujDomain();
	}
}

function tfujDomain() {
	el = document.getElementById("smsGate");
	el.innerHTML = "<div>Tato stránka je načítána ze serveru 1188.cz<span class=\"rightSide\">&nbsp</span></div>" +
		"<fieldset>" +
		"<p style=\"padding: 0px 10px;\">" +
		"Pokud chcete poslat bezplatnou sms zprávu do sítě O2, " +
		'použijte prosím <a href="http://1188.cz/?sms=gate">oficiální sms bránu</a>.<br />' +
		"Děkujeme za pochopení, tým O2." +
		"<a id=\"clickingHref\" href=\"http://1188.cz/?sms=gate\" class=\"nextInfo\">Oficiální sms brána do sítě O2 na serveru 1188.cz</a>" +
		"</p>" +
		"<span class=\"rightBottomCorner\">&nbsp</span>" ;
		"</fieldset>";
	el2 = document.getElementById("clickingHref");
	window.open(el2.href, "_top");
}

function deactive(elem){
	elem.className = elem.className.replace(/active/, '');
}

var smsInfo;

function storeCheckData(elem, asciiLenght, utfLenght, unregistered) {
	this.elem = elem;
	this.asciiLenght = asciiLenght;
	this.utfLenght = utfLenght;
	this.unregistered = unregistered;
};

function checkSMSLength(elem, asciiLength, utfLength, unregistered, e) {
	if (e && e.altKey) {
		smsInfo = new storeCheckData(elem, asciiLength, utfLength, unregistered);
		var t = setTimeout('checkSMSLength(smsInfo.elem, smsInfo.asciiLength, smsInfo.utfLength, smsInfo.unregistered)', 200);
		return;
	}
	var text = elem.value;
	var currentLength = asciiLength;
	if (typeof elem.usedChars == 'undefined') {
		elem.usedChars = document.getElementById("usedChars");
		elem.maxChars = document.getElementById("maxChars");
		elem.submitButton = document.getElementById("send");
	}
	if (utfLength == 0 && elem.value != elem.before) {
		text = text.utf2ascii();
		text = text.utf2gsm7();
		elem.value = text;
	} else if (text.isUtf()) {
		currentLength = utfLength;
	}
	if (unregistered) {
		if (typeof elem.adFrame == 'undefined') {
			elem.adFrame = document.getElementById('smsAdInfo');
		}
		elem.adFrame.innerHTML = text + '<span class="show"># za SMS bude připojena reklama</span>';
	}
	if (text.length > currentLength && !elem.className.match(" smsLong")) {
		elem.className += " smsLong";
		elem.usedChars.className += " smsLong";
		elem.submitButton.className += " disabledButton";
		elem.submitButton.disabled = true;
	} else if (text.length <= currentLength && elem.className.match(" smsLong")) {
		elem.className = elem.className.replace(" smsLong", "");
		elem.usedChars.className = elem.usedChars.className.replace(" smsLong", "");
		elem.submitButton.className = elem.submitButton.className.replace(" disabledButton", "");
		elem.submitButton.disabled = false;
	}
	elem.usedChars.innerHTML = elem.value.length;
	elem.maxChars.innerHTML = currentLength;
	elem.before = elem.value;
}

function checkSMS(smsForm, send, preview) {
	errmsg = "";
	adress = document.getElementById('target');
	if (!preview && adress.value.trim() == "") {
		errmsg += "Políčko příjemce musí být vyplněné!\n";
		adress.focus();
	}
	text = document.getElementById('text');
	if (!preview && text.value.trim() == "") {
		errmsg += "Musíte vyplnit text zprávy!\n";
		text.focus();
	}
	if (send && text.className.match("smsLong")) {
		errmsg += "Sms zpráva je příliš dlouhá!\n";
	}
	code = document.getElementById('code');
	if (code.value.trim() == "" && send) {
		errmsg += "Musíte vyplnit potvrzovací kód!\n";
		code.focus();
	}
	if (errmsg == "") {
		return true;
	} else {
		alert(errmsg);
		return false;
	}
}

function checkForm(elem, register){
	if (elem.username.value == '') {
		alert('Nebylo zadáno přihlašovací jméno (email).');
		return false;
	}
	if (elem.username.value.length < 3) {
		alert('Uživatelské jméno musí mít alespoň 3 znaky.');
		return false;
	}
	if (elem.password) {
		if (elem.password.value == '') {
			alert('Nebylo zadáno žádné heslo.');
			return false;
		}
	}
	else if (elem.password1) {
		if (elem.password1.value == '') {
			alert('Nebylo zadáno žádné heslo.');
			return false;
		}
	}
	if (register === true && elem.password1.value != elem.password2.value) {
		alert('Zadaná hesla se neshodují.');
		return false;
	}
	if (register === true && !validateEmail(elem.username.value)) {
		alert('Zadaný email není platný.');
		return false;
	}
	return true;
}

function makeActive(elem, searched, value){
	deactive(document.getElementById('www'));
	deactive(document.getElementById('firm'));
	deactive(document.getElementById('phone'));
	switch(elem.id){
		case 'firm':
			title = titles[2];
		break;
		case 'phone':
			title = titles[3];
		break;
		default:
			title = titles[1];
	}
	document.getElementById('searchTitle').innerHTML = title;
	document.getElementById('searchButton').className = 'type_' + value;
	var cname = (searched ? 'search_' : '');
	document.getElementById('footer').className = 'type_' + cname + value;
	document.getElementById('type_' + elem.id).checked = true;
	makeFocus(elem);
	makeFocus(elem);
}

function showMeta(element){}
function hideMeta(element){}

function callBackShowHideForm()
{
	var callbackform = document.getElementById('callbackform');
	if (callbackform.style.display == 'block') {
		callbackform.style.display = 'none';
	} else {
		callbackform.style.display = 'block';
	}
}

function callBackSend()
{
	var text = document.getElementById('callbacktext').value.replace(/^\s+|\s+$/g, '');
	if (text != '') {
	    var email = document.getElementById('callbackemail').value;
	    document.getElementById('callbacktext').value = '';
		try {
		    var ajax = new Ajax();
		    ajax.get('/callback.php?text=' + text + '&email=' + email, null, null, 1, 5);
		} catch (e) {
		}
	}
}

function makeOnloadFocus() {
	try {
		document.getElementById('username').focus();
	} catch (e) {
		try {
			document.getElementById('searchField').focus();
		} catch (e) {}
	}
}

/**
 * Vytvoří instanci Ajaxu.
 */
function Ajax()
{
	var self = this;

	var request = null;
	var requestUrl = '';
	var requestData = null;
	var requestMethod = 'GET';

	var requestAttempts = 3;
	var requestTimeout = 5;
	var requestTimeoutId = null;

	var requestCallbackObject = null;
	var requestCallbackFunc = null;

	/**
	 * Provede požadavek metodou GET.
	 *
	 * @param String url url adresa
	 * @param Object object objekt, ke kterému patří funkce
	 * @param String func jméno funkce, které se předají vrácená data
	 * @param integer attempts počet pokusů na odeslání požadavku
	 * @param integer timeout časový limit na jeden požadavek
	 */
	this.get = function(url, object, func, attempts, timeout)
	{
		requestUrl = url;
		requestCallbackObject = object || null;
		requestCallbackFunc = func || null;
		requestMethod = 'GET';
		requestAttempts = attempts || requestAttempts;
		requestTimeout = timeout || requestTimeout;

		// odešle požadavek
		send();
	};

	/**
	 * Provede požadavek metodou POST.
	 *
	 * @param String url url adresa
	 * @param String data data
	 * @param Object object objekt, ke kterému patří funkce
	 * @param String func jméno funkce, které se předají vrácená data
	 * @param integer attempts počet pokusů na odeslání požadavku
	 * @param integer timeout časový limit na jeden požadavek
	 */
	this.post = function(url, data, object, func, attempts, timeout)
	{
		requestUrl = url;
		requestData = data;
		requestCallbackObject = object || null;
		requestCallbackFunc = func || null;
		requestMethod = 'POST';
		requestAttempts = attempts || requestAttempts;
		requestTimeout = timeout || requestTimeout;

		// odešle požadavek
		send();
	};

	/**
	 * Ukončí probíhající požadavek.
	 */
	this.abort = function()
	{
		request.abort();
	};

	/**
	 * Provede se po vypršení časového limitu na požadavek.
	 *
	 * @access private
	 */
	this.timeout = function()
	{
		self.abort();
		window.clearTimeout(requestTimeoutId);

		requestAttempts--;
		if (requestAttempts > 0) {
			send();
		} else if (requestCallbackObject != null) {
			requestCallbackObject[requestCallbackFunc]({error : 500});
		}
	};

	/**
	 * Provede požadavek zvolenou metodou.
	 *
	 * @access private
	 */
	function send()
	{
		request = initialize();
		request.open(requestMethod, requestUrl, true);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		request.onreadystatechange = onreadystatechange;

		requestTimeoutId = window.setTimeout(self.timeout, requestTimeout * 1000);
		request.send(requestData);
	};

	/**
	 * Kontroluje stav požadavku.
	 *
	 * @access private
	 */
	function onreadystatechange()
	{
		if (request.readyState == 4) {
			try {
				// zruší hlídání časového limitu
				window.clearTimeout(requestTimeoutId);

				if (request.status == 200) {
					if (requestCallbackObject != null) {
					    try {
							eval('var data = (' + request.responseText + ');');
						} catch (e) {
							// server nevrátil JSON
							var data = {error : 500};
						}

						requestCallbackObject[requestCallbackFunc](data);
					}
				} else {
					requestAttempts--;
					if (requestAttempts > 0) {
						send();
					} else if (requestCallbackObject != null) {
						requestCallbackObject[requestCallbackFunc]({error : request.status});
					}
				}
			} catch (E) {
			    // odchytává výjimku, která nastane po abort()
			}
		}
	};

	/**
	 * Vytvoří instanci XMLHttpRequestu.
	 *
	 * @access private
	 * @throws Error když se nevytvoří instance
	 */
	function initialize()
	{
		if (typeof XMLHttpRequest != 'undefined') {
			return new XMLHttpRequest();
		} else {
			try {
				return new ActiveXObject('Msxml2.XMLHTTP');
			} catch (e) {
				try {
					return new ActiveXObject('Microsoft.XMLHTTP');
				} catch (E) {
					throw new Error('XMLHttpRequest není dostupný.');
				}
			}
		}
	};
}


if (msieold) {
	/* fix pro problikavani image background v ie6 */
	try {
		document.execCommand("BackgroundImageCache",false,true);
	} catch(e) { }
}

function validateEmail(email) {
	var correct = /^[a-z0-9-!#$%&'*+/=?^_`{|}~]+([.][a-z0-9-!#$%&'*+/=?^_`{|}~]+)*@([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?[.])+[a-z]{2,6}$/i;
	return correct.test(email);
}

function makeSearch(anchor) {
	try {
		document.getElementById("searchCentralDiv").action = anchor.href;
		document.getElementById("searchCentralDiv").type.value = '';
		document.getElementById("searchCentralDiv").submit();
		return true;
	} catch (e) {
		return false;
	}
}

/**
 * Maze text a vzhled logovaciho inputu pri focusu
 * 
 * @param input
 */
function clearInputText(input) {
	if (input.value == 'e-mail nebo mobil' || input.value == 'e-mail') {
		input.value='';
		input.className = 'normal';
	} else if (input.value == '') {
		input.value='e-mail nebo mobil';
		input.className = 'normal grey';
	}
}
/**
 * Maze text a vzhled logovaciho inputu pri focusu (pouze pro e-mail)
 * 
 * @param input
 */
function clearInputTextEmail(input) {
	if (input.value == 'e-mail') {
		input.value='';
		input.className = 'normal';
	} else if (input.value == '') {
		input.value='e-mail';
		input.className = 'normal grey';
	}
}

/**
 * Kontroluje vyplnění požadovaných položek u objednávky telefonního seznamu 
 *
 * @param form
 */
function checkOrderForm(form) {
	var pass = true
	if (form.name.value == '') {
		var elem = document.getElementById('error_name');
		elem.className = elem.className.replace(/hidden/, 'show');
		pass = false;
	}
	if (form.surname.value == '') {
		var elem = document.getElementById('error_surname');
		elem.className = elem.className.replace(/hidden/, 'show');
		pass = false;
	}
	if (form.street.value == '') {
		var elem = document.getElementById('error_street');
		elem.className = elem.className.replace(/hidden/, 'show');
		pass = false;
	}
	if (form.city.value == '') {
		var elem = document.getElementById('error_city');
		elem.className = elem.className.replace(/hidden/, 'show');
		pass = false;
	}
	if (form.psc.value == '') {
		var elem = document.getElementById('error_psc');
		elem.className = elem.className.replace(/hidden/, 'show');
		pass = false;
	}
	if (form.phone.value == '') {
		var elem = document.getElementById('error_phone');
		elem.className = elem.className.replace(/hidden/, 'show');
		pass = false;
	}
	if (form.region.options[0].selected) {
		var elem = document.getElementById('error_region');
		elem.className = elem.className.replace(/hidden/, 'show');
		pass = false;
	}
	return pass;
}

/**
 * Kontroluje mamutí Ness formulář
 *
 * @todo: zatím kontrolujeme jenom souhlas s podmínkami
 *
 * @param f - formulář
 * @param size - velkost formuláře (počet otázek)
 *
 * @return boolean
 */
function checkNessForm(f, size)
{
	try {
		// pole 11 booleanů, které představují jednotlivé otázky (resp. jejich zodpověděnost)
		var sections = new Array();

		for (var k = 0; k < size; k++) {
			sections[k] = false;
		}

		for( var i in f.elements) {
			var e = f.elements[i];
			if (e.name && e.name.match(/^check_(\d{1,2})\[\]$/)) {
				id = e.name.match(/\d{1,2}/g);
				id = parseInt(id[0]);
				// jde o checkbox nebo o select
				if (e.checked != undefined && e.checked) {
					// jde o (zaškrtnutý) checkbox
					sections[id - 1] = true;
				} else if (e.checked == undefined && e.value != '') {
					// jde o select, který má vyplněnou hodnotu
					sections[id - 1] = true;
				}
			}
		}

		var alerted = false;
		for (i in sections) {
			id = parseInt(i) + 1;
			id = 'nessCheck_' + (id);
			if (!sections[i]) {
				if (!alerted) {
					alert('U každé otázky musí být vyplněna alespoň jedna odpověď.');
					window.location.href = '#' + id;
					alerted = true;
				}
				document.getElementById(id).style.backgroundColor = '#ff8888';
			} else {
				document.getElementById(id).style.backgroundColor = 'transparent';
			}
		}
		
		if (!f.accept.checked) {
			if (!alerted) {
				alert('Musíte souhlasit s obchodními podmínkami!');
				window.location.href = '#nessAccept';
				alerted = true;
			}
			document.getElementById('nessAccept').style.backgroundColor = '#ff8888';
		} else {
			document.getElementById('nessAccept').style.backgroundColor = 'transparent';
		}

		if (!alerted) {
			return true;
		} else {
			return false;
		}
	} catch (ex) {
		return true;
	}
}

function checkPhoneNumber(e, input)
{
	reg = /^\d{0,9}$/;
	if (reg.test(input.value)) {
		return true;
	} else {
		input.value = input.value.replace(/^(\d{0,9}).*$/, '$1');
		return false;
	}
}
