if (typeof jQuery != 'undefined') {  
    $(function() {
            createFieldTabs();
    });
}

// constants for fAsk function
var ASK_MESS_ee = "Kas oled kindel?";
var ASK_MESS_et = ASK_MESS_ee;
var ASK_MESS_ = ASK_MESS_ee;
var ASK_MESS_en = "Are you sure?";

var ASK_MESS_DELETE_ee = "Kas oled kindel, et soovid kustutada?";
var ASK_MESS_DELETE_et = ASK_MESS_DELETE_ee;
var ASK_MESS_DELETE_ = ASK_MESS_DELETE_ee;
var ASK_MESS_DELETE_en = "Are you sure you want to delete?";

var ASK_MESS_SAVECHECK_ee = "Andmeid on muudetud. Kas salvestan?";
var ASK_MESS_SAVECHECK_et = ASK_MESS_SAVECHECK_ee;
var ASK_MESS_SAVECHECK_ = ASK_MESS_SAVECHECK_ee;
var ASK_MESS_SAVECHECK_en = "Data has been changed. Save?";

var ASK_MESS_DONECHECK_ee = "Andmeid ei saa salvestada, sest kogu info pole veel kohale jõudnud.\nPalun oodake!";
var ASK_MESS_DONECHECK_et = ASK_MESS_DONECHECK_ee;
var ASK_MESS_DONECHECK_ = ASK_MESS_DONECHECK_ee;
var ASK_MESS_DONECHECK_en = "Cannot save. Please wait!";

var ASK_MESS_LINKSAVEAS_ee = "Kas oled kindel, et soovid luua uut kirjet olemasolevte andmetega?";
var ASK_MESS_LINKSAVEAS_et = ASK_MESS_LINKSAVEAS_ee;
var ASK_MESS_LINKSAVEAS_ = ASK_MESS_LINKSAVEAS_ee;
var ASK_MESS_LINKSAVEAS_en = "Are you sure you want to create new record with current data?";

//////////////////////////////////////////////////////////////////////////////////////
// GENERAL PROCEDURES
//////////////////////////////////////////////////////////////////////////////////////
/*
 * Funktsioon mis peidab/näitab vasakumenüüd
 * Lisanud Kullar Kert 18.02.2008
 * var nahtav string - Nimi mis on kui menüü on peidetud ja soovid et oleks nähtav
 * var peidetud string - Nimi mis on kui menüü on nähtav ja soovid et oleks peidetud
 */
function ShowHideMenu(nahtav,peidetud){
	//Nimi mis on näha kui menüü on peidetud või nähtav
	var stat = document.getElementById('status_nimi').innerHTML;

	if(stat==peidetud){
		document.getElementById('leftmenu').style.display='none';
		document.getElementById('status_nimi').innerHTML = nahtav;
		document.getElementById('menu_stat').value='hidden';
	}else{
		document.getElementById('status_nimi').innerHTML = peidetud;
		document.getElementById('leftmenu').style.display='inline';
		document.getElementById('menu_stat').value='visible';
	}
}

function createFieldTabs(){
	if($('.itabs').length>0){
		$('.itabs').show();
		$('.itabs li:first-child').removeClass('stab').addClass('curtab');
		
		//Lets show first field
		$('.itabsf').each(function(){
			if($(this).hasClass('r-1')){
				$(this).show();
			}else{
				$(this).hide();
			}
		})
		
		//Tabs click
		$('.itabs li a').click(function(){
			var rel = $(this).prop('rel');
			var trRow = rel.substr(3);
			$('.'+trRow).hide();
			$('#'+rel).show();
			$(this).parent().parent().children().removeClass("curtab").addClass("stab");                 
			$(this).parent().toggleClass("curtab").toggleClass("stab");
		});
	}
}

/*
 * Kullari leitud script, mis suurendab automaatselt textareat, kui trükitakse rohkem ridu, kui algselt määratud
 * Lisanud AJ 09.11.2007
 */
function expandTextArea(oTextArea){
	if (navigator.appName.indexOf("Microsoft Internet Explorer") == 0){
		return;
	}
	while (oTextArea.scrollHeight > oTextArea.offsetHeight){
		oTextArea.rows++;
	}
}

