var request = false;
var lastElementId;

// General website independant code
function setup(){
	// If the function fails, we can't create a xml http request
	// so if we return false, this function failed
	var newRequest = false;
	
	// "decent" browsers, ie. mozilla, safari, konqueror
	if(window.XMLHttpRequest){
		newRequest = new XMLHttpRequest();
	}
	// MSIE
	else if(window.ActiveXObject){
		newRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// else we don't support you
	else alert("Your browser is not supported, if you know that your browser supports javascript, please email the webmaster");
	
	return newRequest;
}

function getElement(layer) {
	if( document.getElementById ) return document.getElementById( layer );
	else if( document.all ) return document.all[layer];
	else return document[layer];
}

function setElement(elName, elText){
	//w3c dom
  	if(document.getElementById) getElement(elName).innerHTML = elText;
	else if(document.all) document.all[elName].innerHTML = elText;
	else if(document.layers){ 
		//netscape navigator dom
		document.elName.document.open();
		document.elName.document.write(elText);
		document.elName.document.close();
	}
}

function run(url, callback){
	request = setup();
	
	request.open("GET", url, true);
	request.onreadystatechange = callback;
	request.send(null);
}

// Website specific code
function canceledItem(id, contentType){
	lastElementId = contentType + "msg" + id;
	run("remove.php?a=cancel&t=" + contentType + "&id=" + id, newDataReceived);
}

function newDataReceived(){
	if(request.readyState == 4){
		var response = request.responseText;
		// Remove the stuff we already have (<div id='xxx111'>TEXT</div>)
		response = response.replace(/^<div id='[a-zA-Z]*[0-9]*'[ a-zA-Z0-9=']*>/, '');
		response = response.replace(/<\/div>$/, '');
// 		alert(lastElementId);
		setElement(lastElementId, response);
	}
}

function deleteItem(id, contentType, sure){
	lastElementId = contentType + "msg" + id;
	run("remove.php?a=remove&t=" + contentType + "&id=" + id + "&sure=" + sure, newDataReceived);
}

function markAsSpam(id, contentType, isSpam){
	lastElementId = contentType + "msg" + id;
	run("remove.php?a=spam&t=" + contentType + "&id=" + id + "&isspam=" + isSpam, newDataReceived);
}

function markAsHidden(id, contentType, isHidden){
	lastElementId = contentType + "msg" + id;
	run("remove.php?a=hide&t=" + contentType + "&id=" + id + "&ishidden=" + isHidden, newDataReceived);
}

function closeItem(id, contentType){
	lastElementId = contentType + "msg" + id;
	setElement(lastElementId, '');
}

function getEditor(outputForm, contentType, count, extraParameters){
	lastElementId = outputForm;
	
	url = "post.php?editor=" + count + "&type=" + contentType;
	
	if(extraParameters != null){
		url = url + "&" + extraParameters;
	}
	
	run(url, newDataReceived);
}


// DOM operations
function removeElement(parentElement, element){
	var parentById = getElement(parentElement);
	var elementById = getElement(element);
	
	parentById.removeChild(elementById);
}

function addElement(parentElement, newId){
	var parentById = getElement(parentElement);
	
	var container = document.createElement('div');
	container.setAttribute('id', newId);
	
	var el = document.createElement('input');
	el.setAttribute('id', 'file_' + newId);
	el.setAttribute('name', 'file_' + newId);
	el.setAttribute('type', 'file');
	
	var textField = document.createElement('input');
	textField.setAttribute('id', 'text_' + newId);
	textField.setAttribute('name', 'text_' + newId);
	textField.setAttribute('type', 'text');
	
	parentById.appendChild(container);
	container.appendChild(el);
	container.appendChild(textField);
}

// Preview code
function registerField(fieldName){
	
}

function updatePreview(){
	for(i = 0; i < count(fields); ++i){
		
	}
}

function disableAllFormElements(formId){
	var formEl = document.forms[formId];
	
	for(var i = 0; i < formEl.length; i++){
		formEl.elements[i].disabled = true;
	}
}

// Rich text
function loadRichText(elementName){
	var ifr = document.getElementById(elementName + 'Rich');
	var textarea = document.getElementById(elementName);
	
	if(useRichEdit(elementName + 'Rich')){
		removeElement(textarea);
		ifr.style.display = 'block';
		document.getElementById('editPanel').style.display = 'block';
		getIFrameDocument(elementName + 'Rich').designMode = "On";
	}
	else{
		removeElement(ifr);
	}
}

function useRichEdit(id){
	return getIFrameDocument(id).designMode;
}

function getIFrameDocument(id){
	if(document.getElementById(id).contentDocument) return document.getElementById(id).contentDocument;
	else return document.frames[id].document;
}

function doRichEditCommand(command, arg){
	if(useRichEdit('edit')){
		getIFrameDocument('edit').execCommand(command, false, arg);
		document.getElementById('edit').contentWindow.focus();
	}
	else{
		var textarea = document.getElementById('edit');
		textarea.focus();
	}
}

function addToolbarButton(name, func){
	var b = document.createElement('a');
	b.setAttribute('href', '#');
	b.setAttribute('onclick', 'javascript: doRichEditCommand("' + func + '");');
	
	
	return b;
}

function createToolbar(parentElementName){
	parentElement = getElement(parentElementName);
	parentElement.appendChild(addToolbarButton('b', 'bold'));
	
}

function scrollElement(elName, side){
	var el = getElement(elName);
	var  i = 0;
	el.movementTimer = setInterval(function(){ el.scrollLeft = el.scrollLeft + i * (0.75) * side; ++i; }, 50);
}

function stopScroll(elName){
	var el = getElement(elName);
	if(el.movementTimer){
		clearTimeout(el.movementTimer)
	}
}

function scrollDivTo(elName, scrollElementName){
	var el = getElement(elName);
	var scrollElement = getElement(scrollElementName);
	
	// wait a little because the div's before might contain images which must have a width (ie. are at least partially loaded)
	setTimeout(	function(){
					scrollElement.scrollLeft = el.offsetLeft - scrollElement.offsetWidth / 2;
				}, 500);
}

