// This file included when user can use On-Site Edit in some way

// locks out onSiteEdit once it has been invoked
// - requires refresh to reset this value once flagged
var weCanEdit = true;

// initializes editable fields for On-Site Edit at page load
window.onload = function () {
	
	var x = document.getElementsByTagName('*');
	for (var i = 0; i < x.length; i++) {
		if (x[i].className == 'editable') {
			// set js events for LiveEdit
			x[i].onmouseover = new Function('eRollOver(this.id)');
			x[i].onmouseout =  new Function('eRollOff(this.id)');
			x[i].title = "Double Click for On-Site Editing!";
		}
	}

}


// Editing Rollovers ////////
function eRollOver(id) {
	if(weCanEdit) { $(id).className = 'editable-hover'; }
}

function eRollOff(id) {
	if(weCanEdit) { $(id).className = 'editable'; }
}
/////////////////////////////



////////////////////////////////////////////////////
// Ajax for LiveEdit

var xmlReq = false;
var specialId;

// if editing is not locked it makes the Ajax call to edit content on-site
function onSiteEdit(usedid, slug, section) {

	if(weCanEdit) {
		
		// we're editing, so no more additional editing until page refresh
		weCanEdit = false;
		
		// server-side query string
		var postinfo = "usedid="+ usedid +"&slug="+ slug +"&section="+ section;
		// specialId is used in the return response
		specialId = slug+'_'+usedid;
		// reset the hover state to normal during editing
		$(specialId).className = 'editable';
		
		var theAjax = new Ajax.Request(
				onSiteEditUrl,
				{
					method: 'post',
					parameters: postinfo,
					onComplete: editResponse
				});

	} else {
		// something else is being edited, alert user
		alert('Please finish editing your content.');
	}
}

// handles response from server
function editResponse(theXML) {
	
	// specialId get set in onSiteEdit()
	$(specialId).innerHTML = '';
	$(specialId).appendChild(toDOM(theXML.responseText+'<br \/><br \/>'));
	
	// the wysiwyg editor may need reinitialization depending on browser
	var theTextarea = document.getElementsByTagName('textarea')[0];
	tinyMCE.execCommand('mceAddControl', true, theTextarea.name);

}
		
// end Ajax functions
//////////////////////////////////////////////


//////////////////////////////////////////////
// TinyMCE misc functions


function initTinyMCE() {

	tinyMCE.init({
		mode : "textareas",
		doctype : "<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">",
		content_css : "\/includes\/tinymce.css",
		theme : "advanced",
		plugins : "l10images,paste,table",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_buttons1 : "formatselect,removeformat,separator,bold,italic,underline,separator,justifyleft,justifycenter,justifyright,separator,link,unlink,separator,bullist,numlist,separator,l10images,separator,pasteword,code",
		theme_advanced_buttons2 : "tablecontrols,table,row_props,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,row_after,row_before,split_cells,merge_cells",
		theme_advanced_buttons3 : "",
		theme_advanced_statusbar_location : "bottom",
		theme_advanced_blockformats : "p,h2,h3,h4,blockquote,address",
		width : "555",
		height : "350",
		verify_html : true,
		auto_reset_designmode : true
	});

}

function xFerTinyMCE() {

	tinyMCE.triggerSave(true,true);
	return true;

}

// converts a string of valid HTML into legitimate DOM elements
function toDOM(HTMLstring) {
	
	var d = document.createElement('div');
	d.innerHTML = HTMLstring;
	var docFrag = document.createDocumentFragment();
	 
	while (d.firstChild) {
		docFrag.appendChild(d.firstChild);
	};
	 
	return docFrag;
}

// IE Fix
function toDOMScript(script){

	var d = document.createElement('div');
	d.innerHTML = script;
	
	var docFrag = document.createDocumentFragment();
	docFrag.appendChild(d);
	
	return(false);
	
}

// one function instead of two for opening and closing images popup
function theResources() {
	
	var theWindow = $("images-popup");
	if (theWindow.style.display == 'none') {  theWindow.style.display = 'block'; }
	else if (theWindow.style.display == 'block') { theWindow.style.display = 'none'; }
	
}
// the old functions still need to work
function getResources() {
	theResources();
}
function closeResources() {
	theResources();
}



// Draggable window /////////////////////////

//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2001 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

// Determine browser and version.

function Browser() {

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event, id) {

  var el;
  var x, y;

  // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  } else {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

// Draggable window stuff /////////////////////////////////////