function passwordChanged(nr) {
	if(!nr) nr=6;
	var strength = document.getElementById('strength');
	var strongRegex = new RegExp("^(?=.{"+nr+",})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
	var mediumRegex = new RegExp("^(?=.{"+nr+",})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
	var enoughRegex = new RegExp("(?=.{"+nr+",}).*", "g");
	var pwd = document.getElementById("PASSW[0]");
	if (pwd.value.length==0) {
		if (lang=='en') strength.innerHTML = 'Type Password';
		else strength.innerHTML = 'Sisesta parool';
	} else if (false == enoughRegex.test(pwd.value)) {
		if (lang=='en') strength.innerHTML = 'More Characters';
		else strength.innerHTML = 'Veel t&auml;rke';
	} else if (strongRegex.test(pwd.value)) {
		if (lang=='en') strength.innerHTML = '<span style="color:green">Strong!</span>';
		else strength.innerHTML = '<span style="color:green">Tugev!</span>';
	} else if (mediumRegex.test(pwd.value)) {
		if (lang=='en') strength.innerHTML = '<span style="color:orange">Medium!</span>';
		else strength.innerHTML = '<span style="color:orange">Keskmine!</span>';
	} else {
		if (lang=='en') strength.innerHTML = '<span style="color:red">Weak!</span>';
		else strength.innerHTML = '<span style="color:red">N&otilde;rk!</span>';
	}
}

function fDoIt(act,args){
	if(!act) act='emptyChoice';
	document.getElementById('act').value=act;
	document.getElementById('actargs').value=args;
	mySubmit();
}

function fDefaultListValues() {
	var filters=document.getByElementName('filter');
	alert(filters);
}

function fMCopyToText(from, to) {
	from=document.getElementById(from);
	to=document.getElementById(to);
	to.value='' // väli tühjaks
	for(var i=0; i<from.options.length; i++) {  //kogu selecti ulatuses
		if (from.options[i].selected==true) { // kui on selectitud
			to.value+=from.options[i].value; // tekstiväljale
			to.value+=':'; // eraldaja lõppu
		}
	}
	to.value=to.value.substring(0,to.value.length-1);
}

function fFocusIn(t) {
	if (t.type!="select-one") {
		t.className=t.className+'focus';
	}
	document.getElementById('focusf').value=t.id;
}

function fFocusOut(t) {
	if (t.type!="select-one") {
		t.className=t.className.substring(0,t.className.length-5);
	}
}

function fReturnData(field,text,value) {
	//alert(field+":"+text+":"+value);
	var sel=document.getElementById(field);
	//alert(sel.type);
	if(sel.type=='select' || sel.type=='select-one'){
		sel.options[sel.options.length] = new Option(text,value);
		sel.selectedIndex=sel.options.length-1;
	}else {
		sel.value = value;
	}
	sel.onchange();
	return;
}

function fYearSelection(type) {
	var byear=document.getElementById('bYear');
 	var nDate=new Date();
	if (type=='next') {
		byear.value=nDate.getFullYear()+1;
	} else if (type=='today') {
		byear.value=nDate.getFullYear();
	} else if (type=='prev') {
		byear.value=nDate.getFullYear()-1;
	}
}

function fgetCurrentTime(){
	var currentTime = new Date();
	currHours = currentTime.getHours();
	currMins = currentTime.getMinutes();
	if (currMins < 10)
		currMins = "0" + currMins
	currTime = currHours+":"+currMins;
	return currTime;
}

function fgetCurrentDate(){
	var currentTime = new Date();
	currDat = currentTime.getDate();
	currMonth = currentTime.getMonth()+1;
	currYear = currentTime.getFullYear();
	if (currMonth < 10)
		currMonth = "0" + currMonth
	if (currDat < 10)
		currDat = "0" + currDat
	currDate = currDat+"."+currMonth+"."+currYear;
	return currDate;
}

function fDateSelection(type) {
 	var bDate=new Date();
 	var eDate=new Date();
	if (type=='today') {
		eDate=bDate;
	} else if (type=='yesterday') {
		bDate.setTime(bDate.getTime()-1*24*60*60*1000);
		eDate=bDate;
	} else if (type=='week') {
		if (bDate.getDay()==0) { DofW=7 } else { DofW=bDate.getDay() }
		bDate.setTime(eDate.getTime()-(DofW-1)*24*60*60*1000);
		eDate.setTime(bDate.getTime()+6*24*60*60*1000);
	} else if (type=='prevweek') {
		if (bDate.getDay()==0) { DofW=7 } else { DofW=bDate.getDay() }
		bDate.setTime(eDate.getTime()-(6+DofW)*24*60*60*1000);
		eDate.setTime(bDate.getTime()+6*24*60*60*1000);
	} else if (type=='month') {
 		bDate.setDate(1);
		eDate.setTime(bDate.getTime()+((32-bDate.getDate())*86400000));
		eDate.setTime(eDate.getTime()-(eDate.getDate()*86400000));
	} else if (type=='prevmonth') {
 		bDate.setDate(1);
 		bDate.setMonth(bDate.getMonth()-1);
		eDate.setTime(bDate.getTime()+((32-bDate.getDate())*86400000));
		eDate.setTime(eDate.getTime()-(eDate.getDate()*86400000));
	} else if (type=='quarter') {
		var tuleb;
		if(bDate.getMonth()<=2) tuleb=0;
		else if(bDate.getMonth()<=5) tuleb=3;
		else if(bDate.getMonth()<=8) tuleb=6;
		else if(bDate.getMonth()<=11) tuleb=9;
 		bDate.setDate(1);
		bDate.setMonth(tuleb);
		eDate.setMonth(tuleb+3);
		eDate.setDate(0);
		eDate.setMonth(tuleb-1+3);
		if(eDate.getMonth()==11) eDate.setYear(eDate.getFullYear()+1);
	} else if (type=='prevquarter') {
		var tuleb;
		if(bDate.getMonth()<=2) tuleb=0;
		else if(bDate.getMonth()<=5) tuleb=3;
		else if(bDate.getMonth()<=8) tuleb=6;
		else if(bDate.getMonth()<=11) tuleb=9;
 		bDate.setDate(1);
		bDate.setMonth(tuleb-3);
		eDate.setMonth(tuleb);
		eDate.setDate(0);
		eDate.setMonth(tuleb-1);
		if(eDate.getMonth()==11) eDate.setYear(eDate.getFullYear()+1);
	} else if (type=='year') {
 		bDate.setDate(1); bDate.setMonth(0);
 		eDate.setMonth(11); eDate.setDate(31);
	} else if (type=='prevyear') {
 		bDate.setDate(1); bDate.setMonth(0);
 		eDate.setMonth(11); eDate.setDate(31);
		bDate.setYear(bDate.getFullYear()-1);
		eDate.setYear(bDate.getFullYear());
	} else if (type=='todayweek') {
		eDate.setTime(bDate.getTime()+7*24*60*60*1000);
	} else if (type=='todaymonth') {
		eDate.setTime(bDate.getTime()+30*24*60*60*1000);
	}
	if (type!="other") {
		if (type) {
		  document.forms[0].tBDate.value=bDate.getDate()+"."+(bDate.getMonth()+1)+"."+bDate.getFullYear();
		  document.forms[0].tEDate.value=eDate.getDate()+"."+(eDate.getMonth()+1)+"."+eDate.getFullYear();
		} else {
		  document.forms[0].tBDate.value='';
		  document.forms[0].tEDate.value='';
		}
	}
}

function fDateSelection2(type,tBDate,tEDate) {
 	var bDate=new Date();
 	var eDate=new Date();
	if (type=='today') {
		eDate=bDate;
	} else if (type=='week') {
		if (bDate.getDay()==0) { DofW=7 } else { DofW=bDate.getDay() }
		bDate.setTime(eDate.getTime()-(DofW-1)*24*60*60*1000);
		eDate.setTime(bDate.getTime()+6*24*60*60*1000);
	} else if (type=='prevweek') {
		if (bDate.getDay()==0) { DofW=7 } else { DofW=bDate.getDay() }
		bDate.setTime(eDate.getTime()-(6+DofW)*24*60*60*1000);
		eDate.setTime(bDate.getTime()+6*24*60*60*1000);
	} else if (type=='month') {
 		bDate.setDate(1);
		eDate.setTime(bDate.getTime()+((32-bDate.getDate())*86400000));
		eDate.setTime(eDate.getTime()-(eDate.getDate()*86400000));
	} else if (type=='prevmonth') {
 		bDate.setDate(1);
 		bDate.setMonth(bDate.getMonth()-1);
		eDate.setTime(bDate.getTime()+((32-bDate.getDate())*86400000));
		eDate.setTime(eDate.getTime()-(eDate.getDate()*86400000));
	} else if (type=='quarter') {
		var tuleb;
		if(bDate.getMonth()<=2) tuleb=0;
		else if(bDate.getMonth()<=5) tuleb=3;
		else if(bDate.getMonth()<=8) tuleb=6;
		else if(bDate.getMonth()<=11) tuleb=9;
 		bDate.setDate(1);
		bDate.setMonth(tuleb);
		eDate.setMonth(tuleb+3);
		eDate.setDate(0);
		eDate.setMonth(tuleb-1+3);
		if(eDate.getMonth()==11) eDate.setYear(eDate.getFullYear()+1);
	} else if (type=='prevquarter') {
		var tuleb;
		if(bDate.getMonth()<=2) tuleb=0;
		else if(bDate.getMonth()<=5) tuleb=3;
		else if(bDate.getMonth()<=8) tuleb=6;
		else if(bDate.getMonth()<=11) tuleb=9;
 		bDate.setDate(1);
		bDate.setMonth(tuleb-3);
		eDate.setMonth(tuleb);
		eDate.setDate(0);
		eDate.setMonth(tuleb-1);
		if(eDate.getMonth()==11) eDate.setYear(eDate.getFullYear()+1);
	} else if (type=='year') {
 		bDate.setDate(1); bDate.setMonth(0);
 		eDate.setMonth(11); eDate.setDate(31);
	} else if (type=='prevyear') {
 		bDate.setDate(1); bDate.setMonth(0);
 		eDate.setMonth(11); eDate.setDate(31);
		bDate.setYear(bDate.getFullYear()-1);
		eDate.setYear(bDate.getFullYear());
	} else if (type=='todayweek') {
		eDate.setTime(bDate.getTime()+7*24*60*60*1000);
	} else if (type=='todaymonth') {
		eDate.setTime(bDate.getTime()+30*24*60*60*1000);
	}
	if (type!="other") {
		if (type) {
		  document.getElementById(tBDate).value=bDate.getDate()+"."+(bDate.getMonth()+1)+"."+bDate.getFullYear();
		  document.getElementById(tEDate).value=eDate.getDate()+"."+(eDate.getMonth()+1)+"."+eDate.getFullYear();
		} else {
		  document.getElementById(tBDate).value='';
		  document.getElementById(tEDate).value='';
		}
	}
}

function fSetFilters(f) {
	// procedure will be called if we change filters in list
	var lf=document.getElementById('lastfilter');
	var pf=document.getElementById('prevfilter');
	if (f!=lf.value) {
		pf.value=lf.value;
		lf.value=f;
	}
}

function fSetPage(n) {
	// procedure will be called to move another page in navigation
	var p=document.getElementById('page');
	if (n=='begin') {
		if (p.selectedIndex==0) {
			alert('Oled juba esimesel lehel!');
			return false;
		} else {
			p.selectedIndex=0;
		}
	} else if (n=='prev') {
		if (p.selectedIndex==0) {
			alert('Oled juba esimesel lehel!');
			return false;
		} else {
			p.selectedIndex=p.selectedIndex-1;
		}
	} else if (n=='next') {
		if (p.selectedIndex==p.length-1) {
			alert('Oled juba viimasel lehel!');
			return false;
		} else {
			p.selectedIndex=p.selectedIndex+1;
		}
	} else if (n=='end') {
		if (p.selectedIndex==p.length-1) {
			alert('Oled juba viimasel lehel!');
			return false;
		} else {
			p.selectedIndex=p.length-1;
		}
	}
	return true;
}

function fCalcPages(r,sp) { // r=records count, sp=currently selcted page
	// procedure will be called to calculate pages count for navigation
	var p=document.getElementById('page');
	var s=document.getElementById('show');
	var tt='';
	// alert(s.value);
	p.options.length=0;
	if (s.value!=9) { // if 9 then we have whole list
		var f=false; // if we found existing page
		var palju= Math.ceil(r/s.value);
		var max= palju;
		if(palju>30) palju=30; // et ei teekse liigselt - kes neid ikka läbi käib
		for (var i=0; i< palju; i++) {
			tt= (i*s.value)+","+s.value;
			p.options[i] = new Option(i+1,tt);
			if (sp==tt) { f=true; }
		}
		if(max>palju){ // kui on rohkem
			tt= ((max-1)*s.value)+","+s.value;
			p.options[i] = new Option(max,tt);
			if (sp==tt) { f=true; }
		}
		if (f) { p.value=sp; }
	} else {
		p.options[0] = new Option(1,1);
	}
	return;
}

function fDoneCheck(lang, txt2) {
	var d=document.getElementById('done');
	if (d!=null) {
		if (d.value==1) {
			return true;
		} else {
			if(txt2) {
				alert(txt2);
			} else if (lang=='en') {
				alert('Cannot save. Please wait!');
			} else {
				alert('Andmeid ei saa salvestada, sest kogu info pole veel kohale jõudnud.\nPalun oodake!');
			}
		}
	}
	return false;
}

function fSaveCheck(lang, txt2, subdel, notask) {
	var c=document.getElementById('changed');
	var sa=document.getElementById('subact');
	if(subdel) var sub=document.getElementById('subdelchecked');
	else var sub=0;
	if ((c==null || c.value==0 || c.value=='') && (sub==0 || sub.value==0)) {
		return true;
	} else {
		var a= false;
		if(notask){
			a= true;
		} else if (txt2) {
			a=confirm(txt2);
		} else if (lang=='en') {
			a=confirm('Data has been changed. Save?');
		} else {
			a=confirm('Andmeid on muudetud. Kas salvestan?');
		}

		if (a) {
//			c.value=0
			sa.value="save";
			return false;
		} else {
			sa.value="cancel";
			return true;
		}
	}
}

function fSaveCheckSub() {
	var c=document.getElementById('changed');
	if (c.value==0) {
		return true;
	} else {
		alert('Andmeid on muudetud. Salvesta esmalt!');
		return false;
	}
}

function fCheckSubdel(lang) {
	var s=document.getElementById('act');
	var sa=document.getElementById('subact');
	var sub=document.getElementById('subdelchecked');
	if (sub.value==0) {
		s.value="save";
		return true;
	} else {
		if(sub.value==1){
			if (lang=='en') {
				var a=confirm('Do you realy want to delete rows?');
			} else {
				var a=confirm('Kas oled kindel, et soovid kustutada read?');
			}
		}

		if (a) {
//			c.value=0
			s.value="save";
		} else {
			sa.value="cancel";
			return true;
		}
	}
}


function fMakeOnMouse(classname,j,checked) {
	var tr=document.getElementById('tr'+j);
	if (checked) {
		tr.className='onselect';
	} else {
		tr.className=classname;
	}
//	alert(checked)
}

function fSelection(lang) {
	// procedure will be called if we want to make some listaction and check that selection is made
	var s=document.form.sel;
	if (s.checked) {
		return s.value;
	} else {
		for (var i=0; i<s.length; i++) {
			if (s[i].checked) {
				return s[i].value;
			}
		}
		if (lang=='en') {
			alert("Make selection first!");
		} else {
			alert("Valik on tegemata!");
		}
		return false;
	}
}

function fSelectionSub() {
	// procedure will be called if we want to make some listaction and check that selection is made
	if (document.all('subsel')!=null) {
		var s=document.all('subsel');
		if (s.checked) {
			if (!s.value) { alert('Andmeid on muudetud. Salvesta esmalt!'); }
			return s.value;
		} else {
			for (var i=0; i<s.length; i++) {
				if (s[i].checked) {
					return s[i].value;
				}
			}
		}
	}
	alert("Valik on tegemata!");
	return false;
}

function fSelectAll(v,nim) {
	// procedure will be called if we want to select or deselect all records
	// on forms use like this: <input type='checkbox' value=1 onclick=\"fSelectAll(this.checked, document.form.idid); \" >  where idid is checkbox's ID
	var txt="";
	if(nim && nim!='undefined'){ var s= nim; txt+='a'; } // Vaido 10.12.07 envirind
	else{ var s= document.form.sel; txt+='s'; }
	//alert(' s:'+s+' nim:'+nim+' txt:'+txt);
	if (s.checked) {
		if (v) { s.checked=true; } else { s.checked=false; }
	} else {
		for (var i=0; i<s.length; i++) {
			if(!s[i].disabled){ // ega pole suletud rida  // Vaido 15.04.09 metec_personal
				if (v) { s[i].checked=true; } else { s[i].checked=false; }
			}
		}
	}
}

function fSelectAllSub(v) {
	// procedure will be called if we want to select or deselect all records in sublist
	var s=document.all('subsel')
  if (s.checked) {
		if (v) { s.checked=true; } else { s.checked=false; }
	} else {
		for (var i=0; i<s.length; i++) {
			if (v) { s[i].checked=true; } else { s[i].checked=false; }
		}
	}
}

function fAsk(what, txt2) {
	if(txt2) what= txt2;
	if(!what){
		if (lang=='en') {
			what= ASK_MESS_en;
		} else {
			what= ASK_MESS_ee;
		}
	}
	// procedure will be called if we want to make ask for confirmation
	var a=confirm(what);
	if (a) {
		return true;
	} else {
		return false;
	}
}

function fSelectEdit(r) {
	// procedure will be called if we want to edit record
	var s=document.forms[0].sel;
	if (s.length==null) {
		s.checked=true;
	} else {
		for (i=0; i<s.length; i++) {
			if (i==r) {
				s[i].checked=true;
			} else {
				s[i].checked=false;
			}
		}
	}
}

function fNumeric(n,c,u) {
	// function will be called if there is need to convert comma and fix decimal places
	// comma
	var i;
	var sign;
	var nstr;
	var str=""+n;
	var ret="";
	for (i=0; i<str.length; i++) {
		if (str.charAt(i)==",") {
			ret+=".";
		} else if (str.charAt(i)==":") {
			ret+=".";
		} else {
			ret+=str.charAt(i);
		}
	}
	n=ret;
	//	is numeric
	if (!parseFloat(n)) { n=0; } else { n=eval(n); }
	// unsigned
	if (u>0) {
		n=Math.abs(n);
	}
	// decimal places
 	ret="";
	var nr=0;
	nr=Math.round(n*Math.pow(10,c));
	if (nr<0) {
		nr=Math.abs(nr);
		sign=1;
	} else { sign=0; }
	str=""+nr;
	if (str.length<c) { // 0.05 for example
		nstr=str;
		for (i=0; i<(c-str.length); i++) {
			nstr="0"+nstr;
		}
		str=nstr;
	}
	if (sign>0) { str="-"+str }
	if (str=="0") {
		str=""+Math.pow(10,c);
		str="0"+str.substring(1);
	}
	ret+=str.substring(0,(str.length-c)); // before comma part
	if (ret=="") { ret+="0"; } // for 0. values
	if (ret=="-") { ret+="0"; } // for -0. values
	if (c!=0) { // if we have places at all
		ret+="."+str.substring((str.length-c),str.length);
	}
	return ret;
}

function pathPass(n,v){
	// PHP>=4.3.7 cuts paths from file field when http url is entered instead of local file.
	// Therefore url path is copied into hidden PATH field with this function
	var uusn=n.replace(/\[/,'[PATH][')
	var name = document.getElementsByName(uusn);
	name[0].value=v;
}

//    * Browser name    : BrowserDetect.browser
//    * Browser version : BrowserDetect.version
//    * OS name         : BrowserDetect.OS
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"

		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.userAgent,
			subString: "iPhone",
			identity: "iPhone/iPod"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function wopen(url, name, w, h){
	  // Fudge factors for window decoration space.
	  // In my tests these work well on all platforms & browsers.
	  w += 32;
	  h += 96;
	  wleft = (screen.width - w) / 2;
	  wtop = (screen.height - h) / 2;
	  // IE5 and other old browsers might allow a window that is
	  // partially offscreen or wider than the screen. Fix that.
	  // (Newer browsers fix this for us, but let's be thorough.)
	  if (wleft < 0) {
	    w = screen.width;
	    wleft = 0;
	  }
	  if (wtop < 0) {
	    h = screen.height;
	    wtop = 0;
	  }
	  var win = window.open(url,
	    name,
	    'width=' + w + ', height=' + h + ', ' +
	    'left=' + wleft + ', top=' + wtop + ', ' +
	    'location=no, menubar=no, ' +
	    'status=yes, toolbar=no, scrollbars=yes, resizable=yes');
	  // Just in case width and height are ignored
	  win.resizeTo(w, h);
	  // Just in case left and top are ignored
	  win.moveTo(wleft, wtop);
	  win.focus();
}

/*
 * Funktsioon mis teeb lihtsa AJAX päringu
 * Lisanud Kristjan Adojaan 11.11.2008
 * var url string - Kuhu pöördutakse
 * var target string - millist elementi tulemusega või ooteteatega muudetakse
 * var callback string - millist funktsiooni välja kutsutakse, kui ei kutsuta, siis vaikefunktsioon stdCallback
 * var param string - millist targeti parameetrit muudetakse, kui ei määra, siis innerHTML
 * var waitValue string - seni kuni ajax tegutseb, mis on targeti param sel ajal, vaikimisi wait...
 */

function ajaxGet(url,target,callback,param,waitValue) {

	if (!callback) {callback='stdCallback';}
	if (!param) {param='innerHTML';}
	if (!waitValue) {waitValue='wait...';}
	if(target && param && waitValue) {eval('document.getElementById("'+target+'").'+param+'="'+waitValue+'"');}
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
		req.onreadystatechange = function() {ajaxDone(callback,target,param);};
        req.open("GET", url, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = function() {ajaxDone(callback);};
            req.open("GET", url, true);
            req.send();
        }
    }
}
/*
 * Funktsioon AJAXiga tulnud vastuse alusel kuvamiseks
 * Lisanud Kristjan Adojaan 17.11.2008
 * var retValue string - see mis ajaxist tagasi tuleb
 * var target string - millist elementi tulemusega muudetakse
 * var param string - millist targeti parameetrit muudetakse
 */

function stdCallback(retValue,target,param){
	eval('document.getElementById("'+target+'").'+param+'="'+retValue+'"')
}
/*
 * Funktsioon AJAXiga tulnud vastuse töötlemiseks
 * Lisanud Kristjan Adojaan 11.11.2008
 * var callback string - millist funktsiooni välja kutsutakse
 * var target string - millist elementi tulemusega või ooteteatega muudetakse
 * var param string - millist targeti parameetrit muudetakse, kui ei määra, siis innerHTML
 */

function ajaxDone(callback,target,param) {
   if (req.readyState == 4) {
       // only if "OK"
       if (req.status == 200 || req.status == 304) {
		  eval(callback+"('"+req.responseText+"','"+target+"','"+param+"')")
       } else {
         alert('Viga'+req.statusText+" State"+req.responseText)
       }
   }
}

function blinkIt() {
	if (!document.all){
		return;
	} else {
		for(i=0;i<document.all.tags('blink').length;i++){
			s=document.all.tags('blink')[i];
		  	s.style.visibility=(s.style.visibility=='visible')?'hidden':'visible';
		}
	}
}

// This method can be called like any in-built javascript function - string.trim() instead of trim(string)! // Vaido 19.05.09 asper_crm
String.prototype.trim = function() {  return this.replace(/^\s+|\s+$/g, '');  }

// kuupäevade erinevus - tagastab päevade vahe - Vaido 10.02.2010
// kui eDate puudu siis pannakse tänane
function fDateDiff(sDate,eDate){ // dd.mm.YYYY
	if(!sDate){
		var sDateDate = new Date();
	}else{
		var sDateArr= sDate.split('.');
		var sDateDate = new Date(sDateArr[2], sDateArr[1]-1, sDateArr[0]);
	}
	if(!eDate){
		var eDateDate = new Date();
	}else{
		var eDateArr= eDate.split('.');
		var eDateDate = new Date(eDateArr[2], eDateArr[1]-1, eDateArr[0]);
	}
	var one_day=1000*60*60*24;//Get 1 day in milliseconds
	var diff= Math.ceil((eDateDate.getTime()-sDateDate.getTime()) / one_day);
	return diff;
}
function str_replace (search, replace, subject, count) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   input by: Oleg Eremeev
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Oleg Eremeev
    // %          note 1: The count parameter must be passed as a string in order
    // %          note 1:  to find a global variable in which the result will be given
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'

    var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
            f = [].concat(search),
            r = [].concat(replace),
            s = subject,
            ra = r instanceof Array, sa = s instanceof Array;
    s = [].concat(s);
    if (count) {
        this.window[count] = 0;
    }

    for (i=0, sl=s.length; i < sl; i++) {
        if (s[i] === '') {
            continue;
        }
        for (j=0, fl=f.length; j < fl; j++) {
            temp = s[i]+'';
            repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
            s[i] = (temp).split(f[j]).join(repl);
            if (count && s[i] !== temp) {
                this.window[count] += (temp.length-s[i].length)/f[j].length;}
        }
    }
    return sa ? s : s[0];
}

var strFilter='';
function fLoadFilter(reg,field,i){
	if(strFilter)return;
	strFilter=reg+'|'+field+'|'+i;
	sleep(500,fGetFilterContent);
}
function fNoLoadFilter(reg,field,i){
	if(strFilter==reg+'|'+field+'|'+i)
		strFilter='';
}
// nimekirja filtri sisu genereerimine
function fGetFilterContent(reg,field,i){
	//alert(' alg reg:'+reg+' f:'+field+' i:'+i+' strFilter:'+strFilter+':');
	if(!field && !strFilter) return;
	if(!field){
		var arrFilter= strFilter.split('|');
		reg=arrFilter[0];
		field=arrFilter[1];
		i=arrFilter[2];
	}
	var df= document.getElementById('donefilter');
	// oleme juba selle päringu teinud
	if(df.value==reg+'|'+field){
		strFilter='';
		//alert('päringu teinud:'+df.value);
		return;
	}
	df.value= reg+'|'+field;
	// see on valitud filtiväli
	theSel = document.getElementById('filter['+i+']');
	//alert('reg:'+reg+' f:'+field+' i:'+i+' strFilter:'+strFilter);
	//alert(' sel:'+theSel+' type:'+theSel.type);
	// sisu juba olemas
	if(theSel.type=='select'){
		if(theSel.length>4){
			strFilter='';
			//alert('olemas:'+theSel.length);
			return;
		}
	}

	// get options
	if(typeof jQuery != 'undefined') {
		//alert(' jQuery ');
		var the_form = document.getElementById('form');
		var num = the_form.elements.length;
		var url = reg+'.phtml?funcCall=filterSelect&f='+field+'';
		var url_data= '';
		var arr_fields= new Array('search[','filter[','mainfilter['); // millise väljade sisu kaasa anname
		var str_fields= ','+arr_fields.toString();
		for (var j = 0; j < num; j++){
			var chiave = the_form.elements[j].name;
			var valore = the_form.elements[j].value;
			//var tipo = the_form.elements[j].id;
			if (chiave && str_fields.indexOf(','+chiave.substr(0,7))!==-1){
				url_data += chiave + "=" + valore + "&";
			}
		}
		//alert(' url_data:'+url_data);

		//$('#filter['+i+']').ajaxAddOption(url + '&ajax=ver2&' +url_data);
		// asendab select kasti
		$.ajax({
			type: 'GET',
			url: url + '&ajax=true&asenda=true',
			cache: false,
			data: url_data,

			success: function(msg){
				//alert('msg:'+ msg);
				if(!msg) alert('Filtri laadimine eba6nnestus!');
				$(theSel).parent().html(msg);
			}
		 });
	}
	else if(completeAHAH){
		//alert(' completeAHAH ');
		completeAHAH.likeSubmit(reg+'.phtml?funcCall=filterSelect&f='+field+'', 'GET', 'form', 'sihitis_3');
		setTimeout("putOptionsAHAH()",500);
		//putOptionsAHAH();
	}
	strFilter='';
	return;
}
function putOptionsAHAH(){
	// put options
	///alert('len:'+filtriLisa.length);
	alert('vajalik paus filtri sisu tekitamiseks.');
	if(filtriLisa.length==0){
		return true;
	}
	for(j=0;j<filtriLisa.length;j++){
		theSel.options[theSel.length] = new Option(filtriLisa[j], filtriLisa[j]);
	}
	// jäägid maha
	document.getElementById('sihitis_3').innerHTML='';
	filtriLisa= new Array();
	return;
}
function sleep(ms,func){
	if(!ms)ms=100;
	if(!func)func='fDoNothing';
	setTimeout(func,ms);
	return;
}
function fDoNothing(){
	return;
}


function bmDebugShowDetailsFor(element,hash){
	if (typeof element == 'string')
		element = document.getElementById(element+'-'+hash);
	
	var panelElements = document.getElementsByClassName('bmDebugTop');
	for (var i = 0; i < panelElements.length; ++i){
		if (panelElements[i] != element){
			panelElements[i].style.display = 'none';
		}
	}
	
	bmDebugToggle(element,hash);
}

function bmDebugToggle(element,hash){
	if (typeof element == 'string')
		element = document.getElementById(element+'-'+hash);
	
	if (element)
		element.style.display = element.style.display == 'none' ? '' : 'none';
}

