
function redir() {
	return Base64.encode(window.location.href);
	//return window.location.href;
}





function sendForm(idDom) {
	var args = sendForm.arguments;
	var idDom = args[0];
	var code = args[1];
	var action = CODE_LIST[code];
	var elm;
	var parVal = []
	var sb;
	var arg;
	for (var i = 2; i < args.length; i++) {
		arg = args[i];
		elm = document.getElementById(arg);
		if (elm.tagName == 'select') {
			sb = new SelectBox(arg)
			parVal.push(sb.selectedKey());
		} else { 
			parVal.push(elm.value);
		}
	}
	var linkPar = []
	linkPar.push(action);
	for (var i = 0; i < parVal.length; i++) {
		linkPar.push(encodeURIComponent(parVal[i]));
	}
	var link = PHP_SELF;
	if (linkPar.length) {
		link += linkPar.join("/");
	}
	link = link + '/'; 
	//document.getElementById(idDom).method = "get";
	window.location.href = link;
	
	//document.getElementById(idDom).action = link;
	//document.getElementById(idDom).submit();
}


function contactUs() {
	var check = Base64.encode(document.getElementById('check-field').value);
	document.getElementById('check-field2').value = check;
}


var General = {

	editProfile: {
		httpData: {
			'url': makeUrl('edit-profile'),
			'success': function(conn) {
				var response = new HttpJsonResponse(conn);
				var data;
				var url;
		
				if (! response.load()) {
					alert(response.responseText());
					//logout();
					return;
				}	
				data = response.getResponseData();
				if (data.get('status')) {
					switch (JSON_LOAD_DATA.loginType) {
						case 'club':
							url = makeUrl('edit-profile-form');
							break;
						case 'band':
							url = makeUrl('index-band');
							break;
						case 'fan':
							url = makeUrl('index');
							break;
					}
					if (url) {
						window.location.href = url;
					} else {
						window.alert('Profil byl upraven.');
					}
				} else {
					Address.showError(data.get('error'));
				}
				
			}
		}
	}
}

var File = {
	drop: function(idTarget, name) {
		document.getElementById('file-delete-id-target').value = idTarget;
		document.getElementById('file-delete-name').value = name;
		document.getElementById('file-delete-form').submit();
	}
}

var Login = {
	
	focus: function(elm) {
		if (elm.id == 'password-fake') {
			elm.style.display = 'none';
			document.getElementById('password').style.display = 'block';
			document.getElementById('password').focus();
			//elm.type = 'password';
			//elm.focus()
		}
		
		if (elm.id == 'password') {
			//document.getElementById('pas')
		}
		
		
	},
	
	blur: function(elm) {
		if (elm.value == '') {
			switch (elm.id) {
				case 'username':
					elm.value = 'uživatel';
					break;
				case 'password':
					//alert('test');
					elm.style.display = 'none';
					
					document.getElementById('password-fake').style.display = 'block';
					
					break;
				case 'password-fake':
					alert('point');
					break;
			}
		}
	
	}

}


function XDate(date) {
	this.date = date;
	
	this.getMonth = function() {
		return this.correct(this.date.getMonth() + 1);
	},
	
	this.getDay = function() {
		return this.correct(this.date.getDate());
	},
	
	
	this.getYear = function() {
		return this.date.getFullYear()
	},
	
	this.correct = function(val) {
		var _val = new String(val);
		if (val < 10) {
			return '0' + _val;
		}
		return _val;
	},
	
	this.getPartList = function() {
		out = [
			this.getDay(),
			this.getMonth(),
			this.getYear()
		]
		return out;
	},
	
	
	this.getCz = function() {
		var parts = this.getPartList();
		return parts.join('.');
	},
	
	this.getEn = function() {
		var parts = this.getPartList();
		parts.reverse();
		return parts.join('-');
	}
}


