
var baseURL = '';

function FCKeditor_OnComplete(editorInstance) {
    spinnerOff();
}

function createSpinner() {
	var div = document.createElement('DIV');
	div.id = 'ajax-spinner';
        div.innerHTML = '<img src="'+baseURL+'/sitetrack/sysimg/spinner.gif" alt=""/>';
	document.body.appendChild(div);
	return div;
}

function spinnerOn() {
	var spinner = window.ajax_spinner;
	if (!spinner) {
        spinner = createSpinner();
	    document.body.appendChild(spinner);
		window.ajax_spinner = spinner;
	} else {
		if (spinner.style.display == 'none') {
			spinner.style.display = '';
		}
	}
}

function spinnerOff() {
	var spinner = window.ajax_spinner;
	if (spinner && spinner.style.display != 'none') {
		spinner.style.display = 'none';
	}
}

function getElementsByClassName(className, parentElement) {
  var children = (document.getElementById(parentElement) || document.body).getElementsByTagName('*') || document.all;
  var elements = [];
  for (var i = 0, child; child = children[i]; i++)
	  if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
          elements[elements.length] = child;
  return elements;
}

function getBaseUrl() {
	var scripts = document.getElementsByTagName('SCRIPT');
	var url = '';
	for (var i = 0, script; script = scripts[i]; i++) {
		if (script.src.indexOf('/ajax/JsHttpRequest.js') != -1) {
			url = script.src.replace('/ajax/JsHttpRequest.js', '');
			break;
		}
	}
	return url;
}

function getPostUrl() {
	return baseURL + '/block_edit.php';
}

function addEvent(element, event, listener, capture) {
    if (element.addEventListener)
	    element.addEventListener(event, listener, capture);
	else if (element.attachEvent)
	    element.attachEvent("on"+event, listener);
	}

function edit(event, block_id) {
	var event = event ? event : window.event;
	var target = event.target ? event.target : event.srcElement;
	if (target.tagName.toUpperCase() == "A") return true;
	// send to server for edit area
	var content = {"block_id" : block_id, "s_action" : "edit"};
	var handler = function (js, text) {
		if (typeof(js.html) != "undefined" && !js.error)	{
			document.getElementById('simpletext_'+block_id).innerHTML = js.html;
		}
		if (js.error) alert(js.error);
		if (js.text) {
            spinnerOff();
		}
	};
	spinnerOn();
	JsHttpRequest.query(getPostUrl(), content, handler, true);
	return false;
}

function cancelEdit(block_id) {
	var content = {"block_id" : block_id, "s_action" : "cancel"};
	if (typeof(FCKeditorAPI) != "undefined") {
		FCKeditorAPI = null;
	}
	var handler = function (js, text) {
		if (typeof(js.html) != "undefined" && !js.error) {
			document.getElementById('simpletext_'+block_id).innerHTML = js.html;
			attachEditing(null, [document.getElementById('editable_'+block_id)]);
		}
		if (js.error) alert(js.error);
		spinnerOff();
	};
	spinnerOn();
	JsHttpRequest.query(getPostUrl(), content, handler, true);
	return false;
}

function saveEdit(block_id) {
	var oEditor;
	if (typeof(FCKeditorAPI) != "undefined" && FCKeditorAPI != null && (oEditor = FCKeditorAPI.GetInstance('editarea_'+block_id))) {
		content = oEditor.GetHTML();
		FCKeditorAPI = null;
	} else {
	    var content = document.getElementById('editarea_'+block_id).value;
	}
	content = {"block_id" : block_id, "s_action" : "save", "s_code" : content};
	var handler = function (js, text) {
		if (typeof(js.html) != "undefined" && !js.error) {
			document.getElementById('simpletext_'+block_id).innerHTML = js.html;
			attachEditing(null, [document.getElementById('editable_'+block_id)]);
		}
		if (js.error) alert(js.error);
		spinnerOff();
	};
	spinnerOn();
	JsHttpRequest.query(getPostUrl(), content, handler, true);
	return false;
}

function onMouseOver(event, block_id) {
    var el = document.getElementById('editable_'+block_id);
	if (el && !el.className.match(new RegExp("(^|\\s)onHover(\\s|$)"))) {
		el.className += " onHover";
        }
	return false;
}

function onMouseOut(event, block_id) {
    var el = document.getElementById('editable_'+block_id);
	//if (el && !el.className.match(new RegExp("(^|\\s)onHover(\\s|$)")))
	el.className = "editable-field";
	//target.className.replace(new RegExp("(^|\\s+)onHover(\\s+|$)", "g"), "");
	return false;
}

function attachEditing(event, elms) {
        baseURL = getBaseUrl();
	if (typeof(elms) != "undefined") {
		var elements = elms;
	} else {
	    var elements = getElementsByClassName("editable-field");
	}
	for (var i = 0, el; el = elements[i]; i++) {
		var block_id = el.id.replace('editable_', '');
		addEvent(el, "dblclick", new Function('event', 'return edit(event, '+block_id+');'), false);
		addEvent(el, "mouseover", new Function('event', 'return onMouseOver(event, '+block_id+');'), false);
		addEvent(el, "mouseout", new Function('event', 'return onMouseOut(event, '+block_id+');'), false);
	}
}

addEvent(window, "load", attachEditing, false);
