var qChars = new Array();
qChars['en'] = new Array('&#8220;', '&#8221;', '&#8216;', '&#8217;');

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(); // Alternates between 0 and 1, depending on nesting level
  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) && (qParentLang[i] == qLang[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++) { // Apply all quotes depending on language and level
    var chars = qChars[qLang[i]];
    q[i].innerHTML = (qLvl[i] == 0) ? chars[0] + q[i].innerHTML + chars[1] : chars[2] + q[i].innerHTML + chars[3];
  }
}

window.attachEvent('onload', smartQuote);
