﻿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: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			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.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
};

function rnd_() {
	var x = Math.random();
	return x;
}
function rnd_i(v) {
   var i = Math.floor ( v * Math.random() );
   return i;
}
function rnd_b(v) {
	var d = ( v - Math.random() );
	var bool = ( d > 0 );
	return bool;
}
function rnd_array(m,a) {
   var i,j;
   var st;
   var n = a.length;
   if ( n < 2 || m < 1 ) return;
   for ( var k = 0; k < m; k++ ) {
	   i = rnd_i(n);    
	   j = rnd_i(n);
	   if ( i == j ) j = i + 1 + rnd_i(n-2);
	   if ( j >= n ) j -= n;
		st = a[i];    
		a[i] = a[j]
		a[j] = st;
   }       
}

function rgb_(HLS,STR) {

	var P,Q
	var T = new Array(3);
	var Col = new Array(3)
	var RGB = new Array(3);

	var H = HLS[0] / 360.0;
	var L = HLS[1];
	var S = HLS[2];

	if (H < 0) H += 1;
	if (H >= 1.0) H -= 1;
	if (L < 0) L = 0;
	if (L > 1.0) L = 1.0;
	if (S < 0) S = 0;
	if (S > 1.0) S = 1.0;
	
	if ( S != 0) {
		if (L < 0.5)    Q = L * (1.0 + S);
		if (L >= 0.5)   Q = L + S - L * S;
		P = 2 * L - Q;            
		T[0] = H + 1.0/3.0;
		T[1] = H;
		T[2] = H - 1.0/3.0;
	
		for (var c=0; c<3; c++) {

			if ( T[c] < 0.0 ) T[c] += 1.0;
			if ( T[c] > 1.0 ) T[c] -= 1.0;

			if ( T[c] < 1.0/6.0 ) Col[c] = P + ( (Q-P) * 6.0 * T[c]);
			if ( T[c] >= 1.0/6.0 && T[c] < 0.5 ) Col[c] = Q;
			if ( T[c] >= 0.5 && T[c] < 2.0/3.0 ) Col[c] = P + ( (Q-P) * ( 2.0/3.0 - T[c] ) * 6.0 );
			if ( T[c] >= 2.0/3.0 ) Col[c] = P;
		}
        
	}
	else {
		for (var c = 0; c < 3; c++) {
			Col[c] = L;
		}

	}

	RGB[0] = Math.floor(256*Col[0]);
	RGB[1] = Math.floor(256*Col[1]);
	RGB[2] = Math.floor(256*Col[2]);
	
	var COL = 'rgb(' + RGB[0] + ' ,' + RGB[1] + ' ,' + RGB[2] + ')';

	if (STR) return COL;
	else return RGB;        
}

