////////////////////////////////////////////////////////////////////////////////////////////////////
//
// target picture object (<img> )
//  : document.SHOWPIC.mapviewimg
//
// require : prototype.js
//
// reqiure definition of pre defined param.
//  ex)
//function pdPrm(){	
//	pdPrm.frmLSp = 140;
//	pdPrm.frmW = 640;
//	pdPrm.aChrVer = 33;
//	pdPrm.chrmID = 1;
//	pdPrm.chrmStrt = 31365479;
//	pdPrm.chrmEnd = 31639054;
//}
// new pdPrm();
//
// required instance :
// 
// var tnfObj = new TinyNumberFormat();
// var irmObj = new InputRegionModifier();
// var pgrObj = new ParseGenomeRgnStr();
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
// functions
////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------------------
// dir : number
// target : MVCHRSTRT, MVCHREND
//------------------------------------------------------------------------------------------
function shiftRgn(strtElm, endElm, dir){


	if(dir != 1 && dir != -1){
		alert("Illegal direction : " + dir);
		return false;
	}

	try {
		var s_bp = tnfObj.parseNumber(strtElm.value);
		var e_bp = tnfObj.parseNumber(endElm.value);
		
		irmObj.shiftRgn(s_bp, e_bp, dir);
		strtElm.value = tnfObj.addFigure(irmObj.getRgnStart());
		endElm.value = tnfObj.addFigure(irmObj.getRgnEnd());
		
	}
	catch (e){
		alert (e);
	}
	return true;
}
//------------------------------------------------------------------------------------------
//
// target : MVCHRSTRT, MVCHREND
//------------------------------------------------------------------------------------------
function expRgn(strtElm, endElm, _prcnt){

	try {
		var prcnt = tnfObj.parseNumber(_prcnt);
		var s_bp = tnfObj.parseNumber(strtElm.value);
		var e_bp = tnfObj.parseNumber(endElm.value);
		
		irmObj.expandRgn(s_bp, e_bp, prcnt);
		strtElm.value = tnfObj.addFigure(irmObj.getRgnStart());
		endElm.value = tnfObj.addFigure(irmObj.getRgnEnd());
		
	}
	catch (e){
		alert (e);
	}
	return true;
}
//------------------------------------------------------
// reqiure definition of pre defined param.
//  function pdPrm()
//------------------------------------------------------
function getRealBp(msOnPicX){

	var showLen = pdPrm.chrmEnd - pdPrm.chrmStrt + 1;
	var realXp = msOnPicX - pdPrm.frmLSp; 
	var realBp = ((showLen * realXp) / pdPrm.frmW) + pdPrm.chrmStrt;

	return realBp;
}
//------------------------------------------------------
// functions for window buttons
//------------------------------------------------------
function slctShowReads(f){
	f.SHOWNIGREAD.selectedIndex = 1;
	f.SHOWDDBJBAC.selectedIndex = 1;
	f.SHOWRKREAD.selectedIndex = 1;
	f.SHOWNIGRBC.selectedIndex = 1;
	return true;
}
function slctNotShowReads(f){
	f.SHOWNIGREAD.selectedIndex = 0;
	f.SHOWDDBJBAC.selectedIndex = 0;
	f.SHOWRKREAD.selectedIndex = 0;
	f.SHOWNIGRBC.selectedIndex = 0;
	return true;
}
///////////////////////////////////////////////////////////////////////////////
// option table ctrl
///////////////////////////////////////////////////////////////////////////////
function showRgnPrm(){
	$('RgnPrm').show();
	$('ShwPrm').hide();
	$('ReadPrm').hide();
	$('InDelPrm').hide();
}
function showShwPrm(){
	//$('RgnPrm').hide();
	$('ShwPrm').show();
	$('ReadPrm').hide();
	$('InDelPrm').hide();
}
 function showReadPrm(){
	//$('RgnPrm').hide();
	$('ShwPrm').hide();
	$('ReadPrm').show();
	$('InDelPrm').hide();
}
function showInDelPrm(){
	//$('RgnPrm').hide();
	$('ShwPrm').hide();
	$('ReadPrm').hide();
	$('InDelPrm').show();
}
function chgInDelChkBx(chkType){
	var LineTypes = ['SHOWLINET', 'SHOWLINEA', 'SHOWLINEF' , 'SHOWLINEGF', 'SHOWLINEOTHER'];
	var SineTypes = ['SHOWSINEB1', 'SHOWSINEB2', 'SHOWSINEOTHER'];
	var LtrTypes = ['SHOWLTRIAP', 'SHOWLTROERVK', 'SHOWLTRERVL', 'SHOWLTRERV1', 'SHOWLTRMALR'];
	var OtherTypes = ['SHOWOTHERINDEL'];
        /*
	var chkType = false;
	if($F('SHOWINDEL') == \"a\" || $F('SHOWINDEL') == \"o\")
		chkType = true;
	else
		chkType =  false;
        */
	LineTypes.each( function(types) {
		$(types).checked = chkType;
	} );
	SineTypes.each( function(types) {
		$(types).checked = chkType;
	} );
	LtrTypes.each( function(types) {
		$(types).checked = chkType;
	} );
	OtherTypes.each( function(types) {
		$(types).checked = chkType;
	} );
	return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// capture muose move event
////////////////////////////////////////////////////////////////////////////////////////////////////
var curShwId;
//var objStat = new Array();
var clrObj = new Array();
//------------------------------------------------------
// show definition functions.
//------------------------------------------------------
function shwId(evt, t_id, stat){
	//
	// return, if target is null
	//
	if(t_id == "")
		return true;
	//
	// clear timeout process if it is proceeding.
	//
	if(clrObj[t_id] != 0){
		clearTimeout(clrObj[t_id]);
		clrObj[t_id] = 0;
	}
	
	if(curShwId == t_id){
		setElmntVisible(t_id);
	}
	else{
		var mx = getAbsMsPtX(evt);
		var my = getAbsMsPtY(evt);

		var pageRightSidePtX = getPageMsPtX(evt);
		if(pageRightSidePtX - mx < 250)
			mx = pageRightSidePtX - 250;
//		if(750 - eval(mx) < 250)
//			mx = eval(mx) - (250 - (750 - eval(mx)));
		//mx = eval(mx) - 5;
		mx = eval(mx) + 10; 
		my = eval(my) + 5;

		setElmntVisiblePos(t_id, mx, my);
	}
	curShwId = t_id;
}
//------------------------------------------------------
// hide object by id, delay 500ms
//------------------------------------------------------
function ltHidId(t_id, stat){

	clearTimeout(clrObj[t_id]);
	clrObj[t_id] = setTimeout("hidId('" + t_id + "', " + stat + ")" , 500 );
}
//------------------------------------------------------
// hide object
//------------------------------------------------------
function hidId(t_id, stat){

//	if(objStat[t_id] != stat){
//		return true;
//	}

	setElmntInvisible(t_id);

//	objStat[t_id] = 0;
	clrObj[t_id] = 0;
//	curShwId = "";
}
//------------------------------------------------------
//
//------------------------------------------------------
function getCoordinateOnPic(evt){

	var x_axis = getOnObjMsPtX(evt, document.SHOWPIC.mapviewimg);
	var y_axis = getOnObjMsPtY(evt, document.SHOWPIC.mapviewimg);

	document.SHOWPIC.OPX.value = x_axis;
	document.SHOWPIC.OPY.value = y_axis;
}
///////////////////////////////////////////////////////////
var showFirstLineFlg = 0;
var firstLineX = 0;
//------------------------------------------------------
// show Obj, that is tracing mouse.
//------------------------------------------------------
function showPlyRgnAlrt(evt){

	//
	//var mx = getAbsMsPtX(evt) + 10;
	//var my = getAbsMsPtY(evt) + 5;
	//setElmntVisiblePos("PLY", mx, my);

	// show realBp
	var x_axis = getOnObjMsPtX(evt, document.SHOWPIC.mapviewimg);
	var realBp = Math.floor(getRealBp(x_axis));
	//document.SHOWPIC.BP.value = realBp;
	var msPtBpArea = document.getElementById("msptbparea");
	msPtBpArea.innerHTML = "<h3 style='display:inline;'>cursor point : " + realBp + " bp</h3>";

	var mpRgnCmmntArea = document.getElementById("mprgncmmnt");
	mpRgnCmmntArea.innerHTML = "<span style=\"font-weight:bold; font-size:.8em; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On scale region : &nbsp;&nbsp;&nbsp;Click two point for zoom in view region.</span>"
							+ "<br>"
							+ "<span style=\"font-weight:bold; font-size:1em; color:red; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On read coverage region : &nbsp;&nbsp;Click to browse alignment view.</span>";
}
//------------------------------------------------------
//
//------------------------------------------------------
function showRgnCutLine(evt){
	//
	// get coordinate on pic.
	//
	var x_axis = getOnObjMsPtX(evt, document.SHOWPIC.mapviewimg);
	var y_axis = getOnObjMsPtY(evt, document.SHOWPIC.mapviewimg);
	var onPageX = getAbsMsPtX(evt);

	setElmntVisiblePos('LINE1', onPageX, document.SHOWPIC.mapviewimg.offsetTop);

	// show realBp
	var realBp = Math.floor(getRealBp(x_axis));
	//document.SHOWPIC.BP.value = realBp;
	var msPtBpArea = document.getElementById("msptbparea");
	msPtBpArea.innerHTML = "<h3 style='display:inline;'>cursor point : " + realBp + " bp</h3>";

	var mpRgnCmmntArea = document.getElementById("mprgncmmnt");
	mpRgnCmmntArea.innerHTML = "<span style=\"font-weight:bold; font-size:1em; color:red; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On scale region : &nbsp;&nbsp;Click two point for zoom in view region.</span>"
							+ "<br>"
							+ "<span style=\"font-weight:bold; font-size:.8em; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On read coverage region : &nbsp;&nbsp;&nbsp;Click to browse alignment view.</span>";
}
//------------------------------------------------------
//
//------------------------------------------------------
function hidePlyRgnAlrt(evt){
	setElmntInvisible("PLY");
/*	
	var msPtBpArea = document.getElementById("msptbparea");
	msPtBpArea.innerHTML = "<h3 style='display:inline;'>cursor point : </h3>";
*/
	var mpRgnCmmntArea = document.getElementById("mprgncmmnt");
	mpRgnCmmntArea.innerHTML = "<span style=\"font-weight:bold; font-size:.8em; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On scale region : &nbsp;&nbsp;&nbsp;Click two point for zoom in view region."
							+ "</span><br>"
							+ "<span style=\"font-weight:bold; font-size:.8em; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On read coverage region : &nbsp;&nbsp;&nbsp;Click to browse alignment view.</span>";
}
//------------------------------------------------------
//
//------------------------------------------------------
function hideRgnCutLine(evt){
	setElmntInvisible("LINE1");
/*
	var msPtBpArea = document.getElementById("msptbparea");
	msPtBpArea.innerHTML = "<h3 style='display:inline;'>cursor point : </h3>";
*/
	var mpRgnCmmntArea = document.getElementById("mprgncmmnt");
	mpRgnCmmntArea.innerHTML = "<span style=\"font-weight:bold; font-size:.8em; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On scale region : &nbsp;&nbsp;&nbsp;Click two point for zoom in view region."
							+ "</span><br>"
							+ "<span style=\"font-weight:bold; font-size:.8em; font-family: 'Arial', 'Helvetica', 'sans-serif';\">On read coverage region : &nbsp;&nbsp;&nbsp;Click to browse alignment view.</span>";
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// capture muose button event
////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------
// chromosome region clickable map
//------------------------------------------------------
function setRgnCutLine(evt){
	//----------------------------------
	// get coordinate on pic.
	//----------------------------------
	var x_axis = getOnObjMsPtX(evt, document.SHOWPIC.mapviewimg);
	var y_axis = getOnObjMsPtY(evt, document.SHOWPIC.mapviewimg);
	var onPageX = getAbsMsPtX(evt);

	var realBp = Math.floor(getRealBp(x_axis));

	//----------------------------------
	// show first line
	//----------------------------------
	if(showFirstLineFlg == 0){
		setElmntVisiblePos('LINE2', onPageX, document.SHOWPIC.mapviewimg.offsetTop);
		showFirstLineFlg = 1;
		firstLineX = x_axis;
		document.SHOWPIC.MVCHRSTRT.value = realBp;
	}
	//----------------------------------
	// hide first line
	//----------------------------------
	else if(Math.abs(firstLineX - x_axis) < 5){
		setElmntInvisible('LINE2');
		showFirstLineFlg = 0;
		firstLineX = 0;
	}
	//----------------------------------
	// show second line and submit()
	//----------------------------------
	else{
		setElmntVisiblePos('LINE3', onPageX, document.SHOWPIC.mapviewimg.offsetTop);
		if(document.SHOWPIC.MVCHRSTRT.value > realBp){
			document.SHOWPIC.MVCHREND.value = document.SHOWPIC.MVCHRSTRT.value;
			document.SHOWPIC.MVCHRSTRT.value = realBp;
		}
		else{
			document.SHOWPIC.MVCHREND.value = realBp;
		}

//alert("set *" + document.SHOWPIC.MVCHRSTRT.value + " : " + document.SHOWPIC.MVCHREND.value + "*");
//setElmntInvisible('LINE2');
//setElmntInvisible('LINE3');
//showFirstLineFlg = 0;
//firstLineX = 0;
		//document.SHOWPIC.submit();
		showPicSubmitEvent();
//		parent.ParamFrame.showPic(parent.ParamFrame.document.mapViewPrm);
	}
}
//------------------------------------------------------
// read region clickable map
// document.SHOWPIC.mapviewimg : img 
// document.JMPADTL
//------------------------------------------------------
function jmpPlyRgnInf(evt){

	var x_axis = getOnObjMsPtX(evt, document.SHOWPIC.mapviewimg);
	var y_axis = getOnObjMsPtY(evt, document.SHOWPIC.mapviewimg);
	var absX = getAbsMsPtX(evt);
	var absY = getAbsMsPtY(evt);

//	alert("you clicked on abs(" + absX + ", " + absY + ") / onPic(" + x_axis + ", " + y_axis + ").");
	
	var realBp = Math.floor(getRealBp(x_axis));
	var span = 250;
	var trgtSBp = realBp - span + 1;
	var trgtEBp = realBp + span;
	
	document.JMPADTL.ACHRVER.value = pdPrm.aChrVer;
	document.JMPADTL.AINFVER.value = pdPrm.aInfVer;
	document.JMPADTL.CHRMID.value = pdPrm.chrmID;
	document.JMPADTL.CHRMSTRT.value = trgtSBp;
	document.JMPADTL.CHRMEND.value = trgtEBp;
	document.JMPADTL.submit();
/*
	var uri = "cgi-bin/adetail.cgi?ACHRVER=" + pdPrm.aChrVer
        		+ "&CHRMID=" + pdPrm.chrmID + "&CHRMSTRT=" + trgtSBp + "&CHRMEND=" + trgtEBp;
	var adtl = window.open(uri);
	adtl.focus();
*/	
	return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// SHOWPIC sumit event
// target : document.SHOWPIC
////////////////////////////////////////////////////////////////////////////////////////////////////
function showPicSubmitEvent (){
	f = document.SHOWPIC;
	var showRgnBp = document.SHOWPIC.MVCHREND.value - document.SHOWPIC.MVCHRSTRT.value + 1;
	//-------------------------------------------------
	// check 	
	//-------------------------------------------------
	//var readArgs = ["SHOWNIGREAD", "SHOWDDBJBAC", "SHOWRKREAD", "SHOWNIGRBC"];
	var warningMessage = "";
	if ((f.SHOWNIGREAD != null && f.SHOWDDBJBAC != null
		&& f.SHOWRKREAD != null && f.SHOWNIGRBC != null)
		&& showRgnBp > pdPrm.showReadMapLimitBp
		&& (f.SHOWNIGREAD.value != "n" || f.SHOWDDBJBAC.value != "n"
			|| f.SHOWRKREAD.value != "n" || f.SHOWNIGRBC.value != "n")){
		warningMessage = warningMessage
			+ "\nToo large size presentation to show read map info.\n"
			+ "(must be shorter than " + pdPrm.showReadMapLimitBp + " bp)\n"
			+ "Disable to show read map info.\n";
		 
		f.SHOWNIGREAD.value = "n";
		f.SHOWDDBJBAC.value = "n";
		f.SHOWRKREAD.value = "n";
		f.SHOWNIGRBC.value = "n";
	}
	if(f.SHOWSGRMIRNA != null && showRgnBp > pdPrm.showSgrMiRnaShowRgnDtlLimitBp && f.SHOWSGRMIRNA.value != "n"){
		warningMessage = warningMessage
			+ "\nToo large size presentation to show miRNA map info.\n"
			+ "(must be shorter than " + pdPrm.showSgrMiRnaShowRgnDtlLimitBp + " bp)\n"
			+ "Disable to show miRNA map info.\n";
		f.SHOWSGRMIRNA.value = "n";
	}
	if(f.SHOWNIGSHPRB != null && showRgnBp > pdPrm.showSgrNigShPrbShowRgnDtlLimitBp && f.SHOWNIGSHPRB.value != "n"){
		warningMessage = warningMessage
			+ "\nToo large size presentation to show array probe map info.\n"
			+ "(must be shorter than " + pdPrm.showSgrNigShPrbShowRgnDtlLimitBp + " bp)\n"
			+ "Disable to show array probe map info.\n";
		f.SHOWNIGSHPRB.value = "n";
	}
	//-------------------------------------------------
	// check 	
	//-------------------------------------------------
	if(warningMessage.length > 0){
		alert(warningMessage);
	}
	//-------------------------------------------------
	// submit
	//-------------------------------------------------
	document.SHOWPIC.submit();
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// End of javascript 
////////////////////////////////////////////////////////////////////////////////////////////////////
