function Selection(textareaElement) {
    this.element = textareaElement;
}

Selection.prototype.create = function() {
    if (document.selection != null && this.element.selectionStart == null) {
        return this._ieGetSelection();
    } else {
        return this._mozillaGetSelection();
    }
}

Selection.prototype._mozillaGetSelection = function() {
    return { 
        start: this.element.selectionStart, 
        end: this.element.selectionEnd 
    };
}

Selection.prototype._ieGetSelection = function() {
    this.element.focus();

    var range = document.selection.createRange();
    var bookmark = range.getBookmark();

    var contents = this.element.value;
    var originalContents = contents;
    var marker = this._createSelectionMarker();
    while(contents.indexOf(marker) != -1) {
        marker = this._createSelectionMarker();
    }
    var selection = range.text;

    var parent = range.parentElement();
    if (parent == null || parent.type != "textarea") {
        return { start: 0, end: 0 };
    }
    range.text = marker + range.text + marker;
    contents = this.element.value;

    var result = {};
    result.start = contents.indexOf(marker);
    contents = contents.replace(marker, "");
    result.end = contents.indexOf(marker);

    this.element.value = originalContents;
    range.moveToBookmark(bookmark);
    range.select();

    return result;
}

Selection.prototype._createSelectionMarker = function() {
    return "##SELECTION_MARKER_" + Math.random() + "##";
}

function insertRef(refID, textID) {
	var refSelect = dojo.byId(refID);
	var textArea = dojo.byId(textID);
	try {
		var strInsert = "[Ref" + refSelect.options[refSelect.selectedIndex].value + ":" + refSelect.options[refSelect.selectedIndex].text + "]";

        var selection = new Selection(textArea);
		var textValue = textArea.value;
		var selLength = textValue.length;
        var s = selection.create();
		var p_start = s.start;
		var p_end = s.end;
		
		var s1 = (textArea.value).substring(0,p_start);
		var s3 = (textArea.value).substring(p_end, selLength);
		textArea.value = s1 + strInsert + s3;

		if (textArea.setSelectionRange) {
			textArea.setSelectionRange(p_start, p_start + strInsert.length);
			textArea.focus();
		}
		else if (textArea.createTextRange) {
			var range = textArea.createTextRange();
			range.collapse(true);

			//find number of hard lines.
			var hard_lines = 0;
			var last = 0;
			while ( last < p_start) {
				last = textValue.indexOf("\n", last+1);
				if ( last == -1 || last >p_start) {
					break;
				}
				else {
					hard_lines ++;
				}
			}

			range.moveEnd('character', p_start + strInsert.length - hard_lines);
			range.moveStart('character', p_start - hard_lines);
			range.select();
		}
	}
	catch(e){
		//alert(e);
	}
}


function countLines(strtocount, cols) {
	cols = 185;
	
	var lines = strtocount.split("\n");
	var numLines = lines.length;
	for (var i=0; i<lines.length; i++) {
		numLines += Math.floor(lines[i].length/cols);
	}
	
	if (dojo.isFF==0) numLines++;
	return numLines;
}


function cleanForm() {
	dojo.require("dijit._base.place");
	textareas = document.getElementsByTagName('textarea');
	var viewport = dijit.getViewport();
    for (var x=0; x<textareas.length; x++ ) {
        textareas[x].rows = countLines(textareas[x].value, Math.round(viewport.w*0.95/6));
    }

	setTimeout("cleanForm();", 300);
}