function SelectBox(idDom) {
	this.idDom = idDom;
	this.box = document.getElementById(this.idDom);
	this.options = this.box.options;
	//alert(options);
	this.clean = function() {
		this.box.innerHTML = '';
		/*
		var len = this.box.length;
		for (var i = 0; i < len; i++) {
			this.options[0] = null;
		}
		*/
	}

	
	this.cleanExceptFirst = function() {
		var len = this.options.length;
		for (var i = 1; i < len; i++) {
			this.options[1] = null;
		}
	}

	
	this.load = function(list, key, value, selectedKey) {
		var len = this.options.length;
		var _key;
		var val;

		for (var i = 0; i < list.length; i++) {
			_key = list[i][key];
			val = list[i][value];
			if (selectedKey == _key) {
				this.options[len] = new Option(val, _key, true, true);
			} else {
				this.options[len] = new Option(val, _key);
			}
			len++;
		}
	}


	this.loadGroup = function(list, key, value, groupKey, selectedKey) {
		var len = this.options.length;
		var _key, ogroup, groupName, opt;
		var val;
		for (var i = 0; i < list.length; i++) {
			groupName = list[i][groupKey];
			ogroup = document.createElement('optgroup');
			ogroup.label = groupName;
			
			for (var j = 0; j < list[i]['list'].length; j++) {
				_key = list[i]['list'][j][key];
				val = list[i]['list'][j][value];
				opt = document.createElement('option');
				opt.text = _key;
				opt.value = val;
				if (selectedKey == _key) {
					opt.selected = true;
				} else {
					opt = new Option(val, _key);
					opt.selected = false;
				}
				opt.innerHTML = val;
				ogroup.appendChild(opt);
			}
			this.box.appendChild(ogroup);
		}
	}
	
	
	this.add = function(key, value, selected) {
		var len = this.options.length;
		if (selected) {
			this.options[len] = new Option(value, key, 'selected', 'selected');
		} else {
			this.options[len] = new Option(value, key);
		}
	}
	
	
	this.reload = function(list, key, value, selectedKey) {
		this.clean();
		this.load(list, key, value, selectedKey);
		this.enable();
	}


	this.reloadGroup = function(list, key, value, groupKey, selectedKey) {
		this.clean();
		this.loadGroup(list, key, value, groupKey, selectedKey);
		this.enable();
	}
	
	
	this.selectedKey = function() {
		var index = this.box.selectedIndex;
		if (index == -1) {
			return null;
		}
		return this.options[index].value;
	}
	
	
	this.disable = function() {
		this.box.disabled = true;
	},
	
	this.enable = function() {
		this.box.disabled = false;
	}
}

