/**
 * @author Sebastian Felling for Felling Softwareentwicklung
 * v1.0.0.0 as of 2009-07-09
 */

 // prototype extensions for IE
if(!Array.indexOf){
  Array.prototype.indexOf = function(obj){
   for(var i=0; i<this.length; i++){
    if(this[i]==obj){
     return i;
    }
   }
   return -1;
  }
}
// END OF PROTOTYPE EXTENSIONS

// extensions for all browsers
// ARRAY functions
function arrayShuffle(myArray) {
  var i = myArray.length;
  if ( i == 0 ) return false;
  while ( --i ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
   }
}

function arrayJoin(arrayBase, arrayAdd, bolPreventDuplicates) {
	var arrayReturn = new Array();
	
	// prevent duplicates?
	if(bolPreventDuplicates) {
		// prevent duplicates
		// add elements of base array
		for(var i = 0; i < arrayBase.length; i++) {
			if(arrayReturn.length == 0 || (arrayReturn.indexOf(arrayBase[i]) == -1)) {
				// not included yet = add
				arrayReturn.push(arrayBase[i]);
			}	
		}
		
		// add element of add array
		for(var i = 0; i < arrayAdd.length; i++) {
			if(arrayReturn.length == 0 || (arrayReturn.indexOf(arrayAdd[i]) == -1)) {
				// not included yet = add
				arrayReturn.push(arrayAdd[i]);
			}	
		}
	} else {
		// do not prevent duplicates => concat arrays
		arrayReturn = arrayBase.concat(arrayAdd);
	}
	
	// return
	return arrayReturn
}
// END OF ARRAY functions

// STRING functions
function stringTrim(strString) {
	strString = strString.toString();
	return(stringTrimLeft(stringTrimRight(strString)));
}

function stringTrimLeft(strString) {
	strString = strString.toString();

	// remove beginning white spaces
	while(strString.length > 0 && strString.substr(0,1) == ' ') {
		strString = strString.substr(1, strString.length - 1);
	}

	return strString
}

function stringTrimRight(strString) {
	strString = strString.toString();

	// remove trailing white spaces
	while(strString.length > 0 && strString.substring(strString.length - 1, strString.length) == ' ') {
		strString = strString.substring(0, strString.length - 1);
	}

	return strString
}

function stringEndsWith(strString, strMatch) {
	// check string length
	if(strString.length < strMatch.length) {
		// string too short
		return false;
	} else {
		var strTrailing = strString.substring(strString.length - strMatch.length, strString.length);
		return(strTrailing == strMatch);
	}
}

function stringStartsWith(strString, strMatch) {
	// check string length
	if(strString.length < strMatch.length) {
		// string too short
		return false;
	} else {
		var strStart = strString.substr(0, strMatch.length);
		return(strStart == strMatch);
	}
}

// END OF STRING functions

// MISC functions
// getURLParam: credit for this one goes to lobo235 at www.netlobo.com/url_query_string_javascript.html
function getURLParam(name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
// END OF MISC functions
