
var opera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
var msie = /*@cc_on!@*/false;
var ff_new = (navigator.userAgent.indexOf("Firefox/3") != -1) ? true : false;
var msieold = false;
if (msie) {
	msieold = (typeof window.XMLHttpRequest == -1) ? false : true;
}

function prototypeSupport() {
	if (typeof $$ != "undefined") {
		Element.removeClassName(document.body, 'no-prototype');
		Element.addClassName(document.body, 'prototype');
	}
}

function decline(count, text1, text2, text3, withNumber) {
	var msg = '';
	if (withNumber) {msg = count + ' ';}
	if (count == 1) {return msg + text1;}
	if (count == 2 || count == 3 || count == 4) {return msg + text2;}
	return msg + text3;
}

function saveCookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function readCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length+1; 
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end==-1) {
				c_end = document.cookie.length;
			}
			return unescape(document.cookie.substring(c_start, c_end));
		} 
	}
	return "";
}

function deleteCookie(name) {
	saveCookie(name,"", -1);
}


AjaxIndicatorClass = Class.create();

AjaxIndicatorClass.prototype = {
	version : '0.0.1',
	on : function() {
		this.indicator.style.visibility = 'visible';
		if (msie) {
			this.indicator.style.top = document.body.scrollTop + 'px';
		}
	},

	off : function() {
		this.indicator.style.visibility = 'hidden';
	},

	initialize : function() {
		if (document.getElementsByTagName) {
			this.indicator               = document.createElement('div');
			this.indicator.id            = 'ajax-indicator';
			this.indicator.innerHTML     = '<span>nahrávám...</span>';
			this.indicator.style.display = 'block';
			this.off();
			document.body.appendChild(this.indicator);
		}
	}
};

function initAjaxIndicator() {
	AjaxIndicator = new AjaxIndicatorClass();
}
/*
* Really easy field validation with Prototype
* http://tetlaw.id.au/view/javascript/really-easy-field-validation
* Andrew Tetlaw
* Version 1.5.4.1 (2007-01-05)
* 
* Copyright (c) 2007 Andrew Tetlaw
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* 
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
* 
*/
var Validator = Class.create();

Validator.prototype = {
	initialize : function(className, error, test, options) {
		if(typeof test == 'function'){
			this.options = $H(options);
			this._test = test;
		} else {
			this.options = $H(test);
			this._test = function(){return true};
		}
		this.error = error || 'Validation failed.';
		this.className = className;
	},
	test : function(v, elm) {
		return (this._test(v,elm) && this.options.all(function(p){
			return Validator.methods[p.key] ? Validator.methods[p.key](v,elm,p.value) : true;
		}));
	}
}
Validator.methods = {
	pattern : function(v,elm,opt) {return Validation.get('IsEmpty').test(v) || opt.test(v)},
	minLength : function(v,elm,opt) {return v.length >= opt},
	maxLength : function(v,elm,opt) {return v.length <= opt},
	min : function(v,elm,opt) {return v >= parseFloat(opt)}, 
	max : function(v,elm,opt) {return v <= parseFloat(opt)},
	notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {
		return v != value;
	})},
	oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {
		return v == value;
	})},
	is : function(v,elm,opt) {return v == opt},
	isNot : function(v,elm,opt) {return v != opt},
	equalToField : function(v,elm,opt) {return v == $F(opt)},
	notEqualToField : function(v,elm,opt) {return v != $F(opt)},
	include : function(v,elm,opt) {return $A(opt).all(function(value) {
		return Validation.get(value).test(v,elm);
	})}
}

var Validation = Class.create();

Validation.prototype = {
	initialize : function(form, options){
		this.options = Object.extend({
			onSubmit : true,
			stopOnFirst : false,
			immediate : false,
			focusOnError : true,
			useTitles : false,
			onFormValidate : function(result, form) {},
			onElementValidate : function(result, elm) {}
		}, options || {});
		this.form = $(form);
		if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
		if(this.options.immediate) {
			var useTitles = this.options.useTitles;
			var callback = this.options.onElementValidate;
			Form.getElements(this.form).each(function(input) { // Thanks Mike!
				Event.observe(input, 'blur', function(ev) { Validation.validate(Event.element(ev),{useTitle : useTitles, onElementValidate : callback}); });
			});
		}
		/* ANNONCE SPECIFIC CODE FOR SKIPPING VALIDATION */
		this.form.select('.skip-validation').each( function ( submit ) {
			//submit.type = 'button';
			Event.observe(submit, 'click', function ( event ) {
				this.validate = function () {return true};
				Element.insert(this.form, {bottom: '<input type="hidden" name="' + submit.name + '" value="' + submit.value + '" />'});
				this.form.submit();
			}.bindAsEventListener(this));
		}.bind(this));
		/* // ANNONCE SPECIFIC CODE FOR SKIPPING VALIDATION */
	},
	onSubmit :  function(ev){
		if(!this.validate()){
			Event.stop(ev);
		}else{
			/* disablnutie buttonov po uspesnych validaciach */
			this.form.select('button[class~="hideOnSubmit"]', 'input[type="submit"][class~="hideOnSubmit"]').each(function(elm){
				elm.style.display="none";
			});
		}
	},
	validate : function() {


		var result = false;
		var useTitles = this.options.useTitles;
		var callback = this.options.onElementValidate;
		if(this.options.stopOnFirst) {
			result = Form.getElements(this.form).all(function(elm) { return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback}); });
		} else {
			result = Form.getElements(this.form).collect(function(elm) {
				/* ANNONCE SPECIFIC CODE FOR SKIPPING VALIDATION */
				var type = elm.readAttribute('type');
				if (type == 'submit' || type == 'button') {
					return true;
				}
				/* // ANNONCE SPECIFIC CODE FOR SKIPPING VALIDATION */
				return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
			}).all();
		}
		if(!result && this.options.focusOnError) {
			Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()
		}
		this.options.onFormValidate(result, this.form);
		return result;
	},
	reset : function() {
		Form.getElements(this.form).each(Validation.reset);
	}
}