function roman_(number) {

	var letter = new Array('O','I','V','X','L','C','D','M','W','Y');

	var id = new Array();	

	if (number == 0) return letter[0];
	
	var roman = '';
	var n = number;
		
	if (n < 0) { 
		roman = '-';
		n = Math.abs(n);
	}

	id[4] = Math.floor( n / 10000 ) ;
	id[3] = Math.floor( (n - 10000*id[4]) / 1000 );
	id[2] = Math.floor( (n - 10000*id[4] - 1000*id[3]) / 100 );
	id[1] = Math.floor( (n - 10000*id[4] - 1000*id[3] - 100*id[2] ) / 10);
	id[0] = Math.floor(  n - 10000*id[4] - 1000*id[3] - 100*id[2] - 10*id[1] );

	if (id[4] > 0) {
		roman = letter[9];
		for (var i=1; i<=id[4]-1; i++) roman += letter[9];
	}
	
	for (var k = 1; k>=0; k--) {
		var idk = id[k];
		if (idk == 1) roman += letter[2*k+1];
		if (idk == 2) roman += letter[2*k+1]+letter[2*k+1];
		if (idk == 3) roman += letter[2*k+1]+letter[2*k+1]+letter[2*k+1];
		if (idk == 4) roman += letter[2*k+1]+letter[2*k+2];
		if (idk == 5) roman += letter[2*k+2];
		if (idk == 6) roman += letter[2*k+2]+letter[2*k+1];
		if (idk == 7) roman += letter[2*k+2]+letter[2*k+1]+letter[2*k+1];
		if (idk == 8) roman += letter[2*k+2]+letter[2*k+1]+letter[2*k+1]+letter[2*k+1];
		if (idk == 9) roman += letter[2*k+1]+letter[2*k+3];
	}
	return roman;		
}
function decimal_(x,n) {

	var xa = Math.abs(x);
	var d = Math.pow(10,n);
	var y = Math.round ( xa * d) / d;
	if ( x < 0 ) y = -y;

	return y;

}
function greek_( CODE , str ) {
	
	var letter = new Array ( 'alp' , 'bet' , 'gam'  , 'del'   , 'eps'   , 'zet'   , 'eta'   , 'the'   , 'iot'   , 'kap'   , 'lam'   , 'mu '   , 'nu '   , 'xi '   , 'omi'   , 'pi '   , 'rho'   , 'sig'   , 'tau'   , 'ups'   , 'phi'   , 'chi'   , 'psi'   , 'ome' );  
	var names = new Array ( 'Alpha' , 'Beta' , 'Gamma' , 'Delta' , 'Epsilon' , 'Zeta' , 'Eta' , 'Theta' , 'Iota' , 'Kappa' , 'Lambda', 'Mu' ,'Nu' , 'Ksi' , 'Omikron' , 'Pi' , 'Rho' , 'Sigma' , 'Tau' , 'Upsilon' , 'Phi' , 'Khi' , 'Psi' , 'Omega'  );
	var U0 = new Array ( '\u0391', '\u0392','\u0393', '\u0394', '\u0395', '\u0396', '\u0397', '\u0398', '\u0399', '\u039A', '\u039B', '\u039C', '\u039D', '\u039E', '\u039F', '\u03A0', '\u03A1', '\u03A3', '\u03A4', '\u03A5', '\u03A6', '\u03A7', '\u03A8', '\u03A9' );
	var U1 = new Array ( '\u03B1', '\u03B2','\u03B3', '\u03B4', '\u03B5', '\u03B6', '\u03B7', '\u03B8', '\u03B9', '\u03BA', '\u03BB', '\u03BC', '\u03BD', '\u03BE', '\u03BF', '\u03C0', '\u03C1', '\u03C3', '\u03C4', '\u03C5', '\u03C6', '\u03C7', '\u03C8', '\u03C9' );       
	
	if ( typeof(str) == 'string' ) {
		var i = 0;
		while ( ( i < letter.length ) && ( letter[i] != str.toLowerCase() ) ) i++;                    

		var code = str;
		if ( (i >= 0) && (i < letter.length) ) {
			if (CODE == 0) code = U0[i];
			if (CODE == 1) code = U1[i];
			if (CODE == 2) code = names[i];
		}

	}       
	else if ( typeof(str) == 'number' ) {
	
		var NN = new Array( U0.length , U1.length , names.length );
		var Ni = Math.ceil(str / NN[CODE]);
		var code = "";

		for ( var j = 0; j < Ni; j++ ) {
			var i = (str % NN[CODE]); 
			if (CODE == 0) code += U0[i];
			if (CODE == 1) code += U1[i];
			if (CODE == 2) code += names[i] + ' ';
			str -= NN[CODE];               		
		
		}

	}
	
	return code;

}

