﻿var timerId=null;
var timerRunning=false;
var ajaxStatusEl=null;
var ajaxInfoEl=null;
var logStatusEl=null;
var logInfoEl=null;
//ponizsze tablice do wylaczania/wlaczania pol formularzy
var btns		=new Array();
var inps		=new Array();
var selects		=new Array();
var textareas	=new Array();
var linkSpans	=new Array();


var MIN_SRCH_CODE_LENGTH=3;
var MAX_DELIVERY_QUANTITY=1000;
var MAX_SINGLE_OPER_QUANT=1000;
var MAX_USER_NO_ACTIVITY_TIME=1200; //sekundy =20min
var NO_ACTIVITY_WARNING_TIME=1080;  //sekundy =18min
var CHECK_USER_ACTIVITY_INTERVAL=60000; // milisekundy 

function initAdvAjax(){
	advAJAX.setDefaultParameters({
		mimeType:"text/plain",
		url:"dispatcher.php",
		 timeout: 30000,
		 onTimeout:function(obj){
		 	alert('Przekroczono dopuszczalny czas oczekiwania na odpowiedź z serwera ('+obj.timeout/1000+'s).\n Zostanie wykonana próba odświerzenia strony');
		 	location.reload(true);
		 },
		 //retryCount: 0,
		 //retryDelay:1000,
		 //onRetry : function(obj) { alert("Ponów próbę połączenia..."+obj._retryNo +" z "+obj.retryCount); },
		 onLoading:function(obj){ 
		 //	ajaxLoadInfo('on');
			disableForms();
		 	AJAX_IN_PROGRESS=true;
	
		 },
		 onComplete:function(obj){
		 //	ajaxLoadInfo('off');
		 	enableForms();
		
		 	AJAX_IN_PROGRESS=false;
		 },
		 onError:function(obj){
		 	coreError(obj.status);
		 }
	}); 
	
}
function ajaxLoadInfo(stat){
		
	var dlgHTML="<div id='ajaxLoadInfo' class='jqmWindow' style='display:none;text-align:center'><img src='templates/default/img/spin_loader.gif'><br><strong>Trwa pobieranie danych...</strong></div>";
	if(document.getElementById('ajaxLoadInfo')==undefined){
		$('body').append(dlgHTML);
		$('#ajaxLoadInfo').jqm();
	}
	
	if(stat=='on'){
		$('#ajaxLoadInfo').jqmShow({toTop:true});
	}else{
		$('#ajaxLoadInfo').jqmHide();
	}
}
function getElById(id){
	var el=document.getElementById(id);
	if(el==undefined || el==null){
		var calledFromFun=getFunName(getElById.caller);
		alert(calledFromFun+" :: brak elementu :: "+id);
		return false;
	}
	return el;
	
}
function _depricated_$(id){ // to samo co getElById  - dla ulatwienia skrocona nazwa... :)
	var el=document.getElementById(id);
	if(el==undefined || el==null){
		var calledFromFun=getFunName($.caller);
		alert(calledFromFun+" :: brak elementu :: "+id);
		return false;
	}
	return el;
	
}
function getFunName(funStr){
	if(funStr==null)return;
	funStr=funStr.toString();
	fName = funStr.substr('function '.length);        // trim off "function "
    fName = fName.substr(0, fName.indexOf('('));
    return(fName);     
}
function errLog(msg){
	var calledFrom=getFunName(errLog.caller);
	alert(calledFrom+" wystąpił problem : "+msg);
}
String.prototype.trim = function() {
   return this.replace(/^\s+|\s+$/g,'');
}
function defined( constant_name )  {
    // http://kevin.vanzonneveld.net
    // +   original by: Waldo Malqui Silva
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Brett Zamir (http://brettz9.blogspot.com)
  // %          note 1: Because this function can (albeit only temporarily) overwrite a global variable,
  // %          note 1: it is not thread-safe (normally not a concern for JavaScript, but would be if used
  // %          note 1: in a threaded environment, e.g., DOM worker threads)
    // *     example 1: defined('IMAGINARY_CONSTANT1');
    // *     returns 1: false
 
    var tmp = this.window[constant_name];
    
    this.window[constant_name] = this.window[constant_name] ? 'changed'+this.window[constant_name].toString() : 'changed';
    var returnval = this.window[constant_name] === tmp;
    if (!returnval) { // Reset
        this.window[constant_name] = tmp;
    }
 
    return returnval;
}
function strip_tags(str, allowed_tags) {
    // Strip HTML and PHP tags from a string
    // 
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strip_tags/
    // +       version: 810.2110
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Luke Godfrey
    // +      input by: Pul
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +      input by: Alex
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'

    var key = '', tag = '', allowed = false;
    var matches = allowed_array = [];
    var allowed_keys = {};

    var replacer = function(search, replace, str) {
        return str.split(search).join(replace);
    };

    // Build allowes tags associative array
    if (allowed_tags) {
        allowed_array = allowed_tags.match(/([a-zA-Z]+)/gi);
    }
	
    str += '';

    // Match tags
    matches = str.match(/(<\/?[^>]+>)/gi);

    // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
            // IE7 Hack
            continue;
        }

        // Save HTML tag
        html = matches[key].toString();

        // Is tag not in allowed list? Remove from str!
        allowed = false;

        // Go through all allowed tags
        for (k in allowed_array) {
            // Init
            allowed_tag = allowed_array[k];
            i = -1;

            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}
            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
            if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag)   ;}

            // Determine
            if (i == 0) {
                allowed = true;
                break;
            }
        }

        if (!allowed) {
            str = replacer(html, "", str); // Custom replace. No regexing
        }
    }

    return str;
}
//Element.prototype.getElementsByClassName = function(cl){
//	var retnode = [];
//	var myclass = new RegExp('\\b'+cl+'\\b');
//	var elem = this.getElementsByTagName('*');
//	for (var i = 0; i < elem.length; i++) {
//	var classes = elem[i].className;
//	if (myclass.test(classes)) retnode.push(elem[i]);
//	}
//	return retnode;
//	};
//	HTMLTableRowElement.getElementsByClassName = function(cl) {
//	var retnode = [];
//	var myclass = new RegExp('\\b'+cl+'\\b');
//	var elem = this.getElementsByTagName('*');
//	for (var i = 0; i < elem.length; i++) {
//	var classes = elem[i].className;
//	if (myclass.test(classes)) retnode.push(elem[i]);
//	}
//	return retnode;
//	
//}
document.getElementsByClassName = function(cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
	var classes = elem[i].className;
	if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
	};
//	HTMLTableRowElement.getElementsByClassName = function(cl) {
//	var retnode = [];
//	var myclass = new RegExp('\\b'+cl+'\\b');
//	var elem = this.getElementsByTagName('*');
//	for (var i = 0; i < elem.length; i++) {
//	var classes = elem[i].className;
//	if (myclass.test(classes)) retnode.push(elem[i]);
//	}
//	return retnode;
//};

function initGlobalPosManVars(){
	startClock();
	coreBrowserCheck();
	ajaxStatusEl=document.getElementById('ajaxStatus');
	ajaxInfoEl=document.getElementById('ajaxInfo');
	logStatusEl=document.getElementById('loginStatus');
	logInfoEl=document.getElementById('loginInfo');
	getAllFormControls();
	setInterval("coreGetUserLastActivityTime()",CHECK_USER_ACTIVITY_INTERVAL);
	advAJAX.setDefaultParameters({
		mimeType:"text/plain",
		
		 timeout: 30000,
		 onTimeout:function(obj){
		 	alert('Przekroczono dopuszczalny czas oczekiwania na odpowiedÄ½ z serwera ('+obj.timeout/1000+'s).\n Zostanie wykonana prÃ³ba odÂ¶wierzenia strony');
		 	location.reload(true);
		 },
		 retryCount: 0,
		 retryDelay:1000,
		 onRetry : function(obj) { alert("PonÃ³w prÃ³bÄ poÅÂ±czenia..."+obj._retryNo +" z "+obj.retryCount); },
		 onLoading:function(obj){ 
		 	disableForms();
		 },
		 onComplete:function(obj){
		 	enableForms();
		 },
		 onError:function(obj){
		 	coreError(obj.status);
		 }
		 
	});
	
}

function unlogPosManUser(){
	advAJAX.post({
		mimeType:"text/plain",
		url:"run/user.run.php",
		parameters:{
			"run":"unload_unlog_user"
		},
		onSuccess:function(obj){alert('unlog ok')},
		onError:function(){alert('unlog error');}
	});
}

function coreMainNavigation(navParam){
	document.location='index.php?nav='+navParam;
	
}

function isNumeric(sText){
   var validChars = "0123456789";
   var isNumber=true;
   var ch;
   for (i = 0; i < sText.length && isNumber == true; i++) 
      { 
      ch = sText.charAt(i); 
      if (validChars.indexOf(ch) == -1) 
         {
         isNumber = false;
         }
      }
   return isNumber;
 }
  