Object.extend(Validation, {
	validate : function(elm, options){
		options = Object.extend({
			useTitle : false,
			onElementValidate : function(result, elm) {}
		}, options || {});
		elm = $(elm);
		var cn = elm.classNames();
		return result = cn.all(function(value) {
			var test = Validation.test(value,elm,options.useTitle);
			options.onElementValidate(test, elm);
			return test;
		});
	},
	test : function(name, elm, useTitle) {
		var v = Validation.get(name);
		var prop = '__advice'+name.camelize();
		try {
			if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {
				/* ANNONCE SPECIFIC CODE FOR UNI.FORM */
				var p = elm.up('div.ctrlHolder');
				/* // ANNONCE SPECIFIC CODE FOR UNI.FORM */
				if(!elm[prop]) {
					var advice = Validation.getAdvice(name, elm);
					if(advice == null) {
						var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;
						/* ANNONCE SPECIFIC CODE FOR UNI.FORM */
						advice = '<p class="errorField" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</p>'
						/* // ANNONCE SPECIFIC CODE FOR UNI.FORM */
						if (p) {
							new Insertion.Top(p, advice);
						} else {
							new Insertion.Before(elm, advice);
						}
						advice = Validation.getAdvice(name, elm);
					}
					if(typeof Effect == 'undefined') {
						advice.style.display = 'block';
					} else {
						new Effect.Appear(advice, {duration : 1 });
					}
				}
				elm[prop] = true;
				elm.removeClassName('validation-passed');
				elm.addClassName('validation-failed');
				/* ANNONCE SPECIFIC CODE FOR UNI.FORM */
				if (p) {
					p.addClassName('error');
				} 
				/* // ANNONCE SPECIFIC CODE FOR UNI.FORM */
				return false;
			} else {
				var advice = Validation.getAdvice(name, elm);
				if(advice != null) {
					advice.hide();
				}
				elm[prop] = '';
				elm.removeClassName('validation-failed');
				elm.addClassName('validation-passed');
				/* ANNONCE SPECIFIC CODE FOR UNI.FORM */
				var p = elm.up('div');
				if (p && elm.hasClassName('validation-passed')) {
					p.removeClassName('error');
				} else {
					p.addClassName('error');
				}
				/* // ANNONCE SPECIFIC CODE FOR UNI.FORM */
				return true;
			}
		} catch(e) {
			throw(e)
		}
	},
	isVisible : function(elm) {
		while(elm.tagName != 'BODY') {
			if(!$(elm).visible()) return false;
			elm = elm.parentNode;
		}
		return true;
	},
	getAdvice : function(name, elm) {
		return $('advice-' + name + '-' + Validation.getElmID(elm)) || $('advice-' + Validation.getElmID(elm));
	},
	getElmID : function(elm) {
		return elm.id ? elm.id : elm.name;
	},
	reset : function(elm) {
		elm = $(elm);
		var cn = elm.classNames();
		cn.each(function(value) {
			var prop = '__advice'+value.camelize();
			if(elm[prop]) {
				var advice = Validation.getAdvice(value, elm);
				advice.hide();
				elm[prop] = '';
			}
			elm.removeClassName('validation-failed');
			elm.removeClassName('validation-passed');
		});
	},
	add : function(className, error, test, options) {
		var nv = {};
		nv[className] = new Validator(className, error, test, options);
		Object.extend(Validation.methods, nv);
	},
	addAllThese : function(validators) {
		var nv = {};
		$A(validators).each(function(value) {
				nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
			});
		Object.extend(Validation.methods, nv);
	},
	get : function(name) {
		return  Validation.methods[name] ? Validation.methods[name] : Validation.methods['_LikeNoIDIEverSaw_'];
	},
	methods : {
		'_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})
	}
});

Validation.add('IsEmpty', '', function(v) {
				return  ((v == null) || (v.length == 0)); // || /^\s+$/.test(v));
			});

Validation.addAllThese([
	['required', 'Toto políčko je povinné.', function(v) {
				return !Validation.get('IsEmpty').test(v);
			}],
	['validate-number', 'Do tohoto políčka prosím vyplňte platné číslo.', function(v) {
				return Validation.get('IsEmpty').test(v) || (!isNaN(v) && !/^\s+$/.test(v));
			}],
	['validate-digits', 'Do tohoto políčka prosím vyplňte celé nezáporné číslo.', function(v) {
				return Validation.get('IsEmpty').test(v) ||  !/[^\d]/.test(v);
			}],
	['validate-zip', 'Do tohoto políčka prosím vyplňte platné PSČ ve formátu 5 čísel bez mezer.', function(v) {
				return Validation.get('IsEmpty').test(v) ||  /^[0-9]{5}$/.test(v);
			}],
	['validate-alpha', 'V tomto políčku použijte prosím pouze písmena (a-z).', function (v) {
				return Validation.get('IsEmpty').test(v) ||  /^[a-zA-Z]+$/.test(v)
			}],
	['validate-alphanum', 'Do tohoto políčka prosím vyplňte pouze písmena či číslice. Mezery a další znaky nejsou povoleny.', function(v) {
				return Validation.get('IsEmpty').test(v) ||  !/\W/.test(v)
			}],
	['validate-date', 'Do tohoto políčka vyplňte prosím platné datum.', function(v) {
				var test = new Date(v);
				return Validation.get('IsEmpty').test(v) || !isNaN(test);
			}],
	['validate-email', 'Do tohoto políčka prosím vyplňte platnou e-mailovou adresu. Např: test@example.com.', function (v) {
				return Validation.get('IsEmpty').test(v) || /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(v)
			}],
	['validate-cellphone', 'Do tohoto políčka prosím vyplňte platné telefonní číslo ve tvaru +(3 čísla předvolby)(9 čísel). Např. +420777123456', function (v) {
				return Validation.get('IsEmpty').test(v) || /(^(\+420)$)|(^\+[0-9]{3}( |-)?[0-9]{3}( |-)?[0-9]{3}( |-)?[0-9]{2,4}$)/.test(v)
			}],
	['validate-required-cellphone', 'Do tohoto políčka prosím vyplňte platné telefonní číslo ve tvaru +(3 čísla předvolby)(9 čísel). Např. +420777123456', function (v) {
				return Validation.get('IsEmpty').test(v) || /(^\+[0-9]{3}( |-)?[0-9]{3}( |-)?[0-9]{3}( |-)?[0-9]{2,4}$)/.test(v)
			}],
	['validate-min4chars', 'Do tohoto políčka prosím vyplňte alespoň 4 znaky.', function (v) {
				return Validation.get('IsEmpty').test(v) || /.{4,}$/.test(v)
			}],
	['validate-min6chars', 'Do tohoto políčka prosím vyplňte alespoň 6 znaků.', function (v) {
				return Validation.get('IsEmpty').test(v) || /.{6,}$/.test(v)
			}],
	['validate-min8chars', 'Do tohoto políčka prosím vyplňte alespoň 8 znaků.', function (v) {
				return Validation.get('IsEmpty').test(v) || /.{8,}$/.test(v)
			}],
	['validate-min30chars', 'Zde prosím vyplňte alespoň 30 znaků.', function (v) {
				return Validation.get('IsEmpty').test(v) || (v.length >= 30)
			}],
	['validate-max220chars', 'Zde prosím vyplňte maximálně 220 znaků.', function (v) {
				return v.length <= 220
			}],
	['validate-max300chars', 'Zde prosím vyplňte maximálně 300 znaků.', function (v) {
				return v.length <= 300
			}],
	['validate-safechars-username', 'Do tohoto políčka prosím vyplňte pouze alfanumerické znaky, tečku, pomlčku nebo podtržítko.', function (v) {
				return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9_\.\-]{1,}$/.test(v)
			}],
	['validate-url', 'Do tohoto políčka prosím vyplňte platnou URL.', function (v) {
				return Validation.get('IsEmpty').test(v) || /(^(http:\/\/)$)|(^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?)/i.test(v)
			}],
	['validate-date-au', 'Použijte prosím tento formát data: dd/mm/rrrr. Např. 17/03/2006 pro 17. Březen 2006.', function(v) {
				if(Validation.get('IsEmpty').test(v)) return true;
				var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
				if(!regex.test(v)) return false;
				var d = new Date(v.replace(regex, '$2/$1/$3'));
				return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) && 
							(parseInt(RegExp.$1, 10) == d.getDate()) && 
							(parseInt(RegExp.$3, 10) == d.getFullYear() );
			}],
	['validate-currency', 'Do tohoto políčka vyplňte přesnou částku (například 1000).', function (v) {
				return Validation.get('IsEmpty').test(v) || /^[0-9\s,.-]+$/.test(v)
			}],

	['validate-currency-dollar', 'Do tohoto políčka vyplňte platnou částku (například $100).', function(v) {
				// [$]1[##][,###]+[.##]
				// [$]1###+[.##]
				// [$]0.##
				// [$].##
				return Validation.get('IsEmpty').test(v) || /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
			}],

	['validate-selection', 'Prosím vyberte jednu z možnosti.', function(v,elm){
				return elm.options ? elm.selectedIndex > 0 : !Validation.get('IsEmpty').test(v);
			}],

	['validate-psc', 'Do tohoto políčka prosím vyplňte platné PSČ.', function (v) {
				return Validation.get('IsEmpty').test(v) || /(^[0-9]{3}( )?[0-9]{2}$)/i.test(v)
			}],

	['validate-ico', 'Do tohoto políčka prosím vyplňte platné IČO.', function (v) {
				return Validation.get('IsEmpty').test(v) || /(^[0-9]{8}$)/i.test(v)
			}],

	['validate-dic', 'Do tohoto políčka prosím vyplňte platné DIČ.', function (v) {
				return Validation.get('IsEmpty').test(v) || /(^[A-Z]{2}[0-9]{8,10}$)/i.test(v)
			}],

	['validate-icq', 'Do tohoto políčka prosím vyplňte platné ICQ číslo. Např. 123456789', function (v) {
				return Validation.get('IsEmpty').test(v) || /(^(?:[\d]{1,12}[\ \-]?)*$)/i.test(v)
			}],

	['validate-one-required', 'Prosím vyberte jednu z možnosti.', function (v,elm) {
				var p = elm.parentNode;
				var options = p.getElementsByTagName('INPUT');
				return $A(options).any(function(elm) {
					return $F(elm);
				});
			}]
]);