function fold_unfold_section(obj, eleID, useCookie) {
	var the_div = dojo.byId("div_" + eleID);
	if (useCookie) {
		dojo.require("dojo.cookie");
		var cookie_name = '_'+eleID;
		cookie_name = cookie_name.replace(/_([a-zA-Z])[a-zA-Z]+/g, "$1");
		//alert(cookie_name);
		var fold = dojo.cookie("fold");
		if (fold==null) fold=".";
	}
	
	if (the_div.style.display=="") {
		the_div.style.display = "none";
		obj.alt="Unfold this section";
		obj.title="Unfold this section";
		obj.src="/images/unfold.gif";
		if (useCookie) {
			if (fold.indexOf("."+cookie_name+".")==-1) {
				fold+=cookie_name+".";
				dojo.cookie("fold", fold, {domain: ".violinet.org", expires: 30, path: "/"});
			}
		}
	}
	else {
		the_div.style.display = "";
		if(dijit.byId("div_" + eleID) && dijit.byId("div_" + eleID).isLoaded==false) {
			dijit.byId("div_" + eleID).refresh();
		}
		obj.alt="Fold this section";
		obj.title="Fold this section";
		obj.src="/images/fold.gif";
		if (useCookie) {
			if (fold.indexOf("."+cookie_name+".")>-1) {
				fold = fold.replace("."+cookie_name+".", ".");
				dojo.cookie("fold", fold, {domain: ".violinet.org", expires: 30, path: "/"});
			}
		}
	}
}

function addHighlighted(eleID) {
	var strInsert = '';
	var the_frame = window.parent.frames["frameLiterature"];
	
	if (window.getSelection)
	{
		strInsert = the_frame.window.getSelection();
	}
	else if (document.getSelection)
	{
		strInsert = the_frame.document.getSelection();
	}
	else if (document.selection)
	{
		strInsert = the_frame.document.selection.createRange().text;
	}
	else return;
	
	try {
		strInsert = strInsert + ' (' + the_frame.dojo.byId('refid').value + ')';
	}
	catch (e) {
	}

	var textArea = dojo.byId("c_" + eleID);

/*
	try {
		textArea.value = textArea.value + strInsert;
	}
	catch(e){
	}
*/


	try {
        var selection = new Selection(textArea);
		var textValue = textArea.value;
		var selLength = textValue.length;
        var s = selection.create();
		var p_start = s.start;
		var p_end = s.end;
		
		var s1 = (textArea.value).substring(0,p_start);
		var s3 = (textArea.value).substring(p_end, selLength);
		textArea.value = s1 + strInsert + s3;

		if (textArea.setSelectionRange) {
			textArea.setSelectionRange(p_start, p_start + strInsert.length);
			textArea.focus();
		}
		else if (textArea.createTextRange) {
			var range = textArea.createTextRange();
			range.collapse(true);

			//find number of hard lines.
			var hard_lines = 0;
			var last = 0;
			while ( last < p_start) {
				last = textValue.indexOf("\n", last+1);
				if ( last == -1 || last >p_start) {
					break;
				}
				else {
					hard_lines ++;
				}
			}

			range.moveEnd('character', p_start + strInsert.length - hard_lines);
			range.moveStart('character', p_start - hard_lines);
			range.select();
		}
	}
	catch(e){
		//alert(e);
	}

}



function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}


