/* ------------------------------------
 Copyright Andreas Schnaiter, LEO Gesellschaft für Computer & Kommunikation mbH
 http://www.leo-computer.de/
 ------------------------------------ */

function $(id) {
	return document.getElementById(id);
}

function AFakeEvent (clientX, clientY) {
	this.clientX=clientX;
	this.clientY=clientY;
}

Array.prototype.getIndexByValue=function(val) {
	var i;
	for (i=0; i<this.length; ++i) {
		if (this[i]==val) {
			return i;
		}
	}
	return null;
}

Array.prototype.hasValue=function (val) {
	return null!=this.getIndexByValue(val);
}

document.trackMousePosition=function() {
	if (null==document.onmousemove) {
		document.onmousemove=_mPos;
	}
}

function _mPos(event) {
	var e=(event) ? event : window.event;
	document._LAST_MOUSE_POSITION_X=e.clientX;
	document._LAST_MOUSE_POSITION_Y=e.clientY;
}

document.getLastMousePosition=function() {
	return new AFakeEvent(document._LAST_MOUSE_POSITION_X, document._LAST_MOUSE_POSITION_Y);
}

Number.prototype.toHexStr=function() {
	var s="", v;
	for (var i=7; i>=0; --i) {
		v=(this>>>(i*4)) & 0xf;
		s+=v.toString(16);
	}
	return s;
}

function sha1(msg) {
	var K=[0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
	msg+=String.fromCharCode(0x80);
	var l=Math.ceil(msg.length/4)+2;
	var N=Math.ceil(l/16);
	var M=new Array(N);
	var i, j;
	for (i=0; i<N; ++i) {
		M[i]=new Array(16);
		for (j=0; j<16; ++j) {
			M[i][j]=(msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) | (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
		}
	}
	M[N-1][14]=((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14])
	M[N-1][15]=((msg.length-1)*8) & 0xffffffff;
	var H0=0x67452301;
	var H1=0xefcdab89;
	var H2=0x98badcfe;
	var H3=0x10325476;
	var H4=0xc3d2e1f0;
	var W=new Array(80);
	var a, b, c, d, e, t, i;
	for (i=0; i<N; ++i) {
		for (t=0;  t<16; t++) {
			W[t]=M[i][t];
		}
		for (t=16; t<80; t++) {
			W[t]=_rotl__(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);
		}
		a=H0;
		b=H1;
		c=H2;
		d=H3; 
		e=H4;
		for (t=0; t<80; ++t) {
			var s=Math.floor(t/20);
			var T=(_rotl__(a,5) + _s_f__(s,b,c,d) + e + K[s] + W[t]) & 0xffffffff;
			e=d;
			d=c;
			c=_rotl__(b, 30);
			b=a;
			a=T;
		}
		H0=(H0+a) & 0xffffffff;
		H1=(H1+b) & 0xffffffff;
		H2=(H2+c) & 0xffffffff;
		H3=(H3+d) & 0xffffffff;
		H4=(H4+e) & 0xffffffff;
	}

	return H0.toHexStr() + H1.toHexStr() + H2.toHexStr() + H3.toHexStr() + H4.toHexStr();
}

function _s_f__(s, x, y, z) {
	switch (s) {
		case 0: return (x & y) ^ (~x & z);
		case 1: return x ^ y ^ z;
		case 2: return (x & y) ^ (x & z) ^ (y & z);
		case 3: return x ^ y ^ z;
	}
}

function _rotl__(x, n) {
	return (x<<n) | (x>>>(32-n));
}

function aSRS(evt, id) {
	asSetRadioSelected(evt, id);
}

function asSetRadioSelected(evt, id) {
	var n=$(id).name;
	var elems=document.getElementsByName(n);
	var bn='cd'.concat(n);
	var dnam;
	for(var i=0; i<elems.length; ++i) {
		dnam=bn.concat(i);
		if(elems[i].id==id) {
			elems[i].checked='checked'
			$(dnam).className='radioSelected';
		} else {
			elems[i].checked=null;
			$(dnam).className='radio';
		}
	}
}

function aATAS(evt, id) {
	asAdjustTextAreaSize(evt, id);
}

function asAdjustTextAreaSize(evt, id) {
	var padding=2;
	var max_rows=20;
	var ta=$(id);
	var rc=asGetTextAreaRowCount(id);
	//window.status='{rowcount' + rc + ':' + ta.rows + '}';
	var r=rc+padding*2;
	if (r>max_rows) {
		r=max_rows;
	}
	if (rc+padding>ta.rows) {
		ta.rows=r;
	} else if(ta.rows>rc+padding*2) {
		ta.rows=r;
	}
}

function asGetTextAreaRowCount(id) {
	var ta=$(id);
	if(null!=ta.value) {
		var rows=ta.value.split(/(\r\n|\n\r|\n)/g);
		var rc=0;
		for (var i=0; i<rows.length; ++i) {
			if (rows[i]!="\n" && rows[i]!="\n\r" && rows[i]!="\r\n") {
				rc+=1+Math.floor(rows[i].length/ta.cols);
			}
		}
		return rc;
	}
	return 0;
}

function asRemainder(dividend, divisor) {
	return dividend-Math.floor(dividend/divisor)*divisor;
}

function asRoundToUnit(number, unit) {
	var rest=asRemainder(number, unit);
	if (rest>=(unit/2)) {
		return number+(unit-rest);
	}
	return number-rest;
}


