summaryrefslogtreecommitdiff
path: root/js/webtrees-1.5.0.js
diff options
context:
space:
mode:
authorfisharebest <fisharebest@gmail.com>2013-06-29 22:33:03 +0000
committerfisharebest <fisharebest@gmail.com>2013-06-29 22:33:03 +0000
commit660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47 (patch)
treeca94e6fcde611712d23b38a8dc1fa74a66753b53 /js/webtrees-1.5.0.js
parente40bcb61e289f4fb6e5802407d3d44fa278da82b (diff)
downloadwebtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.tar.gz
webtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.tar.bz2
webtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.zip
Diffstat (limited to 'js/webtrees-1.5.0.js')
-rw-r--r--js/webtrees-1.5.0.js1442
1 files changed, 1442 insertions, 0 deletions
diff --git a/js/webtrees-1.5.0.js b/js/webtrees-1.5.0.js
new file mode 100644
index 0000000000..c9feaa3215
--- /dev/null
+++ b/js/webtrees-1.5.0.js
@@ -0,0 +1,1442 @@
+// Common javascript functions
+//
+// webtrees: Web based Family History software
+// Copyright (C) 2013 webtrees development team.
+//
+// Derived from PhpGedView
+// Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// $Id$
+
+// Specifications for various types of popup edit window.
+// Choose positions to center in the smallest (1000x800) target screen
+var edit_window_specs='width=650,height=600,left=175,top=100,resizable=1,scrollbars=1'; // edit_interface.php, add_media.php, gedrecord.php
+var indx_window_specs='width=600,height=500,left=200,top=150,resizable=1,scrollbars=1'; // index_edit.php, module configuration
+var news_window_specs='width=740,height=650,left=200,top=150,resizable=1,scrollbars=1'; // edit_news.php
+var help_window_specs='width=500,height=400,left=250,top=200,resizable=1,scrollbars=1'; // help.php
+var find_window_specs='width=550,height=600,left=250,top=150,resizable=1,scrollbars=1'; // find.php, inverse_link.php
+var mesg_window_specs='width=500,height=600,left=250,top=100,resizable=1,scrollbars=1'; // message.php
+var chan_window_specs='width=500,height=600,left=250,top=100,resizable=1,scrollbars=1'; // edit_changes.php
+var mord_window_specs='width=500,height=600,left=250,top=100,resizable=1,scrollbars=1'; // edit_interface.php, media reorder
+var assist_window_specs='width=900,height=800,left=70,top=70,resizable=1,scrollbars=1'; // edit_interface.php, used for census assistant
+var gmap_window_specs='width=650,height=600,left=200,top=150,resizable=1,scrollbars=1'; // googlemap module place editing
+var fam_nav_specs='width=300,height=600,left=817,top=150,resizable=1,scrollbars=1'; // media_0_inverselink.php
+
+// TODO: This function loads help_text.php twice. It should only load it once.
+function helpDialog(which, mod) {
+ url='help_text.php?help='+which+'&mod='+mod;
+ dialog=jQuery('<div></div>')
+ .load(url+' .helpcontent')
+ .dialog({
+ modal: true,
+ width: 500,
+ closeText: ""
+ });
+ jQuery(".ui-widget-overlay").on("click", function () {
+ jQuery("div:ui-dialog:visible").dialog("close");
+ });
+ jQuery('.ui-dialog-title').load(url+' .helpheader');
+ return false;
+}
+
+// Create a modal dialog, fetching the contents from a URL
+function modalDialog(url, title) {
+ jQuery(document).ajaxComplete(function() {
+ jQuery('.ui-dialog').before('<div class="ui-widget-overlay" />');
+ });
+ dialog=jQuery('<div title="'+title+'"></div>')
+ .load(url)
+ .dialog({
+ modal: false,
+ width: 700,
+ closeText: "",
+ close: function(event, ui) {
+ $(this).remove();
+ jQuery('.ui-widget-overlay').remove();
+ }
+ });
+ // Close the window when we click outside it.
+ jQuery(".ui-widget-overlay").on("click", function () {
+ jQuery("div:ui-dialog:visible").dialog("close");
+ jQuery(this).remove();
+ });
+ return false;
+}
+
+// Create a modal dialog to display notes
+function modalNotes(content, title) {
+ dialog=jQuery('<div title="'+title+'"></div>')
+ .html(content)
+ .dialog({
+ modal: true,
+ width: 500,
+ closeText: "",
+ close: function(event, ui) { $(this).remove(); }
+ });
+ // Close the window when we click outside it.
+ jQuery(".ui-widget-overlay").on("click", function () {
+ jQuery("div:ui-dialog:visible").dialog("close");
+ });
+ return false;
+}
+
+// For a dialog containing a form, submit the form via AJAX
+// (to save the data), then reload the page (to display it).
+function modalDialogSubmitAjax(form) {
+ jQuery.ajax({
+ type: 'POST',
+ url: jQuery(form).attr('action'),
+ data: jQuery(form).serialize(),
+ success: function(response) { window.location.reload(); }
+ });
+ return false;
+}
+
+function closePopupAndReloadParent(url) {
+ if (parent.opener) {
+ if (url == null || url == "") {
+ parent.opener.location.reload();
+ } else {
+ parent.opener.location=url;
+ }
+ }
+ window.close();
+}
+
+// variables to hold mouse x-y pos.s
+ var msX = 0;
+ var msY = 0;
+
+// the following javascript function is for the positioning and hide/show of
+// DIV layers used in the display of the pedigree chart.
+function MM_showHideLayers() { //v6.0
+ var i,p,v,obj,args=MM_showHideLayers.arguments;
+ for (i=0; i<(args.length-3); i+=4) {
+ if ((obj=document.getElementById(args[i]))!=null) {
+ if (obj.style) {
+ div=obj;
+ obj=obj.style;
+ }
+ v=args[i+2];
+ if (v=='toggle') {
+ if (obj.visibility.indexOf('hid')!=-1) v='show';
+ else v='hide';
+ }
+ v=(v=='show')?'visible':(v=='hide')?'hidden':v;
+ obj.visibility=v;
+ if (args[i+1]=='followmouse') {
+ pobj = document.getElementById(args[i+3]);
+ if (pobj!=null) {
+// if (pobj.style.top!="auto") {
+ if (pobj.style.top!="auto" && args[i+3]!="relatives") {
+ obj.top=5+msY-parseInt(pobj.style.top)+'px';
+ if (textDirection=="ltr") obj.left=5+msX-parseInt(pobj.style.left)+'px';
+ if (textDirection=="rtl") obj.right=5+msX-parseInt(pobj.style.right)+'px';
+ }
+ else {
+ obj.top="auto";
+ //obj.left="80%";
+ pagewidth = document.documentElement.offsetWidth+document.documentElement.scrollLeft;
+ if (textDirection=="rtl") pagewidth -= document.documentElement.scrollLeft;
+ if (msX > pagewidth-160) msX = msX-150-pobj.offsetLeft;
+ contentdiv = document.getElementById("content");
+ msX = msX - contentdiv.offsetLeft;
+ if (textDirection=="ltr") obj.left=(5+msX)+'px';
+ obj.zIndex=1000;
+ }
+ }
+ else {
+ //obj.top="auto";
+ if (WT_SCRIPT_NAME.indexOf("fanchart")>0) {
+ obj.top=(msY-20)+'px';
+ obj.left=(msX-20)+'px';
+ }
+ else if (WT_SCRIPT_NAME.indexOf("index.php")==-1) {
+ Xadjust = document.getElementById('content').offsetLeft;
+ obj.left=(5+(msX-Xadjust))+'px';
+ obj.top="auto";
+ }
+ else {
+ Xadjust = document.getElementById('content').offsetLeft;
+ obj.top=(msY-50)+'px';
+ obj.left=(10+(msX-Xadjust))+'px';
+ }
+ obj.zIndex=1000;
+ }
+ }
+ }
+ }
+}
+
+var show = false;
+ function togglechildrenbox(pid) {
+ if (!pid) pid='';
+ else pid = '.'+pid;
+ if (show) {
+ MM_showHideLayers('childbox'+pid, ' ', 'hide',' ');
+ show=false;
+ }
+ else {
+ MM_showHideLayers('childbox'+pid, ' ', 'show', ' ');
+ show=true;
+ }
+ return false;
+ }
+
+ var lastfamilybox = "";
+ var popupopen = 0;
+ function show_family_box(boxid, pboxid) {
+ popupopen = 1;
+ lastfamilybox=boxid;
+ if (pboxid=='relatives') MM_showHideLayers('I'+boxid+'links', 'followmouse', 'show',''+pboxid);
+ else {
+ famlinks = document.getElementById("I"+boxid+"links");
+ divbox = document.getElementById("out-"+boxid);
+ parentbox = document.getElementById("box"+boxid);
+ //alert(famlinks+" "+divbox+" "+parentbox);
+ if (famlinks && divbox && parentbox) {
+ famlinks.style.top = "0px";
+ if (textDirection=="ltr") famleft = parseInt(divbox.style.width)+15;
+ else famleft = 0;
+ if (isNaN(famleft)) {
+ famleft = 0;
+ famlinks.style.top = parentbox.offsetTop+"px";
+ }
+ pagewidth = document.documentElement.offsetWidth+document.documentElement.scrollLeft;
+ if (textDirection=="rtl") pagewidth -= document.documentElement.scrollLeft;
+ if (famleft+parseInt(parentbox.style.left) > pagewidth-100) famleft=25;
+ famlinks.style.left = famleft + "px";
+ if (WT_SCRIPT_NAME.indexOf("index.php")!=-1) famlinks.style.left = "100%";
+ MM_showHideLayers('I'+boxid+'links', ' ', 'show',''+pboxid);
+ return;
+ }
+ MM_showHideLayers('I'+boxid+'links', 'followmouse', 'show',''+pboxid);
+ }
+ }
+
+ function toggle_family_box(boxid, pboxid) {
+ if (popupopen==1) {
+ MM_showHideLayers('I'+lastfamilybox+'links', ' ', 'hide',''+pboxid);
+ popupopen = 0;
+ }
+ if (boxid==lastfamilybox) {
+ lastfamilybox = "";
+ return;
+ }
+ popupopen = 1;
+ lastfamilybox=boxid;
+ if (pboxid=='relatives') MM_showHideLayers('I'+boxid+'links', 'followmouse', 'show',''+pboxid);
+ else {
+ famlinks = document.getElementById("I"+boxid+"links");
+ divbox = document.getElementById("out-"+boxid);
+ parentbox = document.getElementById("box"+boxid);
+ if (!parentbox) parentbox = document.getElementById(pboxid+".0");
+ if (famlinks && divbox && parentbox) {
+ divWidth = parseInt(divbox.style.width);
+ linkWidth = parseInt(famlinks.style.width);
+ parentWidth = parseInt(parentbox.style.width);
+ //alert('Widths div:'+divWidth+' parent:'+parentWidth+' links:'+linkWidth);
+ famlinks.style.top = "3px";
+ famleft = divWidth+8;
+ if (textDirection=="rtl") {
+ famleft -= (divWidth+linkWidth+5);
+ if (browserType!="mozilla") famleft -= 11;
+ }
+ pagewidth = document.documentElement.offsetWidth+document.documentElement.scrollLeft;
+ //alert(pagewidth);
+ if (famleft+parseInt(parentbox.style.left) > pagewidth-100) famleft=25;
+ famlinks.style.left = famleft + "px";
+ if (WT_SCRIPT_NAME.indexOf("index.php")!=-1) famlinks.style.left = "100%";
+ MM_showHideLayers('I'+boxid+'links', ' ', 'show',''+pboxid);
+ }
+ else MM_showHideLayers('I'+boxid+'links', 'followmouse', 'show',''+pboxid);
+ }
+ }
+
+ function hide_family_box(boxid) {
+ MM_showHideLayers('I'+boxid+'links', '', 'hide','');
+ popupopen = 0;
+ lastfamilybox="";
+ }
+
+ var timeouts = new Array();
+ function family_box_timeout(boxid) {
+ tout = setTimeout("hide_family_box('"+boxid+"')", 2500);
+ timeouts[boxid] = tout;
+ }
+
+ function clear_family_box_timeout(boxid) {
+ clearTimeout(timeouts[boxid]);
+ }
+
+ function expand_layer(sid) {
+ if (jQuery("#"+sid+"_img").hasClass("icon-plus")) {
+ jQuery('#'+sid+"_img").removeClass("icon-plus").addClass("icon-minus");
+ jQuery('#'+sid).show("fast");
+ } else {
+ jQuery('#'+sid+"_img").removeClass("icon-minus").addClass("icon-plus");
+ jQuery('#'+sid).hide("fast");
+ }
+ return false;
+ }
+
+// Main function to retrieve mouse x-y pos.s
+function getMouseXY(e) {
+ if (IE) { // grab the x-y pos.s if browser is IE
+ msX = event.clientX + document.documentElement.scrollLeft;
+ msY = event.clientY + document.documentElement.scrollTop;
+ } else { // grab the x-y pos.s if browser is NS
+ msX = e.pageX;
+ msY = e.pageY;
+ }
+ return true;
+}
+
+// Open the "edit interface" popup window
+function edit_interface(params, windowspecs, pastefield) {
+ var features = windowspecs || edit_window_specs;
+ var url = 'edit_interface.php?' + jQuery.param(params) + '&ged=' + WT_GEDCOM;
+ window.open(url, '_blank', features);
+}
+
+function edit_record(xref, fact_id) {
+ edit_interface({
+ "action": "edit",
+ "xref": xref,
+ "fact_id": fact_id
+ });
+ return false;
+}
+
+function edit_raw(xref) {
+ edit_interface({
+ "action": "editraw",
+ "xref": xref
+ });
+ return false;
+}
+
+function edit_note(xref) {
+ edit_interface({
+ "action": "editnote",
+ "xref": xref
+ });
+ return false;
+}
+
+function edit_source(xref) {
+ edit_interface({
+ "action": "editsource",
+ "xref": xref,
+ });
+ return false;
+}
+
+function add_record(xref, fact_field) {
+ var fact = jQuery('#' + fact_field).val();
+ if (fact) {
+ if (fact == "OBJE") {
+ window.open('addmedia.php?action=showmediaform&linkid=' + xref + '&ged=' + WT_GEDCOM, '_blank', edit_window_specs);
+ } else {
+ edit_interface({
+ "action": "add",
+ "xref": xref,
+ "fact": fact
+ });
+ }
+ }
+ return false;
+}
+
+function addClipboardRecord(xref, fact) {
+ var factfield = document.getElementById(fact);
+ if (factfield) {
+ var factvalue = factfield.options[factfield.selectedIndex].value;
+ edit_interface({
+ "action": "paste",
+ "xref": xref,
+ "fact": factvalue.substr(10)
+ });
+ }
+ return false;
+}
+
+function reorder_media(xref) {
+ edit_interface({
+ "action": "reorder_media",
+ "xref": xref
+ }, mord_window_specs);
+ return false;
+}
+
+function add_new_record(xref, fact) {
+ edit_interface({
+ "action": "add",
+ "xref": xref,
+ "fact": fact
+ });
+ return false;
+}
+
+function addnewchild(famid, gender) {
+ edit_interface({
+ "action": "addchild",
+ "gender": gender,
+ "famid": famid
+ });
+ return false;
+}
+
+function addnewspouse(famid, famtag) {
+ edit_interface({
+ "action": "addspouse",
+ "famid": famid,
+ "famtag": famtag
+ });
+ return false;
+}
+
+function addopfchild(xref, gender) {
+ edit_interface({
+ "action": "addopfchild",
+ "xref": xref,
+ "gender": gender
+ });
+ return false;
+}
+
+function addspouse(xref, famtag) {
+ edit_interface({
+ "action": "addspouse",
+ "xref": xref,
+ "famtag": famtag,
+ "famid": "new"
+ });
+ return false;
+}
+
+function linkspouse(xref, famtag) {
+ edit_interface({
+ "action": "linkspouse",
+ "xref": xref,
+ "famtag": famtag,
+ "famid": "new"
+ });
+ return false;
+}
+
+function add_famc(xref) {
+ edit_interface({
+ "action": "addfamlink",
+ "xref": xref,
+ });
+ return false;
+}
+
+function edit_name(xref, fact_id) {
+ edit_interface({
+ "action": "editname",
+ "xref": xref,
+ "fact_id": fact_id
+ });
+ return false;
+}
+
+function add_name(xref) {
+ edit_interface({
+ "action": "addname",
+ "xref": xref
+ });
+ return false;
+}
+
+function addnewparent(xref, famtag) {
+ edit_interface({
+ "action": "addnewparent",
+ "xref": xref,
+ "famtag": famtag
+ });
+ return false;
+}
+
+function addnewparentfamily(xref, famtag, famid) {
+ edit_interface({
+ "action": "addnewparent",
+ "xref": xref,
+ "famtag": famtag,
+ "famid": famid
+ });
+ return false;
+}
+
+// Delete a fact - and reload the page
+function delete_fact(message, xref, fact_id) {
+ if (confirm(message)) {
+ jQuery.post('action.php', {
+ action: 'delete-fact',
+ xref: xref,
+ fact_id: fact_id,
+ ged: WT_GEDCOM
+ },
+ function(){
+ location.reload();
+ });
+ }
+ return false;
+}
+
+// Copy a fact to the clipboard
+function copy_fact(xref, fact_id) {
+ jQuery.post('action.php', {
+ action: 'copy-fact',
+ xref: xref,
+ fact_id: fact_id,
+ ged: WT_GEDCOM
+ },
+ function(){
+ location.reload();
+ });
+ return false;
+}
+
+function reorder_children(xref) {
+ edit_interface({
+ "action": "reorder_children",
+ "xref": xref
+ });
+ return false;
+}
+
+function reorder_families(xref) {
+ edit_interface({
+ "action": "reorder_fams",
+ "xref": xref
+ });
+ return false;
+}
+
+function reply(username, subject) {
+ window.open('message.php?to='+username+'&subject='+subject+'&ged='+WT_GEDCOM, '_blank', mesg_window_specs);
+ return false;
+}
+
+function delete_message(id) {
+ window.open('message.php?action=delete&id='+id, '_blank'+'&ged='+WT_GEDCOM, mesg_window_specs);
+ return false;
+}
+
+function change_family_members(xref) {
+ edit_interface({
+ "action": "changefamily",
+ "xref": xref
+ });
+ return false;
+}
+
+function addnewsource(field) {
+ pastefield=field;
+ edit_interface({
+ "action": "addnewsource",
+ "xref": "newsour"
+ }, null, field);
+ return false;
+}
+
+function addnewrepository(field) {
+ pastefield=field;
+ edit_interface({
+ "action": "addnewrepository",
+ "xref": "newrepo"
+ }, null, field);
+ return false;
+}
+
+function addnewnote(field) {
+ pastefield=field;
+ edit_interface({
+ "action": "addnewnote",
+ "noteid": "newnote"
+ }, null, field);
+ return false;
+}
+
+function addnewnote_assisted(field, xref) {
+ pastefield=field;
+ edit_interface({
+ "action": "addnewnote_assisted",
+ "noteid": "newnote",
+ "xref": xref
+ }, assist_window_specs, field);
+ return false;
+}
+
+function addmedia_links(field, iid, iname) {
+ pastefield = field;
+ insertRowToTable(iid, iname);
+ return false;
+}
+
+function valid_date(datefield) {
+ var months = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
+
+ var datestr=datefield.value;
+ // if a date has a date phrase marked by () this has to be excluded from altering
+ var datearr=datestr.split("(");
+ var datephrase="";
+ if (datearr.length > 1) {
+ datestr=datearr[0];
+ datephrase=datearr[1];
+ }
+
+ // Gedcom dates are upper case
+ datestr=datestr.toUpperCase();
+ // Gedcom dates have no leading/trailing/repeated whitespace
+ datestr=datestr.replace(/\s+/, " ");
+ datestr=datestr.replace(/(^\s)|(\s$)/, "");
+ // Gedcom dates have spaces between letters and digits, e.g. "01JAN2000" => "01 JAN 2000"
+ datestr=datestr.replace(/(\d)([A-Z])/, "$1 $2");
+ datestr=datestr.replace(/([A-Z])(\d)/, "$1 $2");
+
+ // Shortcut for quarter format, "Q1 1900" => "BET JAN 1900 AND MAR 1900". See [ 1509083 ]
+ if (datestr.match(/^Q ([1-4]) (\d\d\d\d)$/)) {
+ datestr = "BET "+months[RegExp.$1*3-3]+" "+RegExp.$2+" AND "+months[RegExp.$1*3-1]+" "+RegExp.$2;
+ }
+
+ // e.g. 17.11.1860, 03/04/2005 or 1999-12-31. Use locale settings where DMY order is ambiguous.
+ var qsearch = /^([^\d]*)(\d+)[^\d](\d+)[^\d](\d+)$/i;
+ if (qsearch.exec(datestr)) {
+ var f0=RegExp.$1;
+ var f1=parseInt(RegExp.$2, 10);
+ var f2=parseInt(RegExp.$3, 10);
+ var f3=parseInt(RegExp.$4, 10);
+ var f4=RegExp.$5;
+ var dmy='DMY';
+ if (typeof(locale_date_format)!='undefined')
+ if (locale_date_format=='MDY' || locale_date_format=='YMD')
+ dmy=locale_date_format;
+ var yyyy=new Date().getUTCFullYear();
+ var yy=yyyy % 100;
+ var cc=yyyy - yy;
+ if (dmy=='DMY' && f1<=31 && f2<=12 || f1>13 && f1<=31 && f2<=12 && f3>31)
+ datestr=f0+f1+" "+months[f2-1]+" "+(f3>=100?f3:(f3<=yy?f3+cc:f3+cc-100));
+ else if (dmy=='MDY' && f1<=12 && f2<=31 || f2>13 && f2<=31 && f1<=12 && f3>31)
+ datestr=f0+f2+" "+months[f1-1]+" "+(f3>=100?f3:(f3<=yy?f3+cc:f3+cc-100));
+ else if (dmy=='YMD' && f2<=12 && f3<=31 || f3>13 && f3<=31 && f2<=12 && f1>31)
+ datestr=f0+f3+" "+months[f2-1]+" "+(f1>=100?f1:(f1<=yy?f1+cc:f1+cc-100));
+ }
+
+ // Shortcuts for date ranges
+ datestr=datestr.replace(/^[>]([\w ]+)$/, "AFT $1");
+ datestr=datestr.replace(/^[<]([\w ]+)$/, "BEF $1");
+ datestr=datestr.replace(/^([\w ]+)[-]$/, "FROM $1");
+ datestr=datestr.replace(/^[-]([\w ]+)$/, "TO $1");
+ datestr=datestr.replace(/^[~]([\w ]+)$/, "ABT $1");
+ datestr=datestr.replace(/^[*]([\w ]+)$/, "EST $1");
+ datestr=datestr.replace(/^[#]([\w ]+)$/, "CAL $1");
+ datestr=datestr.replace(/^([\w ]+) ?- ?([\w ]+)$/, "BET $1 AND $2");
+ datestr=datestr.replace(/^([\w ]+) ?~ ?([\w ]+)$/, "FROM $1 TO $2");
+ if (datestr.match(/^=([\d ()\/+*-]+)$/)) datestr=eval(RegExp.$1);
+
+ // Americans frequently enter dates as SEPTEMBER 20, 1999
+ // No need to internationalise this, as this is an english-language issue
+ datestr=datestr.replace(/(JAN)(?:UARY)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(FEB)(?:RUARY)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(MAR)(?:CH)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(APR)(?:IL)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(MAY) (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(JUN)(?:E)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(JUL)(?:Y)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(AUG)(?:UST)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(SEP)(?:TEMBER)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(OCT)(?:OBER)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(NOV)(?:EMBER)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+ datestr=datestr.replace(/(DEC)(?:EMBER)? (\d\d?)[, ]+(\d\d\d\d)/, "$2 $1 $3");
+
+ // Apply leading zero to day numbers
+ datestr=datestr.replace(/(^| )(\d [A-Z]{3,5} \d{4})/, "$10$2");
+
+ if (datephrase != "") {
+ datestr=datestr+" ("+datephrase;
+ }
+ datefield.value=datestr;
+}
+var oldheight = 0;
+var oldwidth = 0;
+var oldz = 0;
+var oldleft = 0;
+var big = 0;
+var oldboxid = "";
+var oldimgw = 0;
+var oldimgh = 0;
+var oldimgw1 = 0;
+var oldimgh1 = 0;
+var diff = 0;
+var oldfont = 0;
+var oldname = 0;
+var oldthumbdisp = 0;
+var repositioned = 0;
+var oldiconsdislpay = 0;
+var rv =null;
+
+function expandbox(boxid, bstyle) {
+ if (big==1) {
+ if (clength>0) { // True only if compact chart
+ fontdef.style.display='none';
+ }
+ restorebox(oldboxid, bstyle);
+ if (boxid==oldboxid) return true;
+ }
+
+ jQuery(document).ready(function() {
+ clength = jQuery(".compact_view").length;
+ });
+
+ url = window.location.toString();
+ divbox = document.getElementById("out-"+boxid);
+ inbox = document.getElementById("inout-"+boxid);
+ inbox2 = document.getElementById("inout2-"+boxid);
+ parentbox = document.getElementById("box"+boxid);
+ if (!parentbox) {
+ parentbox=divbox;
+ // if (bstyle!=2) divbox.style.position="absolute";
+ }
+ gender = document.getElementById("box-"+boxid+"-gender");
+ thumb1 = document.getElementById("box-"+boxid+"-thumb");
+ famlinks = document.getElementById("I"+boxid+"links");
+ icons = document.getElementById("icons-"+boxid);
+ iconz = document.getElementById("iconz-"+boxid); // This is the Zoom icon
+
+ if (divbox) {
+ if (icons) {
+ oldiconsdislpay = icons.style.display;
+ icons.style.display = "block";
+ }
+ if (jQuery(iconz).hasClass("icon-zoomin")) {
+ jQuery(iconz).removeClass("icon-zoomin").addClass("icon-zoomout");
+ } else {
+ jQuery(iconz).removeClass("icon-zoomout").addClass("icon-zoomin");
+ }
+ oldboxid=boxid;
+ big = 1;
+ oldheight=divbox.style.height;
+ oldwidth=divbox.style.width;
+ oldz = parentbox.style.zIndex;
+ if (url.indexOf("descendancy.php")==-1) parentbox.style.zIndex='100';
+ if (bstyle!=2) {
+ divbox.style.width='300px';
+ diff = 300-parseInt(oldwidth);
+ if (famlinks) {
+ famleft = parseInt(famlinks.style.left);
+ famlinks.style.left = (famleft+diff)+"px";
+ }
+ //parentbox.style.width = parseInt(parentbox.style.width)+diff;
+ }
+ divleft = parseInt(parentbox.style.left);
+ if (textDirection=="rtl") divleft = parseInt(parentbox.style.right);
+ oldleft=divleft;
+ divleft = divleft - diff;
+ repositioned = 0;
+ if (divleft<0) {
+ repositioned = 1;
+ divleft=0;
+ }
+ divbox.style.height='auto';
+ if (inbox)
+ {
+ inbox.style.display='block';
+ if ( inbox.innerHTML.indexOf("LOADING")>0 )
+ {
+ //-- load data from expand_view.php
+ var pid = boxid.split(".")[0];
+ var oXmlHttp = createXMLHttp();
+ oXmlHttp.open("get", "expand_view.php?pid=" + pid, true);
+ oXmlHttp.onreadystatechange=function()
+ {
+ if (oXmlHttp.readyState==4)
+ {
+ inbox.innerHTML = oXmlHttp.responseText;
+ }
+ };
+ oXmlHttp.send(null);
+ }
+ }
+ else
+ {
+ inbox.style.display='none';
+ }
+
+
+
+ if (inbox2) inbox2.style.display='none';
+
+ fontdef = document.getElementById("fontdef-"+boxid);
+ if (fontdef) {
+ oldfont = fontdef.className;
+ fontdef.className = 'detailsZoom';
+ fontdef.style.display='block';
+ }
+ namedef = document.getElementById("namedef-"+boxid);
+ if (namedef) {
+ oldname = namedef.className;
+ namedef.className = 'nameZoom';
+ }
+ addnamedef = document.getElementById("addnamedef-"+boxid);
+ if (addnamedef) {
+ oldaddname = addnamedef.className;
+ addnamedef.className = 'nameZoom';
+ }
+ if (thumb1) {
+ oldthumbdisp = thumb1.style.display;
+ thumb1.style.display='block';
+ oldimgw = thumb1.offsetWidth;
+ oldimgh = thumb1.offsetHeight;
+ if (oldimgw) thumb1.style.width = (oldimgw*2)+"px";
+ if (oldimgh) thumb1.style.height = (oldimgh*2)+"px";
+ }
+ if (gender) {
+ oldimgw1 = gender.offsetWidth;
+ oldimgh1 = gender.offsetHeight;
+ if (oldimgw1) gender.style.width = "15px";
+ if (oldimgh1) gender.style.height = "15px";
+ }
+ }
+ return true;
+}
+function createXMLHttp()
+{
+ if (typeof XMLHttpRequest != "undefined")
+ {
+ return new XMLHttpRequest();
+ }
+ else if (window.ActiveXObject)
+ {
+ var ARR_XMLHTTP_VERS=["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0",
+ "MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
+
+ for (var i = 0; i < ARR_XMLHTTP_VERS.length; i++)
+ {
+ try
+ {
+ var oXmlHttp = new ActiveXObject(ARR_XMLHTTP_VERS[i]);
+ return oXmlHttp;
+ }
+ catch (oError) {;}
+ }
+ }
+ throw new Error("XMLHttp object could not be created.");
+};
+
+function restorebox(boxid, bstyle) {
+ divbox = document.getElementById("out-"+boxid);
+ inbox = document.getElementById("inout-"+boxid);
+ inbox2 = document.getElementById("inout2-"+boxid);
+ parentbox = document.getElementById("box"+boxid);
+ if (!parentbox) {
+ parentbox=divbox;
+ }
+ thumb1 = document.getElementById("box-"+boxid+"-thumb");
+ icons = document.getElementById("icons-"+boxid);
+ iconz = document.getElementById("iconz-"+boxid); // This is the Zoom icon
+ if (divbox) {
+ if (icons) icons.style.display = oldiconsdislpay;
+ if (jQuery(iconz).hasClass("icon-zoomin")) {
+ jQuery(iconz).removeClass("icon-zoomin").addClass("icon-zoomout");
+ } else {
+ jQuery(iconz).removeClass("icon-zoomout").addClass("icon-zoomin");
+
+ }
+ big = 0;
+ if (gender) {
+ oldimgw1 = oldimgw1+"px";
+ oldimgh1 = oldimgh1+"px";
+ gender.style.width = oldimgw1;
+ gender.style.height = oldimgh1;
+ }
+ if (thumb1) {
+ oldimgw = oldimgw+"px";
+ oldimgh = oldimgh+"px";
+ thumb1.style.width = oldimgw;
+ thumb1.style.height = oldimgh;
+ thumb1.style.display=oldthumbdisp;
+ }
+ divbox.style.height=oldheight;
+ divbox.style.width=oldwidth;
+ if (parentbox) {
+ //if (parentbox!=divbox) parentbox.style.width = parseInt(parentbox.style.width)-diff;
+ //alert("here");
+ parentbox.style.zIndex=oldz;
+ }
+ if (inbox) inbox.style.display='none';
+ if (inbox2) inbox2.style.display='block';
+ fontdef = document.getElementById("fontdef-"+boxid);
+ if (fontdef) fontdef.className = oldfont;
+ namedef = document.getElementById("namedef-"+boxid);
+ if (namedef) namedef.className = oldname;
+ addnamedef = document.getElementById("addnamedef-"+boxid);
+ if (addnamedef) addnamedef.className = oldaddname;
+ }
+ return true;
+}
+
+var menutimeouts = new Array();
+/**
+ * Shows a submenu
+ *
+ * @author John Finlay
+ * @param string elementid the id for the dom element you want to show
+ */
+function show_submenu(elementid, parentid, dir) {
+ var pagewidth = document.body.scrollWidth+document.documentElement.scrollLeft;
+ var element = document.getElementById(elementid);
+ if (element && element.style) {
+ if (document.all) {
+ pagewidth = document.body.offsetWidth;
+ //if (textDirection=="rtl") element.style.left = (element.offsetLeft-70)+'px';
+ }
+ else {
+ pagewidth = document.body.scrollWidth+document.documentElement.scrollLeft-55;
+ if (textDirection=="rtl") {
+ boxright = element.offsetLeft+element.offsetWidth+10;
+ }
+ }
+
+ //-- make sure the submenu is the size of the largest child
+ var maxwidth = 0;
+ var count = element.childNodes.length;
+ for (var i=0; i<count; i++) {
+ var child = element.childNodes[i];
+ if (child.offsetWidth > maxwidth+5) maxwidth = child.offsetWidth;
+ }
+ if (element.offsetWidth < maxwidth) {
+ element.style.width = maxwidth+"px";
+ }
+
+ if (dir=="down") {
+ var pelement = document.getElementById(parentid);
+ if (pelement) {
+ element.style.left=pelement.style.left;
+ var boxright = element.offsetLeft+element.offsetWidth+10;
+ if (boxright > pagewidth) {
+ var menuleft = pagewidth-element.offsetWidth;
+ element.style.left = menuleft + "px";
+ }
+ }
+ }
+ if (dir=="right") {
+ var pelement = document.getElementById(parentid);
+ if (pelement) {
+ if (textDirection=="ltr") {
+ var boxleft = pelement.offsetLeft+pelement.offsetWidth-40;
+ var boxright = boxleft+element.offsetWidth+10;
+ if (boxright > pagewidth) {
+ element.style.right = pelement.offsetLeft + "px";
+ }
+ else {
+ element.style.left=boxleft+"px";
+ }
+ }
+ else {
+// element.style.right = pelement.offsetLeft+"px";
+ element.style.left = (pelement.offsetLeft-element.offsetWidth)+"px";
+// alert(element.style.left);
+ }
+ element.style.top = pelement.offsetTop+"px";
+ }
+ }
+
+ if (element.offsetLeft < 0) element.style.left = "0px";
+
+ //-- put scrollbars on really long menus
+ if (element.offsetHeight > 500) {
+ element.style.height = '400px';
+ element.style.overflow = 'auto';
+ }
+
+ element.style.visibility='visible';
+ }
+ clearTimeout(menutimeouts[elementid]);
+ menutimeouts[elementid] = null;
+}
+
+/**
+ * Hides a submenu
+ *
+ * @author John Finlay
+ * @param string elementid the id for the dom element you want to hide
+ */
+function hide_submenu(elementid) {
+if (menutimeouts[elementid] != null) {
+ element = document.getElementById(elementid);
+ if (element && element.style) {
+ element.style.visibility='hidden';
+ }
+ clearTimeout(menutimeouts[elementid]);
+ menutimeouts[elementid] = null;
+}
+}
+
+/**
+ * Sets a timeout to hide a submenu
+ *
+ * @author John Finlay
+ * @param string elementid the id for the dom element you want to hide
+ */
+function timeout_submenu(elementid) {
+ if (menutimeouts[elementid] == null) {
+ tout = setTimeout("hide_submenu('"+elementid+"')", 100);
+ menutimeouts[elementid] = tout;
+ }
+}
+function focusHandler(evt) {
+ var e = evt ? evt : window.event;
+ if (!e) return;
+ if (e.target)
+ pastefield = e.target;
+ else if(e.srcElement) pastefield = e.srcElement;
+}
+
+function loadHandler() {
+ var i, j;
+
+ for (i = 0; i < document.forms.length; i++)
+ for (j = 0; j < document.forms[i].elements.length; j++) {
+ if (document.forms[i].elements[j].type=="text") {
+ if (document.forms[i].elements[j].onfocus==null) document.forms[i].elements[j].onfocus = focusHandler;
+ }
+ }
+}
+var IE = document.all?true:false;
+if (!IE) document.captureEvents(Event.MOUSEMOVE|Event.KEYDOWN|Event.KEYUP);
+document.onmousemove = getMouseXY;
+
+function toggleStatus(sel) {
+ var cbox = document.getElementById(sel);
+ cbox.disabled=!(cbox.disabled);
+}
+
+
+function statusDisable(sel) {
+ var cbox = document.getElementById(sel);
+ cbox.checked = false;
+ cbox.disabled = true;
+}
+
+function statusEnable(sel) {
+ var cbox = document.getElementById(sel);
+ cbox.disabled = false;
+}
+
+function statusChecked(sel) {
+ var cbox = document.getElementById(sel);
+ cbox.checked = true;
+}
+
+var monthLabels = new Array();
+ monthLabels[1] = "January";
+ monthLabels[2] = "February";
+ monthLabels[3] = "March";
+ monthLabels[4] = "April";
+ monthLabels[5] = "May";
+ monthLabels[6] = "June";
+ monthLabels[7] = "July";
+ monthLabels[8] = "August";
+ monthLabels[9] = "September";
+ monthLabels[10] = "October";
+ monthLabels[11] = "November";
+ monthLabels[12] = "December";
+
+ var monthShort = new Array();
+ monthShort[1] = "JAN";
+ monthShort[2] = "FEB";
+ monthShort[3] = "MAR";
+ monthShort[4] = "APR";
+ monthShort[5] = "MAY";
+ monthShort[6] = "JUN";
+ monthShort[7] = "JUL";
+ monthShort[8] = "AUG";
+ monthShort[9] = "SEP";
+ monthShort[10] = "OCT";
+ monthShort[11] = "NOV";
+ monthShort[12] = "DEC";
+
+ var daysOfWeek = new Array();
+ daysOfWeek[0] = "S";
+ daysOfWeek[1] = "M";
+ daysOfWeek[2] = "T";
+ daysOfWeek[3] = "W";
+ daysOfWeek[4] = "T";
+ daysOfWeek[5] = "F";
+ daysOfWeek[6] = "S";
+
+ var weekStart = 0;
+
+ function cal_setMonthNames(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec) {
+ monthLabels[1] = jan;
+ monthLabels[2] = feb;
+ monthLabels[3] = mar;
+ monthLabels[4] = apr;
+ monthLabels[5] = may;
+ monthLabels[6] = jun;
+ monthLabels[7] = jul;
+ monthLabels[8] = aug;
+ monthLabels[9] = sep;
+ monthLabels[10] = oct;
+ monthLabels[11] = nov;
+ monthLabels[12] = dec;
+ }
+
+ function cal_setDayHeaders(sun, mon, tue, wed, thu, fri, sat) {
+ daysOfWeek[0] = sun;
+ daysOfWeek[1] = mon;
+ daysOfWeek[2] = tue;
+ daysOfWeek[3] = wed;
+ daysOfWeek[4] = thu;
+ daysOfWeek[5] = fri;
+ daysOfWeek[6] = sat;
+ }
+
+ function cal_setWeekStart(day) {
+ if (day >=0 && day < 7) weekStart = day;
+ }
+
+ function cal_toggleDate(dateDivId, dateFieldId) {
+ var dateDiv = document.getElementById(dateDivId);
+ if (!dateDiv) return false;
+
+ if (dateDiv.style.visibility=='visible') {
+ dateDiv.style.visibility = 'hidden';
+ return false;
+ }
+ if (dateDiv.style.visibility=='show') {
+ dateDiv.style.visibility = 'hide';
+ return false;
+ }
+
+ var dateField = document.getElementById(dateFieldId);
+ if (!dateField) return false;
+
+ /* Javascript calendar functions only work with precise gregorian dates "D M Y" or "Y" */
+ var greg_regex = /((\d+ (JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) )?\d+)/;
+ if (greg_regex.exec(dateField.value)) {
+ var date = new Date(RegExp.$1);
+ } else {
+ var date = new Date();
+ }
+
+ dateDiv.innerHTML = cal_generateSelectorContent(dateFieldId, dateDivId, date);
+ if (dateDiv.style.visibility=='hidden') {
+ dateDiv.style.visibility = 'visible';
+ return false;
+ }
+ if (dateDiv.style.visibility=='hide') {
+ dateDiv.style.visibility = 'show';
+ return false;
+ }
+ return false;
+ }
+
+ function cal_generateSelectorContent(dateFieldId, dateDivId, date) {
+ var content = '<table border="1"><tr>';
+ content += '<td><select name="'+dateFieldId+'_daySelect" id="'+dateFieldId+'_daySelect" onchange="return cal_updateCalendar(\''+dateFieldId+'\', \''+dateDivId+'\');">';
+ for (i=1; i<32; i++) {
+ content += '<option value="'+i+'"';
+ if (date.getUTCDate()==i) content += ' selected="selected"';
+ content += '>'+i+'</option>';
+ }
+ content += '</select></td>';
+ content += '<td><select name="'+dateFieldId+'_monSelect" id="'+dateFieldId+'_monSelect" onchange="return cal_updateCalendar(\''+dateFieldId+'\', \''+dateDivId+'\');">';
+ for (i=1; i<13; i++) {
+ content += '<option value="'+i+'"';
+ if (date.getUTCMonth()+1==i) content += ' selected="selected"';
+ content += '>'+monthLabels[i]+'</option>';
+ }
+ content += '</select></td>';
+ content += '<td><input type="text" name="'+dateFieldId+'_yearInput" id="'+dateFieldId+'_yearInput" size="5" value="'+date.getUTCFullYear()+'" onchange="return cal_updateCalendar(\''+dateFieldId+'\', \''+dateDivId+'\');" /></td></tr>';
+ content += '<tr><td colspan="3">';
+ content += '<table width="100%">';
+ content += '<tr>';
+ j = weekStart;
+ for (i=0; i<7; i++) {
+ content += '<td ';
+ content += 'class="descriptionbox"';
+ content += '>';
+ content += daysOfWeek[j];
+ content += '</td>';
+ j++;
+ if (j>6) j=0;
+ }
+ content += '</tr>';
+
+ var tdate = new Date(date.getUTCFullYear(), date.getUTCMonth(), 1);
+ var day = tdate.getUTCDay();
+ day = day - weekStart;
+ var daymilli = (1000*60*60*24);
+ tdate = tdate.getTime() - (day*daymilli) + (daymilli/2);
+ tdate = new Date(tdate);
+
+ for (j=0; j<6; j++) {
+ content += '<tr>';
+ for (i=0; i<7; i++) {
+ content += '<td ';
+ if (tdate.getUTCMonth()==date.getUTCMonth()) {
+ if (tdate.getUTCDate()==date.getUTCDate()) content += 'class="descriptionbox"';
+ else content += 'class="optionbox"';
+ }
+ else content += 'style="background-color:#EAEAEA; border: solid #AAAAAA 1px;"';
+ content += '><a href="#" onclick="return cal_dateClicked(\''+dateFieldId+'\', \''+dateDivId+'\', '+tdate.getUTCFullYear()+', '+tdate.getUTCMonth()+', '+tdate.getUTCDate()+');">';
+ content += tdate.getUTCDate();
+ content += '</a></td>';
+ datemilli = tdate.getTime() + daymilli;
+ tdate = new Date(datemilli);
+ }
+ content += '</tr>';
+ }
+ content += '</table>';
+ content += '</td></tr>';
+ content += '</table>';
+
+ return content;
+ }
+
+ function cal_setDateField(dateFieldId, year, month, day) {
+ var dateField = document.getElementById(dateFieldId);
+ if (!dateField) return false;
+ if (day<10) day = "0"+day;
+ dateField.value = day+' '+monthShort[month+1]+' '+year;
+ return false;
+ }
+
+ function cal_updateCalendar(dateFieldId, dateDivId) {
+ var dateSel = document.getElementById(dateFieldId+'_daySelect');
+ if (!dateSel) return false;
+ var monthSel = document.getElementById(dateFieldId+'_monSelect');
+ if (!monthSel) return false;
+ var yearInput = document.getElementById(dateFieldId+'_yearInput');
+ if (!yearInput) return false;
+
+ var month = parseInt(monthSel.options[monthSel.selectedIndex].value);
+ month = month-1;
+
+ var date = new Date(yearInput.value, month, dateSel.options[dateSel.selectedIndex].value);
+ if (!date) alert('Date error '+date);
+ cal_setDateField(dateFieldId, date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
+
+ var dateDiv = document.getElementById(dateDivId);
+ if (!dateDiv) {
+ alert('no dateDiv '+dateDivId);
+ return false;
+ }
+ dateDiv.innerHTML = cal_generateSelectorContent(dateFieldId, dateDivId, date);
+
+ return false;
+ }
+
+ function cal_dateClicked(dateFieldId, dateDivId, year, month, day) {
+ cal_setDateField(dateFieldId, year, month, day);
+ cal_toggleDate(dateDivId, dateFieldId);
+ return false;
+ }
+
+function findIndi(field, indiname, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ nameElement = indiname;
+ window.open('find.php?type=indi&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function findPlace(field, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ window.open('find.php?type=place&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function findFamily(field, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ window.open('find.php?type=fam&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function findMedia(field, choose, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ if (!choose) choose="0all";
+ window.open('find.php?type=media&choose='+choose+'&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function findSource(field, sourcename, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ nameElement = sourcename;
+ window.open('find.php?type=source&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function findnote(field, notename, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ nameElement = notename;
+ window.open('find.php?type=note&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function findRepository(field, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ window.open('find.php?type=repo&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function findSpecialChar(field) {
+ pastefield = field;
+ window.open('find.php?type=specialchar', '_blank', find_window_specs);
+ return false;
+}
+
+function findFact(field, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ pastefield = field;
+ tags = field.value;
+ window.open('find.php?type=facts&tags='+tags+'&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function ilinkitem(mediaid, type, ged) {
+ ged = (typeof ged === 'undefined') ? WT_GEDCOM : ged;
+ window.open('inverselink.php?mediaid='+mediaid+'&linkto='+type+'&ged='+ged, '_blank', find_window_specs);
+ return false;
+}
+
+function message(username, method, url, subject) {
+ window.open('message.php?to='+username+'&method='+method+'&url='+url+'&subject='+subject, '_blank', mesg_window_specs);
+ return false;
+}
+
+/**
+ * Load a CSS file from the body of a document
+ *
+ * CSS files are normally loaded through a <link rel="stylesheet" type="text/css" href="something" />
+ * statement. This statement is only allowed in the <head> section of the document.
+ *
+ * See : http://www.phpied.com/javascript-include-ready-onload/
+ *
+ */
+function include_css(css_file) {
+ var html_doc = document.getElementsByTagName('head')[0];
+ var css = document.createElement('link');
+ css.setAttribute('rel', 'stylesheet');
+ css.setAttribute('type', 'text/css');
+ css.setAttribute('href', css_file);
+ html_doc.appendChild(css);
+}
+
+function include_js(file) {
+ var html_doc = document.getElementsByTagName('head')[0];
+ var js = document.createElement('script');
+ js.setAttribute('type', 'text/javascript');
+ js.setAttribute('src', file);
+ html_doc.appendChild(js);
+}
+
+function findPosX(obj) {
+ var curleft = 0;
+ if(obj.offsetParent)
+ while(1) {
+ curleft += obj.offsetLeft;
+ if(!obj.offsetParent)
+ break;
+ obj = obj.offsetParent;
+ }
+ else if(obj.x)
+ curleft += obj.x;
+ return curleft;
+}
+
+function findPosY(obj) {
+ var curtop = 0;
+ if(obj.offsetParent)
+ while(1) {
+ if (obj.style.position=="relative")
+ break;
+ curtop += obj.offsetTop;
+ if(!obj.offsetParent)
+ break;
+ obj = obj.offsetParent;
+ }
+ else if(obj.y)
+ curtop += obj.y;
+ return curtop;
+}
+
+// This is the default way for webtrees to show image galleries.
+// Custom themes may use a different viewer.
+function activate_colorbox(config) {
+ jQuery.extend(jQuery.colorbox.settings, {
+ // Don't scroll window with document
+ fixed: true,
+ // Simple I18N - the text will need to come from PHP
+ current: '',
+ previous: textDirection=='ltr' ? '◀' : '▶',
+ next: textDirection=='ltr' ? '▶' : '◀',
+ slideshowStart: '○',
+ slideshowStop: '●',
+ close: '×'
+ });
+ if (config) {
+ jQuery.extend(jQuery.colorbox.settings, config);
+ }
+
+ // Trigger an event when we click on an (any) image
+ jQuery('body').on('click', 'a.gallery', function(event) {
+ // Remove colorbox from hidden media (e.g. on other tabs)
+ // (not needed unless we add :visible to our selectors - which may not
+ // work on all browsers?)
+ //jQuery.colorbox.remove();
+
+ // Enable colorbox for images
+ jQuery('a[type^=image].gallery').colorbox({
+ photo: true,
+ maxWidth: '95%',
+ maxHeight: '95%',
+ rel: 'gallery', // Turn all images on the page into a slideshow
+ slideshow: true,
+ slideshowAuto: false,
+ // Add wheelzoom to the displayed image
+ onComplete: function() {
+ jQuery('.cboxPhoto').wheelzoom();
+ // Drag events cause the slideshow to advance. Prevent this.
+ // TODO - only when the click was the end of a drag..
+ jQuery('.cboxPhoto img').on('click', function(e) {e.preventDefault();});
+ }
+ });
+
+ // Enable colorbox for audio using <audio></audio>, where supported
+ //jQuery('html.video a[type^=video].gallery').colorbox({
+ // rel: 'nofollow' // Slideshows are just for images
+ //});
+
+ // Enable colorbox for video using <video></video>, where supported
+ //jQuery('html.audio a[type^=audio].gallery').colorbox({
+ // rel: 'nofollow', // Slideshows are just for images
+ //});
+
+ // Allow all other media types remain as download links
+ });
+}