function stopClock()
{
  if (timerRunning) cleartimeout(timerId);
  timerRunning=false;
}

function showTime()
{
  var data=new Date();
  var godziny=data.getHours();
  var minuty=data.getMinutes();
      minuty=((minuty<10)? ":0": ":")+minuty;
  var sekundy=data.getSeconds();
      sekundy=((sekundy<10)? ".0": ".")+sekundy;
  var czas=""+godziny+minuty+sekundy;
  var el=document.getElementById('posManClock');
  if(el!=null){
  	el.innerHTML=czas;
  	timerId=setTimeout("showTime()",100);
  	timerRunning=true;	
  }
  
}

function startClock ()
{
  stopClock();
  showTime();
}

/*
 * metody przetwarzania XML
 */
 function xmlGetFirstChildValue(xmlObj){
 	/*
 	 * pobiera obiekt XML
 	 * zwraca wartosc pierwszego wezla
 	 */
 	var ch=xmlObj.documentElement.childNodes;
 	ch=xmlPrepArr(ch);
	if(ch.length>0){
		return ch[0].firstChild.nodeValue;
	}else{
		alert("brak wÄzÅÃ³w odpowiedzi");
		return null;
	}
	
 }
 function xmlPrepArr(elArr){
 	/*
 	 * pobiera tablice wezlow XML (z wyniku .childNodes)
 	 * przeprowadza sprawdzanie typow dla kompatybilnosci IE/inne 
 	 */
 	var newArr=new Array();
 	var j=0;
 	for(var i=0;i<elArr.length;i++){
 		if(elArr[i].nodeType==1){ // jesli typ==1 to mamy wezel, else to moze byc np. bialy znak w ff
 			newArr[j]=elArr[i];
 			j++;
 		}
 	}
 	return newArr;
 }
/*
 * metody do informacji o przetwarzaniu ajax
 */
 var statOp=1; //opacity start 1..0
function infoShow(){
	//statOp=1;
	ajaxStatusEl.style.opacity=1;  //0-1
	ajaxStatusEl.style.filter='alpha(opacity=100)';
	if(ajaxStatusEl!=null)
		ajaxStatusEl.style.display='block';
}
function infoSet(info){

	if(ajaxInfoEl!=null){
		ajaxInfoEl.innerHTML=info;
		infoShow();
	}
}
function infoSetHide(info){
	
	if(statOp==1){	statOp=0.99;
		if(ajaxInfoEl!=null){
			ajaxStatusEl.style.opacity=1;  //0-1
			ajaxStatusEl.style.filter='alpha(opacity=100)';
			ajaxInfoEl.innerHTML=info;
			infoShow();
		
			 setTimeout("infoFadeOut()",4000);
		}
	}else{
		if(ajaxInfoEl!=null)ajaxInfoEl.innerHTML=info;
		statOp=0.99;
	}	
}

function infoFadeOut() {
	if(ajaxStatusEl!=null){
		statOp=statOp-0.05;
		ajaxStatusEl.style.opacity=statOp;  //0-1
		ajaxStatusEl.style.filter = 'alpha(opacity=' + statOp*100 + ')';//0-100
		if(statOp>0.1){
			setTimeout('infoFadeOut()',100);
		}else{
			ajaxStatusEl.style.display='none';
			statOp=1;
		}
	}		
}
/*
 * do logInfo
 */
 var logStatOp=1;	// opacity 1..0
 function logInfoShow(){
 	//logStatOp=1;
	if(logStatusEl!=null)
		logStatusEl.style.display='block';
}
function logInfoSet(info){
	if(logInfoEl!=null){
		logInfoEl.innerHTML=info;
		logInfoShow();
	}
}
function logInfoSetHide(info){
	if(logStatOp==1){	logStatOp=0.99;
	if(logInfoEl!=null){
		logStatusEl.style.opacity=1;  //0-1
		logStatusEl.style.filter='alpha(opacity=100)';
		logInfoEl.innerHTML=info;
		logInfoShow();
		setTimeout("logInfoFadeOut()",4000);
	}else{
		alert('brak logInfoEl')
		
	}
	}
}

function logInfoFadeOut() {
	if(logStatusEl!=null){
		logStatOp=logStatOp-0.02;
		logStatusEl.style.opacity=logStatOp;  //0-1
		logStatusEl.style.filter = 'alpha(opacity=' + statOp*100 + ')';//0-100
		if(logStatOp>0.1){
			setTimeout('logInfoFadeOut()',100);
		}else{
			logStatusEl.style.display='none';
			logStatOp=1;
		}
	}		
}
///////////////
function getAllFormControls(){
	btns=null;
	btns=document.getElementsByTagName('button');
	
	
	
	var tmpInps=document.getElementsByTagName('input');
	var inpCount=0;
	for(var i=0;i<tmpInps.length;i++){//alert(tmpInps[i].disabled);
		//if (tmpInps[i].disabled==false){
			inps[inpCount]=tmpInps[i];
			inpCount++;		
		//}
	}
			
	var tmpSel=document.getElementsByTagName('select');
	var selCount=0;
	for(var i=0; i< tmpSel.length; i++){
		if(tmpSel[i].disabled==false){
			selects[selCount]=tmpSel[i];
			selCount++;
		}
	}
	textareas	=document.getElementsByTagName('textarea');
	/*var linkSpans1 	=document.getElementsByClassName('extCancellRequest');
	var linkSpans2 	=document.getElementsByClassName('extSetOnTheWay');
	var linkSpans3 	=document.getElementsByClassName('relPosBtn');
	var linkSpans4 	=document.getElementsByClassName('relPosCancellBtn');
	var linkSpans5 	=document.getElementsByClassName('relReqCancellBtn');
	
	linkSpans=linkSpans1.concat(linkSpans2,linkSpans3,linkSpans4, linkSpans5);
	*/ 
}
function disableForms(){ return;
	getAllFormControls();
	alert(inps.length);
	for(var i=0;i<btns.length;i++){
		btns[i].disabled=true;
	}
	for(var i=0;i<inps.length;i++){
		inps[i].disabled=true;
		//inps[i].style.background="lime";
	}
	for(var i=0;i<selects.length;i++){
		selects[i].disabled=true;
	}
	for(var i=0;i<textareas.length;i++){
		textareas[i].disabled=true;
	}
	for(var i=0;i<linkSpans.length;i++){
		linkSpans[i].style.display='none';
	}
	
}
function enableForms(){return;
	//alert(inps.length);
	getAllFormControls();
	alert(inps.length);
	for(var i=0;i<btns.length;i++){
			btns[i].disabled=false;
	}
	
	for(var i=0;i<inps.length;i++){
		inps[i].disabled=false;
		inps[i].style.background="lime";
	}
	for(var i=0;i<selects.length;i++){
		selects[i].disabled=false;
	}
	for(var i=0;i<textareas.length;i++){
		textareas[i].disabled=false;
	}	
	for(var i=0;i<linkSpans.length;i++){
		linkSpans[i].style.display='block';
	}
}
function ddisableForms(){
	getAllFormControls();
	alert(inps.length);
	for(var i=0;i<btns.length;i++){
		btns[i].disabled=true;
	}
	for(var i=0;i<inps.length;i++){
		inps[i].disabled=true;
		//inps[i].style.background="lime";
	}
	for(var i=0;i<selects.length;i++){
		selects[i].disabled=true;
	}
	for(var i=0;i<textareas.length;i++){
		textareas[i].disabled=true;
	}
	for(var i=0;i<linkSpans.length;i++){
		linkSpans[i].style.display='none';
	}
	
}
function eenableForms(){
	//alert(inps.length);
	getAllFormControls();
	alert(inps.length);
	for(var i=0;i<btns.length;i++){
			btns[i].disabled=false;
	}
	
	for(var i=0;i<inps.length;i++){
		inps[i].disabled=false;
		inps[i].style.background="lime";
	}
	for(var i=0;i<selects.length;i++){
		selects[i].disabled=false;
	}
	for(var i=0;i<textareas.length;i++){
		textareas[i].disabled=false;
	}	
	for(var i=0;i<linkSpans.length;i++){
		linkSpans[i].style.display='block';
	}
}
function submitOnEnterKey(e, functionName){
	//functionName - funkcja do odpalenia gdy wcisniety zostanie klawisz enter
	var keyNum;	
	if(window.event) // IE
	  {
	  keyNum = e.keyCode;
	  }
	else if(e.which) // Netscape/Firefox/Opera
	  {
	  keyNum = e.which;
	  }
	 
	 if(keyNum==13){ //13 - kod klawisza enter
                var regexp = /^.*\(\);?$/;
                if (regexp.test(functionName)) {
                    var el = e.target;
                    functionName = functionName.replace("()","(el)");
                }
                
	 	setTimeout(function(){eval(functionName)}, 10);
	 } 
	
}

