var inproc = false;
var redwin = '';
//var urlRegEx = /^(http(s?):\/\/{1})(((www\.)?[A-Za-z0-9-]{3,}|(www\.)?[A-Za-z0-9-]{3,}\.){1})([A-Za-z0-9-]{3,})\.(co(m|\.uk{1})|net|org|edu|gov([\.a-z]*)|mil|net|biz|info|name|museum|us|ca|uk\.com|tv|ru|de|it|fr|es|cz|pl|fm|(ac!me)\.uk){1}(.+)*$/i;
var urlRegEx = /^(http(s?):\/\/{1})(www\.)?([a-zA-Z0-9]{1}[a-zA-Z0-9\-]{1,62}[a-zA-Z0-9]{1}){1}(\.[a-zA-Z0-9]{1}[a-zA-Z0-9\-]{1,62}[a-zA-Z0-9]{1})*\.(co(m|\.uk{1})|net|org|edu|gov([\.a-z]*)|mil|net|biz|info|name|museum|us|ca|uk\.com|com\.ar|tv|ru|de|it|fr|es|cz|pl|jp|fm|(ac|me)\.uk){1}(.+)*$/i;

function displayMSG(id,classn,html,display){
    document.getElementById(id).innerHTML = html;
    if(display.length>0)document.getElementById(id).style.display = display;
    if(classn.length>0)document.getElementById(id).className = classn;
}

function hideMSG( id ){
    document.getElementById(id).style.display = 'none';
    document.getElementById(id).innerHTML='';
	document.getElementById(id).className='';
}

function cWin( page, name, w, h, scroll, pos ){
    if( pos=="random" ){
        LeftPosition = (screen.width) ? Math.floor(Math.random()*(screen.width-w)):100;
        TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;
    }

    if( pos=="center" ){
        LeftPosition=(screen.width)?(screen.width-w)/2:100;
        TopPosition=(screen.height)?(screen.height-h)/2:100;
    }
    else if((pos!="center" && pos!="random") || pos==null){
        LeftPosition=0;
        TopPosition=20
    }

    settings = 'width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no';

    if(name=='playwin')
    {
        redwin = window.open( page, name, settings );
        if(redwin.focus)
        {
            redwin.blur();
            redwin.focus();
        }
    }
    else
    {
        popwin = window.open( page, name, settings );
        if(popwin.focus)
        {
            popwin.blur();
            popwin.focus();
        }
    }

}

function closeWin()
{
    redwin = '';
    self.close();
}