function initValidations() {
	$$('form.validate-form').each( function ( form ) {
		new Validation(form);
	});
}

Event.observe(window, 'load', initValidations);
/*
Automatic by className and Id
	<a id="t1" class="anntab anntabG1">...</a>
	<a id="t2" class="anntab anntabG1 initial">...</a>
	<div id="t1-content">...</div>
	<div id="t2-content">...</div>
	
	<input type="radio" name="r1" value="1" id="radio11" class="anntab"/>
	<input type="radio" name="r1" value="1" id="radio12" class="anntab" checked="checked" /> - initial
	<div id="radio11-content">...</div>
	<div id="radio12-content">...</div>

Manual by ids - inline script after html content!!!
	var Tab=new AnnTab.TabGroup([['tab1', 'tab1-content'], ['tab2','tab2-content']]);
	Tab.Show('tab2');
*/

var AnnTab={
	tabDefinitionClassName:'anntab',
	tabActiveClassName:'active',
	tabInactiveClassName:'inactive',
	tabInitialClassName:'initial',
	
	tabContentIdSuffix:'-content',
	
	Groups:{},
	
	Init:function(){
		AnnTab.AutoDefined();
	},
	
	DRInit:function(){
		document.observe("dom:loaded", function(){AnnTab.Init();});
	},
	
	AutoDefined:function(){
		var groupPattern=new RegExp(AnnTab.tabDefinitionClassName+"([0-9a-zA-Z\-\_]+)");
		var groups, tab_id, content_id, g;
		$$('.'+AnnTab.tabDefinitionClassName).each(function(element){
			if(AnnTab.IsRadio(element)){ // problematic if two <form>s with same radio names
				group=element.name;
			}else{
				group=element.className.match(groupPattern)[1];
			}
			tab_id=element.id;
			content_id=tab_id+AnnTab.tabContentIdSuffix;
			if(group && tab_id && content_id && $(content_id)){
				if(!groups) groups={};
				if(!groups[group]) groups[group]={tabs:[]};
				groups[group].tabs[groups[group].tabs.length]=[tab_id, content_id];
				if(AnnTab.IsRadio(element)){
					if(element.checked){
						groups[group].initial=tab_id;
					}
				}else if(element.hasClassName(AnnTab.tabInitialClassName)){
					groups[group].initial=tab_id;
				}
			}
		});
		
		if(groups) AnnTab.DefineGroups(groups);
	},
	
	IsRadio:function(element){
		return element.tagName=='INPUT' && element.type=='radio';
	},
	
	DefineGroups:function(groups){
		for(var group in groups){
			AnnTab.Groups[group]=new AnnTab.TabGroup(groups[group].tabs);
			if(groups[group].initial){
				AnnTab.Groups[group].Show(groups[group].initial);
			}
		}
	},
	
	TabGroup:function(tabs){
		var TABS=tabs;
		var initial=0;
		var tabActiveClassName=AnnTab.tabActiveClassName;
		var tabInactiveClassName=AnnTab.tabInactiveClassName;
		
		this.Init=function(){
			var tab, content;
			for(var i=0;i<TABS.length;i++){
				tab=$(TABS[i][0]);
				DefineEvents(tab);
				content=$(TABS[i][1]);
				TABS[i]={tab:tab, content:content};
			}
			
			Show(TABS[initial].tab.id);
		}
		
	
		this.SetTabActiveClassName=function(className){
			tabActiveClassName=className;
		}
		
		this.SetTabInactiveClassName=function(className){
			tabInactiveClassName=className;
		}
		
		function DefineEvents(tab){
			if(AnnTab.IsRadio(tab)){
				tab.observe('change', function(event){Change(event)});
			}else{
				tab.observe('click', function(event){Click(event)});
				if(tab.href) tab.href="javascript:void(0);";
			}
		}
		
		function Click(event){
			var element=Event.element(event);
			if(!element.hasClassName(AnnTab.tabDefinitionClassName)){
				element=$(Event.element(event)).up('.'+AnnTab.tabDefinitionClassName);
			}
			Show(element.id);
		}
		
		function Change(event){
			var element=Event.element(event);
			Show(element.id);
		}
		
		function Show(tab_id){
			HideAll();
			for(var i=0;i<TABS.length;i++){
				if(TABS[i].tab.id==tab_id){
					TABS[i].content.show();
					if(tabActiveClassName) TABS[i].tab.addClassName(tabActiveClassName);
					if(tabInactiveClassName) TABS[i].tab.removeClassName(tabInactiveClassName);
				}
			}
		}
		
		this.Show=function(tab_id){
			Show(tab_id);
		}
		
		function HideAll(){
			for(var i=0;i<TABS.length;i++){
				TABS[i].content.hide();
				if(tabActiveClassName) TABS[i].tab.removeClassName(tabActiveClassName);
				if(tabInactiveClassName) TABS[i].tab.addClassName(tabInactiveClassName);
			}
		}
		
		this.Init();
		//document.observe("dom:loaded", this.Init);
	}
}/*
Automatic by className and Id
	<a id="t1" class="anntog">...</a>
	<div id="t1-content">...</div>
	<a id="t2" class="anntog init-collapsed">...</a>
	<div id="t2-content">...</div>
	<input type="checkbox" id="r1" />
	<div id="r2-content">...</div>

Manual by ids - inline script after html content!!!
 	new AnnTog.TogBlock('t3', 't3-content');
*/