function coreShowTab(clickedTabId, toShowId, toHideClass){
	
	var toHide=document.getElementsByClassName(toHideClass);
	for(var i=0;i<toHide.length;i++){
		toHide[i].style.display='none';
	}
	var toShowEl=document.getElementById(toShowId);
	toShowEl.style.display='block';
	
	var tabs=document.getElementsByClassName('selected');
	for(var i=0;i<tabs.length;i++){
		tabs[i].className='tabLink';
	}
	var clickedTab=document.getElementById(clickedTabId);
	clickedTab.className='selected';
}

function coreGetRadioValue(radioName){
	var radioArr=document.getElementsByName(radioName);
	if(radioArr!=null)
		for(var i=0;i<radioArr.length;i++){
			if(radioArr[i].checked==true)
				return radioArr[i].value;
		}
	return 0;//jesli nie znaleziono zaznaczonego elementu radio 
}
function coreDeselectRadios(rName){
	var radioArr=document.getElementsByName(rName);
	if(radioArr!=null)
		for(var i=0;i<radioArr.length;i++){
			radioArr[i].checked=false;
		}	
}

function diagLogAs(log,pass){
	var usEl=document.getElementById('username');
	var passEl=document.getElementById('password');
	usEl.value=log;
	passEl.value=pass;
	ajaxLogUser();
	
}

function coreBrowserCheck(){
	var broEl=document.getElementById('browserWarning');
	if(navigator.appName=="Microsoft Internet Explorer"){
		broEl.style.display='block';
		broEl.innerHTML='UWAGA! System PosMan wspÃ³Åpracuje najlepiej z przeglÂ±darkÂ± <a href=\'http://firefox.pl\'>Mozilla FireFox</a><br> Twoja przeglÂ±darka to <big>Internet Explorer</big><br>NiektÃ³re funkcje mogÂ± niedziaÅaÄ lub system moÅ¼e funkcjonowaÄ niestabilnie.';
		
	}else{
		broEl.style.display='none';
		
	}
	
}
function changeListSize(flag,list1,list2){
	var listEl1=document.getElementById(list1);
	var listEl2=document.getElementById(list2);
	if(listEl1==null || listEl2==null){
		alert('changeListSize():: brak '+list1+' lub '+list2);
		return;
	}
	if(flag<0){
		if(listEl1.offsetHeight>41)
		listEl1.style.height=(listEl1.offsetHeight-40)+"px";

		if(listEl2.offsetHeight>41)
		listEl2.style.height=(listEl2.offsetHeight-40)+"px";	
	}else{
		listEl1.style.height=(listEl1.offsetHeight+40)+"px";
		listEl2.style.height=(listEl2.offsetHeight+40)+"px";
	}
}

function selectAllChecks(checkboxName){
	var chcks=document.getElementsByName(checkboxName);
	if(chcks==null){
		alert('selectAllChecks():: brak elementu '+checkboxName);
		return;
	}
	for(var i=0;i<chcks.length;i++)	
		chcks[i].checked=true;
}
function deselectAllChecks(checkboxName){
	var chcks=document.getElementsByName(checkboxName);
	if(chcks==null){
		alert('selectAllChecks():: brak elementu '+checkboxName);
		return;
	}
	for(var i=0;i<chcks.length;i++)	
		chcks[i].checked=false;
}
function coreShowPosInfo(posCode){
	var newWindow=window.open("popups/posTemplateInfo.php?pos_code="+posCode, "DescriptiveWindowName", "resizable=no,width=800, height=600, scrollbars=yes,status=no, top=200" );	
	if (window.focus) {newWindow.focus();}
}	
	
function clearInput(txtInput){
	//czysci domyslna zawartosc : 0
	if(txtInput.value.trim()=='0')
		txtInput.value='';
	
}	
function setDefaultInputValue(el,val){
	if(el.value.trim()=='')
		el.value=val;
	
}
function onlyReal(inp,fixed){
	onlyCurrency(inp,fixed);
}
function onlyCurrency(inp, fixed){
	if(fixed==undefined)
		fixed=2;
	var num = inp.value.toString().replace(',','.');
	var currencyValue=parseFloat(num).toFixed(fixed);
	if(isNaN(currencyValue)){
		if(inp.hasAttribute('defaultValue')){
			if(inp.getAttribute('defaultValue')!=undefined){
				currencyValue=inp.getAttribute('defaultValue');
			}
		}else	
			currencyValue=0;
	}
	inp.value=currencyValue;
	
}
function onlyInteger(txtInput){
	var sText=txtInput.value;
	
		
   var validChars = "0123456789";
   
   var ch;
   for (i = 0; i < sText.length; i++) 
      { 
      ch = sText.charAt(i); 
      if (validChars.indexOf(ch) == -1) 
         {
         	infoSetHide('Proszę wprowadzić wartość liczbową!');
         	if(i!=0 && i< sText.length){
         		var old=sText;
         		sText=old.substring(0,i);
         		sText+=old.substring(i+1);
         	}else if(i==0){
         		var old=sText;
         		sText=old.substring(i+1);		
         	}else if(i==sText.length-1){
         		var old=sText;
         		sText=old.substring(0,i);
         		
         		 
         	}
         }
      }
   txtInput.value=sText;
   if(!isNumeric(sText))
   	onlyInteger(txtInput);
	
}	
function onlyAlfaNum(txtInput){
	var sText=txtInput.value;
	
		
   var validChars = "abcdefghijklmnoprstquwxyzABCDEFGHIJKLMNOPRSTQUWXYZ_0123456789";
   
   var ch;
   for (i = 0; i < sText.length; i++) 
      { 
      ch = sText.charAt(i); 
      if (validChars.indexOf(ch) == -1) 
         {
         	infoSetHide('Proszę wprowadzić wartość liczbową!');
         	if(i!=0 && i< sText.length){
         		var old=sText;
         		sText=old.substring(0,i);
         		sText+=old.substring(i+1);
         	}else if(i==0){
         		var old=sText;
         		sText=old.substring(i+1);		
         	}else if(i==sText.length-1){
         		var old=sText;
         		sText=old.substring(0,i);
         		
         		 
         	}
         }
      }
   txtInput.value=sText;
   //if(!isNumeric(sText))
   //	onlyAlfaNum(txtInput);
	
}

function coreGetUserLastActivityTime(){
	advAJAX.post({
		timeout:0,
		mimeType:"text/plain",
		url:"auth/user_get_last_activity_time.php",
		onSuccess:function(obj){
			//alert(obj.responseText);
			if(obj.responseText.trim() >=MAX_USER_NO_ACTIVITY_TIME && obj.responseText.trim()< 10000000){
				document.location='./auth/user_logout.php?info=1';	
			}else if(obj.responseText.trim() >=NO_ACTIVITY_WARNING_TIME && obj.responseText.trim()< 10000000){
				infoSet("UWAGA!<br>Wykryto bezczynnoÂ¶Ä. Wylogowanie nastÂ±pi za "+(MAX_USER_NO_ACTIVITY_TIME-NO_ACTIVITY_WARNING_TIME )+" sek.<br><button onclick='coreUserActivity()'>przedÅuÅ¼ sesje!</button>"	);
			}
		},
		 onLoading:function(obj){
			//alert('load');
		 },
		 onComplete:function(obj){
		 	//alert('complete');
		 },
		 
		onError:function(){
			
		}
	});
}

function coreUserActivity(){
	//przedluzenie sesji uzytkownika
	//po kliknieciu na guziku 'awaryjnym'
	infoSetHide('Sesja uÅ¼ytkownika przedÅuÅ¼ona');
	advAJAX.post({
		mimeType:"text/plain",
		timeOut:3000,
		retry:10,
		url:"auth/user_stretch_session_time.php",
		onSuccess:function(obj){
			
		},
		onError:function(){
			alert('coreUserActivity() :: ajax error');
		}
	});
	
	
}

function coreError(errInfo){
	
	//alert(errInfo); //debugInfo
	
	//alert('Serwer nie odpowiada.\nIstnieją dwie możliwe przyczyny tej sytuacji:\n1. Serwer jest przeciążony.\n2. Wystąpił problem z Twoim połączeniem internetowym.\nSprobuj wykonać operację ponownie.');
	enableForms();
	infoSetHide('Brak poÅÂ±czenia z serwerem.');
	
	
}

