/* Javascript Document */


/* Error Handling
   Suppress all browser error messages */

function handleError() {
	return true;
}

window.onerror = handleError;


/* --------------------------------------------------------------- 
   Functions
*/

function strip_tags(string){

/* Strips HTML tags from string. Strips ALL characters between HTML tags.
   Source: Ryan Stemkoski,
   http://www.stemkoski.com/what-is-javascript%E2%80%99s-equivalent-to-php-strip_tags/ */

  //PROCESS STRING
  if(arguments.length < 3) {
    string=string.replace(/<\/?(?!\!)[^>]*>/gi, '');
  } else {
    var allowed = arguments[1];
    var specified = eval("["+arguments[2]+"]");
    if(allowed){
      var regex='</?(?!(' + specified.join('|') + '))\b[^>]*>';
      string=string.replace(new RegExp(regex, 'gi'), '');
    } else{
      var regex='</?(' + specified.join('|') + ')\b[^>]*>';
      string=string.replace(new RegExp(regex, 'gi'), '');
    }
  }
 
  //CHANGE NAME TO CLEAN JUST BECAUSE 
  var clean_string = string;
 
  //RETURN THE CLEAN STRING
  return clean_string;
}

function toggleDisplay(obj) {
/* Places or removes an object by changing its display property. */

  //Strip possible HTML tags from string.
  strip_tags(obj);
  var item = document.getElementById(obj);
  if(item.style.display == 'inline-block') {
    item.style.display = 'none'; }
  else { item.style.display = 'inline-block';
  }

}

function toggleVisibility(obj) {
/* Shows or hides an object by changing its visibility property. */

  //Strip possible HTML tags from string.
  strip_tags(obj);
  var item = document.getElementById(obj);
  if(item.style.visibility == 'show') {
    item.style.visibility = 'hidden'; }
  else { item.style.visibility = 'show';
  }

}

function display(obj,state) {
/* Shows or hides an object by display property. */

  //Strip possible HTML tags from string.
  strip_tags(obj);
  strip_tags(state);
  var item = document.getElementById(obj);
  if (state == 'show') {
    item.style.display = 'inline-block';
  }
  else { item.style.display = 'none'; }

}

function backLink() {
/* Returns location for 'back' link. If referring page was is 
on domain, sets to referrer, if not, sets to site index. */

  var backLink;
  var domain = 'http://www.dissident-designs.co.uk';
  var dreferrer = strip_tags(document.referrer);

  if (dreferrer.substring(0, domain.length) == domain) {
    /* Referrer IS on domain. Set back link to referrer. */
    backLink = dreferrer;
  }
  else {
    /* Referrer is NOT on domain. Set back link to index. */
    backLink = domain + '/';
  }

  return backLink;

}


/* -----------------------------------------
   Scrolling menu scripts.
*/


/* Unconfigurable global variables. */

var currIndex = 0;
/* -----------------------------------------*/

function scrollingMenu(obj,or,rewind) {
  /* --------------------------------
  Arguments
    obj - Element to have items wrote in to.
    or - Orientation. Either h (horizontal)
           or v (vertical). Optional, defaults
           to v.
    rewind - Run items in reverse. Optional, 
               defaults to false.
  ----------------------------------- */

  var i = 0;
  var x = 0;
  var output = '';


  if (rewind) {
    currIndex = currIndex -2;
    if (currIndex < 0) {
      currIndex = menuItems.length -1;
    }
  }

  x = currIndex;

  while (i <= numToDisplay -1) {

    if(x > menuItems.length -1) {
      x = 0;
    }

    output = output + menuItems[x];

    if (i < numToDisplay -1) {

      switch(or) {
        case 'h':
          output = output + ' | ';
         break;
        case 'v':
          output = output + '<br />';
          break;
        default:
          output = output + '<br />';
      }

    }

    i++;
    x++;

  }

  document.getElementById(obj).innerHTML = output;

  if(currIndex > menuItems.length -1) {
    currIndex = 1;
  }
  else {
    currIndex++;
  }

}

function timerControl(timer,label) {

  if (timer == '') {
    t = setInterval ("scrollingMenu('asmenu',orientation)", timerDelay * 1000 );
    /* Runs at an interval set by timerDelay. */
    document.getElementById(label).innerHTML = 'Stop auto scroll';

  }
  else {
    clearTimeout(t);
    t = '';
    document.getElementById(label).innerHTML = 'Start auto scroll';
  }

}

/* -----------------------------------------
   End scrolling menu scripts.
*/



/* -----------------------------------------
   resizeMe scripts
*/

function resizeMe (errObj) {
  /* --------------------------------
  Resizes (or opens new) browser window based on
  size specified.
  Arguments
    errObj - Element with visibility set hidden 
               to display in case of invalid entry.
  ----------------------------------- */

  if (! document.getElementById('preset').checked) {
    var preset = strip_tags(document.getElementById('width').value) + 'x' + strip_tags(document.getElementById('height').value);
    var dimensions = preset.split('x');
  }
  else {
    var preset = strip_tags(document.getElementById('presets').value);
    var dimensions = preset.split('x');
  }

  //Validate

  if (! isNumeric(false,dimensions[0],'invalidValue')) {

    document.getElementById(errObj).style.visibility='visible';
    return; /*Wish to exit function so DON'T return a value*/
  }

  if (! isNumeric(false,dimensions[1],'invalidValue')) {
    document.getElementById(errObj).style.visibility='visible';
    return; /*Wish to exit function so DON'T return a value*/
  }


  //If Ok, launch ...

  if (navigator.userAgent.indexOf("Firefox")!=-1) {

    // If Firefox new window will be opened.

    var position = ',left=0,top=0,';
    var windowOptions = 'resizable=yes,status=yes,menubar=yes,titlebar=yes,toolbar=yes,location=yes,scrollbars=yes';
    var attribs='height=' + dimensions[1] + ',width=' + dimensions[0] + position + windowOptions;

    window.open('','',attribs);
  }
  else {
    self.resizeTo(dimensions[0],dimensions[1]);
  }

}

function toggleEnableField(obj,val){
  /* --------------------------------
  Toggles visibility setting of element.
  Arguments
    obj - Element. 
    val - boolean. 
  ----------------------------------- */

  document.getElementById(obj).disabled=val;
  document.getElementById('invalidValue').style.visibility='hidden';

}

function isNumeric(isId,val,errObj) {
  /* --------------------------------
  Tests if value is numeric. Returns true or false.
  Arguments
    isId - ID of an element is passed to test value of.
    val - Value or ID of element.
    errObj - Element with visibility set hidden 
               to display in case of invalid entry.
  ----------------------------------- */
   //var ValidChars = "0123456789."; /* decimal allowed. */
   var ValidChars = "0123456789"; /* decimal not allowed. */
   var IsNumber=true;
   var Char;

   if (isId) {
     var sText = document.getElementById(val).value;
   }
    else {
      var sText = val;

   }
 
   if (sText != '') {

   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) {
         document.getElementById(errObj).style.visibility='visible';
         return false;
      }
   }

   document.getElementById('invalidValue').style.visibility='hidden';
   return true;
   
   }
}


/* -----------------------------------------
   End resizeMe scripts
*/


/* --------------------------------------------------------------- 
   Onload
*/

window.onload = function() {
  /* This initially hides CC Copyright conditions, 
      which leaves them shown if Javascript is not enababled. */
  display('conditionsContracted','show');
  display('conditionsExpaned','hide');
}
