﻿// Элементы
var b = document.getElementsByTagName('blink');
var rainbow = document.getElementsByTagName('rainbow');

var rac = new Array();
var ra = 0;
var br_state = 0;
var pbg = "";
var defs = new Array();
//---------Essential functions---------------

function hsv2rgb(h,s,v) {
// Adapted from http://www.easyrgb.com/math.html
// hsv values = 0 - 1, rgb values = 0 - 255
var r, g, b;
var RGB = new Array();
if(s==0){
  RGB[0]=RGB[1]=RGB[2]=Math.round(v*255);
}else{
  // h must be < 1
  var var_h = h * 6;
  if (var_h==6) var_h = 0;
  //Or ... var_i = floor( var_h )
  var var_i = Math.floor( var_h );
  var var_1 = v*(1-s);
  var var_2 = v*(1-s*(var_h-var_i));
  var var_3 = v*(1-s*(1-(var_h-var_i)));
  if(var_i==0){ 
    var_r = v; 
    var_g = var_3; 
    var_b = var_1;
  }else if(var_i==1){ 
    var_r = var_2;
    var_g = v;
    var_b = var_1;
  }else if(var_i==2){
    var_r = var_1;
    var_g = v;
    var_b = var_3
  }else if(var_i==3){
    var_r = var_1;
    var_g = var_2;
    var_b = v;
  }else if (var_i==4){
    var_r = var_3;
    var_g = var_1;
    var_b = v;
  }else{ 
    var_r = v;
    var_g = var_1;
    var_b = var_2
  }
  //rgb results = 0 ? 255  
  RGB[0]=Math.round(var_r * 255);
  RGB[1]=Math.round(var_g * 255);
  RGB[2]=Math.round(var_b * 255);
  }
return RGB;
};

function splitby2(str)
{
	var res = new Array();
	var i,k=0;
	var sub = '';
	while((sub = str.substr(i++,2)) != '')
	{
		res[k++] = sub;
		i++;
	}
	return res;
}