var AnnTog={
	togglerDefinitionClassName:'anntog',
	togglerInitCollapsedClassName:'init-collapsed',
	togglerCollapsedClassName:'collapsed',

	togglerContentIdSuffix:'-content',
	
	Blocks:{},
	
	Init:function(){
		$$('.'+AnnTog.togglerDefinitionClassName).each(function(toggler){
			var content=toggler.id+AnnTog.togglerContentIdSuffix;
			AnnTog.Blocks[toggler.id]=new AnnTog.TogBlock(toggler.id, content);
		});
	},
	
	DRInit:function(){
		document.observe("dom:loaded", function(){AnnTog.Init();});
	},
	
	TogBlock:function(toggler, content){
		var TOGGLER=toggler;
		var CONTENT=content;
		
		var togglerInitCollapsedClassName=AnnTog.togglerInitCollapsedClassName;
		var togglerCollapsedClassName=AnnTog.togglerCollapsedClassName;
		
		this.Init=function(){
			TOGGLER=$(toggler);
			CONTENT=$(content);
			DefineEvents();
			InitCollapsed();
			Render();
		}
		
		function IsCheckBox(){
			return TOGGLER.tagName=='INPUT' && TOGGLER.type=='checkbox';
		}		
		
		function InitCollapsed(){
			if(IsCheckBox()){
				if(!TOGGLER.checked){
					CONTENT.hide();
				}
			}else if(TOGGLER.hasClassName(togglerInitCollapsedClassName)){
				CONTENT.hide();
			}
		}
		
		function DefineEvents(){
			if(IsCheckBox()){
				//TOGGLER.observe('change', function(event){ToggleCheckbox(event)});
				TOGGLER.observe('click', function(event){ToggleCheckbox(event)});
			}else{
				TOGGLER.observe('click', function(event){Toggle(event)});
				if(TOGGLER.href) TOGGLER.href="javascript:void(0);";
			}
		}
		
		function Toggle(event){
			CONTENT.toggle();
			Render();
		}
		
		function ToggleCheckbox(event){
			var element=event.element();
			if(element.checked){
				CONTENT.show();
			}else{
				CONTENT.hide();
			}
			Render();
		}
		
		function Render(){
			if(CONTENT.visible()){
				TOGGLER.removeClassName(togglerCollapsedClassName);
			}else{
				TOGGLER.addClassName(togglerCollapsedClassName);
			}
		}
		
		this.Init();
		//document.observe("dom:loaded", this.Init);
	}
};
var AnnAbDock={
	Dock:null,
	Observing:null,
	letters:null,

	Init:function(){
		AnnAbDock.Dock=$('list-by-alphabet');
		if(!AnnAbDock.Dock) return false;
		AnnAbDock.letters = AnnAbDock.Dock.select('a');
		if(!AnnAbDock.letters) return false;
		Event.observe(AnnAbDock.Dock, 'mouseover', AnnAbDock.MouseOver);
		Event.observe(AnnAbDock.Dock, 'mouseout', AnnAbDock.MouseOut);
	},
	
	DRInit:function(){
		document.observe("dom:loaded", function(){AnnAbDock.Init();});
	},
	
	MouseOver:function(event){
		if(!AnnAbDock.Observing){
			AnnAbDock.Observing=true;
			Event.observe(AnnAbDock.Dock, 'mousemove', AnnAbDock.MouseMove);
		}
	},
	
	MouseOut:function(event){
		if(AnnAbDock.IsOut(event)){
			AnnAbDock.Observing=false;
			Event.stopObserving(AnnAbDock.Dock, 'mousemove', AnnAbDock.MouseMove);
			AnnAbDock.letters.each(function(element){
				element.setStyle({
					fontSize: '100%'
				});
			});
		}
	},
	
	MouseMove:function(event){
		var mouse_x=Event.pointerX(event);
		var mouse_y=Event.pointerY(event);
		var a_x, distance_x, scale, pos;
		AnnAbDock.letters.each(function(element) {
			pos=element.cumulativeOffset();
			scale=1;
			if(mouse_y>pos.top&&mouse_y<pos.top+element.getHeight()){
				a_x=pos.left+element.getWidth()/2;
				distance_x=Math.abs(a_x-mouse_x);
				scale=(30-distance_x)*4/100+1;
			}
			element.setStyle({
				fontSize: (scale>1?scale:1)*100+'%'
			});
		});
	},
	
	IsOut:function(event){
		var rt=event.relatedTarget;
		if(rt && rt.descendantOf(AnnAbDock.Dock)){
			return false;
		}
		return true;
	}
};
var AutoComplete=Class.create({
	initialize: function(input, container){
		this.input=$(input);
		this.container=$(container);
		if(!this.input || !this.container) return false;
		this.form=this.input.up('form');
		if(!this.form) return false;

		
		this.options={
			script:"/autocomplete",
			//script:"http://annonce/autocomplete.html",
			minchars:1,
			method:"get",
			delay:200
		}

		this.input.observe('keypress', this.onKeyPress.bindAsEventListener(this));
		this.input.observe('keyup', this.onKeyUp.bindAsEventListener(this));
		this.input.observe('blur', this.resetTimeout.bindAsEventListener(this));
		Event.observe(document.body, 'click', this.onClick.bindAsEventListener(this));
		
		this.input.setAttribute("AutoComplete","off");
		this.container.hide();
		this.container.style.width=this.input.getWidth()+'px';
	},
	
	submitCategory:function(categoryId, categoryName){
		this.categoryIdInput=new Element('input', {type:'hidden', name:'categoryId'});
		this.form.insert({bottom:this.categoryIdInput});
		this.input.value=categoryName;
		this.categoryIdInput.value=categoryId;
		this.clearSuggestions();
		this.form.submit();
		this.form.disable();
	},
	
	submitKeyword:function(event){
		this.input.value=event.target.innerHTML;
		this.form.submit();
		this.form.disable();
	},
	
	onKeyPress:function(e){
		var key=e.keyCode || e.wich;
		switch(key){
			case Event.KEY_TAB:
				this.clearSuggestions();
			break;
			case Event.KEY_ESC:
				this.clearSuggestions();
			break;
		}
	},

	onKeyUp:function(e){
		var key=e.keyCode || e.wich;
		switch(key){
			case Event.KEY_UP:
				this.changeHighlight(key);
				Event.stop(e);
			break;
			case Event.KEY_DOWN:
				this.changeHighlight(key);
				Event.stop(e);
			break;
			case Event.KEY_ESC:
			case Event.KEY_TAB:
				Event.stop(e);
			break;
			default:
				if(this.input.value.length) this.getSuggestions();
				else this.clearSuggestions();
		}
	},
	
	onClick:function(event){
		var element=Event.element(event);
		if(element==this.input || element==this.container 
			|| element.descendantOf(this.input) || element.descendantOf(this.container)){
		}else this.clearSuggestions();
	},
	
	getOptions:function(){
		return $$("#"+this.container.id+" a");
	},

	changeHighlight:function(key){
		var options=this.getOptions();
		if(!options.length) return false;
		var index=0;
		for(var i=0;i<options.length;i++){
			if(options[i].hasClassName('hover')) index=i+1;
		}
		
		var n;
		n=(key==Event.KEY_DOWN || key==Event.KEY_TAB)?index+1:index-1; // false assumed to be Event.KEY_UP
		n=(n>options.length)?0:((n<0)?options.length:n);
		this.unhighlightAll();
		this.setHighlight(options[n-1]);
		this.input.value=options[n-1].categoryName?options[n-1].categoryName:options[n-1].innerHTML;
		this.categoryIdInput.value=options[n-1].categoryId;
	},
	
	unhighlightAll:function(){
		var options=this.getOptions();
		options.each(function(obj){
			obj.removeClassName('hover');
		});
	},

	setHighlight:function(obj){
		obj.addClassName('hover');
	},
	
	highlightMe:function(event){
		var element=Event.element(event);
		var a=element.tagName=='A'?element:element.up('A');
		this.unhighlightAll();
		this.setHighlight(a);
	},
	
	getSuggestions:function(){
		var val=this.input.value;
		var p=this;
		if (val.length<this.options.minchars) return false;
		clearTimeout(this.requestTimeout);
		this.requestTimeout=setTimeout(function(){p.doAjaxRequest()}, this.options.delay);
	},
  
	doAjaxRequest:function(){
		var p=this;
		var o={
			method: this.options.method,
			parameters: {prefix: this.input.value},
			evalJSON: true,
			onSuccess: this.setSuggestions.bind(this),
			onFailure: function(){alert("onFailure");}
		}
		new Ajax.Request(this.options.script, o);
		
	},

	setSuggestions:function(transport){
		var json=transport.responseText.evalJSON();
		if(!json.category.length && !json.keyword.length){
			this.clearSuggestions();
			return null;
		}
		this.container.show();
		this.container.update();
		
		var cancel=new Element('span');
		cancel.observe('click', this.clearSuggestions.bindAsEventListener(this));
		this.container.insert({bottom:cancel.update('zrušit našeptávač')});
		this.container.insert({bottom:this.createCategoryList(json.category)});
		this.container.insert({bottom:this.createKeywordList(json.keyword)});
	},

	createCategoryList:function(data){
		if(!data.length) return null;
		var container=new Element('div');
		var heading=new Element('h3').update("Přejít na rubriku");
		var ul=new Element('ul');
		var li, a;
		for(var i=0;i<data.length;i++){
			li=new Element('li');
			a=new Element('a', {href:'javascript:void(0)'}).update(decodeURIComponent(data[i].categoryName));
			small=new Element('small').update(decodeURIComponent(data[i].categoryPath));
			a.insert({bottom:new Element('br')});
			a.insert({bottom:small});
			a.categoryId=data[i].categoryId;
			a.categoryName=data[i].categoryName;
			a.observe('mouseover', this.highlightMe.bindAsEventListener(this));
			a.observe('click', function(){
				this.submitCategory(arguments[0], arguments[1]);
			}.bind(this, data[i].categoryId, data[i].categoryName));
			
			li.insert({bottom:a});
			ul.insert({bottom:li});
		}
		container.insert({bottom:heading});
		container.insert({bottom:ul});
		return container;
	},
	
	createKeywordList:function(data){
		if(!data.length) return null;
		var container=new Element('div');
		var heading=new Element('h3').update("Hledat slovo");
		var ul=new Element('ul');
		var li, a;
		for(var i=0;i<data.length;i++){
			li=new Element('li');
			a=new Element('a', {href:'javascript:void(0)'}).update(decodeURIComponent(data[i].value));
			a.observe('mouseover', this.highlightMe.bindAsEventListener(this));
			a.observe('click', this.submitKeyword.bindAsEventListener(this));
			li.insert({bottom:a});
			ul.insert({bottom:li});
		}
		container.insert({bottom:heading});
		container.insert({bottom:ul});
		return container;
	},
	
	clearSuggestions:function(){
		this.resetTimeout();
		this.container.hide();
		//this.input.focus();
	},
	
	resetTimeout:function(){
		clearTimeout(this.requestTimeout);
	}
});

