function mod(x,y) {
	x=parseFloat(x)
	y=parseFloat(y)
	if (x>0) {
		if (x>y) {
			y=Math.abs(y)
			return (x/y - Math.floor(x/y))*y
		}
		else if (x==y) {
			return 0
		}
		else {
			return x
		}
	}
	else if (x==0) {
		return 0
	}
	else {
		if (x>y) {
			return x
		}
		else if (x==y) {
			return 0
		}
		else {
			x=Math.abs(x)
			y=Math.abs(y)
			return -Math.abs((x/y - Math.floor(x/y))*y)
		}		
	}
}
function magnitude(a1,a2) {
	aa1=parseFloat(a1)
	aa2=parseFloat(a2)
	return Math.pow(Math.pow(aa1,2)+Math.pow(aa2,2),.5)
}
function phase(a1,a2) {
	dx=parseFloat(a1)
	dy=parseFloat(a2)
	if (dx > 0 & dy > 0) {
		return Math.atan(dy/dx)
	}
	else if (dx < 0 & dy > 0) {
		return Math.abs(Math.atan(dy/dx)) + Math.PI/2
	}
	else if (dx < 0 & dy < 0) {
		return Math.abs(Math.atan(dy/dx)) + Math.PI
	}
	else if (dx > 0 & dy < 0) {
		return Math.abs(Math.atan(dy/dx)) + Math.PI*(3/2)
	}
	else if (dx == 0 & dy < 0) {
		return Math.PI*(3/2)
	}
	else if (dx == 0 & dy > 0) {
		return Math.PI/2
	}
	else if (dx < 0 & dy == 0) {
		return Math.PI
	}
	else if (dx > 0 & dy == 0) {
		return 0
	}
	else if (dx == 0 & dy == 0) {
		return 'undefined'
	}
}
function phase180(a,b) {
	return Math.atan2(b,a)
}
function phase1(a1,a2) {
	dx=parseFloat(a1)
	dy=parseFloat(a2)
	//return mod(phase(dx,dy),Math.PI/2)
	return phase(dx,dy) % Math.PI/2
}
function scrollMsg() {
	//i=0 - this variable must be initialized prior to calling the function.
	myMsg="Note that in the field of Electrical Engineering, the designator 'j' is typically used for the imaginary unit rather than 'i'.    "
	frontPart = myMsg.substring(i,myMsg.length)
	backPart = myMsg.substring(0,i)
//	window.status=frontPart + backPart
	document.title=frontPart + backPart
	if (i < myMsg.length) {
		i++
	}
	else {
		i=0
	}
	setTimeout("scrollMsg()",50)
}
function rerectvectadd(a,b,c,d) {
	a=parseFloat(a)
	b=parseFloat(b)
	c=parseFloat(c)
	d=parseFloat(d)
	return a+c
}
function imrectvectadd(a,b,c,d) {
	a=parseFloat(a)
	b=parseFloat(b)
	c=parseFloat(c)
	d=parseFloat(d)
	return b+d
}
function rerectvectsub(a,b,c,d) {
	a=parseFloat(a)
	b=parseFloat(b)
	c=parseFloat(c)
	d=parseFloat(d)
	return a-c
}
function imrectvectsub(a,b,c,d) {
	a=parseFloat(a)
	b=parseFloat(b)
	c=parseFloat(c)
	d=parseFloat(d)
	return b-d
}
function magpolvectadd(a,b,c,d) {
	e=repolartorect(a,b)
	f=impolartorect(a,b)
	g=repolartorect(c,d)
	h=impolartorect(c,d)
	i=rerectvectadd(e,f,g,h)
	j=imrectvectadd(e,f,g,h)
	return magrecttopolar(i,j)
}
function phasepolvectadd(a,b,c,d) {
	e=repolartorect(a,b)
	f=impolartorect(a,b)
	g=repolartorect(c,d)
	h=impolartorect(c,d)
	i=rerectvectadd(e,f,g,h)
	j=imrectvectadd(e,f,g,h)
	return phaserecttopolar(i,j)
}
function magpolvectsub(a,b,c,d) {
	e=repolartorect(a,b)
	f=impolartorect(a,b)
	g=repolartorect(c,d)
	h=impolartorect(c,d)
	i=rerectvectsub(e,f,g,h)
	j=imrectvectsub(e,f,g,h)
	return magrecttopolar(i,j)
}
function phasepolvectsub(a,b,c,d) {
	e=repolartorect(a,b)
	f=impolartorect(a,b)
	g=repolartorect(c,d)
	h=impolartorect(c,d)
	i=rerectvectsub(e,f,g,h)
	j=imrectvectsub(e,f,g,h)
	return phaserecttopolar(i,j)
}
function rerectvectmult(a,b,c,d) {
	return a*c-b*d
}
function imrectvectmult(a,b,c,d) {
	return a*d+b*c
}
function rerectvectdiv(a,b,c,d) {
	return rerectvectmult(a,b,c,-d)/rerectvectmult(c,d,c,-d)
}
function imrectvectdiv(a,b,c,d) {
	return imrectvectmult(a,b,c,-d)/rerectvectmult(c,d,c,-d)
}
function magpolvectmult(a,b,c,d) {
	return a*c
}
function phasepolvectmult(a,b,c,d) {
	return parseFloat(b)+parseFloat(d)
}
function magpolvectdiv(a,b,c,d) {
	return a/c
}
function phasepolvectdiv(a,b,c,d) {
	re1=repolartorect(a,b)
	im1=impolartorect(a,b)
	re2=repolartorect(c,d)
	im2=impolartorect(c,d)
	rerectdividend=rerectvectdiv(re1,im1,re2,im2)
	imrectdividend=imrectvectdiv(re1,im1,re2,im2)
	return phaserecttopolar(rerectdividend,imrectdividend)
}
function repolartorect(a,b) {
	return a * Math.cos(b)
}
function impolartorect(a,b) {
	return a * Math.sin(b)
}
function magrecttopolar(a,b) {
	return magnitude(a,b)
}
function phaserecttopolar(a,b) {
	return phase180(a,b)
}
function rectvectdiv(a,b) {
	var rvdarray = Array()
	rvdarray[0]=rerectvectdiv(a[0],a[1],b[0],b[1])
	rvdarray[1]=imrectvectdiv(a[0],a[1],b[0],b[1])
	return rvdarray
}
function rectvectmult(a,b) {
	var rvmarray = Array()
	rvmarray[0]=rerectvectmult(a[0],a[1],b[0],b[1])
	rvmarray[1]=imrectvectmult(a[0],a[1],b[0],b[1])
	return rvmarray	
}
function polvectdiv(a,b) {
	var pvdarray = Array()
	pvdarray[0]=magpolvectdiv(a[0],a[1],b[0],b[1])
	pvdarray[1]=phasepolvectdiv(a[0],a[1],b[0],b[1])
	return pvdarray	
}
function polvectmult(a,b) {
	var pvmarray = Array()
	pvmarray[0]=magpolvectmult(a[0],a[1],b[0],b[1])
	pvmarray[1]=phasepolvectmult(a[0],a[1],b[0],b[1])
	return pvmarray	
}
function polartorect(a) {
	var ptrarray = Array()
	ptrarray[0]=repolartorect(a[0],a[1])
	ptrarray[1]=impolartorect(a[0],a[1])
	return ptrarray
}
function recttopolar(a) {
	var rtparray = Array()
	rtparray[0]=magrecttopolar(a[0],a[1])
	rtparray[1]=phaserecttopolar(a[0],a[1])
	return rtparray
}
function rectvectsub(a,b) {
	var rvsarray = Array()
	rvsarray[0]=a[0]-b[0]
	rvsarray[1]=a[1]-b[1]
	return rvsarray
}
function rectvectadd(a,b) {
	var rvaarray = Array()
	rvaarray[0]=parseFloat(a[0])+parseFloat(b[0])
	rvaarray[1]=parseFloat(a[1])+parseFloat(b[1])
	return rvaarray
}
function polvectsub(a,b) {
	var pvsarray = Array()
	pvsarray[0]=magpolvectsub(a[0],a[1],b[0],b[1])
	pvsarray[1]=phasepolvectsub(a[0],a[1],b[0],b[1])
	return pvsarray
}
function polvectadd(a,b) {
	var pvaarray = Array()
	pvaarray[0]=magpolvectadd(a[0],a[1],b[0],b[1])
	pvaarray[1]=phasepolvectadd(a[0],a[1],b[0],b[1])
	return pvaarray	
}
function rectvectrecip(a) {
	var rvrarray = Array()
	rvrarray[0]=rerectvectdiv(1,0,a[0],a[1])
	rvrarray[1]=imrectvectdiv(1,0,a[0],a[1])
	return rvrarray	
}
function polvectrecip(a) {
	var pvrarray = Array()
	pvrarray[0]=magpolvectdiv(1,0,a[0],a[1])
	pvrarray[1]=phasepolvectdiv(1,0,a[0],a[1])
	return pvrarray	
}
function testrvd() {
	b1=uicreatearray()
	b2=uicreatearray()
	b3=uicreatearray()
	b4=phasorwyedelta(b1,b2,b3)
	arrayenum(b4)
}
function dotproduct(dparray1,dparray2) {
	dpi=0
	dpsum=0
	if (dparray1.length!=dparray2.length) {
		alert('dotproduct: There is a discrepancy between the dimension of the two vectors.')
		return 'undefined'
	} else {
		while (dpi<dparray1.length) {
			dpsum+=dparray1[dpi]*dparray2[dpi]
			dpi++
		}
		return dpsum
	}
}
function vectormagnitude() {
	vmi=0
	vmsum=0
	while (vmi<arguments[0].length) {
		vmsum=vmsum+Math.pow(arguments[0][vmi],2)
		vmi++
	}
	return Math.pow(vmsum,.5)
}
function crossproduct(cparray1,cparray2) {
	var cpansarray = new Array()
	a1=cparray1[0]
	a2=cparray1[1]
	a3=cparray1[2]
	b1=cparray2[0]
	b2=cparray2[1]
	b3=cparray2[2]
	cpansarray[0]=a2*b3-a3*b2
	cpansarray[1]=a3*b1-a1*b3
	cpansarray[2]=a1*b2-a2*b1
	return cpansarray
}
function projection(proja,projb) {
	projnumerator=dotproduct(proja,projb)
	projdenominator=dotproduct(projb,projb)
	projt=(projnumerator/projdenominator)*vectormagnitude(projb)
	return projt
}