var MAX_SORTABLE_RESULTS = 500;

/**************************************/
/*    Utility Classes & Functions     */
/**************************************/
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.encode = function() {
    return encodeURIComponent(this);
}

if(!Array.indexOf) {
    Array.prototype.indexOf = function(obj){
        for(var i=0; i<this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        return -1;
    }
}

function Querystring(qs) {

    // optionally pass a querystring to parse
    this.params = new Object();
    this.get=Querystring_get;

    if (qs == null)
        qs=location.search.substring(1,location.search.length);

    if (qs.length == 0)
        return;

    qs = qs.replace(/\+/g, ' ');
    var args = qs.split('&'); // parse out name/value pairs separated via &

    // split out each name=value pair
    for (var i=0;i<args.length;i++) {
        var pair = args[i].split('=');
        var name = pair[0];
        var value = (pair.length==2) ? encodeURI(unescape(pair[1])) : name;
        this.params[name] = value;
    }
}

function Querystring_get(key, default_) {
    var value=this.params[key];
    return (value!=null) ? value : default_;
}

function GetValueStringFromSelectedCheckboxes(wrapDivId) {
    var myDiv = document.getElementById(wrapDivId);

    var selectedValues = new Array();
    for( var i = 0; myDiv.childNodes[i]; i++ ) {
        if(myDiv.childNodes[i].tagName == "LI") {
            if (myDiv.childNodes[i].childNodes[0].type && myDiv.childNodes[i].childNodes[0].type == "checkbox" && myDiv.childNodes[i].childNodes[0].checked)
                selectedValues.push(myDiv.childNodes[i].childNodes[0].value);
        }
    }
    return selectedValues.toString();
}

function GetValueStringFromMultiSelect(selectId) {
    var selectObj = document.getElementById(selectId);

    var selectedValues = new Array();
    for (var i = 0; i < selectObj.options.length; i++)
    {
        if (selectObj.options[i].selected)
            selectedValues.push(selectObj.options[i].value);
    }
    return selectedValues.toString();
}

function ClearMultiSelection(selectId) {
    var selectObj = document.getElementById(selectId);
    for (var i = 0; i < selectObj.options.length; i++)
        selectObj.options[i].selected = false;
}

function populateCheckboxes(wrapperDivId, selectedValues) {
    var check = false;
    var myDiv = document.getElementById(wrapperDivId);
    var aSelectedValues = selectedValues.split(',');
    for( var i = 0; myDiv.childNodes[i]; i++ ){
        if(myDiv.childNodes[i].tagName == "LI") {

            if (myDiv.childNodes[i].childNodes[0].type && myDiv.childNodes[i].childNodes[0].type == "checkbox"){
                if (unescape(aSelectedValues).indexOf(myDiv.childNodes[i].childNodes[0].value) > -1) {
                    myDiv.childNodes[i].childNodes[0].checked = true;
                    myDiv.childNodes[i].className = 'visible';
                    check = true;
                }
            }
        }
    }
    return check;
}

// when category checkbox is present
function populateCategoryCheckboxes(selectedValues) {
    var aSelectedValues = selectedValues.split(',');
    for(var i=0;i<aSelectedValues.length;i++) {
        var cat = document.getElementById(aSelectedValues[i]);
        if(cat != null && cat.type=="checkbox")
            cat.checked=true;

    }
}

// when subtype checkbox is present
function populateTypeCheckboxes(selectedValues) {
    var aSelectedValues = selectedValues.split(',');
    for(var i=0;i<aSelectedValues.length;i++) {
        var type = document.getElementById('typeid_'+aSelectedValues[i]);
        if(type != null && type.type=="checkbox") type.checked=true;
    }
}



function GetValueStringFromCategoryCheckboxes(selectId) {
    var cat =document.getElementById(selectId);
    var catid = new Array();
    for( i=0; i<cat.childNodes.length; i++){
        if( cat.childNodes[i].tagName=="LI" && cat.childNodes[i].childNodes[0].type=='checkbox'){
            if(cat.childNodes[i].childNodes[0].checked)catid.push(cat.childNodes[i].childNodes[0].value);
        }
    }
    return catid;
}

function GetValueStringFromTypeCheckboxes(selectId) {
    var type = document.getElementById(selectId);
    var typeid = new Array();
    for( i=0; i<type.childNodes.length; i++){
        if( type.childNodes[i].tagName=="LI" ){
            for(j=0; j< type.childNodes[i].childNodes.length; j++){
                if( type.childNodes[i].childNodes[j].tagName=="UL"){
                    for(k=0; k<type.childNodes[i].childNodes[j].childNodes.length; k++)
                        if( type.childNodes[i].childNodes[j].childNodes[k].tagName=="LI" && type.childNodes[i].childNodes[j].childNodes[k].childNodes[0].type=='checkbox')
                            if(type.childNodes[i].childNodes[j].childNodes[k].childNodes[0].checked)typeid.push(type.childNodes[i].childNodes[j].childNodes[k].childNodes[0].value);
                }
            }
        }
    }
    return typeid;
}



/**************************************/
/*        GSA Helper  Functions       */
/**************************************/
function Submitform(form) {
    //get keywords
    var queryParam = 'q=' + document.getElementById("q").value.trim().encode();

    //get other selected parameters
    var catid = GetValueStringFromSelectedCheckboxes("pubTypeGroup");
    var ageid = GetValueStringFromSelectedCheckboxes("ageGroup");
    var genderid = GetValueStringFromSelectedCheckboxes("genderGroup");
    var ethnicityid = GetValueStringFromSelectedCheckboxes("ethnicityGroup");
    var popid = GetValueStringFromSelectedCheckboxes("popTarget");
    var locationid = GetValueStringFromSelectedCheckboxes("locationGroup");
    var regionid = GetValueStringFromMultiSelect("region");
    var pubdaterange = document.getElementById("pubDataRange").value;

    //build querystring
    var params = "";
    if (queryParam != "")
        params += '&' + queryParam;
    if (catid != "")
        params += '&catid=' + catid;
    if (popid != "")
        params += '&popid=' + popid;
    if (locationid != "")
        params += '&locationid=' + locationid;
    if (ethnicityid != "")
        params += '&ethnicityid=' + ethnicityid;
    if (genderid != "")
        params += '&genderid=' + genderid;
    if (ageid != "")
        params += '&ageid=' + ageid;
    if (regionid != "")
        params += '&regionid=' + regionid;
    if (pubdaterange != "")
        params += '&pubdate=' + pubdaterange;
    if (params.indexOf('&') == 0)
        params = params.substr(1, params.length - 1);

    //redirect to search
    location.href = 'search.jsp?' + params;
}

function NewBasicSearch() {
    var query = document.getElementById("q").value;

    location.href = 'search.jsp?q=' +  query.trim().encode();
}

function RefineSearch() {
    var refineQuery = "";
    if (document.getElementById("refine_q").value.trim() != "")
        refineQuery = ";" + document.getElementById("refine_q").value.encode();

    var catid = "";
    if(document.getElementById("refine_pubType") != null)
        catid = GetValueStringFromSelectedCheckboxes("refine_pubType");
    else if(document.getElementById("refine_cats") != null)
        catid = GetValueStringFromCategoryCheckboxes("refine_cats");

    var ageid = GetValueStringFromSelectedCheckboxes("refine_ageGroup");
    var genderid = GetValueStringFromSelectedCheckboxes("refine_genderGroup");
    var ethnicityid = GetValueStringFromSelectedCheckboxes("refine_ethnicityGroup");
    var popid = GetValueStringFromSelectedCheckboxes("refine_popTarget");
    var locationid = GetValueStringFromSelectedCheckboxes("refine_locationGroup");
    var regionid = GetValueStringFromMultiSelect("region");

    var lngcode = "";
    if(document.getElementById("refine_lngcode") != null)
        lngcode = GetValueStringFromSelectedCheckboxes("refine_lngcode");

    var pubdaterange = document.getElementById("refine_pubDataRange").value;
    var pid = "";
    if(document.getElementById("refine_pa") != null)
        pid = GetValueStringFromSelectedCheckboxes("refine_pa");
    else { // only for program area island - no program area filter in left nav - pid must navigate through entire search
        var params = location.search; // get the query string parameters
        if(params != null && params != "" && params.indexOf("pid=") >= 0) {
            var subParams = params.substring(params.indexOf("pid=")+4); // get the values after 'pid=' i.e. start of pid
            if(subParams.indexOf("&") >=0) // check for immediate '&' i.e. end of pid
                pid = subParams.substring(0,subParams.indexOf("&"));
            else // when 'pid=' is last param in query string
                pid = subParams;
        } //inner if
    }//else
    var topicid = "";
    if(document.getElementById("refine_topic") != null)
        topicid = GetValueStringFromSelectedCheckboxes("refine_topic");
    var relatedtopic = "";
    if(document.getElementById("refine_related") != null)
        relatedtopic = GetValueStringFromSelectedCheckboxes("refine_related");
    var subtopic = "";
    if(document.getElementById("refine_sub") != null)
        subtopic = GetValueStringFromSelectedCheckboxes("refine_sub");
    var author = "";
    if(document.getElementById("refine_author") != null) //authors
        author = GetValueStringFromSelectedCheckboxes("refine_author");

    var typeid = "";
    if(document.getElementById("refine_types") != null) // for subtypes
        typeid = GetValueStringFromSelectedCheckboxes("refine_types");
    else if(document.getElementById("refine_cats") != null) { // for subtypes under categories
        typeid = GetValueStringFromTypeCheckboxes("refine_cats");
    }

    var publisher = "";
    if(document.getElementById("refine_publisher") != null && document.getElementById("refine_publisher").checked) //publisher
        publisher = document.getElementById("refine_publisher").value;
    var pubtitle = "";
    if(document.getElementById("refine_pubtitle") != null && document.getElementById("refine_pubtitle").checked) //publication title
        pubtitle = document.getElementById("refine_pubtitle").value;
    var volume = "";
    if(document.getElementById("refine_volume") != null && document.getElementById("refine_volume").checked) //publication volume
        volume = document.getElementById("refine_volume").value;
    var number = "";
    if(document.getElementById("refine_number") != null && document.getElementById("refine_number").checked) //publication number
        number = document.getElementById("refine_number").value;

    //'Web pages only' checkbox
    var isgrant = "";
    if(document.getElementById("isgrant1") != null && document.getElementById("isgrant1").checked)
        isgrant = document.getElementById("isgrant1").value;
    // npo
    var npo = "";
    if(document.getElementById("refine_npo") != null && document.getElementById("refine_npo").checked)
        npo = document.getElementById("refine_npo").value;
    // blogs
    var blog = "";
    if(document.getElementById("refine_blog") != null) //
        blog = GetValueStringFromSelectedCheckboxes("refine_blog");
    //parent product
    var parentid ="";
    if(document.getElementById("refine_parent") != null)
        parentid = GetValueStringFromSelectedCheckboxes("refine_parent");

    var src = "";
    if(document.getElementById("refine_src") != null) src = document.getElementById("refine_src").value;
    
    //get current querystring
    var querystringHash = new Querystring();

    querystringHash.params["catid"] = catid;
    querystringHash.params["ageid"] = ageid;
    querystringHash.params["genderid"] = genderid;
    querystringHash.params["ethnicityid"] = ethnicityid;
    querystringHash.params["popid"] = popid;
    querystringHash.params["locationid"] = locationid;
    querystringHash.params["pubdate"] = pubdaterange;
    querystringHash.params["regionid"] = regionid;
    querystringHash.params["pid"] = pid;
    querystringHash.params["topicid"] = topicid;
    querystringHash.params["relatedtopic"] = relatedtopic;
    querystringHash.params["subtopic"] = subtopic;
    querystringHash.params["author"] = author;
    querystringHash.params["typeid"] = typeid;
    querystringHash.params["isgrant"] = isgrant;
    querystringHash.params["publisher"] = publisher;
    querystringHash.params["pubtitle"] = pubtitle;
    querystringHash.params["volume"] = volume;
    querystringHash.params["number"] = number;
    querystringHash.params["npo"] = npo;
    querystringHash.params["blog"] = blog;
    querystringHash.params["parentid"] = parentid;
    querystringHash.params["src"] = src;
    querystringHash.params["name"] = '';
    querystringHash.params["lngcode"] = lngcode;

    querystringHash.params["start"] = "";
    if(document.getElementById("items") != null) querystringHash.params["num"] = document.getElementById("items").value;

    querystringHash.params["q"] = querystringHash.get("q","") + refineQuery;;


    var fullparams = "";
    for (var key in querystringHash.params) {
        if (querystringHash.params[key] != "")
            fullparams += "&" + key + "=" + querystringHash.params[key];
    }
    fullparams = fullparams.substr(1, fullparams.length - 1);

    //redirect to refine search
    if(fullparams == "") location.href = 'search.jsp';
    else location.href = 'search.jsp?' + decodeURI(fullparams);
}

function Navigate(startvalue) {
    var querystringHash = new Querystring();
    querystringHash.params["start"] = startvalue.toString();

    var fullparams = "";
    for (var key in querystringHash.params)
        fullparams += "&" + key + "=" + querystringHash.params[key];

    fullparams = fullparams.substr(1, fullparams.length - 1);

    //redirect to same search with specified start value
    location.href = 'search.jsp?' + decodeURI(fullparams);
    return false;
}

// when user change the sorting type from left filter's 'Sort Results' drop down
function SortResults() {
    var sortdir = '0';
    var sortBy = document.getElementById("sortResults").value;

    if(sortBy == 'PUBLICATIONDATE')
        sortdir = '1';

    var querystringHash = new Querystring();
    querystringHash.params["sort"] = sortBy.toString();
    querystringHash.params["sortdir"] = sortdir;
    querystringHash.params["start"] = "";


    var fullparams = "";
    for (var key in querystringHash.params)
    {
        if (querystringHash.params[key] != "")
            fullparams += "&" + key + "=" + querystringHash.params[key];
    }

    fullparams = fullparams.substr(1, fullparams.length - 1);
    location.href = 'search.jsp?' + decodeURI(fullparams);

    return false;
}

// when user click on any of the header for sorting
function SortHeader(metatagName)
{
    var querystringHash = new Querystring();
    var sort, sortdir;
    sort = querystringHash.get("sort","");
    sortdir = querystringHash.get("sortdir","");
    var newsort = "", newsortdir = "";
    newsortdir = '0';
    newsort = metatagName;
    if (metatagName == 'TITLE' && sort == 'TITLE' && sortdir == '0')
        newsortdir = '1';
    else if (metatagName == 'PRODUCTTYPENAME' && sort == 'PRODUCTTYPENAME' && sortdir == '0')
        newsortdir = '1';
    else if (metatagName == 'PUBLICATIONDATE' && sort == 'PUBLICATIONDATE' && sortdir == '0')
            newsortdir = '1';
        else if(metatagName == 'PUBLICATIONDATE' && sort != '' && sort != 'PUBLICATIONDATE') // default sorting for 'Publication Date' should be desc
                newsortdir = '1';
            else if(metatagName == 'PUBLICATIONDATE' && sort == '' && document.getElementById('DateHeader').className == 'desc') // when date is in desc order and used click on the header, date sorting should be asc
                    newsortdir = '0';
                else if(metatagName == 'PUBLICATIONDATE' && sort == '') // default sorting for 'Publication Date' should be desc
                        newsortdir = '1';

    var mySelect = document.getElementById("sortResults");
    for (var i = 0; i < mySelect.options.length; i++)
        mySelect.options[i].selected = (mySelect.options[i].value == newsort);

    querystringHash.params["sort"] = newsort;
    querystringHash.params["sortdir"] = newsortdir;
    querystringHash.params["start"] = "";

    var fullparams = "";
    for (var key in querystringHash.params) {
        if (querystringHash.params[key] != "")
            fullparams += "&" + key + "=" + querystringHash.params[key];
    }

    fullparams = fullparams.substr(1, fullparams.length - 1);
    location.href = 'search.jsp?' + decodeURI(fullparams);

    return false;
}


function OnLoadSearchResults() {
    //populate checkboxes with currently selected criteria
    var querystringHash = new Querystring();

    if (querystringHash.get("ageid","") != "") {
        moveToTop('13');
        populateCheckboxes("refine_ageGroup", querystringHash.get("ageid",""));
        activateBlock('refine_ageGroup','link4');  // open the section only when it's value is present in querystring
    }
    if (querystringHash.get("genderid","") != "") {
        moveToTop('14');
        populateCheckboxes("refine_genderGroup", querystringHash.get("genderid",""));
        activateBlock('refine_genderGroup','link5');
    }
    if (querystringHash.get("ethnicityid","") != "") {
        moveToTop('15');
        populateCheckboxes("refine_ethnicityGroup", querystringHash.get("ethnicityid",""));
        activateBlock('refine_ethnicityGroup','link6');
    }
    if (querystringHash.get("popid","") != "") {
        moveToTop('16');
        populateCheckboxes("refine_popTarget", querystringHash.get("popid",""));
        activateBlock('refine_popTarget','link7');
    }
    if (querystringHash.get("locationid","") != "") {
        moveToTop('17');
        if(querystringHash.get("regionid","") == "")  document.getElementById("statelist").className = '';
        populateCheckboxes("refine_locationGroup", querystringHash.get("locationid",""));
        activateBlock('refine_locationGroup','link8');
    }
    // check pid value coming from query string or hidden parameter 'pid' (in search.jsp)
    if (querystringHash.get("pid","") != "" && document.getElementById("refine_pa")!=null ) {
        moveToTop('9');
        populateCheckboxes("refine_pa", querystringHash.get("pid",""));
        activateBlock('refine_pa','link2');
    }
    else if (document.getElementById("pid").value!= "" && document.getElementById("refine_pa")!=null ) {
        moveToTop('9');
        populateCheckboxes("refine_pa", document.getElementById("pid").value);
        activateBlock('refine_pa','link2');
    }

    if (querystringHash.get("topicid","") != "" && document.getElementById("refine_topic")!=null) {
        moveToTop('10');
        populateCheckboxes("refine_topic", querystringHash.get("topicid",""));
        activateBlock('refine_topic','linkSelected');
    }
    else if (document.getElementById("topicid").value!= "" && document.getElementById("refine_topic")!=null) {
        moveToTop('10');
        populateCheckboxes("refine_topic", document.getElementById("topicid").value);
        activateBlock('refine_topic','linkSelected');
    }

    if (querystringHash.get("relatedtopic","") != "" && document.getElementById("refine_related")!=null) {
        moveToTop('11');
        populateCheckboxes("refine_related", querystringHash.get("relatedtopic",""));
        activateBlock('refine_related','link3');
    }
    if (querystringHash.get("subtopic","") != "" && document.getElementById("refine_sub")!=null) {
        moveToTop('12');
        populateCheckboxes("refine_sub", querystringHash.get("subtopic",""));
        activateBlock('refine_sub','link3a');
    }

    if (querystringHash.get("author","") != "" && document.getElementById("refine_author")!=null) {
        moveToTop('2');
        populateCheckboxes("refine_author", querystringHash.get("author",""));
    }
    if (querystringHash.get("publisher","") != "" && document.getElementById("refine_publisher")!=null) {
        moveToTop('3');
        document.getElementById("refine_publisher").checked = true;
    }
    if (querystringHash.get("pubtitle","") != "" && document.getElementById("refine_pubtitle")!=null) {
        moveToTop('4');
        document.getElementById("refine_pubtitle").checked = true;
    }
    if (querystringHash.get("volume","") != "" && document.getElementById("refine_volume")!=null) {
        moveToTop('5');
        document.getElementById("refine_volume").checked = true;
    }
    if (querystringHash.get("number","") != "" && document.getElementById("refine_number")!=null) {
        moveToTop('6');
        document.getElementById("refine_number").checked = true;
    }

    if (querystringHash.get("catid","") != "" && document.getElementById("refine_pubType")!=null) { // for categories without subtypes
        moveToTop('8');
        populateCheckboxes("refine_pubType", querystringHash.get("catid",""));
        activateBlock('refine_pubType','link1a');
    }
    else if(querystringHash.get("catid","")!= "" && document.getElementById("refine_cats")!=null) {
        moveToTop('8');
        populateCategoryCheckboxes(querystringHash.get("catid",""));
        var typeElements = document.getElementById("refine_cats").getElementsByTagName("li");
        checkbox =(querystringHash.get("typeid","")=="");
        for( i=0; i<typeElements.length-1; i++){
            if(typeElements[i].tagName =="LI" && typeElements[i].childNodes[0].tagName=="INPUT"){
                typeElements[i].className="visible";
                if(typeElements[i].childNodes[0].id.indexOf("typeid_")>=0)typeElements[i].childNodes[0].checked=checkbox;
            }
        }
        activateBlock('refine_cats','link1b');
    }
    else if(querystringHash.get("catid","")!= ""){
            moveToTop('8');
            populateCategoryCheckboxes(querystringHash.get("catid",""));
            activateBlock('refine_cats','link1b');
        }

    if (querystringHash.get("typeid","") != "" && document.getElementById("refine_types")!=null) {// for subtypes only
        moveToTop('8');
        populateCheckboxes("refine_types", querystringHash.get("typeid",""));
        activateBlock('refine_types','link1c');
    }
    else if(querystringHash.get("typeid","") != "" && document.getElementById("refine_cats") != null) { //for subtypes under categories, when typeid is present
        populateTypeCheckboxes(querystringHash.get("typeid",""));
    }

    if (querystringHash.get("pubdate","") != "") {
        moveToTop('7');
        var pubDateValue = querystringHash.get("pubdate","");
        var pubDateSelect = document.getElementById("refine_pubDataRange");
        for (var k = 0; k < pubDateSelect.options.length; k++)
        {
            if (pubDateSelect.options[k].value == pubDateValue)
                pubDateSelect.options[k].selected = true;
        }
    }

    if(querystringHash.get("regionid","") != "") {
        if(querystringHash.get("locationid","") == "") {
            moveToTop('17');
            activateBlock('refine_locationGroup','link8');
        }
        var regionValue = querystringHash.get("regionid","");
        var region = document.getElementById("region");
        for (var i = 0; i < region.options.length; i++) {
            if (region.options[i].value == regionValue) {
                region.options[i].selected = true;
            }
        }
    }

    //'Web pages only' checkbox
    if(document.getElementById("isgrant1") != null && querystringHash.get("isgrant","") != "") {
        moveToTop('18');
        document.getElementById("isgrant1").checked = true;
    }

    // npo
    if (querystringHash.get("npo","") != "" && document.getElementById("refine_npo")!=null) {
        moveToTop('19');
        document.getElementById("refine_npo").checked = true;
    }
    // blog
    if (querystringHash.get("blog","") != "" && document.getElementById("refine_blog")!=null) {
        moveToTop('20');
        populateCheckboxes("refine_blog", querystringHash.get("blog",""));
    }
    //parent product
    // npo
    if (querystringHash.get("parentid","") != "" && document.getElementById("refine_parent")!=null) {
        moveToTop('21');
        populateCheckboxes("refine_parent", querystringHash.get("parentid",""));
    }

     if (querystringHash.get("lngcode","") != "") {
        moveToTop('22');
        populateCheckboxes("refine_lngcode", querystringHash.get("lngcode",""));
        activateBlock('refine_lngcode','link22');
    }

    var sort, sortdir;
    sort = querystringHash.get("sort","PUBLICATIONDATE"); // by default sorting is date descending
    sortdir = querystringHash.get("sortdir","1");

    if(querystringHash.get("q","") != '') {
        moveToTop('1');
    }
    // when q has some value and no other sorting selected
    if(querystringHash.get("q","") != '' && querystringHash.get("sort","") == '')
        sort = "RELEVANCE";

    var sortBySelect = document.getElementById("sortResults");
    if(sortBySelect != null) {
        for (var i = 0; i < sortBySelect.options.length; i++) {
            if (sortBySelect.options[i].value == sort)
                sortBySelect.options[i].selected = true;
        }
    }

    var itemVal = querystringHash.get("num","");
    var items = document.getElementById("items");
    if(items != null) {
        for (var i = 0; i < items.options.length; i++) {
            if (items.options[i].value == itemVal)
                items.options[i].selected = true;
        }
    }

    if (sort != "" && googleResults > 0) {

        if (sortdir != "")
        {
            if (sort == "TITLE")
            {
                document.getElementById("TitleColumn").className = "selected";
                document.getElementById("TitleGroup").className = "border selected";
                if (sortdir == "0")
                    document.getElementById("TitleHeader").className = "asc";
                else
                    document.getElementById("TitleHeader").className = "desc";
            }
            else if (sort == "PRODUCTTYPENAME")
            {
                document.getElementById("TypeColumn").className = "selected";
                document.getElementById("TypeGroup").className = "border selected";
                if (sortdir == "0")
                    document.getElementById("TypeHeader").className = "asc";
                else
                    document.getElementById("TypeHeader").className = "desc";
            }
            else if (sort == "PUBLICATIONDATE")
                {
                    document.getElementById("DateColumn").className = "selected";
                    document.getElementById("DateGroup").className = "selected";
                    if (sortdir == "0")
                        document.getElementById("DateHeader").className = "asc";
                    else
                        document.getElementById("DateHeader").className= "desc";
                }
        }
    }
}

// when you unselect category, all subtypes are unselected and vice versa
// element = category checkbox, subTypePostion = subtypes position
function validateCategory(element, subTypePostion) {
    var catTypes = document.getElementById("refine_catTypes"+subTypePostion);
    if(catTypes != null) {
        for( var j = 0; catTypes.childNodes[j]; j++ ) {
            if (catTypes.childNodes[j].type && catTypes.childNodes[j].type == "checkbox") catTypes.childNodes[j].checked = element.checked;
            else if(catTypes.childNodes[j].tagName=="LI" && catTypes.childNodes[j].childNodes[0].type == "checkbox" )catTypes.childNodes[j].childNodes[0].checked = element.checked;
        }
    }
}

// when you select the subtype then category (parent) must be checked if it is not selected
// when you unselect the subtype then category (parent) must be unchecked if no other subtypes are selected for that category
// subTypeElement = subtype checkbox, parentId = category checkbox, parentStatus = category position
function validateSubType(subTypeElement, parentId, parentStatus) {
    var parent = document.getElementById(parentId);
    var moreTypesSelected = false;
    if(parent != null && subTypeElement.checked && !parent.checked){parent.checked = true;}
    else if(parent != null && !subTypeElement.checked && parent.checked) {
        var subTypeDiv = document.getElementById("refine_catTypes"+parentStatus);
        for( var j = 0; subTypeDiv.childNodes[j]; j++ ) {
            if( subTypeDiv.childNodes[j].tagName=="LI" && subTypeDiv.childNodes[j].childNodes[0].type == "checkbox" && subTypeDiv.childNodes[j].childNodes[0].checked ){moreTypesSelected = true;}
            if (subTypeDiv.childNodes[j].type && subTypeDiv.childNodes[j].type == "checkbox" && subTypeDiv.childNodes[j].checked){moreTypesSelected = true;}
        }
        if(!moreTypesSelected){parent.checked = false;}
    }
}

// open the +/- section
function activateBlock(divId, elementId) {
    new W.Toggle(divId, elementId).activate(); return false;
}

// get off from Program Area island
function redirectToPR() {
    var querystringHash = new Querystring();
    querystringHash.params["src"] = ""; // remove any src value
    querystringHash.params["pid"] = ""; // remove pid value
    querystringHash.params["start"] = ""; // remove start value
    querystringHash.params["isgrant"] = ""; // remove isgrant value

    var fullparams = "";
    for (var key in querystringHash.params) {
        if (querystringHash.params[key] != "")
            fullparams += "&" + key + "=" + querystringHash.params[key];
    }

    fullparams = fullparams.substr(1, fullparams.length - 1);
    location.href = '/pr/search.jsp?' + decodeURI(fullparams);

    return false;
}

// when user press enter key in the left filter's search text box
function DetectEnterKey(e) {
    var key = window.event ? e.keyCode : e.which;
    var keychar = String.fromCharCode(key);
    if (key == 13) RefineSearch();  // when enter key is pressed, submit the form
}

function removeItem(paramName,itemId) {
    var querystringHash = new Querystring();

    var paramValues = querystringHash.params[paramName];
    var valuesArray = paramValues.split(",");
    var newValues = new Array();
    for(var i=0; i<valuesArray.length;i++) {
        if(valuesArray[i] != itemId) newValues.push(valuesArray[i]);
    }

    querystringHash.params[paramName] = newValues;
    // when paramName is 'catid' remove typeid also.
    if(paramName == 'catid') querystringHash.params["typeid"] = "";

    var fullparams = "";
    for (var key in querystringHash.params) {
        if (querystringHash.params[key] != "")
            fullparams += "&" + key + "=" + querystringHash.params[key];
    }

    fullparams = fullparams.substr(1, fullparams.length - 1);
    location.href = 'search.jsp?' + fullparams;

    return false;
}

// move block to top of left filter
function moveToTop(spanid) {
    if($(spanid+'a')!=null) $(spanid+'a').innerHTML = $(spanid).innerHTML;
    if($(spanid)!=null)$(spanid).style.display = 'none';
}

//return true when there are parameters other than 'x','y','src','q','num'.
function otherParam() {
    var querystringHash = new Querystring();
    var extraParam = new Array('x','y','src','q','num','ss','name','isprod','search_options');
    for (var key in querystringHash.params) {
        if (querystringHash.params[key] != "") {
            if(key != extraParam[0] && key != extraParam[1] && key != extraParam[2] && key != extraParam[3] && key != extraParam[4]  && key != extraParam[5] && key != extraParam[6] && key != extraParam[7] && key != extraParam[8])
                return true;
        }
    }
    return false;
}

