function getChildOf(domObj, id) {
	for (var i = 0; i < domObj.childNodes.length; i++) {
		var child = domObj.childNodes[i];
		if (child.id == id) return child;
	}
}

function showHelp(tabName) {
	var infoDiv = document.getElementById("HelpBox");
	infoDiv.className = "helpBoxExpanded";
	infoDiv = document.getElementById("HelpBoxText");
	try {
		infoDiv.innerHTML = OpenBio.Web.Help.ShowHelp(tabName).value;
	} catch (e) {
		infoDiv.innerHTML = "Error retrieving help.";
	}
	scroll(0,0);
}

function hideHelp() {
	var infoDiv = document.getElementById("HelpBox");
	infoDiv.className = "helpBoxHidden";
	infoDiv = document.getElementById("HelpBoxText");
	infoDiv.innerHTML = "&nbsp;";
}

var curSearchTerm = "";
function updateCollectionTabNavigation() {
	var tabDiv = document.getElementById(tabStrip_Collection.selectedTab.name);  
	var tabMain = getChildOf(tabDiv, 'tabMain');
	var tabNavigation = getChildOf(tabMain, 'tabNavigation');
	
	var tabResultLabel = getChildOf(tabNavigation, 'tabResultLabel');
	var result = tabStrip_Results.selectedTab.name;
	result = result.substring(result.indexOf('_') + 1);
	curSearchTerm = result;
//	tabResultLabel.innerHTML = "Results for " + result;
	tabResultLabel.innerHTML = result;
	
	var tabPrev = getChildOf(tabNavigation, 'tabPrev');
	tabPrev.style.visibility = tabStrip_Results.selectedIndex>0 ? "inherit" : "hidden";
	
	var tabNext = getChildOf(tabNavigation, 'tabNext');
	tabNext.style.visibility = tabStrip_Results.selectedIndex<tabStrip_Results.numTabs-1 ? "inherit" : "hidden";
}

function select_results(tabName) {
    show_loading_summary();
	updateCollectionTabNavigation();
	try {
		OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.SelectSearchTerm(tabName, update_summary);
	} catch (e) {}
}

var currentFilters = new Array();
function filter() {
    var filters = document.getElementsByName("Species")
    var sb = "";
    currentFilters = new Array();
    for (var i=0;i<filters.length;i++) {
        if (filters[i].checked) {
            sb = sb + filters[i].name + "=" + filters[i].value + ",";
            currentFilters.push(filters[i].id);                    
        }
    }
    filters = document.getElementsByName("Vector")
    for (var i=0;i<filters.length;i++) {
        if (filters[i].checked) {
            sb = sb + filters[i].name + "=" + filters[i].value + ",";
            currentFilters.push(filters[i].id);                    
        }
    }
    
    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.ChangeFilters(sb,update_filters_complete);
}

function clearAllFilters() {
    currentFilters = new Array();
    var filters = document.getElementsByName("Species")
    for (var i=0;i<filters.length;i++) {
        filters[i].checked = false;
    }
    filters = document.getElementsByName("Vector")
    for (var i=0;i<filters.length;i++) {
        filters[i].checked = false;
    }
    filters = document.getElementsByName("filterMaster")
    for (var i=0;i<filters.length;i++) {
        filters[i].checked = false;
    }
    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.ChangeFilters("",clear_filters_complete);
}

function showAntibodyDetail(product,ctl) {
   OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.GetAntibodyDetail(product,antibody_detail_complete);
}
function antibody_detail_complete(response) {
    $("antibodyDetailDiv").update(response.value);
    $("antibodyDetailDiv").show();
}

function expandSummary(image,ctl) {
    $("ConstructSummary").down().next().style.height = "100%";
    image.style.display = 'none';
    $('contractImg').style.display = 'block';
}
function contractSummary(image,ctl) {
    $("ConstructSummary").down().next().style.height = "250px";
    image.style.display = 'none';
    $('expandImg').style.display = 'block';
}
        
