var Concert = {
	page: function(page, id, idClub) {
		var box = document.getElementById(id);
		var elms = getElementsByClassName(box, 'span', '*');
		var i;
		for (i = 0; i < elms.length; i++) {
			if (elms[i].innerHTML == page) {
				elms[i].className = 'myPage';
			} else {
				elms[i].className = 'js-link';
			}
		}
		var _date = new SelectBox('month-' + id);
                // zde neni povinny parametr action, bere se z hidden field of form\
    		var httpData = {
       		'url': makeUrl('json-concert-list', id, page, idClub, _date.selectedKey()),
                                'success': this.loadConcertList
                        }
                WHttp.get(httpData);
                return true;
	},



        offerPage: function(page, id, idClub) {
                var box = document.getElementById(id);
                var elms = getElementsByClassName(box, 'span', '*');
                var i;
                for (i = 0; i < elms.length; i++) {
                        if (elms[i].innerHTML == page) {
                                elms[i].className = 'myPage';
                        } else {
                                elms[i].className = 'js-link';
                        }
                }
                var _date = new SelectBox('month-' + id);
                // zde neni povinny parametr action, bere se z hidden field of form\
                var httpData = {
                'url': makeUrl('json-offer-list', id, page, idClub, _date.selectedKey()),
                                'success': this.loadConcertList
                        }
                WHttp.get(httpData);
                return true;
        },



        bandProfile: function(page, id, idClub) {
                var box = document.getElementById(id);
                var elms = getElementsByClassName(box, 'span', '*');
                var i;
                for (i = 0; i < elms.length; i++) {
                        if (elms[i].innerHTML == page) {
                                elms[i].className = 'myPage';
                        } else {
                                elms[i].className = 'js-link';
                        }
                }
                var _date = new SelectBox('month-' + id);
                // zde neni povinny parametr action, bere se z hidden field of form\
                var httpData = {
                'url': makeUrl('json-band-concert-list', id, page, idClub, _date.selectedKey()),
                                'success': this.loadConcertList
                        }
                WHttp.get(httpData);
                return true;
        },





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

                if (! response.load()) {
                        alert(response.responseText());
                        //logout();
                        return;
                }
                data = response.getResponseData();
                if (data.get('status')) {
			document.getElementById('club-concert-list-' + data.get('type')).innerHTML = data.get('content');
			document.getElementById('page-' + data.get('type')).innerHTML = data.get('contentPage');
                }

	}

}
var Club = {
	clubConcertMandatory: ['date', 'from', 'name'],
	clubConcertTypeDict: {
	
	},
	
	
	__markAllStyles: function(status) {
		var node = document.getElementById('club-form');
		var arr = getElementsByClassName(node, 'input', 'style');
		
		for (i = 0; i < arr.length; i++) {
			arr[i].checked = status;
		}
	},
	
	unmarkAllStyles: function() {
		this.__markAllStyles(false);
	},
	
	
	markAllStyles: function() {
		this.__markAllStyles(true);
	},
	
	list: function() {
		var box1 = new SelectBox('slt-region');
		var box2 = new SelectBox('slt-style');
		window.location.href = postUrl('club-list', box1.selectedKey(), box2.selectedKey()); 		
	},
	
	enableSaveConcert: function() {
		//alert('test');
		document.getElementById('button-save-concert').style.visibility = 'visible';
	},
	
	registerDone: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data;

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			window.location.href = postUrl('register-club-done');
		} else {
			Address.showError(data.get('error'));
		}
		
	},
	
	checkRegisterForm: function(isRegister) {
		var formData = CheckForm.toNameValueDict(CheckForm.getData(this.ID_DOM_FORM, 'club-form-input'));
		var key;
		var typeDict = {
			'email': InputCheck.types.emailDue,
			'phone': InputCheck.types.phoneNumber
			//'postal-code': InputCheck.types.postalCodeDue
			// postal-code neni soucasti class='club-form-info'
		}
		
		if (isRegister) {
			var mandatory = ['club-name', 'email', 'password', 'username', 'password-again'];
		} else {
			var mandatory = ['club-name', 'email'];
		}
		if (! this.checkForm(mandatory, typeDict)) {
			 return false;
		}
		if (isRegister && formData['password'] != formData['password-again']) {
			this.setError("Hesla nejsou stejná.");
			return false;
			
		}
		if (! formData['licence-info']) {
			this.setError('Pro dokončení registrace musíte souhlasit s licenčními podmínkami.');
			return false;
		}
		
		// zde neni povinny parametr action, bere se z hidden field of form\
		if (isRegister) {
			var httpData = { 
				'url': makeUrl('register-club'),
				'success': this.registerDone
			}
		} else {
			var httpData = General.editProfile.httpData;
		}
		WHttp.post(httpData, this.ID_DOM_FORM);
		return true;
	},
	
	
	checkForm: function(mandatory, typeDict, idForm) {
		var formData = CheckForm.toNameValueDict(CheckForm.getData(this.ID_DOM_FORM, 'club-form-input'));
		var key;
		
		var titles = {
			'date': 'datum',
			'from': 'od',
			'to': 'do',
			'future-limit': 'pravidelně zobrazovat',
			'name': 'název akce',
			'club-name': 'název klubu',
			'email': 'email',
			'username': 'uživatelské jméno',
			'password': 'heslo',
			'password-again': 'heslo-znovu',
			'description': 'popis klubu',
			'phone': 'telefon',
			'postal-code': 'PSČ'
		}
		incorrectKeys = CheckForm.checkMandatory(formData, mandatory);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' je nutné vyplnit."));
			return false;
		}
		incorrectKeys = CheckForm.checkTypes(formData, typeDict);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' není korektní."));
			return false;
		}
		return true;
	},
	
	loadSerialConcertFirst: function() {
		var dayBox = new SelectBox('slt-serial-concert-day');
		var firstConcertBox = new SelectBox('slt-serial-concert-starts');
		var day  = dayBox.selectedKey();
		var plusDay = (day == 0 ? 6 : day - 1);
		var dayInterval = 3600 * 24 * 1000;
		var stamp = new Date();
		var limit = new Number(document.getElementById('ipt-serial-concert-future-limit').value);
		var _stamp = JSON_LOAD_DATA['now'].getTime()  + (dayInterval * plusDay);
		var xStamp;
		var i = 0;
		firstConcertBox.cleanExceptFirst();
		for (i = 0; i < 52; i++) {
			stamp.setTime(_stamp);
			xStamp = new XDate(stamp);
			firstConcertBox.add(xStamp.getEn(), xStamp.getCz(), false);
			_stamp += dayInterval * 7;
		}
	},
	
	
	sendSerialConcert: function() {
		var mandatory = ['from', 'to', 'name', 'future-limit'];
		var typeDict = {
//			'club-name': InputCheck.types.string,
		}
		if (! this.checkForm(mandatory, typeDict)) {
			return false;
		}
		var httpData = { 
			'url': makeUrl('send-concert-serial'),
			'success': this.addConcertSerialDone
		}
		WHttp.post(httpData, this.ID_DOM_FORM);
		return true;
	},

	
	checkConcert: function(mandatory, typeDict, doneCallback) {
		if (! this.checkForm(mandatory, typeDict)) {
			return false;
		}
		var httpData = { 
			'url': makeUrl(JSON_LOAD_DATA.editUrl),
			'success': doneCallback,
			'upload': true
		}
		WHttp.post(httpData, this.ID_DOM_FORM);
		return true;
	},

	editConcert: function() {
		return this.checkConcert(this.clubConcertMandatory, this.clubConcertTypeDict, this.editConcertDone);
	},
	
	
	sendClubConcert: function() {
		return this.checkConcert(this.clubConcertMandatory, this.clubConcertTypeDict, this.addConcertDone);
	},
	
	
	editConcertDone: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data;
		//alert(response.responseText());
		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			window.alert('Koncert byl úspěšně upraven.');
			window.location.href = postUrl('club-concert-list', 'plan');
		} else {
			Club.setError(data.get('error'));
		}
	},
	
	
	addConcertDone: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data;

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			window.alert('Koncert byl úspěšně zadán.');
			window.location.href = postUrl('club-concert-list', 'plan');
		} else {
			Club.setError(data.get('error'));
		}
	},
	
	
	addConcertSerialDone: function(conn) {
		var response = new HttpJsonResponse(conn);
		var data;

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			window.alert('Pravidelný koncert byl úspěšně zadán.');
			window.location.href = makeUrl('concert-serial-list');
		} else {
			Club.setError(data.get('error'));
		}
	},
	
	feeManageOption: function(me) {
		
		document.getElementById('serial-concert-fee-choose-now').disabled = (me ? false : true);
		document.getElementById('serial-concert-fee').disabled = (me ? false : true);
		document.getElementById('serial-concert-fee-choose-later').disabled = (me ? false : true);
	},
	
	
	showConcertOffer: function(offer) {
		var node = document.getElementById('club-form');
		var arr = getElementsByClassName(node, '*', 'concert-form-type-club');
		var arr2  = getElementsByClassName(node, '*', 'concert-form-new-type');
		for (var i = 0; i < arr.length; i++) {
			arr[i].style.display = (offer ? 'table-row': 'none');
		}
		for (var i = 0; i < arr2.length; i++) {
			arr2[i].style.display = (offer ? 'none': 'table-row');
		}
	},
	
	toggleConcertList: function(type) {
		var dict = {
			'list': 'concert-list',
			'form': 'club-form'
		}
		for (var key in dict) {
			document.getElementById(dict[key]).style.display = 'none';
		}
		document.getElementById(dict[type]).style.display = 'block';
		
	},
	
	
	inviteBand: function(id, idDom) {
		document.getElementById('id-band').value = id;
		document.getElementById(idDom).action = redirUrl('club-invite-band');
		document.getElementById(idDom).submit();
	},
	
	unInviteBand: function(id, idDom) {
		var status = window.confirm('Opravdu chcete zrušit pozvánku pro kapelu?');
		if (! status) {
			return ;
		}
		document.getElementById('id-concert-plan').value = id;
		document.getElementById(idDom).action = redirUrl('club-uninvite-band');
		document.getElementById(idDom).submit();
	},
	
	uncancelBand: function(id, idDom) {
		document.getElementById('id-concert-plan').value = id;
		document.getElementById(idDom).action = redirUrl('club-uncancel-band');
		document.getElementById(idDom).submit();
	},
	
	
	changeInviteConcert: function(page) {
		box1 = new SelectBox('slt-region');
		box2 = new SelectBox('slt-style');
		if (document.getElementById('slt-id-concert')) {
			box3 = new SelectBox('slt-id-concert');
			window.location.href = pageUrl('band-list', box1.selectedKey(), box2.selectedKey(), box3.selectedKey(), page);
		} else {
			window.location.href = pageUrl('band-list', box1.selectedKey(), box2.selectedKey(), page);
		}
	},
	
	
	confirmConcertOffer: function(idConcertPlan, idDom) {
		document.getElementById('id-concert-plan').value = idConcertPlan;
		document.getElementById(idDom).action = redirUrl('club-confirm-band-offer');
		document.getElementById(idDom).submit();
	},
	
	
	denyConcertOffer: function(idConcertPlan, idDom) {
		document.getElementById('id-concert-plan').value = idConcertPlan;
		document.getElementById(idDom).action = redirUrl('club-deny-band-offer');
		document.getElementById(idDom).submit();
	},
	
	
	closeConcert: function(idDom) {
		document.getElementById(idDom).action = redirUrl('club-close-concert');
		document.getElementById(idDom).submit();		
	},
	
	
	openConcert: function(idDom) {
		document.getElementById(idDom).action = redirUrl('club-open-concert');
		document.getElementById(idDom).submit();
		
	},
	
	saveConcert: function(idDom) {
		document.getElementById(idDom).action = redirUrl('save-concert');
		document.getElementById(idDom).submit();
		
	},
	
	revenueManage: function(bonus) {
		document.getElementById('serial-concert-bonus').disabled = (bonus ? false : true);
	},
	
	setError: function(msg) {
		document.getElementById(this.ERROR_BOX).innerHTML = msg;
		window.scrollTo(0,0);
	},

	ID_DOM_FORM: 'club-form',
	ERROR_BOX: 'club-error'

}



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

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			window.location.href = makeUrl('register-band-done');
		} else {
			Address.showError(data.get('error'));
		}
		
	},
	
	checkRegisterForm: function(isRegister) {
		var formData = CheckForm.toNameValueDict(CheckForm.getData(this.ID_DOM_FORM, 'band-form-input'));
		var key;
		var incorrectKeys;
		var typeDict = {
			'email': InputCheck.types.emailDue,
			'phone': InputCheck.types.phoneNumber
		}
		
		var titles = {
			'club-name': 'název klubu',
			'email': 'email',
			'username': 'uživatelské jméno',
			'password': 'heslo',
			'password-again': 'heslo-znovu',
			'description': 'popis klubu',
			'phone': 'telefon'
		}
		if (isRegister) {
			var mandatory = ['band-name', 'email', 'password', 'username', 'password-again'];
		} else {
			var mandatory = ['band-name', 'email'];
		}
		incorrectKeys = CheckForm.checkMandatory(formData, mandatory);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' je nutné vyplnit."));
			return false;
		}
		incorrectKeys = CheckForm.checkTypes(formData, typeDict);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' není korektní."));
			return false;
		}
		if (isRegister && formData['password'] != formData['password-again']) {
			this.setError("Hesla nejsou stejná.");
			return false;
			
		}
		if (isRegister && ! formData['licence-info']) {
			this.setError('Pro dokončení registrace musíte souhlasit s licenčními podmínkami.');
			return false;
		}
		// zde neni povinny parametr action, bere se z hidden field of form
		if (isRegister) {
			var httpData = { 
				'url': makeUrl('register-band'),
				'success': this.registerDone
			}
		} else {
			var httpData = General.editProfile.httpData;
		}
		WHttp.post(httpData, this.ID_DOM_FORM);
	},
	
	
	confirmInvitation: function(idConcertPlan, idDom) {
		document.getElementById('id-concert-plan').value = idConcertPlan;
		document.getElementById(idDom).action = redirUrl('band-confirm-invitation');
		document.getElementById(idDom).submit();		
	},

	
	denyInvitation: function(id, idDom) {
		document.getElementById('id-concert-plan').value = id;
		document.getElementById(idDom).action = redirUrl('band-deny-invitation');
		document.getElementById(idDom).submit();		
	},
	
	
	cancelOwnOffer: function(id, idDom) {
		var status = window.confirm('Opravdu chcete zrušit zrušit účast na koncertě?');
		if (! status) {
			return ;
		}
		document.getElementById('id-concert-plan').value = id;
		document.getElementById(idDom).action = redirUrl('band-cancel-tender');
		document.getElementById(idDom).submit();
	},
	


	uncancelOwnOffer: function(id, idDom) {
		document.getElementById('id-concert-plan').value = id;
		document.getElementById(idDom).action = redirUrl('band-uncancel-club-tender');
		document.getElementById(idDom).submit();
	},


	logOnOffer: function(id, idDom) {
		document.getElementById('id-concert').value = id;
		document.getElementById(idDom).action = redirUrl('band-sign-to-concert');
		document.getElementById(idDom).submit();
	},
	
	
	setError: function(msg) {
		document.getElementById(this.ERROR_BOX).innerHTML = msg;
		window.scrollTo(0,0);

	},
	
	saveConcert: function() {
		var mandat = ['date', 'club-name', 'region', 'town']
		return this.checkConcert(mandat, [], this.addConcertDone);
	}, 	
	
	editConcert: function() {
		var mandat = ['date', 'club-name', 'region', 'town']
		return this.checkConcert(mandat, [], this.addConcertDone);
	},

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

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			window.location.href = makeUrl('band-concert-list', 'plan');
		} else {
		
			Band.setError(data.get('error'));
		}
	},
	
	
	checkForm: function(mandatory, typeDict, idForm) {
		var formData = CheckForm.toNameValueDict(CheckForm.getData('band-concert-form', 'band-concert-form-input'));
		var key;
		
		var titles = {
			'date': 'datum',
			'from': 'od',
			'to': 'do',
			'name': 'název akce',
			'club-name': 'název klubu',
			'email': 'email',
			'description': 'popis akce'
		}
		incorrectKeys = CheckForm.checkMandatory(formData, mandatory);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' je nutné vyplnit."));
			return false;
		}
		incorrectKeys = CheckForm.checkTypes(formData, typeDict);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' není korektní."));
			return false;
		}
		return true;
	}, 	
	
	
	checkConcert: function(mandatory, typeDict, doneCallback) {
		if (! this.checkForm(mandatory, typeDict)) {
			return false;
		}
		var httpData = { 
			'url': makeUrl(JSON_LOAD_DATA.editUrl),
			'success': doneCallback
		}
		WHttp.post(httpData, 'band-concert-form');
		return true;
	}, 	
	
	
	calculateTravelRate: function(distance, travelRate) {
		if (! travelRate) {
			return 0;
		}
		var rate = new Number(travelRate);
		var km = new Number(distance);
		var out = (parseInt(rate) * parseInt(km) * 2);
		if (out) {
			return out;
		}
		return '?';
	},
	
	/*
	bandConcert
	sendClubConcert: function() {
		return this.checkConcert(this.clubConcertMandatory, this.clubConcertTypeDict, this.addConcertDone);
	},
	*/
	
	
	
	initBandForm: function() {
		Address.initPostalCodeListener('ipt-postal-code', Band.ERROR_BOX, false);
		var events = ['onkeyup'];
		InputCheck.setEventCallback('travel-rate', events, this.__watchTravelRate);
		this.__watchTravelRate();
	},
	
	toggleConcertList: function(type) {
		var dict = {
			'list': 'concert-list',
			'form': 'band-concert-form'
		}
		for (var key in dict) {
			document.getElementById(dict[key]).style.display = 'none';
		}
		document.getElementById(dict[type]).style.display = 'block';
		
	},
	
	
	__watchTravelRate: function() {
		var travelRate = document.getElementById('travel-rate').value.replace(' ', '');
		document.getElementById('calcul').innerHTML = Band.calculateTravelRate(50, travelRate)
	},

	ID_DOM_FORM: 'band-form',
	ERROR_BOX: 'band-error'

}