function st_opacity(e,opc) {
	e.style.opacity = opc/10;
	e.style.filter = 'alpha(opacity=' + opc*10 + ')';
}
function st_box( e , x , y , w , h ) {
	e.style.position = 'absolute';
	e.style.left = x + 'px';
	e.style.top = y + 'px';
	if ( w > 0 ) e.style.width = w + 'px';
	if ( h > 0 ) e.style.height = h + 'px';
}
function st_data_( POS , UW , UY , text , css , SC , pE ) {

	var e;
	var SP = '*';
	
	var O = document.createElement('div');
	O.style.width = (UW*pE.offsetWidth) + 'px';
	O.style.position = 'absolute';
	if (POS  > 0) O.style.left = (POS-1) + 'px';
	if (POS  < 0) O.style.left = ( pE.offsetWidth*(1 - UW) + POS ) + 'px';
	if (POS == 0) O.style.left = ( 0.5*pE.offsetWidth*(1 - UW) ) + 'px';
	O.style.top = UY + 'px';
	pE.appendChild(O);

	for ( var n = 0; n < text.length; n++ ) {
	
		if ( text[n] != '' ) {
		
			var title = text[n].split(SP)[0];
			var data = text[n].split(SP)[1];
					
			if ( data != undefined ) {
				if ( title != undefined ) {                            
					var e = document.createElement('div');
					e.className = css[0];
					O.appendChild(e);
					e.style.marginTop = '0.6em';
					if (title == '' ) e.style.marginTop = '0em';   
					e.appendChild( document.createTextNode( title ) );
				}
				var e = document.createElement('div');
				e.className = css[1];
				e.appendChild( document.createTextNode( data ) );
				O.appendChild(e);
			}    
			else {
				var e = document.createElement('div');
				e.className = css[2];
				O.appendChild(e);
				e.style.marginTop = '1em';
				e.style.marginBottom = '1em';
				if (SC) e.style.fontVariant = 'small-caps';
				e.appendChild( document.createTextNode( title ) );
			}
	
		}

	}            
	return O;
}

function offsetXY(E) {
	var eXY = new Array(2);
	var ei = E;
	eXY[0] = ei.offsetLeft;
	eXY[1] = ei.offsetTop;
	while (ei != document.body) {
		ei = ei.offsetParent;
		eXY[0] += ei.offsetLeft;
		eXY[1] += ei.offsetTop;               	
	}
	return eXY;        
}
function evPositionCursor(evt) {
// Return cursor position

	evt = (evt) ? evt : ((window.event) ? window.event : null);

	var pxy = new Array(0,0);

	getScrollingPosition = function() {
		var spxy = new Array(0,0);
		if (typeof window.pageYOffset != 'undefined'){ 
			spxy[0] = window.pageXOffset;
			spxy[1] = window.pageYOffset; 
		}
		else if (typeof document.documentElement.scrollTop != 'undefined' && document.documentElement.scrollTop > 0){
			spxy[0] = document.documentElement.scrollLeft;
			spxy[1] = document.documentElement.scrollTop;
		}
		else if (typeof document.body.scrollTop != 'undefined'){
			spxy[0] = document.body.scrollLeft;
			spxy[1] = document.body.scrollTop;
		}
		return spxy;
	}

	var sPos = getScrollingPosition();

	if (typeof evt.pageX != "undefined" && typeof evt.x != "undefined") {
		pxy[0] = evt.pageX;
		pxy[1] = evt.pageY;
	} 
	else {
		pxy[0] = evt.clientX + sPos[0];
		pxy[1] = evt.clientY + sPos[1];
	} 
	return pxy;
}

function cookieSave(name,SET,DATA) {

	// delete previous cookie
	var xdate = new Date("January 1, 2000");
	xdate = xdate.toGMTString();
	document.cookie = encodeURI(name) + "=" + DATA + ";expires=" + xdate;

	if (SET) {
		// write new cookie
		var xdate = new Date("January 1, 2012");
		xdate = xdate.toGMTString();
		document.cookie = encodeURI(name) + "=" + DATA + ";expires=" + xdate;
	}

}
function cookieLoad() {

	if (!document.cookie) return ("");
	
	var i = 0;
	while (document.cookie.charAt(i) != '=') i++;
	var name = decodeURIComponent(document.cookie.substring(0,i));
	var DATA = document.cookie.substring(i+1,document.cookie.length);
	
	return DATA;

}

