var browser = navigator.userAgent.toLowerCase();
var isMoz = browser.indexOf('mozilla')>=0;
var preloadImgs = new Array();
var EMPTYSTRING = '';
if (typeof(PATH)!='undefined') {
	var MFOLDER = '__miracle/';
	var BKND_DIR = PATH + MFOLDER + 'bknd/';
	var IFC_IMG_DIR = PATH + MFOLDER + 'ifc/img/';
	var IFC_CSS_DIR = PATH + MFOLDER + 'ifc/css/';
	var IFC_LIB_DIR = PATH + MFOLDER + 'lib/';
};

if (typeof(JSERR)=='undefined') JSERR='DEFAULT';

function jsErrTrap (msg,url,line) {

	// error trapping routine of window.onerror event
	// covers all errors except errors within element event handlers and dependent functions

	var ret = true;
	switch (JSERR) {
	case 'DEFAULT':
		ret = false;
		break;
	case 'CLIENT':	
		alert (msg+'\n'+url+'\n'+line);
		break;
	case 'SERVER':
		writeJsErr(msg,url,line);	
		ret = true;
		break;
	case 'REPRESS':
		ret = true;
		break;
	}		
	return ret;

};

window.onerror = jsErrTrap;


function eCatchErr() {

	// Error catch wrapper around function that needs errors caught
	// Syntax: eTrap([function name], [parameter 1], [parameter2], ...)
	// unlimited parameters supported
	// (function name without quotes)
	// This can be used to trap errors generated by event listener functions

	var fu = eCatchErr.arguments[0];
	var args = Array.prototype.slice.call(eCatchErr.arguments, 1); //remove index 0

	if (JSERR=='DEFAULT') {
		fu.apply(this, args);  
	} else {                
		try { 
			fu.apply(this, args);     
		} catch (e) {
			if (JSERR!='REPRESS') {
				var msg = e.message;
				var url = e.fileName;
				var line = e.lineNumber;
				if (JSERR=='CLIENT') {
					alert (msg+'\n'+url+'\n'+'line:'+line);
				} else {
					writeJsErr(msg,url,line);       
				}
			}       
		}
	}

};

function preloadImg(dir,img) {
	var i = preloadImgs.length-1;
	i++;
	preloadImgs[i] = new Image();
	preloadImgs[i].src = dir + img;
};

function npath(loc) {
	setCookie('navpath',loc.id);
};

function submitOnEnter(e,frm,typ) {
	var keynum;
	if(window.event) { // IE
		keynum = e.keyCode;
	} else if(e.which) { // Netscape/Firefox/Opera
		keynum = e.which
	}
	if (keynum==13) {
		frmSubmit(frm,typ);
	}
};

function frmSubmit(frm,typ) {
	switch (typ) {
	case 'LOG':
		if (frm.log_usr.value!='' && frm.log_pwd.value!='') {
			frm.submit();
		}
		break;
	case 'SRH':
		if (frm.srh_txt.value!='') {
			frm.submit();
		}
		break;
	}
	return true;	
};

function usrLogout(frm) {
	frm.log_out.value = '1';
	frm.submit();
};

function searchPaging (frm, offset) {
	frm.srh_ofs.value = offset;
	frm.submit();
};

