
dojo.require("dojo.parser");
dojo.require("dojo.cookie");
dojo.require("dojo.dnd.Source");
dojo.require("dojo.dnd.Container");
dojo.require("dojo.dnd.Manager");
dojo.require("dijit.form.Button");
dojo.require("dijit.Dialog");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.Menu");
dojo.require("dijit.TitlePane");
dojo.require("dijit.Toolbar");
dojo.require("dijit.Tooltip");

var ciproDataItems = new Array( "Sequence and Motif",
                                "Expression Profile",
                                "Structual Model",
                                "BLAST",
                                "TM Prediction",
                                "Localization",
                                "2D PAGE",
                                "OMIM",
                                "3DPL"
                              );

function indexinit()
{
    var obj = dijit.byId("menucipro");
    dojo.connect(obj.domNode,"onmouseenter",obj,"_toggleDropDown");

    obj = dijit.byId("menuservice");
    dojo.connect(obj.domNode,"onmouseenter",obj,"_toggleDropDown");

    obj = dijit.byId("menucionalinks");
    dojo.connect(obj.domNode,"onmouseenter",obj,"_toggleDropDown");

    obj = dijit.byId("menurelatedlinks");
    dojo.connect(obj.domNode,"onmouseenter",obj,"_toggleDropDown");
}