function moveWithDualOpacity( id , bmp0 , bmp1 , vpx , vpy , interval , init , MoveX , MoveY ) {

	var element = document.getElementById(id);

	if (init < 0) {
		
		if ( element.movement ) clearTimeout( element.movement );

		return true;
	
	}

	if (init == 0) {
		
		if ( element.movement ) clearTimeout( element.movement );
		
		var Bmp = new Array( bmp0 , bmp1 );
		
		element.wx = vpx - element.offsetWidth;
		element.wy = vpy - element.offsetHeight;

		element.imag = new Array(2);

		while ( element.childNodes.length > 0 ) {
			element.removeChild( element.childNodes[0] );
		}

		for ( k = 0; k < 2; k++ ) {
		
			element.imag[k] = document.createElement( 'div' );
			element.appendChild( element.imag[k] );
			st_box ( element.imag[k] , 0 , 0 , element.offsetWidth , element.offsetHeight );              

			element.imag[k].style.backgroundImage = 'url(' + Bmp[k] + ')'; ;  

			if ( k == 0 ) element.imag[0].dt = -4/interval;
			if ( k == 1 ) element.imag[1].dt =  4/interval;
			
			element.imag[k].opc = 0.5;
			element.imag[k].style.opacity = element.imag[k].opc;

			element.imag[k].posx = -rnd_i( element.wx );	
			element.imag[k].posy = -rnd_i( element.wy );

			element.imag[k].style.backgroundPosition = element.imag[k].posx + 'px ' +  element.imag[k].posy + 'px';

			element.imag[k].dx = MoveX;
			element.imag[k].dy = MoveY;

		}
		
		return true;
	}

	for ( k = 0; k < 2; k++ ) {

		var xx = element.imag[k].posx;
		var yy = element.imag[k].posy;
		
		if ( MoveX != 0 ) {
	   
			xx -= element.imag[k].dx; 
			if ( ( xx > 0 ) || ( xx < -element.wx-1 ) ) element.imag[k].dx = -element.imag[k].dx; 
			element.imag[k].posx = xx;

		}

		if ( MoveY != 0 ) {

			yy -= element.imag[k].dy;
			if ( ( yy > 0 ) || ( yy < -element.wy-1 ) ) element.imag[k].dy = -element.imag[k].dy;
			element.imag[k].posy = yy;

		}
		
		element.imag[k].style.backgroundPosition = xx + 'px ' + yy + 'px';

		element.imag[k].opc += element.imag[k].dt;               

		if ( (element.imag[k].opc < 0) || (element.imag[k].opc > 1)  ) {
			element.imag[k].dt = -element.imag[k].dt;
		}
		element.imag[k].style.opacity = element.imag[k].opc;

	}
	
	var repeat = "moveWithDualOpacity('" + id + "','" + bmp0 + "','" + bmp1 + "'," + vpx + "," + vpy + "," + interval + ",1," + MoveX + "," + MoveY + ")";
	
	element.movement = setTimeout(repeat,interval);

}