function filterTable(tabId, cont){
	//cont = to element rodzic tabeli ktora chcemy przefiltrowac
	//wewnatrz niego bedziemy umieszczac kontrolki filtracji
	
	var tab=document.getElementById(tabId);
	if(tab==undefined){
		return; // gdy  nie znajdziemy tabelki do filtracji - zaniechaj dalszych dzialan
	}
	if(cont==undefined){
		var contener=tab.parentNode;
	}else
		var contener=document.getElementById(cont);	
	
	if(contener==undefined)
		return;	
		
	if(document.getElementById(tabId+'filter')==undefined){	
		var fDiv=document.createElement('div');
		fDiv.className="filter";
		fDiv.setAttribute("id",tabId+'filter');
		fDiv.innerHTML='Filtracja: ';
		var sCols=document.createElement('select');
		sCols.setAttribute("id",tabId+"_colNames");
		var sVals=document.createElement('select');
		sVals.setAttribute("id", tabId+"_colValues");
		fDiv.appendChild(sCols);
		fDiv.appendChild(sVals);
		var noFiltOption=new Option('brak filtracji','noFilter');
		noFiltOption.onclick=function(){noFilterTable(tabId);};
		sCols.options[sCols.options.length]=noFiltOption;
	}else{
		sCols=document.getElementById(tabId+"_colNames");
		sVals=document.getElementById(tabId+"_colValues");
	
		sCols.options.length=1;
		sVals.options.length=0;
	}	
	
	var tHead=tab.getElementsByTagName( 'thead' )[0];
	
	if(tHead==undefined){
		infoSetHide('brak sekcji thead w tabeli '+tabId);
		return;
	}
	var ths=tHead.getElementsByTagName('th');
	
		for(var i=0; i<ths.length; i++){
			if(ths[i].childNodes[0].innerHTML.trim()!=''){	
				var op=new Option(ths[i].childNodes[0].innerHTML, i);
				sCols.options[sCols.options.length]=op;
			
		//$('body').append("<div 	id='dialogx'>trwa analiza kolumny</div>");
		op.onclick=function(){ //wybrano kolumne z pierwszego selecta
			//wyczysc drugi select
					
			//$('#dialogx').dialog();
			sVals.options.length=0;
			var colIndex=this.value;	//index wybranej kolumny
			var tbody=tab.getElementsByTagName('tbody')[0];
			if(tbody==undefined){
				infoSetHide('brak tbody');
				return;			
			}
			//zwijanie ewentualnie rozwinietych wierszy w tabeli moje posy dla asr
			if(tabId=='myReturnablePosTab'){
				var rowsToDel=document.getElementsByClassName('posRetInsRow');
				for(var i =0; i< rowsToDel.length; i++)
					tab.getElementsByTagName('tbody')[0].removeChild(rowsToDel[i]);
			}//koniec zwijania
			//zwijanie ewnentualnie rozwinietych wierszy w tabeli inwentaryzacji
			if(tabId=='invMainTab'){
				var rowsToDel=document.getElementsByClassName('invMainTabDetailsRow');
				for(var i =0; i< rowsToDel.length; i++)
					tab.getElementsByTagName('tbody')[0].removeChild(rowsToDel[i]);
			}//koniec zwijania
			
			for(var i=0;i<tbody.rows.length;i++){	// petla po wszystkich wierszach tabelki
				//tbody.rows[i].cells[colIndex].innerHTML.match(/[\/(][\s\S]*[\/)]/) // wywala wszystko w nawiasach
				//najpierw sprawdz czy takiej wartosci nie ma juz przypadkiem w selekcie
				var isInSelect=false; // flaga okreslajaca czy aktualnie przetwarzana wartosc kolumy jest juz w selekcie
				for(var j=0; j< sVals.options.length; j++){
					//alert(tbody.rows[i].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,""));
					var currValue=strip_tags(tbody.rows[i].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,"")).trim();
					if(currValue.trim()==''){//proba siegniecia w glab jesli komorka jest pusta
						if(currValue=tbody.rows[i].cells[colIndex].childNodes[0]!=undefined)
							currValue=tbody.rows[i].cells[colIndex].childNodes[0].innerHTML;
	
					}	
					
					if(strip_tags(sVals.options[j].text).trim()==currValue){
						// znaleziono odpowiednia wartosc w tablicy...
						isInSelect=true;
						
					}
					
				}
				if(!isInSelect){
					var currValue=strip_tags(tbody.rows[i].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,""));
			
					if(currValue.trim()==''){
						if(currValue=tbody.rows[i].cells[colIndex].childNodes[0]!=undefined)
						currValue=tbody.rows[i].cells[colIndex].childNodes[0].innerHTML;
					}

					var option=new Option(currValue,currValue);
					sVals.options[sVals.options.length]=option;
					option.onclick=function(){ 	// klikniecie na opcji w selekcjie 2(WYBOR WARTOSCI) 
												// FILTRACJA TABELI!
												
						for(var k=0;k<tbody.rows.length;k++){
							var currCell=strip_tags(tbody.rows[k].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,"")).trim();
							if(currCell.trim()==''){ //proba siegniecia wglab, jesli komorka jest pusta
								if(tbody.rows[k].cells[colIndex].childNodes[0]!=undefined)
									currCell=tbody.rows[k].cells[colIndex].childNodes[0].innerHTML;
							}
							if(currCell == this.value.trim()){
								
								//pokaz
								tbody.rows[k].style.display='';
							}else{
								//ukryj
								
								tbody.rows[k].style.display='none';
							}
						}
						zebraTable(tabId);
						if(document.getElementById(tabId+"_totalQ")!=undefined){ // jesli tabela ma wlaczone podliczanie sumy to wykonaj ponowne przeliczenie po przefiltrowaniu
							countTable(tabId);
						}
						if(document.getElementById(tabId+"_totalAll")!=undefined){ // jesli tabela ma wlaczone podliczanie sumy to wykonaj ponowne przeliczenie po przefiltrowaniu
							countTableAll(tabId);
						}
					}
				}
			}
			//$('#dialogx').dialog('destroy');
		};
	  }	
	}
	
	if(document.getElementById(tabId+'filter')==undefined)
		contener.insertBefore(fDiv,document.getElementById(tabId));
		
	
		
	
}
function old_filterTable(tabId){
	newFilter(tabId);
	var tab=document.getElementById(tabId);
	var sCols=document.getElementById('filColNames');
	var sVals=document.getElementById('filColValues');
	while(sCols.options.length>1)sCols.options.length=1;
	sVals.options.length=0;
	if(tab==undefined){
		infoSetHide('brak elementu o id='+tabId);
		return;
	}
	var tHead=tab.getElementsByTagName( 'thead' )[0];
	
	if(tHead==undefined){
		infoSetHide('brak sekcji thead w tabeli '+tabId);
		return;
	}
	var ths=tHead.getElementsByTagName('th');
	
	for(var i=0; i<ths.length; i++){
		var op=new Option(ths[i].childNodes[0].innerHTML, i);
		sCols.options[sCols.options.length]=op;
		
		op.onclick=function(){ //wybrano kolumne z pierwszego selecta
			//wyczysc drugi select
			sVals.options.length=0;
			var colIndex=this.value;	//index wybranej kolumny
			var tbody=tab.getElementsByTagName('tbody')[0];
			if(tbody==undefined){
				infoSetHide('brak tbody');
				return;			
			}
			for(var i=0;i<tbody.rows.length;i++){	// petla po wszystkich wierszach tabelki
				//tbody.rows[i].cells[colIndex].innerHTML.match(/[\/(][\s\S]*[\/)]/)
				//najpierw sprawdz czy takiej wartosci nie ma juz przypadkiem w selekcie
				var isInSelect=false; // flaga okreslajaca czy aktualnie przetwarzana wartosc kolumy jest juz w selekcie
				for(var j=0; j< sVals.options.length; j++){
					//alert(tbody.rows[i].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,""));
					var currValue=strip_tags(tbody.rows[i].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,"")).trim();
					if(strip_tags(sVals.options[j].text).trim()==currValue){
						// znaleziono odpowiednia wartosc w tablicy...
						isInSelect=true;
						
					}
					
				}
				if(!isInSelect){
					var option=new Option(strip_tags(tbody.rows[i].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,"")),strip_tags(tbody.rows[i].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,"")));
					sVals.options[sVals.options.length]=option;
					option.onclick=function(){ 	// klikniecie na opcji w selekcjie 2(WYBOR WARTOSCI) 
												// FILTRACJA TABELI!
												
						for(var k=0;k<tbody.rows.length;k++){
							if(strip_tags(tbody.rows[k].cells[colIndex].innerHTML.replace(/[\/(][\s\S]*[\/)]/,"")).trim() == this.value.trim()){
								//pokaz
								tbody.rows[k].style.display='';
							}else{
								//ukryj
								
								tbody.rows[k].style.display='none';
							}
						}
					}
				}
			}
			
		};
		
	}
	
}
function noFilterTable(tabId){
	//kasuje filtracje z podanej tabelki
	var tabEl=document.getElementById(tabId);
	
	if(tabEl==undefined){
		infoSetHide('brak tabeli o id = '+tabId);
		return;
	}
	
	var tbody=tabEl.getElementsByTagName('tbody')[0];
			if(tbody==undefined){
				infoSetHide('brak tbody');
				return;			
			}
			
	for(var i=0;i<tbody.rows.length;i++){	// petla po wszystkich wierszach tabelki
		tbody.rows[i].style.display="";					
	}
	zebraTable(tabId);
	if(document.getElementById(tabId+"_totalQ")!=undefined){ // jesli tabela ma wlaczone podliczanie sumy to wykonaj ponowne przeliczenie po przefiltrowaniu
		countTable(tabId);
	}
	if(document.getElementById(tabId+"_totalAll")!=undefined){ // jesli tabela ma wlaczone podliczanie sumy to wykonaj ponowne przeliczenie po przefiltrowaniu
		countTableAll(tabId);
	}
}

