/*===============================================================*/
/* Copyright (c) CuteStudio Ltd. 2004-2006, All Rights Reserved. */
/*===============================================================*/
var ch_map = [
'&',	'&amp;','<',	'&lt;','>',	'&gt;','/',	'&#47;','\'',	'&#39;','"',	'&#34;','\n',	'<br/>','\n',	'<br>'
];var f_testing = false;function leaf(path){var i = path.length - 1;while (i && (path.charAt(i) != '/')) i--;if (i) path = path.substr(i+1);return path;}
function cute4html(text){for (var i=0; i<ch_map.length; i+=2){var re = new RegExp(ch_map[i], "g");text = text.replace(re, ch_map[i+1]);}
return text;}
function html4cute(text){for (var i=ch_map.length-2; i>=0; i-=2){var re = new RegExp(ch_map[i+1], "gi");text = text.replace(re, ch_map[i]);}
return text;}
function find_smiley(img){img = leaf(img);if (img.length == 7){if ((img.charAt(0) == 's') && (img.substr(3) == '.gif')){var num = img.charAt(1) * 10 + img.charAt(2);if ((num >= 1) || (num <= 25))return img.substring(0,3);}
}
return 's01';}
function look_for_field(cmd, field){var idx = cmd.indexOf(field); if (idx == -1) return null;if ((idx > 0) && (cmd.charAt(idx-1) == '-')){cmd = cmd.substr(idx + cmd.length);idx = cmd.indexOf(field);if (idx == -1) return null;}
cmd = cmd.substr(idx + field.length);idx = cmd.indexOf('='); if (idx == -1) return null;cmd = cmd.substr(idx+1);while (cmd.charAt(0) == ' ') cmd = cmd.substr(1);if (cmd.charAt(0) == '"') cmd = cmd.substr(1);for (var i=0; i< cmd.length; i++){var ch = cmd.charAt(i);if ((ch == ' ') || (ch == '"') || (ch == "'") || (ch == '>')){return cmd.substring(0,i);}
}
return cmd;}
function decode_char(ichar){switch(ichar){case 'amp': return '&';case 'quot': return '"';case 'lt': return '<';case 'gt': return '>';case 'nbsp': return ' ';default: return '?';}
}
function toHex(num){var n = num >> 4;var s = n.toString(16);return s;}
function cutecolour(colour){colour = colour.toLowerCase();if (colour.match(/^rgb/)){colour = colour.replace(/^rgb/, '');colour = colour.replace(/[ ()]/gi, '');var rgb = colour.split(',');if (rgb.length == 3)colour = '#'+toHex(rgb[0])+toHex(rgb[1])+toHex(rgb[2]);else colour = '#000';}
else if (colour.length == 7){colour = "#" + colour.charAt(1) + colour.charAt(3) + colour.charAt(5);}
return colour;}
function calign(align){var ch = align.charAt(0);return ch.ucFirst();}
function findmark(str, idx, spaces){var len = str.length;while (idx < len){var ch = str.charAt(idx);switch(ch){case "'": case '"': case ';': case ':': case '>': return idx;case ' ': if (spaces) return idx;default: idx++; break;}
}
return len;}
function findnomark(str, idx){var len = str.length;while (idx < len){var ch = str.charAt(idx);switch(ch){case "'": case '"': case ':': case ' ': case ';': idx++; break;default: return idx;}
}
return -1;}
function newfontsize(fontsize, size){var newsize;var sign = size.charAt(0);if (sign == '-') { size = size.substr(1); newsize = fontsize - size; }
else if (sign == '+') { size = size.substr(1); newsize = fontsize + size; }
else newsize = size;if (size.length != 1) return null;if (newsize < 1) newsize = 1; else if (newsize > 7) newsize = 7;return newsize;}
function html2cute(html){var stack = new Array();var sp = 0;var output = '';var fontsize = 3;var laststem = "";html = html.replace(/\r/g, '');if (isIE){html = html.replace(/^<p>/i, '');html = html.replace(/<\/p>$/i, '');}
html = html.replace(/ \n/g, '\n');html = html.replace(/\n/g, ' ');if (isSafari)html = html.replace(/SPAN class="Apple-style-span"/gi, 'span');if (isOpera) html = html.replace(/<br\/>/gi, "\n");html = html.replace(/<br>/gi, "\n");var inbrac = false;var inchar = false;var cmd  = '';var text = '';var ichar = '';var was_space = false;var li_suppress = false;for (var h=0; h<html.length; h++){var ch = html.charAt(h);switch(ch){case '<':
if (!inchar){inbrac = true;output += text; text = '';was_space = false;}
break;case '&':
if (!inbrac && !inchar) inchar = true;else if (inbrac) cmd += ch; else text += ch;break;case ';':
if (inchar){inchar = false;var ch = decode_char(ichar); ichar = '';var is_space = (ch == ' ');if (is_space){if (was_space)text = text.replace(/]$/, "_]");else text += '[_]';}
else text += ch;was_space = is_space;}
else if (inbrac) cmd += ch; else text += ch;break;case '>':
cmd = cmd.toLowerCase();if (cmd.charAt(cmd.length - 1) == '/')cmd = cmd.substring(0, cmd.length-1);inbrac = false;if (cmd.charAt(0) == '/'){cmd = cmd.substr(1);switch(cmd){default:
var sval = (sp > 0) ? stack[--sp] : "";switch (sval){case 1: case 2: case 3: case 4: case 5:
while (sval > 0) { output += '[]'; sval--; }
break;case '-': break;default:
if (sval && (sval.charAt(0) == ":")){var cnt = sval.substr(1);var idx = cnt.indexOf(":");var count = cnt.substring(0,idx);fontsize = cnt.substr(idx+1);while (count > 0) { output += '[]'; count--; }
}
else output += '[]';break;}
break;}
}
else {var idx = cmd.indexOf(' ');var stem = (idx != -1) ? cmd.substring(0,idx) : cmd;var newsize = 0;var count = 0;var hascloser = true;switch(stem){case 'ul': case 'ol':
if (isIE &&(stem == laststem))break;var cm = (cmd == 'ul') ? '*' : 'n';output += '['+cm+']';count ++;li_suppress = true;break;case 'li':
if (!li_suppress) output += '[.]';li_suppress = false;break;case 'strong': stem = 'b';case 'i': case 'b': case 'u':
output += '['+stem+']';count++;break;case "em": output += '[i]'; count++; break;case 'p':
if (isIE)output += '\n';else { output += '[p]'; count++; }
break;case 'big':
newsize = newfontsize(fontsize, "+1");if (newsize) { output += '['+newsize+']'; count++; }
break;case 'small':
newsize = newfontsize(fontsize, "-1");if (newsize) { output += '['+newsize+']'; count++; }
break;case 'font':
var size = look_for_field(cmd, 'size');if (size){newsize = newfontsize(fontsize, size);if (newsize) { output += '['+newsize+']'; count++; }
}
var fcolor = look_for_field(cmd, 'color');if (fcolor){output += '['+cutecolour(fcolor)+']';count++;}
break;case 'img':
var img = look_for_field(cmd, 'src');if (img){img = find_smiley(img);output += '['+img+']';hascloser = false;}
break;case 'div': case 'span':
break;case 'center': output += '[C]'; count++; break;case 'blockquote':
output += '[I]';count++;break;case 'br':
output += '\n';hascloser = false;break;}
var fstyle = 'style';var idx = cmd.indexOf(fstyle);if (idx != -1){cmd = cmd.replace(/ /g, '');idx += fstyle.length;idx = findnomark(cmd, idx);var ok=true;while (ok && (idx != -1)){ok = false;var nend = findmark(cmd, idx+1, true);if (nend != -1){var name = cmd.substring(idx, nend);var vstart = findnomark(cmd, nend);if (vstart != -1){var vend = findmark(cmd, vstart, false);if (vend != -1){var value = cmd.substring(vstart, vend);if (f_testing)txt('param: "'+name+'", value: "'+value+'"<br>');switch(name){case "color":
output += '['+cutecolour(value)+']';count++;break;case "background-color":
output += '[b.'+cutecolour(value)+']';count++;break;case "text-decoration":
if (value == 'underline'){ output += '[u]'; count++; }
break;case "font-weight":
if (value == 'bold'){ output += '[b]'; count++; }
break;case "font-style":
if (value == 'italic'){ output += '[i]'; count++; }
break;case "font-size":
newsize = newfontsize(fontsize, value);if (newsize){ output += '['+newsize+']'; count++; }
break;case "text-align":
output += '['+calign(value)+']';count++;break;}
ok = true;}
}
}
if (ok){idx = findnomark(cmd, vend);}
}
}
var falign = 'align=';var idx = cmd.indexOf(falign);if (idx != -1){idx += falign.length;idx = findnomark(cmd, idx);if (idx != -1){var end = findmark(cmd, idx+1, true);if (end != -1){var value = cmd.substring(idx,end);output += '['+calign(value)+']';count++;}
}
}
if (newsize) { stack[sp++] = ":"+count+":"+fontsize; fontsize = newsize; }
else if (count) stack[sp++] = count;else if (hascloser) stack[sp++] = "-";}
laststem = stem;cmd = '';break;default:
if (inbrac) cmd += ch;else if (inchar) ichar += ch;else { text += ch; was_space = false; }
break;}
}
if (text) output += text;return output;}
var indent = 0;var indentdx = 40;function cute_ending(cmd){var output;switch(cmd){case 'ul': case 'ol':
output = '</li></'+cmd+'>';break;case 'indent':
indent -= indentdx;output = '</div>';break;case 'unknown': output = '[]'; break;case '9pt': output = ''; break;default:
output = '</'+cmd+'>';break;}
return output;}
function cute2html(cute, limit){var stack = new Array();var sp = 0;var output = '';cute = cute.replace(/:\)/g, "[s01]");cute = cute.replace(/:\(/g, "[s05]");cute = cute.replace(/;\)/g, "[s02]");cute = cute.replace(/;\(/g, "[s06]");cute = cute.replace(/8\)/g, "[s09]");cute = cute.replace(/:o/g, "[s17]");cute = cute.replace(/:P/g, "[s12]");cute = cute.replace(/:D/g, "[s11]");var inbrac = false;var cmd  = '';var text = '';if (!limit || (limit > cute.length))limit = cute.length;for (var c=0; c<limit; c++){var ch = cute.charAt(c);switch (ch){case '[':
if ((c+1) < cute.length){ch = cute.charAt(c+1);if (ch == '['){text += '[';c++;break;}
}
inbrac = true;output += text;text = '';break;case ']':
if (!inbrac){text += ch;break;}
inbrac = false;var precmd = null;if (cmd.charAt(1) == '.'){precmd = cmd.charAt(0);cmd = cmd.substr(2);}
switch(cmd){case '':
if (sp > 0){cmd = stack[--sp];output += cute_ending(cmd);}
break;case 'b': case 'i': case 'u':
stack[sp++] = cmd;output += '<'+cmd+'>';break;case 'L': stack[sp++] = 'div'; output += '<div align=left>'; break;case 'C': stack[sp++] = 'div'; output += '<div align=center>'; break;case 'R': stack[sp++] = 'div'; output += '<div align=right>'; break;case 'p': output += '<p>'; break;case '*': case 'n':
cmd = (cmd == '*') ? 'ul' : 'ol';stack[sp++] = cmd;output += '<'+cmd+'><li>';break;case '.':
output += '</li><li>';break;case 'aqua': case 'black': case 'blue': case 'fuchsia': case 'gray':
case 'green': case 'lime': case 'maroon': case 'navy': case 'olive':
case 'purple': case 'red': case 'silver': case 'teal': case 'white': case'yellow':
stack[sp++] = 'span';var type = (precmd == 'b') ? 'background-color' : 'color';output += '<span style="'+type+':'+cmd+';">';break;case '1': case '2': case '3': case '4': case '5': case '6': case '7':
stack[sp++] = 'font';output += '<font size='+cmd+'>';break;case '9pt': stack[sp++] = cmd; break;case 'I':
stack[sp++] = "blockquote";output += "<blockquote>";break;default:
var type = (precmd == 'b') ? 'background-color' : 'color';var unknown = true;switch(cmd.charAt(0)){case '#':
var rgb = cmd.substr(1);rgb = rgb.toLowerCase();if (((rgb.length == 3) || (rgb.length == 6))&& (!rgb.match(/[^0-9a-f]/))){stack[sp++] = 'span';output += '<span style="'+type+':#'+rgb+';">';unknown = false;}
break;case 's':
var num = cmd.substr(1);if ((num.length == 2) && (num >= 1) && (num <= 25)){output += '<img src="'+cmd+'.gif">';unknown = false;}
break;case '_':
var len = cmd.length;while (len--) output += '&nbsp;';unknown = false;break;case '-': case '+':
var inc = cmd.charAt(1);if (inc < 1) inc = 1; else if (inc > 7) inc = 7;stack[sp++] = 'font';output += '<font size="'+cmd.charAt(0)+inc+'">';unknown = false;break;}
if (unknown){stack[sp++] = 'unknown';output += '['+cmd+']';}
break;}
cmd = '';break;default:
if (inbrac) cmd += ch;else {switch (ch){case '<':  text += '&lt;'; break;case '>':  text += '&gt;'; break;case '\n': text += '<br>'; break;default:
text += ch;break;}
}
break;}
}
if (text) output += text;while (sp > 0){cmd = stack[--sp];output += cute_ending(cmd);}
return output;}