function printAntibodyDetail() {
    var wrapper = $("antibodyWrapper");
    var win = window.open();
    win.document.write("<html><head><link rel='stylesheet' type='text/css' href='/styles/affinity.css'/></head><body>");
    win.document.write("<div><img src='/images/affinityDetailLogo.png' alt='logo'/></div>");
    win.document.write(wrapper.innerHTML);
    win.document.write("</body></html>");
    win.document.close();
}        
var curPopup = null;
function showKitWindow(ctl) {
    if (curPopup != null)
        curPopup.hide();
        
    curPopup = $(ctl).next();
    Effect.SlideDown(curPopup,{duration:0.3});  
    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.LoadKits(curPopup.id,kits_complete);
}
function kits_complete(response) {
    $(curPopup).update(response.value);
    $("displayCloneId").update(curPopup.id);
}


function showAntibodyWindow(ctl) {
    if (curPopup != null)
        curPopup.hide();
        
    curPopup = $(ctl).next();
    Effect.SlideDown(curPopup,{duration:0.3});  
    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.LoadMatchedAntibodies(curPopup.id,matched_antibodies_complete);
}

function matched_antibodies_complete(response) {
    $(curPopup).update(response.value);
}

function hideKitWindow(ctl) {
    Effect.SlideUp($(ctl).up().up().up().up().up().up(),{duration:0.3});
    curPopup = null;
}
function showFilters() {
//    if (tabStrip_Collection.selectedTab.name == 'Collection_Sets') {
//        $("SpeciesColumn").hide();
//    } else {
//        $("SpeciesColumn").show();
//    }
    Effect.SlideDown('filtersDiv',{duration:0.3}); 
}
function postFilterLoad() {
    currentFilters.each(function(filter) {
        $(filter).checked = true;
    });
}       

function update_filters_complete(res) {
    Effect.SlideUp('filtersDiv',{duration:0.3}); 
    update_summary(res);
    if ($("expandImg").style.display == "none") {
        expandSummary($("expandImg"),"ConstructSummaryContainer");
    }
    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.GetFilterDisplay(update_filters_display);
}

function clear_filters_complete(res) {
    update_summary(res);
    if ($("expandImg").style.display == "none") {
        expandSummary($("expandImg"),"ConstructSummaryContainer");
    }
    $('filtersDiv').hide();
    $("clearFiltersLink").hide();
    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.GetFilterDisplay(update_filters_display);
}

function update_filters_display(res) {
    if (res.value == '') {
        $("filterDisplay").update("All");
        $("clearFiltersLink").hide();
    } else {
        $("filterDisplay").update(res.value);
        $("clearFiltersLink").show();
    }
}

    
function showRecentSearches() {
    var cookie = getCookie("OBSRecentSearches");
    var searches = cookie.split("~");
    var html = "<div><table border='1' width='100%'><tr><td>Search Term(s)</td><td>Action</td></tr>";
    
    var start = 0;
    if (searches.length > 10) {
        start = searches.length - 10;
    }
    for (var i=start;i<searches.length;i++) {
        var search = searches[i].evalJSON();
        html = html + "<tr><td>" + search.Terms + "</td>" + 
            "<td><a href='javascript:void(0);' onclick='requery(\"" + search.Terms + "\");'>Re-Search</a></td></tr>";
    }
    
    html = html + "</table></div>";
    $("recentSearchsContent").update(html);
    $("recentSearchesContainer").show();
}

function requery(vals) {
    document.getElementsByClassName("queryText")[0].value = vals;
    $('ctl00_ContentPlaceHolderQueryBar_QueryBarControl1_ctl00_SubmitQuery').click();
}


function toggleCheck(ctl) {
    var elements = $(ctl).up().getElementsByClassName("filter");
    for (var i=0;i<elements.length;i++) {
        var element = elements[i];
        element.checked = ctl.checked;
    }
}

function toggleFluorescent(ctl) {
    var elements = document.getElementsByClassName("fluorescentMarker");
    for (var i=0;i<elements.length;i++) {
        var element = elements[i];
        element.checked = ctl.checked;
    }
}

function toggleVector(ctl) {
    $(ctl).next().next().next().toggle();
    if (ctl.src.indexOf("Plus") > -1) {
        ctl.src="/images/SingleMinus.gif";
    } else {
        ctl.src="/images/SinglePlus.gif";
    }
}