document.observe("dom:loaded", function(){
	new AutoComplete('search-q', 'autocomplete-container');
});
var UniForm={
	selector: 'form.uniForm',
	validClassName: 'valid',
	invalidClassName: 'invalid',
	focusedClassName: 'focused',
	holderClassName: 'ctrlHolder',
	
	Init:function(){
		$$(UniForm.selector).each(
			function(form){
				form.getElements().each(
					function(element){
						if(element.readAttribute('type')!='submit'){
							element.observe("focus", function(){
								this.addClassName(UniForm.focusedClassName);
							});
							element.observe("blur", function(){
								this.removeClassName(UniForm.focusedClassName);
							});
						}
					}
				)
			}
		);
	},
	
	DRInit:function(){
		document.observe("dom:loaded", function(){UniForm.Init();});
	}
};
EmCheckBoxController = Class.create();

EmCheckBoxController.prototype = {
	version : '0.0.1',

	displayCount : function() {
		if (!this.toolbar) {
			this.toolbar = new ClippingToolbar($('toolbar'), this.controller);
		}
		if (this.counter) {
			var count = this.countChecked();
			this.counter.innerHTML = count;
			this.toolbar.force_clipped = count ? 0 : 1;
			this.toolbar.checkClipping();
		}
	},

	countChecked : function() {
		var count = 0;
		this.inputs.each(function(input) {
			if (input.checked) {
				count = count + 1;
			}
		}.bind(this));
		return count;
	},

	clicked : function(event) {
		this.toClipboard();
		this.displayCount();
	},

	toClipboard : function () {
		if ($('ad-ids')) {
			adIds = $('ad-ids');
			str = "";
			this.inputs.each(function(input) {
				if ( input.checked ) {
					str = str + "&adId="+input.value;
				}
			});

			adIds.value = str;
		}	
	}, 

	toggle : function() {
		this.tchecked = ( this.tchecked ) ? false : true;

		this.togglers.each(function(toggler) {
				toggler.checked = this.tchecked;
			}.bind(this)
		);

		this.inputs.each(function(input) {
			input.checked = this.tchecked;
		}.bind(this));

		this.toClipboard();
		this.displayCount();
	},

	initialize : function(controller) {
		this.controller = controller;
		if (this.controller.select('.em-checkbox-controller-counter') != 0) {
			this.counter = this.controller.select('.em-checkbox-controller-counter')[0];
			this.tchecked = false;

			this.inputs = this.controller.select('input.ch');
			this.inputs.each(function(input) {
					Event.observe(input, 'click', this.clicked.bindAsEventListener(this));
				}.bind(this)
			);

			this.togglers = this.controller.select('.em-checkbox-controller-toggler');
			this.togglers.each(function(toggler) {
					toggler.checked = this.tchecked;
					Event.observe(toggler, 'click', this.toggle.bindAsEventListener(this));
				}.bind(this)
			);

			this.displayCount();
		}
	}
};

function initEmCheckBoxControllers() {
	$$('.em-checkbox-controller').each(function(controller) {
		var obj = new EmCheckBoxController(controller);
	});
}

Event.observe(window, 'load', initEmCheckBoxControllers);
ClippingToolbar = Class.create();

ClippingToolbar.prototype = {
	setDimensions : function() {
		this.parentElm.style.height = this.toolbar.offsetHeight + 'px';
		this.toolbar.style.width = this.parentElm.offsetWidth + 'px';
		if (document.all && !opera) {
			this.toolbar.style.top = document.viewport.getScrollOffsets()[1] - this.parentElm.offsetHeight;
		}
	},

	checkClipping : function() {
		var scrollHeight = document.body.cumulativeScrollOffset()[1] + document.viewport.getHeight();
		if (
			((scrollHeight - Element.cumulativeOffset(this.parentElm)[1]) > this.parentElm.offsetHeight)
			|| ((scrollHeight - Element.cumulativeOffset(this.related_to)[1]) < this.parentElm.offsetHeight)
			|| this.force_clipped
		) {
			Element.removeClassName(this.toolbar, 'unclipped');
		} else {
			this.setDimensions.bind(this);
			Element.addClassName(this.toolbar, 'unclipped');
		}
	},

	initialize : function(toolbar, related_to) {
		this.toolbar = toolbar;
		this.related_to = related_to;
		this.parentElm = this.toolbar.parentNode;
		this.force_clipped = 0;
		this.checkClipping();
		this.setDimensions();
		Event.observe(window, 'scroll', this.checkClipping.bind(this));
		Event.observe(window, 'resize', this.setDimensions.bind(this));
	}
};
AjaxPopUpDialoguesManager = Class.create();

AjaxPopUpDialoguesManager.prototype = {
	version : '0.0.2',
	popups : [],
	
	hideAll : function ( event ) {
		if (this.overlay == Event.element(event)) {
			this.popups.invoke('closeDialogue');
			this.overlay.style.display = 'none';
			this.visible = 0;
		}
	},
	
	adjustPositions : function ( event ) {
		if (this.visible > 0) {
			this.popups.invoke('adjustPosition');
		}
	},
	
	createAjaxPopUpButton : function ( button, index ) {
		this.popups.push(new AjaxPopUpButton ( button, this, index ));
	},
	
	initialize : function () {
		this.htmlElement = document.getElementsByTagName('html')[0];
		this.bodyElement = document.body;
		
		this.overlay = document.createElement('DIV');
		this.overlay.style.display = 'none';
		this.overlay.id = 'overlay2';
		this.bodyElement.appendChild(this.overlay);
		
		this.visible = 0;
		
		Event.observe(this.overlay, 'click', this.hideAll.bindAsEventListener(this));
		Event.observe(window, 'resize', this.adjustPositions.bindAsEventListener(this));
	}
};

AjaxPopUpDialogue = Class.create();

