// this is performed when the page loads
// (it probably should not be done from the body's onload attribute, but i can't do it via window.onload because of constructHintCounter())
// if there is no cookie yet set initial settings in togglerInitializeSettings
// show the "print this link" link if JS is on

function togglerInitialSettings() {
  if (readCookie('cnx_course_navigation') == null) togglerInitializeSettings('cnx_course_navigation');
  if (readCookie('cnx_recentview') == null) togglerInitializeSettings('cnx_recentview');
  if (readCookie('cnx_author_links') == null) togglerInitializeSettings('cnx_author_links');
  if (readCookie('cnx_download') == null) togglerInitializeSettings('cnx_download');
  if (readCookie('cnx_add_to') == null) togglerInitializeSettings('cnx_add_to');
  if (readCookie('cnx_email_author') == null) togglerInitializeSettings('cnx_email_author');
  if (readCookie('cnx_print_page') == null) togglerInitializeSettings('cnx_print_page');
  if (readCookie('cnx_javascript_present') == null) {
    createCookie('cnx_javascript_present', 'true', 365);    
    hideSolutions();
  }
  toggleMathMLMsg("init");
  
}

function toggleMathMLMsg(cmd)
{
    var isFirefox = navigator.userAgent.indexOf("Firefox") != -1 ? true : false;
    var isIE = navigator.userAgent.indexOf("MSIE") != -1 ? true : false;
    var isChrome = navigator.userAgent.indexOf("Chrome") != -1 ? true : false;
    var isSafari = navigator.userAgent.indexOf("Safari") != -1 ? true : false;
    var isMac = navigator.userAgent.indexOf("Mac") != -1 ? true : false;
    
    if(isFirefox)
    {
        setFirefoxCookie();
        toggleFirefox(cmd);
    }
    else if(isIE)
    {
        if(isMac)
        {
            createCookie('cnx_mathml_msg_browser', 'ie-mac', 365);
        }
        else
        {
            createCookie('cnx_mathml_msg_browser', 'ie', 365);
        }
        toggleIE(cmd, isMac);
    }
    else if(isChrome)
    {
        createCookie('cnx_mathml_msg_browser', 'chrome', 365);
        toggleChrome(cmd);
    }
    else if(isSafari)
    {
        createCookie('cnx_mathml_msg_browser', 'safari', 365);
        toggleSafari(cmd);
    }
    
}

function toggleFirefox(cmd)
{
    var hasFFFonts = testFirefoxFonts();
    var cookieValue = readCookie('cnx_mathml_msg');
    if(cmd == "init")
    {
        if(!hasFFFonts)
        {
            if (cookieValue == null){
                //displayInitialMathMLMsg("firefox");
            }
            else if(cookieValue == 'dismiss')
            {
                mathmlCorrect("firefox");
            }
            else if(cookieValue == 'display')
            {
                //displayInitialMathMLMsg("firefox");
            }
        }
        else
        {
            mathmlCorrect("firefox");
        }
    }
    else if(cmd == "hide")
    {
        hideMathMLMsg("firefox");
    }
    else if(cmd == "display")
    {
       // displayInitialMathMLMsg("firefox");
    }
    else if(cmd == "dismiss")
    {
        mathmlCorrect("firefox");
    }
}

function toggleIE(cmd, isMac)
{
    //var isMac = navigator.userAgent.indexOf("Mac") != -1 ? true : false;
    var hasMathPlayer= navigator.userAgent.indexOf("MathPlayer 2") != -1 ? true : false;
    
    if(cmd == "init" && !isMac)
    {
        if(!hasMathPlayer)
        {
            //displayInitialMathMLMsg("ie");
        }
        else
        {
            mathmlCorrect("ie");
        }
    }
}

function toggleSafari(cmd)
{
    if(cmd == "init")
    {
        document.getElementById('safari_msg').style.display = 'inline';
        document.getElementById('no_mathml_support').style.display = 'inline';
        document.getElementById('default_mathml_msg2').style.display = 'inline';
    }
    
}

function toggleChrome(cmd)
{
    if(cmd == "init")
    {
        document.getElementById('chrome_msg').style.display = 'inline';
        document.getElementById('no_mathml_support').style.display = 'inline';
        document.getElementById('default_mathml_msg2').style.display = 'inline';
    }
    
}


// if user doesn't have a cookie set yet, set elements as follows:
// - collection table of contents is shown
// - author links are shown
// - expandable content actions areas are hidden
// these also override the default (hardcoded) settings for non-JS users which are:
// - togglers ("show/hide" links) are not shown
// - expandable content actions areas are shown

