/* 
Anochat: anochat_system.js v. 1.0
The regular system functions - needed both in main window and in chat window
Extended for BBS, note and crypt use
*/


/*
System functions for string treatment
*/
/* Generate string for padding */
function genString() {
	var uniqseed = new Date();
	var uniquid_a = uniqseed.toString();
	var uniquid_b = MD5(uniquid_a);
	var bigstring1o = uniquid_b + 'a1';
	var bigstring1 = MD5(bigstring1o);
	var bigstring2o = uniquid_b + 'y3';
	var bigstring2 = MD5(bigstring2o);
	var bigstring3o = uniquid_b + 'u6';
	var bigstring3 = MD5(bigstring3o);
	var bigstring4o = uniquid_b + 'p8';
	var bigstring4 = MD5(bigstring4o);
	var bigstring5o = uniquid_b + 'g4';
	var bigstring5 = MD5(bigstring5o);
	var bigstring6o = uniquid_b + 'z9';
	var bigstring6 = MD5(bigstring6o);
	var bigstring7o = uniquid_b + 'd0';
	var bigstring7 = MD5(bigstring7o);
	var bigstring8o = uniquid_b + 'c0';
	var bigstring8 = MD5(bigstring8o);
	var bigstr_a = (bigstring1 + bigstring2 + bigstring3 + bigstring4 + bigstring5 + bigstring6 + bigstring7 + bigstring8);
	return bigstr_a;
}

// Create the HttpRequest
function createXHR() {
  var request = false;
    try {
       	request = new ActiveXObject('Msxml2.XMLHTTP');
   		}
    	catch (err2) {
    	try {
      	request = new ActiveXObject('Microsoft.XMLHTTP');
      }
    	catch (err3) {
			try {
				request = new XMLHttpRequest();
			}
			catch (err1) {
				request = false;
			}
		}
 }
 return request;
}
	
// Strip all html-code from text
function stripHTML(text){
	var re= /<\S[^><]*>/gi;
	return text.replace(re, "");
}

// Clean funny chars
function cleanjs(text) {
	gstr = /(\/)/gi;
	text = text.replace(gstr,"&#47;");
	return text;
}

// Trimming
function LTrim(str) {
 for (var i=0; ((str.charAt(i)<=" ")&&(str.charAt(i)!="")); i++);
 return str.substring(i,str.length);
}
function RTrim(str) {
 for (var i=str.length-1; ((str.charAt(i)<=" ")&&(str.charAt(i)!="")); i--);
 return str.substring(0,i+1);
}
function Trim(str) {
 return LTrim(RTrim(str));
}

// Function for checking whitespace
function isWhitespace(charToCheck) {
	var whitespaceChar = " ";
	if(charToCheck == whitespaceChar) {
	return true;
	} else {
	return false;
	}
}

// Trimming strings, alternative
function trimAll(sString) {
while (sString.substring(0,1) == ' '){
sString = sString.substring(1, sString.length);
}
while (sString.substring(sString.length-1, sString.length) == ' '){
sString = sString.substring(0,sString.length-1);
}
return sString;
}
// Replace
String.prototype.replaceAll = function( 
strTarget, // The substring you want to replace
strSubString // The string you want to replace in.
){
var strText = this;
var intIndexOfMatch = strText.indexOf( strTarget );
while (intIndexOfMatch != -1){
strText = strText.replace( strTarget, strSubString )
intIndexOfMatch = strText.indexOf( strTarget );
}
return( strText );
}

// Function for finding domain. Future use
function retDomain(url) {
	var domain = url.match( /:\/\/(www\.)?([^\/:]+)/ );
	domain = domain[2]?domain[2]:'';
	return domain;
}

// BR to newline
function br2nl(text) {
	//text = text.replace(/\n/g,"");
	text = text.replace(/\<br>/gi,"\n");
	//text = text.replace(/\<br \/>/gi,"\n");
	return text;
}

// Newline to BR
function nl2br(text) {
	text = text.replace(/\n/g,"<br>");
	return text;
}

// Board tags to html tags
function htmldctags(text) {
	text = text.replace(/\]/gi,">");
  text = text.replace(/\[/gi,"<");
	return text;
}

/*
System functions for keytrap / elements
*/
// Function for keytrapping
function trapkey(evt) {var c = document.layers ? evt.which : document.all ? event.keyCode : evt.keyCode; return c; };

// Function for storing caret pos
function storeCaret(textEl) {
	if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}

// Function for getting page elements, cross browser
function getElement(id) { 
	if (document.getElementById) { // W3C DOM 
		return document.getElementById(id); 
		} else if (document.all) { // IE 4 
		return document.all[id]; 
		} else if (document.layers) { // NS 4 
		return document.layers[id]; 
	} 
} 

// Function for char conversion (thanks to Jaroslaw Gilewski for discovering these) 
function C2E (str) {
    str = str.replace(/&/g, '&#38;');
    str = str.replace(/'/g, '&#39;');
    str = str.replace(/"/g, '&#34;');
    str = str.replace(/\\/g, '&#92;');
    var acc = '';
    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) > 31 && str.charCodeAt(i) < 127) acc += str.charAt(i) 
        else acc += '&#' + str.charCodeAt(i) + ';';
    }
    return acc;
}

function E2C (str) {
    str = str.replace(/(&#[0-9]+;)/g, '\n$1\n');
    str = str.replace(/\n\n/g, '\n');
    spl = str.split('\n');
    for (var i = 0; i < spl.length; i++) {
        if (spl[i].charAt(0) == '&') {
            spl[i] = spl[i].replace(/&#([0-9]+);/g, '$1');
            spl[i] = String.fromCharCode(spl[i]);
        }
    } 
    str = spl.join('');
    return str;
}