// -*- mode:c -*-

var enable_chat;

var chat_window;
var chat_input_box;
var chat_input_sect;
var chat_name_box;
var chat_name_sect;
var chat_show_name_sect;
var chat_name = "";
var chat_last_text = "";
var chat_initial_name;

var chat_run = true;

var enable_dbg_popup = 0;

var last_dbg_msecs = 0;
function dbg (str) {
	try {
		if (console && console.log) {
			console.log (str + "\n");
		}
	} catch (e) {
	}

	var d = document.getElementById ("dbg_output");
	if (enable_dbg_popup && d) {
		d.style.visibility = 'hidden';
		d.style.position = 'absolute';
		d.style.zIndex = 10000;
		d.style.left = '400px';
		d.style.top = '0px';
		d.style.height = '150px';
		d.style.width = '200px';

		if (false) {
			d.style.height = '350px';
			d.style.width = '350px';
		}

		d.style.background = '#ddd';
		d.style.padding = '1em';
		d.style.border = '2px solid red';
		d.innerHTML = d.innerHTML + str + "<br/>\n";

		d.style.visibility = 'visible';
		d.style.display = 'block';
		d.style.overflow = 'auto';
	}
}

var msecs_start = 0;
function get_msecs () {
	var now = new Date().getTime();
	if (! msecs_start) {
		msecs_start = now - 1;
	}
	return (now - msecs_start);
}

function dump_obj (obj) {
	var name;

	dbg ("dump_obj(" + obj + ")");
	for (name in obj) {
		if (obj.hasOwnProperty (name)) {
			dbg (name + " = " + obj[name]);
		}
	}
}

function get_event_elt (ev) {
	var elt;

	if (! ev) {
		ev = window.event;
	}

	if (! (elt = ev.target)) {
		elt = ev.srcElement;
	}

	return (elt);
}

function my_addevent (event_name, elt, fun) {
	if (elt.addEventListener) {
		elt.addEventListener (event_name, fun, false);
	} else {
		elt.attachEvent ("on" + event_name, fun);
	}
}

function getx (elt) {
	var val = 0;
	var e;

	if (elt.offsetParent) {
		for (e = elt; e; e = e.offsetParent) {
			val += e.offsetLeft;
		}
	} else if (elt.x) {
		val += elt.x;
	}
	return (val);
}
function gety (elt) {
	var e;
	var val = 0;
	if (elt.offsetParent) {
		for (e = elt; e; e = e.offsetParent) {
			val += e.offsetTop;
		}
	} else if (elt.y) {
		val += elt.y;
	}
	return (val);
}

var urchin;
if (!urchin) { urchin = {}; }

var trackers = [];

function do_new_urchin () {
	if (typeof urchin.script == "undefined") {
		urchin.script = document.createElement ("script");
		document.body.appendChild (urchin.script);

		if (document.location.protocol == "https:") {
			urchin.script.src
				= "https://ssl.google-analytics.com/ga.js";
		} else {
			urchin.script.src
				= "http://www.google-analytics.com/ga.js";
		}
	}
	
	if (! window._gat) {
		window.setTimeout ('do_new_urchin()', 100);
		return;
	}

	var have_ref = 0;
	if (location.search.substring (0, 6) == "?_ref=") {
		have_ref = 1;
	}

	t = _gat._getTracker ("UA-231924-7");
	trackers.push (t);

	if (window.analytics_code) {
		t = _gat._getTracker (window.analytics_code);
		trackers.push (t);
	}

	len = trackers.length;
	for (i = 0; i < len; i++) {
		t = trackers[i];
		if (have_ref) {
			t._setCampNameKey ("_ref");
		}
		t._trackPageview ();
	}
}

var pageTracker = {
	_trackPageview: function (val) {
		var len, i;
		len = trackers.length;
		for (i = 0; i < len; i++) {
			trackers[i]._trackPageview (val);
		}
	}
}