function ACULA( N, A, a, phi, gamma, ksi, b, rd, THETA0 ) {
	this.N = N;
	this.A = A;
	this.a = a;
	this.phi = phi;
	this.gamma = gamma;
	this.ksi = ksi;
	this.b = b;
	this.rd = rd;
	this.THETA0;
}
function Canvas_cell ( x , y , w , h , O ) {
	var C = document.createElement('canvas');
	if (!C) return;
	C.setAttribute( 'width'  , Math.floor( w ) );
	C.setAttribute( 'height' , Math.floor( h ) );
	C.style.position = 'absolute';
	C.style.left = x + 'px';
	C.style.top =  y + 'px';
	O.appendChild(C);
	return C;        
}
function Canvas_stella ( CIRC , M , tw , th0 , rd , col , C ) {

	var nx = new Array();
	var ny = new Array();

	var n;
	var N = Math.abs(M);
	var dth = 2*Math.PI / N;
	var th = th0;
	for ( var i = 0; i < N; i++ ) {
		th += dth; 
		nx[i] = rd + rd*Math.cos(th) + tw;
		ny[i] = rd - rd*Math.sin(th) + tw;
	}
  
	var CT = C.getContext('2d');
	
	CT.strokeStyle = col;
	CT.lineWidth = tw;
	CT.beginPath();

	if ( M > 2 ) {
		if ( N % 2 == 0 ) {
			CT.moveTo ( nx[0] , ny[0] );
			for ( i = 2; i <= N; i+=2 ) {
				n = i % N;
				CT.lineTo ( nx[n] , ny[n] );
			}
			CT.moveTo ( nx[1] , ny[1] );
			for ( i = 3; i <= N+1; i+=2 ) {
				n = i % N;
				CT.lineTo ( nx[n] , ny[n] );
			}                
		}
		if ( N % 2 == 1 ) {
			CT.moveTo ( nx[0] , ny[0] );
			for ( i = 2; i < 2*N+2; i+=2 ) {
				n = i % N;
				CT.lineTo ( nx[n] , ny[n] );
			}
		}
	}
	else {
		if ( M == 1 ) {
			CT.arc ( rd+tw , rd+tw , 2*tw , 0 , 2*Math.PI , true );
		}
		if ( M == 2 || M < 0 ) {
			CT.moveTo ( nx[0] , ny[0] );
			for ( i = 1; i <= N; i++ ) {
				n = i % N;
				CT.lineTo ( nx[n] , ny[n] );
			}            
		}
	}
	CT.stroke();
	CT.closePath();            

	if (CIRC) {
		CT.beginPath();
		CT.arc ( rd+tw , rd+tw , rd , 0 , 2*Math.PI , true );
		CT.stroke();
	}

	return C;
}
function Canvas_luna ( CIRC , phase , rd , moonRGB , C ) {

	var tw = 1;
	var costheta , cosi , x0 , x1;
	var posx = new Array();
	var posy = new Array();

	var N = Math.round( 2*rd ) - 1;
	
	for ( var j = 0; j <= N; j++) {

		var y = 1.0 - 2.0 * j / N;
		
		costheta = Math.cos( Math.asin(y) );
		
		if ( phase > 0 ) {
			cosi = 1.0 - 2.0 * Math.abs(phase);
			x0 = costheta * cosi;
			x1 = x0;
			posx[j] = rd*( 1 + x1);           
			posx[2*N-j-1] = posx[j] + rd * ( costheta - x0 );
		}
		if ( phase < 0 ) {
			cosi =  2*Math.abs(phase) - 1;   
			x0 = costheta * cosi;
			x1 = -costheta;
			posx[j] = rd*( 1 + x1);           
			posx[2*N-j-1] = posx[j] + rd * ( x0 + costheta );
		}
		posy[j] = j;
		posy[2*N-j-1] = j;

	}
	
	var CT = C.getContext('2d');
	CT.strokeStyle = moonRGB;
	CT.fillStyle = moonRGB;
	CT.lineWidth = 1;

	CT.beginPath();
	CT.moveTo( posx[0] , posy[0] );
	for ( var i = 1; i < 2*N; i++ ) CT.lineTo( posx[i] , posy[i] );		
	CT.closePath();
	CT.stroke();
	CT.fill();

	if (CIRC) {
		CT.lineWidth = tw;
		CT.beginPath();
		CT.arc ( rd , rd , rd , 0 , 2*Math.PI , true );
		CT.stroke();
	}

	return C;     
}
function Canvas_hora ( N , n0 , r1 , rh , tb , ux , uy , col0 , col1 , tw , FILL , theta0 , C ) {

	var x0a, x1a , y0a , y1a, tha;                       
	var x0b, x1b , y0b , y1b, thb;
	var col;

	var P = Math.ceil(2*Math.PI*r1);
	var uvx = 2*r1 + 2*tw;
	var uvy = uvx;
	var cenx = 0.5*uvx + ux;
	var ceny = cenx + uy;
	var r0 = rh*r1;
	var r0sq = r0*r0;
	var r1sq = r1*r1;
	var dth = 2*Math.PI / N;
	var bth0 = Math.atan(0.5*tb/r0);
	var bth1 = Math.atan(0.5*tb/r1);

	var CT = C.getContext('2d');
	CT.lineWidth = tw;

	// Draw divided circle
	for ( var i = 0; i < N; i++ ) {
		tha = bth0 + i*dth + theta0;
		thb = (i+1)*dth - bth0 + theta0;
		var costha = Math.cos(tha);
		var sintha = Math.sin(tha);
		var costhb = Math.cos(thb);
		var sinthb = Math.sin(thb);
		x0a = cenx + r0*costha;
		y0a = ceny + r0*sintha;
		x0b = cenx + r0*costhb;
		y0b = ceny + r0*sinthb;
		x1a = cenx + r1*costha;
		y1a = ceny + r1*sintha;
		x1b = cenx + r1*costhb;
		y1b = ceny + r1*sinthb;

		CT.beginPath();
		if ( tb > 0 || i == n0 ) {
			CT.moveTo ( x0a , y0a );
			CT.lineTo ( x1a , y1a );
		}
		CT.arc ( cenx , ceny , r1 , tha , thb , false );
		if ( i < N-1 ) {
			CT.moveTo ( x1b , y1b );
			CT.lineTo ( x0b , y0b );
		}
		CT.arc ( cenx , ceny , r0 , thb , tha , true );
		
		if ( i == n0 ) col = col1; else col = col0;
		
		CT.strokeStyle = col;
		if ( FILL || (i == n0) ) {
			CT.fillStyle = col;
			CT.fill();
		}

		if ( i == N-1 ) CT.closePath();
		CT.stroke();
		
	}
	
	return C;

}
function Canvas_acula ( id , Acula, ux, uy, col , FILL , CIRC , pE ) {
	//RD: integer!!!!
		
	f_pattern = function() {
	
		var x,f;
		var y = new Array();
		 
		for ( var i = 0; i <= RD; i++ ) {
			
			x = Math.PI * ( 1 - i / RD );
			
			f = Math.abs ( Math.sin ( x * Math.sin ( a*x+phi ) ) );
			f = A * Math.pow ( f , gamma ) * Math.cos(0.5*x) + b*x;

			y[i] = f * RD / Math.PI;
		
		}
		return y;
	
	}

	if ( document.getElementById(id) ) pE.removeChild( document.getElementById(id) );

	var RD = Math.floor(Acula.rd);
	var N = Acula.N;
	var A = Acula.A;
	var a = Acula.a;
	var b = Acula.delta;
	var phi = Acula.phi;
	var gamma = Acula.gamma;
	var ksi = Acula.ksi * Math.PI / 180.0 / RD;
	var THETA0 = Acula.THETA0; 
	
	var C = Canvas_cell ( ux , uy , 2*RD , 2*RD , pE );
	C.setAttribute( 'id' , id );
	
	var CT = C.getContext('2d');
	if ( FILL < 0 ) CT.lineWidth = -FILL;
	else CT.lineWidth = 1;
	CT.strokeStyle = col;
	
	for ( var n = 0; n < N; n++ ) {
	
		var THETA = (Math.PI/180)*THETA0 + 2*n*Math.PI/N;

		var cosTH = Math.cos(THETA);
		var sinTH = Math.sin(THETA);
		var Y = f_pattern();
		var XP = 0;
		var YP = -Y[0];
		var XP1 =  XP*cosTH - YP*sinTH + RD;
		var YP1 = -XP*sinTH - YP*cosTH + RD;

		CT.beginPath();
		CT.moveTo ( XP1 , YP1 );
		for ( var k = 0; k <= RD; k++ ) {            

			var theta = THETA - ksi * k;
			var cosTH = Math.cos(theta);
			var sinTH = Math.sin(theta);

			XP = k;
			YP = -Y[k];
			XP1 =  XP*cosTH - YP*sinTH + RD;
			YP1 = -XP*sinTH - YP*cosTH + RD;
			CT.lineTo ( XP1 , YP1);
		}
		for ( var k = RD; k >= 0; k-- ) {

			var theta = THETA - ksi * k;
			var cosTH = Math.cos(theta);
			var sinTH = Math.sin(theta);

			XP = k;
			YP = Y[k];
			XP1 =  XP*cosTH - YP*sinTH + RD;
			YP1 = -XP*sinTH - YP*cosTH + RD;
			CT.lineTo ( XP1 , YP1 );
		}
		CT.closePath();
		CT.stroke();
	   
		if ( FILL >= 0 ) {
			CT.fillStyle = col;
			CT.fill();            
		}
	
		if ( CIRC ) {
			CT.beginPath();
			CT.arc ( RD , RD , RD , 0 , 2*Math.PI , true );
			CT.stroke();
			if ( FILL >= 0) {
				CT.fillStyle() = '#000';
				CT.fill();
			}
	   }
	
	}

	return C;

}
function Canvas_imag1 ( uvx , uvy , THETA , C , img ) {
			
   var th = Math.PI * THETA / 180.0;
   var size = Math.min ( uvx , uvy );
   var cx = 0.5*uvx;
   var cy = 0.5*uvy;
    
   var CT = C.getContext('2d');
   CT.save();
   CT.translate( cx , cy );
   CT.rotate ( th );
      CT.drawImage( img , -size/2, -size/2 , size , size );
   CT.restore();
}
        
        
        