function colorNameToHex(color)
{
    var colors = {"aliceblue":"f0f8ff","antiquewhite":"faebd7","aqua":"00ffff","aquamarine":"7fffd4","azure":"f0ffff",
    "beige":"f5f5dc","bisque":"ffe4c4","black":"000000","blanchedalmond":"ffebcd","blue":"0000ff","blueviolet":"8a2be2","brown":"a52a2a","burlywood":"deb887",
    "cadetblue":"5f9ea0","chartreuse":"7fff00","chocolate":"d2691e","coral":"ff7f50","cornflowerblue":"6495ed","cornsilk":"fff8dc","crimson":"dc143c","cyan":"00ffff",
    "darkblue":"00008b","darkcyan":"008b8b","darkgoldenrod":"b8860b","darkgray":"a9a9a9","darkgreen":"006400","darkkhaki":"bdb76b","darkmagenta":"8b008b","darkolivegreen":"556b2f",
    "darkorange":"ff8c00","darkorchid":"9932cc","darkred":"8b0000","darksalmon":"e9967a","darkseagreen":"8fbc8f","darkslateblue":"483d8b","darkslategray":"2f4f4f","darkturquoise":"00ced1",
    "darkviolet":"9400d3","deeppink":"ff1493","deepskyblue":"00bfff","dimgray":"696969","dodgerblue":"1e90ff",
    "firebrick":"b22222","floralwhite":"fffaf0","forestgreen":"228b22","fuchsia":"ff00ff",
    "gainsboro":"dcdcdc","ghostwhite":"f8f8ff","gold":"ffd700","goldenrod":"daa520","gray":"808080","green":"008000","greenyellow":"adff2f",
    "honeydew":"f0fff0","hotpink":"ff69b4",
    "indianred ":"cd5c5c","indigo ":"4b0082","ivory":"fffff0","khaki":"f0e68c",
    "lavender":"e6e6fa","lavenderblush":"fff0f5","lawngreen":"7cfc00","lemonchiffon":"fffacd","lightblue":"add8e6","lightcoral":"f08080","lightcyan":"e0ffff","lightgoldenrodyellow":"fafad2",
    "lightgrey":"d3d3d3","lightgreen":"90ee90","lightpink":"ffb6c1","lightsalmon":"ffa07a","lightseagreen":"20b2aa","lightskyblue":"87cefa","lightslategray":"778899","lightsteelblue":"b0c4de",
    "lightyellow":"ffffe0","lime":"00ff00","limegreen":"32cd32","linen":"faf0e6",
    "magenta":"ff00ff","maroon":"800000","mediumaquamarine":"66cdaa","mediumblue":"0000cd","mediumorchid":"ba55d3","mediumpurple":"9370d8","mediumseagreen":"3cb371","mediumslateblue":"7b68ee",
    "mediumspringgreen":"00fa9a","mediumturquoise":"48d1cc","mediumvioletred":"c71585","midnightblue":"191970","mintcream":"f5fffa","mistyrose":"ffe4e1","moccasin":"ffe4b5",
    "navajowhite":"ffdead","navy":"000080",
    "oldlace":"fdf5e6","olive":"808000","olivedrab":"6b8e23","orange":"ffa500","orangered":"ff4500","orchid":"da70d6",
    "palegoldenrod":"eee8aa","palegreen":"98fb98","paleturquoise":"afeeee","palevioletred":"d87093","papayawhip":"ffefd5","peachpuff":"ffdab9","peru":"cd853f","pink":"ffc0cb","plum":"dda0dd","powderblue":"b0e0e6","purple":"800080",
    "red":"ff0000","rosybrown":"bc8f8f","royalblue":"4169e1",
    "saddlebrown":"8b4513","salmon":"fa8072","sandybrown":"f4a460","seagreen":"2e8b57","seashell":"fff5ee","sienna":"a0522d","silver":"c0c0c0","skyblue":"87ceeb","slateblue":"6a5acd","slategray":"708090","snow":"fffafa","springgreen":"00ff7f","steelblue":"4682b4",
    "tan":"d2b48c","teal":"008080","thistle":"d8bfd8","tomato":"ff6347","turquoise":"40e0d0",
    "violet":"ee82ee",
    "wheat":"f5deb3","white":"ffffff","whitesmoke":"f5f5f5",
    "yellow":"ffff00","yellowgreen":"9acd32"};

    if (typeof colors[color.toLowerCase()] != 'undefined')
        return colors[color.toLowerCase()];
	else	return color.replace('#','');
}
//-------------------------------------------

// Эффекты
//

//Эпилепсия
function Effect(i)
{
	var def = window.defs[i];
	var s = def.obj.style;
	var r = (def.color[0]+Math.floor(def.dcolor[0]*(Math.random() - 0.5)));
	var g = (def.color[1]+Math.floor(def.dcolor[1]*(Math.random() - 0.5)));
	var b = (def.color[2]+Math.floor(def.dcolor[2]*(Math.random() - 0.5)));
	r = (r>250?250:r); if(r<0) r = 0;
	g = (g>250?250:g); if(g<0) g = 0;
	b = (b>250?250:b); if(b<0) b = 0;
	r = r.toString(16);  if(r.length < 2) r = '0' +''+ r;
	g = g.toString(16); if(g.length < 2) g = '0' +''+ g;
	b = b.toString(16); if(b.length < 2) b = '0' +''+ b;
	s.color = '#' + r + g + b;
	//s.fontSize = def.size + Math.floor(def.dsize*(Math.random() - 0.5)) + '' +def.measure.toString();
	s.position = 'absolute';
	//s.top = def.top;
	//s.left = def.left;
	s.position = 'relative';
	s.top = Math.floor(def.dpos*(Math.random() - 0.5)) + 'px';
	s.left = Math.floor(def.dpos*(Math.random() - 0.5)) + 'px';
	setTimeout("Effect("+i+");",def.delay);
	return;
}

// Мигание
function blink()  
{
	for (var i=0;i<b.length;i++) 
	{
		b[i].style.visibility = (b[i].style.visibility == 'visible') ? 'hidden' : 'visible';
	}
	setTimeout("blink();",250);
	return;
}


