var hide    = document.getElementById('hsb-hide');
var show    = document.getElementById('hsb-show');
var form    = document.getElementById('hsb-form');
var logo    = document.getElementById('hsb-logo');
var divider = document.getElementById('hsb-divider');

hide.style.display = 'block';

form.getElementsByTagName('form')[0].onsubmit = function() {
	var toggle = document.getElementById('edit_area_toggle_checkbox_hsb-editor');
	toggle.name = 'editor_toggle';
}

var editor_toggle = getCookie('editor_toggle') || 'later';

editAreaLoader.init({
	id : 'hsb-editor',
	syntax: 'html',
	start_highlight: true,
	display: editor_toggle,
	font_size: 8,
	font_family: 'Consolas,"Courier New",Courier,monospace,sans-serif;',
	min_height: 300
});

var editor = document.getElementById('hsb-editor');
editor.onkeydown = function(e) {
	var code = e.keyCode || e.which;
	if (code === 9) {
		replaceText('\t', this);
		return false;
	}
}

hide.onclick = function() {
	form.style.display    =
	logo.style.display    =
	divider.style.display = 'none';
	show.style.display    = 'block';
	return false;
}

show.onclick = function() {
	form.style.display    =
	logo.style.display    =
	divider.style.display =
	this.style.display    = '';
	return false;
}

var show_snippets = document.getElementById('hsb-show-snippets');
show_snippets.style.display = 'inline';
var snippet_div   = document.getElementById('hsb-snippets');

snippet_div.style.display = getCookie('snippets') || '';

show_snippets.onclick = function() {
	snippet_div.style.display = (snippet_div.style.display === '') ? 'block' : '';
	setCookie('snippets', snippet_div.style.display, 365);
	return false;
}

var snippet_ul = snippet_div.getElementsByTagName('ul');
var snippets = [];
var count = 0;
for (var i = 0, l = snippet_ul.length; i < l; i++) {
	var snippet_li = snippet_ul[i].getElementsByTagName('li');
	for (var x = 0, lx = snippet_li.length; x < lx; x++) {
		var a = snippet_li[x].getElementsByTagName('a');
		if (a.length) {
			snippets[count] = a[0];
			count++;
		}
	}
}
var snips    = {
	script       : '<script type="text/javascript">\n'
					+ '\t//<![CDATA[\n'
					+ '\t|\n'
					+ '\t//]]>\n'
					+ '</script>',
	scriptx      : '<script type="text/javascript" src="|"></script>',
	jquery       : '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>',
	stylesheet   : '<link rel="stylesheet" type="text/css" media="all" href="|" />',
	style        : '<style type="text/css">\n'
					+ '\t|\n'
					+ '</style>',
	jquery_ready : '$(function() {\n'
					+ '\t|\n'
					+ '});',
	css_reset    : 'html, body, h1, h2, h3, h4, h5, h6, p, span, ul, li, div, form, input, select, textarea, button {margin:0; padding:0;}\n'
					+ 'ul {list-style:none;}\n'
					+ 'a, a:hover {text-decoration:none; outline:0;}\n'
					+ 'a img {border:0;}\n'
					+ 'img {-ms-interpolation-mode:bicubic;}'

}

for (var i = 0, l = snippets.length; i < l; i++) {
	snippets[i].onclick = function() {
		if (parent['frame_hsb-editor'] && document.getElementById('frame_hsb-editor').style.display === 'inline') {
			var editor = parent['frame_hsb-editor'].document.getElementById('textarea');
		}
		else {
			var editor = document.getElementById('hsb-editor');
		}
		
		var snip = snips[this.rel];
		
		if (snip.indexOf('|') === -1) {
			snip = snip + '|';
		}
		
		var scrollTop = editor.scrollTop;
		
		snip = snip.replace('|', '|hsb-replace|');
		
		//insertAtCaret(editor, snip);
		replaceText(snip, editor);
		
		var pos = editor.value.split('|hsb-replace|');
	
		editor.value = editor.value.replace('|hsb-replace|', '');
	
		setCaretTo(editor, pos[0].length, scrollTop);
		//setCaretTo_(pos[0].length, editor);
		
		return false;
	}
}

// Replaces the currently selected text with the passed text.
function replaceText(text, textarea)
{
	// Attempt to create a text range (IE).
	if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange)
	{
		var caretPos = textarea.caretPos;

		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
		caretPos.select();
	}
	// Mozilla text range replace.
	else if (typeof(textarea.selectionStart) != "undefined")
	{
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text + end;

		if (textarea.setSelectionRange)
		{
			textarea.focus();
			textarea.setSelectionRange(begin.length + text.length, begin.length + text.length);
		}
		textarea.scrollTop = scrollPos;
	}
	// Just put it on the end.
	else
	{
		textarea.value += text;
		textarea.focus(textarea.value.length - 1);
	}
}

function insertAtCaret(obj, text) {
	if(document.selection) {
		obj.focus();
		var orig = obj.value.replace(/\r\n/g, "\n");
		var range = document.selection.createRange();

		if(range.parentElement() != obj) {
			return false;
		}

		range.text = text;
		
		var actual = tmp = obj.value.replace(/\r\n/g, "\n");

		for(var diff = 0; diff < orig.length; diff++) {
			if(orig.charAt(diff) != actual.charAt(diff)) break;
		}

		for(var index = 0, start = 0; 
			tmp.match(text) 
				&& (tmp = tmp.replace(text, "")) 
				&& index <= diff; 
			index = start + text.length
		) {
			start = actual.indexOf(text, index);
		}
	} else if(obj.selectionStart) {
		var start = obj.selectionStart;
		var end   = obj.selectionEnd;

		obj.value = obj.value.substr(0, start) 
			+ text 
			+ obj.value.substr(end, obj.value.length);
	}
	
	if(start != null) {
		setCaretTo(obj, start + text.length);
	}
	else {
		if (obj.value)
			obj.value = text + obj.value;
		else
			obj.value += text;
	}
}

function setCaretTo(obj, pos, scrollTop) {
	if(obj.createTextRange) {
		var range = obj.createTextRange();
		range.move('character', pos);
		range.select();
	} else if(obj.selectionStart) {
		obj.focus();
		obj.setSelectionRange(pos, pos);
		obj.scrollTop = scrollTop;
	}
}

function setCookie(c_name,value,expiredays)
{
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}