function clearFilterSelects(tabId){
	//tabId = id tabelki dla ktorej chcemy wyczyscic selecty
	//id selectow utworzone zostaly na podstawie takiej: tabId+'_colNames' / tabId+'_colValues'
	var sCols=document.getElementById(tabId+'_colNames');
	var sVals=document.getElementById(tabId+'_colValues');
	if(sCols==undefined || sVals==undefined){
		return; // jesli nei utworzono jeszcze selectow(bo np. nie ma wynikow w tabeli) to zakoncz funkcje 
	}
	sCols.options.length=1;
	sVals.options.length=0;
	
}
function countTable(tabId){ 
	if(document.getElementById(tabId) == undefined)
		return;
	var rows=document.getElementById(tabId).getElementsByTagName('tbody')[0].getElementsByTagName('tr');
	var total=0;
	for(var i=0; i< rows.length ; i++){
		var lastCellIndex=rows[i].cells.length-1;
		if(rows[i].style.display!='none')
		total+=parseInt(rows[i].cells[lastCellIndex].innerHTML,10);
		
	}
	var totalElement=document.getElementById(tabId+"_totalQ");
	if(totalElement==undefined){
		var parentEl=document.getElementById(tabId).parentNode;
		var newTotalEl=document.createElement("div");
		newTotalEl.innerHTML="suma : "+total;
		newTotalEl.className="totalQ";
		newTotalEl.id=tabId+"_totalQ";
		parentEl.insertBefore(newTotalEl, document.getElementById(tabId).nextSibling);
		
	}else{
		totalElement.innerHTML="suma : "+total;
	}
}
function countTableAll(tabId){
	if(document.getElementById(tabId) == undefined)
		return;
	var ths=document.getElementById(tabId).getElementsByTagName('th');
	var rows=document.getElementById(tabId).getElementsByTagName('tbody')[0].getElementsByTagName('tr');
	
	var totals=new Object();
	for(var i =0; i<ths.length; i++){
		totals[ths[i].childNodes[0].innerHTML]=0;
		for(var j=0 ; j<rows.length; j++){
			if(rows[j].style.display!='none'){
				if(rows[j].cells[i].childNodes[0].tagName=="INPUT" && rows[j].cells[i].childNodes[0].getAttribute('type')=='text'){
					//alert(parseFloat(rows[j].cells[i].childNodes[0].value)); 
					totals[ths[i].childNodes[0].innerHTML]+=parseFloat(rows[j].cells[i].childNodes[0].value);	
				}else{
					totals[ths[i].childNodes[0].innerHTML]+=parseFloat(rows[j].cells[i].innerHTML);
				}
			}	
		}
	}	
	var totalElement=document.getElementById(tabId+"_totalAll");
	if(totalElement==undefined){
		var parentEl=document.getElementById(tabId).parentNode;
		var newTotalEl=document.createElement("div");
		newTotalEl.innerHTML="<strong>sumy</strong><br>";
		for(var i=0; i< ths.length; i++){
			if(!isNaN(totals[ths[i].childNodes[0].innerHTML]))
			newTotalEl.innerHTML+=ths[i].childNodes[0].innerHTML +" : "+roundNumber(totals[ths[i].childNodes[0].innerHTML],2)+"<br>";
		}
		
		newTotalEl.className="totalAll";
		newTotalEl.id=tabId+"_totalAll";
		parentEl.insertBefore(newTotalEl, document.getElementById(tabId).nextSibling);
		
	}else{
		totalElement.innerHTML="<strong>sumy</strong><br>";
		for(var i=0; i< ths.length; i++){
			if(!isNaN(totals[ths[i].childNodes[0].innerHTML]))
			totalElement.innerHTML+=ths[i].childNodes[0].innerHTML +" : "+roundNumber(totals[ths[i].childNodes[0].innerHTML],2)+"<br>";
		}
	}

}
function zebraTable(tabId){
	//zebrowanie tabelek po filtracji...
	var tab=document.getElementById(tabId);
	
	if(tab==undefined)
		return;
		
	var tb=tab.getElementsByTagName('tbody')[0];
	
	var visRows=new Array();
	var ile=0;
	for(var i=0; i<tb.rows.length;i++){
		if(tb.rows[i].style.display!='none'){
			visRows[ile]=tb.rows[i];
			ile++;
		}
	}
	for(var i=0;i<visRows.length;i++){
		if(i % 2!=0){
			visRows[i].className='zebra';
			
		}else{
			visRows[i].className='';
		}
	}
	
	
}
/*
Element.prototype.deleteTBody=function(){
	var tb=this.getElementsByTagName('tbody')[0];
	if(tb!=undefined){
		this.removeChild(tb);
		
	}
}
* */
function coreToggleVis(elId){
	var el=document.getElementById(elId);
	if(el.tagName=="TABLE"){
		if(el.style.display=="none"){
			el.style.display="table";
		}else if(el.style.display=="table"){
			el.style.display="none";
		}
	}else{
		if(el.style.display=="none"){
			el.style.display="block";
		}else if(el.style.display=="block"){
			el.style.display="none";
		}	
	}	
}
function tableCaption(tabEl, cap){
		tabEl.createCaption().innerHTML=cap;
}
function tableHeaders(tabEl, thLabs){
	//thLabs -  tablica etykiet tekstowych do wstawienia w th
	var ths=[]; // tablica elementow th
	var thead=tabEl.createTHead();
	var fRow=thead.insertRow(-1);
	fRow.className="header";
	for (var i=0; i<thLabs.length; i++){
		ths[i]=document.createElement('th');
		ths[i].innerHTML="<div class='thLabel'>"+thLabs[i]+"</div>";
		fRow.appendChild(ths[i]);
	}
}
function tableAddRow(tabEl, rowVals, doOnClick, clsName, widths, style){
	//IE6+ compatible :)
	var tbody=null;
	if(tabEl.tBodies[0]==undefined){
		tbody=document.createElement('tbody');
		tabEl.appendChild(tbody);
	}else
		tbody=tabEl.tBodies[0];
			
	var newRow=document.createElement('tr'); // to nie dziala w ie 
	tbody.appendChild(newRow);
	//var newRow=tabEl.insertRow(-1); 
	for(var i = 0 ; i<rowVals.length; i++){
		var ncell=newRow.insertCell(-1);
		ncell.innerHTML=(rowVals[i]);
		if(widths!=undefined){
			ncell.style.width=widths[i]+"px";
		}
	}		
	
	if(doOnClick!=undefined && doOnClick!=null){
		newRow.setAttribute('onclick', doOnClick);
	}
	if(clsName!=undefined && clsName!=null){
		newRow.className=clsName;
	}
	if(style!=undefined && style!=null){alert(style);
		newRow.setAttribute('style', style);
	}
}


function tableMarkCol(tab, colInd, clsName, colWidth){
	var tbody=tab.tBodies[0];
	for(var i=0; i<tbody.rows.length; i++){
		for(j=0; j<tbody.rows[i].cells.length; j++){
			if(j==colInd){
				tbody.rows[i].cells[j].className=clsName;
				if(colWidth!=undefined)
					tbody.rows[i].cells[j].style.width=colWidth+"px";
			}	
		}
	}	
}

function tableClearAll(tabEl){
	tabEl.deleteCaption();
	tabEl.deleteTHead();
	//tabEl.deleteTBody(); // ie tego nie obsluguje
	while(tabEl.rows.length>0)
		tabEl.deleteRow(-1);
	tabEl.deleteTFoot();
}
function tableDeleteTBody(tabEl){
	if(tabEl==undefined)return;
	var tb=tabEl.getElementsByTagName('tbody')[0];
	if(tb!=undefined){
		this.removeChild(tb);
		
	}
}