function in_class (elt, classname) {
	if (elt) {
		var classes = elt.className;

		if (! classes) {
			return (false);
		}

		if (classes == classname) {
			return (true);
		}

		var c = classes.split (/\s+/);
		for (var i = 0; i < c.length; i++) {
			if (c[i] == classname) {
				return (true);
			}
		}
	}
	return (false);
}

function trap_exit () {
	return ("You have unsaved changes on this page." +
		" If you want to keep your changes," +
		" dismiss this dialog box, then click Save.");
}

function trap_save_click () {
	window.onbeforeunload = null;
}

function highlight_save_buttons () {
	window.onbeforeunload = trap_exit;

	var buttons = document.getElementsByTagName ("input");
	for (var i = 0; i < buttons.length; i++) {
		var b = buttons[i];

		if (in_class (b, "btn-save")) {
			b.setAttribute ("src", "btn-save-highlighted.gif");
		}
	}
}

/* ================================================================ */

var active_edit_marker = null;
var force_edit_markers_on = false;


function edit_marker_mouseover (ev) {
	var wrapper = get_event_elt (ev);

	while (wrapper && ! in_class (wrapper, "editable")) {
		wrapper = wrapper.parentNode;
	}

	if (! wrapper) {
		return;
	}

	var elts = wrapper.childNodes;
	for (var i = 0; i < elts.length; i++) {
		var elt = elts[i];

		if (in_class (elt, "edit_marker")) {
			if (active_edit_marker && ! force_edit_markers_on) {
				active_edit_marker.style.display = "none";
			}
			elt.style.position = "absolute";
			elt.style.display = "block";
			elt.style.zIndex = 10000;
			active_edit_marker = elt;
			break;
		}
	}
}

function edit_marker_mouseout (ev) {
	if (active_edit_marker && ! force_edit_markers_on) {
		active_edit_marker.style.display = "none";
		active_edit_marker = null;
	}
}

function show_edit_markers () {
	force_edit_markers_on = (force_edit_markers_on ? false : true);
	var elts = document.getElementsByTagName ('a');
	for (var i = 0; i < elts.length; i++) {
		var elt = elts[i];
		if (in_class (elt, "edit_marker")) {
			if (force_edit_markers_on) {
				elt.style.position = "absolute";
				elt.style.display = "block";
			} else {
				if (! in_class(elt,"edit_marker_controller")){
					elt.style.display = "none";
				}
			}
		}
	}
}

function edit_marker_init () {
	var elt;
	var elts = document.getElementsByTagName ('div');

	for (var i = 0; i < elts.length; i++) {
		elt = elts[i];

		if (in_class (elt, "editable")) {
			my_addevent ("mouseover", elt, edit_marker_mouseover);
			my_addevent ("mouseout", elt, edit_marker_mouseout);
		}
	}
}

/* ================================================================ */


var nav_hang = null;
var nav_hang_msecs;
var nav_hang_save_left;
var nav_hang_save_zIndex;

var nav_active_li;
var nav_active_ul;
var nav_active_restore_flag = 0;
var nav_active_restore_val;

function nav_hang_restore () {
	if (nav_hang) {
		nav_hang.style.left = nav_hang_save_left;
		nav_hang.style.zIndex = nav_hang_save_zIndex;
		nav_hang = null;

		if (nav_active_restore_flag) {
			nav_active_restore_flag = 0;
			nav_active_ul.style.left = nav_active_restore_val;
		}
	}
}

function nav_hang_mouseover (ev) {
	var main_item = get_event_elt (ev);
	while (main_item && ! in_class (main_item, "nav-main-item")) {
		main_item = main_item.parentNode;
	}
	
	if (main_item) {
		var ul = (main_item.getElementsByTagName ('ul'))[0];
		if (ul) {
			nav_hang_restore ();

			nav_hang = ul;
			nav_hang_msecs = get_msecs ();
			nav_hang_save_left = ul.style.left;
			nav_hang_save_zIndex = ul.style.zIndex;
				
			ul.style.left = 0;
			ul.style.zIndex = 20;

			if (nav_active_ul && nav_active_ul != ul) {
				nav_active_restore_flag = 1;
				nav_active_restore_val =
					nav_active_ul.style.top;
				nav_active_ul.style.left = '-1000px';
			}
		}
	}
}

