//Spark CM

//Create Variables
var current_content = [];
var form_values = '';
var submitTimer = false;
var form_name = false;

//Set up Ajax object
if (window.XMLHttpRequest) {
var http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
http_request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {
window.status = 'Browser version does not support Ajax';
}
}
}

//Send Request
function send_request(parameters) {
if (navigator.userAgent.toLowerCase().indexOf('safari/') != -1) {
async = false;
} else {
async = true;
}
http_request.open('post', 'http://www.sarahandmatthewjohnson.com/spark/process', async);
http_request.onreadystatechange = process_response;
http_request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
if (async) {
http_request.setRequestHeader('Content-length', parameters.length);
http_request.setRequestHeader('Connection', 'close');
}
http_request.send(parameters);
}

//Process Response
function process_response() {
var error = '';
if (http_request) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
response = http_request.responseText;
remove('Spark-loading');
if (collection = response.split('')) {
if (response.charAt(1) != '') {
error += collection.shift();
}
for (node in collection) {
if (statement = collection[node].split('')) {
if (statement[0] == 'refresh') {
window.location.reload();
} else if (statement[0] == 'enable_form') {
enable_form('form' + statement[1]);
} else if (statement[0] == 'show') {
if (element = document.getElementById(statement[1])) {
element.style.visibility = 'visible';
}
} else if (statement[0] == 'hide') {
if (element = document.getElementById(statement[1])) {
element.style.visibility = 'hidden';
}
} else if (statement[0] == 'center') {
if (element = document.getElementById(statement[1])) {
center(element);
}
} else if (statement[0] == 'add') {
add_div(statement[1]);
} else if (statement[0] == 'remove') {
remove(statement[1]);
} else if (statement[0] == 'write') {
if (statement[1] == 'message') {
add_div('message');
var message = document.getElementById('message');
message.innerHTML = statement[2];
center(message);
message.style.visibility = 'visible';
} else if (element = document.getElementById(statement[1])) {
current_content[statement[1]] = element.innerHTML;
element.innerHTML = statement[2];
}
} else {
error += 'Unknown command ' + statement[0] + '<br/>';
}
} else {
error += 'No unit separator in group<br/>';
}
}
} else {
error += 'No group separator in response<br/>';
}
}
}
}
if (error != '') {
add_div('message');
var message = document.getElementById('message');
message.innerHTML = '<h4>Invalid response from server:</h4><p>' + error + '</p><p><button onclick="clear_message(this)">Close</button></p>';
center(message);
message.style.visibility = 'visible';
}
}

//AJAX Request function
function request(action, id, supplemental) {
parameters = 'action=' + action + '&id=' + id + '&supplemental=' + supplemental;
var form_name = 'form' + id;
if (form_obj = document.forms[form_name]) {
if (form_obj.submit.disabled) {
for (i = 0; i < form_obj.elements.length; i++) {
form_value = false;
form_obj.elements[i].disabled = true;
if (form_obj.elements[i].type == 'radio') {
if (form_obj.elements[i].checked) {
form_value = escape(form_obj.elements[i].value);
parameters = parameters + '&' + form_obj.elements[i].name + '=' + form_value;
}
} else if (form_obj.elements[i].type == 'checkbox') {
if (form_obj.elements[i].checked) {
parameters = parameters + '&' + form_obj.elements[i].name + '=1';
} else {
parameters = parameters + '&' + form_obj.elements[i].name + '=0';
}
} else {
form_value = escape(form_obj.elements[i].value);
parameters = parameters + '&' + form_obj.elements[i].name + '=' + form_value;
}
}
}
}
if (form_values != '') {
parameters = parameters + '&' + form_values;
form_values = '';
}
remove('message');
loading();
send_request(parameters);
}

//Clear and close message window
function clear_message(form_name) {
remove('message');
enable_form(form_name);
}

