// JavaScript Document


if(typeof AO !== "object")
	AO={};
	
	
if(typeof AO.Common !== "object")
	AO.Common={};


AO.Common.settings={
	BASE_URL : '/ibase.php'
};



AO.Common.handler={};


AO.Common.handler.badJSON = function()
{
	alert("BAD JSON");
};


AO.Common.handler.ajaxError = function(r,status,e)
{	
	if(status=="error" && r.status==0)
	{
		alert("Spojenie bolo prerušené, skúste akciu opakovať.");
		return;
	}
	
	// put away next code
	
	var resptext="";
	
	if(r)
	{
		resptext+=r.responseText;
	}
	
	var rh=r.getAllResponseHeaders();
	// var i=r.getInterface();
			
	alert("AJAX ERROR: \n response: "+resptext+"\n status: ("+r.status+") "+status+"\n e: "+e+"\n \n"+rh);
};


// set default JQUERY error handler
jQuery.ajaxSetup(
	{
		error : AO.Common.handler.ajaxError
		// timeout: 3000
	}
);


// utils
AO.Common.Util={};



/**
 * returns handler which execute on given context, 
 * "handler" will receive arguments as it would be original handler
 *
 * @param handler {Function} function to execute
 * @param context {Object} execution context
 */
AO.Common.Util.createHandler=function(handler,context)
{
	return function()
	{
		handler.apply(context,arguments);	
	}
}

/**
 * returns function which execute on given context, 
 * if function returns val this also return val
 *
 * @param fc {Function} function to execute
 * @param context {Object} execution context
 */
AO.Common.Util.createDelegate=function(fc,context)
{
	return function()
	{
		return fc.apply(context,arguments);	
	}
}



/**
 * Recursively merge object "a" with "b" object, "a" object is modified, has priority and overrides same values.
 *
 * @type static
 * @param a {Object} this object has priority and overrides object b
 * @param b {Object} base object
 */
AO.Common.Util.recurseMerge=function(a,b)
{
	for (var key in b)
	{
		// if target has such key do recurse merge
		if(typeof a[key] === "object")
		{
			AO.Common.Util.recurseMerge(a[key],b[key]);					
			
		}else if(a[key] === undefined)
		{
			a[key] = b[key];
		}
	}	
}



AO.Common.Util.numberFormat = function(nStr,prefix)
{
	    var prefix = prefix || '';
	    nStr += '';
	    x = nStr.split('.');
	    x1 = x[0];
	    x2 = x.length > 1 ? ',' + x[1] : '';
	    var rgx = /(\d+)(\d{3})/;
	    while (rgx.test(x1))
	        x1 = x1.replace(rgx, '$1' + '.' + '$2');
	    return prefix + x1 + x2;
}


AO.Common.Util.skkToEur = function(skk)
{
	var r=1/30.126;
	return Math.round(r*skk*100)/100;
}

AO.Common.Util.eurToSkk = function(eur)
{
	var skk=eur*30.126;
	return Math.round(skk);
}


		
AO.Common.Util.setElementWaitIndicator = function(id,wait)
{
	if(wait)
		$("#"+id).addClass("wait_cursor");
	else
		$("#"+id).removeClass("wait_cursor");
}


/**
 * redir in next js thread
 * @param {Object} link
 */
AO.Common.Util.redir = function(link)
{		
	// redir in next thread
	window.setTimeout(
		function()
		{
			window.location.href=link;
		},10
	);		
}

AO.Common.Util.reload = function()
{
	// alert(window.location.href);
	AO.Common.Util.redir(window.location.href);
}



/**
 * creates options for select element
 *
 * @param selectElement {Object} SELECT DOM NODE
 * @param opts {Array} options
 * @param sel {String} selectred val
 */
AO.Common.Util.generateOptions=function(selectElement, opts, sel)
{
	selectElement.options.length=0;
	//j6 lazzzy shit;
	
    selectElement.options[0] = new Option(' --- ', '');
	
	var val,desc,lastOpt;
	
	for(var i=0;i<opts.length;i++)
	{
		val = opts[i][0];
        desc = opts[i][1];
		lastOpt = selectElement.options[selectElement.options.length] = new Option(desc, val);
		
		if(sel === val)
        	lastOpt.selected=true;
    }
}


/**
 * seelcts SELECT OPTION by value
 *
 * @param selectElement {Object} SELECT DOM NODE
 * @param sel {String} value to select
 */
AO.Common.Util.selectOptionByValue = function(selectElement, sel)
{
	var opts = selectElement.options;
	
	for(var i=0;i<opts.length;i++)
	{
		//alert((opts[i].value == sel));
		if(opts[i].value == sel)
		{
        	opts[i].selected=true;
			
			return;
		}
	}
}
/**
 * seelcts SELECT OPTION by value
 *
 * @param selectElement {Array} SELECT DOM NODEs
 */
