Publis = {
	"input_autocompleters":[],
	"input_calendars":[],
	"input_maps":[],
	"form_messages":[],
	"events":{},
	"elements":{},
	loggedIn: null,

	"init": function() {
		if (!parent.document.getElement('#popupMessageContainerInner')) {
			container = new Element('div', {"class":'popupMessageContainer', "id":'popupMessageContainer'});
			inner = new Element('div', {"id":'popupMessageContainerInner'})
			inner.inject(container);
			container.inject(parent.document.body);
			Publis.elements['popupMessageContainer'] = inner;
		} else {
			Publis.elements['popupMessageContainer'] = parent.document.getElement("#popupMessageContainerInner");
		}
		
		parent.document.window.addEvent('domready', function(){
			Publis.getFormMessage();
			if (Publis.form_messages.length > 0) {
				Publis.elements['popupMessageContainer'].getParent().show();
				Publis.popupFormMessage();
			}
		});
	},

	"getFormMessage": function() {
		Publis.form_messages = $$('.popupFormMessage');
		Publis.form_messages.each(function(obj) {
			$(obj).removeClass('popupFormMessage');
		});
	},

	"popupFormMessage": function() {
		cc = new Element('div', {"class":"poppedUpMessage"});
		ii = new Element('div', {"class":"poppedUpMessageInner"});

		ii.inject(cc);
		cc.inject(Publis.elements['popupMessageContainer']);

		Publis.form_messages.each(function(obj) {
			tt = new Element('p', {"text":$(obj).get('text')});
			tt.inject(ii);
			// $(obj).destroy();
		});

		cc.reveal({"duration":500});

		bb = new Element('a', {"class":'close', "text":'Zavřít'});
		bb.addEvent('click', function() {
			$(this).getParent().getParent().nix({"duration":500}, 500);
			$(this).getParent().getParent().getParent().getParent().nix({"duration":500}, 500);
		});
		bb.inject(ii);

	},
	
	/* Zjisti zda je dane sezeni prihlasene do Publisu. Zjistuje se
	 * requestem, takze to je plnohodnotna kontrola. Vysledek se cachuje na
	 * jedno nasteni stranky. Je tedy mozne funkci volat libovolnekrat a
	 * HTTPRequest se provede pouze jednou. */

	"isLoggedIn": function() {
		if (this.loggedIn != undefined){
			console.debug("Request isLoggedIn", this.loggedIn);
			return this.loggedIn;
		} else {
			var req = new Request.HTML({
				url: '/my/',
				async: false,
				evalScripts: false,
				onSuccess: function(nodeTree, elms) {
					for (i = 0; i < elms.length; i++) {
						if (elms[i].id == 'my_login') {
							Publis.loggedIn = false;
						}
						if (elms[i].id == 'my_menu') {
							Publis.loggedIn = true;
						}
					}
					if (Publis.loggedIn == undefined){
						console.warn("HTTPRequest isLoggedIn", Publis.loggedIn);
					}
				},
				onFailure: function() {
					console.error("HTTPRequest isLoggedIn", this.loggedIn);
					return null;
				}
			}).post();
			console.debug("HTTPRequest isLoggedIn", this.loggedIn);
			return this.loggedIn;
		}
	},


	/* Popup okno s nadpisem a obsahem
	 *
	 */

	"lightFaceMessage": function(_title, _html) {
		Publis._lfbox = new LightFace({ 
			height:200, 
			width:600, 
			content: _html,
			title: _title
		});
		Publis._lfbox.addButton(translate('Zavřít'), function() { 
			Publis._lfbox.close(); 
		},true);
		Publis._lfbox.open();
		Publis._lfbox.overlay.setStyles({ /* hack fix LightFace aby slo stisknout tlacitko zavrit */
			'width': '1px',
			'height': '1px'
		});

		return Publis._lfbox;
	},

	/* Obali _elm (napriklad kvuli CSS)
	 * params (zalezi na poradi):
	 * _elm obalovany element
	 * _class trida pridelena obalu ('pwrap')
	 * _cnt pocet obalu (2)
	 * _tag druh obalu ('div')
	 */
	"wrapIt": function(_elm) {
		var _class = arguments[1] || 'pwrap';
		var _cnt = arguments[2] || 2;
		var _tag = arguments[3] || 'div';

		for (i = 0; i<_cnt; i++){
			new Element(_tag,{
				"class":_class+" "+_class+i
			}).wraps(_elm);
		}
	}

}