function javascriptsafe(input){
    var output = input.replace(/\'/g, "[sq]");
    output = output.replace(/\"/g, '[dq]');
    return output;
}

function unjavascriptsafe(input){
    var patterns = Array(
						 /\[sq\]/gi,
						 /\[dq\]/gi
						 );
    var replacments = Array(
							"'",
							'"'
							);
	for( i = 0; i < patterns.length; i++ ){
		input = input.replace( patterns[i], replacments[i]);
	}
	return input;
}

function breakToNewLine(input)
{
    output = input.replace(/<br \/>/, '\n');
	return output;
}

/* ############################# LOGIN ############################# */

var minY = 14;
var maxY = 140;
var y = 14;
var increment = 8;
var speed = 10;
var endHeight = 0;
var erHeight = 0;

function showLR(elId, elId2, erElId)
{
	var obj = document.getElementById(elId);
	var obj2 = document.getElementById(elId2);
	erHeight = document.getElementById(erElId).style.display == 'none' ? 0 : parseInt(document.getElementById(erElId).style.height)+20;
	if (obj2.style.display == 'block')
	{
		colapse(elId2, elId, erElId);
	}
	else
	{
		init(obj, elId, erElId);
	}
}

function init(obj, elId, erElId)
{
	if (obj.style.display == 'none')
	{
		maxY = parseInt(obj.style.height) + erHeight;
		obj.style.display = 'block';
		expand(elId);	
	} 	
	else
	{
		colapse(elId,'');	
	}
}

function expand(elId)
{		
	document.getElementById('accountPanel').style.height = y + 'px';
	if (y > maxY)
	{
		clearTimeout(t);
		endHeight = parseInt(document.getElementById('accountPanel').style.height);
		return;
	}
	y += increment;
	t = setTimeout('expand(\''+elId+'\')', speed);
}

function colapse(elId, elId2, erElId)
{
	document.getElementById('accountPanel').style.height = y + 'px';
	if (y <= minY)
	{
		y = minY;
		document.getElementById('accountPanel').style.height = minY + 'px';
		document.getElementById(elId).style.display = 'none';
		clearTimeout(t);
		if (elId2 != ''){
			showLR(elId2, elId, erElId);	
		}
		return;
	}
	y -= increment;
	t = setTimeout('colapse(\''+elId+'\', \''+elId2+'\', \''+erElId+'\')', speed);
}

function submitIt(w)
{
	switch (w)
	{
		case 'l':
		
			var formObj = document.forms['login_form'];
			var parameters = 'mode=login&name='+encodeURIComponent(formObj.login_name.value)+'&pass='+encodeURIComponent(formObj.login_pass.value)+'&sli='+(formObj.login_sli.checked ? 'y' : 'n');
			req_accpanel(parameters);
			break;
			
		case 'r':
		
			var formObj = document.forms['register_form'];
			if (formObj.register_agree.checked)
			{
				var parameters = 'mode=register&name='+encodeURIComponent(formObj.register_name.value)+'&email='+encodeURIComponent(formObj.register_email.value);
				req_accpanel(parameters);
			}
		
			break;
	}
}

function req_accpanel(parameters)
{
    if(inproc)
    {
        setTimeout("req_accpanel('"+parameters+"')", 1000);
    }
	inproc = true;
	AJAXRequest.doAJAXPost('/source/user_panel.php', parameters, 'process_userpanel', 'txt');
}

function process_userpanel()
{
    AJAXUP=AJAXRequest.AJAXOBJ;
	if(AJAXUP.readyState == 4){
		userpanel_show_result(AJAXUP.status);
	}
}

function userpanel_show_result(status)
{
    inproc = false;

    if(status == 200)
    {
    	var strHtml = '';
        var output = AJAXUP.responseText.parseJSON();
        switch (output.mode)
        {
        	case 'login':
        	
	        switch (output.state)
	        {
	        	case 'init':
	
		        strHtml = '<table cellpadding="0" cellspacing="0" class="baseTable">';
				strHtml += '<tr>';
				strHtml += '<td width="30%" align="left">';
				strHtml += '<a href="javascript:void(0)" onclick="'+output.link1OnClick+'" class="lnk-white11" title="'+output.link1Title+'">'+output.link1Text+'</a></td>';
				strHtml += '<td width="70%" align="left">';
				strHtml += '<a href="javascript:void(0)" onclick="'+output.link2OnClick+'" class="lnk-white11" title="'+output.link2Title+'">'+output.link2Text+'</a></td>';
				strHtml += '</tr>';
				strHtml += '</table>';
				break;
			
				case 'logged':
			
				strHtml = '<table cellpadding="0" cellspacing="0" class="baseTable">';
				strHtml += '<tr>';
				strHtml += '<td colspan="2" height="20" valign="top">';
				strHtml += '<p class="h4custom" style="margin:0px 0px 10px 0px;padding:0px;">user:' + output.user + '</p></td>';
				strHtml += '</tr>';
				strHtml += '<tr>';
				strHtml += '<td width="55%" align="left"><a href="/accounts/" class="lnk-white11" title="view your rednetic account">my account</a></td>';
				strHtml += '<td width="45%" align="left"><a href="/accounts/logout.php" class="lnk-white11" title="log out of your rednetic account with rednetic.net">logout</a></td>';
				strHtml += '</tr>';
				strHtml += '</table>';
				minY = 38;
				increment = 6;
				showLR('accountLoginBox', 'accountRegisterBox', 'accountErrBox');
				break;
			}
			document.getElementById('accountLinkBox').innerHTML = strHtml;
			if (output.error != '')
			{
				document.getElementById('accountErrBox').innerHTML = output.error;
				document.getElementById('accountErrBox').style.display = 'block';
				document.getElementById('accountPanel').style.height = (endHeight+parseInt(document.getElementById('accountErrBox').scrollHeight)) + 'px';
				erHeight = parseInt(document.getElementById('accountErrBox').offsetHeight)-10;
				document.getElementById('accountErrBox').style.height = erHeight+'px';
			}
			break;
			
			case 'register':
			
			switch (output.state)
	        {
				case 'init':
				
				if (output.error != '')
				{
					document.getElementById('regErrBox').innerHTML = output.error;
					document.getElementById('regErrBox').style.display = 'block';
					document.getElementById('accountPanel').style.height = (endHeight+parseInt(document.getElementById('regErrBox').scrollHeight)) + 'px';
					erHeight = parseInt(document.getElementById('regErrBox').offsetHeight)-10;
					document.getElementById('regErrBox').style.height = erHeight+'px';
				}		
				break;
				
				case 'registered':
				
				if (output.message != '')
				{ 
					document.getElementById('regErrBox').id = 'regMsgBox';
					document.getElementById('regMsgBox').innerHTML = output.message;
					document.getElementById('regMsgBox').style.display = 'block';
					document.getElementById('accountPanel').style.height = (parseInt(document.getElementById('accountPanel').style.height)+parseInt(document.getElementById('regMsgBox').scrollHeight)) + 'px'; 
					erHeight = parseInt(document.getElementById('regMsgBox').offsetHeight)-10;
					document.getElementById('regMsgBox').style.height = erHeight+'px';
				}
				break;
			}
		
			break;
		}
	}
    else
    {
		if(status == 404)
        {
			displayMSG('accountLinkBox', 'errorText', '<br />Could not compelete. Page not found!<br />', 'block');
		}
        else
        {
        	displayMSG('accountLinkBox', 'errorText', '<br />Could not compelete. XML problem occured', 'block');
		}
	}
}

(function (s) {
  var m = {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '"' : '\\"',
    '\\': '\\\\'
  };

  s.parseJSON = function (filter) {

    // Parsing happens in three stages. In the first stage, we run the text against
    // a regular expression which looks for non-JSON characters. We are especially
    // concerned with '()' and 'new' because they can cause invocation, and '='
    // because it can cause mutation. But just to be safe, we will reject all
    // unexpected characters.

    try {
      if (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.
        test(this)) {

          // In the second stage we use the eval function to compile the text into a
          // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
          // in JavaScript: it can begin a block or an object literal. We wrap the text
          // in parens to eliminate the ambiguity.

          var j = eval('(' + this + ')');

          // In the optional third stage, we recursively walk the new structure, passing
          // each name/value pair to a filter function for possible transformation.

          if (typeof filter === 'function') {

            function walk(k, v) {
              if (v && typeof v === 'object') {
                for (var i in v) {
                  if (v.hasOwnProperty(i)) {
                    v[i] = walk(i, v[i]);
                  }
                }
              }
              return filter(k, v);
            }

            j = walk('', j);
          }
          return j;
        }
      } catch (e) {

      // Fall through if the regexp test fails.

      }
      throw new SyntaxError("parseJSON");
    };
  }
) (String.prototype);

/* ############################ CAPTCHA ############################ */

var captcha_data = new Array('0', '0', '0', '0', 'x', 'x');

function req_captcha(w, h, c, tw, svn, id)
{
    if(inproc)
    {
        setTimeout("req_captcha()", 1000);
    }
	inproc = true;
    captcha_data[0] = w;
    captcha_data[1] = h;
    captcha_data[2] = c;
    captcha_data[3] = tw;
    captcha_data[4] = svn;
    captcha_data[5] = id;
    var qs = 'w='+w+'&h='+h+'&c='+c+'&tw='+tw+'&svn='+svn+'&id='+id;
	AJAXRequest.doAJAXGet('/source/captcha_img.php', qs, 'process_captcha', 'txt', false);
}

function process_captcha()
{
    AJAXCAP=AJAXRequest.AJAXOBJ;
	if(AJAXCAP.readyState == 4){
		captcha_show_result(AJAXCAP.status);
	}
}

function captcha_show_result(status)
{
    inproc = false;

    if(status == 200)
    {
        var result = AJAXCAP.responseText;
		document.getElementById(captcha_data[5]).innerHTML = result;
        captcha_data = new Array('0', '0', '0', '0', 'x', 'x');
	}
    else
    {
		if(status == 404)
        {
			displayMSG('fb_result', 'errorText', '<br />Could not compelete. Page not found!<br />', 'block');
		}
        else
        {
        	displayMSG('fb_result', 'errorText', '<br />Could not compelete. XML problem occured', 'block');
		}
	}
}