function nav_hang_init () {
	var elts = document.getElementsByTagName ('li');

	for (var i = 0; i < elts.length; i++) {
		var elt = elts[i];
		if (in_class (elt, "nav-main-item")) {
			my_addevent ("mouseover", elt, nav_hang_mouseover);
		}
	}

	nav_active_li = document.getElementById ("active");
	if (nav_active_li) {
		nav_active_ul = nav_active_li.getElementsByTagName ("ul")[0];
	}
}


/* ================================================================ */

function save_button_init () {
	var elt, elts, i;

	elts = document.getElementsByTagName ('input');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "save_watch")) {
			my_addevent ("change", elt, highlight_save_buttons);
		}
	}

	elts = document.getElementsByTagName ('select');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "save_watch")) {
			my_addevent ("change", elt, highlight_save_buttons);
		}
	}

	elts = document.getElementsByTagName ('textarea');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "save_watch")) {
			my_addevent ("change", elt, highlight_save_buttons);
		}
	}


	elts = document.getElementsByTagName ("form");
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		my_addevent ("submit", elt, trap_save_click);
	}

	var buttons = document.getElementsByTagName ("input");
	for (i = 0; i < buttons.length; i++) {
		var b = buttons[i];

		if (in_class (b, "btn-save")) {
			my_addevent ("click", b, trap_save_click);
		}
	}

}

/* ================================================================ */

function mkaction_change_sublist () {
	var sel, subset_id, v, vid, o;

	if (! (sel = document.getElementById ("select_for_subset_id"))) {
		return;
	}
	subset_id = sel.value;

	if (! (v = document.getElementById ("view_for_js"))) {
		return;
	}

	vid = "views_for_" + subset_id;
	if (! (o = document.getElementById (vid))) {
		return;
	}

	v.innerHTML = o.innerHTML;
}

/* ================================================================ */

function search_bar_select (x) {
	var sel;

	if (! (sel = document.getElementById ("search_bar_sel"))) {
		return;
	}
	if (sel.value == 8) {
		document.location = "search.php";
	}
	if (sel.value == 9) {
		document.location = "search.php?config=1";
	}
}

/* ================================================================ */

var center_x, center_y;

function get_view_center () {
	if (window.innerWidth) {
		/* all but IE */
		center_x = window.pageXOffset + window.innerWidth / 2;
		center_y = window.pageYOffset + window.innerHeight / 2;
	} else {
		center_x = document.documentElement.scrollLeft +
			document.documentElement.clientWidth / 2;
		center_y = document.documentElement.scrollTop +
			document.documentElement.clientHeight / 2;
	}
}

var cur_tip_id = '';

function active_tip_click (ev) {
	var elt, i;
	var elts = document.getElementsByTagName ('div');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "active_tip_text")) {
			elt.style.display = "none";
		}
	}

	var tip_link = get_event_elt (ev);
	while (tip_link && ! in_class (tip_link, "active_tip_link")) {
		tip_link = tip_link.parentNode;
	}

	if (! tip_link) {
		return;
	}

	var tip_id = tip_link.id.replace (/active_tip_link_[0-9]*_/, "");

	if (tip_id == cur_tip_id) {
		cur_tip_id = '';
		return;
	}
	cur_tip_id = tip_id;

	var id = "active_tip_text_" + tip_id;

	var tip_text;
	if (! (tip_text = document.getElementById (id))) {
		return;
	}

	get_view_center ();

	tip_text.style.position = 'absolute';
	tip_text.style.display = 'none';
	tip_text.style.visibility = 'hidden';
	tip_text.style.left = 0 + 'px';
	tip_text.style.top = 0 + 'px';
	
	tip_text.style.display = 'block';

	var w = tip_text.clientWidth;
	var h = tip_text.clientHeight;

	var x = center_x - w / 2;
	var y = center_y - h / 2;

	tip_text.style.left = x + 'px';
	tip_text.style.top = y + 'px';
	tip_text.style.display = "block";
	tip_text.style.visibility = "visible";
}

