Mercurial > repos > jankanis > blast2html
diff NCBI Blast reference example_files/formatRes.js @ 31:344cd76f6fd2
rename NCBI reference example
author | Jan Kanis <jan.code@jankanis.nl> |
---|---|
date | Thu, 15 May 2014 16:59:18 +0200 |
parents | Blast output page example_files/formatRes.js@bad241dc701f |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NCBI Blast reference example_files/formatRes.js Thu May 15 16:59:18 2014 +0200 @@ -0,0 +1,1542 @@ +// JScript source code +/*************************new code begin *******************************************************/ + +function getHiddenFieldVal(elemName) { + var val; + var elem = document.getElementsByName(elemName); + if (elem) { + val = (elem.length > 1) ? elem[0].value : elem.value; + } + return val; +} + +function getHiddenFieldParamString(elemName) { + var ret = ""; + var val = getHiddenFieldVal(elemName); + if (val) { + ret = "&" + elemName + "=" + val; + } + return ret; +} + +function elementInViewport(el) { + if (!el) return; + var rect = el.getBoundingClientRect(); + + var myWidth = 0, myHeight = 0; + if (typeof (window.innerWidth) == 'number') { + //Non-IE + myWidth = window.innerWidth; + myHeight = window.innerHeight; + } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { + //IE 6+ in 'standards compliant mode' + myWidth = document.documentElement.clientWidth; + myHeight = document.documentElement.clientHeight; + } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { + //IE 4 compatible + myWidth = document.body.clientWidth; + myHeight = document.body.clientHeight; + } + //window.alert('Width = ' + myWidth); + //window.alert('Height = ' + myHeight); + + + //return (rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth) + //return (rect.top >= 0 && rect.left >= 0 && rect.bottom <= myHeight && rect.right <= myWidth) + return (rect.top >= 0 && rect.bottom <= myHeight); +} + +function DisplayAlignFromDescription(elem) { + var alignView = $("FormatForm").ALIGNMENT_VIEW; + if (alignView[alignView.selectedIndex].value == "Pairwise" || alignView[alignView.selectedIndex].value == "PairwiseWithIdentities") { + DisplayDynamicAlign(elem); + } + else { + location.href = "#" + elem.getAttribute("seqID"); + } +} + +//<a class="deflnDesc" hsp=<hsp_num> ind="<index>" gi="<gi>" id="deflnDesc_gi" href="#AlnHdrgi">desc</a> +//<div class="alnHdr" gi="<gi>" id="alnHdr_<index>"> +function DisplayDynamicAlign(elem) { + var currGi = elem.getAttribute("gi"); + var currInd = elem.getAttribute("ind"); + var stat = elem.getAttribute("stat"); + if (!currInd || !currGi) return; + + if (!stat || stat == "") { + //Get 4(5) aligns before currInd and 4(5) aligns after + ReadCurrentSeqAligns(currInd, 5); + } + else if (stat == "read") { + var indexes = getCurrIndexRange(currInd); + if (indexes) { + var msgID = "alnShow_" + indexes[0]; + location.href = "#" + msgID; + } + } + else { + //error status handling + } +} + + +function goToNextAlign(dtrID, next) { + var currInd = parseInt($(dtrID).getAttribute("ind")); + var rid = $("Rid").value; + nextInd = (next) ? currInd + 1 : currInd - 1; + + if ($("deflnDesc_" + nextInd)) { + currGi = $("deflnDesc_" + nextInd).getAttribute("seqID"); + scrollToGI = currGi; + if (!$("deflnDesc_" + nextInd).getAttribute("stat") || $("deflnDesc_" + nextInd).getAttribute("stat") == "") { + + if (!next) { + ReadPrevSeqAligns(currInd, 5, scrollToGI); + } + else { + //Use this indexes = wasAlignRead(nextInd); to determine insertAfterID in ReadNextAligns!!! + ReadNextSeqAligns(currInd, 5, scrollToGI); + } + + } + else { + location.href = "#" + scrollToGI; + } + } +} + +function goToDefLine(dtrID) { + if ($("psiInp")) { + var tbl = jQuery($(dtrID)).parents(".jig-ncbigrid"); //parent table + togglerID = PsiBelowThresh(tbl[0].id) ? "showDescB1" : "showDescG1"; + jQuery($(togglerID)).ncbitoggler("open"); + } +} + +/* +readAln.rid = rid; +readAln.startIndex = parseInt(currInd); +readAln.numSeq = parseInt(maxNumAligns); + +readAln.insertAfterID = insertAfterID; +readAln.seqList = giList; +readAln.scrollToSeqID = scrollToGI; +*/ +function ReadNextSeqAligns(currInd, maxNumAligns, scrollToGI) { + var lastDispIdx = 0; + var rid = $("Rid").value; + + var readAln = new Object(); + readAln.seqList = ""; //giList + readAln.rid = rid; + + currInd = parseInt(currInd); + + if (currInd != 0 && $("deflnDesc_" + currInd)) { + var par = utils.getParent($("aln_" + $("deflnDesc_" + currInd).getAttribute("seqID"))); //"alnShowReal_<ind> + //alert(par.id); + if (par) par = utils.getParent(par); //"alnShow_<ind> + //alert(par.id); + if (par) readAln.insertAfterID = par.id; + } + else { + readAln.insertAfterID = "alnStart"; + } + + + + readAln.startIndex = currInd + 1; + readAln.numSeq = maxNumAligns; + + checkIfAlnExceedsThreshold(readAln, currInd, maxNumAligns, "next"); + + readAln.scrollToSeqID = (scrollToGI && scrollToGI != "") ? scrollToGI : ""; + readAln.hspSort = 0; + ReadSeqAlignByIndex(readAln); +} + +function ReadPrevSeqAligns(currInd, maxNumAligns, scrollToGI) { + var lastDispIdx = 0; + var rid = $("Rid").value; + + var readAln = new Object(); + readAln.seqList = ""; //giList + readAln.rid = rid; + + currInd = parseInt(currInd); + + + //sets readAln.insertAfterID and returns lastDispIdx; + //Find the index of the previously displayed alignment + lastDispIdx = getPrevDisplyedAlignInfo(currInd, readAln); + + readAln.startIndex = (currInd - lastDispIdx > maxNumAligns) ? (currInd - maxNumAligns) : lastDispIdx + 1; + readAln.numSeq = currInd - readAln.startIndex; //stopIndex = currInd + + checkIfAlnExceedsThreshold(readAln, currInd, readAln.numSeq, "prev"); + + readAln.scrollToSeqID = (scrollToGI && scrollToGI != "") ? scrollToGI : $("deflnDesc_" + (currInd)).getAttribute("seqID"); + readAln.hspSort = 0; + ReadSeqAlignByIndex(readAln); +} + +//When descriptions is clicked - display maxNumAligns before currInd and maxNumAligns after currInd +function ReadCurrentSeqAligns(currInd, maxNumAligns) { + var rid = $("Rid").value; + var readAln = new Object(); + readAln.seqList = ""; //giList + readAln.rid = rid; + + currInd = parseInt(currInd); + + + //sets readAln.insertAfterID and returns lastDispIdx; + //Find the index of the previously displayed alignment + var lastDispIdx = getPrevDisplyedAlignInfo(currInd, readAln); + + //lastDispIdx = parseInt(lastDispIdx); + readAln.startIndex = (currInd - lastDispIdx > maxNumAligns) ? (currInd - maxNumAligns) : lastDispIdx + 1; + readAln.numSeq = parseInt(maxNumAligns * 2); + + checkIfAlnExceedsThreshold(readAln, currInd, maxNumAligns, "curr"); + + readAln.scrollToSeqID = $("deflnDesc_" + currInd).getAttribute("seqID"); + readAln.hspSort = 0; + ReadSeqAlignByIndex(readAln); + g_DisableAutoCheck = true; + location.href = "#alnShow_" + readAln.startIndex; +} + + + + +function setupDynHSPParams(readAln) +{ + var currSeqInd = readAln.startIndex; + hspNum = parseInt($("deflnDesc_" + currSeqInd).getAttribute("hsp")); + alnLen = parseInt($("deflnDesc_" + currSeqInd).getAttribute("len")); + var maxDispLen = parseInt($("maxDispAlnLen").value);//20000 + var minDispLen = parseInt($("minDispAlnLen").value);//2000 + if (alnLen > maxDispLen) { + var lenPerMatch = alnLen / hspNum; + readAln.AlignDbPageSize = (lenPerMatch > minDispLen) ? 1 : Math.floor(minDispLen / lenPerMatch); + readAln.AlignDbPageNum = 0; + $("deflnDesc_" + currSeqInd).setAttribute("dynHsps", readAln.AlignDbPageSize); + } +} + + + +function getCurrSeqsAlnLen(currSeqInd) +{ + var alnLen = 0; + if ($("deflnDesc_" + currSeqInd) && (!$("deflnDesc_" + currSeqInd).getAttribute("stat") || $("deflnDesc_" + currSeqInd).getAttribute("stat") == "")) { + alnLen = $("deflnDesc_" + currSeqInd).getAttribute("len"); + } + alnLen = (alnLen) ? parseInt(alnLen) : 0; + return alnLen; +} + +function checkTotalAlignLen(startIndex,stopIndex) +{ + var dispAlnLen = 0; + var maxDispLen = parseInt($("maxDispAlnLen").value); + for (var i = startIndex; i <= stopIndex; i++) { + alnLen = getCurrSeqsAlnLen(i); + if (alnLen == 0) break; + dispAlnLen += alnLen; + } + return dispAlnLen; +} +//Get total align length for seq currSeqInd and +//"curr" surrounding countSeqs seqs + current, "prev" - previous countSeqs seqs, "next" - next countSeqs seqs +function getTotalAlignLen(readAln, currSeqInd, countSeqs, dispType) +{ + var startIndex = readAln.startIndex; + var stopIndex = readAln.startIndex + readAln.numSeq - 1; + if (dispType == "curr") {//checks countSeqs before and countSeqs after current, including current + startIndex = Math.max(startIndex, currSeqInd - countSeqs); + stopIndex = Math.min(stopIndex, currSeqInd + countSeqs); + } + else if(dispType == "prev") { + startIndex = Math.max(startIndex, currSeqInd - 1 - countSeqs); + stopIndex = currSeqInd - 1; + } + else {//next + stopIndex = Math.min(stopIndex, currSeqInd + countSeqs + 1); + } + var totAlnLen = checkTotalAlignLen(startIndex,stopIndex); + return totAlnLen; +} + +function checkIfAlnExceedsThreshold(readAln,currSeqInd,maxNumAligns, dispType) +{ + var maxDispLen = parseInt($("maxDispAlnLen").value); + var totAlnLen = 0; + var exc = false; + for (var numSeq = 0; numSeq <= maxNumAligns; numSeq++) { + totAlnLen = getTotalAlignLen(readAln, currSeqInd, numSeq, dispType); + if(totAlnLen > maxDispLen) { + break; + } + } + if (totAlnLen > maxDispLen) { + if (numSeq != 0) numSeq--; + if (dispType == "curr") { + readAln.startIndex = Math.max(readAln.startIndex, currSeqInd - numSeq); + //prev + 1(curr) + next + readAln.numSeq = (currSeqInd - readAln.startIndex) + 1 + numSeq; + } + else if (dispType == "prev") { + readAln.startIndex = Math.max(readAln.startIndex, currSeqInd - 1 - numSeq); + readAln.numSeq = numSeq + 1; + } + else { //"next" - readAln.startIndex stays + readAln.numSeq = numSeq + 1; + } + + if (readAln.numSeq == 1 && $("useAlignDB") && $("useAlignDB").value == "true") { + setupDynHSPParams(readAln); + } + + exc = true; + } + return exc; +} + + +//readAln.startIndex, readAln.numSeq, readAln.scrollToSeqID,readAln.insertAfterID should be set +function ReadSeqAlignByIndex(readAln) { + var numAligns = 0; + for (var i = readAln.startIndex; i < readAln.startIndex + readAln.numSeq; i++) { + + if (!$("deflnDesc_" + i)) { + break; + } + if (!$("deflnDesc_" + i).getAttribute("stat") || $("deflnDesc_" + i).getAttribute("stat") == "") { + currGi = $("deflnDesc_" + i).getAttribute("seqFSTA"); + if (readAln.seqList != "") readAln.seqList += ","; + readAln.seqList += currGi; + numAligns++; + } + else { + break; + } + } + if (readAln.seqList != "") { + readAln.numSeq = parseInt(numAligns); + ReadSeqAlignForSeqList(readAln); + } +} + + +var g_DisplayeAlignsRanges = ""; //String in the format start1-stop1,start2-stop2... +//Find the range of indexes of displayed alignments for currAlnInd +//Returns array of 2 startIndex, stopIndex +function getCurrIndexRange(currAlinInd) { + var currRange; + var ranges = g_DisplayeAlignsRanges.split(","); + for (var i = 0; i < ranges.length; i++) { + var indexes = ranges[i].split("-"); + if (currAlinInd >= parseInt(indexes[0]) && currAlinInd <= parseInt(indexes[1])) { + currRange = indexes; + break; + } + } + return currRange; +} + + +//Find the index of the previous displayed alignment +function getPrevDisplyedAlignInfo(currInd, readAln) { + readAln.insertAfterID = "alnStart"; + lastDispIdx = 0; + for (var i = currInd - 1; i >= 1; i--) { + indexes = getCurrIndexRange(i); + if (indexes) { + lastDispIdx = indexes[1]; + readAln.insertAfterID = "alnShow_" + indexes[0]; + break; + } + } + return parseInt(lastDispIdx); +} + + +//setReadStatus +function setSeqAlnReadStatus(readAln, status) { + for (var i = readAln.startIndex; i < readAln.startIndex + readAln.numSeq; i++) { + if ($("deflnDesc_" + i)) { + jQuery($($("deflnDesc_" + i))).attr("stat", status); + if (status == "disp") { + g_MaxDisplayedIndex = (i > g_MaxDisplayedIndex) ? i : g_MaxDisplayedIndex; + } + } + } +} + +/* +readAln.rid = rid; +readAln.seqList = giList; +readAln.startIndex = parseInt(idx); +readAln.insertAfterID = insertAfterID; +readAln.numSeq = parseInt(numSeq); +readAln.scrollToSeqID = scrollToGI; +*/ +function SendReadSeqAlinRequest(readAln) { + blastUrl = "t2g.cgi"; + + var rp = new RemoteDataProvider(blastUrl); + + + rp.onSuccess = function(obj) { + if ($("alignView")) utils.removeClass($("alignView"), "hidden"); + + if ($("alnShow_" + readAln.startIndex)) { + var moreHspsLink = getNextHspsLink(readAln); + jQuery($($("alnShowReal_" + readAln.startIndex))).html(obj.responseText + moreHspsLink, { + 'widgets': ['ncbipopper', 'ncbitoggler'], + 'configs': { + 'ncbipopper': { hasArrow: true, arrowDirection: 'top' } + } + }); + setSeqAlnReadStatus(readAln, "disp"); + jQuery($("alnMsg_" + readAln.startIndex)).addClass("hidden"); + //Saves start and stop indexes of loaded alignments in global variables + saveIdxesForAutomaticLoad(readAln); + jQuery($($("alnShowReal_" + readAln.startIndex))).find(".alnHdr").each(function(index) { + var seqID = this.getAttribute("seqID"); + if(seqID) initAlignBatch(seqID); + }); + + } + + if (readAln.scrollToSeqID) { + location.href = "#" + readAln.scrollToSeqID; + } + + }; + rp.onError = function(obj) { + if ($("alignView")) utils.removeClass($("alignView"), "hidden"); + jQuery($("alnMsg_" + readAln.startIndex)).addClass("hidden"); + $("alnShowReal_" + readAln.startIndex).innerHTML = "<div class=\"erm\" id=\"erm_" + readAln.startIndex + "\">Error loading alignment ...<span class=\"db\">requests:" + this.iActiveRequests + " status:" + obj.status + + "</span><a class=\"gbd\" href=\"#\" onclick=\"ReSubmitReadSeqAligns(event," + readAln.startIndex + ")\">Try again<\a></div>"; + } + var params = constructURLParams(readAln); + if (readAln.numSeq == 1) { + params += "&TOTAL_HSPS=" + $("deflnDesc_" + readAln.startIndex).getAttribute("hsp"); + } + params += "&SEQ_LIST_START=" + readAln.startIndex; + + var formatParams = constructFormatParams(); + params += formatParams; + + //alert(params); + rp.Request(params); +} + + +function constructURLParams(readAln) { + var params; + + if ($("useAlignDB") && $("useAlignDB").value == "true") { + + var alignDbParams = "&USE_ALIGNDB=true"; + var batchID = document.getElementsByName("ALIGNDB_BATCH_ID"); + if (batchID) { + alignDbParams += getHiddenFieldParamString("ALIGNDB_BATCH_ID"); + alignDbParams += getHiddenFieldParamString("ALIGNDB_MASTER_ALIAS"); + alignDbParams += getHiddenFieldParamString("ALIGNDB_CGI_HOST"); + alignDbParams += getHiddenFieldParamString("ALIGNDB_CGI_PATH"); + } + alignDbParams += "&ALIGN_SEQ_LIST=" + readAln.seqList; + alignDbParams += "&HSP_SORT=" + readAln.hspSort; + + if (readAln.hasOwnProperty("AlignDbPageNum")) { + alignDbParams += "&ALIGNDB_PAGE_NUM=" + readAln.AlignDbPageNum; + alignDbParams += "&ALIGNDB_PAGE_SIZE=" + readAln.AlignDbPageSize; + alignDbParams += "&HSP_START=" + readAln.AlignDbPageSize * readAln.AlignDbPageNum; + } + + params = "CMD=Get&RID=" + readAln.rid + "&OLD_BLAST=false&DESCRIPTIONS=0&NUM_OVERVIEW=0&DYNAMIC_FORMAT=on" + alignDbParams; + } + else { + params = "CMD=Get&RID=" + readAln.rid + "&OLD_BLAST=false&DESCRIPTIONS=0&NUM_OVERVIEW=0&GET_SEQUENCE=on&DYNAMIC_FORMAT=on&ALIGN_SEQ_LIST=" + readAln.seqList + "&HSP_SORT=" + readAln.hspSort; + } + if ($("phiPtInd")) { + params += "&PHI_PTTRN_INDEX=" + $("phiPtInd")[$("phiPtInd").selectedIndex].value; + } + return params; +} + +/* +readAln.rid = rid; +readAln.seqList = giList; +readAln.startIndex = parseInt(idx); +readAln.insertAfterID = insertAfterID; +readAln.numSeq = parseInt(numSeq); +readAln.scrollToSeqID = scrollToGI; +*/ +/*1. Draw div with id="alnShow_index" class ="alnMsg" with the message listing gis nad indexes +2. Insert another div with id="alnShowReal_index and class="alnMsgR" +3. For "alnShow_index" set atrr indexes="startInd-stopInd" +4. Set global g_MaxReadMessageIndex - max index of displayed seqalign ??? - check this +5. Add string "startInd-stopInd" to g_DisplayeAlignsRanges - comma separated indexes +6. Send read request +*/ + +function ReadSeqAlignForSeqList(readAln) { + var text = "<div id=\"alnShow_" + readAln.startIndex + "\" class=\"alnMsg\"><div class=\"alnMsgS\" id=\"alnMsg_" + readAln.startIndex + "\">Loading alignment...<span class=\"db\"> for sequences " + readAln.seqList; + var stopIndex = readAln.startIndex + readAln.numSeq - 1; + var useAlignDB = ($("useAlignDB") && $("useAlignDB").value == "true") ? "AlignDB=on " : ""; + text += " " + useAlignDB + "Reading indexes " + readAln.startIndex + "-" + stopIndex + "</span></div>"; + text += "<div id=\"alnShowReal_" + readAln.startIndex + "\" class=\"alnMsgR\"></div></div>"; + var debugControl = "<div id=\"debug\"></div>"; + if (!$("debug")) { + jQuery($($("descriptions"))).before(debugControl); + } + if (!$("alnShow_" + readAln.startIndex)) { + jQuery($($(readAln.insertAfterID))).after(text); + jQuery($($("alnShow_" + readAln.startIndex))).attr("indexes", readAln.startIndex + "-" + stopIndex); + jQuery($($("alnShow_" + readAln.startIndex))).attr("seqlist", readAln.seqList); + g_MaxReadMessageIndex = (readAln.startIndex > g_MaxReadMessageIndex) ? readAln.startIndex : g_MaxReadMessageIndex; + setSeqAlnReadStatus(readAln, "read"); + $("debug").innerHTML += ", " + useAlignDB + "Reading indexes " + readAln.startIndex + "-" + stopIndex; + + if (g_DisplayeAlignsRanges != "") g_DisplayeAlignsRanges += ","; + g_DisplayeAlignsRanges += readAln.startIndex + "-" + stopIndex; + + SendReadSeqAlinRequest(readAln); + } + else if ($("alnShowReal_" + readAln.startIndex).innerHTML.indexOf("Error") != -1) { + jQuery($("alnMsg_" + readAln.startIndex)).removeClass("hidden"); + jQuery($("erm_" + readAln.startIndex)).remove(); + SendReadSeqAlinRequest(readAln); + } +} + + +function ReSubmitReadSeqAligns(e,currInd) { + var rid = $("Rid").value; + if ($("alnShow_" + currInd)) { + var indexRange = jQuery($("alnShow_" + currInd)).attr("indexes"); + var range = indexRange.split("-"); + + + var readAln = new Object(); + readAln.seqList = ""; //giList + readAln.rid = rid; + readAln.seqList = jQuery($("alnShow_" + currInd)).attr("seqlist"); + readAln.startIndex = parseInt(range[0]); + readAln.numSeq = parseInt(range[1]) - parseInt(range[0]) + 1; + readAln.hspSort = 0; + ReadSeqAlignForSeqList(readAln); + utils.preventDefault(e); + } +} + + +var g_MaxReadMessageIndex = 0; //alnShow_idx with the message, deflnDesc_idx with stat="read" +var g_MaxDisplayedIndex = 0; //deflnDesc_idx with stat="disp" - last one in the set of N +var g_DisableAutoCheck = false; + +var g_autoStartIdx = new Array(); +var g_autoStopIdx = new Array(); + +function saveIdxesForAutomaticLoad(readAln) { + var stopIndex = readAln.startIndex + readAln.numSeq - 1; + g_autoStartIdx.push(readAln.startIndex); //1,20,25 + g_autoStopIdx.push(stopIndex); //4,24,29 + $("debug").innerHTML += ", displaying indexes " + readAln.startIndex + "-" + stopIndex; +} + +function getNextHspsLink(readAln) +{ + var moreHspsLink = "" + if (readAln.hasOwnProperty("AlignDbPageNum")) { + var nextPageNum = readAln.AlignDbPageNum + 1; + var currHspInd = readAln.AlignDbPageSize * nextPageNum; + var argstring = readAln.startIndex + "," + currHspInd; + var currGi = $("deflnDesc_" + readAln.startIndex).getAttribute("seqId"); + var accs = $("deflnDesc_" + readAln.startIndex).getAttribute("accs"); + var totalHsps = $("deflnDesc_" + readAln.startIndex).getAttribute("hsp"); + var prevHspInd = readAln.AlignDbPageSize * nextPageNum; + var segs = (prevHspInd + 1) + "-" + (prevHspInd + readAln.AlignDbPageSize); + var moreHspsID = "nxHsp" + currGi + "_" + (prevHspInd + 1); + + moreHspsLink = $("dynHspTmpl").innerHTML.replace("@moreHspsID@", moreHspsID); + moreHspsLink = moreHspsLink.replace(/@accs@/g, accs); + moreHspsLink = moreHspsLink.replace("@argstring@", argstring); + moreHspsLink = moreHspsLink.replace(/@segs@/g, segs); + moreHspsLink = moreHspsLink.replace("@totalHSP@", totalHsps); + moreHspsLink = moreHspsLink.replace(/@alignDbPageSize@/g, readAln.AlignDbPageSize); + moreHspsLink = moreHspsLink.replace("@aln_prev_num@", prevHspInd); + moreHspsLink = moreHspsLink.replace("@alnSeqGi@", currGi); + } + return moreHspsLink; +} + + +function ReadNextHSPSet(currSeqInd, currHSPNum) { + var readAln = new Object(); + + readAln.rid = $("Rid").value; + readAln.seqList = $("deflnDesc_" + currSeqInd).getAttribute("seqFSTA"); + readAln.gi = $("deflnDesc_" + currSeqInd).getAttribute("seqId"); + dynHsps = $("deflnDesc_" + currSeqInd).getAttribute("dynHsps"); + readAln.startIndex = currSeqInd; + readAln.numSeq = 1; + if (dynHsps) { + readAln.AlignDbPageNum = parseInt(currHSPNum) / parseInt(dynHsps); + readAln.AlignDbPageSize = parseInt(dynHsps); //number of HSps to retrieve + } + if (currHSPNum != 0) { + readAln.scrollToSeqID = "hsp" + +readAln.gi + "_" + (parseInt(currHSPNum) + 1); + readAln.insertAfterID = "ar_" + readAln.gi + "_" + currHSPNum; + } + var sortLink = $("sa_" + readAln.gi); + readAln.hspSort = (sortLink) ? parseInt(sortLink[sortLink.selectedIndex].value) : 0; + SendReadSeqAlinSortHSPRequest(readAln); +} + +function ReadNextHSPSetEvt(e, currSeqInd, currHSPNum) { + ReadNextHSPSet(currSeqInd, currHSPNum); + utils.preventDefault(e); +} + + + +function checkAutoAlignArray() { + var stop = false; + var start = false; + var currAlignViewPos = $("alignView").getBoundingClientRect().top; + if (currAlignViewPos < g_alignViewPos) {//scrolling down + g_alignViewPos = currAlignViewPos; + if (g_DisableAutoCheck) { + g_DisableAutoCheck = false; + return; + } + for (i = 0; i < g_autoStopIdx.length; i++) { + if (elementInViewport($("alnHdr_" + $("deflnDesc_" + g_autoStopIdx[i]).getAttribute("seqID")))) { + //alert("Reading more aligns scrolling down!"); + var nextInd = parseInt(g_autoStopIdx[i] + 1); + var currInd = g_autoStopIdx[i]; + if ($("deflnDesc_" + nextInd) && (!$("deflnDesc_" + nextInd).getAttribute("stat") || $("deflnDesc_" + nextInd).getAttribute("stat") == "")) { + ReadNextSeqAligns(currInd, 5); + stop = true; + break; + } + } + } + if (stop) g_autoStopIdx.splice(i, 1); //delete index from the array + } + else if (currAlignViewPos > g_alignViewPos) {//scrolling up + g_alignViewPos = currAlignViewPos; + //here maybe return if autoStop found!!! + /* commenting automic read when scroll up */ + for (i = 0; i < g_autoStartIdx.length; i++) { + if (elementInViewport($("alnHdr_" + $("deflnDesc_" + g_autoStartIdx[i]).getAttribute("seqID")))) { + //alert("Reading more aligns scrolling up!"); + var currInd = g_autoStartIdx[i]; + //Check for condition here if go there at all!!! Check if do the same thing as for ReadNext!!!! + if (currInd > 1) { + ReadPrevSeqAligns(currInd, 5); + start = true; + break; + } + } + } + if (start) g_autoStartIdx.splice(i, 1); + } + /*end of comment*/ +} + +var g_alignViewPos = 0; + +function checkAutoAlignLoad() { + + + checkAutoAlignArray(); + + if (jQuery($($(window))).scrollTop() + jQuery($($(window))).height() >= jQuery($($(document))).height() - 100) { + //alert("bottom!"); + + if ($("alnShowReal_" + g_MaxReadMessageIndex) && $("alnShowReal_" + g_MaxReadMessageIndex).innerHTML != "") { + //if(!$("alnShow_" + maxReadMessageIndex)) {//g_MaxReadMessageIndex + ReadNextSeqAligns(g_MaxDisplayedIndex, 5); + } + } +} + + +function GetPatternLocResults() +{ + form = $("results"); + if (!form.PHI_PTTRN_INDEX) { + var el = document.createElement("input"); + el.name = "PHI_PTTRN_INDEX"; + el.value = $("phiPtInd")[$("phiPtInd").selectedIndex].value; + form.appendChild(el); + } + else { + form.PHI_PTTRN_INDEX.value = $("phiPtInd")[$("phiPtInd").selectedIndex].value; + } + form.submit(); +} + +function goToNextHSP(elem, next) { + var par = jQuery(elem).parent(); //parent span with class="alnParLinks" + var parts = par[0].id.split("_"); //"hsp<seqid>_hspnum "hsp207524544_2" + if (parts[0].indexOf("nxHsp") != -1) { + parts[0] = parts[0].replace("nxHsp", "hsp"); + } + nextID = (next) ? parts[0] + "_" + (parseInt(parts[1]) + 1) : parts[0] + "_" + (parseInt(parts[1]) - 1) + + gotoElem = jQuery($(nextID)); + if (gotoElem[0]) { + a = jQuery(gotoElem).offset(); + window.scroll(0, a.top); + } + + else { + retrieveNextHSP(parts[0],parts[1]); + } + +} + + +//parts[0]//hsp<seqid>, parts[1] hspnum +function retrieveNextHSP(currLinkID, currHSPNum) +{ + var desLineID = currLinkID.replace("hsp", "dtr_"); //tr id + var currSeqInd, totalHsps; + jQuery($($(desLineID))).find(".deflnDesc").each(function(index) { + currSeqInd = parseInt(this.getAttribute("ind")); + totalHsps = parseInt(this.getAttribute("hsp")); + dynHsps = this.getAttribute("dynHsps"); + }); + currHSPNum = parseInt(currHSPNum); + if (currHSPNum < totalHsps && dynHsps) { + ReadNextHSPSet(currSeqInd, currHSPNum); + } +} +/********Adding those functions back to formatRes.js to identify Uncaught ReferenceError: getUrlCompForCheckedField is not defined error********************************/ +function getUrlCompForEntryField(elem) { + var url = ""; + if (elem && elem.value != "") { + url = "&" + elem.name + "=" + escape(elem.value); + } + return url; +} + + +function getUrlCompForCheckedField(elem) { + var url = ""; + if (elem && elem.checked) { + url = "&" + elem.name + "=" + elem.value; + } + return url; + +} + +function getUrlCompForOptionsField(elem) { + var url = ""; + if (elem) { + url = "&" + elem.name + "=" + elem[elem.selectedIndex].value; + } + return url; +} +/****************************************/ + +function constructFormatParams() { + var formatParams = ""; + + if ($("queryList")) { + formatParams += "&QUERY_INDEX=" + $("queryList")[$("queryList").selectedIndex].value; + } + + + formatParams += getUrlCompForCheckedField($("FormatForm").SHOW_LINKOUT); + formatParams += getUrlCompForCheckedField($("FormatForm").SHOW_CDS_FEATURE); + formatParams += getUrlCompForCheckedField($("FormatForm").NCBI_GI); + formatParams += getUrlCompForOptionsField($("FormatForm").ALIGNMENT_VIEW); + formatParams += getUrlCompForOptionsField($("FormatForm").MASK_CHAR); + formatParams += getUrlCompForOptionsField($("FormatForm").MASK_COLOR); + formatParams += getUrlCompForEntryField($("FormatForm").EXPECT_LOW); + formatParams += getUrlCompForEntryField($("FormatForm").EXPECT_HIGH); + formatParams += getUrlCompForEntryField($("FormatForm").PERC_IDENT_LOW); + formatParams += getUrlCompForEntryField($("FormatForm").PERC_IDENT_HIGH); + formatParams += getUrlCompForEntryField($("FormatForm").LINE_LENGTH); + + + formatParams += getHiddenFieldParamString("BUILD_NAME"); + + var serviceType = ""; + if ($("serviceType").value == "sra") { + serviceType = "sra"; + } + else if ($("clientType").value == "TMSmart_restricted") { + serviceType = "restricted"; + } + if (serviceType != "") { + formatParams += "&BOBJSRVC=" + serviceType; + } + if ($("currQuery").value != "") { + formatParams += "&CURR_QUERY_ID=" + $("currQuery").value; + } + + return formatParams; +} + +//readAln.seqList contains one gi only for this +function SendReadSeqAlinSortHSPRequest(readAln) { + blastUrl = "t2g.cgi"; + var rp = new RemoteDataProvider(blastUrl); + + + rp.onSuccess = function(obj) { + var moreHspsLink = (readAln.hasOwnProperty("AlignDbPageNum")) ? getNextHspsLink(readAln) : ""; + var alnHtml = obj.responseText + moreHspsLink; + initHSPRequest(readAln, obj.responseText + moreHspsLink,false); + if (readAln.scrollToSeqID) { + location.href = "#" + readAln.scrollToSeqID; + } + }; + rp.onError = function(obj) { + var currHspInd = (readAln.hasOwnProperty("AlignDbPageNum")) ? readAln.AlignDbPageSize * readAln.AlignDbPageNum : 0; + var msgID = "erm_" + readAln.gi + "_" + (currHspInd + 1); + if (!$(msgID)) { + var msg = "<div class=\"erm\" att=\"1\" id=\"" + msgID + "\">Error loading alignment ...<span class=\"db\">status:" + obj.status + + "</span><a class=\"gbd\" href=\"#\" onclick=\"ReadNextHSPSetEvt(event," + readAln.startIndex + "," + currHspInd + + ")\">Try again <span class=\"attmt\"></span> <\a></div>"; + initHSPRequest(readAln, msg, true); + } + else { + var attNum = parseInt($(msgID).getAttribute("att")) + 1; + $(msgID).setAttribute("att", attNum); + jQuery($(msgID)).find(".attmt").each(function(index) { + jQuery(this).html(", attempt " + attNum); + }); + } + } + + var params = constructURLParams(readAln); + if (readAln.AlignDbPageSize) { + params += "&TOTAL_HSPS=" + $("deflnDesc_" + readAln.startIndex).getAttribute("hsp"); + } + params += "&SORT_ONE_ALN=on"; + var formatParams = constructFormatParams(); + + params += formatParams; + + //alert(params); + rp.Request(params); +} +function initHSPRequest(readAln, alnHtml, err) { + var currHspInd = (readAln.hasOwnProperty("AlignDbPageNum")) ? readAln.AlignDbPageSize * readAln.AlignDbPageNum : 0; + if (currHspInd != 0) { + readAln.insertAfterID = "ar_" + readAln.gi + "_" + currHspInd; + jQuery($(readAln.insertAfterID)).after(alnHtml); + moreHspsID = "nxHsp" + readAln.gi + "_" + (currHspInd + 1); + jQuery($(moreHspsID)).remove(); + if (!err) { + errMsgID = "erm_" + readAln.gi + "_" + (currHspInd + 1); + jQuery($(errMsgID)).remove(); + } + } + else { + jQuery($("alnAll_" + readAln.gi)).html(alnHtml); + } +} + +function SortHSPAlnSel(e, sortLink) {//example id="sa_207524544" + var readAln = new Object(); + + + var desLineID = sortLink.id.replace("sa", "dtr"); //tr id + var seqInd; + + jQuery($($(desLineID))).find(".deflnDesc").each(function(index) { + seqInd = this.getAttribute("ind"); + }); + + ReadNextHSPSet(parseInt(seqInd), 0); +} + + +function configDescriptions(e,btn,dlgId) +{ + var suffix = PsiBelowThresh(dlgId); + var colmnsInfId = "cfcDsInf" + suffix; + var tblID = "dscTable" + suffix; //"dscTable[_psiw]" + var showAllColId = "shcl" + suffix; + var chkBoxes = $C("checkbox", "type", $(dlgId), "input"); + if (!utils.hasClass(btn, "cnc")) $(colmnsInfId).value = ""; + for (i = 0; i < chkBoxes.length; i++) { + var check; + if (utils.hasClass(btn, "cnc")) {//cancel + if ($(colmnsInfId).value.indexOf(chkBoxes[i].value) != -1 && !chkBoxes[i].checked) { + check = true; + } + else if ($(colmnsInfId).value.indexOf(chkBoxes[i].value) == -1 && chkBoxes[i].checked) { + check = false; + } + } + else if (utils.hasClass(btn, "rdf") && !chkBoxes[i].checked) { + check = true; + } + if (typeof (check) != 'undefined') { + chkBoxes[i].checked = check; + showHideCol(tblID,parseInt(chkBoxes[i].value), !check); + } + if (!utils.hasClass(btn, "cnc")) { + if (chkBoxes[i].checked) { //OK + if ($(colmnsInfId).value != "") $(colmnsInfId).value += ","; + $(colmnsInfId).value += chkBoxes[i].value; + } + } + } + if ($(colmnsInfId).value != $(colmnsInfId).getAttribute("defval")) {//defval = "2,3,4,5,6,7,8" + jQuery($(showAllColId)).removeClass("hidden"); + } + else { + jQuery($(showAllColId)).addClass("hidden"); + } + + var chConfig = $("cfcDsSave").value != $(colmnsInfId).value; + + var cfds = document.getElementsByName("CONFIG_DESCR"); + if (cfds) { + for (i = 0; i < cfds.length; i++) { + cfds[i].value = $(colmnsInfId).value; + } + } + $("cfcDsSave").value = $(colmnsInfId).value; + if (chConfig) SaveConfigTable(); + jQuery(document.body).click(); + utils.preventDefault(e); +} + + + +function initDescConfig() +{ + initConfigColumns("dsConfig"); + if ($("psiw") && utils.hasClass($("psiw"), "shown")) { + initConfigColumns("dsConfig_psiw"); + } +} + + +function initConfigColumns(cnfDlgID) +{ + var suffix = PsiBelowThresh(cnfDlgID); + //cnfDlgID is "dsConfig[_psiw]" + var colmnsInfId = "cfcDsInf" + suffix; + var tblID = "dscTable" + suffix; //"dscTable[_psiw]" + var showAllColId = "shcl" + suffix; + + if (navigator.userAgent.match(/ie/i)) { + if ($("FormatForm").NCBI_GI.checked || $("serviceType").value == "sra") { + jQuery($(tblID)).find("th.c1").each(function(index) { + db = getHiddenFieldVal("DATABASE"); + var width = (db.match(/WGS/i) || db.match(/Whole_Genome_Shotgun_contigs/i)) ? "16em" : "14em"; + jQuery(this).css("width", width); + }); + } + } + + jQuery($(tblID)).find("tr.first").each(function(index) { + jQuery(this).find("a.dcs").each(function(index) { + jQuery(this).bind("click", function(e) { checkConfig(this); }); + }); + }); + + jQuery($(cnfDlgID)).find("button").each(function(index) { + jQuery(this).bind("click", function(e) { configDescriptions(e, this, cnfDlgID); }); + }); + + + jQuery($(cnfDlgID)).bind("click", function(e) { e.stopPropagation(); }); + + $(colmnsInfId).value = getHiddenFieldVal("CONFIG_DESCR"); + if ($(colmnsInfId).value == "" || $(colmnsInfId).value == "undefined") { + $(colmnsInfId).value = $(colmnsInfId).getAttribute("defval"); + } + if ($(colmnsInfId).value != $(colmnsInfId).getAttribute("defval")) {//defval = "2,3,4,5,6,7,8" + jQuery($(showAllColId)).removeClass("hidden"); + } + else { + jQuery($(showAllColId)).addClass("hidden"); + } + var chkBoxes = $C("checkbox", "type", $(cnfDlgID), "input") + for (i = 0; i < chkBoxes.length; i++) { + jQuery(chkBoxes[i]).bind("click", configColumn); + if ($(colmnsInfId).value.indexOf(chkBoxes[i].value) != -1) { + chkBoxes[i].checked = true; + } + else { + //jQuery($(tblID)).ncbigrid("hideColumn", chkBoxes[i].value); + showHideCol($(tblID), chkBoxes[i].value, true); + } + } +} +function showAllCol(e,elem) +{ + var suffix = PsiBelowThresh(elem.id); + var rdf = "dscRsDf" + suffix; + jQuery($(rdf)).click();//click "restore defaults' + utils.preventDefault(e); +} + + +function configColumn() { + var suffix = PsiBelowThresh(this.id); + var tblID = "dscTable" + suffix; //"dscTable[_psiw]" + + cCls = "c" + this.value; + if (this.checked) {//show + showHideCol(tblID,parseInt(this.value), false); + } + else { + showHideCol(tblID,parseInt(this.value), true); + } +} + +function showHideCol(tblID, columnIndex, hide) { + + if ($("Transcr")) { + colHidden = utils.hasClass($("c" + columnIndex), "ui-ncbigrid-column-hidden"); + hide = hide && !colHidden; + show = !hide && colHidden; + } + else { + show = !hide; + } + if (hide) { + jQuery($(tblID)).ncbigrid("hideColumn", columnIndex); + } + else if (show) { + jQuery($(tblID)).ncbigrid("showColumn", columnIndex); + } + if ($("Transcr") && (hide || show) ) { + var colsp = parseInt($("Transcr").getAttribute("colspan")); + colsp = (hide) ? colsp - 1 : colsp + 1; + $("Transcr").setAttribute("colSpan", colsp); + if ($("GnmSeq")) $("GnmSeq").setAttribute("colSpan", colsp); + } +} + +function checkConfig(lnk) { + var cnfCol = "&CONFIG_DESCR=" + $("cfcDsSave").value; + lnk.href = lnk.href + cnfCol + "#sort_mark"; +} + +function DisplayAlignFromGraphics(seqID,e) //SeqID = gi if exists +{ + var dflLineLinks = $C(seqID, "gi", document, "a"); + for (i = 0; i < dflLineLinks.length; i++) { + jQuery(dflLineLinks[i]).click(); + break; + } + location.href = dflLineLinks[i].href; +} + + + +function initDescSelect() +{ + + jQuery("#cntDesc").find("a").each(function(index) { + jQuery(this).bind("click", configDescrSelect); + }); + jQuery("#cntSelN").click(); + jQuery("#descTblCtrl").find("a[view]").each(function(index) { + jQuery(this).bind("click", DisplaySelectedView); + }); + if ($("psiw") && utils.hasClass($("psiw"), "shown")) { + jQuery("#cntDesc_psiw").find("a").each(function(index) { + jQuery(this).bind("click", configDescrSelect); + }); + jQuery("#cntSelN_psiw").click(); + jQuery("#descTblCtrl_psiw").find("a[view]").each(function(index) { + jQuery(this).bind("click", DisplaySelectedView); + }); + } + + + //jQuery("#dsConfig").bind("click", function(e) { e.stopPropagation(); });?? + +} + +function DisplaySelectedView(e) { + if (this.getAttribute("view") == "graph") { //seqviewer + ViewSelectedSeqViewer(e,this); + } + else { + if (this.getAttribute("view") == "tree") { //seqviewer + $("scrWidth").value = screen.width; + $("scrHeight").value = screen.height; + } + ViewSelectedSeqsEx(e, this); + } +} + +function PsiBelowThresh(elemID) +{ + var suffix = ""; + if (elemID.indexOf("_psiw") != -1) { + suffix = "_psiw"; + } + return suffix; +} + +function ViewSelectedSeqsEx(e,elem) { + var sbmForm = elem.getAttribute("frm"); + var seqList = elem.getAttribute("seqList"); + + var cnfElem = utils.getParent(elem); //.cnf div + var suffix = PsiBelowThresh(cnfElem.id); + var tblID = "dscTable" + suffix; + + $(seqList).value = createSelseqString(tblID,true); + $(seqList).value = $(seqList).value.replace(/ti:/g, ""); //For traces + if ($(seqList).value.indexOf("dbSNP") != -1) { + $(seqList).value = $(seqList).value.replace(/dbSNP:rs/g, ""); //For snp + elem.href = $(sbmForm).action + $(seqList).value; + elem.target = "new"; + } + else { + $(sbmForm).submit(); + utils.preventDefault(e); + } +} + +function ViewSelectedSeqsTree(e) { + $("scrWidth").value = screen.width; + $("scrHeight").value = screen.height; +} + +function initSeqViewerGet(seqList) { + if (seqList.length >= 2000) { + seqList = seqList.substr(0,2000); + lastComma = seqList.lastIndexOf(","); + seqList = seqList.substr(0,lastComma); + } + $("seqViewParams").name = "RID"; + $("seqViewParams").value = $("ridParam").value + "[" + seqList + "]"; +} + +function ViewSelectedSeqViewer(e, elem) +{ + var cnfElem = utils.getParent(elem); //.cnf div + var suffix = PsiBelowThresh(cnfElem.id); + var tblID = "dscTable" + suffix; + + //change to false when new verison of seqVier is installed in production + var seqList = createSelseqString(tblID, false); + $("sbmtGraphics").action = $("seqViewUrl").value; + + var rp = new RemoteDataProvider("url2nc.cgi"); + rp.onSuccess = function(obj) { + var jsnResp = JSON.parse(obj.responseText); + ncid = jsnResp.ncid; + + if (ncid != "") { + $("seqViewParams").name = "rkey"; + $("seqViewParams").value = ncid; + } + else { + initSeqViewerGet(seqList); + } + $("sbmtGraphics").submit(); + }; + rp.onError = function(obj) { + initSeqViewerGet(seqList); + $("sbmtGraphics").submit(); + utils.preventDefault(e); + } + var params = $("ridParam").value + "[" + seqList + "]"; + rp.Request(params, "POST"); + utils.preventDefault(e); +} + +function configDescrSelect(e) { + var sel = this.getAttribute("sel"); + if (sel) { + var selNum = 0; + var check = (sel == "all") ? true : false; + + var suffix = PsiBelowThresh(this.id); + var tblID = "dscTable" + suffix; + var toolbarID = "descTblCtrl" + suffix; + var selElID = "slcNum" + suffix; + + jQuery($(tblID)).find("input[type='checkbox'].cb").each(function(index) { + jQuery(this)[0].checked = check; + if (check) selNum++; + }); + enableDescrLinks(selNum, toolbarID, selElID); + } + utils.preventDefault(e); +} + + + +function enableDescrLinks(selNum, toolbarID, selElID) { + jQuery($(toolbarID)).find("a[minSlct]").each(function(index) { + var minSelected = this.getAttribute("minSlct"); + minSelected = parseInt(minSelected); + if (selNum >= minSelected) { + this.removeAttribute("disabled"); + } + else { + this.setAttribute("disabled", "disabled"); + } + }); + $(selElID).innerHTML = selNum; +} + + + +function configDescrLinks(e, elem) +{ + + ncbi.sg.ping(elem, "click", elem.checked ? "checked=true" : "checked=false"); + var par = jQuery(elem).parents(".jig-ncbigrid");//parent table + if (par) { + var suffix = PsiBelowThresh(par[0].id); + var tblID = "dscTable" + suffix; + var toolbarID = "descTblCtrl" + suffix; + var selElID = "slcNum" + suffix; + + var currSelNum = parseInt($(selElID).innerHTML); + var selNum = elem.checked ? currSelNum + 1 : currSelNum - 1; + enableDescrLinks(selNum, toolbarID, selElID); + } +} +/***Download code begin****/ + +function initDownLoadPopup(dwnDialog) { + + jQuery(dwnDialog).find("button").each(function(index) { + jQuery(this).bind("click", execDownLoad); + }); + + jQuery(dwnDialog).bind("click", function(e) { e.stopPropagation(); }); +} + +function initDescDownLoad() { + initDownLoadPopup($("dsDownload")); + + if ($("psiw") && utils.hasClass($("psiw"), "shown")) { + initDownLoadPopup($("dsDownload_psiw")); + } +} + +function initAlignDownLoad(navObj) +{ + var seqID = navObj.seqID; + var dwnDialog = $("dlgDwnl_" + seqID); + jQuery(dwnDialog).find("button").each(function(index) { + jQuery(this).bind("click", execDownLoad); + }); + + var dwnFSTW = $("dwFST_" + seqID);//whole seq + var dwnFSTAl = $("dwFSTAl_" + seqID);//aligned regions + + if(dwnFSTW) dwnFSTW.setAttribute("seqfsta", navObj.currSeqID); + if(dwnFSTAl) dwnFSTAl.setAttribute("seqfsta", navObj.currSeqID); + + jQuery(dwnDialog).bind("click", function(e) { e.stopPropagation(); }); +} + + +function execDownLoad(e) { + if (!utils.hasClass(this, "cnc")) { + par = utils.getParent(this); + dwnDialog = utils.getParent(par); //parent dialog with popDl class + var descr = (this.id == "dw_cont" || this.id == "dw_cont_psiw") ? true : false; + jQuery(dwnDialog).find("input").each(function(index) { + if (this.checked) { + submitDownLoad(this, descr); + } + }); + } + jQuery(document.body).click(); + utils.preventDefault(e); +} + +function submitDownLoad(radioElem, descr) { + var toolURL = radioElem.getAttribute("url"); + if (toolURL) { + if (descr) { + var getGi = radioElem.getAttribute("getGi"); + getGi = (getGi) ? true : false; + + var tblID = "dscTable"; + var suffix = PsiBelowThresh(radioElem.id); + tblID += suffix; + + $("selDnSeqs").value = createSelseqString(tblID,getGi); + } + else { + var seqfsta = radioElem.getAttribute("seqfsta"); + $("selDnSeqs").value = (seqfsta) ? seqfsta : radioElem.getAttribute("getGi"); + } + var addParams = ""; + if (radioElem.getAttribute("addParam")) { + addParams = addDwnlParams(); + } + var submitName = radioElem.getAttribute("sbName") + $("selDnSeqs").name = (submitName) ? submitName : "ALIGN_SEQ_LIST"; + $("dwdlSubmit").action = toolURL + addParams; + $("dwdlSubmit").submit(); + } + else { + var sbFunction = radioElem.getAttribute("sbFunc"); + if (sbFunction) { + eval(sbFunction + "(radioElem, descr)"); + } + } +} + + +function initDownLoadFSTA(radioElem, descr) +{ + if (descr) { + + var tblID = "dscTable"; + var suffix = PsiBelowThresh(radioElem.id); + tblID += suffix; + + $("sbmtFASTA").ALIGN_SEQ_LIST.value = createSelseqString(tblID,false); + } + else { + $("sbmtFASTA").ALIGN_SEQ_LIST.value = radioElem.getAttribute("seqfsta"); + } + $("sbmtFASTA").DOWNLOAD_TYPE.value = radioElem.getAttribute("fstaDWType"); + + $("sbmtFASTA").DATABASE.value = getHiddenFieldVal("DATABASE"); + if ($("useAlignDB") && $("useAlignDB").value == "true") {//temp checkbox + var batchID = document.getElementsByName("ALIGNDB_BATCH_ID"); + if (batchID) { + $("sbmtFASTA").ALIGNDB_BATCH_ID.value = getHiddenFieldVal("ALIGNDB_BATCH_ID"); + $("sbmtFASTA").ALIGNDB_MASTER_ALIAS.value = getHiddenFieldVal("ALIGNDB_MASTER_ALIAS"); + $("sbmtFASTA").ALIGNDB_CGI_HOST.value = getHiddenFieldVal("ALIGNDB_CGI_HOST"); + $("sbmtFASTA").ALIGNDB_CGI_PATH.value = getHiddenFieldVal("ALIGNDB_CGI_PATH"); + } + } + $("sbmtFASTA").submit(); +} + +function createSelseqString(tblID,getGi) { + var selSeqs = ""; + jQuery($(tblID)).find("input[type='checkbox'].cb").each(function(index) { + if (jQuery(this)[0].checked) { + if (selSeqs != "") selSeqs += ","; + if (getGi) { + selSeqs += jQuery(this)[0].value; + } + else { + var linkID = jQuery(this)[0].id.replace("chk", "deflnDesc"); + selSeqs += $(linkID).getAttribute("seqFSTA"); + } + } + }); + return selSeqs; +} + +/***Download code end****/ + +/***Init navigation code begin **/ + +function initNavigation(navObj) { + initNextAlnLink(navObj, true); + initNextAlnLink(navObj, false); +} + + +function initNavInfo(navObj) { + var currInd = parseInt($("dtr_" + navObj.seqID).getAttribute("ind")); + nextInd = currInd + 1; + prevInd = currInd - 1; + + navObj.currSeqID = ""; + navObj.nextSeqID = ""; + navObj.prevSeqID = ""; + + if ($("deflnDesc_" + nextInd)) { + navObj.nextSeqID = $("deflnDesc_" + nextInd).getAttribute("accs"); + if(navObj.nextSeqID =="") navObj.nextSeqID = $("deflnDesc_" + nextInd).getAttribute("seqFSTA"); + } + if ($("deflnDesc_" + prevInd)) { + navObj.prevSeqID = $("deflnDesc_" + prevInd).getAttribute("accs"); + if (navObj.prevSeqID == "") navObj.prevSeqID = $("deflnDesc_" + prevInd).getAttribute("seqFSTA"); + } + if ($("deflnDesc_" + currInd)) { + navObj.currSeqID = $("deflnDesc_" + currInd).getAttribute("seqFSTA"); + } +} + + +function initNextAlnLink(navObj, next) { + + var nextLinkEl = (next) ? $("alnNxt_" + navObj.seqID) : $("alnPrv_" + navObj.seqID); + var nextSeqid = (next) ? navObj.nextSeqID : navObj.prevSeqID; + + if (nextLinkEl) { + if (nextSeqid != "") { + var text = (next) ? "next" : "previous"; + nextLinkEl.setAttribute("title", "Go to " + text + " alignment for " + nextSeqid); + } + else { + nextLinkEl.setAttribute("disabled", "disabled"); + } + } +} +function scan(link) { + var init = link.getAttribute("init"); + if (!init) { + ncbi.sg.scanLinks(link); + link.setAttribute("init","on"); + } +} + +function initWidth(seqID) { + var lineLengthElem = $("FormatForm").LINE_LENGTH; + var lineLength = parseInt(lineLengthElem[lineLengthElem.selectedIndex].value); + if (parseInt(lineLengthElem.getAttribute("defval")) == lineLength) return; + + var relWidth = (lineLength > 90) ? "12%" : "15%"; + var charWidth = (navigator.userAgent.match(/ie/i)) ? 8 : 7; + lineLength = (lineLength + parseInt(17)) * charWidth; + var width = lineLength + "px"; + jQuery($("alnAll_" + seqID)).find("div.dflLnk").each(function(index) { + jQuery(this).css("width", width); + }); + jQuery($("alnAll_" + seqID)).find("table.alnParams").each(function(index) { + jQuery(this).css("width", width); + }); + jQuery($("relInf_" + seqID)).css("width", relWidth); +} + + +/***Init navigation code end **/ +function initAlignBatch(seqID) +{ + var navObj = new Object(); + navObj.seqID = seqID; + initNavInfo(navObj); + + initAlignDownLoad(navObj); + initNavigation(navObj); + ncbi.sg.scanLinks($("alnNxt_" + seqID)); + ncbi.sg.scanLinks($("alnPrv_" + seqID)); + if ($("serviceType").value == "vecscreen") { + utils.addClass($("alnDsc_" + seqID), "hidden"); + } + ncbi.sg.scanLinks($("alnDwnld_" + seqID)); + jQuery($("csLinks_" + seqID)).find("a").each(function(index) { + ncbi.sg.scanLinks(this); + }); + jQuery($("relInf_" + seqID)).find("a").each(function(index) { + ncbi.sg.scanLinks(this); + }); + jQuery($("rng_" + seqID)).find("a").each(function(index) { + ncbi.sg.scanLinks(this); + }); + jQuery($("dln_" + seqID)).find("a").each(function(index) { + ncbi.sg.scanLinks(this); + }); + initWidth(seqID); +/* + jQuery($("alnHdr_" + seqID)).find("a").each(function(index) { + ncbi.sg.scanLinks(this); + }); + jQuery($("aln_" + seqID)).find("a").each(function(index) { + ncbi.sg.scanLinks(this); + }); +*/ +} + +function SaveConfigTable() { + blastUrl = "fmtsave.cgi"; + + + var rp = new RemoteDataProvider(blastUrl); + + + rp.onSuccess = function(obj) { + //alert("success"); + }; + rp.onError = function(obj) { + //alert("error"); + } + + var program = getHiddenFieldVal("PROGRAM"); + var rid = getHiddenFieldVal("RID"); + var blastSpec = getHiddenFieldVal("BLAST_SPEC"); + var params = "CMD=Get&RID=" + rid + "&ViewReport=on&PROGRAM=" + program + "&SAVE_INDV_FRM_OPTION=on&CONFIG_DESCR=" + $("cfcDsSave").value; + if(blastSpec) { + params += "&BLAST_SPEC=" + blastSpec; + } + rp.Request(params,"POST"); +} + +function removeRID() { + var rid = document.getElementsByName("RID"); + for (var i = 0; i <= rid.length; i++) { + jQuery(rid[i]).remove(); + } +} + +function initAdvancedView() +{ + if ($("dsConfig")) { + + var alnView = getHiddenFieldVal("ALIGNMENT_VIEW"); + if (alnView == "Pairwise" || alnView == "PairwiseWithIdentities") { + var rid = getHiddenFieldVal("RID"); + ReadNextSeqAligns(0, 5); + g_alignViewPos = $("alignView").getBoundingClientRect().top; + utils.addEvent(window, "scroll", checkAutoAlignLoad, false); + } + list = $("phiPtInd"); + if (list) { + utils.addEvent(list, "change", GetPatternLocResults, false); + } + initDescConfig(); + initDescSelect(); + initDescDownLoad(); + if ($("psiInp")) { + var nextIter = document.getElementsByName("NEXT_I"); + for (var i = 0; i < nextIter.length; i++) { + utils.addEvent(nextIter[i], "click", removeRID, false); + } + } + } +} + +//takes care of jQuery calls to elements that have dots in id like id= "SRA34456.3.4" +function initjQry() +{ + var oldCreate = jQuery.ui.ncbipopper.prototype._create; + jQuery.ui.ncbipopper.prototype._create = function() { + var destSelector = this.options.destSelector || this.options.sourceSelector || this.element.prop("hash"); + this.options.destSelector = destSelector.replace(/\./g, "\\."); + oldCreate.apply(this, arguments); + } +} +utils.addEvent(window, + "load", initAdvancedView, + false); + +initjQry() + +/* If user agent has "safari" in it, include safari-specific stylesheet. */ +if (navigator.userAgent.match(/ie/i)) { + document.write("<link rel='stylesheet' type='text/css' href='css/ie-descriptions.css' media='screen'/>"); +} +/*****************************new code end*********************************************************************/