function decLevel(lvl) {
	lvl = lvl.toString();
	var lstr = 'rien,une,deux,trois,quatre,cinque,six,sept,huit,neuf,dix';
	var lvls = lstr.split(',');
	str = '';
	for (var i=0;i<lvl.length;i++) {
		var s = lvl.substr(i,1);
		var n = parseInt(s.charCodeAt());
		n+= i*3;
		var c = String.fromCharCode(n);
		str+= c;
	}
	num = -1;
	for (var i=0;i<lvls.length;i++) {
		if (lvls[i]==str) {
			num = i;
			break;
		}	
	}
	return parseInt(num);
};
function getDir(url) {
	var a = url.split('/');
	var d = '';
	for (var i=0;i<a.length-1;i++) {
		d+=a[i]+'/';
	}
	return d;
};
function windowWidth(){
    if (window.innerWidth){
        if (document.body.offsetWidth){
            if (window.innerWidth!=document.body.offsetWidth)
                return document.body.offsetWidth;
            }
        return (window.innerWidth);                     // Mozilla
    }
    if (document.documentElement.clientWidth)
        return document.documentElement.clientWidth;    // IE6
    if (document.body.clientWidth)
        return document.body.clientWidth;               // IE DHTML-compliant any other
};
function windowHeight(){
    if (window.innerHeight){
        if (document.body.offsetHeight){
            if (window.innerHeight!=document.body.offsetHeight)
                return document.body.offsetHeight;
            }
        return (window.innerHeight);                     // Mozilla
    }
    if (document.documentElement.clientHeight)
        return document.documentElement.clientHeight;    // IE6
    if (document.body.clientHeight)
        return document.body.clientHeight;               // IE DHTML-compliant any other
};
function showRndImg(dir,elmId,rNum) {
	if (document.getElementById) {
		rNum = parseInt(rNum);
		var imgs = rndImgs[rNum];
		var num = Math.floor(Math.random() * imgs.length);
		var img = document.getElementById('img_' + elmId);
		var elm = document.getElementById('elm_' + elmId);
		img.src =  dir + imgs[num]['src'];
		img.alt = imgs[num]['alt'];
		img.title = imgs[num]['alt'];
		img.width = imgs[num]['w'];
		img.height = imgs[num]['h'];
		elm.style.width = imgs[num]['w'];
		elm.style.height = imgs[num]['h'];
		elm.style.marginLeft = imgs[num]['x'];
		elm.style.marginTop = imgs[num]['y'];
		setTimeout("showRndImg('"+dir+"','"+elmId+"',"+rNum+")",imgs[num]['wait']);
	}	
};
function ieReposFixed(id,algn,base,x,y,w,h) {
	var hAdj = 0;
	var wH = document.body.clientHeight;
	var wY = document.body.scrollTop;
	var elm = document.getElementById(id);
	if (base=='B') {
		elm.style.top = (document.body.clientHeight + document.body.scrollTop - hAdj - h - y)+'px';
	} else {
		elm.style.top = (document.body.scrollTop + y)+'px';
	}	
};
function showStat(s) {
	window.status=s;
	return true;
};
function setOpacity(elm,o) {
	var browser=elm.filters?'ie':typeof elm.style.MozOpacity=='string'?'moz':'';
	switch (browser) {
	case 'ie':
   		elm.style.filter='alpha(opacity='+(100*o)+')';
		break;
	case 'moz':
		elm.style.MozOpacity=o;
		break;
	default:
	}		
};
function swapImg(id,img) {
	document.getElementById(id).src = img;
};
function setStyle(elm,style) {
	elm.className=style;
};
function inArray(s,a) {
	var s1 = a.join('|');
	return (s1.indexOf(s)>-1);
};
function arraySearch(s,a) {
	var ret = false;
	for (var i=0;i<a.length;i++) {
		if (a[i]==s) {
			ret = i;
			break;
		}
	}		
	return (ret);
};
function strRepeat(s,num) {
	var rS='';
	for (var i=0;i<=num;i++) {
		rS+=s;
	}
	return rS;
};
function fldSizeToPx (s,pxFont) {
	if (!pxFont) pxFont=11;
	return s*pxFont;
};
function formSubmit(frm,txtReq,txtInvalid) {
	var req = new Array();
	var inval = new Array();
	
	for (var i=0; i<contFlds.length; i++) {
		if (contFlds[i]['req']=='Y') {
			if (frm[contFlds[i]['fld']].value=='') {
				req.length++;
				req[req.length-1] = contFlds[i]['name'];
			} else if (contFlds[i]['type']=='EMAIL') {
				if (!emailOK(frm[contFlds[i]['fld']].value)) {
					inval.length++;
					inval[inval.length-1] =contFlds[i]['name'];
				}
			}
		}
	}	
	var msgReq = '';			
	var msgInv = '';
	if (req.length>0) msgReq = txtReq + ':\n' + req.join(',') + '\n';			
	if (inval.length>0) msgInv = txtInvalid + ':\n' + inval.join(',');			
	if (msgReq!='' || msgInv!='') {
		alert(msgReq+msgInv);
	} else {		
		frm.submit();
	}	
};

function capitalize (s) {

	if (s.length>0) {
		var s1 = s.substr(0,1).toUpperCase();
		if (s.length>1) {
			s1 += s.substr(1,s.length-1);
		}
	} else {
		s1 = s;
	}
	return s1;			
};

function isInteger (s) {   

	var ret = false;
	if (s.length>0) {
		ret = true;
		for (var i=0;i<s.length;i++) {   
			var c = s.charAt(i);
			if (!isDigit(c)) {
				ret = false;
				break;
			}	
		}
	}
    return ret;
};
function isDigit (c) {   
	return ((c >= "0") && (c <= "9"));
};
function emailOK (s) {   

	// Email address must be of form a@b.c -- in other words:
	// * there must be at least one character before the @
	// * there must be at least one character before and after the .
	// * the characters @ and . are both required
    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;
	if (sLength<=3) return false;
    // look for @
    while ((i < sLength) && (s.charAt(i) != "@")) {
		i++;
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    // look for .
    while ((i < sLength) && (s.charAt(i) != ".")) {
		i++;
    }
    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
};