function togglerInitializeSettings(id) {
  if (document.getElementById(id + '_contents')) {
  // errors will result if we refer to this element without being in a course
    if (id == 'cnx_course_navigation') {
      document.getElementById(id + '_show').style.display = 'none';
      document.getElementById(id + '_hide').style.display = 'inline';
      document.getElementById(id + '_contents').style.display = 'block';
    } else if (id == 'cnx_recentview') {
      document.getElementById(id + '_show').style.display = 'inline';
      document.getElementById(id + '_hide').style.display = 'none';
      document.getElementById(id + '_contents').style.display = 'none';
    } else if (id == 'cnx_author_links') {
      document.getElementById(id + '_togglers').style.display = 'block';
      document.getElementById(id + '_show').style.display = 'none';
      document.getElementById(id + '_hide').style.display = 'block';
      document.getElementById(id + '_contents').style.display = 'block';
    }
    else {
      document.getElementById(id + '_link').style.backgroundImage = 'url(images/arrow-down.png)';
      document.getElementById(id + '_contents').style.display = 'none';
    }
    createCookie(id, document.getElementById(id + '_contents').style.display, 365);
  }
  if (id == 'cnx_print_page' && document.getElementById(id) && window.print) {
    document.getElementById(id).style.display = 'block';
    createCookie(id, document.getElementById(id).style.display, 365);
  }
}


// this is the function called by the user via the onclick handler

function toggler(id) {
  if (id == 'cnx_course_navigation' || id == 'cnx_recentview') {
    var togglerOnState = 'inline';
  } else {
    var togglerOnState = 'block';
  }
  var contents = document.getElementById(id + '_contents').style;
  var show = document.getElementById(id + '_show').style;
  var hide = document.getElementById(id + '_hide').style;
  if (show.display == togglerOnState || show.display == '') {
    contents.display = 'block';
    show.display = 'none';
    hide.display = togglerOnState;
  } else {
    contents.display = 'none';
    show.display = togglerOnState;
    hide.display = 'none';
  }
  createCookie(id, contents.display, 365);
}


// similar to the toggler(id), but for use in the "Content Actions" box

function togglerCA(id) {
  var contents = document.getElementById(id + '_contents').style;
  var link = document.getElementById(id + '_link').style;
  if (contents.display == 'none') {
    contents.display = 'block';
    link.backgroundImage = 'url(images/arrow-up.png)';
  } else {
    contents.display = 'none';
    link.backgroundImage = 'url(images/arrow-down.png)';
  }
  createCookie(id, contents.display, 365);
}


// the cookie scripts were copied from here: http://www.xs4all.nl/~ppk/js/cookies.html
// which asks if i want to be redirected here: http://www.quirksmode.org/
// which has an apparently cnx-friendly copyright notice here: http://www.quirksmode.org/about/copyright.html

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  } 
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}


// for getting the location of the stylesheet currently in use, so that we can refer to images in that style's folder

var stylesheetloc = getPreferredStyleSheet().split('document.css')[0];

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("href");
  }
  return null;
}

function hideSolutions(){
  var x = getElementsByClassName('solution');
  for (var i = 0; i < x.length; i++) {  
    x[i].style.display = 'none';    
  }
  var y = getElementsByClassName('solution-toggles');
  for (var i = 0; i < y.length; i++) {
    y[i].style.display = 'block';
  }
}

function getElementsByClassName(classname){
  var isOpera = navigator.userAgent.indexOf("Opera") != -1 ? true : false;
  var rl = new Array();
  var re = new RegExp('(^| )'+classname+'( |$)');
  var ael = document.all && !isOpera ? document.all : document.getElementsByTagName('*');
  for (i=0, j=0 ; i<ael.length ; i++) {
    if(re.test(ael[i].className)) {
       rl[j] = ael[i];
       j++;
    }
  }
  return rl;
}

function hideMathMLMsg(browser)
{
    createCookie('cnx_mathml_msg', 'nag', 365);
    determineFirefoxMessageByVersion();
    document.getElementById('cnx_display_ff_msg_link').style.display = 'block';
    document.getElementById('ff_mathml_msg2').style.display = 'none';
    return null;
}

function getBB(family, ch){ 
    var test = document.createElement("span");
    test.setAttribute("style", "font-family: "+family+"serif;");
    test.appendChild(document.createTextNode(ch));
    var hidden = document.createElement("div");
    var styles = { visibility: 'hidden', position:"absolute",
      top:0, left:0, border:0, padding:0, margin:0 };
    for(var i in styles) {
      hidden.style[i] = styles[i];
    }
    hidden.appendChild(test);
    var testSize = {h:hidden.offsetHeight, w:hidden.offsetWidth};
    hidden.removeChild(test);
    return testSize;
}
  
function testFont(name) {
    var n = '\u00c1'; 
    var factor = 2;
    var wh1 = getBB(name, n);
    var wh2 = getBB(null, n);
    return wh1.w!=wh2.w || wh1.h!=wh2.h;
}