function active_tip_close (ev) {
	cur_tip_id = '';

	var tip_text = get_event_elt (ev);

	while (tip_text && ! in_class (tip_text, "active_tip_text")) {
		tip_text = tip_text.parentNode;
	}
	if (! tip_text) {
		return;
	}

	tip_text.style.display = "none";
}

function active_tip_init () {
	var elts, i;

	elts = document.getElementsByTagName ('span');
	for (i = 0; i < elts.length; i++) {
		var elt = elts[i];
		if (in_class (elt, "active_tip_link")) {
			my_addevent ("click", elt, active_tip_click);
		}
		if (in_class (elt, "active_tip_close")) {
			my_addevent ("click", elt, active_tip_close);
		}
	}
}

/* ================================================================ */

function do_merge_field (ev) {
	var elts, elt, newelt, i;

	newelt = get_event_elt (ev);

	elts = document.getElementsByTagName ('input');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (elt.name == newelt.name) {
			while (elt && elt.nodeName != "TD") {
				elt = elt.parentNode;
			}
			if (elt) {
				elt.style.color = "black";
			}
		}
	}
	elt = newelt;
	while (elt && elt.nodeName != "TD") {
		elt = elt.parentNode;
	}
	if (elt) {
		elt.style.color = "red";
	}
}

function merge_init () {
	var elts, elt, i;

	elts = document.getElementsByTagName ('input');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "merge_field")) {
			my_addevent ("change", elt, do_merge_field);
		}
	}


}

/* ================================================================ */
function action_edit_click (ev) {
	if (! ev) { ev = window.event; }

	if (typeof ev.preventDefault != "undefined") {
		ev.preventDefault ();
	} else {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}

	var curelt = get_event_elt (ev);
	var li = curelt.parentNode;

	var part_num = li.id.replace (/.*_/, "");

	var elts = document.getElementsByTagName ('li');
	var elt, i, n;

	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "act_part_selector")) {
			n = elt.id.replace (/.*_/, "");
			if (n == part_num) {
				elt.className = "act_part_selector" +
					" act_part_selector_active";
			} else {
				elt.className = "act_part_selector";
			}
		}
	}
	
	var cur_id = "action_edit_" + part_num;

	elts = document.getElementsByTagName ('div');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "action_edit_part")) {
			if (elt.id == cur_id) {
				elt.style.display = "block";
			} else {
				elt.style.display = "none";
			}
		}
	}

	elt = document.getElementById ('input_action_part');
	if (elt) {
		elt.value = parseInt (part_num, 10);
	}
	
	return (false);
}

function action_edit_init () {
	var id, elts, elt, i;

	if (! window.action_part) {
		return;
	}

	id = "action_edit_" + window.action_part;
	elt = document.getElementById (id);
	if (elt) {
		elt.style.display = "block";
	}

	elts = document.getElementsByTagName ('input');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "act_part_selector_button")) {
			// elt.style.display = "none";

			my_addevent ("click", elt, action_edit_click);
		}
	}

	elts = document.getElementsByTagName ('span');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "act_part_selector_anchor")) {
			elt.style.display = "inline";
			my_addevent ("click", elt, action_edit_click);
		}
	}

}

/* ================================================================ */
function toc_init () {
	var elt;

	if (! window.toc_active) {
		return;
	}
	if (! (elt = document.getElementById (window.toc_active))) {
		return;
	}
	elt.className = "toc_active";
}

