// $Id: view.tt2 1257 2009-07-20 11:48:35Z rcf8 $
/**
 * @description HGVbaseG2P Javascript Functions
 * @author <a href="mailto:rcfree@gmail.com">Rob Free</a>
 * @version 2.0
 */
//var log = new Log(Log.DEBUG, Log.popupLogger);

var gSettingsChanged = 0;
var rSettingsChanged = 0;
var martURL;
var hgvbaseTopURL="";
var ajaxTimeout = 3600000
var _ajaxElementID;
var _ajaxImage;
var _studies;
var _resultsets;

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 */
function switchTabFromTop(tabName) {

	var hideClass = "";
	var showClass = "ui-tabs-selected";
	var tabs = new Array('studies','genomeview', 'regionview', 'markerinfo', 'advsettings');

	for ( var t = 0; t < tabs.length; t++) {
		if (tabs[t] == tabName) {
			top.document.getElementById('browser_' + tabName).className = showClass;
			top.document.getElementById('browser_' + tabName).style.display = "block";
			top.document.getElementById('tab_' + tabName).className = "ui-tabs-selected";
		} else {
			top.document.getElementById('browser_' + tabs[t]).style.display = "none";
			top.document.getElementById('tab_' + tabs[t]).className = ""
		}
	}

}

/**
 * @description Checks all chromosome checkboxes on a page (with name = 'chr') and sets gSettingsChanged
 */
function selectAll() {
	var chrs = document.getElementsByName('chr');
	for(var i=0;i<chrs.length;i++) {
		chrs[i].checked=true;
	}
	gSettingsChanged=1;
}

/**
 * @description Unchecks all chromosome checkboxes on a page (with name = 'chr') and sets gSettingsChanged
 */
function selectNone() {
	var chrs = document.getElementsByName('chr');
	for(var i=0;i<chrs.length;i++) {
		chrs[i].checked=false;
	}
	gSettingsChanged=1;
}

/**
 * @description Gets genome view size from page
 * @returns {int} Genome view size
 */
function getGenomeViewSize() {
	return parseInt(e('genomeview_size').value);
}

/**
 * @description Sets genome view size on page
 * @param {int} size Genome view size
 */
function setGenomeViewSize(size) {
	e('genomeview_size').value = parseInt(size);
}

/**
 * @description Gets small (ie. genome view) chromosome length
 * @returns {int} Chromosome length in pixels
 */
function getSmallChrLength() {
	return getGenomeViewSize() * 350;
}

/**
 * @description Gets small (ie. genome view) plot height
 * @returns {int} Plot height in pixels
 */