AjaxPopUpDialogue.prototype = {
	version : '0.0.3',
	loading : false,

	show : function () {
		if (!this.clipping) {
			this.manager.overlay.style.display = 'block';
		}
		if (msieold) {
			Element.show(this.iframe);
			Element.show(this.div);
		} else {
			Element.show(this.div);
		}
		this.manager.visible++;
	},

	hide : function () {
		if (msieold) {
			Element.hide(this.iframe);
			Element.hide(this.div);
		} else {
			Element.hide(this.div);
		}
		if ( this.loading ) {
			this.loading = false;
			this.ajax.onComplete = false;
			this.ajax.onSuccess = false;
			AjaxIndicator.off();
		}
		this.button.removeClassName('active');
		this.manager.overlay.style.display = 'none';
		this.manager.visible--;
	},

	adjustPosition : function () {
		if (this.clipping) {
			this.pos = Element.cumulativeOffset(this.button);
			this.div.setStyle({
				left : this.pos[0] + 'px',
				top : this.pos[1] + this.button.offsetHeight + 'px'
			});
			if ( msieold ) {
				this.iframe.setStyle({
					left : this.pos[0] + 'px',
					top : this.pos[1] + this.button.offsetHeight + 'px'
				});
			}
		}
	},

	initialize : function ( button, manager, divId ) {
		this.button = button;
		this.manager = manager;
		if ( msieold ) {
			Element.insert(document.body, '<iframe id="iframe-' + divId + '" src="javascript:false;" class="ajax-popup-dialogue" frameborder="0" scrolling="no" style="position: absolute; display: none; filter = alpha(Opacity=0)" />');
			this.iframe = $('iframe-' + divId);
		}
		Element.insert(document.body, {bottom: '<div id="' + divId + '" class="ajax-popup-dialogue" style="display: none;"></div>'});
		this.div = $(divId);

		if (this.button.hasClassName('clipping-dialogue')) {
			this.clipping = true;
			this.div.addClassName('clipping');
			if ( msieold ) {
				this.iframe.addClassName('clipping');
			}
		} else {
			this.clipping = false;
		}

		this.adjustPosition();
	}
};

AjaxPopUpButton = Class.create();

AjaxPopUpButton.prototype = {
	version : '0.0.2',

	initContent : function ( ajax ) {
		var content = ajax.responseText ? ajax.responseText : "<p>Operace proběhla úspěšně.</p>";
		this.dialogue.div.innerHTML = '<div class="popup-content-holder">' + content + '</div><a href="#" class="close-button">zavřít</a>';

		if (msieold) {
			this.dialogue.iframe.style.width  = this.dialogue.div.offsetWidth + 'px';
			this.dialogue.iframe.style.height = this.dialogue.div.offsetHeight + 'px';
		}

		this.dialogue.loading = false;
		this.dialogue.div.removeClassName('loading');
		this.dialogue.div.addClassName('loaded');

		this.button.addClassName('active');

		this.dialogue.div.select('.close-button').each(function(button) {
			Event.observe(button, 'click', this.closeDialogue.bindAsEventListener(this));
		}.bind(this));
		
		AjaxIndicator.off();

		this.initFunction();
	},

	loadContent : function () {
		AjaxIndicator.on();

		this.dialogue.div.addClassName('loading');
		this.dialogue.loading = true;
		var url = this.button.href.replace('.html', '.ajax');

		this.dialogue.ajax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: $H({'ajax':true, 'rand': new Date().getTime()}),
				onFailure: function() {
					alert('Chyba: nepodařilo se načíst obsah');
					this.closeDialogue();
					AjaxIndicator.off();
				}.bind(this),
				onSuccess: this.initContent.bind(this),
				evalJS: 'force',
				requestHeaders: ['cache-control','no-cache','pragma','no-cache', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT']
			}
		);	
	},

	closeDialogue : function ( event ) {
		if ( this.dialogue ) {
			Event.stopObserving(this.button, 'click', this.closeDialogueObserver);
			this.dialogue.hide();
			Event.observe(this.button, 'click', this.prepareDialogueObserver);

			if (event && (typeof(event.preventDefault) != 'undefined')) {
				Event.stop(event);
			}
		}
	},

	prepareDialogue : function ( event ) {
		Event.stopObserving(this.button, 'click', this.prepareDialogueObserver);
		
		if ( !this.dialogue ) {
			this.dialogue = new AjaxPopUpDialogue( this.button, this.manager, this.divId );
		}
		this.dialogue.div.innerHTML = '<div class="popup-content-holder">&nbsp;</div>';
		if ( !this.dialogue.clipping ) {
			this.dialogue.div.style.top = document.viewport.getScrollOffsets()[1] + 100 + 'px';
		}
		this.dialogue.show();

		this.closeDialogueObserver = this.closeDialogue.bindAsEventListener(this);
		Event.observe(this.button, 'click', this.closeDialogueObserver);

		this.loadContent();

		Event.stop(event);
	},

	initialize : function ( button, manager, index ) {
		this.button = button;
		this.manager = manager;
		this.divId = "apb-" + index;
		
		var functionName = this.button.className.match(/ajax\-button\-fnc\-([a-zA-Z]+)/);

		if (functionName) {
			// Funkce, ktera se ma spustit po nahrani AJAX obsahu se zadefinuje do class pomoci class="ajax-form ajax-form-fnc-[nazev funkce]"
			this.initFunction = eval(functionName[1]);
		} else {
			this.initFunction = false;
		}

		this.prepareDialogueObserver = this.prepareDialogue.bindAsEventListener(this);
		Event.observe(this.button, 'click', this.prepareDialogueObserver);
	}
};

function initAjaxPopUpButtons() {
	var myManager = new AjaxPopUpDialoguesManager();
	
	$$('.ajax-popup-button').each(function ( button, index ) {
		myManager.createAjaxPopUpButton( button, index );
	});
}

AjaxButton = Class.create();

AjaxButton.prototype = {
	version : '0.0.1',
	
	makeRequest : function ( e ) {
		Event.stop(e);
		AjaxIndicator.on();
		
		var url = this.button.href.replace('.html', '.ajax');
		var ajax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: $H({'ajax':true, 'rand': new Date().getTime()}),
				onFailure: function () {
					alert('Chyba: nepodařilo se načíst obsah');
					AjaxIndicator.off();
				}.bind(this),
				onSuccess:	function ( transport ) {
					var content;
					if(transport.responseText){
						content = transport.responseText
					}else if(this.button.title){
						content='<div class="msg success"><p><strong>'+this.button.title+'</strong> - operace proběhla úspěšně.</p></div>';
					}else{
						content='<div class="msg success"><p>Operace proběhla úspěšně.</p></div>';
					}
					AjaxIndicator.off();
					if (this.updateElm) {
						this.updateElm.innerHTML = content;
						this.updateElm.select('.ajax-button').each(function ( button ) {
							var ajaxButton = new AjaxButton(button);
						});
					}
				}.bind(this),
				requestHeaders: ['cache-control','no-cache','pragma','no-cache', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT']
			}
		);
	},
	
	initialize : function ( button ) {
		this.button = button;
		var buttonClassMatch = $(this.button.className.match(/update\-([a-zA-Z\-]+)/));
		if (buttonClassMatch) {
			this.updateElm = $(buttonClassMatch[1]);
		}
		Event.observe(this.button, 'click', this.makeRequest.bindAsEventListener(this));
	}
}

function initAjaxButtons() {
	$$('.ajax-button').each(function ( button ) {
		var ajaxButton = new AjaxButton( button );
	});
}

function initContactFormValidation () {
	$$('.ajax-popup-dialogue form.validate-form').each( function ( form ) {
		new Validation(form);
	});
}
//
// adVANTAGE AS Interface Toolkit
// 2004 - 2006 (c) Via Aurea, s.r.o.
// 
// http://www.viaaurea.cz/
// http://www.advantage.as/
//
var AV_VER = '0.78'; //May 2007
var AV_STOP =false; //umožňuje vypnutí reklamy
var AV_DEBUG = false;
var AV_CONTEXT_AD = true; //umožňuje vypnutí/zapnutí kontextové reklamy