//Form value enumeration
function capture_value(form_element) {
if (save_button = document.getElementById('save_table_changes')) {
save_button.disabled = false;
}
new_value = form_element.name + '=' + form_element.value;
prev_pos = form_values.indexOf(form_element.name);
if (prev_pos != -1) {
end_pos = form_values.indexOf('&', prev_pos);
if (end_pos == -1) {
end_pos = form_values.length;
}
old_value = form_values.substr(prev_pos, end_pos - prev_pos);
form_values = form_values.replace(old_value, new_value);
} else if (form_values == '') {
form_values = new_value;
} else {
form_values = form_values + '&' + new_value;
}
form_element.className = 'changed';
}

//Form disable
function disable_form(form_name) {
document.forms[form_name].submit.disabled = true;
submitTimer = setTimeout('enable_form(form_name)', 8000);
}

//Form enable
function enable_form(form_name) {
if (form_obj = document.forms[form_name]) {
for(i=0; i < form_obj.elements.length; i++) {
form_obj.elements[i].disabled = false;
}
}
}

//Search function
function search() {
if (element = document.getElementById('Search-terms')) {
terms = element.value.replace(/^\s+|\s+$/g, '');
terms = escape(terms.replace(/\s+/g, '-'));
if (terms != 'Search') {
window.location = 'http://www.sarahandmatthewjohnson.com/Search/' + terms;
}
return true;
} else {
return true;
}
}

//Toggle element visibility
function toggle_element(element_id) {
if (document.getElementById(element_id).style.visibility == 'visible') {
document.getElementById(element_id).style.visibility = 'hidden';
document.getElementById(element_id).style.position = 'absolute';
} else {
document.getElementById(element_id).style.visibility = 'visible';
document.getElementById(element_id).style.position = 'relative';
}
}

//insert text into form element
function insert(form_name, element_name, insert_string) {
if (element_obj = document.forms[form_name].elements[element_name]) {
if (element_obj.createTextRange) {
element_obj.focus(element_obj.caretPos);
element_obj.caretPos = document.selection.createRange().duplicate();
if (element_obj.caretPos.text.length > 0) {
element_obj.caretPos.text = element_obj.caretPos.text;
} else {
element_obj.caretPos.text = insert_string;
}
} else {
element_obj.value += insert_string;
}
}
}

//add a div element
function add_div(element_name) {
if (!document.getElementById(element_name)) {
new_element = document.createElement('div');
new_element.id = element_name;
new_element.style.visibility = 'hidden';
document.body.appendChild(new_element);
}
}

//remove an element
function remove(element_name) {
if (element_obj = document.getElementById(element_name)) {
element_obj.style.visibility = 'hidden';
element_obj.parentNode.removeChild(element_obj);
}
}

//insert video object
function insert_video(form_name, element_name) {
if (element_obj = document.forms[form_name].elements[element_name]) {
var url = prompt('Paste the URL of the video', 'unspecified');
if (url != 'unspecified') {
insert(form_name, element_name, '[fvid:' + url + ']');
}
}
}

//move a fixed element to the center of the window
function center(element_obj) {
if (element_obj) {
if (!window.innerWidth) {
if(!(document.documentElement.clientWidth == 0)) {
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else {
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight;
element_obj.style.position = 'absolute';
}
} else {
windowWidth = window.innerWidth;
windowHeight = window.innerHeight;
}
elementLeft = Math.round((windowWidth - element_obj.offsetWidth) / 2);
elementTop = Math.round((windowHeight - element_obj.offsetHeight) / 2);
element_obj.style.top = elementTop + 'px';
element_obj.style.left = elementLeft + 'px';
}
}

function loading() {
loading_element = document.createElement('div');
loading_element.id = 'Spark-loading';
loading_element.innerHTML = '<img src="http://www.sarahandmatthewjohnson.com/spark/loading.gif" alt="Processing..." width="16px" height="16px" />&nbsp;&nbsp;Processing...';
document.body.appendChild(loading_element);
center(loading_element);
}