var Fan = {
	
	ID_DOM_FORM: 'fan-form',
	ERROR_BOX: 'fan-error',
	
	
	checkForm: function(mandatory, typeDict, idForm) {
		var formData = CheckForm.toNameValueDict(CheckForm.getData(this.ID_DOM_FORM, 'fan-form-input'));
		var key;
		
		var titles = {
			'email': 'email',
			'username': 'uživatelské jméno',
			'password': 'heslo',
			'password-again': 'heslo-znovu',
			'postal-code': 'PSČ'
		}
		
		incorrectKeys = CheckForm.checkMandatory(formData, mandatory);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' je nutné vyplnit."));
			return false;
		}
		incorrectKeys = CheckForm.checkTypes(formData, typeDict);
		if (incorrectKeys.length > 0) {
			this.setError(CheckForm.getErrorMsg(incorrectKeys, titles, "Údaj '{$name}' není korektní."));
			return false;
		}
		return true;
	},
	
	checkRegisterForm: function(isRegister) {
		var formData = CheckForm.toNameValueDict(CheckForm.getData(this.ID_DOM_FORM, 'fan-form-input'));
		var key;
		var typeDict = {
			'email': InputCheck.types.emailDue
			//'postal-code': InputCheck.types.postalCodeDue
			// postal-code neni soucasti class='club-form-info'
		}
		if (isRegister) {
			var mandatory = ['email', 'password', 'username', 'password-again', 'name'];
		} else {
			var mandatory = [];
		}
		
		if (! this.checkForm(mandatory, typeDict)) {
			 return false;
		}
		if (isRegister && formData['password'] != formData['password-again']) {
			this.setError("Hesla nejsou stejná.");
			return false;
			
		}
		if (! formData['licence-info']) {
			this.setError('Pro dokončení registrace musíte souhlasit s licenčními podmínkami.');
			return false;
		}
		
		// zde neni povinny parametr action, bere se z hidden field of form
		if (isRegister) {
			var httpData = { 
				'url': makeUrl('register-fan'),
				'success': this.registerDone
			}
		} else {
			var httpData = General.editProfile.httpData;
		}
		WHttp.post(httpData, this.ID_DOM_FORM);
		return true;
	},

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

		if (! response.load()) {
			alert(response.responseText());
			//logout();
			return;
		}	
		data = response.getResponseData();
		if (data.get('status')) {
			window.location.href = makeUrl('register-fan-done');
		} else {
			Address.showError(data.get('error'));
		}
	},
	

	
	setError: function(msg) {
		document.getElementById(this.ERROR_BOX).innerHTML = msg;
		window.scrollTo(0,0);
	}

}



