﻿// This next part is a total hack that I needed because firefox has a 
// very poor flow layout engine. Instead of using a CSS-only solution, 
// I must break the CSS in every browser, fix it in IE, and manually
// lay everything out in firefox. UGH!
// Don't think that IE is off the hook either. There is some funky
// relationship between padding, margin, and size that is in gross
// violation of the CSS standard. Way to set the trend Microsoft!

function myMain()
{
	SelectActiveMenu();
	FixBrowsers();
	//set_style_from_cookie();
}
	
function FixBrowsers()
{	
	var browser=navigator.appName;
	//alert(browser);
	if (browser == "Netscape") {
	    Netscape()
    } else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
        var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
        if (ieversion>=8){            
            IE8();
        }
        else if (ieversion>=7){
            var myelement = document.getElementById("content0");
            for (var i=1; myelement != null; i++) {
                //myelement.style.maxWidth = 'none';
                myelement = document.getElementById("content" + i.toString());
            }
        }
    } 
}

function Netscape()
{
    var navBar = document.getElementById("masthead");
    var navBottom = navBar.offsetTop + navBar.offsetHeight;
    var navWidth = navBar.offsetWidth;
    var myelement = document.getElementById("content0");
    for (var i=1; myelement != null; i++) {
        if (myelement.offsetTop < navBottom)
            myelement.style.maxWidth = myelement.style.width = '510px';//'503px';
        else
            myelement.style.maxWidth = 'none'; myelement.style.width = 100;//(505+navWidth).toString() + "px";
        myelement = document.getElementById("content" + i.toString());
    }
}

function IE8()
{
    var navBar = document.getElementById("masthead");
    var navBottom = navBar.offsetTop + navBar.offsetHeight;
    var navWidth = navBar.offsetWidth;
    var myelement = document.getElementById("content0");
    for (var i=1; myelement != null; i++) {
        if (myelement.offsetTop < navBottom)
            myelement.style.maxWidth = myelement.style.width = '510px';//'503px';
        else
            myelement.style.maxWidth = 'none'; //myelement.style.width = '100';//(505+navWidth).toString() + "px";
        myelement = document.getElementById("content" + i.toString());
    }
}

//////////////////// theme switcher //////////////////////////////

var style_cookie_name = "steve_style" ;
var style_cookie_duration = 30 ;
var style_currentIndex = 0;

function setActiveStyleSheet(themeTitle) { 
	var vLoop, vLink; 
	for(vLoop=0; (vLink = document.getElementsByTagName("link")[vLoop]); vLoop++) { 
		if(vLink.getAttribute("rel").indexOf("style")!= -1 && vLink.getAttribute("title")) { 
			vLink.disabled = true; 
			if(vLink.getAttribute("title") == themeTitle) {
				vLink.disabled = false; 
				style_currentIndex = vLoop;
				//alert ("activated " + vLink.getAttribute("title"));
		    }
		} 
	} 
	//alert("setting index");
	setStyleIndexFromTitle(themeTitle);
	//alert("setting cookie");
    set_cookie( style_cookie_name, themeTitle, style_cookie_duration );
} 

function setStyleIndexFromTitle(themeTitle) { 
	var links = document.getElementsByTagName("link");
	var mylink;
	var relindex = 0;
	for(var i=0; i < links.length; i++) { 
	    mylink = links.item(i);
		if(mylink.getAttribute("rel").indexOf("style")!= -1 && mylink.getAttribute("title")) { 
			if(mylink.getAttribute("title") == themeTitle)
				style_currentIndex = relindex;
			relindex++;
		} 
	} 
} 

function NextStyle()
{
    setActiveStyleSheetByIndex(style_currentIndex+1);
}

// used to set "next" theme
function setActiveStyleSheetByIndex(index) { 
	var links = document.getElementsByTagName("link");
	
	if (index < 0)
	    return;
	if (links.length <= 0)
	    return;
	
	var relIndex = -1;
	var myLink = links[0];
	for(var i=0; i < links.length; i++) { 
	    myLink = links[i];
	    if (myLink.getAttribute("rel").indexOf("style") == -1)
	        continue;
	    relIndex ++;
		if(relIndex == index) {
		    //alert( "next is  " + myLink.getAttribute("title")); 
		    style_currentIndex = relIndex;
			setActiveStyleSheet(myLink.getAttribute("title")); 
			return;
	    }
	}
	
	// if index is too high
	var relCount = relIndex+1;
	if (relCount <= 0)
	    return;
	index %= relCount;
	setActiveStyleSheetByIndex(index);
} 

//////////// Cookie ///////////////

function set_style_from_cookie()
{
    var css_title = get_cookie( style_cookie_name );
    if (css_title.length)
        setActiveStyleSheet(css_title);
}

function set_cookie ( cookie_name, cookie_value, lifespan_in_days, valid_domain )
{
	valid_domain = "vis.cs.ucdavis.edu";
	document.cookie = cookie_name + "=" + escape(cookie_value) + "; expires=Fri, 31 Dec 2099 23:59:59 GMT;";
	return;


    // http://www.thesitewizard.com/javascripts/cookies.shtml
    var domain_string = valid_domain ?
                       ("; domain=" + valid_domain) : '' ;
    document.cookie = cookie_name +
                       "=" + encodeURIComponent( cookie_value ) +
                       "; max-age=" + 60 * 60 *
                       24 * lifespan_in_days +
                       "; path=/" + domain_string ;
	//alert(document.cookie);
}
function get_cookie ( cookie_name )
{
    // http://www.thesitewizard.com/javascripts/cookies.shtml
    var cookie_string = document.cookie ;
    if (cookie_string.length == 0)
        return '' ;
    
    //alert(cookie_string);    
    var cookie_value = cookie_string.match (
                    '(^|;)[\s]*' +
                    cookie_name +
                    '=([^;]*)' );
    //alert(cookie_value[2]);  
    return unescape(cookie_value[2]);
    //return decodeURIComponent ( cookie_value[2] ) ;
}