function htmlentities (string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: nobbler
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlentities('Kevin & van Zonneveld');
    // *     returns 1: 'Kevin &amp; van Zonneveld'
    // *     example 2: htmlentities("foo'bar","ENT_QUOTES");
    // *     returns 2: 'foo&#039;bar'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = this.get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }
    
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(symbol).join(entity);
    }
    
    return tmp_str;
}
function addslashes( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ates Goral (http://magnetiq.com)
    // +   improved by: marrtins
    // +   improved by: Nate
    // +   improved by: Onno Marsman
    // *     example 1: addslashes("kevin's birthday");
    // *     returns 1: 'kevin\'s birthday'
 
    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
function htmlspecialchars (string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Mirek Slugen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Nathan
    // +   bugfixed by: Arno
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlspecialchars("<a href='test'>Test</a>", 'ENT_QUOTES');
    // *     returns 1: '&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = this.get_html_translation_table('HTML_SPECIALCHARS', quote_style))) {
        return false;
    }
    
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(symbol).join(entity);
    }
    
    return tmp_str;
}
function get_html_translation_table(table, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: noname
    // +   bugfixed by: Alex
    // +   bugfixed by: Marco
    // +   bugfixed by: madipta
    // +   improved by: KELAN
    // +   improved by: Brett Zamir (http://brettz9.blogspot.com)
    // %          note: It has been decided that we're not going to add global
    // %          note: dependencies to php.js. Meaning the constants are not
    // %          note: real constants, but strings instead. integers are also supported if someone
    // %          note: chooses to create the constants themselves.
    // *     example 1: get_html_translation_table('HTML_SPECIALCHARS');
    // *     returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}
    
    var entities = {}, histogram = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    // Translate arguments
    constMappingTable[0]      = 'HTML_SPECIALCHARS';
    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';
 
    useTable     = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
    useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
 
    if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
        throw Error("Table: "+useTable+' not supported');
        // return false;
    }
 
    // ascii decimals for better compatibility
    entities['38'] = '&amp;';
    if (useQuoteStyle !== 'ENT_NOQUOTES') {
        entities['34'] = '&quot;';
    }
    if (useQuoteStyle === 'ENT_QUOTES') {
        entities['39'] = '&#039;';
    }
    entities['60'] = '&lt;';
    entities['62'] = '&gt;';
 
    if (useTable === 'HTML_ENTITIES') {
      entities['160'] = '&nbsp;';
      entities['161'] = '&iexcl;';
      entities['162'] = '&cent;';
      entities['163'] = '&pound;';
      entities['164'] = '&curren;';
      entities['165'] = '&yen;';
      entities['166'] = '&brvbar;';
      entities['167'] = '&sect;';
      entities['168'] = '&uml;';
      entities['169'] = '&copy;';
      entities['170'] = '&ordf;';
      entities['171'] = '&laquo;';
      entities['172'] = '&not;';
      entities['173'] = '&shy;';
      entities['174'] = '&reg;';
      entities['175'] = '&macr;';
      entities['176'] = '&deg;';
      entities['177'] = '&plusmn;';
      entities['178'] = '&sup2;';
      entities['179'] = '&sup3;';
      entities['180'] = '&acute;';
      entities['181'] = '&micro;';
      entities['182'] = '&para;';
      entities['183'] = '&middot;';
      entities['184'] = '&cedil;';
      entities['185'] = '&sup1;';
      entities['186'] = '&ordm;';
      entities['187'] = '&raquo;';
      entities['188'] = '&frac14;';
      entities['189'] = '&frac12;';
      entities['190'] = '&frac34;';
      entities['191'] = '&iquest;';
      entities['192'] = '&Agrave;';
      entities['193'] = '&Aacute;';
      entities['194'] = '&Acirc;';
      entities['195'] = '&Atilde;';
      entities['196'] = '&Auml;';
      entities['197'] = '&Aring;';
      entities['198'] = '&AElig;';
      entities['199'] = '&Ccedil;';
      entities['200'] = '&Egrave;';
      entities['201'] = '&Eacute;';
      entities['202'] = '&Ecirc;';
      entities['203'] = '&Euml;';
      entities['204'] = '&Igrave;';
      entities['205'] = '&Iacute;';
      entities['206'] = '&Icirc;';
      entities['207'] = '&Iuml;';
      entities['208'] = '&ETH;';
      entities['209'] = '&Ntilde;';
      entities['210'] = '&Ograve;';
      entities['211'] = '&Oacute;';
      entities['212'] = '&Ocirc;';
      entities['213'] = '&Otilde;';
      entities['214'] = '&Ouml;';
      entities['215'] = '&times;';
      entities['216'] = '&Oslash;';
      entities['217'] = '&Ugrave;';
      entities['218'] = '&Uacute;';
      entities['219'] = '&Ucirc;';
      entities['220'] = '&Uuml;';
      entities['221'] = '&Yacute;';
      entities['222'] = '&THORN;';
      entities['223'] = '&szlig;';
      entities['224'] = '&agrave;';
      entities['225'] = '&aacute;';
      entities['226'] = '&acirc;';
      entities['227'] = '&atilde;';
      entities['228'] = '&auml;';
      entities['229'] = '&aring;';
      entities['230'] = '&aelig;';
      entities['231'] = '&ccedil;';
      entities['232'] = '&egrave;';
      entities['233'] = '&eacute;';
      entities['234'] = '&ecirc;';
      entities['235'] = '&euml;';
      entities['236'] = '&igrave;';
      entities['237'] = '&iacute;';
      entities['238'] = '&icirc;';
      entities['239'] = '&iuml;';
      entities['240'] = '&eth;';
      entities['241'] = '&ntilde;';
      entities['242'] = '&ograve;';
      entities['243'] = '&oacute;';
      entities['244'] = '&ocirc;';
      entities['245'] = '&otilde;';
      entities['246'] = '&ouml;';
      entities['247'] = '&divide;';
      entities['248'] = '&oslash;';
      entities['249'] = '&ugrave;';
      entities['250'] = '&uacute;';
      entities['251'] = '&ucirc;';
      entities['252'] = '&uuml;';
      entities['253'] = '&yacute;';
      entities['254'] = '&thorn;';
      entities['255'] = '&yuml;';
    }
    
    // ascii decimals to real symbols
    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        histogram[symbol] = entities[decimal];
    }
    
    return histogram;
}
function inArray(arr, val){
  for(var i in arr){
  		if(arr[i] == val){
  			//alert(this[i]+" =="+ v);
  			return true;
  		}
  	}
  	return false;
}

function fetchInputsRow(tab, nms, validate){
	 
	var res = new Array();
	var rowCount=0;
	for(var i=0; i<tab.tBodies[0].rows.length; i++){
		var inps=new Array();
		var sls=new Array();
		inps = tab.tBodies[0].rows[i].getElementsByTagName('input');
		sls =  tab.tBodies[0].rows[i].getElementsByTagName('select');
		var found=false;
		var ob = new Object();
		for(var j=0; j<inps.length; j++){
			if(inps[j].getAttribute('name')!=undefined){
				if(inArray(nms, inps[j].getAttribute('name') )){ 
					found=true;
					//res[i]=new Object();
					var foundName=inps[j].getAttribute('name');
					switch(inps[j].getAttribute('type')){
						case "text" :
							ob[foundName]=inps[j].value;
						break;
						case "checkbox" :
							if(inps[j].checked)
								ob[foundName]=1;
							else
								ob[foundName]=0;	
						break;
						default:
							ob[foundName]=inps[j].value;
						break;
					}
				}
			}
		}//koniec petli dla inputow
		for(var j=0;j<sls.length; j++){
			if(sls[j].getAttribute('name')!=undefined){
				if(inArray(nms, sls[j].getAttribute('name') )){
					found=true;
					var foundName=sls[j].getAttribute('name');
					ob[foundName]=sls[j].options[sls[j].selectedIndex].value;
					
				}
			}	
		}
		
		res[rowCount]=ob;
		if(found)
			rowCount++;
	}
	var valid=true;
	if(validate==true){ // w kazdym wierszu musza byc wszystkie wartosci z pol nms
		for(var i=0;i<res.length;i++){
			for(var j=0; j<nms.length; j++){
				var isThisEmpty=eval("(res[i]."+nms[j]+");");
				if(isThisEmpty==undefined){alert('warning');
					return new Array(); // return empty array if undefined found
				}	
			}
		}
	}
	
	return res;
}
function concatRowVals(obArr, colName){
	var delimiter="|";
		
	var ret="";
	for(var i =0 ; i<obArr.length ; i++){
		if(i>0)ret+=delimiter;
		var tmpStr=eval("obArr[i]."+colName)+""; // dodaj na koncu pusty string zeby przekonwertowac na typ string i uzyc metody replace ponizej
		
		ret+=tmpStr.replace(/\|/g, " "); // wymien delimiter na spacje ( na wszelki wypadek )
	}
	return ret;
}
function skeletonize(str){
	// na potrzeby bezpiecznego przesylania danych 
	return escape(encodeURIComponent(str+" ")); // spacja specjalnie
}
function exit( status ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brettz9.blogspot.com)
    // +      input by: Paul
    // +   bugfixed by: Hyam Singer (http://www.impact-computing.com/)
    // +   improved by: Philip Peterson
    // +   bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
    // %        note 1: Should be considered expirimental. Please comment on this function.
    // *     example 1: exit();
    // *     returns 1: null
 
    var i;
 
    if (typeof status === 'string') {
        alert(status);
    }
 
    //this.window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);
 
    var handlers = [
        'copy', 'cut', 'paste',
        'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
        'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
        'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
    ];
    
    function stopPropagation (e) {
        e.stopPropagation();
        // e.preventDefault(); // Stop for the form controls, etc., too?
    }
    for (i=0; i < handlers.length; i++) {
     //   this.window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
    }
 
    if (this.window.stop) {
        this.window.stop();
    }
    
   // throw '';
   window.stop();
}
function concatSelectValues(sel, deli){
	if(typeof sel == "undefined")
		return;
	var ccv=""; // concatedvalues	
	var selectedCount=0;
	for(var i=0; i<sel.options.length; i++){
		if(sel.options[i].selected){
			if(selectedCount>0)
				ccv+=deli;
		ccv +=sel.options[i].value;
		selectedCount++;
		}
	}
	if(selectedCount==0)
		return false;
	else	
		return ccv;
}
function getSelectValue(sel){
	return sel.options[sel.selectedIndex].value;
	
}
function roundNumber(num, dec) {
	var result = Math.round( Math.round( num * Math.pow( 10, dec + 1 ) ) / Math.pow( 10, 1 ) ) / Math.pow(10,dec);
	return result;
}
function validDate(d, dateFormat){
	//alert(d+" "+dateFormat);
	//d = date to check
	var valid=true;
	switch(dateFormat){
		case "dd-mm-yyyy" :
			var da=d.split("-");
			if(da.length<3)valid=false;
			if(da[0]<1 || da[0]>31)valid=false;
			if(da[1]<1 || da[1]>12)valid=false;
			if(da[2]<1890 || da[2]>2200)valid=false;
		break;
		case "mm-yyyy" :
			var da=d.split("-");
			if(da.length<2)valid=false;
			if(da[0]<1 || da[0]>12)valid=false;
			if(da[1]<1890 || da[1]>2200)valid=false;
		break;
		case "yyyy-mm-dd":
		//ToDo....
		break;
		
	}
	return valid;
}

