// JavaScript Document


function toggle(obj)
{

	var el = document.getElementById(obj);
/*
	if(mode != "collapse") {
		el.style.display = "block";
		filter(("img"+obj),'imgin');
	} else {
		filter(("img"+obj),'imgout');	
		el.style.display = "none";
	}

*/
	if(el.style.display != "block") {
		el.style.display = "block";
		filter(("img"+obj),'imgin');
	} else {
		filter(("img"+obj),'imgout');	
		el.style.display = "none";
	}

}

function ShowHideObj(obj) {
	var el = document.getElementById(obj);

	if(el.style.display != "block") {
		el.style.display = "block";
	} else {
		el.style.display = "none";
	}
	
}
function progressBar(obj)
{
	ShowHideObj(obj);
}


imgout=new Image(10,10);
imgin=new Image(10,10);

/////////////////BEGIN USER EDITABLE///////////////////////////////
	imgout.src="images/collapse1.gif";
	imgin.src="images/expand1.gif";
///////////////END USER EDITABLE///////////////////////////////////

//this switches expand collapse icons
function filter(imagename,objectsrc){
	if (document.images) {
		document.images[imagename].src=eval(objectsrc+".src");
	}
}

function runExample (mut_str, hgvs_type, start_type)
{
	//document.mutform.mutnomen.value = mut_str;
	$('mutnomen').value		=	mut_str;
	document.mutform.startType.value = start_type;
	//$('startType').value	=	start_type;
	//document.mutform.hgvs_type.selectedIndex = hgvs_type;
	// $('hgvs_type').selectedIndex	=	hgvs_type;
	
	if (start_type == 1) {
		$('1').checked = true;
		$('2').checked = false;
	} else {
		$('1').checked = false;
		$('2').checked = true;
	}
	
	//if (hgvs_type == 1) {
	//	$('start_type').show();
	//} else {
	//	$('start_type').hide();
	//}
	document.mutform.submit();
}


// AJAX part