var AV_ERR_CONCAT = "\nV případě problémů prosím kontaktujte admin@advantage.as.";
var AV_ERR_NOID = 'AV_Chyba: funkce AV_print() volá neexistující ID pozice.' + AV_ERR_CONCAT;
var AV_ERR_IDPAGE = 'AV_Chyba: funkce AV_init() musí mít v parametru ID stránky. ' + AV_ERR_CONCAT;

var AV_PROT = "http://";
var AV_URL = "ann.advantage.as"
var AV_SCRIPT = "/if/imshow.php"; 

var AV_JSLoaded = false;
var AV_preLoaded = false; //určuje, jestli se kreativa natahuje před zobrazením
var AV_adverLoaded = false; //určuje, jestli se ze serveru načetla reklama
AV_konfigurace = new Array();
AV_poziceArr = new Array();
AV_poziceCalledArr = new Array(); //seznam volaných pozic ve funkci AV_pozice();
AV_reklamyArr = new Array();
AV_cileni = new Array();
AV_stranka = null;

AV_posHTMLArr = new Array();
AV_advHTMLArr = new Array();

//
// Inline detekce flashe.
//
if (typeof(IMFV) == 'undefined'){
	IMFV=0;
	FLASH_MAX=15; // do které verze se mají provádět testy
	plugin = (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"]) ? navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin : 0;
	if ( plugin ) {
		var words = navigator.plugins["Shockwave Flash"].description.split(" ");
		for (var i = 0; i < words.length; ++i){
			if (isNaN(parseInt(words[i]))) continue;
			var IMFV=words[i]; 
		}
	}
	else if (navigator.userAgent && navigator.userAgent.indexOf("MSIE")>=0 
		&& (navigator.appVersion.indexOf("Win") != -1)) {	
		document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n');
		document.write('i=3\n');
		document.write('on error resume next\n');
		document.write('Do While  IMFV=0 AND i<=FLASH_MAX\n');
		document.write('if (isNull(CreateObject("ShockwaveFlash.ShockwaveFlash." & i)) AND false) then IMFV=i\n');
		document.write('i=i+1\n');
		document.write('Loop\n');
		document.write('if IMFV<>0 then IMFV=IMFV-1\n');
		document.write('</SCR' + 'IPT\>\n');
	}
}

//
// Funkce, která načte kódy reklamy ze serveru.
//
function AV_init(page){
	
	// pokud se jedná o volání funkce po načtení dat ze serveru (IF1 Float)
	if(AV_adverLoaded){
		// Pokud server poslal nějakou hlášku, vypíše ji
		
		if(typeof(AV_checkMsg) != 'undefined') alert(AV_checkMsg);
		if(AV_DEBUG) AV_poziceMissAlert(AV_poziceCheck());
	}

	if(AV_STOP || AV_adverLoaded) return;

	//
	// Ověření správnosti vstupů.
	//
	if (typeof(page) != "number"){
		if (AV_stranka) page = AV_stranka;
	}
	if (AV_DEBUG){
		window.setTimeout('window.status = "Debug on! - reklamní systém adVANTAGE"',2000); //zobrazí upozornění na debug mod
		if (typeof(page) != "number")	alert(AV_ERR_IDPAGE);
	}

	//
	// Načtení informací z prohlížeče uživatele.
	//
	AV_konfigurace['ver'] = AV_VER;
	AV_konfigurace['ref'] = this.location.href;
	AV_konfigurace['fla'] = IMFV;
	if (!AV_konfigurace['typ']) AV_konfigurace['typ'] = 'js';
	AV_konfigurace['chr'] = AV_getCharset();
	AV_konfigurace['coo'] = AV_cookieTest();
	if (!AV_konfigurace['subtyp']){
		if (AV_preLoaded){
			AV_konfigurace['subtyp'] = 'pre';
		}else{
			AV_konfigurace['subtyp'] = 'post';
		}
	}

	var query = "";		
	
	if(page != null) query += (query ? "&" : "?") + AV_toGET(page, 'pg');
	query += (query ? "&" : "?") + AV_toGET(AV_poziceArr, 'ps');
	query += (query ? "&" : "?") + AV_toGET(AV_reklamyArr, 'ad');
	query += (query ? "&" : "?") + AV_toGET(AV_cileni, 'tg');
	query += (query ? "&" : "?") + AV_toGET(AV_konfigurace, 'cf');
	query += (query ? "&" : "?") + AV_toGET(Math.random(), 'rnd');

	AV_advantageArr = AV_urlParams('advantage');
	if (AV_DEBUG){
		if (AV_advantageArr === false) AV_advantageArr = new Array('debug')
		else AV_advantageArr.push('debug');
	}
	if (AV_advantageArr){
		query += (query ? "&" : "?") + AV_toGET(AV_advantageArr, 'advantage');
	}

	document.write('<scr'+'ipt src="' + AV_PROT + AV_URL + AV_SCRIPT + query + '" type="text/javascript" charset="windows-1250"></scr'+'ipt>');
}

//
// Funkce která načte kódy reklamy podle ID reklamy (není třeba znát stránku).
//
function AV_initRekl(){
	AV_init(null);
}

function AV_preload(page){
	AV_preLoaded = true;
	AV_init(page);
}

function AV_preloadRekl(){
	AV_preload(null);
}

//
// Funkce převádí proměnou variable do parametru GETu. Parametr variableName označuje název.
//
function AV_toGET(variable, variableName){
	if (typeof(variable) == "object"){			
		var buff = "";
		for(var i in variable){
			if (typeof(variable[i]) == 'function' || typeof(variable[i]) == 'object') continue; //některý server předefinováva bázovou třídu Array a přídává jí vlastnost / metody
			buff += ((buff == "")?"":"&") + variableName + AV_urlEncode("[" + i + "]") + 
				"=" + AV_urlEncode(variable[i]);
		}
		return buff;
	}else if(typeof(variable) == "boolean"){
		return variableName + "=" + (variable ? 1 : 0);
	}else{
		return variableName + "=" + AV_urlEncode(variable);
	}
}

//
// Funkce zoborazí reklamy, je volána ve skritu vráceném ze serveru.
//
function AV_print(){
	if(AV_preLoaded || AV_STOP) return;
	var pos;
		
	for (var i in AV_posArr){
		if (AV_posArr[i]['html'] != "" && (pos = document.getElementById('AV_pos' + i))){
		  pos.innerHTML = AV_posHTMLArr[i]['head'] + AV_recoding(AV_posArr[i]['html']) + AV_posHTMLArr[i]['foot'];
		}else if(AV_DEBUG){
			alert(AV_ERR_NOID);
		}
	}
	for (var i in AV_advArr){
		if (AV_advArr[i]['html'] != "" && (pos = document.getElementById('AV_adv' + i))){
		  pos.innerHTML = AV_advHTMLArr[i]['head'] +  AV_recoding(AV_advArr[i]['html']) + AV_advHTMLArr[i]['foot'];
		}else if(AV_DEBUG){
			alert(AV_ERR_NOID);
		}
	}
}

//
// Funkce umístí reklamu do stránky podle ID reklamy.
//
function AV_reklama(id, advHead, advFoot){
	if(AV_STOP) return;
	advHead = advHead ? advHead : '';
	advFoot = advFoot ? advFoot : '';
	if(AV_preLoaded){
		if(AV_adverLoaded && AV_advArr[id] && AV_advArr[id]['html']){
			document.write(advHead);
			document.write(AV_recoding(AV_advArr[id]['html']));
			document.write(advFoot);
		}
	}else{
		AV_reklamyArr[AV_reklamyArr.length] = id;
		AV_advHTMLArr[id] = new Array();
		AV_advHTMLArr[id]['head'] = advHead;
		AV_advHTMLArr[id]['foot'] = advFoot;
		document.write('<span id="AV_adv' + id + '"> </span>');
	}
}

//
// Funkce umístí reklamu do stránky podle ID pozice.
//
function AV_pozice(id, posHead, posFoot){
	AV_poziceCalledArr.push(id);
	if(AV_STOP) return;
	posHead = posHead ? posHead : '';
	posFoot = posFoot ? posFoot : '';
	if(AV_preLoaded){
		if(AV_adverLoaded && AV_posArr[id] && AV_posArr[id]['html']){
			document.write(posHead);
			document.write(AV_recoding(AV_posArr[id]['html']));
			document.write(posFoot);
		}
	}else{
		AV_poziceArr[AV_poziceArr.length] = id;
		AV_posHTMLArr[id] = new Array();
		AV_posHTMLArr[id]['head'] = posHead;
		AV_posHTMLArr[id]['foot'] = posFoot;
		document.write('<span id="AV_pos' + id + '"> </span>');
	}
}


//
// Funkce ověří, jestli byly volány pro všechny pozice funkce AV_pozice(). Ty které nebyly, vráti v poli.
//
function AV_poziceCheck(){
	var missing = new Array();
	for(var i=0; i<AV_poziceDbArr.length; i++){
		found = false;
		for(var j=0; j<AV_poziceCalledArr.length; j++){
			if (AV_poziceDbArr[i] == AV_poziceCalledArr[j]){
				found = true;
				continue;
			}
		}
		if (!found) missing.push(AV_poziceDbArr[i]);
	}
	return missing;
}


function AV_poziceMissAlert(missing){
	tmpStr = '';
	for (var i=0; i < missing.length; i++){
		tmpStr +=  "\r\n" + missing[i];
	}
	if (tmpStr){
		alert("Ověření korektního nasazení reklmaního systému adVANTAGE.\r\n\r\nPro následující pozice nebyla ve stránce volána fuknce AV_pozice():" + tmpStr);
	}
}

//
// Funkce pro test COOKIES
//
function AV_cookieTest(){	
	document.cookie = 'AV_cookie=true';
	return (document.cookie.indexOf('AV_cookie') >= 0 ? 1 : 0);
}

//
// Funkce zjistí kódování stránky.
//
function AV_getCharset(){
	var charsetRe = /charset=([a-zA-Z0-9\-]+)/i;
	var elmArr = document.getElementsByTagName("meta");
	var content, resArr;
	for (var i=0; i < elmArr.length; i++){
		if (content = elmArr[i].getAttribute("content")){
			if (resArr = charsetRe.exec(content)){
				return resArr[1].toLowerCase();
			}
		}
	}
	return "";
}

//
// Funkce pro převod znakové sady win1250 a iso-8859-2.
//
function AV_win2iso(str, fromCharset){
	var conv1250 = "ĽŠŤÝŽľšťž";
	var convISO = "Ą©«Ý®µą»ľ";
	var buffer = "";

	if (fromCharset == "iso"){
		fromSet = convISO;
		toSet = conv1250;
	}else{
		fromSet = conv1250;
		toSet = convISO;
	}

	for (var i = 0; i < str.length; i++){
		if ((index = fromSet.indexOf(str.charAt(i))) >= 0){
			buffer += toSet.charAt(index);
		}else{
			buffer += str.charAt(i);
		}
	}
	return buffer;
}


function AV_recoding(str){
	if (navigator.userAgent.indexOf("MSIE 5") >= 0 && AV_getCharset() == "iso-8859-2"){
		return AV_win2iso(str, "win");
	}else{
		return str;
	}
}

//
// Funkce zakóduje řetězec do formátu, který není konfliktní pro přenos v URL (GETu)
//
function AV_urlEncode(str){
	str = escape(str);
	// nahradi znaky *@+/ příslušnými entitami
	str = str.replace(/([*@+\/])/g, 
		function (str, foundChar) {
			switch (foundChar){
				case '*': return '%2A'
				case '@': return '%40';
				case '+': return '%2B';
				case '/': return '%2F';
			}
		}
	)
	return str;
}

//
// Funkce se podívá do URL stránky a vyhledá všechny parametry, např. 'advantage', které vrátí jako pole
//
function AV_urlParams(param){
	try {
		var url = top.location.href;
	}
	catch (e) {
		var url = this.location.href;
	}
	if (url.indexOf('?') > -1){
		urlGet = url.substr(url.indexOf('?'));
		re = new RegExp("[?&]" + param + "=([^&]+)", "g");
		tmpArr = urlGet.match(re);
		if (!tmpArr) return false;
		for (var i = 0; i < tmpArr.length; i++){
			tmpArr[i] = tmpArr[i].substr(tmpArr[i].indexOf('=')+1);
			if (tmpArr[i] == 'debug' || tmpArr[i] == 'check') AV_DEBUG = true; // z URL vyvolany debug
		}
		return tmpArr;
	}
	return false;
}

//
// Funkce pro obejití aktivace flash v IE
//
function AV_write(string){
	document.write(string);
}

function AV_objectRewrite(name){	
	if (typeof(name) == "undefined") name = "object";

	var objects = document.getElementsByTagName(name);
	for (var i=0; i<objects.length; i++){
		objects[i].outerHTML = objects[i].outerHTML;
	}
}

function AV_objectRewriteById(id){
	var obj = document.getElementById(id);
	obj.outerHTML = obj.outerHTML;
}

//
// Funkce určené pro integraci kontextové reklamy
//
function AV_context(server, url, css){
	if (!AV_CONTEXT_AD) return false;
	if (css){
		document.write('<style>@import url(' + css + ');</style>');
	}
	AV_adFox(server, url);
}

//
// Funkce sloužící jako interface pro eTarget.
// Parametr server nese ID serveru v adVANTAGE, proměnná serverArr je pole
// proměnných systému eTarget o struktuře array(ID_serveru, ID_country).
//
function AV_eTarget(server, url){
	serverArr = AV_advantage2eTarget(server);
	document.write('<SCRIPT src="http://search.etargetnet.com/cz/impressionmedia/context_ad.php?c=' +
		serverArr[1] +	'&ref=' + serverArr[0] + '&q=' + AV_urlEncode(url) + '"></SCRIPT>');
}

//
// Funkce sloužící jako interface pro adFox.
// Parametr server nese ID serveru v adVANTAGE, proměnná servernt je ID v adFox.
//
function AV_adFox(server, url){
	serverInt = AV_advantage2adFox(server);
	document.write('<SCRIPT src="http://ad.adfox.cz/ppcbe?js=1&format=666699ffffff3366ff00000033996632&partner=' +
		serverInt + '&stranka=' + url + '"></SCRIPT>');
}

//
// Funkce převádí ID serveru na adVANTAGE na ID serveru a ID země eTargetu.
// Funkce je speciálně pro instanci IM.
//
function AV_advantage2eTarget(id){
	idConverArr = new Array();
	idConverArr[2]  = new Array(344,2); //server.cz
	return idConverArr[id];
}

//
// Funkce převádí ID serveru na adVANTAGE na ID serveru systému adFox.
// Funkce je speciálně pro instanci IM.
//
function AV_advantage2adFox(id){
	idConverArr = new Array();
	idConverArr[2]  = 990; //server.cz
	return idConverArr[id];
}

AV_JSLoaded = true;
AnnTab.DRInit();
AnnTog.DRInit();
AnnAbDock.DRInit();
UniForm.DRInit();
Event.observe(window, 'load', initAjaxIndicator);
Event.observe(window, 'load', initAjaxPopUpButtons);
Event.observe(window, 'load', initAjaxButtons);
