/// EVENT /// ----------------------------------------------------------------------------
function removeEvent(whichObject, eventType, functionName){
	if(whichObject.attachEvent){ 
		whichObject.removeEventListener( 'on'+eventType, whichObject[eventType+functionName] ); 
	}else{
		whichObject.removeEventListener(eventType, functionName, false);
	}
}
function addEvent(whichObject,eventType,functionName){
	if(whichObject.attachEvent){ 
		whichObject['e'+eventType+functionName] = functionName; 
		whichObject[eventType+functionName] = function(){whichObject['e'+eventType+functionName]( window.event );} 
		whichObject.attachEvent( 'on'+eventType, whichObject[eventType+functionName] ); 
	}else{
		whichObject.addEventListener(eventType,functionName,false); 
	}
}
function fixE(e){
	if (typeof e == 'undefined') e = window.event;
	if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
	if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
	return e;
}

function uniqueId(){
    var newDate = new Date;
    newDate.getTime();
	return newDate.getTime();
}

var loadedObjects = "";
function loadCSS(file){
	if(loadedObjects.indexOf(file) == -1){
		fileref = document.createElement("link")
		fileref.setAttribute("rel", "stylesheet");
		fileref.setAttribute("type", "text/css");
		fileref.setAttribute("href", file);
		document.getElementsByTagName("head").item(0).appendChild(fileref);
		loadedObjects += file+" ";
	}
}
function loadJS(file){
	if(loadedObjects.indexOf(file) == -1){
		fileref = document.createElement('script');
		fileref.setAttribute("type","text/javascript");
		fileref.setAttribute("src", file);
		document.getElementsByTagName("head").item(0).appendChild(fileref);
		loadedObjects += file+" ";
	}
}


/// ELEM /// ----------------------------------------------------------------------------
function disableSelection(target){
	if (typeof target.onselectstart!="undefined") //IE route
		target.onselectstart=function(){return false}
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
		target.style.MozUserSelect="none"
	else //All other route (ie: Opera)
		target.onmousedown=function(){return false}
}

function showElem(elemid){
	var obj =  getElem(elemid);
	obj.style.display = 'block';
}
function hideElem(elemid){
	var obj =  getElem(elemid);
	obj.style.display = 'none';
}
function toggleElem(elemid){
	var obj =  getElem(elemid);
	if(obj.style.display == 'block'){
		obj.style.display = 'none';
	}else{
		obj.style.display = 'block';
	}
}
function getElementsByName(tag, name) {
     var elem = document.getElementsByTagName(tag);
     var arr = new Array();
     for(i = 0,iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute("name");
          if(att == name) {
               arr[iarr] = elem[i];
               iarr++;
          }
     }
     return arr;
}
function getElem(elemid){
	var obj = (typeof(elemid) == "object") ? elemid : document.getElementById(elemid);
	return obj;
}
function newElem(type, params){
	var elem = document.createElement(type);
	if(typeof(params) == "object"){
		for(var i in params){ elem[i] = params[i]; }
	}
	return elem;
}
function addStyle(elemid, styles){
	var obj = getElem(elemid);
	if(obj["style"]){
		for(i in styles){ obj.style[i] = styles[i]; }
	}
}
function setOpacity(elemid, value){
	var obj = getElem(elemid);
	if(obj){
		obj.style.opacity = value / 100;
		obj.style.MozOpacity = value / 100;
		obj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+value+")";
		obj.style.filter = "alpha(opacity="+value+")";
	}
}
function getObj(elemid){
	var obj = getElem(elemid);
	return obj;
}
function getAttribute(elemid, name){
	var obj = getElem(elemid);
	//if(document.all){
		var result = obj.getAttribute(name);
	//}else{
	//	var result = obj[name];
	//}
	return result;
}
function setAttribute(elemid, name, value){
	var obj = getElem(elemid);
	//if(document.all){
		var result = obj.setAttribute(name,value);
	//}else{
		//var result = obj[name] = value;
	//}
	return result;
}
function getChildsByType(elemid, type){
	var elem = getElem(elemid);
    var arr = new Array();
	if(elem){
		var childs = elem.childNodes;
		for(var i = 0; i < childs.length; i++) {
			var nodename = String(childs[i].nodeName);
			if(nodename.toLowerCase() == type.toLowerCase()){ arr.push(childs[i]) }
		}
	}
    return arr;
}
/// FORM /// ----------------------------------------------------------------------------
function changeStatus(elemid){
	obj1 = getElem(elemid);
	obj2 = getElem("b1_"+elemid);
	if (obj2.checked){
		obj1.value = 1;
	}else{
		obj1.value = 0;
	}
}
function getFormValues(name, prefix, replace){
	prefix = (typeof(prefix) == "string") ? prefix : "";
	replace = (replace==false) ? false : true;
	var elem = getElem(name).elements;
	var formValues = new Object();
	for(var i = 0; i < elem.length; i++){
		var elemName = (elem[i].name) ? elem[i].name : elem[i].id;
		var elemValue = elem[i].value;
		var elemType = elem[i].type;
		var elemTable = getAttribute(elem[i], "table");
		if(typeof(elemTable) == "string"){
		//if(elemName.substring(0,7) != "nosend_" && (prefix!="" && elemName.substring(0,prefix.length) == prefix)){
				//alert(elemType+": "+elemName+"="+elemValue);
				//alert(elemName+": "+elemName.substring(0,prefix.length)+"=="+prefix);
				//ename = (replace) ? elemName.substring(prefix.length, elemName.length) : elemName;
				switch(elemType){
					case "checkbox":
						if(elem[i].checked){
							if(!formValues[elemName]){ formValues[elemName] = new Array(); }
							formValues[elemName].push(elemValue);
						}
						break;
					case "radio":
						if(elem[i].checked){
							formValues[elemName].push(elemValue);
						}
						break;
					case "select":
						if(elem[i].selected){
							if(!formValues[elemName]){ formValues[elemName] = new Array(); }
							formValues[elemName].push(elemValue);
						}
						break;
					default:
						formValues[elemName] = elemValue;
				}
				//alert(elemName+":"+elemValue);
			}
		}
	return formValues;
}