//ОСТАВЬТЕ МЕНЯ В ПОКОЕ
function clean(caller)
{
	if (br_state)
	{
		br_switch();
	}
	captureBackground();
	caller.value="ВРУБИТЬ, ПОХУЙ";
	caller.onclick="paint(this);";
	return;
}

//Снова разрисовать фон
function paint(caller)
{
	var bod = document.getElementsByTagName("body")[0];
	bod.style.background = pbg;
	bod.style.backgroundImage = pbg;
	caller.value="ВЫРУБИТЬ НАХУЙ";
	caller.onclick="clean(this);";
	return;
}

//Запистаь текущий фон в переменную pdb и очистить фон.
function captureBackground()
{
	var bod = document.getElementsByTagName("body")[0];
	switch(getBrowser())
	{
	case "gecko": //TESTED (Firefox)
		var img = getComputedStyle(bod,"").getPropertyValue("background-image");
		if((img != "")&&(img != "none"))
		{
			pbg = img;
		}
		else
		{
			pbg = bod.getPropertyValue("background");
		};
		bod.style.backgroundImage = "none";
		document.bgColor = "#FFFFFF";
	break;
		
	case "opera": //TESTED
	case "msie":
	default:
		var img = bod.currentStyle.backgroundImage;
		if((img != "")&&(img != "none"))
		{
			pbg = img;
		}
		else
		{
			pbg = bod.currentStyle.background;
		};
		bod.style.backgroundImage = "none";
		bod.style.background = "#FFFFFF";
	break;
	}
	return;
}

//Радужный фон
function backrain()
{
	var bod = document.getElementsByTagName("body")[0];
	if (br_state) 
	{
		if (ra > 255) ra = 0;
		rac = hsv2rgb(ra++/255,0.9,1);
		bod.style.background = '#' + rac[0].toString(16).toUpperCase() + rac[1].toString(16).toUpperCase() + rac[2].toString(16).toUpperCase();
		setTimeout("backrain(br_state);",20);
	}
	else 
	{
		bod.style.background = 'white';//pbg; 
		//bod.style.backgroundImage = pbg;
	}
	return;
}

function br_switch()
{/*
if (!br_state)
{
	captureBackground();
}*/
	br_state = 1 - br_state;
	backrain();
	return true;
}
//<span style="background: url(http://upyachka.ru/images/11/rainbow_man_20081125170448.gif);">
		

// Запуск
function InitEffects()
{
	var elems = document.getElementsByTagName('effect');
	var i=0;
	var elem;
	var def;
        //br_switch();
        blink();
	while(elem=elems[i++])
	{
		def = new Object;
		def.measure = (elem.getAttribute('measure')?elem.getAttribute('measure'):'pt');
		def.delay = parseInt(Math.floor((elem.getAttribute('speed')?1/elem.getAttribute('speed'):100)),10);
		def.dsize = parseInt((elem.getAttribute('dsize')?elem.getAttribute('dsize'):3),10);
		if(def.dsize >10) def.dsize=10;
		def.dpos = parseInt((elem.getAttribute('dpos')?elem.getAttribute('dpos'):5),10);
		if(def.dpos >20) def.dpos=20;
		/*if(elem.getAttribute('dcolor'))
		{
			var arr = splitby2(colorNameToHex(elem.getAttribute('dcolor')));
			def.dcolor = [parseInt(arr[0],16),parseInt(arr[1],16),parseInt(arr[2],16)];
		}
		else */def.dcolor = [250,250,250];
		/*if(elem.getAttribute('color'))
		{
			var arr = splitby2(colorNameToHex(elem.getAttribute('color')));
			def.color = [parseInt(arr[0],16),parseInt(arr[1],16),parseInt(arr[2],16)];
		}
		else */def.color = [0,0,0];
		def.size = parseInt((elem.getAttribute('size')?elem.getAttribute('size'):12),10);
		elem.style.display='inline-block';
		elem.style.position='absolute';
		def.left = getPos(elem).x;
		def.top = getPos(elem).y;
		elem.style.position='relative';
		elem.style.padding = def.dsize + def.measure;
		elem.style.margin = def.dpos + 'px';
		def.obj = elem;
		window.defs[i] = def;
		Effect(i);
	}
	
	
	return;
}