function info(infoTxt,dlgTitle, showBtn, isModal,width){
	var dlgWidth=300;
		if(width!=undefined)	
			dlgWidth=width;
			
	if(document.getElementById('dlgDialog')==undefined){
		$('body').append("<div id='dlgDialog'>"+infoTxt+"</div>");
		
		if(showBtn==undefined)
			showBtn=true;
		if(isModal==undefined)
			isModal=true;
		
		if(dlgTitle==undefined)
			dlgTitle="";
		
		
		
		if(showBtn){	
			$("#dlgDialog").dialog({
				modal:isModal,
				title:dlgTitle,
				width:dlgWidth,
				buttons:{
					ok:function(){
						$(this).remove();
					}
				}
			});
		}else{
			$("#dlgDialog").dialog({
				modal:isModal,
				width:dlgWidth,
				title:dlgTitle
				
			});
			
		}	
		
	}else{
		$("#dlgDialog").html(infoTxt);
		$("#dlgDialog").dialog('open');
	}	
}
function windowDialog(infoTxt,dlgTitle, showBtn, isModal,width){
	var dlgWidth=900;
		if(width!=undefined)	
			dlgWidth=width;
			
	if(document.getElementById('dlgWindow')==undefined){
		$('body').append("<div id='dlgWindow'>"+infoTxt+"</div>");
		
		if(showBtn==undefined)
			showBtn=true;
		if(isModal==undefined)
			isModal=true;
		
		if(dlgTitle==undefined)
			dlgTitle="";
		
		
		
		if(showBtn){	
			$("#dlgWindow").dialog({
				modal:isModal,
				title:dlgTitle,
				width:dlgWidth,
				buttons:{
					ok:function(){
						$(this).dialog('close');
					}
				}
			});
		}else{
			$("#dlgWindow").dialog({
				modal:isModal,
				width:dlgWidth,
				title:dlgTitle
				
			});
			
		}	
		
	}else{
		$("#dlgWindow").html(infoTxt);
		$("#dlgWindow").dialog('open');
		$("#dlgWindow").dialog('option', 'title', dlgTitle);
	}	
}
function errInfo(infoTxt,dlgTitle){
        $(".sIFR-replaced").hide();
	if(document.getElementById('dlgDialogWarn')==undefined){
		$('body').append("<div id='dlgDialogWarn'><span style='color:darkred; '><strong>"+infoTxt+"</strong></span></div>");
		if(dlgTitle==undefined){
			dlgTitle="Błąd";
		}else{	
			dlgTitle=dlgTitle;
		}	
		$("#dlgDialogWarn").dialog({
			modal:1,
			title:dlgTitle,
			zIndex:999,
			//stack:true,
			dialogClass:'errorDialog',
			buttons:{
				"ok":function(){
					$(this).remove();
                                        $(".sIFR-replaced").show();
				}
			},
                        close: function(){
                                    $(".sIFR-replaced").show();
                                }
		});
	}else{
		$("#dlgDialogWarn").html(infoTxt);
		$("#dlgDialogWarn").dialog('open');
	}	
}


function ask(infoTxt,dlgTitle, onYes, onNo){
	if(document.getElementById('dlgDialogAsk')==undefined){
		$('body').append("<div id='dlgDialogAsk'>"+infoTxt+"</div>");
		if(dlgTitle==undefined && dlgTitle!="")
			dlgTitle="<span>Pytanie</span>";
		else
			dlgTitle="<span>"+dlgTitle+"</span>";	
		$("#dlgDialogAsk").dialog({
			modal:true,
			title:dlgTitle,
			zIndex:998,
			buttons:{
				
				"nie":function(){
					$(this).dialog('close');
				},
				"tak":function(){
					//eval(onYes);
					onYes.call(this,null);
					$(this).remove();
				}	
			},
			close:function(){
				if(onNo!=undefined){
						onNo.call(this, null);	
					}
				}
		});
	}else{
		$("#dlgDialogAsk").html(infoTxt);
		$("#dlgDialogAsk").dialog('open');
	}	
}
function showLastWindowDialog(){
	$("#dlgWindow").dialog('open');
}
function hideEditDialog(){
	$("#dlgDialogEdit").dialog('close');
}

$(function(){// zainicjalizuj editDialog
editDialog('');hideEditDialog(); // inicjalizacja - stworz dialog i odrazu go ukryj
});

function editDialog(infoTxt,dlgTitle, onYes, onNo, width){
	var dlgWidth=300;
	if(width!=undefined)
		dlgWidth=width;	
	
	if(dlgTitle==undefined && dlgTitle!="")
		dlgTitle="Edycja";
	//else
	//	dlgTitle="<span style='color:red'>"+dlgTitle+"</span>";		
		
	if(document.getElementById('dlgDialogEdit')==undefined){
		$('body').append("<div id='dlgDialogEdit'>"+infoTxt+"</div>");
		var b2='abc';
		$("#dlgDialogEdit").dialog({
			modal:false,
			title:dlgTitle,
			width:dlgWidth,
			zIndex:900,
			//stack:true,
			buttons:{
				
				"anuluj":function(){
					if(onNo!=undefined && onNo!=null)
						onNo.call(this,null);
					$(this).dialog('close');
				},
				"zapisz":function(){
					//eval(onYes);
					onYes.call(this,null);
					$(this).dialog('close');
				}	
			},
			close:function(){
				if(onNo!=undefined){
						onNo.call(this, null);	
					}
				}
		});
	}else{
		$("#dlgDialogEdit").dialog('option', 'width', dlgWidth);
		$("#dlgDialogEdit").dialog('option', 'title', dlgTitle);
		$("#dlgDialogEdit").dialog('option', 'buttons', { 
				"anuluj":function(){
					$(this).dialog('close');
					if(onNo!=undefined && onNo!=null)
						onNo.call(this,null);
				},
				"zapisz":function(){
					//eval(onYes);
					$(this).dialog('close');
					onYes.call(this,null);
				}	
		});
		$("#dlgDialogEdit").html(infoTxt);
		$("#dlgDialogEdit").dialog('open');
	}	
	
}function showLastEditDialog(){
	$("#dlgDialogEdit").dialog('open');
}

//
function editDialog2(infoTxt,dlgTitle, onYes, onNo, width){
	var dlgWidth=300;
	if(width!=undefined)
		dlgWidth=width;	
	
	if(dlgTitle==undefined && dlgTitle!="")
		dlgTitle="Edycja";
	//else
	//	dlgTitle="<span style='color:red'>"+dlgTitle+"</span>";		
		
	if(document.getElementById('dlgDialogEdit2')==undefined){
		$('body').append("<div id='dlgDialogEdit2'>"+infoTxt+"</div>");
		var b2='abc';
		$("#dlgDialogEdit2").dialog({
			modal:false,
			title:dlgTitle,
			width:dlgWidth,
			zIndex:920,
			//stack:true,
			buttons:{
				
				"anuluj":function(){
					if(onNo!=undefined && onNo!=null)
						onNo.call(this,null);
					$(this).dialog('close');
				},
				"zapisz":function(){
					//eval(onYes);
					onYes.call(this,null);
					$(this).dialog('close');
				}	
			},
			close:function(){
				if(onNo!=undefined){
						onNo.call(this, null);	
					}
				}
		});
	}else{
		$("#dlgDialogEdit2").dialog('option', 'width', dlgWidth);
		$("#dlgDialogEdit2").dialog('option', 'title', dlgTitle);
		$("#dlgDialogEdit2").dialog('option', 'buttons', { 
				"anuluj":function(){
					$(this).dialog('close');
					if(onNo!=undefined && onNo!=null)
						onNo.call(this,null);
				},
				"zapisz":function(){
					//eval(onYes);
					$(this).dialog('close');
					onYes.call(this,null);
				}	
		});
		$("#dlgDialogEdit2").html(infoTxt);
		$("#dlgDialogEdit2").dialog('open');
	}	
	
}function showLastEditDialog2(){
	$("#dlgDialogEdit2").dialog('open');
}