function LPad(ContentToSize, PadLength, PadChar) {
	var PaddedString = ContentToSize.toString();
	for (i = ContentToSize.length + 1; i <= PadLength; i++) {
		PaddedString = PadChar + PaddedString;
	}
	return PaddedString;
}

function addTimeZero(i) {
	return LPad(i, 2, "0");
}

/**
 * Najde k predanemu inputu label podle atributu 'for' a vrati jeho text
 * @param id id zkoumaneho inputu
 * @param hideLabel pokud tru, tak nalezeny label zaroven v CSS zneviditelni
 * @return textovy obsah nalezeneho labelu
 */
function getLabelFor(id, hideLabel) {
	var labels = document.getElementsByTagName("label");
	for (i = 0; i < labels.length; i++) {
		if (labels[i].htmlFor == id) {
			if (hideLabel) {
				labels[i].style.display = 'none';
			}
			var text = labels[i].innerHTML;

			return text;
		}
	}
	return '';
}


var gener_on_focus = function() {
	if (this.value == getLabelFor(this.id)){
		this.value = '';
		this.className = '';
	}
}

var gener_on_blur = function() {
	if (this.value == '') {
		this.className = 'innertext';
		this.value = getLabelFor(this.id);
	}
}

/** Zavesi funkci na event objektu. Protoze je mnoho prohlizecu, ktere maji
 * jinou implementaci, tak je na to takovahle konstrukce
 */
if (typeof addEvent == 'undefined') {
	addEvent = function( obj, evt, fn ){
	    if (obj.addEventListener){
		obj.addEventListener(evt, fn, false);
	    } else if (obj.attachEvent){
		obj.attachEvent("on" + evt, fn.bind(obj));
	    } else {
		if (evt == "focus") {
		    obj.onfocus = fn;
		} else if (evt == "blur") {
		    obj.onblur = fn;
		} else if (evt == "mouseover") {
		    obj.onmouseover = fn;
		} else if (evt == "hover") {
		    obj.onhover = fn;
		}
	    }
	}
}

/** Zaradi funkci ke spusteni po dokonceni nacitani stranky.
 */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

function setInnerLabels() {
	var hideLabel = false;
	var i = 0;
	if ((arguments[0] === true) || (arguments[0] === false)) {
		hideLabel = arguments[0];
		i++;
	}

	for (; i<arguments.length; i++) {
		var obj = document.getElementById(arguments[i]);
		if (obj) {
			text = getLabelFor(arguments[i], hideLabel);
			args = arguments;
			$(arguments[i]).addEvent('focus', gener_on_focus);
			$(arguments[i]).addEvent('blur', gener_on_blur);
			if (obj.value == '') {
				obj.className = 'innertext';
				obj.value = getLabelFor(obj.id);
			}
			if (parentForm = getParentForm(obj))
				if (parentForm.addEventListener) {
					parentForm.addEventListener('submit',
						function() {
							var i = 0;
							if ((args[0] === true) || (args[0] === false)) {
								i++;
							}

							for (; i<args.length; i++) {
								var obj = document.getElementById(args[i]);
								if (obj) {
									text = getLabelFor(args[i], false);
									if (obj.value == text) {
										obj.value = '';
									}
								}
							}
						},
						false
					);
				} else if (obj.attachEvent) {
					parentForm.attachEvent('onsubmit',
						function() {
							var i = 0;
							if ((args[0] === true) || (args[0] === false)) {
								i++;
							}

							for (; i<args.length; i++) {
								var obj = document.getElementById(args[i]);
								if (obj) {
									text = getLabelFor(args[i], false);
									if (obj.value == text) {
										obj.value = '';
									}
								}
							}
						}
					);
				}
		}
	}
}


/**
 * Najde rodocovsky node typu FORM od predaneho objektu.
 * @param obj zkoumany objekt
 * @return null nebo rodicovsky form
 */
function getParentForm(obj) {
	var tmp_obj = obj;
	while (tmp_obj = tmp_obj.parentNode) {
		if (tmp_obj.nodeName == 'FORM')
			return tmp_obj;
	}
	return null;
}


/**
 * Vlozi do kosiku polozky urcene v parametrech
 * @param item_id id polozky
 * @param count pocet kusu ke vlozeni
 * @return true nebo false, jestli se vlozeni povedlo
 */