/* ================================================================ */

/* http://alexking.org/projects/js-quicktags */
function insertAtCursor(myField, myValue) {
  //IE support
  if (document.selection) {
    myField.focus();
    var sel = document.selection.createRange();
    sel.text = myValue;
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos) +
	    myValue + myField.value.substring(endPos, myField.value.length);
  } else {
    myField.value += myValue;
  }
}


function auto_insert_click (ev) {
	if (! ev) { ev = window.event; }

	var elt = get_event_elt (ev);

	if (elt.nodeName == "OPTION") {
		var ta = document.getElementById ('auto_insert_target');
		insertAtCursor(ta, elt.value);
	}
}

function auto_insert_init () {
	var elt;
	var elts = document.getElementsByTagName ('select');
	for (var i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "auto_insert")) {
			my_addevent ("click", elt, auto_insert_click);

		}
	}
}

/* ================================================================ */
function fix_ads () {
	var ad_data = document.getElementById ('sys_ad1_data');
	var ad_location = document.getElementById ('sys_ad1');
	var ad_placeholder = document.getElementById ('sys_ad1_placeholder');

	if (ad_data && ad_location && ad_placeholder) {
		ad_location.replaceChild (ad_data, ad_placeholder);
		ad_data.style.display = "block";
	}

	ad_data = document.getElementById ('sys_ad2_data');
	ad_location = document.getElementById ('sys_ad2');
	ad_placeholder = document.getElementById ('sys_ad2_placeholder');

	if (ad_data && ad_location && ad_placeholder) {
		ad_location.replaceChild (ad_data, ad_placeholder);
		ad_data.style.display = "block";
	}

	ad_data = document.getElementById ('sys_ad_apebble_data');
	ad_location = document.getElementById ('sys_ad_apebble');
	ad_placeholder = document.getElementById('sys_ad_apebble_placeholder');

	if (ad_data && ad_location && ad_placeholder) {
		ad_location.replaceChild (ad_data, ad_placeholder);
		ad_data.style.display = "block";
	}
}

/* ================================================================ */

function chat_send () {
	var chat_req;

	if (window.XMLHttpRequest) {
		chat_req = new window.XMLHttpRequest ();
	} else {
		chat_req = new window.ActiveXObject ("MSXML2.XMLHTTP.3.0");
	}

	var url = "chatxfer.php?ts=" + new Date().getTime();
	url = url + "&pid=" + window.global_pid;
	url = url + "&db_mode=" + window.db_mode;
	url = url + "&name=" + encodeURIComponent(chat_name);
	url = url + "&msg=" + chat_input_box.value;

	chat_req.open ("GET", url, true);
	chat_req.send (null);
}

/* this is onclick for the comment Send button */
function chat_submit () {
	if (chat_input_box.value) {
		chat_send ();
		chat_input_box.value = "";
	}
}

/* this is onkeypress for the comment input box */
function chat_key (ev) {
	if (! ev) { ev = window.event; }
	if (ev.keyCode == 13) {
		chat_submit ();
	}
}

/* this is the onkeypress for the Name input box */
function chat_key_name (ev) {
	if (! ev) { ev = window.event; }
	if (ev.keyCode == 13) {
		chat_show_name ();
	}
}

function h(str) {
	return (str.replace(/&/g,'&amp;') . 
		replace(/</g,'&lt;') . 
		replace(/>/g,'&gt;'));
}

function chat_show_name () {
	chat_name = chat_name_box.value;
	chat_name_sect.style.display = "none";
	chat_show_name_sect.innerHTML =
		"<strong>Screen name for chat:</strong>\n" +
		"<span id='chat_screen_name'>" +
		h(chat_name) +
		"</span>\n" +
		" <input type='button' value='Change'" +
		"    onclick='chat_query_name()' />";
	chat_show_name_sect.style.display = "block";
	chat_input_sect.style.display = "block";
	
}

