src/cm/media/js/client/c_toc.js
author gibus
Mon, 10 Mar 2014 13:24:19 +0100
changeset 600 fda73ac53450
parent 562 92e8e5aaacde
permissions -rw-r--r--
Use YUI 3.10 (now that conflict with ASCIIMathML is solved).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     1
gToc = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     2
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     3
instanciateToc = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     4
  gToc = {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     5
      'tocId':CY.guid(),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     6
      'tocTitleId':CY.guid(),
422
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
     7
      'closeBtnId':CY.guid(),
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
     8
      'empty': false
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     9
  } ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    10
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    11
  var overlayHtml = {};
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    12
  overlayHtml['headerContent'] = '<div id="' + gToc['tocId'] + '"><h3 id="' + gToc['tocTitleId'] + '"></h3>';
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    13
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    14
  var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5,h6', document.getElementById('maincontainer'));
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    15
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    16
  var content = document.createElement('div');
422
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    17
  if (toBeTOCced.length >= 2) {
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    18
    for (var i=0;i<toBeTOCced.length;i++) {
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    19
	  	var tmp = document.createElement('a');
469
08d57b273596 When building toc, delete <a> elements, including when written in uppercase (<A>).
gibus
parents: 440
diff changeset
    20
		  tmp.innerHTML = toBeTOCced[i].innerHTML.replace(/<\/?a[^>]*>/ig,'');
422
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    21
  		tmp.className = 'page indent' + toBeTOCced[i].nodeName;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    22
	  	content.appendChild(tmp);
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    23
		  var headerId = toBeTOCced[i].id || 'link' + i;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    24
  		tmp.href = '#' + headerId;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    25
	  	toBeTOCced[i].id = headerId;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    26
    }
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    27
  }
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    28
  else {
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    29
    content.innerHTML = '';
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    30
    gToc['empty'] = true;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    31
  }
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    32
  overlayHtml['bodyContent'] = content.innerHTML;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    33
  
562
92e8e5aaacde Give maximum width for add_comment form and toc.
Simon Descarpentries <sid@sopinspace.com>
parents: 532
diff changeset
    34
  var width = gLayout.getTopICommentsWidth();