var Address = {
	errorBox: null,
	idLoadPostalCodeProcess: null,
	isLoadedTownList: false,
	lastPostalCode: null,
	loadStreet: null,
	
	
	initPostalCodeListener: function (idDom, errorBox, loadStreet) {
		this.errorBox = errorBox;
		var events = ['onkeyup'];
		//alert(events);
		this.loadStreet = loadStreet;
		InputCheck.setEventCallback(idDom, events, this.watchPostalCode);
		this.watchPostalCode();
	},
	
	showHelpAddressLinks: function(status) {
		var data = CheckForm.getData('table-address', 'js-link-address-help');
		for (var i = 0; i <data.length; i++) {
			data[i].style.display = (status ? 'inline' : 'none');
		}
	},
	
	watchPostalCode: function() {
		var postalCode = document.getElementById('ipt-postal-code').value.replace(' ', '');
		var len = postalCode.length;
		Address.showHelpAddressLinks(false);
		if (len > 4) {
			if (InputCheck.types.postalCode(postalCode)) {
				if (this.lastPostalCode != postalCode) {
					this.lastPostalCode = postalCode;
					Address.loadByPostalCode(postalCode);
				}
			} else {
				this.lastPostalCode = postalCode;
				Address.cleanEasyForm();
				Address.showError('Zadané PSČ je neplatné.');
			}
		} else {
			this.lastPostalCode = postalCode;
			Address.cleanEasyForm();
		}
	},
	
	cleanEasyForm: function() {
		if (this.loadStreet) {
			this.cleanStreetBox();
		}
		this.cleanTownBox();
	},
	
	
	cleanStreetBox: function() {
		var streetBox = new SelectBox('slt-address-street');
		streetBox.clean();
		streetBox.disable();
	},
	
	
	cleanTownBox: function() {
		var townBox = new SelectBox('slt-address-town');
		townBox.clean();
		townBox.disable();
	},
	
	loadByPostalCode: function(postalCode) {
		var url;
		if (this.loadStreet && JSON_LOAD_DATA && JSON_LOAD_DATA.idTown) {
			url =  makeUrl('load-postal-code', postalCode, JSON_LOAD_DATA.idTown);
		} else {
			url = makeUrl('load-postal-code', postalCode, 0);
		}
		var data = {
			'url': url,
			'success': this.handleLoadByPostalCode
		}
		document.getElementById('ipt-postal-code').disabled = true;
		document.getElementById('progress-bar').style.display = 'block';
		this.idLoadPostalCodeProcess = WHttp.get(data);
		this.enableSubmit(false);
	},
	
	handleLoadByPostalCode: function(conn) {
		this.idLoadPostalCodeProcess = null;
		var response = new HttpJsonResponse(conn);
		var data, townList, streetList;
		var streetBox, townBox;
		var PSC_ERROR = 'Zadané PSČ není v systému vedené. Pokud jste si jistí, že je PSČ platné, využijte manuální zadání adresy.';
		document.getElementById('progress-bar').style.display = 'none';
		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}
		townBox = new SelectBox('slt-address-town');
		if (Address.loadStreet) {
			streetBox = new SelectBox('slt-address-street');
		}
		data = response.getResponseData();
		document.getElementById('ipt-postal-code').disabled = false;
		if (data.get('status')) {
			Address.showHelpAddressLinks(true);
			Address.isLoadedTownList = true;
			townList = data.get('townList');
			townBox.reload(townList, 'id', 'name', JSON_LOAD_DATA.idTown);
			if (Address.loadStreet) {
				streetList = data.get('streetList');
				streetBox.reload(streetList, 'id', 'name', JSON_LOAD_DATA.idStreet);
			}
			Address.removeError(PSC_ERROR);
			Address.turnMissingPostalCode(false);
		} else {
			Address.isLoadedTownList = false;
			townBox.clean();
			if (this.loadStreet) {
				streetBox.clean();
			}
			Address.turnMissingPostalCode(true);
			Address.showError(PSC_ERROR);
		}
		Address.enableSubmit(true);
		//document.getElementById('ipt-postal-code').focus();
	},
	
	turnMissingPostalCode: function(status) {
		var opt = (status ? 'block' : 'none');
		document.getElementById('div-missing-postal-code').style.display = opt;
	},
	
	setManualAddressEntery: function(status) {
		document.getElementById('ipt-postal-code').disabled = (status ? true : false);
		document.getElementById('fieldset-manual-address').style.display = (status ? 'block': 'none');
		document.getElementById('hid-manual-address-entery').value = (status ? 1 : 0);
	},
	
	
	loadStreetList: function() {
		if (! this.isLoadedTownList) {
			return ;
		}
		var townList = new SelectBox('slt-address-town');
		var idTown = townList.selectedKey();
		document.getElementById('progress-bar').style.display = 'block';
		var data = {
			'url': makeUrl('load-street-list', idTown),
			'success': this.handleLoadStreetList
		}
		this.enableSubmit(false);
		WHttp.get(data);
	},

	loadTownshipTownList: function() {
		/*
		if (! this.isLoadedTownList) {
			return ;
		}
		*/
		var regionList = new SelectBox('slt-region');
		var idRegion = regionList.selectedKey();
		document.getElementById('progress-bar').style.display = 'block';
		var data = {
			'url': makeUrl('load-township-town-list', idRegion),
			'success': this.handleLoadTownshipTownList
		}
		this.enableSubmit(false);
		WHttp.get(data);
	},
	
	
	handleLoadTownshipTownList: function(conn) {
		var response = new HttpJsonResponse(conn);
		var _data, data, streetList, box;
		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		document.getElementById('progress-bar').style.display = 'none';
		data = response.getResponseData();
		
		if (data.get('status')) {
			_data = data.get('townList');
			box = new SelectBox('slt-town');
			box.reloadGroup(_data, 'idTown', 'town', 'name');
		} else {
			
		}
		Address.enableSubmit(true);
	
	},


	
	handleLoadStreetList: function(conn) {
		Address.isLoading = null;
		this.idLoadStreetList = null;
		this.idLoadPostalCodeProcess = null;
		var response = new HttpJsonResponse(conn);
		var data, streetList;
		var streetBox;
		document.getElementById('progress-bar').style.display = 'none';
		
		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			streetList = data.get('streetList');
			streetBox = new SelectBox('slt-address-street');
			streetBox.reload(streetList, 'id', 'name');
		}
		Address.enableSubmit(true);
	},
	
	addTownForm: function() {
		var res = window.prompt('Zadejte název města:', '');
		if (! res) {
			return;
		}
		var postalCode = document.getElementById('ipt-postal-code').value.replace(' ', '');
		var data = {
			'url': makeUrl('add-town', postalCode, res),
			'success': this.handleAddTown
		}
		this.enableSubmit(false);
		WHttp.get(data);
		
	},
	
	addStreetForm: function() {
		var res = window.prompt('Zadejte název ulice:', '');
		if (! res) {
			return;
		}
		var box = new SelectBox('slt-address-town');
		document.getElementById('fake-name').value = res;
		document.getElementById('fake-id-town').value = box.selectedKey();
		var data = {
			'url': makeUrl('add-street'),
			'success': this.handleAddStreet
		}
		this.enableSubmit(false);
		WHttp.post(data, 'fake-form');
	},
	
	handleAddTown: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data, box;
		
		if (! response.load()) {
			alert(response.responseText());
			//logout(); 
			return; 
		}	
		Address.enableSubmit(true);
		data = response.getResponseData();
		if (data.get('status')) {
			box = new SelectBox('slt-address-town');
			box.add(data.get('id'), data.get('name'), true);
		} else {
			Address.showError(data.get('message'));
		}
	},

	handleAddStreet: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data, box;
		
		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			box = new SelectBox('slt-address-street');
			box.add(data.get('id'), data.get('name'), true); 
		} else { 
			Address.showError(data.get('message')); 
		}
		Address.enableSubmit(true);
		
	},
	
	removeError: function(msg) {
		var area = document.getElementById(this.errorBox);
		area.innerHTML = area.innerHTML.replace(msg, '');
		
	},
	
	showError: function(msg) {
		document.getElementById(this.errorBox).innerHTML = msg;
		window.scrollTo(0,0);
	}, 
	
	enableSubmit: function(status) {
		document.getElementById('button-submit').disabled = !status;
	}
}