function searchFullText()
{
    var keywordElement = document.getElementById('fulltextsearchtext');
    var searchvalue = "keyword=" + keywordElement.value;

    changeResultPage("searchresult.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function searchProteinSequence()
{
    var lfElement = document.getElementById('proteinsequencelf');
    var ltElement = document.getElementById('proteinsequencelt');
    var searchvalue = "lf=" + lfElement.value + "&lt=" + ltElement.value;
    changeResultPage("searchresult.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function searchMWPI()
{
    var mwfElement = document.getElementById('mwf');
    var mwtElement = document.getElementById('mwt');
    var pifElement = document.getElementById('pif');
    var pitElement = document.getElementById('pit');
    var searchvalue = "mwf=" + mwfElement.value
                   + "&mwt=" + mwtElement.value
                   + "&pif=" + pifElement.value
                   + "&pit=" + pitElement.value;

    changeResultPage("searchresult.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function searchFreeText()
{
    var keywordElement = document.getElementById('freetextsearchtext');
    var searchvalue = "keyword=" + keywordElement.value;

    changeResultPage("searchresult.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function searchExpressionProfile()
{
    var formElement = document.getElementById('epsearchform');
    var i = 0;
    var count = 0;
    var searchvalue = "";
    for(i= 0 ; i < formElement.elements['expression'].length ; i++)
    {
        if((formElement.elements[i].name == 'expression')&&(formElement.elements[i].checked == true))
        {
            if(count != 0)
            {
                searchvalue = searchvalue + "&";
            }
            searchvalue = searchvalue + "expression=" + formElement.elements[i].value;
            count++;
        }
    }

    changeResultPage("searchresult.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function searchHomolog()
{
    var queryElement = document.getElementById('homologquery');
    var idx = queryElement.selectedIndex;
    var selectQuery = queryElement.options[idx].value;
    var idElement = document.getElementById('homologid');
    var evalueElement = document.getElementById('homologevalue');
    var searchvalue = "query="+selectQuery+"&evalue="+evalueElement.value+"&id="+idElement.value

    changeResultPage("searchresult.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}


function searchBlast()
{
    var seqElement = document.getElementById('blastseq');
    var formElement     = document.getElementById('blastsearchform');
    var i;
    var progValue = "";
    for(i= 0 ; i < formElement.blastprog.length ; i++)
    {
        if(formElement.blastprog[i].checked == true)
        {
            progValue = "" + formElement.blastprog[i].value;
            break;
        }
    }
    var filterValue = "";
    for(i= 0 ; i < formElement.blastfilter.length ; i++)
    {
        if(formElement.blastfilter[i].checked == true)
        {
            filterValue = "" + formElement.blastfilter[i].value;
            break;
        }
    }
//    var mask_lcValue = "";
//    for(i= 0 ; i < formElement.blastmask_lc.length ; i++)
//    {
//        if(formElement.blastmask_lc[i].checked == true)
//        {
//            mask_lcValue = "" + formElement.blastmask_lc[i].value;
//            break;
//        }
//    }
    var matrixElement = document.getElementById('blastmatrix');
    var idx = matrixElement.selectedIndex;
    var selectMatrix = matrixElement.options[idx].value;
  //  var typeElement = document.getElementById('blasttype');

    var searchvalue =  "seq="     + seqElement.value
                    + "&prog="    + progValue
                    + "&filter="  + filterValue
  //                  + "&mask_lc=" + mask_lcValue
                    + "&matrix="  + selectMatrix;
  //                + "&type="    + typeElement.value;
    changeResultPage("searchblast.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function searchFragment()
{
    var fragmentElement = document.getElementById('fragmentsequence');
    var searchvalue = "fragment="+fragmentElement.value;
   
    changeResultPage("searchresult.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function searchPerms()
{
    var searchvalue = "";
    var formElement     = document.getElementById('permssearchform');
    var queryElement    = document.getElementById('permsquery');
    var modElement      = document.getElementById('permsmod');
    var i;
    var modValue = "";
    for(i= 0 ; i < formElement.permsmod.length ; i++)
    {
        if(formElement.permsmod[i].checked == true)
        {
            modValue = modValue + "&mod=" + formElement.permsmod[i].value;
        }
    }

    var cmodElement     = document.getElementById('permscmod');
    var cmodValue     = "";
    for(i= 0 ; i < formElement.permscmod.length ; i++)
    {
        if(formElement.permscmod[i].checked == true)
        {
            cmodValue = "" + formElement.permscmod[i].value;
            break;
        }
    }
    var msfElement      = document.getElementById('permsmsf');
    var mstElement      = document.getElementById('permsmst');
    var pifElement      = document.getElementById('permspif');
    var pitElement      = document.getElementById('permspit');
    var accuracyElement = document.getElementById('permsaccuracy');
    var contamElement   = document.getElementById('permscontam');
    var contamValue = "";
    if(formElement.permscontam.checked == true)
    {
        contamValue = "&contam=" + formElement.permscontam.value;
    }
    var trypsinElement  = document.getElementById('permstrypsin');
    var trypsinValue     = "";
    for(i= 0 ; i < formElement.permstrypsin.length ; i++)
    {
        if(formElement.permstrypsin[i].checked == true)
        {
            trypsinValue = "" + formElement.permstrypsin[i].value;
            break;
        }
    }
//    var othersElement   = document.getElementById('permsothers');
    var appearElement   = document.getElementById('permsappear');
    var idx = appearElement.selectedIndex;
    var selectAppear = appearElement.options[idx].value;

    searchvalue = "query="       + queryElement.value
                +  modValue
                + "&cmod="       + cmodValue
                + "&msf="        + msfElement.value
                + "&mst="        + mstElement.value
                + "&pif="        + pifElement.value
                + "&pit="        + pitElement.value
                + "&accuracy="   + accuracyElement.value
                +  contamValue
                + "&trypsin="    + trypsinValue
//                + "&others="     + othersElement.value
                + "&Find=Find"
                + "&appear="     + selectAppear;

    changeResultPage("searchperms.cgi?" + encodeURI(searchvalue));
    viewSearchTab();
}

function selectTab(tabId)
{
    var tabContainer = dijit.byId('maindiv');
    var selTab = dijit.byId(tabId);
    tabContainer.selectChild(selTab);
}

function changeResultPage(url)
{
    var resultPane = dijit.byId('searchresult');
    resultPane.setHref(url);
}

function changeResultPageRow(url,row)
{
    var resultPane = dijit.byId('searchresult');
    var jumpurl = url + row;
    resultPane.setHref(jumpurl);
}

function viewSearchTab()
{
    var tabContainer = dijit.byId('maindiv');
    var searchTab = dijit.byId('searchtab');
    tabContainer.selectChild(searchTab);
}

function viewPage(pageUrl,pageName)
{
    var tabContainer = dijit.byId('maindiv');
    var homeTab = dijit.byId('hometab');
    homeTab.setHref(pageUrl);
    // set tab title
    homeTab.controlButton.containerNode.innerHTML = pageName;
    homeTab.startup();
    tabContainer.selectChild(homeTab);
}

function saveView(source, nodes, copy, target)
{
    var viewareaName = "viewarea";
    var count = 0;
    saveCookieViewInfo(viewareaName, count, target);
    return true;
}

function saveNoView(source, nodes, copy, target)
{
    var noviewareaName = "noviewarea";
    var noviewcount = 1000;
    saveCookieViewInfo(noviewareaName, noviewcount, target);
    return true;
}

function saveCookieViewInfo(areaName, areaCount, target)
{
    var count = areaCount;
    var orgIdStr = target.node.id;
    var idStr = orgIdStr.toLowerCase();
    idStr = idStr.toLowerCase();
    if(idStr.length >= areaName.length)
    {
        idStr = idStr.substring(0,areaName.length);
        if(idStr == areaName)
        {
            for(i = 0 ; i < target.node.childNodes.length ; i++ )
            {
                var nodeName = target.node.childNodes[i].nodeName;
                if(nodeName.toUpperCase()== "DIV")
                {
                    var child = target.node.childNodes[i];
                    dojo.cookie(child.childNodes[0].childNodes[2].data , count    , {expires: 365});
                    count++;
                }
            }
            var tooltipareaId = orgIdStr.replace(areaName,"");
            createTooltipDiv(tooltipareaId);
        }
    }
}

function nodeCreator(item, hint)
{
    var divElement = document.createElement("div");
    
    var divElement2 = document.createElement("div");
    divElement2.className = "data-item";
    divElement.appendChild(divElement2);
    
    var aElement = document.createElement("a");
    var detailParam = "id=" + item.ciproid + "&c=" + item.id;
    detailParam = encodeURI(detailParam);
    aElement.setAttribute("href" , "viewdetail.cgi?" + detailParam );
    aElement.setAttribute("target" , "_blank");
    divElement2.appendChild(aElement);
    
    var imgElement = document.createElement("img");
    var srcParam = "id=" + item.ciproid + "&c=" + item.id + "&tf=thumb";
    srcParam = encodeURI(srcParam);
    var imageName = "viewicon.cgi?" + srcParam;
    imgElement.setAttribute("src" , imageName );
    imgElement.className = "data-img";
    imgElement.setAttribute("id" , item.id + item.ciproid );
    aElement.appendChild(imgElement);

    var brElement = document.createElement("br");
    divElement2.appendChild(brElement);
    var textnode = document.createTextNode(item.id);
    divElement2.appendChild(textnode);

    var type = ["view"];
    return {node: divElement, data: item , type : type };
}

function createViewAreaDiv(ciproId,array)
{
    if(ciproId == null)
    {
        ciproId = "";
    }
    var viewareaName = "viewarea" + ciproId;
    var viewareaElement = new dojo.dnd.Source(viewareaName , {creator: nodeCreator , accept: ["view"]});
    var count = 0;
    while( count <= ciproDataItems.length )
    {
        if( array[count] != null )
        {
            viewareaElement.insertNodes(false, [ {id: array[count] , ciproid: ciproId } ] );
        }
        count++
    }
    viewareaElement.forInItems(function(item, id, map){
        dojo.addClass(id, item.type[0]);
    });
    
    var noviewareaName = "noviewarea" + ciproId;
    var noviewareaElement = new dojo.dnd.Source(noviewareaName , {creator: nodeCreator , accept: ["view"] });
    count = 1000;
    while( count <= ciproDataItems.length + 1000 )
    {
        if( array[count] != null )
        {
            noviewareaElement.insertNodes(false, [ {id: array[count] , ciproid: ciproId } ] );
        }
        count++
    }
    noviewareaElement.forInItems(function(item, id, map){
        dojo.addClass(id, item.type[0]);
    });
    
    dojo.connect(viewareaElement, "onDndDrop", "saveView");
    dojo.connect(noviewareaElement, "onDndDrop", "saveNoView");
}

function checkCookieData(idx,val)
{
    var ret = val;
    if(idx != null)
    {
        ret = idx;
    }
    return ret;
}

function addTab(ciproId)
{
    var tabTitle = "CIPRO" + ciproId;
    if (ciproId.search(/KH/i) != -1) {
        tabTitle = ciproId;
    }
    var tabContainer = dijit.byId('maindiv');
    var tabChildren = tabContainer.getChildren();
    for( i = 0 ; i < tabChildren.length ; i++ )
    {
        if(tabChildren[i].controlButton.containerNode.innerHTML == tabTitle)
        {
            tabContainer.selectChild(tabChildren[i]);
            return;
        }
    }

    var pageUrl = "viewdata.cgi?id=" + ciproId;
    var contentPane = new dijit.layout.ContentPane({ 
                                 href:pageUrl,
                                 closable: true,
                                 title: tabTitle
                      });
    contentPane.onLoad = function(){initDataView(ciproId);};
    tabContainer.addChild(contentPane);
    tabContainer.selectChild(contentPane);
    tabContainer.layout();
}

function initDataView(ciproId)
{
    var array = new Array();
    for( i = 0 ; i < ciproDataItems.length ; i++ )
    {
        var idx = dojo.cookie( ciproDataItems[i] );
        idx = checkCookieData( idx , i );
        array[idx] = ciproDataItems[i];
    }
    createViewAreaDiv(ciproId,array);
    createTooltipDiv(ciproId);
}

function createTooltipDiv(ciproId)
{
    var divElement = document.createElement("div");
    for( i = 0 ; i < ciproDataItems.length ; i++ )
    {
        var tooltipElement = document.createElement("div");
        tooltipElement.setAttribute("dojoType" , "dijit.Tooltip");
        tooltipElement.setAttribute("style" , "visibility: hidden;");
        var connectIdValue = ciproDataItems[i] + ciproId;
        tooltipElement.setAttribute("connectId" , connectIdValue);
        var orgimgElement = document.createElement("img");
        var orgimgParam = "id=" + ciproId + "&c=" + ciproDataItems[i];
        orgimgParam = encodeURI(orgimgParam);
        var orgimgName = "viewicon.cgi?" + orgimgParam;
        orgimgElement.setAttribute("src" , orgimgName );
        tooltipElement.appendChild(orgimgElement);
        divElement.appendChild(tooltipElement);
    }
    var tooltipareaId = "tooltiparea" + ciproId;
    var tooltipareaDivElement = document.getElementById(tooltipareaId);
    for( i = tooltipareaDivElement.childNodes.length - 1 ; i >= 0 ; i-- )
    {
        tooltipareaDivElement.removeChild(tooltipareaDivElement.childNodes[i]);
    }
    tooltipareaDivElement.appendChild(divElement);
    dojo.parser.parse(tooltipareaDivElement);
}

function showPermsDetail(idx)
{
    // tab
//    var formId = 'permsdetailform' + idx;
//    dojo.io.iframe.send({
//        url: "permsdetail.cgi",
//        method: "post",
//        handleAs: "html",
//        handle: function(data, ioArgs)
//        {
//            var tabContainer = dijit.byId('maindiv');
//            var contentPane = new dijit.layout.ContentPane({ 
//                                             id       : "permstab",
//                                             closable : true,
//                                             title    : "PerMS"
//                                });
//            tabContainer.addChild(contentPane);
//            tabContainer.selectChild(contentPane);
//            var pane = dojo.byId("permstab");
//            pane.innerHTML = data.documentElement.innerHTML;
//        },
//        form: dojo.byId(formId)
//    });

    // window
    var formId = 'permsdetailform' + idx;
    var formElement = document.getElementById(formId);
    formElement.target = "_blank";
    formElement.action = "permsdetail.cgi";
    formElement.submit();
}

function changeDataTab(oldCiproId,newCiproId)
{
    var tabTitle = "CIPRO" + oldCiproId;
    var tabContainer = dijit.byId('maindiv');
    var tabChildren = tabContainer.getChildren();
    var targetChild;
    for( i = 0 ; i < tabChildren.length ; i++ )
    {
        if(tabChildren[i].controlButton.containerNode.innerHTML == tabTitle)
        {
            targetChild = tabChildren[i];
            break;
        }
    }

    if(( targetChild == undefined )||( targetChild == null )){
        return;
    }

    tabContainer.removeChild(targetChild);
    var pageUrl = "viewdata.cgi?id=" + newCiproId;
    tabTitle = "CIPRO" + newCiproId;
    var contentPane = new dijit.layout.ContentPane({ 
                                 href:pageUrl,
                                 closable: true,
                                 title: tabTitle
                      });
    contentPane.onLoad = function(){initDataView(newCiproId);};
    tabContainer.addChild(contentPane,i);
    tabContainer.selectChild(contentPane);
}

function addNewTab(pageUrl,tabTitle)
{
    var tabContainer = dijit.byId('maindiv');
    var tabChildren = tabContainer.getChildren();
    for( i = 0 ; i < tabChildren.length ; i++ )
    {
        if(tabChildren[i].controlButton.containerNode.innerHTML == tabTitle)
        {
            tabContainer.selectChild(tabChildren[i]);
            return;
        }
    }

    var contentPane = new dijit.layout.ContentPane({ 
                                 href:pageUrl,
                                 closable: true,
                                 title: tabTitle
                      });
    tabContainer.addChild(contentPane);
    tabContainer.selectChild(contentPane);
    tabContainer.layout();
}

function addNewTabOuterPage(pageUrl,tabTitle)
{
    var tabContainer = dijit.byId('maindiv');
    var tabChildren = tabContainer.getChildren();
    for( i = 0 ; i < tabChildren.length ; i++ )
    {
        if(tabChildren[i].controlButton.containerNode.innerHTML == tabTitle)
        {
            tabContainer.selectChild(tabChildren[i]);
            return;
        }
    }

    var contentPane = new dijit.layout.ContentPane({ 
                                 closable: true,
                                 title: tabTitle
                      });
    var contents = '<iframe src="'+pageUrl+'" frameborder="0" style="width:100%; height:100%;"/>';
    contentPane.setContent(contents);
    tabContainer.addChild(contentPane);
    tabContainer.selectChild(contentPane);
    tabContainer.layout();
}
