
/*
	Comments:

	id specefications:

	postMain_#		= main comment
	postHolder_#	= inner post with author / date / content / editbox
	post_#			= real post with BB code
	postEdit_#		= div containing edit stuff
	postContent_#	= textarea for editing post
*/

function comment_Add(tableId, pTarget)
{
	var postContent = E('postContent_preview');
	var newContent = ajax_encode(postContent.value);

	var newSeq = 0;

	while(E('postMain_'+newSeq))
		newSeq++;
	
	var postParam = "action=comment_add&tableId="+tableId+"&pTarget="+pTarget+"&comment_seq="+newSeq+"&comment_content="+newContent;

	var xmlHttp = createXMLHttpRequest();
	xmlHttp.onreadystatechange = function(){comment_SubmitFinish(xmlHttp, 'add');};
	xmlHttp.open("POST", WSD_WEBROOT+"wsd_community/comment-add.php", true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.setRequestHeader("Content-length", postParam.length);
	xmlHttp.setRequestHeader("Accept-Charset", "UTF-8");
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(postParam);

	return false;
}

function comment_Preview()
{
	if(!E('postMain_preview'))
	{
		comment_CreatePreview();
	}

	var postContent = E('postContent_preview');
	var postPreview = E('post_preview');

	// insert text in html page:
	previewContent = htmlentities(postContent.value, 'ENT_QUOTES').replace(/(\r\n|\r|\n)/gi, '$1<br>');
	postPreview.innerHTML = comment_Parse(previewContent, 'to_html');

	return false;
}

function comment_CreatePreview()
{
	var d = new Date();
	var currentDate = d.getYear()+'-'+d.getMonth()+'-'+d.getDate()+', '+d.getHours()+':'+d.getMinutes();

	var pContent = '';

	pContent += '<div class="postItem" id="postMain_preview">';
	pContent += '	<div class="postNr"><h3> - </h3></div>';
	pContent += '	<div class="postContent" id="postHolder_preview">';
	pContent += '		<span class="postPreview">PREVIEW <i>by '+USER_LOGIN+'</i> | '+currentDate+'</span>';
	pContent += '		<br /><br />';

	pContent += '		<div id="post_preview">';
	pContent += '		</div>';
	pContent += '	</div>';
	pContent += '</div>';
	pContent += '<div class="postSep" id="postSep_preview"></div>';

	var cHolder = E('commHolder');

	cHolder.innerHTML = pContent + cHolder.innerHTML;
}

function comment_CreateReal(cContent)
{
	if(E('postMain_preview'))
	{
		E('commHolder').removeChild(E('postMain_preview'));
		E('commHolder').removeChild(E('postSep_preview'));
	}

	var postHolder = E('commHolder');

	postHolder.innerHTML = cContent + postHolder.innerHTML;
}

function comment_Edit(i, pId)
{
	var postInner = E('post_'+i);
	
	// Edit Mode, create editbox if it does not exitss:
	if(!E('postEdit_'+i))
	{
		var editBox = document.createElement('div');
		editBox.setAttribute('id', 'postEdit_'+i);

		var editContent = "";
		editContent += '<textarea class="postEdit" id="postContent_'+i+'"></textarea>';
		editContent += '<div class="postEditButtons">';
		editContent += '<input type="button" class="button" value="Preview" onClick="comment_Edit('+i+', '+pId+');">&nbsp;';
		editContent += '<input type="button" class="button" value="Submit" onClick="comment_Submit('+i+', \'edit\', '+pId+');">';
		editContent += '</div>';

		editBox.innerHTML = editContent;

		E('postHolder_'+i).appendChild(editBox);
	}


	var editBox = E('postEdit_'+i);
	var postContent = E('postContent_'+i);

	// Edit Mode
	if(postInner.style.display != 'none')
	{
		// insert content in textarea:
		var commContent = html_entity_decode(postInner.innerHTML.replace(/\<br( \/)?\>/gi, '').trim(), 'ENT_QUOTES');
		postContent.value = comment_Parse(commContent, 'to_bb');
		
		// switch real/edit:
		postInner.style.display = 'none';
		editBox.style.display = 'block';
		
		// preview text:
		E('postPrev_'+i).style.display = 'none';
	}

	// Preview Mode
	else
	{
		// insert text in html page:
		previewContent = htmlentities(postContent.value, 'ENT_QUOTES').replace(/(\r\n|\r|\n)/gi, '$1<br>');
		postInner.innerHTML = comment_Parse(previewContent, 'to_html');

		// switch real/edit:
		postInner.style.display = 'block';
		editBox.style.display = 'none';
		
		// preview text:
		E('postPrev_'+i).style.display = 'block';
	}

	return false;
}

function comment_Submit(i, pAction, pId)
{
	if(!E('postEdit_'+i))
	{
		return false;
	}

	var editBox = E('postEdit_'+i);
	var postContent = E('postContent_'+i);

	var newContent = ajax_encode(postContent.value);

	var postParam = "action=comment_edit&pId="+pId+"&comment_content="+newContent;

	var xmlHttp = createXMLHttpRequest();
	xmlHttp.onreadystatechange = function(){comment_SubmitFinish(xmlHttp, pAction, i, pId);};
	xmlHttp.open("POST", WSD_WEBROOT+"wsd_community/comment-edit.php", true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.setRequestHeader("Content-length", postParam.length);
	xmlHttp.setRequestHeader("Accept-Charset", "UTF-8");
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(postParam);
}

function comment_Delete(i, pId)
{
	var postParam = "action=comment_delete&pId="+pId;

	var xmlHttp = createXMLHttpRequest();
	xmlHttp.onreadystatechange = function(){comment_SubmitFinish(xmlHttp, 'delete', i, pId);};
	xmlHttp.open("POST", WSD_WEBROOT+"wsd_community/comment-delete.php", true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.setRequestHeader("Content-length", postParam.length);
	xmlHttp.setRequestHeader("Accept-Charset", "UTF-8");
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(postParam);

	return false;
}

function comment_SubmitFinish(xmlHttp, pAction, i, pId)
{
	if(xmlHttp.readyState == 4)
	{
        if(xmlHttp.status == 200)
		{
			var responseStatus = xmlHttp.responseText;

			if(!responseStatus.match(/^good(\:.*)?/gi))
			{
				alert("Error: "+responseStatus);
			}
			else
			{
				if(pAction == "add")
				{
					cContent = responseStatus.replace(/^good(\:(.*))?/gi, '$2');

					comment_CreateReal(cContent)
				}
				else if(pAction == "edit")
				{
					comment_Edit(i, pId);

					// preview text:
					E('postPrev_'+i).style.display = 'none';
				}
				else if (pAction == "delete")
				{
					E('postMain_'+i).style.display = 'none';
					E('postSep_'+i).style.display = 'none';
				}
			}
		}
	}
}

function comment_UpdateCharacters()
{
	var cBox = E('postContent_preview');
	var charLeft = E('postCharLeft');
	var charTotal = E('postMaxLeft');

	var maxChar = charTotal.innerHTML;
	var currentChar = cBox.value.replace(/[\n]/gi, '\r\n').length;

	charLeft.innerHTML = parseInt(maxChar) - currentChar;
}

function comment_Parse(content, mode)
{
	if(mode == 'to_html')
	{
		content = bb2html(content);
		// content = smilies_ascii2html(content);
	}

	if(mode == 'to_bb')
	{
		content = html2bb(content);
		content = smilies_html2ascii(content);
	}

	return content;
}

function html2bb(content)
{
	// bold
	content = content.replace(/\<b\>(.*?)\<\/b\>/gi, '[b]$1[/b]');
	content = content.replace(/\<strong\>(.*?)\<\/strong\>/gi, '[b]$1[/b]');
	
	// underline
	content = content.replace(/\<u\>(.*?)\<\/u\>/gi, '[u]$1[/u]');
	content = content.replace(/\<span style="text-decoration: underline;">(.*?)\<\/span\>/gi, '[u]$1[/u]');
	
	// italic
	content = content.replace(/\<i\>(.*?)\<\/i\>/gi, '[i]$1[/i]');
	content = content.replace(/\<em\>(.*?)\<\/em\>/gi, '[i]$1[/i]');

	// strikethrough
	content = content.replace(/\<s\>(.*?)\<\/s\>/gi, '[s]$1[/s]');
	content = content.replace(/\<strike\>(.*?)\<\/strike\>/gi, '[s]$1[/s]');
	
	// acronym
	content = content.replace(/\<acronym title=\"(.*?)\"\>(.*?)\<\/acronym\>/gi, '[acronym=$1]$2[/acronym]');									

	// color
	content = content.replace(/\<font color=\"(.*?)\"\>(.*?)\<\/font\>/gi, '[color=$1]$2[/color]');			
	content = content.replace(/\<span style=\"color: (.*?);\"\>(.*?)\<\/span\>/gi, '[color=$1]$2[/color]');	

	// img
	content = content.replace(/\<img src=\"(.*?)\".*?\/?\>/gi, '[img]$1[/img]');

	// links
	content = content.replace(/\<a href=\"(.*?)\" title=\"(.*?)\" rel=\"nofollow\" target=\"_blank\"\>(.*?)\<\/a\>/gi, '[url=$1]$2[/url]');
	content = content.replace(/\<a href=\"mailto:(.*?)\" title=\"Email(.*?)\"\>(.*?)\<\/a\>/gi, '[email]$3[/email]');

	// spoiler
	content = content.replace(/\<span class=\"spoiler\"\>(.*?)\<\/span\>/gi, '[spoiler]$1[/spoiler]');

	// quotes
	content = content.replace(/\<div\>\<i\>Quote:\<\/i\>\<blockquote\>(.*?)\<\/blockquote\>\<\/div\>/gi, '[quote]$1[/quote]');	
	content = content.replace(/\<div\>\<i\>Quote by (.*?):\<\/i\>\<blockquote\>(.*?)\<\/blockquote\>\<\/div\>/gi, '[quote=$1]$2[/quote]');	

	content = content.replace(/\<div\>\[i\]Quote:\[\/i\]\<blockquote\>(.*?)\<\/blockquote\>\<\/div\>/gi, '[quote]$1[/quote]');	
	content = content.replace(/\<div\>\[i\]Quote by (.*?):\[\/i\]\<blockquote\>(.*?)\<\/blockquote\>\<\/div\>/gi, '[quote=$1]$2[/quote]');	

	return content;
}

// bb2html converteert alle bb-tags naar xhtml
function bb2html(content)
{
	//bold
	content = content.replace(/\[b\](.*?)\[\/b\]/gi, '<strong>$1</strong>');

	// underline
	content = content.replace(/\[u\](.*?)\[\/u\]/gi, '<span style="text-decoration: underline;">$1</span>');

	// italic
	content = content.replace(/\[i\](.*?)\[\/i\]/gi, '<em>$1</em>');

	// strikethrough
	content = content.replace(/\[s\](.*?)\[\/s\]/gi, '<strike>$1</strike>');

	// acronym
	content = content.replace(/\[acronym=(.*?)\](.*?)\[\/acronym\]/gi, '<acronym title="$1">$2</acronym>');

	// color
	content = content.replace(/\[color=(.*?)\](.*?)\[\/color\]/gi, '<span style="color: $1;">$2</span>');

	// image
	content = content.replace(/\[img\](.*?)\[\/img\]/gi, '<img src="$1" border="0" alt="" />');

	// link
	content = content.replace(/\[link\](.*?)\[\/link\]/gi, '<a href="$1" title="$1" rel="nofollow" target="_blank">$1</a>');

	// url
	content = content.replace(/\[url=(.*?)\](.*?)\[\/url\]/gi, '<a href="$1" title="$2" rel="nofollow" target="_blank">$2</a>');

	// email
	content = content.replace(/\[email\](.*?)\[\/email\]/gi, '<a href="mailto:$1" title="Email $1">$1</a>');

	// spoiler
	content = content.replace(/\[spoiler\](.*?)\[\/spoiler\]/gi, '<span class="spoiler">$1</span>');

	// quote open
	content = content.replace(/\[quote\]/gi, '<div><i>Quote:</i><blockquote>');

	// quote open, with author argument
	content = content.replace(/\[quote=(.*?)\]/gi, '<div><i>Quote by $1:</i><blockquote>');

	// quote cloase
	content = content.replace(/\[\/quote\]/gi, '</blockquote></div>');

	return content;
}


function smilies_html2ascii(content)
{
	// slimies:
	content = content.replace(/\<img alt=\"(.*?)\".*?src=\"\/.*?images\/social\/smilies\/.*?\"\>/gi, '$1');

	return content;
}

/*
	end: Comments
*/