var OnLoad = {

	__calendarOpt: {
		'filePath': '/kalendar',
		'startMonday': true,
		'separator': '.',
		'prefillDate': (JSON_LOAD_DATA.fromDate ? {
			'day': JSON_LOAD_DATA.fromDate.day, 
			'month': JSON_LOAD_DATA.fromDate.month, 
			'year': JSON_LOAD_DATA.fromDate.year
		} : {})
	},


	__calendarOptTo: {
		'filePath': '/kalendar',
		'startMonday': true,
		'separator': '.',
		'prefillDate': (JSON_LOAD_DATA.toDate ? {
			'day': JSON_LOAD_DATA.toDate.day, 
			'month': JSON_LOAD_DATA.toDate.month, 
			'year': JSON_LOAD_DATA.toDate.year
		} : {})
	},

	
	__initConcertForm: function(origData) {
		if (origData['fee_manage'] == 'band') {
			Club.feeManageOption(false);
		}
		document.getElementById('serial-concert-fee').onfocus = function() {
			document.getElementById('serial-concert-fee-choose-now').checked = true
		}
		
		if (origData['bonus'] === null) {
			Club.revenueManage(false);
		}
	},
	
	__initConcertSerialForm: function() {
		var events  = ['onchange'];
		InputCheck.setEventCallback('slt-serial-concert-day', events, Club.loadSerialConcertFirst);
		Club.loadSerialConcertFirst();
	},
	
	
	__initCalendar: function() {
		//myCal1 = new Calendar({ date: 'd.m.Y' }, { direction: 1, tweak: {x: 6, y: 0} });
		Cal1From = new vlaDatePicker('date', this.__calendarOpt);
	},
	
	
	clubRegister: function() {
		Address.initPostalCodeListener('ipt-postal-code', Club.ERROR_BOX, true);
		//Club.checkForm();
	},
	
	
	bandRegister: function() {
		Band.initBandForm();
		//Address.initPostalCodeListener('ipt-postal-code', Band.ERROR_BOX, false);
	},
	
	
	editConcertSerial: function() {
		this.__initConcertForm(JSON_LOAD_DATA);
		this.__initConcertSerialForm();
	},
	
	
	clubConcert: function() {
		Club.toggleConcertList('list');
		
		this.__initCalendar();
		Club.showConcertOffer(true);
	},
	

	bandConcert: function() {
		Band.toggleConcertList('list');
		
		this.__initCalendar();
	},

	
	editConcert: function() {
		this.__initConcertForm(JSON_LOAD_DATA['orig']);
		var offer = ! (JSON_LOAD_DATA['kind'] == 'concert');
		Club.showConcertOffer(offer);
		this.__initCalendar();
	},
	
	fanRegister: function() {
		Address.initPostalCodeListener('ipt-postal-code', Fan.ERROR_BOX, false);
	},
	
	initSerialConcertForm: function() {
		this.__initConcertSerialForm();
	},
	
	
	homepage: function() {
		Cal1From = new vlaDatePicker('date-from', this.__calendarOpt);
		CalTo = new vlaDatePicker('date-to', this.__calendarOptTo);
		//Cal1From = new Calendar({ 'date-from': 'd.m.Y' }, { direction: 1, tweak: {x: 6, y: 0} });
		//CalTo = new Calendar({ 'date-to': 'd.m.Y' }, { direction: 1, tweak: {x: 6, y: 0} });
		
		
	},
	
	
	__searchConcert: function() {
		var box1 = new SelectBox('slt-region');
		var box2 = new SelectBox('slt-style');
		var from = document.getElementById('date-from');
		var to = document.getElementById('date-to');
		window.location.href = postUrl('index', box1.selectedKey(), from.value, to.value, box2.selectedKey());
		//document.getElementById('band-list-form').action = makeUrl('band-list');
		//document.getElementById('band-list-form').submit();
	}, 
	
	
	init: function() {
		if (! IS_PERSON_LOGGED) {
			if (document.getElementById('password').value) {
				Login.focus(document.getElementById('password-fake'));
			} else {
				Login.blur(document.getElementById('password'));
			}
			//alert(document.getElementById('password').value);
			
			Login.blur(document.getElementById('username'));
			document.getElementById('password').style.visibility = 'visible';
			document.getElementById('password-fake').style.visibility = 'visible';
			//document.getElementById('body').focus();
		}
	}
}