92e8e5aaacde Give maximum width for add_comment form and toc.
Simon Descarpentries <sid@sopinspace.com>
parents: 532
diff changeset
    35
  width += gLayout.iCommentsRequiredThreadPadding (); // SID: use max available space as there is no indentation on that box
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    36
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    37
  var overlay = new CY.Overlay( {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    38
    zIndex :3,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    39
    shim :false, // until we really need it, no shim 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    40
    visible :false,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    41
    headerContent :overlayHtml['headerContent'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    42
    bodyContent :overlayHtml['bodyContent'],
423
db95e6b3fc6e Better positionning of table of contents.
gibus
parents: 422
diff changeset
    43
    xy :[3,30],
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    44
    width : width
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    45
  });
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    46
  overlay.get('contentBox').addClass("c-toc") ;
424
2f9108930e47 Removes <a> tags inside toc + adjusts height of toc.
gibus
parents: 423
diff changeset
    47
  overlay.get('contentBox').set("id", "the-toc") ;
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    48
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    49
  // attach to DOM
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    50
  overlay.render('#leftcolumn');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    51
  
600
fda73ac53450 Use YUI 3.10 (now that conflict with ASCIIMathML is solved).
gibus
parents: 562
diff changeset
    52
  CY.one("#"+gToc['tocTitleId']).set('innerHTML', gettext('Table of contents')) ;
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    53
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    54
  gToc['overlay'] = overlay ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    55
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    56
  var animationHide = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    57
  animationHide = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    58
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    59
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    60
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    61
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    62
  gToc['animationHide'] = animationHide ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    63
  animationHide.set('to', { opacity: 0});// height : 0 doesn't work
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    64
  gToc['animationHide-handle'] = animationHide.on('end', onTocHideAnimEnd, gToc);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    65
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    66
  var animationShow = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    67
  animationShow = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    68
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    69
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    70
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    71
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    72
  gToc['animationShow'] = animationShow ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    73
  animationShow.set('to', { opacity: 1});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    74
  gToc['animationShow-handle'] = animationShow.on('end', onTocShowAnimEnd, gToc);
440
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
    75
  getElementsByClassName('c-toc')[0].style.width = width + 'px';
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    76
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    77
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    78
toggleTocFn = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    79
  if (isTocVisible())
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    80
    hideToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    81
  else
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    82
    showToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    83
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    84
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    85
hideToc = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    86
  gToc['overlay'].hide();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    87
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    88
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    89
onTocHideAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    90
//  iComment['overlay'].blur() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    91
  this.overlay.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    92
  gSync.resume() ;    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    93
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    94
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    95
onTocShowAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    96
  gSync.resume() ;    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    97
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    98
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    99
showToc= function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   100
  removeFormErrMsg(gToc['tocId']) ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   101
  gIComments.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   102
  gToc['overlay'].show();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   103
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   104
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   105
isTocVisible = function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   106
  if (gToc != null)
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   107
    return gToc['overlay'].get('visible') ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   108
  return false ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   109
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   110
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   111
function getElementsByTagNames(list,obj) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   112
	if (!obj) var obj = document;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   113
	var tagNames = list.split(',');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   114
	var resultArray = new Array();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   115
	for (var i=0;i<tagNames.length;i++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   116
		var tags = obj.getElementsByTagName(tagNames[i]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   117
		for (var j=0;j<tags.length;j++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   118
			resultArray.push(tags[j]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   119
		}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   120
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   121
	var testNode = resultArray[0];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   122
	if (!testNode) return [];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   123
	if (testNode.sourceIndex) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   124
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   125
				return a.sourceIndex - b.sourceIndex;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   126
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   127
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   128
	else if (testNode.compareDocumentPosition) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   129
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   130
				return 3 - (a.compareDocumentPosition(b) & 6);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   131
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   132
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   133
	return resultArray;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   134
}
440
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   135
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   136
/*
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   137
	Developed by Robert Nyman, http://www.robertnyman.com
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   138
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   139
*/	
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   140
var getElementsByClassName = function (className, tag, elm){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   141
	if (document.getElementsByClassName) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   142
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   143
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   144
			var elements = elm.getElementsByClassName(className),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   145
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   146
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   147
				current;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   148
			for(var i=0, il=elements.length; i<il; i+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   149
				current = elements[i];
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   150
				if(!nodeName || nodeName.test(current.nodeName)) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   151
					returnElements.push(current);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   152
				}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   153
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   154
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   155
		};
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   156
	}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   157
	else if (document.evaluate) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   158
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   159
			tag = tag || "*";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   160
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   161
			var classes = className.split(" "),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   162
				classesToCheck = "",
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   163
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   164
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   165
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   166
				elements,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   167
				node;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   168
			for(var j=0, jl=classes.length; j<jl; j+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   169
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   170
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   171
			try	{
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   172
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   173
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   174
			catch (e) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   175
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   176
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   177
			while ((node = elements.iterateNext())) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   178
				returnElements.push(node);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   179
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   180
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   181
		};
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   182
	}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   183
	else {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   184
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   185
			tag = tag || "*";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   186
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   187
			var classes = className.split(" "),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   188
				classesToCheck = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   189
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   190
				current,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   191
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   192
				match;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   193
			for(var k=0, kl=classes.length; k<kl; k+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   194
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   195
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   196
			for(var l=0, ll=elements.length; l<ll; l+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   197
				current = elements[l];
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   198
				match = false;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   199
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   200
					match = classesToCheck[m].test(current.className);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   201
					if (!match) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   202
						break;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   203
					}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   204
				}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   205
				if (match) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   206
					returnElements.push(current);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   207
				}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   208
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   209
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   210
		};
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   211
	}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   212
	return getElementsByClassName(className, tag, elm);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   213
};