/**

* sg-scripts.js
*/

(function (document, undefined) {

 "use strict";

 // Add js class to body
 document.getElementsByTagName('body')[0].className+=' js';

 // Add functionality to toggle classes on elements
 var hasClass = function (el, cl) {
     var regex = new RegExp('(?:\\s|^)' + cl + '(?:\\s|$)');
     return !!el.className.match(regex);
 },

 addClass = function (el, cl) {
     el.className += ' ' + cl;
 },

 removeClass = function (el, cl) {
     var regex = new RegExp('(?:\\s|^)' + cl + '(?:\\s|$)');
     el.className = el.className.replace(regex, ' ');
 },

 toggleClass = function (el, cl) {
     hasClass(el, cl) ? removeClass(el, cl) : addClass(el, cl);
 };

 var selectText = function(text) {
     var doc = document;
     if (doc.body.createTextRange) {
         var range = doc.body.createTextRange();
         range.moveToElementText(text);
         range.select();
     } else if (window.getSelection) {
         var selection = window.getSelection();
         var range = doc.createRange();
         range.selectNodeContents(text);
         selection.removeAllRanges();
         selection.addRange(range);
     }
 };

 // Cut the mustard
 if ( !Array.prototype.forEach ) {

   // Add legacy class for older browsers
   document.getElementsByTagName('body')[0].className+=' legacy';

 } else {

   // View Source Toggle
   [].forEach.call( document.querySelectorAll('.sg-btn--source'), function(el) {
     el.onclick = function() {
       var that = this;
       var sourceCode = that.parentNode.nextElementSibling;
       toggleClass(sourceCode, 'is-active');
       return false;
     };
   }, false);

   // Select Code Button
   [].forEach.call( document.querySelectorAll('.sg-btn--select'), function(el) {
     el.onclick = function() {
       selectText(this.nextSibling);
       toggleClass(this, 'is-active');
       return false;
     };
   }, false);
 }

 // Add operamini class to body
 if (window.operamini) {
   document.getElementsByTagName('body')[0].className+=' operamini';    
 } 
 // Opera Mini has trouble with these enhancements
 // So we'll make sure they don't get them
 else {
   // Init prettyprint
   prettyPrint();

   // Get nav form
   var nav = document.getElementById('js-sg-section-switcher');

   // Toggle active class on navToggle click
   nav.onchange = function() {
     var val = this.value;
     if (val !== "") {
       window.location = val;
     }
   };
 }

})(document);