function select_collection(tabName) {
    AjaxPro.timeoutPeriod = 300*1000; //this is to keep the long accession requests from timing out  KB 8/26/2008 
	hide_details();
	selectedId = null;
	show_loading_summary();
	updateCollectionTabNavigation();
	try {
		OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.SelectCollection(tabName, sessionModel, update_summary);
	} catch (e) {}
}
function sort_collection(column) {
	show_loading_summary();
	try {
		OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.SelectSortingTerm(column, update_summary);
	} catch (e) {}
}
function update_summary(res) {
	if (res.error != null) {
		if (res.error.Message == "Session has expired.") {
			//show_loading_summary();
			//window.location.reload( true );
			window.location = window.location;
		} else {
			hide_overlay();
			display_text("ConstructSummary", res.error.Message);
		}
	} else {
		hide_overlay();
		display_text("ConstructSummary", res.value);
	}

	// Reset hilite on selected row
	var cloneRow = document.getElementById(selectedId);
	if (cloneRow != null) {
	    selectedStyle = cloneRow.className;
	    cloneRow.className = "selectedSummaryRow";
	} 
	//update expansion of div if has been expanded already.
    if ($("expandImg").style.display == "none") {
        expandSummary($("expandImg"),"ConstructSummaryContainer");
    }
    if (setCatalogNumbers[curSearchTerm] != null) {
        $("setMessage").update("Buy in sets of 3 to save over 50%, receive FREE controls and GUARANTEED knockdown.");
    }
}
function refresh_summary() {    
	show_loading_summary();
	try {
	    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.RefreshPanel(update_summary);
	} catch (e) {}
}
		
function results_shortcut(collection, result) {
	show_loading_summary();
	tabStrip_Collection.SelectTab(collection, true);
	tabStrip_Results.SelectTab(result, true);
	updateCollectionTabNavigation();

	try {
		OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.SelectShortcut(result, collection, sessionModel, update_summary);
	} catch (e) {}

}
function hide_details() {
	var detailDiv = document.getElementById("ConstructDetailContainer");
	detailDiv.style["display"] = "none";
	detailDiv.style["visibility"] = "hidden";
}

var selectedId = null;
var selectedClone = null;
var selectedStyle = "summaryRow";
var savedScrollTop = 0;

function click_details(id, clone, title, selectIndex) {
	var headerElement = document.getElementById("ConstructDetailHeader");
	headerElement.innerHTML = "Details for " + title;
	var detailDiv = document.getElementById("ConstructDetailContainer");
	detailDiv.style["display"] = "block";
	detailDiv.style["visibility"] = "visible";
	show_loading_details();
	
	var cloneRow;
	// Try to reset the old selected row
	if (selectedId != null) {
		try {
			cloneRow = document.getElementById(selectedId);
			cloneRow.className = selectedStyle;
		} catch(e) {}
	}
	selectedClone = clone;
	selectedId = id;
	cloneRow = document.getElementById(selectedId);
	if (cloneRow != null) {
	    selectedStyle = cloneRow.className;
	    cloneRow.className = "selectedSummaryRow";
	}
	
	// Change selected detail menu if we've never set one, or if we're explicitly setting one other
	// than the default first one (Cloning details)
	if (tabStrip_Details.selectedIndex<0 || selectIndex > 0) {
		tabStrip_Details.SelectIndex(selectIndex);
	}
	OpenBio.Web.App.NewQuery.Controls.ResultDetailControl.SelectProduct(tabStrip_Details.selectedTab.name, selectedClone, update_details);	
		
	scroll(0,790);
}
function show_details(label) {
    AjaxPro.timeoutPeriod = 300*1000; //this is to keep the long accession requests from timing out  KB 8/26/2008 
	show_loading_details();
	OpenBio.Web.App.NewQuery.Controls.ResultDetailControl.SelectProduct(label, selectedClone,update_details);	
}
function update_details(res) {
	if (res.error != null) {
		if (res.error.Message == "Session has expired.") {
			window.location = window.location;
		} else {
			hide_overlay();
			display_text("constructDetailInfo", res.error.Message);
		}
    } else {
	    display_text("constructDetailInfo", res.value);
	    hide_overlay();
    }
}
function display_text(region, txt) {
	try {
		var infoDiv = document.getElementById(region);
		var newDiv = document.createElement("div");
		infoDiv.innerHTML = txt;	
        set_summary_scroll(infoDiv);
	} catch (e) {}
}
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

