var qChars = new Array();
qChars['en'] = new Array('&#8220;', '&#8221;', '&#8216;', '&#8217;');
//qChars['no'] = new Array('&#171;', '&#187;', '&#39;', '&#39;');
qChars['no'] = new Array('\u00ab', '\u00bb', '\u201c', '\u201d');

var defaultLang = 'en';

function smartQuote() {
  var q = document.getElementsByTagName('q');
  var qLang = new Array(); // The language of each quote
  var qParentLang = new Array(); // Parent quote language
  var qLvl = new Array(); // Incremented by one for each level of nesting
  var qParentLvl = new Array();
  for (var i = 0; i < q.length; i++) { // Iterate through all quotes
    // Assign language to attribute value if exists (and quotes supported), otherwise parent language, otherwise default
    var lang = q[i].lang;
    qLang[i] = (lang && qChars[lang]) ? lang
            : (qParentLang[i]) ? qParentLang[i]
            : defaultLang;
    qLvl[i] = (qParentLvl[i] >= 0) ? qParentLvl[i] + 1 : 0;
    var innerQs = q[i].getElementsByTagName('q');
    for (var j = 0; j < innerQs.length; j++) { // Iterate through nested quotes
      qParentLang[i + j + 1] = qLang[i]; // Set parent language
      qParentLvl[i + j + 1] = qLvl[i]; // Set parent level
    }
  }
  for (var i = 0; i < q.length; i++) {
    var chars = qChars[qLang[i]];
	var charLevel = (qLvl[i] < chars.length / 2) ? qLvl[i] * 2 : (chars.length % 2 == 0) ? chars.length - 2 : chars.length - 1;
    q[i].innerHTML = chars[charLevel] + q[i].innerHTML + (chars[charLevel + 1] ? chars[charLevel + 1] : '');
  }
}
//window.attachEvent('onload', smartQuote);

//
// Adds event to window.onload without overwriting currently
// assigned onload functions.
function addLoadEvent(func) {
    if (window.addEventListener)
        window.addEventListener('load', func, false);
    else if (window.attachEvent)
        window.attachEvent('onload', func);
}

addLoadEvent (smartQuote);