function getSmallPlotHeight() {
	return getGenomeViewSize() * 20;
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function showSigs(sigIDs) {
	switchTabFromTop('markerinfo')
	var markerURL = hgvbaseTopURL + "/significance/view?id=" + sigIDs;

	ajaxGetHTML(markerURL,null,'markerview');
}

function showSigsByMarker(markerIdentifier) {
	switchTabFromTop('markerinfo');
	var markerURL = hgvbaseTopURL + "/significance/view";
	ajaxGetHTML(markerURL,{marker: markerIdentifier, resultsets: getResultsets() },'markerview')
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function resizeRegionView() {
	var gbrowseHeight = jQuery(document).height();
	var gbrowseWidth = jQuery(document).width();
	top.document.getElementById('regionview_loader').style.display = "none";
	top.document.getElementById('regionview_settings').style.display="";
	
	var rv = top.document.getElementById('regionview');
	rv.style.height = (gbrowseHeight + 150)
			+ "px";
	var region = getGBrowseRegion();
	setRegion(region);
	if (getLoadProgress()=='loading') setLoadProgress(null);
	updateMarkerReport(region);
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function storeRegion(region,successFunction) {
	jQuery.get(hgvbaseTopURL + "/browser/store", {
		region :region
	}, successFunction, 'text');
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function studiesAction(identifier, action) {
	if (action == 'noentry') {
		showNoEntry();
	}
	else if (action == 'add') {
		if (checkMaxAdded()) return;
		showDialog('accept', function() {
			var resultsets = getCheckedResultsets(identifier);
			jQuery("#dialog").dialog("close");
			if (resultsets.length == 0) {
				alert("No Result Sets selected!");
				return;
			}
			_resultsets = addResultsets(resultsets);
			_studies = addStudy(identifier);
			updateList(identifier, action,'studies');
		}, hgvbaseURL + "/study/resultsets/" + identifier,null,"Study " + identifier);
	} else {
		var resultsets = getAllResultsetsInStudy(identifier);
		_resultsets = removeResultsets(resultsets);
		_studies = removeStudy(identifier);
		updateList(identifier, action,'studies');
	}
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function phenotypesAction(identifier, action) {
	if (action == 'noentry') {
		showNoEntry()
	}
	else if (action == 'add') {
		var phenotype = e('phenotype_' + identifier).innerHTML;
		var study = e('study_' + identifier).childNodes[0].innerHTML;
		if (checkMaxAdded()) return;
		showDialog('accept', function() {
			var resultsets = getCheckedResultsets(identifier);
			jQuery("#dialog").dialog("close");
			if (resultsets.length == 0) {
				alert("No Result Sets selected!");
				return;
			}
			_resultsets = addResultsets(resultsets);
			_studies = addStudy(study);
			updateList(identifier, action,'phenotypes');
		}, hgvbaseURL + "/phenotypemethod/experiments/" + identifier,null,"Phenotype: " + phenotype);
	} else {
		var resultsets = getAllResultsetsInStudy(identifier);
		var study = e('study_' + identifier).childNodes[0].innerHTML;
		_resultsets = removeResultsets(resultsets);
		_studies = removeStudy(study);
		updateList(identifier, action,'phenotypes');
	}
}

function showNoEntry(){
	alert("We regret this data cannot be viewed while protections are put in place to ensure individuals cannot be identified.");
	return;
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function studyAction(identifier, action) {
	if(action=='noentry') {
		alert("This data is not available to our Browser due to anonymity issues");
		return;
	}

	if (action == 'add') {
		if (checkMaxAdded()) return;
		showDialog('accept', function() {
			var resultsets = getCheckedResultsets(identifier);
			var prevSrc = showAjaxLoader("image_" + identifier,true);
			jQuery("#dialog").dialog("close");
			if (resultsets.length == 0) {
				alert("No Result Sets selected!");
				return;
			}
			
			_resultsets = addResultsets(resultsets);
			_studies = addStudy(identifier);

			updateStudyReport(identifier, action, prevSrc);
		}, hgvbaseURL + "/study/resultsets/" + identifier,null,"Study " + identifier);
	} 
	else {
		var prevSrc = showAjaxLoader("image_" + identifier,true);
		var resultsets = getAllResultsetsInStudy(identifier);
		_resultsets = removeResultsets(resultsets);
		_studies = removeStudy(identifier);
		updateStudyReport(identifier, action, prevSrc);
	}
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function resultsetAction(identifier, resultsetid, action) {
	if(action=='noentry') {
		alert("This data is not available to our Browser due to anonymity issues");
		return;
	}
	showAjaxLoader(getTagPrefix() + "image_" + resultsetid,true);
	var resultsets = new Array(resultsetid);
	if (action == 'add') {
		if (checkMaxAdded()) return;
			_resultsets = addResultsets(resultsets);
			_studies = getStudies();	
			updateStudyReport(identifier);
	} 
	else {
		_resultsets = removeResultsets(resultsets);
		_studies = getStudies();	
		updateStudyReport(identifier);
	}
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function getAllResultsetsInStudy(study) {
	var resultsets = e("rs_" + study).childNodes[0].innerHTML;
	return resultsets.split(',');
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function switchPanels(panel1, panel2, textElementID,panel1ShowText, panel2ShowText) {
	if(e(panel1).style.display=='none') {
		jQuery("#" + panel1).show('fast');
		jQuery("#" + panel2).hide('fast');
		e(textElementID).innerHTML=panel1ShowText;
	}
	else {
		jQuery("#" + panel1).hide('fast');
		jQuery("#" + panel2).show('fast');
		e(textElementID).innerHTML=panel2ShowText;
	}
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function checkMaxAdded() {
	if (getResultsets().length >= maxResultsets) {
		alert("You can only compare a maximum of " + maxResultsets + " Result Sets");
		return true;
	}
	return false;
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function showDialog(type, buttonFunction, content, params, title) {
	// if 'content' begins with a / then get using AJAX and use the params hash

	if (content.substring(0, 1) == '/' || content.substr(0, 5) == 'http:') {
		// show dialog before getting content and display a loader image
		var dialog = e('dialog');
		dialog.style.display = "block";
		showAjaxLoader('dialog');
		doShowDialog(type, buttonFunction, title);

		jQuery.ajax({
				url:content,
				data:params,
				dataType: "html",
				error: function (XMLHttpRequest, textStatus, errorThrown) {
					e('dialog').innerHTML = "Sorry, an error occurred while trying to retrieve this information. Please try again later.";
				},
				success: function(data, textStatus) {
					// replace loader image with data content
					e('dialog').innerHTML = data;
					e('dialog').style.height="305px";
					e('dialog').style.width="550px";
				},
				timeout: ajaxTimeout,
				type: "get",
				guid: getGUID()
		});
		
	} else {
		e('dialog').innerHTML = content;
		e('dialog').style.display = "";
		doShowDialog(type, buttonFunction, title);

	}
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function doShowDialog(type, buttonFunction, heading) {
	var buttonHash;
	var cancelFunction = function() {
		jQuery("#dialog").dialog("close");
	};
	if (type == 'info') {
		buttonHash = {
			'Ok' :buttonFunction
		}
	} else if (type == 'accept') {
		buttonHash = {
			'Accept' :buttonFunction,
			'Cancel' :cancelFunction
		}
	}

	jQuery("#dialog").dialog( {
		modal :true,
		draggable :false,
		resizable :false,
		overlay : {
			opacity :0.5,
			background :"black"
		},
		buttons :buttonHash,
		width :600,
		height :400,
		title: heading
	});
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function getCheckedResultsets(study) {
	var resultsetElements = document.getElementsByName('rs_check' + study);
	var rsList = new Array();
	for ( var i = 0; i < resultsetElements.length; i++) {
		var rs = resultsetElements[i];
		if (rs.checked) {
			rsList.push(rs.id.substring(2));
		}
	}
	return rsList;
}

/**
 * @description Switches tab from within an IFrame (not possible through JQuery)
 * @param {String} tabName The name of the tab to switch to
 * @returns {Array} Lines from the file.
 */
function getChosenStudyResultsets(study) {
	var resultsetElements = document.getElementsByName('rs_check' + study);
	var rsList = new Array();
	for ( var i = 0; i < resultsetElements.length; i++) {
		var rs = resultsetElements[i];
		rsList.push(rs.id.substring(2));
	}
	return rsList;
}

function ajaxSimplePost(url, params, errorFunction) {
	jQuery.ajax({
		url:url,
		data:params,
		dataType: "text",
		error: errorFunction,
		timeout: ajaxTimeout,
		type: "post"
	});
}

function ajaxPostWithCallback(url, params, successFunction, errorFunction) {
	jQuery.ajax({
		url:url,
		data:params,
		dataType: "text",
		success: successFunction,
		error: errorFunction,
		timeout: ajaxTimeout,
		type: "post"
	});
}

function ajaxGetHTML(url, params, elementID,small,successFunction) {
	showAjaxLoader(elementID,small);
	
	if (!successFunction) {
		successFunction = function(data, textStatus){
			e(elementID).innerHTML = data;
		};
	}

	errorFunction = function (xhr, textStatus, errorThrown) {
		e(elementID).innerHTML="Sorry, an error occurred while trying to retrieve this information. Please try again later.";
	};
	
	if (params==null) {
		params={ guid: getGUID() };
	}
	else {
		params['guid']=getGUID();
	}
	jQuery.ajax({
		url:url,
		data:params,
		dataType: "html",
		contentType: "text/html",
		success: successFunction,
		error: errorFunction,
		timeout: ajaxTimeout,
		type: "get"
	});
}

function setExhibitValue(identifier, property, value) {
	var db = window.database;
	var hash = db._spo[identifier];
	if (hash) {
		var array = hash[property];
		array[0] = value;
	}
	
	var item = db.getObject(identifier,property);
}

function updateList(identifier, action, type) {
	showAjaxLoader("image_" + identifier,1);
	var successFunction;
	if (action=='add') {
		successFunction = function(textStatus, data) {
			setResultsets(_resultsets);
			setStudies(_studies);
			if (type=='phenotypes') incPhenotypeCount();
			
			var tagElement = e("action_" + identifier)
			var tagImage = e("image_" + identifier)
			tagElement.title = "Remove from Browser";
			tagImage.src = hgvbaseURL + "/images/remove.png";
			tagImage.alt = "remove";
			tagElement.href = "javascript:" + type + "Action('" + identifier + "','remove')";
			updateCounts();
		}
	}	
	else {
		successFunction = function(textStatus, data) {
			setResultsets(_resultsets);
			setStudies(_studies);
			if (type=='phenotypes') decPhenotypeCount();
			
			var tagElement = e("action_" + identifier)
			var tagImage = e("image_" + identifier)
			tagElement.title = "Add to Browser";
			tagImage.src = hgvbaseURL + "/images/add.png";
			tagImage.alt = "add";
			tagElement.href = "javascript:" + type + "Action('" + identifier + "','add')";

			updateCounts();
		}
	}
	
	storeResultsets(successFunction);
}

function removeAllStudies() {
	_resultsets = '';
	_studies = '';
	successFunction = function(textStatus, data) {
		window.location.reload();
	}
	storeResultsets(successFunction)
}

function arrayToHash(array) {
	var hash = new Array();
	
	if (array && array.length>0) {
		for(var i = 0;i<array.length;i++) {
			hash[array[i]]=1;
		}
	}
	return hash;
}

function updateCounts() {
	
	var resultsetCount = getResultsets().length;
	
	if (e('added_studies')==null) {
		var phenoCount = getPhenotypeCount();
		e('added_phenotypes').innerHTML=determineCount('Phenotype','Phenotypes',phenoCount);
	}
	else {
		var studyCount = getStudies().length;
		e('added_studies').innerHTML=determineCount('Study','Studies',studyCount);
	}
	e('added_resultsets').innerHTML=determineCount('Result Set','Result Sets',resultsetCount);
}

function determineCount(singular, plural, number) {
	var determined;
	if (number==0) {
		determined="No " + plural;
	}
	else if (number==1) {
		determined="1 " + singular;
	}
	else {
		determined=number + " " + plural;
	}
	return determined;
}

function updateStudyReport(study) {
	var selectedRs = presentInArray(getAllResultsetsInStudy(study), getResultsets());

	if (selectedRs.length==0) {
		removeStudy(study);
	}
	else {
		addStudy(study);
	}
	
	var successFunction = function(textStatus, data) {
		setResultsets(_resultsets);
		setStudies(_studies);
		
		var allResultsets = getAllResultsetsInStudy(study)
		var selectedRs = presentInArray(getAllResultsetsInStudy(study), getResultsets());

		if (selectedRs.length==0) {
			updateStudyTag(study, "Add this Study to Browser", hgvbaseURL + "/images/add.png", "javascript:studyAction('" + study + "','add')");
			
			for(var i = 0;i<allResultsets.length;i++) {
				updateResultsetTag(allResultsets[i],"Add to Browser", hgvbaseURL + "/images/add.png","javascript:resultsetAction('" + study + "','" + allResultsets[i] + "','add')");
			}
		}
		else {
			updateStudyTag(study, "Remove this Study from Browser", hgvbaseURL + "/images/remove.png", "javascript:studyAction('" + study + "','remove')");
			var selectedRsHash = arrayToHash(selectedRs);
			
			for(var i = 0;i<allResultsets.length;i++) {
				var currRs = allResultsets[i]
				if (selectedRsHash[currRs]) {
					updateResultsetTag(currRs,"Remove From Browser", hgvbaseURL + "/images/remove.png","javascript:resultsetAction('" + study + "','" + currRs + "','remove')");
				}
				else {
					updateResultsetTag(currRs,"Add To Browser", hgvbaseURL + "/images/add.png","javascript:resultsetAction('" + study + "','" + currRs + "','add')");
				}
			}
		}
		
	}
	storeResultsets(successFunction);
}	

function updateStudyTag(id, text, image, link) {
	var tagAnchor = e("action_" + id)
	var tagText = e("text_" + id)
	var tagImage = e("image_" + id)
	tagText.innerHTML = text;
	tagImage.src = image;
	tagAnchor.href = link;
}

function updateResultsetTag(id, text, image, link) {
	
	var prefix = getTagPrefix();

	
	e("gaction_" + id).href = link;
	e("gtext_" + id).innerHTML = text;
	e("gimage_" + id).src = image;
	e("paction_" + id).href = link;
	e("ptext_" + id).innerHTML = text;
	e("pimage_" + id).src = image;
}

function getTagPrefix() {
	if (e('assoc_exp_panels').style.display=='none') {
		return 'g';
	}
	else {
		return 'p';
	}
}
function addResultsets(resultsets) {
	var rsList = getResultsets();
	var finalList = combineArrays(resultsets, rsList);
	return finalList;
}

function addStudy(study) {
	var studiesList = getStudies();
	var studies = new Array(study);
	var finalList = combineArrays(studies, studiesList);
	return finalList;
}

function removeStudy(study) {
	var studiesList = getStudies();
	var studies = new Array(study);
	var finalList = extractArrays(studiesList, studies);
	return finalList;
}

function combineArrays(array1, array2) {
	var map = {};
	var finalList = new Array();

	if (array1 && array1.length>0) {
		for(var i = 0;i<array1.length;i++) {
			map[array1[i]]=1;
		}
	}
	
	
	
	
	if (array2 && array2.length>0) {
		for(var i = 0;i<array2.length;i++) {
			map[array2[i]]=1;
		}
	}
	
	
	var mapSize = size(map)
	
	for(var item in map) {
		finalList.push(item);
	}
	
	return finalList;
	
}

function size(hashObject) {
	var size = 0;
	for(var item in hashObject) {
		size++;
	}
	return size;
}
 
function extractArrays(arrayBase, arrayToRemove) {
	var mapToRemove = new Array();
	var finalList = new Array();
	
	for(var rsNo = 0;rsNo<arrayToRemove.length;rsNo++) {
		mapToRemove[arrayToRemove[rsNo]]=1;
	}
	
	for(var rsNo = 0;rsNo<arrayBase.length;rsNo++) {
		var toRemove = arrayBase[rsNo];
		
		
		if (!mapToRemove[toRemove]) {
			finalList.push(arrayBase[rsNo]);
		}
	}

	return finalList;
}

function presentInArray(arrayBase, arrayPresent) {
	var mapToCheck = new Array();
	var finalList = new Array();
	
	for(var rsNo = 0;rsNo<arrayPresent.length;rsNo++) {
		mapToCheck[arrayPresent[rsNo]]=1;
	}
	
	for(var rsNo = 0;rsNo<arrayBase.length;rsNo++) {
		var toCheck = arrayBase[rsNo];
		
		if (mapToCheck[toCheck]) {
			finalList.push(arrayBase[rsNo]);
		}
	}

	return finalList;
}

function removeResultsets(resultsets) {
	var rsList = getResultsets();
	var finalList = extractArrays(rsList, resultsets);
	return finalList;
}

function updateResultset(study, resultsetid) {
	e("image_" + resultsetid).src = hgvbaseURL + "/images/small-ajax-loader.gif";
	
	var rsList = new Array();
	rsList.push(resultsetid);
	addResultsetsToServer(rsList, study, function(textStatus, data) {
		updateResultsetsOnClient(rsList[0], 'add');
		var tagElement = e("action_" + resultsetid)
		var tagImage = e("image_" + resultsetid)
		tagElement.innerHTML = "<span>Remove from Browser</span>";
		tagImage.src = hgvbaseURL + "/images/remove.png";
		tagElement.href = "javascript:resultsetAction('" + study + "','remove')";
	});
}

function setResultsets(resultsetids) {
	if (isArray(resultsetids)) {
		e('resultsetids').value = resultsetids.join(',');
	}
	else {
		if (resultsetids == 'none') {
			e('resultsetids').value = "";
		} else {
			e('resultsetids').value = resultsetids;
		}
	}
}

function isArray(obj) {
	   if (obj.constructor.toString().indexOf("Array") == -1)
	      return false;
	   else
	      return true;
	}

function setStudies(studies) {
	if (studies == 'none') {
		e('studies').value = "";
	} else {
		e('studies').value = studies;
	}
}

// set all aspects of browser to update
function setBrowserToUpdate() {
	refreshGenomeView = 1;
	refreshRegionView = 1;
}

// update browser
function updateBrowser(tab) {
	if (!tab) {
		var $tabs = jQuery('#browserreport-tabs').tabs();
		tab = $tabs.data('selected.tabs');
	}
	if (tab != 2 && getLoadProgress() == 'loading') {
		setLoadProgress('interrupted');
	}
	checkSettings();
	doUpdate(tab);
}

// carry out update based on tab
function doUpdate(tab) {
	if (tab == 1) {
		updateGenomeView();
	} else if (tab == 2) {
		updateRegionView();
	}
}

function populateResultsetTotals() {
	var rs_totals = document.getElementsByName('rs_total_fields');
	var rs_total0 = rs_totals[0];
	if (rs_total0==null) return;
	if (document.getElementById('rs_threshold' + rs_total0.id.substring(2)) == null) return
	
	for (var i = 0; i < rs_totals.length; i++) {
		var rs_total = rs_totals[i];
		var rsid = rs_total.id.substring(2);
		document.getElementById('rs_threshold' + rsid).innerHTML = rs_total.value;
	}
}


function showMarkerLoading() {
	var numbers = document.getElementsByName("rs_totals");
	for(var i=0; i<numbers.length; i++) {
		numbers[i].innerHTML="<img src='/images/small-ajax-loader.gif'/>";
	}
}

// check if settings have been changed and set different aspects to be updated
function checkSettings() {

	// if no changes then return
	if (rSettingsChanged == 0 && gSettingsChanged == 0)
		return;
	// get settings elements by retrieving all with a name of 'settings'
	var settingElements = document.getElementsByName('settings');

	// loop through each element and push the id and value into an array
	var settingList = new Array();
	for ( var i = 0; i < settingElements.length; i++) {
		var setting = settingElements[i].id + "|" + settingElements[i].value;
		settingList.push(setting);

	}
	// get tracks elements by retrieving all with a name of 'tracks'
	var trackElements = document.getElementsByName('tracks');
	var tracksList = new Array();

	// loop through each element and push the id into an array if it is checked
	for ( var i = 0; i < trackElements.length; i++) {
		var track = trackElements[i];
		if (track.checked) {
			tracksList.push(track.id);
		}
	}

	// store settings and tracks in the page
	setSettings(settingList);
	setTracks(tracksList);
	storeSession();
	if (rSettingsChanged == 1)
		refreshRegionView = 1;
	if (gSettingsChanged == 1)
		refreshGenomeView = 1;
	rSettingsChanged = 0;
	gSettingsChanged = 0;
}

function setSettings(settingsList) {
	var settings = settingsList.join(",");
	e('settings').value = settings;
}

function setTracks(tracksList) {
	var tracks = tracksList.join(",");
	e('tracks').value = tracks;
}

function getSettings() {
	// get settings elements by retrieving all with a name of 'settings'
	var settingElements = document.getElementsByName('settings');

	// loop through each element and push the id and value into an array
	var settingList = new Array();
	for ( var i = 0; i < settingElements.length; i++) {
		var setting = settingElements[i].id + "|" + settingElements[i].value;
		settingList.push(setting);
	}

	return settingList.join(",");
}

function getTracks() {
	// get tracks elements by retrieving all with a name of 'tracks'
	var trackElements = document.getElementsByName('tracks');
	var tracksList = new Array();

	// loop through each element and push the id into an array if it is checked
	for ( var i = 0; i < trackElements.length; i++) {
		var track = trackElements[i];
		if (track.checked) {
			tracksList.push(track.id);
		}
	}
	return tracksList.join(",");
}

// shorthand getElementById
function e(elementID) {
	var e = document.getElementById(elementID);
	if (e == null) {
		e = top.document.getElementById(elementID);
	}

	if (e == null) {
		return null;
	}
	return e;
}

function showAjaxLoader(elementID,small) {
	var e = document.getElementById(elementID);
	var image="/images/ajax-loader.gif";

	var suffix;
	if (small) image = "/images/small-ajax-loader.gif";
	
	if (!e) {
		e = top.document.getElementById(elementID);
		suffix = hgvbaseTopURL;
	}
	else {
		suffix = hgvbaseURL;
	}
	
	if (small==1) {
		_ajaxElementID = elementID;
		_ajaxImage = e.src;
		e.src = suffix + image ;
		return;
	}
	else if (small==2) {
		e.innerHTML = "<center><img style='vertical-align:middle' src='"
			+ suffix + image + "></center>";
		return;
	}
		e.innerHTML = "<center><img style='vertical-align:middle' src='"
			+ suffix + image + "'></center>";
}

function doUpdateGenomeView() {
	var resultsetids = "";
	var threshold = e('g_threshold').value;
	var chr = getChromosomes();
	var numberChrs = getChrNumber();
	
	var resultsetids = getResultsets().join(',');
	
	if (resultsetids.length == 0) {
		e('browserreport-tabs').style.display = "none";
		e('browser_genomeview').style.display = "none";
		return;
	} else {
		e('browserreport-tabs').style.display = "block";
		e('browser_genomeview').style.display = "block";
	}
	
	var chrlist;
	var noRows = calculateRows();
	if (chr == 'ALL') {
		chrlist = "";
	}
	
	else if (chr == 'NONE') {
		e('genomeview_display').innerHTML="<ul style='margin-left:none'><li>No chromosomes selected</li></ul>";
		return;
	}
	
	else {
		chrlist = chr.join("+");
	}
	
		var rotate;

		if (e('rotate_multiple').checked)
			rotate = 1;
		else
			rotate = 0;
		var height = getSmallChrLength();
		if (noRows > numberChrs) {
			noRows = numberChrs;
		}
		e('scale_type').value=e('gscale_type').value;
		showMarkerLoading();
		e('marker_threshold').innerHTML=threshold;
		ajaxGetHTML(genomeViewURL + "?band_labels=0&c=" + chrlist + "&h=" + height + "&w="
				+ parseInt(height / 30) + "&e=1&rows=" + noRows + "&rotate="
				+ rotate + "&fp=GenomeView~threshold="
				+ threshold + "~resultsetid=" + resultsetids + "~settings="
				+ getSettings() + "~tracks=" + getTracks(), {},'genomeview_display', 0,
				function(data, textStatus){
					e('genomeview_display').innerHTML = data;
					populateResultsetTotals();
					
				}
		);
}

function doUpdateMarkerReport(type,region) {
	var params=new Array;

	if (region) {
		params = {
			coords: region
		};
	}
	else {
		params = {
			coords: e('region').value
		}
	}

	params['threshold']=getRThreshold();
	var resultsetids = getResultsets().join(',');
	params['resultsetids']=resultsetids;
	ajaxGetHTML(hgvbaseURL + '/browser/markerinfo/region', params, 'markerview',0);
}

function getCurrentMarkerview() {
	return e('current_markerview').value;	
}

function setCurrentMarkerview(view) {
	e('current_markerview').value=view;	
}

function getScreenWidth() {
	var screenWidth;
	if (jQuery.browser.msie) {
		var ver = jQuery.browser.version;

		if (ver.substring(0, 1) == "7") {
			screenWidth = jQuery(window).width();
		} else {
			screenWidth = document.documentElement.clientWidth;
		}
	} else {
		screenWidth = window.innerWidth;
	}
	return screenWidth
}

function calculateRows() {
	var settingsRows = e('rows_chromosomes').value;
	var noResultsets = getResultsets().length;
	var plotHeight = getSmallPlotHeight();
	var chrLength = getSmallChrLength();
	var chrNumber = getChrNumber();
	var viewWidth = e('view_width').value;
	if (settingsRows != 'auto')
		return settingsRows;
	
	var screenWidth;

	if (viewWidth=='auto') {
		
		screenWidth = getScreenWidth() - 100;
	}
	else {
		screenWidth = e('view_width').value;
	}
	
	var noRows;
	
	if (e('rotate_multiple').checked) {
		var singleChr = chrLength + 40;
		noRows = Math.floor(screenWidth/singleChr);
	} else {
var presentWidth=0;
		if (e('genome_present').checked) {
			presentWidth = 14 * noResultsets;
		}
		var singleChr =  presentWidth + plotHeight + 63;
		var allChr = singleChr * chrNumber;
		noRows = Math.ceil(allChr / screenWidth);
	}

	// GBrowse_karyotype needs rows (not columns) if rotated (ie. 2 columns
	// would be 12 rows)
	if (e('rotate_multiple').checked)
		return 24 / noRows;
	else
		return noRows;

}

function updateGenomeView(refreshNow) {
	if ((refreshGenomeView == 1) || (refreshNow == true)) {
		refreshGenomeView = 0;
		doUpdateGenomeView();
	}
}

function updateMarkerReport(type,region) {
	doUpdateMarkerReport(region);
}

function getGThreshold() {
	return e('g_threshold').value;
}

function getRThreshold() {
	return e('r_threshold').value;
}

function getChromosomes() {
	var chrs = document.getElementsByName('chr');
	var chrList=new Array();
	for(var i=0;i<chrs.length;i++) {
		if (chrs[i].checked) chrList.push(chrs[i].id.substr(3));
	}
	if (chrList.length == 24) return 'ALL';
	else if (chrList.length == 0) return 'NONE';
	else return chrList;
}

function getChrNumber() {
	var chrs = document.getElementsByName('chr');
	var chrList=new Array();
	for(var i=0;i<chrs.length;i++) {
		if (chrs[i].checked) chrList.push(chrs[i].id.substr(3));
	}
	return chrList.length;
}

function storeSession() {
	var region = jQuery.get(hgvbaseTopURL + "/browser/store", {
		g_threshold :getGThreshold(),
		r_threshold :getRThreshold(),
		chrs_to_display :getChromosomes(),
		region :region,
		tracks :getTracks(),
		settings :getSettings()
	}, function(data, textStatus) {
	}, 'text');
}

function storeResultsets(successFunction) {
	var rs = _resultsets;
	var studies = _studies;
	
	if (rs.length == 0) rs='none';
	if (studies.length == 0) studies = 'none';

	errorFunction = function (XMLHttpRequest, textStatus, errorThrown) {
		alert("Sorry, an error occurred while trying to store your changes. Please try again later.");
	};
	
	jQuery.ajax({
		url:hgvbaseURL + "/browser/store",
		data:{
			resultsetid: rs,
			study: studies
		},
		dataType: "html",
		success: successFunction,
		error: errorFunction,
		timeout: ajaxTimeout,
		type: "post"
	});
}

function getResultsets() {
	var resultsetArray = new Array();
	resultsetArray = e('resultsetids').value.split(",");
	if (e('resultsetids').value=='null' || e('resultsetids').value=='none') return new Array();
	if (e('resultsetids').value==0) return new Array();
	return resultsetArray;
}

function getPhenotypeCount() {
	var phenoCount = e('phenotypes').value;
	if (e('phenotypes').value=='null' || e('phenotypes').value=='none') return 0;
	if (e('phenotypes').value==0) return 0;
	return parseInt(phenoCount);
}

function setPhenotypeCount(phenoCount) {
	if (phenoCount=='null' || phenoCount=='none') phenoCount=0;
	e('phenotypes').value=phenoCount;
}

function incPhenotypeCount() {
	var phenoCount = getPhenotypeCount();
	phenoCount++;
	setPhenotypeCount(phenoCount);
}

function decPhenotypeCount() {
	var phenoCount = getPhenotypeCount();
	phenoCount--;
	setPhenotypeCount(phenoCount);
}

function getStudies() {
	var studyArray = new Array();
	studyArray = e('studies').value.split(",");
	if (e('studies').value=='null' || e('studies').value=='none') return new Array();
	if (e('studies').value==0) return new Array();
	return studyArray;
}

function loadKey() {
//	if (getStudies().length==0) {
//		e('chosen_nostudies').style.display="block";
//		e('chosen_studies').style.display="none";
//	}
//	else {
//		e('chosen_nostudies').style.display="none";
//		e('chosen_studies').style.display="block";
//	}
	var resultsets = getResultsets().join(",");
	var studies = getStudies().join(",");
	ajaxGetHTML(hgvbaseURL + "/browser/key?resultsetids=" + resultsets + "&studies=" + studies + "&guid=" + getGUID(), null, "resultset_key",0);
}

function updateRegionView() {
	if (getLoadProgress()=='interrupted') {
		refreshRegionView=1;
	}
	if (refreshRegionView == 0) {	
		return;
	}
	var region = getRegion();

	if (region == null || region == "") {
		region = getLandmark();
		if (region==null || region =="") {
			region==null;
		}
	}
	
	var resultsetid = getResultsets().join(',');
	var threshold = e('r_threshold').value;
	doUpdateRegionView(region, resultsetid, threshold);
	refreshRegionView=0;
}

function getGBrowseRegion() {
	var gbrowse_frm = top.window.frames[0];
	if (!gbrowse_frm) return undef;
	var gbrowse_doc = gbrowse_frm.document;
	
	var ref = gbrowse_doc.getElementsByName('ref')[0];
	var start = gbrowse_doc.getElementsByName('start')[0];
	var stop = gbrowse_doc.getElementsByName('stop')[0];
	
	if (ref==null) {
		return null;
	}
	else {
		var region = ref.value + ":" + start.value + ".." + stop.value;
		return region;
	}
}

function getGBrowseLandmark() {
	var gbrowse_frm = top.window.frames[0];
	if (!gbrowse_frm) return undef;
	var gbrowse_doc = gbrowse_frm.document;
	
	var ref = gbrowse_doc.getElementsByName('name')[0];
	
	if (ref==null) {
		return null;
	}
	else {
		return ref.value;
	}
}

function getRegion() {
	return top.document.getElementById('region').value;
}

function doUpdateRegionView(region, resultsetid, threshold) {
	setLoadProgress('loading');
	
	e('regionview_loader').style.display = "";
	e('regionview').style.height="0px";
	
	showAjaxLoader('markerview');
	var screenWidth;
	if (e('view_width').value=='auto') {
		
		screenWidth = getScreenWidth() - 450;
	}
	else {
		screenWidth = e('view_width').value;
	}
	var pars = new Array();
	pars.push("width=" + screenWidth);
	if (e('genes').checked) { pars.push("label=Genes"); }
	if (e('ideogram').checked) { pars.push("label=Ideogram:overview"); }
	if (e('hgmd').checked) {pars.push("label=HGMD"); }
	e('scale_type').value=e('rscale_type').value;
	pars.push("plugin=RegionView;plugin_action=Settings;plugin_config=1");
	pars.push("name=" + region);
	pars.push("RegionView.resultsetid=" + resultsetid);
	pars.push("RegionView.threshold=" + threshold);
	pars.push("RegionView.settings=" + getSettings() );
	pars.push("RegionView.tracks=" + getTracks());
	
	var regionURL = regionViewURL + "?" + pars.join(";");
	if (region == null) {
		region = "";
	}
	e('regionview').src = regionURL;
}

function setLandmark(value) {
	e('landmark').value=value;	
}

function getLandmark() {
	return e('landmark').value;	
}

function gvToRV(chrLocation) {
	var locString = new Number(chrLocation).toString();
	var locInfo = locString.split(".", locString);
	if (locInfo[0] == '1') {
		locInfo[1] = locString.substr(2);
	}
	var chr = locInfo[0];
	var threshold = e('g_threshold').value;
	var scaletype = e('gscale_type').value;
	var resultsetid = getResultsets().join(',');

	if (chr == '23') {
		chr = 'X'
	}
	else if (chr == '24') {
		chr = 'Y'
	}
	var actualStart;
	if (locInfo[1]) {
		actualStart = zeroSuffix(locInfo[1], 3);
	}
	else {
		actualStart = '000';
	}
	
	var start;
	if (actualStart == '000') {
		start = 1;
	} else {
		start = (actualStart * 1000000) + 1;
	}
	var stop = start + 9000000 - 1;
	e('rscale_type').value=scaletype;
	e('r_threshold').value=threshold;
	
	var region = "Chr" + chr + ":" + start + ".." + stop;
	doUpdateRegionView(region, resultsetid,
				threshold);
	jQuery('#browserreport-tabs > ul').tabs("select",2);
		
	updateMarkerReport(region);
	refreshRegionView = 0;
	setRegion(region);
	setLandmark(region);
}

function showRegionView(chr,start,stop) {
	setLandmark("Chr" + chr + ":" + start + ".." + stop);
	refreshRegionView=1;
	switchTabFromTop('regionview');
	updateRegionView();
	refreshRegionView = 0;
}

function showMarkerView(type) {
	if (getLoadProgress() == 'loading') setLoadProgress('interrupted');
	switchTabFromTop('markerinfo');
	updateMarkerReport(getRegion());
}

function setRegion(region) {
	top.document.getElementById('region').value=region;
	storeRegion(region,function() {	
	});	
}

function zeroSuffix(numberString, length) {
	var extraZeroes = length - numberString.length;
	var zeroes = '';
	for ( var i = 0; i < extraZeroes; i++) {
		zeroes = zeroes + '0';
	}
	return numberString + zeroes;
}

function showExperiment(identifier) {
	showDialog('info', function() {
		jQuery("#dialog").dialog("close");
	}, hgvbaseURL + "/study/experiment/" + identifier,null,"Experiment");
}

function setStudiesText(studies) {
	if (studies == '0')
		studies = 'no';
	if (studies == 1) {
		studies = '1 study';
	} else {
		studies = studies + ' studies';
	}
	e('added_studies').innerHTML = studies;
}

function switchResultset(resultsetid, study) {
	
	var action;
	if (e("rs" + resultsetid).checked) {
		action = 'add';
		if (checkMaxAdded()) {
			e("rs" + resultsetid).checked = false;
			return;
		}

	} else {
		type = 'remove';
	}
	
	var resultsets = new Array(resultsetid);
	if (action == 'add') {
		if (checkMaxAdded()) return;
			var resultsets = new Array(resultsetid);
			_resultsets = addResultsets(resultsets);
			_studies = getStudies();		
	} else {
		var count = countCheckedInStudy(study);
		var delStudy;
		if (count == 0) {
			delStudy = confirm("This will remove the study from the list. Are you sure?");
			if (delStudy) {
				removeStudyFromBrowser(study);
				return;
			}
			else {
				e("rs" + resultsetid).checked = true;
				return;
			}
		}
		var resultsets = new Array(resultsetid);
		_resultsets = removeResultsets(resultsets);
		_studies = getStudies();
	}
	
	successFunction = function(data, textStatus) {
		setResultsets(_resultsets);
		setStudies(_studies);
		setBrowserToUpdate();
		updateChosenStudies(study,false);
	}	
	storeResultsets(successFunction);
}

function removeStudyFromBrowser(study) {
	
	var rs = getChosenStudyResultsets(study);
	_resultsets = removeResultsets(rs);
	_studies = removeStudy(study);
		
	successFunction = function(data, textStatus) {
		setResultsets(_resultsets);
		setStudies(_studies);
		setBrowserToUpdate();
		updateChosenStudies(study,true);
	}
	
	storeResultsets(successFunction);
}

function updateChosenStudies(study,deleted) {
	if (deleted) {
		removeStudyRow(study);
	}
	loadKey();
	updateNumbers();
	updateMarkerReport();
}

function updateNumbers() {
	var studies = getStudies().length;
	var resultsets = getResultsets().length;
	
	if (studies==0) {
		e('added_studies').innerHTML="No Studies (No Result Sets)";
	}
	else {
		e('added_studies').innerHTML=studies + " Studies (" + resultsets + " Result Sets)";
	}
}

function removeStudyRow(identifier) {
	jQuery("#study_" + identifier).hide('slow');
	var studyPanel = e("study_" + identifier);
	studyPanel.parentNode.removeChild(studyPanel);
}

function checkStudyPopup(study, resultsetid) {
	var rsChecked = getCheckedResultsets(study);
	var total = parseInt(rsChecked.length) + parseInt(getResultsets().length);
	
	if (total<=8) return;
	
	alert("You can only compare a maximum of 8 Result Sets");
	e("rs" + resultsetid).checked = false;
}

function countCheckedInStudy(studyid) {
	var selectedRs = document.getElementsByName('rs_check' + studyid);
	var count = 0;
	for ( var i = 0; i < selectedRs.length; i++) {
		if (selectedRs[i].checked) {
			count++;
		}
	}
	return count;
}

function validateNoMarkers() {
	var no = e('resultsets_with_sig').value;
	var noInt = parseInt(no);
	
	if (isNaN(noInt)) {
		alert("Please enter a number in the 'Show significant markers across studies present in at least' field");
		e('resultsets_with_sig').value='1';
	}
	
	if (noInt<=0) {
		alert("Please enter a number greater than 0 in the 'Show significant markers across studies present in at least' field");
		e('resultsets_with_sig').value='1';
	}
	
	if (noInt>8) {
		alert("Please enter a number less than 9 in the 'Show significant markers across studies present in at least' field");
		e('resultsets_with_sig').value='8';
	}
	rSettingsChanged=1;	
}

function checkStudy(resultsetid, studyid) {
	var count = countCheckedInStudy(studyid);
	if (count + totalResultsets >= 8) {
		alert("You can only select 8 result sets");
		e('rs' + resultsetid).checked = false;
	}
}

function toggle(identifier) {
	var image = e(identifier + "_image");
	if (image.src.match(/plus/)) {
		image.src = hgvbaseURL + "/images/minus.png";
		image.alt = "-";
		jQuery('#' + identifier).show('fast');
	} else {
		image.src = hgvbaseURL + "/images/plus.png";
		image.alt = "+";
		jQuery('#' + identifier).hide('fast');
	}
}

function showHelp(helpAnchor) {
	var height = screen.availHeight * (0.8);
	var width = 950
	var options = "width="
			+ width
			+ ",height="
			+ height
			+ ",location=no,menubar=no,status=no,toolbar=no,scrollbars=yes, resizable=yes";
	window.open(hgvbaseURL + "/info/help?nowrappers=1#" + helpAnchor,
			"_hgvbase_help", options);
}

function displayMart(dataset, filters, attributePage, attributes, noResults) {
	var baseURL = martURL + "?";
	var url = baseURL + 'VIRTUALSCHEMANAME=default';
	var attr_list = new Array();
	var filt_list = new Array();

	if (filters != null) {
		var temp_filts = filters.split(",");
		for ( var filt = 0; filt <= temp_filts.length - 1; filt++) {
			var filt_parts = temp_filts[filt].split('=');
			filt_list.push(dataset + ".default.filters." + filt_parts[0]
					+ ".%22" + filt_parts[1] + "%22");
		}

		url = url + "&FILTERS=" + filt_list.join('|');
	}

	if (attributes != null) {
		var temp_attrs = attributes.split(',');

		for ( var attr = 0; attr <= temp_attrs.length - 1; attr++) {
			attr_list.push(dataset + ".default." + attributePage + "."
					+ temp_attrs[attr]);
		}

		url = url + "&ATTRIBUTES=" + attr_list.join('|');

	}

	if (noResults) {
		url = url + "&STARTPAGE=" + dataset;
	}

	window.open(url, "_self");
}

function goToMart(dataset) {
	if (dataset == 'marker') {
		displayMart(dataset, null, dataset, dataset + 'id', 1);
	}
	if (dataset == 'study') {
		displayMart(dataset, null, dataset, dataset + 'id', 1);
	}
}

function goToPage(pageUrl) {
	var url;
	
	if (pageUrl.substring(0,4) != 'http') {
		url = "/" + pageUrl;
	}
	else {
		url = pageUrl;
	}
	
	if (isIE6()) {
		var ie6form = document.getElementById('ie6_post');
		ie6form.action=url;
		ie6form.submit();
	}
	else {
		document.location = url;
	}
}

function addJson(json_uri) {
	json_uri = json_uri + "&guid=" + getGUID();
	var e = document.createElement('link');
	e.setAttribute('href', json_uri);
	e.setAttribute('type', 'application/json');
	e.setAttribute('rel', 'exhibit/data');
	document.getElementsByTagName('head')[0].appendChild(e);
}

function getGUID() {
	return new Date().getTime();
}

function resizeAbout() {
	var panel = e("about_panel");
	var os = jQuery("#about_contents").offset();
	var fullHeaderHeight = os.top;
	var fullContentsWidth = jQuery("#about_contents").width();

	var marginLeft = 15;
	var marginRight = 15;
	var marginTop = 8;
	var marginBottom = 8;
	
	if (jQuery.browser.msie) {
		var ver = jQuery.browser.version;

		if (ver.substring(0, 1) == "7") {
			winWidth = jQuery(window).width();
			winHeight = jQuery(window).height();
		} else {
			winHeight = document.documentElement.clientHeight;
			winWidth = document.documentElement.clientWidth;
		}
	} else {
		winHeight = jQuery(window).height();
		winWidth = jQuery(window).width();
	}

	winWidth = winWidth - (marginLeft + marginRight);
	winHeight = winHeight - (marginTop + marginBottom);
	
	
	
	var panelHeight = winHeight - fullHeaderHeight - jQuery('#footer').height()
			- 40;
	var panelWidth;
	
	if (winWidth < 900) {
		panelWidth = 900 - fullContentsWidth - 50;
	}
	else {
		panelWidth = winWidth - fullContentsWidth - 50;
	}
	
	panel.style.width = panelWidth + "px";
	panel.style.height = panelHeight + "px";
}

function martAlleleFrequencies(experimentID, studyID) {
	var filters = "af_experimentid=" + experimentID + ",studyid=" + studyID;
	displayMart(
			'study',
			filters,
			'allele_frequency',
			"studyid,markerid,alleleset,chr,start,stop,title,localid,source,variationtype,upstream30bp,downstream30bp,alleleseq,af_numberofgenotypedsamples,af_frequencyasproportion",
			0);
}

function martGenotypeFrequencies(experimentID, studyID) {
	var filters = "gf_experimentid=" + experimentID + ",studyid=" + studyID;
	displayMart(
			'study',
			filters,
			'genotype_frequency',
			"studyid,gf_markerid,gf_chr,gf_start,gf_stop,title,gf_localid,gf_source,gf_variationtype,gf_upstream30bp,gf_downstream30bp,gf_genotypelabel,gf_numberofgenotypedsamples,gf_frequencyasproportion",
			0);
}

function martAlleleAssociations(experimentID, studyID) {
	var filters = "aa_experimentid=" + experimentID + ",studyid=" + studyID;
	// this has frequency fields ->
	// displayMart('study',filters,'genotype_association',
	// "studyid,ga_markerid,ga_alleleset,ga_chr,ga_start,ga_stop,ga_numberofgenotypedsamples,ga_frequencyasproportion,ga_numberofsampleswithgenotype,ga_genotypelabel,ga_localid_assayedpanel,ga_phenotype,ga_unadjustedpvalue,ga_analysismethod,ga_localid,ga_source,ga_variationtype,ga_upstream30bp,ga_downstream30bp,title_experiment,totalmarkerstested",0);
	displayMart(
			'study',
			filters,
			'allele_association',
			"aa_studyid,aa_markerid,aa_alleleset,aa_chr,aa_start,aa_stop,aa_numberofgenotypedsamples,aa_alleleseq,aa_localid_assayedpanel,aa_phenotype,aa_unadjustedpvalue,aa_analysismethod,aa_localid,aa_source,aa_variationtype,aa_upstream30bp,aa_downstream30bp,aa_title_experiment,aa_totalmarkerstested",
			0);
}

function martGenotypeAssociations(experimentID, studyID) {
	var filters = "ga_experimentid=" + experimentID + ",studyid=" + studyID;
	// this has frequency fields ->
	// displayMart('study',filters,'genotype_association',
	// "studyid,ga_markerid,ga_alleleset,ga_chr,ga_start,ga_stop,ga_numberofgenotypedsamples,ga_frequencyasproportion,ga_numberofsampleswithgenotype,ga_genotypelabel,ga_localid_assayedpanel,ga_phenotype,ga_unadjustedpvalue,ga_analysismethod,ga_localid,ga_source,ga_variationtype,ga_upstream30bp,ga_downstream30bp,title_experiment,totalmarkerstested",0);
	displayMart(
			'study',
			filters,
			'genotype_association',
			"ga_studyid,ga_markerid,ga_alleleset,ga_chr,ga_start,ga_stop,ga_numberofgenotypedsamples,ga_genotypelabel,ga_localid_assayedpanel,ga_phenotype,ga_unadjustedpvalue,ga_analysismethod,ga_localid,ga_source,ga_variationtype,ga_upstream30bp,ga_downstream30bp,ga_title_experiment,ga_totalmarkerstested",
			0);

}

function updateResults() {
	var threshold = e('threshold').value;
	var displayType;
	if (e('results_show_tag')!=null) {
		if (e('results_show_tag').innerHTML.indexOf('Table')>0) {
			displayType = 'panels';
		}
		else {
			displayType = 'grid';
		}
	}
	else {
		displayType='panels';
	}
	ajaxGetHTML(hgvbaseURL + "/marker/results/" + e('markerid').value, {threshold: threshold, display: displayType}, 'marker_results');
}
function updateFrequencies() {
	var displayType;
	if (e('freqs_show_tag')!=null) {
		if (e('freqs_show_tag').innerHTML.indexOf('Table')>0) {
			displayType = 'panels';
		}
		else {
			displayType = 'grid';
		}
	}
	else {
		displayType='panels';
	}
	ajaxGetHTML(hgvbaseURL + "/marker/frequencies/" + e('markerid').value, {display: displayType}, 'marker_frequencies');
}

function isIE6() {
	var version = parseInt($.browser.version.substring(0,1));
	if ($.browser.msie && version<7) {
		return true;
	}
	return false;
}

function search(type,doReset) {
	var pars;
	
	if (doReset) {
		pars = {};
	}
	else {
		pars = {
			q: getKeywords(),
			category: getCategories(),
			cur_tab: getCurTab()
		};
	}

	var fullURL = getURIWithParameters(hgvbaseURL + "/" + type, pars);
	
	if (isIE6()) {
		var ie6form = document.getElementById('ie6_post');
		ie6form.action = fullURL;
		ie6form.submit();
	}
	else {
		window.location = fullURL;
	}
}

function getKeywords() {
	return document.getElementById('keywords').value;
}

function getCurTab() {
	var curtab = e('cur_tab');
	if (curtab)
		return e('cur_tab').value;
	else
		return null;
}

function resetFilters(dbtype){
	search(dbtype,true);
}

function getCategories() {
	var diseases = new Array();

	var diseaseChecks = document.getElementsByName('category');
	for(var d=0;d<diseaseChecks.length;d++) {
		var disease = diseaseChecks[d];
		if (disease.checked) diseases.push(disease.value);
	}
	return diseases;
}

function getURIWithParameters(uri,parameters) {
	var queryString=new Array;
	
	for(var p in parameters) {
		if (parameters[p] != null && parameters[p].length>0) {
			if (isArray(parameters[p])) {
				for(var q=0;q<parameters[p].length;q++) {
					var item = p + "=" + parameters[p][q];
					queryString.push(item);
				}
			}
			else {
				var item = p + "=" + parameters[p];
				queryString.push(item);
			}
		}
	}
	return uri + "?" + queryString.join("&");
}

function setLoadProgress(progress){
	top.document.getElementById('load_progress').value = progress;
}

function getLoadProgress(progress){
	return top.document.getElementById('load_progress').value;
}

function showTopMarkers() {
	document.getElementById('gv_resultsetids').value=getResultsets().join(",");
	document.getElementById('gv_studies').value=getStudies().join(",");
	document.gv_topmarkers.submit();
}