var loadingPanel = document.createElement('div');
function hide_overlay() {
	if (loadingPanel != null) {
		loadingPanel.style.visibility = "hidden";
		try {
		    document.body.removeChild(loadingPanel);
		} catch(e) {}
	}
}
function show_overlay(elementName) {
	try {
		var parentElement = document.getElementById(elementName);
		var parentLoc = findPos(parentElement);
		
		// var loadingPanel = document.createElement('div');
		var borderSize = 4;
		loadingPanel.className = "translucentOverlay";
		loadingPanel.style.top = parentLoc[1]+borderSize + "px";
		loadingPanel.style.left = parentLoc[0]+borderSize + "px";
		var txt = parentElement.style.borderTop + "," + parentElement.style.borderLeft;
		loadingPanel.style.width = parentElement.offsetWidth-2*borderSize + "px";
		loadingPanel.style.height = parentElement.offsetHeight-2*borderSize + "px";
		loadingPanel.innerHTML = '<!-- Loading -->';
		loadingPanel.style.visibility = "visible";
		document.body.appendChild(loadingPanel);
		get_summary_scroll(parentElement);
	} catch (e) {}
}
// Saves the current scrollTop for the construct summary panel
function get_summary_scroll(parentElement) {
		// 0 should be header, 1 = scrolling body
		for (var i=0;i<parentElement.childNodes.length;i++) {
		    var childElement = parentElement.childNodes[i];
		    if (childElement.id!=null && childElement.id.substring(0, 5) == "Panel") {
		        savedScrollTop = childElement.scrollTop;
		    }
		}
}
function set_summary_scroll(parentElement) {
		// 0 should be header, 1 = scrolling body
		for (var i=0;i<parentElement.childNodes.length;i++) {
		    var childElement = parentElement.childNodes[i];
		    if (childElement.id!=null && childElement.id.substring(0, 5) == "Panel") {
		        childElement.scrollTop = savedScrollTop;
		    }
		}
}
function show_loading_summary() {
	show_overlay("ConstructSummary");
}
function show_loading_details() {
	show_overlay("constructDetailInfoHolder");
}
function show_loading_main() {
	show_overlay("cmsInstructions");
}

var setCatalogNumbers = new Array();

function update_purchase(res) {
    if(res.error != null) {
        alert(res.error.Message);
        return;
    }
    if (res.value.ReloadPage) {
        window.location = window.location;
    }
    // Must be done regardless of NeedsRefresh in case pb lies outside summary panel
    var cartButton = document.getElementById(res.value.ButtonId);
    if (cartButton != null) {
	    cartButton.src = res.value.ImageUrl;
    }
    // Trigger panel update if needed
    if (res.value.NeedsRefresh == true) {
        refresh_summary();
    }
    //are we trying to build a set?
    if (res.value.BuildSet == "true") {
        if (setCatalogNumbers[curSearchTerm] == null) {
            setCatalogNumbers[curSearchTerm] = new Array();
        }
        setCatalogNumbers[curSearchTerm].push(res.value.CatalogNumber);
        if (setCatalogNumbers[curSearchTerm].length == 3) {
//            var val = OpenBio.Web.App.NewQuery.BuildSet(setCatalogNumbers[curSearchTerm][0], setCatalogNumbers[curSearchTerm][1], setCatalogNumbers[curSearchTerm][2]).value;
//            setCatalogNumbers[curSearchTerm] = new Array();
            $("setMessage").update("Purchase additional constructs for this target gene for only $320/construct");
            $("setContents").update("");
            $("setRow").show();
//            $("setRow").hide();
            //            refresh_summary();
        } else if (setCatalogNumbers[curSearchTerm].length > 3) {
//            var val = OpenBio.Web.App.NewQuery.AddToSet(res.value.CatalogNumber).value;
            $("setMessage").update("Purchase additional constructs for this target gene for only $320/construct");
            $("setRow").show();
        } else {
            var num = 3 - setCatalogNumbers[curSearchTerm].length;
            $("setMessage").update("Buy " + num + " more items from this page and save over 50%");
//            var cats = "";
//            for (var i = 0; i < setCatalogNumbers[curSearchTerm].length; i++) {
//                cats = cats + setCatalogNumbers[curSearchTerm][i] + "<br/>";
//            }
//            $("setContents").update(cats);
            $("setRow").show();
        }        
    }
    
    // Update kit display if needed
    try {
        if (res.value.KitUpdateResults != null) {
            display_text("KitContentsPanel", res.value.KitUpdateResults.KitContent);
           var btn = document.getElementById('ctl00_ContentPlaceHolderMain_KitBuilder1_ButtonAdd');
           btn.disabled = !res.value.KitUpdateResults.AddEnabled;
        }
    } catch (e) {}
    update_cart();
}

