var timeoutID = 0;

function delaychange() {
clearTimeout(timeoutID);
timeoutID = setTimeout("create_preview();", 500);
}

function byte2Hex(n)
  {
    var nybHexString = "0123456789ABCDEF";
    return String(nybHexString.substr((n >> 4) & 0x0F,1)) + nybHexString.substr(n & 0x0F,1);
  }


function RGB2Color(r,g,b)
  {
    return '#' + byte2Hex(r) + byte2Hex(g) + byte2Hex(b);
  }


function colorText(str,phase)
{
  if (phase == undefined) phase = 0;
  center = 128;
  width = 127;
  frequency = Math.PI*2/str.length;
  var s = '';
  for (var i = 0; i < str.length; ++i)
  {
     red   = Math.sin(frequency*i+2+phase) * width + center;
     green = Math.sin(frequency*i+0+phase) * width + center;
     blue  = Math.sin(frequency*i+4+phase) * width + center;
     s = s + '<font color="' + RGB2Color(red,green,blue) + '">' + str.substr(i,1) + '</font>';
  }
  return s;
}

function colorText2(str,phase)
{
  if (phase == undefined) phase = 0;
  center = 128;
  width = 127;
  frequency = Math.PI*2/str.length;
  var s = '';
  for (var i = 0; i < str.length; ++i)
  {
     red   = Math.sin(frequency*i+2+phase) * width + center;
     green = Math.sin(frequency*i+0+phase) * width + center;
     blue  = Math.sin(frequency*i+4+phase) * width + center;
     s = s + '[color=' + RGB2Color(red,green,blue) + ']' + str.substr(i,1) + '[/color]';
  }
  return s;
}

function create_preview()
{
	var mytext = '';
	var increment = 1;
	mytext = $("#rainbowtext").val();
	compositerainbow = '<div class="rlink"><a href="javascript:choose_rainbow(0)">'+colorText(mytext,0*increment) + '</a></div>';
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(1)">' + colorText(mytext,1*increment) + '</a></div>';	
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(2)">' + colorText(mytext,2*increment) + '</a></div>';	
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(3)">' + colorText(mytext,3*increment) + '</a></div>';	
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(4)">' + colorText(mytext,4*increment) + '</a></div>';		
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(5)">' + colorText(mytext,5*increment) + '</a></div>';	
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(6)">' + colorText(mytext,6*increment) + '</a></div>';	
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(7)">' + colorText(mytext,7*increment) + '</a></div>';	
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(8)">' + colorText(mytext,8*increment) + '</a></div>';	
 	compositerainbow = compositerainbow + '<div class="rlink"><a href="javascript:choose_rainbow(9)">' + colorText(mytext,9*increment) + '</a></div>';	

	$("#rainbow_preview").html(compositerainbow);
}


function create_rainbow(id)
{
	var mytext = '';
	var increment = 1;
	mytext = $("#rainbowtext").val();
    return '<a href="http://glittersphere.com">'+colorText(mytext,id*increment) + '</a>';
}

function create_rainbow2(id)
{
	var mytext = '';
	var increment = 1;
	mytext = $("#rainbowtext").val();
    return colorText2(mytext,id*increment);
}

function choose_rainbow(id)
{
	var title = '<label class="inforain">Copy this HTML code (for myspace and webpages):</label><br/>';
	var content = title+'<textarea onclick="focus(); select()">'+create_rainbow(id)+'</textarea><br/><br/>';
	
	title = '<label class="inforain">For Glitter-Graphics.com and forums, use this BB code:</label><br/>'; 
	content = content + title+'<textarea onclick="focus(); select()">'+create_rainbow2(id)+'</textarea>';
	
	$("#rainbow_preview").html(content);	
}



var reversal_map =
{
    'A': '\u2200',  'B': '\u10412',  'C': '\u2183',  'D': '\u25D6',  'E': '\u018E',
    'F': '\u2132',  'G': '\u2141',   'J': '\u017F',  'K': '\u22CA',  'L': '\u2142',
    'M': '\u019C',  'N': '\u1D0E',   'P': '\u0500',  'Q': '\u038C',  'R': '\u1D1A',
    'T': '\u22A5',  'U': '\u2229',   'V': '\u1D27',  'W': 'M',       'Y': '\u2144',

    'a': '\u0250',  'b': 'q',        'c': '\u0254',  'd': 'p',       'e': '\u01DD',
    'f': '\u025F',  'g': '\u0183',   'h': '\u0265',  'i': '\u0131',  'j': '\u027E',
    'k': '\u029E',  'l': '\u05DF',   'm': '\u026F',  'n': 'u',       'r': '\u0279',
    't': '\u0287',  'v': '\u028C',   'w': '\u028D',  'y': '\u028E',

    '.': '\u02D9',  '[': ']',        '(': ')',       '{': '}',       '?': '\u00BF',
    '!': '\u00A1',  '&': '\u214B',   '\'': ',',      '\"': ',,',     '<': '>',
    '_': '\u203E',  '\\': '\\',      ';': '\u061B',  '`': ',',       ',': '\'',

    '1': '\u21C2',  '2': '\u1105',   '3': '\u1110',  '4': '\u3123',  '5': '\u078E',
    '6': '9',       '7': '\u3125',   '9': '6'
};

var complete_map;

function reverse_text(text)
{
    if(!complete_map)
    {
        complete_map = { };
        for(var key in reversal_map)
        {
            var val = reversal_map[key];
            if(!reversal_map[val])
                complete_map[reversal_map[key]] = key;
            complete_map[key] = val;
        }
    }

    var str = "";

    for (var i = text.length - 1; i >= 0; --i)
    {
        var ch = text.charAt(i);
        var rev = complete_map[ch];
        if(rev)
            str += rev;
        else
            str += ch;
    }

    return str;
}

function rt()
{
	var text = $("#rainbowtext2").val();
    $("#rainbowtext").val(reverse_text(text));
    delaychange();
}

function rt2()
{
	var text = $("#rainbowtext").val();
    $("#rainbowtext2").val(reverse_text(text));
}