/********************************************************************
* AP Usefull function												*
********************************************************************/

function in_array(the_needle, the_haystack){
	var the_hay = the_haystack.toString();
	if(the_hay == ''){
		return false;
	}
	var the_pattern = new RegExp(the_needle, 'g');
	var matched = the_pattern.test(the_haystack);
	return matched;
}

function randomArray ( 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;
   }
   return myArray;
}

function array_search(val, arr)
{
	var i = arr.length;

	while (i--)
		if (arr[i] && arr[i] === val) break;

	return i;
}

function array_insert(arr, pos, val) {
    before = arr.slice(0, pos);
    after = arr.slice(pos);
    before.push(val);
    for (var p in after) before.push(after[p]);
    return before;
    } 

function print_r(theObj){
	if(theObj.constructor == Array ||theObj.constructor == Object) {
		document.write("<ul>")
		for(var p in theObj){
			if(theObj[p].constructor == Array||theObj[p].constructor == Object){
				document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
				document.write("<ul>");
				print_r(theObj[p]);
				document.write("</ul>");
			} else {
				document.write("<li>["+p+"] => "+theObj[p]+"</li>");
			}
		}
    	document.write("</ul>")
	}
}

function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}

/********************************************************************
* AP style	groupe setings												*
********************************************************************/


function ap(){}

ap.css = function(){}

ap.css.setStyleByID = function(i,p,v){ /* e: obj.el -> html Element; p: css Property; v: css Value */
	var n = document.getElementById(i);
	n.style[p] = v;
}

ap.css.setStyle = function(e,p,v){ /* e: obj.el -> html Element; p: css Property; v: css Value */
	e.el.style[p] = v;
}

ap.css.getStyleById = function (i, p) { /* i: id; p: css Property */
	var n = document.getElementById(i);
	var s = eval("n.style." + p);
	if((s != "") && (s != null)) { // inline
		return s; 
	}
	if(n.currentStyle) { // currentStyle
		var s = eval("n.currentStyle." + p);
		if((s != "") && (s != null)) {
			return s;
		}
	}
	var sheets = document.styleSheets;
	if(sheets.length > 0) { // styleSheets
		for(var x = 0; x < sheets.length; x++) {
			var rules = sheets[x].cssRules;
			if(rules.length > 0) {
				// check each rule
				for(var y = 0; y < rules.length; y++) {
					var z = rules[y].style;
					if(((z[p] != "") && (z[p] != null)) || (rules[y].selectorText == i)) {
						return z[p];
					}
				}
			}
		}
	}
	return null;
}

ap.css.setStyleByTag = function(t, p, v) { /* t: tag; p: css Property; v: css Value */
	var elements = document.getElementsByTagName(t);
	for(var i = 0; i < elements.length; i++) {
		elements.item(i).style[p] = v;
	}
}

ap.css.toogleClassByID = function(id, c1, c2){ /* id; class 1; class 2; */
	if (el = document.getElementById(id)) {
		if (el.className == c1) el.className = c2;
			else el.className = c1;
			return true;
	}
	return false;
}

ap.css.changeClassByID = function(id, c){ /* id; class 1; */
	if (el = document.getElementById(id)) {
		el.className= c;
		return true;
	}
	return false;
}

ap.css.replaceClassByClass = function(c1,c2){ /* class 1; class 2;*/
	ela = this.getElementsByClassName(c1);
	for (var i = 0; i < ela.length; i++) {
		ela[i].className= c2;
	}
}

ap.css.addClassById = function(id, c){ /* id; class 1; */
	if (el = document.getElementById(id)) {
	
		arr = el.className.split(' ');
		
		if (in_array(arr, c)) return true;
		
		if (el.className=='') el.className =  c;
		else el.className +=  ' '+c;
		return true;
	}
	return false;
}

ap.css.removeClassById = function(id, c){ /* id; class 1; */

	if (el = document.getElementById(id)) {
		
		arr = el.className.split(' ');

		nclass ='';
		for (var p in arr ) {
		
			if (arr[p]!=c) {
			
				if (nclass!= '') nclass+=' ';
				nclass += arr[p];
			}
		}
		
		
		el.className =  nclass;
	
		return true;
	}
	return false;
}



ap.css.getElementsByClassName = function(c) {
	var child = document.body.getElementsByTagName('*');
	var ela = new Array(); // element array
	for (var i = 0; i < child.length; i++) { 
		if (child[i].className.match(new RegExp("(^|\\s)" + c + "(\\s|$)"))) {
			ela.push(child[i]);
		}	
	}
	return ela;
}