function addItemToBasket(item_id, count) {
	var xmlAddItemResponse = null;
	var addItemRequest = new Request({	method: 'post',
						url: '/ajax-api/xml/order/basket_add/?',
						async: false,
						noCache: true,
						onSuccess: function(xmlDataTxt, xmlData) {
								xmlAddItemResponse = xmlData;
							}
					});
	addItemRequest.send('basket_add_submit=ajax&basket_add_id='+item_id+'&basket_add_count='+count);
	return xmlAddItemResponse.getElementsByTagName('success_message').length > 0;
}


/**
 * Vrati textovou hodnotu xml tagu. Je nato dobre mit fci, protoze se to resi v
 * kazdem prohlizeci trochu jinak.
 * @param node nod, ze ktereho chceme jeho obsah
 * @return textovy obsah nodu
 */
function getNodeTextVal(node) {
	if (Browser.Engine.gecko) {
		/* IE */
		return node.textContent;
	} else {
		return node.text;
	}
}


// posklada query pro Publis filtr a presmeruje
// @form_name - id formulare
// @prefix_url - prefix pro catalog url
function pfilter_qs() {
	var f_obj = $(arguments[0]);
	var q = f_obj.toQueryString();
	var path_pref = '/catalog/?filter=';
	if (arguments.length > 1) {
		path_pref = arguments[1];
	}
	document.location = path_pref + q.replace(/&/g, ":");
	return false;
}

/* timestamp daneho zacatku dne */
function getDayTS(Y, M, D){
	var tD = new Date(Y, M, D, 0, 0, 0, 0);
	return Math.round(tD.getTime()/1000);
}


/* Prenacteni obrazku captcha */
function refreshCaptcha(){
	var captchas = $(document.body).getElements('img.captchaimg');
	captchas.each(function(el){
		el.set('src', '');
		el.set('src', '/gen-image/captcha?'+Math.random());
	});
}


// float to degrees and back
function dms_to_d(d,m,s,dir) {
	d = d-0;
	m = m-0;
	var sign = ( dir=='W' || dir=='S' ) ? -1 : 1;
	return Math.round((((s/60+m)/60)+d)*sign*Math.pow(10,6))/Math.pow(10,6);
}

function d_to_dms(d,x) {
	var a = [];
	if(x=='lat') {
		a[0] = (d>=0)?'N':'S';
	} else {
		a[0] = (d>=0)?'E':'W';
	}
	if(d<0) { d=Math.abs(d); }
	var n = d+'';
	var tmp = n.split(".");  if(tmp[0]=='') { tmp[0]='0' }
	a[1] = tmp[0]; // n
	n = parseFloat("."+tmp[1])*60+''; // min dec
	tmp = n.split(".");
	a[2] = tmp[0]; // min
	n = parseFloat("."+tmp[1])*60+''; // sec dec
	tmp = n.split(".");
	a[3] = tmp[0]; // sec
	return a;
}

// preparsovat gps souradnice z inputu
function parse_gps_loc(str)
{
	var temp;
	var pos = [];
	var pos_str = str.split(' ');

	pos[0] = ['', 0, 0, 0];
	pos[1] = ['', 0, 0, 0];

	pos[0][0] = pos_str[0][0] == 'S' ? 'S':'N';
	pos[1][0] = pos_str[0][0] == 'W' ? 'W':'E';

	if (pos_str.length != 2) {
		return false;
	}

	for (i=0; i<=1; i++) {

		temp = pos_str[i].substr(1).split('°');
		pos[i][1] = parseFloat(temp[0]);
		if (temp[1]) {
			temp = temp[1].split('\'');
			pos[i][2] = parseFloat(typeof(temp[0]) == 'undefined' ? 0:temp[0]);
			pos[i][3] = parseFloat(typeof(temp[1]) == 'undefined' ? 0:temp[1]);
		} else {
			pos[i][2] = 0;
			pos[i][3] = 0;
		}

		for (j=1; j<=3; j++) {
			tmp = pos[i][j].toString().split('.');
			if (j != 3 && tmp[1]) {
				pos[i][j] = tmp[0];
				pos[i][j+1] = Math.round((pos[i][j+1] + parseFloat('0.' + tmp[1])*60)*Math.pow(10,6))/Math.pow(10,6);
			}
		}
	}

	return pos;
}

window.addEvent('load', function(){
	Publis.init();
});

