// basic.js version 3.0b

/*STRING FUNCTIONS: replace, spaceTrim */

//... code in public domain
function replace(haystack, needle, newNeedle) {
 /*  Replace a token in a string
  *     haystack    string to be processed
  *     needle      token to be found and removed
  *     newNeedle   token to be inserted
  *  returns new String
  */
  var i = haystack.indexOf(needle);
  var r = "";
  if (i == -1) return haystack;
  r += haystack.substring(0,i) + newNeedle;
  if ( i + needle.length < haystack.length)
    r += replace(haystack.substring(i + needle.length, haystack.length), needle, newNeedle);
  return r;
}

//by Alan, not copyrighted (use freely/public domain)
function spaceTrim(daString){
  if(daString.charAt(0) == ' '){
  daString=daString.substring(1);
  }
  if(daString.charAt(daString.length-1) == ' '){
  daString=daString.substring(0,(daString.length-1));
  }
  return daString;
}


/*DOM, CLASS FUNCTIONS: getById, writeTo, appendTo, removeClass, addClass */
/*Work for modern browsers, and IE 5-ish on*/

function getById(id) //Thanks to - but not by - PPK @ quirksmode.org
{ 
  var x=0;
	if (document.getElementById) //Modern W3C DOM
	{
		x = document.getElementById(id);
    return x;
	}
	else if (document.all) //IE
	{
		x = document.all[id];
		return x;
	} else return false;
}

/****NEW: TURN TO ARRAY OF OBJECTS****/
function makeArray(what){
  if(typeof what == 'string'){
    return new Array(getById(what));
  }else if(typeof what == 'object' && what.constructor == Array){
    /*for (var i=0;i<what.length;i++)
    {
      var theName = what[i].name;
      if (typeof what[theName] == 'string') {
        what[theName] = getById(what[theName]);
      }
    }*/
    return what;
  }else if(typeof what == 'object' && what.constructor != Array){
    return new Array(what);
  }else{
    return false;
  }
}

/*OR THIS: NEW VERSION; OLD STILL EXISTS BELOW/
function writeTo(element,text){
 if(typeof what == 'object' && what.constructor == Array){
  for (var i=0;i<element.length;i++)
  {
    var theName = what[i].name;
   writeTo(getById(what[theName]));
  }
 }else{
  if(element) {
    element.innerHTML = text;
    return true;
  } else {
    return false
  }
 }
}*/


function writeTo(id,text){
  var subjectItem = getById(id);
  if(subjectItem && subjectItem.innerHTML) { //test on empty element!
    subjectItem.innerHTML = text;
    return true;
  } else {
    return false
  }
}

function appendTo(id,text){
  var subjectItem = getById(id);
  if(subjectItem && subjectItem.innerHTML) { //test on empty element!
    subjectItem.innerHTML += text;
    return true;
  } else {
    return false
  }
}

function hasClass(id,whichClass){
  var subjectItem = getById(id);
  var tempString;
  if(subjectItem) {
    tempString = " "+replace(subjectItem.className," ",'  ')+" ";
    var loc = tempString.indexOf(" "+whichClass+" ");
    if(loc != -1) { return true;}
	 else {return false;}
  } else {
    return false;
  }
}

function removeClass(id,whichClass){
  var subjectItem = getById(id);
  var tempString;
  if(subjectItem) {
    tempString = replace(subjectItem.className," ",'  ')
    tempString = replace(" "+tempString+" "," "+whichClass+" ",' ');
    subjectItem.className = spaceTrim(replace(tempString,"  ",' '));
    return true;
  } else {
    return false;
  }
}

function addClass(id,whichClass){
  var subjectItem = getById(id);
  if(subjectItem) {
    testString = " "+subjectItem.className+" ";
    if (testString.indexOf(" "+whichClass+" ")<0) { //not already in class attibute
      subjectItem.className = spaceTrim(subjectItem.className+' '+whichClass);
    }
    return true;
  } else {
    return false;
  }
}

// ?? an example...
//document.getElementById('hereweare').firstChild.nodeValue='bold bit of text';