function validateFormPart(selector){
	var unfilled=0;
	$(selector).each(function(i){
		if($(this).attr('req')==1){
			if($(this).val().trim()==""){ //alert($(this).attr('id'));
				unfilled++;
				$(this).css("background", "red");
				$(this).keydown(function(){
					$(this).css("background", "white");
				});
				$(this).click(function(){
					$(this).css("background", "white");
				});
			}	
		}
	});
	return unfilled;
}
function ymd2dmy(d){
		var da=d.split("-");
		var newDate=da[2]+"-"+da[1]+"-"+da[0];
		return newDate;	
}
//JQUERY UI SETTINGS
$.datepicker.setDefaults({
	dateFormat: 'dd-mm-yy',
	firstDay: 1,
	monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzsesień','Październik','Listopad','Grudzień'],
	monthNamesShort:['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzsesień','Październik','Listopad','Grudzień'],
	dayNamesMin: ['Nie', 'Pon', 'Wt', 'Śr', 'Czw', 'P', 'Sob'],
	changeMonth:1,
	changeYear:1 
}); 

function validNip(nip){ 
	nip=nip.trim();
	
 	// numer 10 cyfrowy
	if(nip.length!=10)
		return false;
	else
		return true;
}
function validPesel(pesel){
	// numer 11 cyfrowy
	if(pesel.length!=11)	
		return false;
	else
		return true;
}
function setMaxTextLength(el, len){
	// kontroluje max ilosc znakow w elemencie ( np. texarea ktory nie obsluguje maxlength)
	if(el.value.length>len){
		info("Przekroczono maksymalną ilość znaków "+len+".<br>Nadmiar tekstu zostanie usunięty", "Uwaga");
		var str = el.value.substr(0, len);
		el.value = str;
	}	
}
function addAdToClipboard(adId){
	advAJAX.post({
		currentModuleClassName:"ModAdClipboard",
		
		parameters:{
			run:"addAdToClipboard",
			autoParams:1,
			param1:adId
		},
		onSuccess:function(obj){}
		
});
}
function removeAdFromClipboard(adId){
	advAJAX.post({
		currentModuleClassName:"ModAdClipboard",
		
		parameters:{
			run:"removeAdFromClipboard",
			autoParams:1,
			param1:adId
		},
		onSuccess:function(obj){}
		
	});	
}

function validatePhone(number) {
    var phoneReg = /^((\+|00)?[0-9]{2})? ?(([0-9]{2} ?[0-9]{3} ?[0-9]{2} ?[0-9]{2})|([0-9]{3} ? [0-9]{3} ?[0-9]{3}))$/;
    if (!phoneReg.test(number)) {
        return false;
    } else {
        return true;
    }
//    number = number.toString();
//    if (!parseInt((number.replace(/[ -\+]/gi,'')))) {
//        return false;
//    } else {
//        return true;
//    }
}


function validateEmail(email) {
	var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
	if (!emailReg.test(email))
			return false;
		else
			return true;
}

function validateAlpha(txt) {
    var alphaReg = /^[qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_\-\. ]*$/;
    if (!alphaReg.test(txt))
			return false;
		else
			return true;
}

function validateAlphaNum(txt) {
    var alphaNumReg = /^[01234567890\(\)\?,\.@qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_\- ]*$/;
    if (!alphaNumReg.test(txt))
			return false;
		else
			return true;
}

function validateInt(num) {
    if (!parseInt(num)) {
        return false;
    } else {
        return true;
    }
}

function validateFloat(num) {
    if (!parseFloat(num)) {
        return false;
    } else {
        return true;
    }
}

function validatePassword(txt) {
    var passReg = /^.*(?=.{6,})(?=.*\d).*$/;
    if (!passReg.test(txt)) {
        return false;
    } else {
        return true;
    }
}

function validatePostal(code) {    
    var postalReg = /^[0-9]{2}-[0-9]{3}$/;
    if (!postalReg.test(code)) {;
        return false;
    } else {
        return true;
    }
}

function fieldFocus(el,fieldDesc) {
	$(el).focus(function(){
		if($(el).val()==fieldDesc){
			$(el).val("");
			$(".bottomWidgetsContents p span").slideUp("slow");
		}
	});
	$(el).blur(function(){
		if($(el).val()==""){
			$(el).val(fieldDesc);
			}
	});
}

function stripLineBreaks(string) {
    return string.replace(/(['"\\\/\n\r\t]{1})/g,"\\$1");
}

function sLB(string) {
    return stripLineBreaks(string);
}


function strip_tags (input, allowed) {
    // Strips HTML and PHP tags from a string
    //
    // version: 1102.614
    // discuss at: http://phpjs.org/functions/strip_tags
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Luke Godfrey
    // +      input by: Pul
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +      input by: Alex
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Marc Palau
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Eric Nagel
    // +      input by: Bobby Drake
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Tomasz Wesolowski
    // +      input by: Evertjan Garretsen
    // +    revised by: Rafał Kukawski (http://blog.kukawski.pl/)
    // *     example 1: strip_tags('<p>Kevin</p> <b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
    // *     example 4: strip_tags('1 < 5 5 > 1');
    // *     returns 4: '1 < 5 5 > 1'
    // *     example 5: strip_tags('1 <br/> 1');
    // *     returns 5: '1  1'
    // *     example 6: strip_tags('1 <br/> 1', '<br>');
    // *     returns 6: '1  1'
    // *     example 7: strip_tags('1 <br/> 1', '<br><br/>');
    // *     returns 7: '1 <br/> 1'
    allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
        commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
    return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
        return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
    });
}

function define (name, value) {
    // Define a new constant
    //
    // version: 903.3016
    // discuss at: http://phpjs.org/functions/define
    // +      original by: Paulo Freitas
    // +       revised by: Andrea Giammarchi (http://webreflection.blogspot.com)
    // + reimplemented by: Brett Zamir (http://brett-zamir.me)
    // *        example 1: define('IMAGINARY_CONSTANT1', 'imaginary_value1');
    // *        results 1: IMAGINARY_CONSTANT1 == 'imaginary_value1'
    var defn, replace, script, that = this,
        d = this.window.document;
    var toString = function (name, value) {
        return 'const ' + name + '=' + (/^(null|true|false|(\+|\-)?\d+(\.\d+)?)$/.test(value = String(value)) ? value : '"' + replace(value) + '"');
    };
    try {
        eval('const e=1');
        replace = function (value) {
            var replace = {
                "\x08": "b",
                "\x0A": "\\n",
                "\x0B": "v",
                "\x0C": "f",
                "\x0D": "\\r",
                '"': '"',
                "\\": "\\"
            };
            return value.replace(/\x08|[\x0A-\x0D]|"|\\/g, function (value) {
                return "\\" + replace[value];
            });
        };
        defn = function (name, value) {
            if (d.createElementNS) {
                script = d.createElementNS('http://www.w3.org/1999/xhtml', 'script');
            } else {
                script = d.createElement('script');
            }
            script.type = 'text/javascript';
            script.appendChild(d.createTextNode(toString(name, value)));
            d.documentElement.appendChild(script);
            d.documentElement.removeChild(script);
        };
    } catch (e) {
        replace = function (value) {
            var replace = {
                "\x0A": "\\n",
                "\x0D": "\\r"
            };
            return value.replace(/"/g, '""').replace(/\n|\r/g, function (value) {
                return replace[value];
            });
        };
        defn = (this.execScript ?
        function (name, value) {
            that.execScript(toString(name, value), 'VBScript');
        } : function (name, value) {
            eval(toString(name, value).substring(6));
        });
    }
    defn(name, value);
}

/* str_replace
*
* This function returns a string or an array with all occurrences of
* [search] in [subject] replaced with the given [replace] value.
* If you don't need fancy replacing rules (like regular expressions), you should always use this function.
*
* @param	string	search
* @param	string	replace
* @param	string	string
*/
function str_replace (search, replace, subject)
{
var result = "";
var  oldi = 0;
for (i = subject.indexOf (search); i > -1; i = subject.indexOf (search, i))
{
result += subject.substring (oldi, i);
result += replace;
i += search.length;
oldi = i;
}
return result + subject.substring (oldi, subject.length);
}


function drawOverlay(cont, ovrId) {
    if (ovrId != undefined) {ovrId = "id='"+ovrId+"'";} else {ovrId="";}
    var overlay = "<div "+ ovrId+" class='overlay'><div><img src='templates/piecyki/img/ajax-loader.gif' /></div></div>"
    var contPos = $(cont).css("position");
    if (contPos == "static");
    $(cont).css("position", "relative");
    $(cont).prepend(overlay);
}