AO.Common.Util.emptySelect = function(selectElement)
{
	for(var i=0; i<selectElement.length; i++){
		var f = selectElement[i];
		f.options.length=0;
		f.options[0]=new Option('-', '');		
	}	
}


/**
 * block form element
 * @param id {String} element id 
 * @param enbl {Boolean} enabled 
 */
AO.Common.Util.setFormElementEnabled = function(id, enbl)
{
	var el = $("#"+id);
	
	if(el.size()===0)
		return;
		
	if(enbl)
	{
		el.removeAttr("disabled");
		el.removeClass("off");
	}else
	{
		el.attr("disabled","disabled");
		el.addClass("off");
	}
}




AO.Common.Util.checkAllcheckbox = function(name)
{
	var checkBoxCollection = $("input[name='"+name+"']");	
	jQuery.each(checkBoxCollection, function() {													 					
	 	$(this).get(0).checked=true;		
	 });			
}

AO.Common.Util.unCheckAllcheckbox = function(name)
{
	var checkBoxCollection = $("input[name='"+name+"']");	
	jQuery.each(checkBoxCollection, function() {													 						 	
		$(this).get(0).checked=false;		
	 });			
}

AO.Common.Util.radioCheckbox = function(el)
{
	var name = $(el).get(0).name;
	var checked = $(el).get(0).checked;
	
	var checkBoxCollection = $("input[name='"+name+"']");	
	jQuery.each(checkBoxCollection, function() {													 					
	 	if(this.id != el.id)
			$(this).get(0).checked=false;		
	 });	
}

AO.Common.Util.radioCheckboxByParam = function(el, param)
{
	var value = $(el).attr(param);
	var checked = $(el).get(0).checked;
	
	var checkBoxCollection = $("input["+param+"='"+value+"']");	
	jQuery.each(checkBoxCollection, function() {													 					
	 	if(this.id != el.id)
			$(this).get(0).checked=false;		
	 });	
}

AO.Common.Util.openPopup = function(url)
{
	var popup = window.open(url, "AO_popup", "width=550,height=600,location=yes,scrollbars=yes,resizable=yes,status=yes");
	popup.focus();
}


AO.Common.Util.openPictureWindow = function(imageFilePath,alt,left,top)
{
	var alt = alt || 'image';
	var left = left || 0;
	var top = top || 0;
	
	newWindow = window.open("", "newWindow", "width=100,height=100,scrollbars=no,resizable=yes,status=no,left="+left+", top="+top);
	newWindow.document.open();
	newWindow.document.write('<html><title>'+alt+'</title><script>var plusH = document.all ? 35 : 55; var plusW = document.all ? 10 : 10;</script><body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginheight="0" marginwidth="0" onBlur="self.close()">');
	newWindow.document.write('<img src="'+imageFilePath+'" onclick="self.close()" onload="self.resizeTo(this.width+plusW,this.height+plusH);" alt="'+alt+'">');
	newWindow.document.write('</body></html>');
	newWindow.document.close();
	newWindow.focus();
	
	return;
}


var AO_toggleFlagLabelClass = function(jQSelCheck, jQSelLabel, classOn, classOff){
	var check = $(jQSelCheck);	
	var label = $(jQSelLabel);
		
	var checked = check.get(0).checked;
			
	if(checked) {
		if(label.hasClass(classOff)) label.removeClass(classOff); 			
		label.addClass(classOn);
	}else{
		if(label.hasClass(classOn)) label.removeClass(classOn);				
		label.addClass(classOff); 					 
	}
};



// status msg class

AO.Common.formStatusMsg = function(divID,deferTimeout)
{
	var statusElId=divID;
	var defer_timeout=deferTimeout || 4000;
	var msg_close_timeout=null;
	
	return {
		
		setStatusMessage : function(msg,type)
		{
			if(msg_close_timeout)
				window.clearTimeout(msg_close_timeout);
			
			var id=statusElId;
			
			var el=$("#"+id);
			el.html(msg);
			
			// remove classes
			el.removeClass("status_msg_ok").removeClass("status_msg_info").removeClass("status_msg_bad");
			
			// add class
			switch(type)
			{
				case "ok":
					el.addClass("status_msg_ok");
				break;
				
				case "bad":
					el.addClass("status_msg_bad");
				break;
				
				case "info":
					el.addClass("status_msg_info");
				break;

			}
			
			el.show();
			
			this.deferHideStatusMsg();
		},
		
		
		deferHideStatusMsg : function()
		{
			f=function()
			{
				$("#"+statusElId).hide();
			};
			
			msg_close_timeout=window.setTimeout(f,defer_timeout);			
		}
	}
};

		