String.prototype.htmlspecialchars_decode = function () {
    return this.replace(/&amp;/g, "&").replace(/&quot;/g, '"').replace(/&#039;/g, "'").replace(/&lt;/g, "<").replace(/&gt;/g, ">");
}


MM_preloadImages('/images/fold.gif', '/images/unfold.gif', '/images/checked.png', '/images/warning.png');

function toggleSequence (thisObject, divID) {
	if (dojo.byId(divID).style.display=='') {
		dojo.byId(divID).style.display='none';
		thisObject.innerHTML='Show Sequence';
	}
	else {
		dojo.byId(divID).style.display='';
		thisObject.innerHTML='Hide Sequence';
	}
}

function getGene(dbSource) {
	
	var c_ncbi_gene_id = dojo.byId("c_ncbi_gene_id").value;
	if (c_ncbi_gene_id=="") {
		alert("Please enter a NCBI Gene ID!");
	}
	else {
		if (dbSource=='PHIDIAS') {
			str_url = 'retrieve_phigen.php';
		}
		else {
			str_url = 'retrieve_ncbi_gene.php';
		}
		
		var kw = {
				url: '/submit/inc/'+ str_url +'?c_ncbi_gene_id=' + c_ncbi_gene_id,
				handleAs: "xml",
				load: function(data){
					try {
						var response = data.documentElement;
						if (response.getElementsByTagName("error").length>0) {
							alert(response.getElementsByTagName("error")[0].firstChild.nodeValue);
						}
						else {
							var columns = new Array("gene_name", "ncbi_protein_id", "gene_locus_tag", "gene_refseq", "protein_refseq", "xrefs", "strain", "taxonomy_id", "chromosome", "segment", "plasmid", "gene_start", "gene_end", "gene_strand", "protein_name", "protein_pi", "protein_weight", "protein_length", "protein_note", "protein_annotation", "dna_sequence", "protein_sequence", "phi_function", "phi_annotation");
							for (var i=0; i<columns.length; i++) {
								var inode = response.getElementsByTagName("c_" + columns[i]);
								if (inode.length>0 && inode[0].firstChild) {
									str_tmp = inode[0].firstChild.nodeValue.htmlspecialchars_decode();
									//alert("c_" + columns[i]);
									dojo.byId("c_" + columns[i]).value = str_tmp;
								}
							}
						}
					}
					catch(e) {
						alert("c_" + columns[i]);
						alert(e);
					}

					//dojo.byId(sectionId).innerHTML = data;
				},
				error: function(data){
					alert("An error occurred: " + data);
				},
				timeout: 5000
		};
		dojo.xhrGet(kw);
	}
}


function getNucleotide(dbSource) {
	
	var c_ncbi_nucleotide_id = dojo.byId("c_ncbi_nucleotide_id").value;
	if (c_ncbi_nucleotide_id=="") {
		alert("Please enter a NCBI Nucleotide ID!");
	}
	else {
		str_url = 'retrieve_ncbi_nucleotide.php';
		
		var kw = {
				url: '/submit/inc/'+ str_url +'?c_ncbi_nucleotide_id=' + c_ncbi_nucleotide_id,
				handleAs: "xml",
				load: function(data){
					try {
						var response = data.documentElement;
						if (response.getElementsByTagName("error").length>0) {
							alert(response.getElementsByTagName("error")[0].firstChild.nodeValue);
						}
						else {
							var columns = new Array("gene_name", "ncbi_protein_id", "gene_locus_tag", "gene_refseq", "protein_refseq", "xrefs", "strain", "taxonomy_id", "chromosome", "segment", "plasmid", "gene_start", "gene_end", "gene_strand", "protein_name", "protein_pi", "protein_weight", "protein_length", "protein_note", "protein_annotation", "dna_sequence", "protein_sequence", "phi_function", "phi_annotation");
							for (var i=0; i<columns.length; i++) {
								var inode = response.getElementsByTagName("c_" + columns[i]);
								if (inode.length>0 && inode[0].firstChild) {
									str_tmp = inode[0].firstChild.nodeValue.htmlspecialchars_decode();
									//alert("c_" + columns[i]);
									dojo.byId("c_" + columns[i]).value = str_tmp;
								}
							}
						}
					}
					catch(e) {
						alert("c_" + columns[i]);
						alert(e);
					}

					//dojo.byId(sectionId).innerHTML = data;
				},
				error: function(data){
					alert("An error occurred: " + data);
				},
				timeout: 5000
		};
		dojo.xhrGet(kw);
	}
}



function getProtein(dbSource) {
	
	var c_ncbi_protein_id = dojo.byId("c_ncbi_protein_id").value;
	if (c_ncbi_protein_id=="") {
		alert("Please enter a NCBI Protein ID!");
	}
	else {
		str_url = 'retrieve_ncbi_protein.php';
		
		var kw = {
				url: '/submit/inc/'+ str_url +'?c_ncbi_protein_id=' + c_ncbi_protein_id,
				handleAs: "xml",
				load: function(data){
					try {
						var response = data.documentElement;
						if (response.getElementsByTagName("error").length>0) {
							alert(response.getElementsByTagName("error")[0].firstChild.nodeValue);
						}
						else {
							var columns = new Array("gene_name", "ncbi_protein_id", "gene_locus_tag", "gene_refseq", "protein_refseq", "xrefs", "strain", "taxonomy_id", "chromosome", "segment", "plasmid", "gene_start", "gene_end", "gene_strand", "protein_name", "protein_pi", "protein_weight", "protein_length", "protein_note", "protein_annotation", "dna_sequence", "protein_sequence", "phi_function", "phi_annotation");
							for (var i=0; i<columns.length; i++) {
								var inode = response.getElementsByTagName("c_" + columns[i]);
								if (inode.length>0 && inode[0].firstChild) {
									str_tmp = inode[0].firstChild.nodeValue.htmlspecialchars_decode();
									//alert("c_" + columns[i]);
									dojo.byId("c_" + columns[i]).value = str_tmp;
								}
							}
						}
					}
					catch(e) {
						alert("c_" + columns[i]);
						alert(e);
					}

					//dojo.byId(sectionId).innerHTML = data;
				},
				error: function(data){
					alert("An error occurred: " + data);
				},
				timeout: 5000
		};
		dojo.xhrGet(kw);
	}
	
	
}



function getPM() {
	
	dojo.byId("c_authors").value = '';
	dojo.byId("c_title").value = '';
	dojo.byId("c_journal_book_name").value = '';
	dojo.byId("c_volume").value = '';
	dojo.byId("c_issue").value = '';
	dojo.byId("c_pages").value = '';
	dojo.byId("c_year").value = '';
	dojo.byId("c_reference_name").value = '';

	var pmID = dojo.byId("c_pmid").value;
	if (pmID=="") {
		alert("Please enter a PubMed ID!");
	}
	else {
		var kw = {
				url: '/submit/inc/pmid.php?c_pmid=' + pmID,
				handleAs: "xml",
				load: function(data){
					try {
						var response = data.documentElement;
						if (response.getElementsByTagName("error").length>0) {
							alert(response.getElementsByTagName("error")[0].firstChild.nodeValue);
						}
						else {
							var columns = new Array("c_authors", "c_title", "c_journal_book_name", "c_volume", "c_issue", "c_pages", "c_year", "c_reference_name");
							for (var i=0; i<columns.length; i++) {
								var inode = response.getElementsByTagName(columns[i])[0].firstChild;
								var str_tmp = '';
								if (inode) {
									str_tmp = inode.nodeValue.htmlspecialchars_decode();
								}
								
								dojo.byId(columns[i]).value = str_tmp;
							}
						}
					}
					catch(e) {
						
						alert(e);
					}
				},
				error: function(data){
					alert("An error occurred: " + data);
				},
				timeout: 5000
		};
		dojo.xhrGet(kw);
	}
	
	
}



function checkRefType() {
	var c_reference_type = dojo.byId("c_reference_type");
	var value_reference_type = c_reference_type.options[c_reference_type.selectedIndex].value;
	var tr_reference_name = dojo.byId("tr_reference_name");
	var tr_authors = dojo.byId("tr_authors");
	var tr_title = dojo.byId("tr_title");
	var tr_year = dojo.byId("tr_year");
	var tr_volume = dojo.byId("tr_volume");
	var tr_issue = dojo.byId("tr_issue");
	var tr_pages = dojo.byId("tr_pages");
	var tr_journal_book_name = dojo.byId("tr_journal_book_name");
	var tr_publisher = dojo.byId("tr_publisher");
	var tr_publisher_location = dojo.byId("tr_publisher_location");
	var tr_book_editors = dojo.byId("tr_book_editors");
	var tr_isbn = dojo.byId("tr_isbn");
	var tr_university = dojo.byId("tr_university");
	var tr_university_location = dojo.byId("tr_university_location");
	var tr_degree = dojo.byId("tr_degree");
	var tr_pmid = dojo.byId("tr_pmid");
	var tr_url = dojo.byId("tr_url");
	
	switch (value_reference_type) {
		case 'journal':
			tr_reference_name.style.display = "";
			tr_authors.style.display = "";
			tr_title.style.display = "";
			tr_year.style.display = "";
			tr_volume.style.display = "";
			tr_issue.style.display = "";
			tr_pages.style.display = "";
			tr_journal_book_name.style.display = "";
			tr_publisher.style.display = "none";
			tr_publisher_location.style.display = "none";
			tr_book_editors.style.display = "none";
			tr_isbn.style.display = "none";
			tr_university.style.display = "none";
			tr_university_location.style.display = "none";
			tr_degree.style.display = "none";
			tr_pmid.style.display = "";
			tr_url.style.display = "";
			break;
		case 'book':
			tr_reference_name.style.display = "";
			tr_authors.style.display = "";
			tr_title.style.display = "";
			tr_year.style.display = "";
			tr_volume.style.display = "none";
			tr_issue.style.display = "none";
			tr_pages.style.display = "";
			tr_journal_book_name.style.display = "";
			tr_publisher.style.display = "";
			tr_publisher_location.style.display = "";
			tr_book_editors.style.display = "";
			tr_isbn.style.display = "";
			tr_university.style.display = "none";
			tr_university_location.style.display = "none";
			tr_degree.style.display = "none";
			tr_pmid.style.display = "none";
			tr_url.style.display = "";
			break;
		case 'thesis':
			tr_reference_name.style.display = "";
			tr_authors.style.display = "";
			tr_title.style.display = "";
			tr_year.style.display = "";
			tr_volume.style.display = "none";
			tr_issue.style.display = "none";
			tr_pages.style.display = "none";
			tr_journal_book_name.style.display = "none";
			tr_publisher.style.display = "none";
			tr_publisher_location.style.display = "none";
			tr_book_editors.style.display = "none";
			tr_isbn.style.display = "none";
			tr_university.style.display = "";
			tr_university_location.style.display = "";
			tr_degree.style.display = "";
			tr_pmid.style.display = "none";
			tr_url.style.display = "none";
			break;
		case 'website':
			tr_reference_name.style.display = "";
			tr_authors.style.display = "";
			tr_title.style.display = "";
			tr_year.style.display = "";
			tr_volume.style.display = "none";
			tr_issue.style.display = "none";
			tr_pages.style.display = "none";
			tr_journal_book_name.style.display = "none";
			tr_publisher.style.display = "none";
			tr_publisher_location.style.display = "none";
			tr_book_editors.style.display = "none";
			tr_isbn.style.display = "none";
			tr_university.style.display = "none";
			tr_university_location.style.display = "none";
			tr_degree.style.display = "none";
			tr_pmid.style.display = "none";
			tr_url.style.display = "";
			break;
	
	}

}



function reloadSection(sectionId, targetUrl) {
	var kw = {
			url: targetUrl,
			load: function(data){
				dojo.byId(sectionId).innerHTML = data;
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000
	};
	dojo.xhrGet(kw);
}

function showDialog (url) {
	var kw = {
			url: url,
			load: function(data){
				if (data.indexOf("</textarea>")>0) {
					dialog_edit.domNode.style.width="95%";
					data=data.replace("table", "table width=\"100%\"");
				}
				else {
					dialog_edit.domNode.style.width="600px";
				}
				dialog_edit.setContent(data);
				dialog_edit.show();
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000
	};
	dojo.xhrGet(kw);

	//dialog_edit.setHref(url);
	//dialog_edit.show();
}

function submitChange(spanTarget) {
	var kw = {
			url: "/submit/update_process.php",
			load: function(data){
				if (data.indexOf('<div id="errorbox">')>-1) {
					dialog_edit.setContent(data);
					dialog_edit.domNode.style.width="558px";
					dialog_edit.show();
				}
				else {
					dojo.byId(spanTarget).innerHTML = data;
					if (spanTarget.search(/t_gene\d+c_gene_name/) > -1 || spanTarget.search(/t_vaccine\d+c_vaccine_name/) > -1 || spanTarget.search(/t_host\d+c_host_name/) > -1 ) {
						dojo.byId(spanTarget+"_title").innerHTML = data;
					}
					dialog_edit.hide();
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 50000,
			form: "update_data"
	};
	dojo.xhrPost(kw);
}

function setReviewed(imgTarget, c_revision_id) {
	var kw = {
			url: "/submit/set_reviewed.php?c_revision_id="+c_revision_id,
			load: function(data){
				if (data.indexOf('<div id="errorbox">')>-1) {
					dialog_edit.setContent(data);
					dialog_edit.domNode.style.width="558px";
					dialog_edit.show();
				}
				else {
					dojo.byId(imgTarget).style.display = 'none';
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 50000
	};
	dojo.xhrGet(kw);
}

function setRecordReviewed(imgTarget, c_record_revision_id) {
	var kw = {
			url: "/submit/set_record_reviewed.php?c_record_revision_id="+c_record_revision_id,
			load: function(data){
				if (data.indexOf('<div id="errorbox">')>-1) {
					dialog_edit.setContent(data);
					dialog_edit.domNode.style.width="558px";
					dialog_edit.show();
				}
				else {
					dojo.byId(imgTarget).style.display = 'none';
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000
	};
	dojo.xhrGet(kw);
}


function reloadGeneOptions(c_pathogen_id, gene_section) {
	var kw = {
			url: '/submit/inc/get_gene_options.php?c_pathogen_id=' + c_pathogen_id + '&gene_section=' + gene_section,
			handleAs: "json",
			load: function(data){
				var selects = document.getElementsByTagName("select");
				for (var i=0; i<selects.length; i++) {
					if (selects[i].id=="c_"+gene_section+"_gene_id") {
						selects[i].length = data.length;
						for(j=0; j<data.length; j++) {
							selects[i].options[j].value = data[j].value;
							selects[i].options[j].text = data[j].text;
						}
					}
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000
	};
	dojo.xhrGet(kw);
}

function reloadHostOptions() {
	var kw = {
			url: '/submit/inc/get_host_options.php',
			handleAs: "json",
			load: function(data){
				var selects = document.getElementsByTagName("select");
				for (var i=0; i<selects.length; i++) {
					if (selects[i].name=="c_host_id") {
						selects[i].length = data.length;
						for(j=0; j<data.length; j++) {
							selects[i].options[j].value = data[j].value;
							selects[i].options[j].text = data[j].text;
						}
					}
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000
	};
	dojo.xhrGet(kw);
}


function reloadRefOptions(ref_target_id, ref_target) {
	var kw = {
			url: '/submit/inc/get_ref_options.php?ref_target_id=' + ref_target_id + '&ref_target=' + ref_target,
			handleAs: "json",
			load: function(data){
				var selects = document.getElementsByTagName("select");
				for (var i=0; i<selects.length; i++) {
					if (selects[i].name.indexOf("ref_")==0) {
						selects[i].length = data.length;
						for(j=0; j<data.length; j++) {
							selects[i].options[j].value = data[j].value;
							selects[i].options[j].text = data[j].text;
						}
					}
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000
	};
	dojo.xhrGet(kw);
}


function goURL(web_url) {
	web_url= web_url.replace(/^\s+|\s+$/g,'');
	if (!/^http:\/\//.test(web_url)) {
		web_url= 'http://'+ web_url;
	} 
	try {
		window.parent.frames['frameLiterature'].location.href=web_url;
	}
	catch (e) {
		alert("Incorrect URL fromat!");	
	}
}


function linkTo(refId) {
	web_url = 'show_refs.php?ref_target=pathogen&ref_target_id=' + dojo.byId("c_pathogen_id").value + '#reference' + refId;
	window.parent.frames['frameLiterature'].location.href=web_url;
}


var tabList = new Object();
var tabId = 0;
var lastTab = null;

function showNewTab(url) {
	var tabType = url.substring(0, url.indexOf(".php"));
	tabType = tabType.replace("add_", "");
	tabType = tabType.replace("update_", "");
	tabType = tabType.replace("delete_", "");
	if(typeof(tabList[tabType]) != "undefined" && tabList[tabType]) {
		alert("You can only work on one "+ tabType + " at a time!");
	}
	else {
		var newTab = new mytabs.newItem({id: "tab"+tabId, jsId: "tab"+tabId}).container;
		if (tabType=='show_history') {
			var tabTitle = "Show revision history";
		}
		else {
			var tabTitle = "Add/update a item";
		}
		if (tabType=='reference') {
			dojo.mixin(newTab,
				{
					title: tabTitle, 
					href: url,
					onLoad: checkRefType,
					onClose: confirmClose,
					closable: true,
					parseOnload: true
				}
			);
		}
		else {
			dojo.mixin(newTab,
				{
					title: tabTitle, 
					href: url,
					closable: true,
					onClose: confirmClose,
					parseOnload: true
				}
			);
		}
		tabs.addChild(newTab);
		lastTab = tabs.selectedChildWidget;
		tabs.selectChild(newTab);
		newTab.tabType = tabType;
		tabList[tabType] = true;
		tabId++;
	}
}

function closeTab(force) {
	var theTab = tabs.selectedChildWidget;
	if (force) {
		theTab.onClose = function(){return true;};
		tabs.selectChild(lastTab);
		tabs.closeChild(theTab);
		tabList[theTab.tabType] = false;
	}
	else {
		tabs.closeChild(theTab);	
	}
}

function confirmClose() {
	if (confirm("Are you sure you want to close this tab?")) {
		tabs.selectChild(lastTab);
		tabList[this.tabType] = false;
		return(true);
	}
	else {
		return(false);
	}
}


function submitTab(formId, actionUrl) {
	var currentTab = tabs.selectedChildWidget;
	var kw = {
			url: actionUrl,
			load: function(data){
				if (data.indexOf('<div id="errbox">')>-1) {
					data+='<div align="center"><button dojoType="dijit.form.Button" type="submit">OK</button></div>';
					dialog_msg.setContent(data);
					dialog_msg.show();
				}
				else {
					currentTab.setContent(data);
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000,
			form: formId
	};
	dojo.xhrPost(kw);
}

function submitFileTab (formId, actionUrl) {
	var currentTab = tabs.selectedChildWidget;
	dojo.io.iframe.send({
		url: actionUrl,
		method: "post",
		handleAs: "text/html",
		form: dojo.byId(formId),
		handle: function(data,ioArgs){
			//alert(data);
			if (data.indexOf('<div id="errbox">')>-1) {
				data+='<div align="center"><button dojoType="dijit.form.Button" type="submit">OK</button></div>';
				dialog_msg.setContent(data);
				dialog_msg.show();
			}
			else {
				currentTab.setContent(data);
			}
		}
	});
}

function compare_versions () {
	var kw = {
			url: "compare_versions.php",
			load: function(data){
				if (data.indexOf('<div id="errbox">')>-1) {
					data+='<div align="center"><button dojoType="dijit.form.Button" type="submit">OK</button></div>';
					dialog_msg.setContent(data);
					dialog_msg.show();
				}
				else {
					div_revision_compare_results.setContent(data);
				}
			},
			error: function(data){
				alert("An error occurred: " + data);
			},
			timeout: 5000,
			form: "form_show_history"
	};
	dojo.xhrPost(kw);
}

function checkRev(obj) {
	if (obj.name=="oldid") {
		var radios = document.getElementsByName("diff");
		for (var i=0; i<radios.length; i++) {
			if (radios[i].value>obj.value) {
				radios[i].style.visibility="visible";
			}
			else {
				radios[i].style.visibility="hidden";
			}
			
		}
	}
	else {
		var radios = document.getElementsByName("oldid");
		for (var i=0; i<radios.length; i++) {
			if (radios[i].value<obj.value) {
				radios[i].style.visibility="visible";
			}
			else {
				radios[i].style.visibility="hidden";
			}

		}
	}

	var radios = document.getElementsByName("diff");
	var radios2 = document.getElementsByName("oldid");
	for (var i=0; i<radios.length; i++) {
		if (radios[i].checked || radios2[i].checked) {
			radios[i].parentNode.className="diff_selected";
		}
		else {
			radios[i].parentNode.className="diff_unselected";
		}
	}
}