// cross-browser function to get XMLHTTPRequest object.
function getXMLHTTPRequest() {
	try {
		req = new XMLHttpRequest();
	} catch(err1) {
	  try {
	  req = new ActiveXObject("Msxml2.XMLHTTP");
	  } catch (err2) {
		try {
		req = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (err3) {
		  req = false;
		}
	  }
	}
	return req;
}

// the XMLHTTPRequest object.


function getOmimEsummary (db, id, get) {
var http = getXMLHTTPRequest();
  var modurl = "efetchOMIM.cgi?db=" + db + "&id=" + id + "&get=" + get;
  // var modurl = "efetchOMIM.cgi?db=" + db + "&id=" + document.subform.omimid.value + "&get=" + get;
  
  http.onreadystatechange = function()
  {
		if (http.readyState == 4) {
			document.getElementById('indicator3').style.display	=	'none';
			//document.subform.omimSummary.value = http.responseText;
			var ch;
				while (ch = document.getElementById('ppmSummary').firstChild){
					document.getElementById('ppmSummary').removeChild(ch);
				}
			document.getElementById('omimSummary').innerHTML = http.responseText;
		} else {
			document.getElementById('indicator3').style.display	=	'inline';
		}
  };
  
  http.open("GET", modurl, true)
  http.send(null);
}


/* split and reset alvarid and description */
function format_alvarid ()
{
	var avi	=	document.getElementById ('alvarid');
	var avd	=	document.getElementById ('avd');
	
	var resArray	=	avi.value.split("(");
	
	avi.value		=	resArray[0];
	avd.innerHTML	=	resArray[1];
										   
	/*avd.innerHTML	=	avi.value;
	alert (avd.innerHTML);
	document.getElementById ('avd').innerHTML	=	avi.value;*/
}


function validate_opmid (ids)
{
	var	http	=	getXMLHTTPRequest();
	var	modurl	=	"validatePMID.cgi?id=" + ids;
	
	http.onreadystatechange	=	function()	{
		if (http.readyState == 4) {
			document.getElementById ('opmidSummary').innerHTML	=	http.responseText;
		}
	};
	
	http.open ("GET", modurl, true);
	http.send (null);
}

// each ajax request has its own object (IE)
function getPubMedRec (id)
{
	var http = getXMLHTTPRequest();
	var modurl = "efetchPubMed.cgi?db=pubmed&id=" + id;
  
	http.onreadystatechange = function()
 	{
		if (http.readyState == 4) {
				
				var res	=	http.responseText;
				document.getElementById('ppmSummary').innerHTML	=	res;
		}
  };
  
  http.open("GET", modurl, true)
  http.send(null);	
}

var MVImg	=	{interval:null};


function load_mv () {
	MVImg.interval	=	setInterval ("checkLoad()", 100);
}

function checkLoad () {
	var e	=	$('mv_img');
	var ed	=	document.getElementById('mv_img_d');
	var w	=	e.getStyle('width');
	//var h	=	e.getStyle ('height');

	var r	=	$('rotate_img');
	var rd	=	document.getElementById('rotate_img_d');

	var d	=	document.getElementById('debug');

	var wr	=	r.getStyle('width');
	
	//w.replace (/px/, "");
	//h.replace (/px/, "");
	
	if (w < 100) {
		rd.style.display	=	'block';
		//e.style.display		=	'none';
		ed.style.display	=	'none';
		d.innerHTML	=	'not ready! width = ' + w + ', wr = ' + wr;
	} else {
		r.style.display	=	'none';
		rd.style.display	=	'none';
		e.style.display	=	'block';
		ed.style.display	=	'block';
		d.innerHTML	=	'ready! width = ' + w;
		clearInterval (MVImg.interval);
	}

}

function show_mv_img () {
	$('rotate_img_d').hide();
	$('mv_img_d').show();
}


function my_autocomplete (iid, did, gettype)
{
	new Ajax.Autocompleter (iid, did, "efetchOMIM.cgi?db=omim&get=" + gettype + "&id=" + document.subform.omimid.value, {});
}

function reset_ac (gettype)
{
	if (gettype == 'alvarid') {
		alvarid_ac.url	=	"efetchOMIM.cgi?db=omim&get=" + gettype + "&id=" + document.subform.omimid.value;
	} else if (gettype == 'ppmid') {
		ppmid_ac.url	=	"efetchOMIM.cgi?db=omim&get=" + gettype + "&id=" + document.subform.omimid.value;
	}
}



function reset_ac1 (gettype)
{
	if (gettype == 'alvarid') {
		alvarid_ac.url	=	"efetchOMIM.cgi?db=omim&get=" + gettype + "&id=" + document.subform.omimid.value;
		alvarid_ac.options.indicator	=	'indicator1';
		/* para1: autocomplete input, para2: selected item */
		alvarid_ac.options.afterUpdateElement	=	set_alvar_descr;
	} else if (gettype == 'ppmid') {
		ppmid_ac.url	=	"efetchOMIM.cgi?db=omim&get=" + gettype + "&id=" + document.subform.omimid.value;
		/*alvarid_ac.options				=	{indicator: 'indicator2'};*/
		ppmid_ac.options.indicator	=	'indicator2';
		ppmid_ac.options.afterUpdateElement		=	set_ppmid_descr;

	}
}


function set_alvar_descr (text, li)
{
	var sar		=	li.innerHTML.split ("\n");
	/* strip out the html tag */
	var re		=	/<\S[^><]*>/g;
	var s		=	sar[0].replace (re, "");
	document.getElementById ('alvarid').value	=	s;
	document.getElementById ('alvar_descr').innerHTML	=	sar[1] + sar[2];
}

function set_ppmid_descr (text, li)
{
	var sar		=	li.innerHTML.split ("\n");
	/* strip out the html tag */
	
	var re		=	/<\S[^><]*>/g;
	var s		=	sar[0].replace (re, "");
	
	document.getElementById ('ppmid').value	=	s;
	/*document.getElementById ('alvar_descr').innerHTML	=	sar[1] + sar[2];*/
	
	getPubMedRec (s);
}


     /* Dispatch a click event into the document tree
      *
      * Note: I would have called this function fireEvent, or
      *       dispatchEvent, however, this would have resulted in the
      *       browser-supplied functions (former in IE, latter in DOM-
      *       compliant browsers) being called. Be sure to avoid that.
      */
     function doEventDispatch() {
       var evt = null,
           elm = null;

       if(document.getElementById) {
         elm = document.getElementById('alvarid');
       }
       if(document.createEvent) {
         evt = document.createEvent('KeyEvent');
       }
       if(elm && elm.dispatchEvent && evt && evt.initMouseEvent) {
         evt.initMouseEvent(
           'click',
           true,     // Click events bubble
           true,     // and they can be cancelled
           document.defaultView,  // Use the default view
           1,        // Just a single click
           0,        // Don't bother with co-ordinates
           0,
           0,
           0,
           false,    // Don't apply any key modifiers
           false,
           false,
           false,
           0,        // 0 - left, 1 - middle, 2 - right
           null);    // Click events don't have any targets other than
                     // the recipient of the click
         elm.dispatchEvent(evt);
       }
     }

/**
 * DataEvent.js: send and receive ondataavailable events.
 * 
 * This module defines two functions, DataEvent.send() and DataEvent.receive(),
 * for dispatching synthetic dataavailable events and registering event 
 * handlers for those events.  The code is written to work in Firefox and other
 * DOM-compliant browsers and also in IE.
 * 
 * The DOM event model allows synthetic events of any type, but the IE model
 * supports only synthetic events of predefined types.  dataavailable events
 * are the most generic predefined type supported by IE and are used here.
 *
 * Note that events dispatched with DataEvent.send() are not queued the way
 * real events would be. Instead, registered handlers are invoked immediately.
 */
var DataEvent = {};

/**
 * Send a synthetic ondataavailable event to the specified target.
 * The event object will include properties named datatype and data
 * that have the specified values.  datatype is intended to be a string
 * or other primitive value (or null) identifying the type of this message, 
 * and data can be any JavaScript value, including an object or array.
 */
DataEvent.send = function(target, datatype, data) {
    if (typeof target == "string") target = document.getElementById(target);

    // Create an event object.  If we can't create one, return silently
    if (document.createEvent) {            // DOM event model
        // Create the event, specifying the name of the event module.
        // For a mouse event, we'd use "MouseEvents"
        var e = document.createEvent("Events");
        // Initialize the event object, using a module-specific init method.
        // Here we specify the event type, bubbling, and noncancelable.
        // See Event.initEvent, MouseEvent.initMouseEvent, UIEvent.initUIEvent.
        e.initEvent("dataavailable", true, false); 
    }
    else if (document.createEventObject) { // IE event model
        // In the IE event model, we just call this simple method
        var e = document.createEventObject();
    }
    else return;  // Do nothing in other browsers
    
    // Here we add some custom properties to the event object.
    // We could set existing properties as well.
    e.datatype = datatype;
    e.data = data;

    // Dispatch the event to the specified target
    if (target.dispatchEvent) target.dispatchEvent(e); // DOM 
    else if (target.fireEvent) target.fireEvent("ondataavailable", e); // IE
};

/**
 * Register an event handler for an ondataavailable event on the specified 
 * target element.
 */
DataEvent.receive = function(target, handler) {
    if (typeof target == "string") target = document.getElementById(target);
    if (target.addEventListener)
        target.addEventListener("dataavailable", handler, false);
    else if (target.attachEvent) 
        target.attachEvent("ondataavailable", handler);
};