function chat_query_name () {
	chat_show_name_sect.style.display = "none";
	chat_input_sect.style.display = "none";
	chat_name_sect.style.display = "block";
}

function chat_init () {
	chat_window = document.getElementById ('chat_window');
	chat_input_box = document.getElementById ('chat_input');
	chat_input_sect = document.getElementById ('chat_input_sect');
	chat_name_box = document.getElementById ('chat_name');
	chat_name_sect = document.getElementById ('chat_name_sect');
	chat_show_name_sect = document.getElementById ('chat_show_name_sect');
	chat_arg = "";
	
	if (window.chat_initial_name) {
		chat_name_box.value = chat_initial_name;
		chat_show_name ();
	} else {
		chat_query_name ();
	}
}



/* ================================================================ */

var pebajax_req = null;
var pebajax_file_seq = 0;
var pebajax_offset = 0;
var pebajax_buf = "";

var pebajax_rand_base = Math.floor (Math.random () * 1000 * 1000 * 1000);

function pebajax_query () {
	if (pebajax_req) {
		pebajax_req.abort ();
		pebajax_req = null;
	}

	if (window.XMLHttpRequest) {
		pebajax_req = new window.XMLHttpRequest ();
	} else {
		pebajax_req = new window.ActiveXObject ("MSXML2.XMLHTTP.3.0");
	}

	pebajax_rand_base++;
	var url = "/pebajax/?rand=" + pebajax_rand_base +
		"&pid=" + window.global_pid +
		"&db_mode=" + window.db_mode +
		"&file_seq=" + pebajax_file_seq +
		"&offset=" + pebajax_offset;

	pebajax_req.open ("GET", url, true);
	pebajax_req.onreadystatechange = pebajax_callback;
	pebajax_req.send (null);
}

function pebajax_chat (obj) {
	if (chat_window) {
		chat_window.innerHTML += obj.val;
		chat_window.scrollTop = chat_window.scrollHeight;
	}
}

var medium_img = null;


function pebajax_filmstrip_hide (ev) {
}

function pebajax_filmstrip_select (ev) {
	if (! ev) { ev = window.event; }
	var elt = get_event_elt (ev);

	$("#filmstrip_medium img")[0].setAttribute ("src", elt.src);
	$("#filmstrip_medium").show().css("visibity","visible");
}

var last_filmstrip_x = 0;
var last_filmstrip_y = 0;

function fix_filmstrip_pos () {
	var offset = $(".webcast_main").offset ();
	var x = offset.left + 520;
	var y = offset.top + 0;

	if (x != last_filmstrip_x || y != last_filmstrip_y) {
		last_filmstrip_x = x;
		last_filmstrip_y = y;

		$("#filmstrip_wrapper").css("left",x+"px").css("top",y+"px");
	}
}

function pebajax_filmstrip (obj) {
	win = document.getElementById ('filmstrip');

	if (! win) {
		return;
	}

	win.style.visibility = "hidden";
	win.innerHTML = obj.val;
	win.scrollLeft = win.scrollWidth;

	var elts = win.getElementsByTagName ('img');
	var elt;
	for (var i = 0; i < elts.length; i++) {
		elt = elts[i];
		my_addevent ("click", elt, pebajax_filmstrip_select);
	}

	win.style.visibility = "visible";

	var last_img = elt;

	var div;
	div = document.getElementById ('filmstrip_medium');
	if (div && last_img) {
		if (medium_img == null) {
			medium_img = document.createElement ("img");
			div.appendChild (medium_img);
		}
		
		medium_img.setAttribute ("src", last_img.src);
		medium_img.setAttribute ("width", 380);

		fix_filmstrip_pos ();
		$("#filmstrip_wrapper").show();

		my_addevent ("click", div, pebajax_filmstrip_select);

	}
}