function testFirefoxFonts()
{
	var ch = '\u00c1';
    var family = "cmex10";
    var test = getBB(family, ch);
    var cmex10 = !(test.w*3 > test.h || test.h == 0);
    var cmr10 = testFont("cmr10");
    var CMEX10 = testFont("CMEX10");
    var STIX = testFont("STIXGeneral");
    var hasFonts = cmex10 || cmr10 || CMEX10;
    var version = getFirefoxVersion();
    if(version >= 3.0) {
    	hasFonts = testFont("STIXGeneral");// && !fonts; //you MUST NOT have installed the old fonts
    }
    return hasFonts;
}
    
function getFirefoxVersion()
{
	var version;
	var verStart = navigator.userAgent.indexOf("Firefox") + "Firefox/".length;
    var ver = navigator.userAgent.substring(verStart).split(".");
    if(!ver || ver.length == 1) 
    { 
    	version = 0; 
    }
    else if (ver.length == 2) 
    { 
    	version = parseFloat(ver[0]+".0"); 
    }
    else 
    { 
    	version = parseFloat(ver[0]+"."+ver[1]); 
    }
    return version;
	
}

function setFirefoxCookie()
{
    var version = getFirefoxVersion();
    if(version >= 3.0)
    {
        createCookie('cnx_mathml_msg_browser', 'firefox3', 365);
    }
    else
    {
        createCookie('cnx_mathml_msg_browser', 'firefox2', 365);
    }
}

function displayInitialMathMLMsg(browser)
{
    createCookie('cnx_mathml_msg', 'display', 365);
    if(browser == "firefox")
    {
        determineFirefoxMessageByVersion();
    	document.getElementById('ff_mathml_msg2').style.display = 'block';
    	document.getElementById('cnx_display_ff_msg_link').style.display = 'none';
    	document.getElementById('no_mathml_support').style.display = 'none';
    }
    else if(browser == "ie")
    {
        //document.getElementById('ie_mathml_msg').style.display = 'inline';
        //document.getElementById('default_mathml_msg2').style.display = 'inline';
        //document.getElementById('no_mathml_support').style.display = 'inline';
    }
        
}

function determineFirefoxMessageByVersion()
{
    var version = getFirefoxVersion();
    
  /*  if(version >= 3.0)
    {
        document.getElementById("ff3_mathml_msg").style.display = 'inline';
    }
    else
    {
        document.getElementById("ff2_mathml_msg1").style.display = 'inline';
    }
	*/
}

function mathmlCorrect(browser)
{
	createCookie('cnx_mathml_msg', 'dismiss', 365);
	document.getElementById('cnx_display_ff_msg_link').style.display = 'none';
	document.getElementById('default_mathml_msg1').style.display = 'none';
	document.getElementById('default_mathml_msg2').style.display = 'none';
	document.getElementById('ie_mathml_msg').style.display = 'none';
	document.getElementById('ff_mathml_msg2').style.display = 'none';
}

function toggleLensTags(sender)
{
    // Expand / collapse first sibling div of sender
    var parent = sender.parentNode;
    var div = parent.getElementsByTagName('div')[0];
    var closed = sender.getElementsByTagName('img')[0];
    var open = sender.getElementsByTagName('img')[1];
    if(div.style.display == 'block'){
        div.style.display = 'none'
        closed.style.display = 'inline';
        open.style.display = 'none';
    } else {
        div.style.display = 'block'
        closed.style.display = 'none';
        open.style.display = 'inline';
    }
}

function previewRating(value, number_of_stars, can_rate)
{
    // Toggle src on images to achieve highlight effect
    for (var i=1; i<=number_of_stars; i++)
    {
        var img = document.getElementById('content-render-rating-star'+i);
        var div = document.getElementById('content-render-rating-exp'+i);

        if (i <= value)        
            img.src = 'images/full_star.png';
        else
            img.src = 'images/empty_star.png';

        if (i == value)
            div.style.display = 'inline';
        else
            div.style.display = 'none';
    }
    if (!can_rate)
    {
        document.getElementById('content-render-rating-ratings').style.display = 'none';
        document.getElementById('content-render-rating-login').style.display = 'inline';
    }
}

function clearRatings(number_of_stars)
{
    // Restore src on images to remove highlight effect
    for (var i=1; i<=number_of_stars; i++)
    {
        var img = document.getElementById('content-render-rating-star'+i);
        var div = document.getElementById('content-render-rating-exp'+i);
        img.src = img.getAttribute('original_src');
        div.style.display = 'none';
    }
    document.getElementById('content-render-rating-ratings').style.display = 'inline';
    document.getElementById('content-render-rating-login').style.display = 'none';
}