var Topic = {


	add: function() {
		var httpData = { 
			'url': makeUrl('add-topic'),
			'success': this.addTopicDone
		}
		WHttp.post(httpData, 'topic-form');
		return true;
	},
	
	edit: function() {
		var httpData = { 
			'url': makeUrl('edit-topic'),
			'success': this.editTopicDone
		}
		WHttp.post(httpData, 'topic-form');
		return true;
	},
	

	addTopicDone: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data;

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			var kind = JSON_LOAD_DATA.kind;
			var idConcert = JSON_LOAD_DATA.idConcert
			window.location.href = postUrl('concert-detail', kind, idConcert);
		} else {
			Topic.setError(data.get('error'));
		}
	},


	editTopicDone: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data;

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			var kind = JSON_LOAD_DATA.kind;
			var idConcert = JSON_LOAD_DATA.idConcert
			window.location.href = postUrl('concert-detail', kind, idConcert);
		} else {
			Topic.setError(data.get('error'));
		}
	},


	postAdd: function() {
		var httpData = { 
			'url': makeUrl('add-post'),
			'success': this.addPostDone
		}
		WHttp.post(httpData, 'post-form');
		return true;
	},

	addPostDone: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data;

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			var topic = JSON_LOAD_DATA.seo
			window.location.href = postUrl('topic', topic);
		} else {
			Topic.setError(data.get('error'));
		}
	},
	
	
	showForm: function(hide) {
		document.getElementById('topic-form').style.display = 'block';
		if (hide !== null) {
			hide.style.display = 'none';
		}
	},

	
	setError: function(msg) {
		document.getElementById('topic-error').innerHTML = msg;
		//window.scrollTo(0,0);
	}
	

} 