/// OBJECT /// ----------------------------------------------------------------------------
function obj2String(obj){
	var result = "";
	if(typeof(obj) == "object"){
		for(i in obj) result += i+": "+obj[i]+"\n";
	}	
	return result;
}
function cloneObj(obj){
	return eval(uneval(obj));
}

function applyToObject(source, destination){
	for(var i in source){
		destination[i] = source[i];
	}
	return destination;
}


function rand(start, stop){
	var num = start + Math.floor(Math.random() * stop); 
	return num;
}

/// STRING /// ----------------------------------------------------------------------------
String.prototype.replaceAll = function(
	strTarget, // The substring you want to replace
	strSubString // The string you want to replace in.
	){
	var strText = this;
	var intIndexOfMatch = strText.indexOf( strTarget );

	// Keep looping while an instance of the target string
	// still exists in the string.
	while (intIndexOfMatch != -1){
	// Relace out the current instance.
	strText = strText.replace( strTarget, strSubString )

	// Get the index of any next matching substring.
	intIndexOfMatch = strText.indexOf( strTarget );
	}

	// Return the updated string with ALL the target strings
	// replaced out with the new substring.
	return( strText );
}
String.prototype.trim = function(chr){
	var string = this;
	while(string.substr(0,1)==chr)
	string = string.substring(1,string.length) ;
	while(string.substr(string.length-1,1)==chr)
	string = string.substring(0,string.length-1) ;
	return string;
}

/// ARRAY /// ----------------------------------------------------------------------------
Array.prototype.find = function(searchStr) {
  var returnArray = false;
  for (i=0; i<this.length; i++) {
    if (typeof(searchStr) == 'function') {
      if (searchStr.test(this[i])) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    } else {
      if (this[i]===searchStr) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    }
  }
  return returnArray;
}
Array.prototype.remove = function(obj) {
  var a = [];
  for (var i=0; i<this.length; i++) {
    if (this[i] != obj) {
      a.push(this[i]);
    }
  }
  return a;
}

function explode(delimiter, str){
	var tmp = str.split(delimiter); 
	return tmp;
}
function implode(delimiter, arr){
	var tmp = arr.join(delimiter); 
	return tmp;
}


var utf8 = {
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 		for (var n = 0; n < string.length; n++) {
 			var c = string.charCodeAt(n);
 			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
 		return utftext;
	},
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
		while ( i < utftext.length ) {
			c = utftext.charCodeAt(i);
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
 		return string;
	}
}