var last_obj;
function pebajax_process () {
	var parts, val, rest;

	while (true) {
		parts = pebajax_buf.match (/^([^\004]*)\004([\001-\177]*)$/);
	
		if (!parts || !parts[1])
			break;

		val = parts[1];
		rest = parts[2];

		pebajax_buf = rest;

		if (new RegExp ("^[ \t\r\n]*{").test (val)) {
			obj = JSON.parse (val);
			last_obj = obj;

			if (obj && obj.op) {
				if (obj.op == "chat") {
					pebajax_chat (obj);
				} else if (obj.op == "filmstrip") {
					pebajax_filmstrip (obj);
				} else {
					dbg ("unknown pebajax op " + obj.op);
				}
			}
		}
	}
}

function pebajax_callback () {
	if (pebajax_req.readyState != 4 || pebajax_req.status != 200)
		return;
	
	var resp = pebajax_req.responseText;

	var parts = resp.match (/^\001*([^\001]*)\001([0-9]*) ([0-9]*)/);

	if (parts && parts[1] && parts[2]) {
		var data = parts[1];
		pebajax_file_seq = parseInt (parts[2], 10);
		pebajax_offset = parseInt (parts[3], 10);

		pebajax_buf += data;

		pebajax_process ();

		pebajax_req = null;
		pebajax_query ();
	} else {
		pebajax_req = null;
	}
}

function pebajax_init () {
	pebajax_query ();
}

/* ================================================================ */

var cells;
var cellnum = 0;

function tick () {
	var now = get_msecs ();

	if (nav_hang_msecs && now - nav_hang_msecs > 1500) {
		nav_hang_msecs = 0;
		nav_hang_restore ();
	}

	if (cells) {
		cellnum++;
		if (cellnum > 12)
			cellnum = 0;
		offset = -1 * cellnum * 100;
		cells.style.backgroundPosition = offset + "px 0px";
	}
}

function dump_props (elt) {
	var val, prop;

	console.log ("elt = " + elt + "\n");

	for (prop in elt) {
		val = elt[prop];
		if (! val) {
			continue;
		}
		if (typeof (val) == "function") {
			val = "(function)";
		}
		if (val.length > 50) {
			val = "[long string]";
		}
		console.log (prop + " = " + val);
	}

	if (0) {
		elt = elt.style;
		console.log ("\n ****style**** " + elt);
		
		for (prop in elt) {
			val = elt[prop];
			if (! val) {
				continue;
			}
			console.log ("style: " + prop + " = " + val);
		}
	}
}


function pebble_onload () {
	if (1 || window.db_mode == "production") {
		do_new_urchin ();
	}

	save_button_init ();
	merge_init ();

	/* 326 is for new LTA edit markers */
	if (window.enable_edit_marker && window.global_pid != 326) {
		edit_marker_init ();
	}

	nav_hang_init ();
	active_tip_init ();

	action_edit_init ();

	if (window.swf_init) {
		window.swf_init ();
	}

	toc_init ();

	auto_insert_init ();

	fix_ads ();

	if (window.enable_chat) {
		chat_init ();
		pebajax_init ();
	}

	cells = document.getElementById ('cells');

	if (window.theme_script_init) {
		window.theme_script_init ();
	}

	window.setInterval ('tick()', 30);

	elts = document.getElementsByTagName ('input');
	for (i = 0; i < elts.length; i++) {
		elt = elts[i];
		if (in_class (elt, "jsclear")) {
			elt.value = '';
		}
	}


}

/* ================================================================ */

function youtube (url, elt_id, width, height) {
	var so = new window.SWFObject(url, elt_id, width, height,
				      "8", "#dddddd");
	so.setAttribute ('style', 'background:#dddddd');
	so.addParam("wmode", "opaque");
	so.write(elt_id);
}

function activate_toolbar () {
	elt = document.getElementById ('activate_toolbar_wrapper');
	dbg ("elt " + elt);
	if (elt)
		elt.style.display = "block";
}
	