function update_purchase_kit(res) {
    if (res.error != null) {
        alert(res.error.Message);
        return;
    }
    if (res.value.ReloadPage) {
        window.location = window.location;
    }
    if (res.value.Html != null && res.value.Html.length > 0) {
        if (curPopup != null) {
            $(curPopup).hide();
        }
        var ctl = $(res.value.ButtonId).next();
        ctl.innerHTML = res.value.Html;
        ctl.show();
    }
    // Must be done regardless of NeedsRefresh in case pb lies outside summary panel
//    var cartButton = document.getElementById(res.value.ButtonId);
//    if (cartButton != null) {
//        cartButton.src = res.value.ImageUrl;
//    }
//    // Trigger panel update if needed
//    if (res.value.NeedsRefresh == true) {
//        refresh_summary();
//    }

//    render_kit_builder();
//    update_cart();
//    OpenBio.Web.App.NewQuery.Controls.ResultSummaryControl.ChangeFilters("", update_filters_complete);
//    // Update kit display if needed
//    try {
//        if (res.value.KitUpdateResults != null) {
//            display_text("KitContentsPanel", res.value.KitUpdateResults.KitContent);
//            var btn = document.getElementById('ctl00_ContentPlaceHolderMain_KitBuilder1_ButtonAdd');
//            btn.disabled = !res.value.KitUpdateResults.AddEnabled;
//        }
//    } catch (e) { }
//    update_cart();
}

function render_kit_builder() {
    try {
        var kitContainer = document.getElementById("kitBuilderContainer");
        kitContainer.innerHTML = OpenBio.Web.Ajax.Kit.RenderKitBuilder().value;
    } catch (e) { }    
}
function update_cart() {
	try {
		var cartHolder = document.getElementById("CartStatusHolder");
		cartHolder.innerHTML = OpenBio.Web.Ajax.UpdateCart().value;
	} catch(e) {}
}
function replaceAll( str, from, to ) {
    var idx = str.indexOf( from );


    while ( idx > -1 ) {
        str = str.replace( from, to );
        idx = str.indexOf( from );
    }

    return str;
}
var inputSize = 0;
function toggleInputSize(parent) {
	var shortInput = document.getElementById(parent+'_txtQueryText');
	var longInput = document.getElementById(parent+'_txtQueryLong');
	var expander = document.getElementById('imgInputExpand');
	if (inputSize == 0) {
		shortInput.style["display"] = "none";
		longInput.style["display"] = "inline";
		var s = new String(shortInput.value);		
		longInput.value = replaceAll(s,",", "\n");
		shortInput.value = '';
		inputSize = 1;
		expander.src = '/images/query/contract.png';
	} else {
		shortInput.style["display"] = "inline";
		longInput.style["display"] = "none";
		var s = new String(longInput.value);
		
		shortInput.value = replaceAll(s,"\n", ",");
		longInput.value = '';
		inputSize = 0;
		expander.src = '/images/query/expand.png';
	}
}

function remove_kit_item(cat) {
    var res = OpenBio.Web.Ajax.Kit.RemoveKitItem(cat);
    if (!res.error) {
        display_text('KitContentsPanel', res.value.KitContent);
        var btn = document.getElementById('ctl00_ContentPlaceHolderMain_KitBuilder1_ButtonAdd');
        btn.disabled = !res.value.AddEnabled;
        
        refresh_summary();
    }
}
