//////////////////////////////////////////////////////////////////////////////////////////////
/********************************************************************************************
Black Filter ajax NameSpace
********************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////
var BlackFilterAjax = {}


///////////////////////////////////////
/**************************************
LOADING NAMESPACE
**************************************/
///////////////////////////////////////
if (typeof(AJAX) === 'undefined')
{
	var _scriptObj2 = document.createElement('script');
    _scriptObj2.src = 'http://www.girlsense.com/premium/tools/clientScripts/ajax.js';
    _scriptObj2.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(_scriptObj2);
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

BlackFilterAjax.getUrl = function()
{
	var host = '';
	var _url = window.location.href;
	var colonIndex = _url.indexOf(":/") + 4;
	var slashIndex =_url.indexOf("/", colonIndex);
	if (slashIndex === -1)
		host = _url;
	else
		host = _url.substring(0,slashIndex);
	
	var _search = window.location.search;
	var filterQA = _search.indexOf("filterQA=1") !== -1;
	
	if (!filterQA)
		host += "/premium/tools/clientScripts/blackFilter.pl";
	else
		host += "/premium/tools/clientScripts/blackFilterTest.pl";
	return host;	
}

BlackFilterAjax.url = BlackFilterAjax.getUrl();

BlackFilterAjax.request = null;

BlackFilterAjax.parseResult = function(request)
{
	var responseText = request.responseText;
	responseText = responseText.replace( new RegExp( "\\n", "g" ),""); 
	responseText = responseText.replace( new RegExp( "\\r", "g" ),""); 
	responseText = responseText.replace( new RegExp( "\\t", "g" ),""); 
	responseText = responseText.replace(/^\s+|\s+$/g,"");
	var params = request.params;
	
	var text = params.split("text=")[1];
	BlackFilterAjax.onResult(text, responseText);
}

BlackFilterAjax.onResult = function(text, responseText)
{
	// will be implemented by implementing developer
}


BlackFilterAjax.onErrorHandler = function(request)
{
	alert("Temporary server error. Please try again later. " + request.status);
	BlackFilterAjax.onResult("", "ERROR");
}


BlackFilterAjax.check = function(text,activity)
{
	text = text || '';
	text = text.replace(/;/g,'%3B');
	text = text.replace(/&/g,'%26');
	activity = activity || '';
	
	// constructing the request object //
	if (BlackFilterAjax.request === null)
	{
		BlackFilterAjax.request = new AJAX.request(BlackFilterAjax.url, AJAX.Method.POST, AJAX.Type.SYNC);
		BlackFilterAjax.request.onSuccessFunction = BlackFilterAjax.parseResult;
		BlackFilterAjax.request.onFailFunction = BlackFilterAjax.onErrorHandler;
		BlackFilterAjax.request.onTimeoutFunction = BlackFilterAjax.onErrorHandler;
	}
	if (activity!='')
	{
		BlackFilterAjax.request.start("activity=" + activity + "&text=" + text);
	} else {
		BlackFilterAjax.request.start("text=" + text);
	}
}


BlackFilterAjax.limitinput = function(vEvent,vObject)
{
	var e = vEvent || window.event;
	var o = vObject || e.target || e.srcElement;
	var c = e.keyCode;
	if (c==0)
	{
		c = e.which;
	}
	var s = String.fromCharCode(c);
	
	if (o) 
	{
		if (o.value)
		{
			// remove non-english chars
			if (o.value != o.value.replace(/[^a-zA-Z 0-9 = ,;\&\:\!\?\\.\(\)\-\\\/\[\]']/g,''))
				o.value = o.value.replace(/[^a-zA-Z 0-9 = ,;\&\:\!\?\\.\(\)\-\\\/\[\]']/g,' ');
			// add space before numbers !
			if (o.value != o.value.replace(/([^0-9\! ]+) *([0-9\!]+)/g,'$1 $2'))
				o.value = o.value.replace(/([^0-9\! ]+) *([0-9\!]+)/g,'$1 $2');
			// add space after numbers ! . ? ,
			if (o.value != o.value.replace(/([0-9,\.\!\?]+) *([^0-9,\.\!\? ]+)/g,'$1 $2'))
				o.value = o.value.replace(/([0-9,\.\!\?]+) *([^0-9,\.\!\? ]+)/g,'$1 $2');
			// one space at a time
			if (o.value != o.value.replace(/  +/g,' '))
				o.value = o.value.replace(/  +/g,' ');
			
			// only normal capitalization
			var words = o.value.split(' ');
			var changed = false;
			for (var i=0;i<words.length;i++)
			{
				if (words[i].substr(1) != words[i].substr(1).toLowerCase())
				{
					changed = true;
					words[i] = words[i].substr(0,1) + words[i].substr(1).toLowerCase();
				}
			}
			if (changed)
				o.value = words.join(' ');

		}
	}
	// white list input keyboard characters
	if (c==13 || c==8 || c==9 || c==37 || c==39 || c==46 || c==116 || (s.replace(/[a-zA-Z 0-9 = ,;\&\:\!\?\\.\(\)\-\\\/\[\]'']/g,'')==''))
	{
		return true;
	}
	else
	{
		return false;
	}	 
}

function applyBlackFilterKeydown(object)
{
	object.onkeypress = function(event) {return BlackFilterAjax.limitinput(event,this)};
	object.onblur = function(event) {BlackFilterAjax.limitinput(event,this)};
}

setTimeout(function() {	 
	
	// eBoutiques
	if (document.location.href.indexOf('viewer.pl')>0 || document.location.href.indexOf('outiques/')>0 || document.location.href.indexOf('outique/')>0)
	{
		// boutique comment
		try{	applyBlackFilterKeydown(document.getElementById('content'));}catch(e){}
	}
	
	// groups
	/*
	if (document.location.href.indexOf('groups/')>0) 
	{
		// add comment
		try {	
			var ar=document.getElementsByName('commentsInput');
			if (ar) for(var i=0;i<ar.length;i++) applyBlackFilterKeydown(ar[i]); 
		}catch(e){}
	}
	*/
		
	// babble
	if (document.location.href.indexOf('babble/')>0)
	{
		// babble message
		try{	applyBlackFilterKeydown(document.getElementById('inputArea'));}catch(e){}
		
		// babble comments
		try{	applyBlackFilterKeydown(document.getElementById('commentArea'));}catch(e){}
	}
	
	// polls
	if (document.location.href.indexOf('myPolls')>0)
	{
		try{	applyBlackFilterKeydown(document.forms['createPollForm'].elements[0]);	}catch(e){} // question
		try{	applyBlackFilterKeydown(document.forms['createPollForm'].elements[1]);	}catch(e){} // option 1
		try{	applyBlackFilterKeydown(document.forms['createPollForm'].elements[2]);	}catch(e){} // option 2
		try{	applyBlackFilterKeydown(document.forms['createPollForm'].elements[3]);	}catch(e){} // option 3
		try{	applyBlackFilterKeydown(document.forms['createPollForm'].elements[4]);	}catch(e){} // option 4
	}

},5000);	

function blackFilterAlert(responseText) {
	if (responseText!='OK') {
		if (responseText.substr(0,1)=='.') responseText='';
		if (responseText!='') {
			responseText = '\n"' + responseText + '"';
		}
		alert('Your text has been banned. Please rephrase it.' + responseText);
	}
}

