// JavaScript Document
//使字串依容器大小自動換行，若要使用請呼叫fnBreakWordAll({word:10,re:'[\\w]'});詳細使用說明：http://www.wowbox.com.tw/blog/article.asp?id=3135
function fnBreakWordAll(o){
var o = o || {},
  iWord = o.word || 13,
  sRe = o.re || '[a-zA-Z0-9]',
  bAll = o.all || false,
  sClassName = o.className || 'word-break-all',
  aEls = o.els || (function(){
    var aEls = [],
      aAllEls = document.getElementsByTagName('*'),
      re = new RegExp('(?:^|\\s+)' + sClassName + '(?:\\s+|$)');
    for(var i =0,iLen = aAllEls.length; i < iLen ; ++i){
      if(re.test(aAllEls[i].className)){
        aEls[aEls.length] = aAllEls[i]; 
      }
    }
    return aEls;
  })() || [],
  fnBreakWord = function(oEl){ 
    // 基於http://www.hedgerwow.com/360/dhtml/css-word-break.html修改
    if(!oEl || oEl.nodeType !== 1){
      return false;
    } else if(oEl.currentStyle && typeof oEl.currentStyle.wordWrap === 'string'){
      breakWord = function(oEl){
        oEl.runtimeStyle.wordWrap = 'break-word';
        return true;
      }
      return breakWord(oEl);
    }else if(document.createTreeWalker){
      var trim = function  (str) {
        str = str.replace(/^\s\s*/, '');
        var ws = /\s/,
        i = str.length;
        while (ws.test(str.charAt(--i)));
        return str.slice(0, i + 1);
      }
      breakWord = function(oEl){
        var dWalker = document.createTreeWalker(oEl, NodeFilter.SHOW_TEXT, null, false);
        var node,s,c = String.fromCharCode('8203'),
          //re = /([a-zA-Z0-9]{0,13})/;
          re = new RegExp('('+ sRe +'{0,' + iWord + '})');
        while (dWalker.nextNode()){
          node = dWalker.currentNode;
          s = trim(node.nodeValue).split(re).join(c);
          node.nodeValue = s;
        }
        return true;
      }
      return breakWord(oEl);
    }
  };
for(var i=0,n=aEls.length; i<n; ++i){
  var sUa = navigator.userAgent,
    sTn = aEls[i].tagName.toLowerCase() ;
  if((/Opera/).test(sUa) || (/Firefox/).test(sUa) || ((/KHTML/).test(sUa) && (sTn === 'td' || sTn === 'th')) || bAll){
    fnBreakWord(aEls[i]);
  }
}
}
