// EVENT --->
// removeEvent(whichObject, eventType, functionName)
// addEvent(whichObject,eventType,functionName)
// fixE(e)
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;
}
// EVENT ***


// ELEM --->
// getElem(elemid)
// getElementsByName(tag, name)
// getElementsByClassName(classname, node)
// getChildsByType(elemid, type)
// showElem(elemid)
// hideElem(elemid)
// toggleElem(elemid)
// setX(elemid, value)
// setY(elemid, value)
// newElem(type, params)
// removeElem(elemid)
// addStyle(elemid, styles)
// setOpacity(elemid, value)
// getObj(elemid)
// getAttribute(elemid, name)
// setAttribute(elemid, name, value)
// disableSelection(target)
// getFlashMovieObject(movieName)
// getIframeDocument(elemid)
function getElem(elemid){
	var obj = (typeof(elemid) == "object") ? elemid : document.getElementById(elemid);
	return obj;
}
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 getElementsByClassName(classname, node){
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}
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;
}
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 setX(elemid, value){
	var obj = (typeof(elemid) == "object") ? elemid : document.getElementById(elemid);
	obj.style.left = value+"px";
}
function setY(elemid, value){
	var obj = (typeof(elemid) == "object") ? elemid : document.getElementById(elemid);
	obj.style.top = value+"px";
}
function newElem(type, params){
	var elem = document.createElement(type);
	if(typeof(params) == "object"){
		for(i in params){ elem[i] = params[i]; }
	}
	return elem;
}
function removeElem(elemid) {
  var obj = (typeof(elemid) == "object") ? elemid : document.getElementById(elemid);
  obj.parentNode.removeChild(obj);
}
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 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 getFlashMovieObject(movieName){
	if (window.document[movieName]){
		return window.document[movieName];
	}
	if (navigator.appName.indexOf("Microsoft Internet")==-1){
	if (document.embeds && document.embeds[movieName])
		return document.embeds[movieName];
	}
	else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
	{
		return document.getElementById(movieName);
	}
}
function getIframeDocument(framename){
	var iframe = getElem(framename);
	var iframeDocument = null;
	if (iframe.contentDocument) {
		iframeDocument = iframe.contentDocument;
	} else if (iframe.contentWindow) {
		// for IE 5.5, 6 and 7:
		iframeDocument = iframe.contentWindow.document;
	}
	if (!!iframeDocument) {
		// do things with the iframe's document object
		return iframeDocument;
	} else {
		// this browser doesn't seem to support the iframe document object
		return null;
	}
}
function getInnerHeight(){
	var value = 0;
	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
	if (typeof window.innerWidth != 'undefined'){
	  value = window.innerHeight;
	}
	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	else if (typeof document.documentElement != 'undefined'
	 && typeof document.documentElement.clientWidth !=
	 'undefined' && document.documentElement.clientWidth != 0){
	   value = document.documentElement.clientHeight;
	}
	// older versions of IE
	else{
	   value = document.getElementsByTagName('body')[0].clientHeight;
	}
	return value;
}
function getInnerWidth(){
	var value = 0;
	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
	 if (typeof window.innerWidth != 'undefined'){
		  value = window.innerWidth;
	 } 
	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	 else if (typeof document.documentElement != 'undefined'
		 && typeof document.documentElement.clientWidth !=
		 'undefined' && document.documentElement.clientWidth != 0){
		   value = document.documentElement.clientWidth;
	 }
	 // older versions of IE
	 else{
		   value = document.getElementsByTagName('body')[0].clientWidth;
	 }
	return value;
}
function getPageHeight(){
	var value = (document.all) ? document.body.clientHeight : document.body.clientHeight; 
	return value;
}
function getPageWidth(){
    var value = (document.all) ? document.body.clientWidth : document.body.clientWidth; 
	return value;
}
function getScrollTop(){
	//if(document.all) return document.body.scrollTop;
	//var value = document.body.scrollTop + document.documentElement.scrollTop;
    if (dojo.isChrome){
		var value = dojo.body().scrollTop;
	}else{
		var value = dojo.doc.documentElement.scrollTop;
	}
	return value;
}
function getScrollLeft(){
    var value = document.body.scrollLeft + document.documentElement.scrollLeft; 
	return value;
}
// ELEM ***


// LOAD EXTERNAL --->
// loadCSS(file)
// loadJS(file)
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+" ";
	}
}
// LOAD EXTERNAL ***


// 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;
}
// OBJECT ***


// 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;
}
function implode(delimiter, arr){
	var tmp = arr.join(delimiter); 
	return tmp;
}
function uniqueId(){
    var newDate = new Date;
    newDate.getTime();
	return newDate.getTime();
}
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;
	}
}
var url = {
 	// public method for url encoding
	encode : function (string) {
		return escape(utf8.encode(string));
	},
 	// public method for url decoding
	decode : function (string) {
		return utf8.decode(unescape(string));
	}
}
function px(num){
	if(typeof(num) == "string"){
		return num;
	}else{
		return String(num+"px");
	}
}
// STRING ***


// NUMBER --->
function px2num(str){
	if(typeof(str) == "number"){
		return str;
	}else{
		return parseInt(str);
	}
}
function rand(start, stop){
	var num = start + Math.floor(Math.random() * stop); 
	return num;
}
// NUMBER ***


// 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 in_array (needle, haystack, argStrict) {
    // Checks if the given value exists in the array  
    // 
    // version: 1004.2314
    // discuss at: http://phpjs.org/functions/in_array    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // +   input by: Billy
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false
    var key = '', strict = !!argStrict; 
    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {                return true;
            }
        }
    }
     return false;
}
// ARRAY ***


// CSSRULES --->
function getCss(title){
	if(typeof(title) == "object") return title;
	var styleSheets = document.styleSheets;
	for(var i = 0; i <= styleSheets.length-1; i++){
		if(styleSheets[i].title == title){
			return styleSheets[i];
			break;
		}
	}
	return false;
}
function addCss(title) {
	var styleElement = document.createElement("style");
	styleElement.type = "text/css";
	styleElement.title = title;
	document.getElementsByTagName("head")[0].appendChild(styleElement);
	var css = getCss(title);
	return css;
}
function getCssRule(title, item, propertyName) {
	var mysheet = (typeof(title) == "object") ? title : getCss(title);
	var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;

	var targetrule = {style:{}};
	for (i=0; i<myrules.length; i++){
		var ruleName = myrules[i].selectorText.toLowerCase();
		if(ruleName==item){
			var targetrule = myrules[i];
			break;
		}
	}
	return targetrule.style[propertyName];
}
function changeCssRule(title, item, propertyName, value) {
	var mysheet = (typeof(title) == "object") ? title : getCss(title);
	var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;

	var targetrule = {style:{}};
	for (i=0; i<myrules.length; i++){
		var ruleName = myrules[i].selectorText.toLowerCase();
		if(ruleName==item){
			var targetrule = myrules[i];
			break;
		}
	}
	targetrule.style[propertyName] = value;
}
function deleteCssRule(title, item) {
	var mysheet = (typeof(title) == "object") ? title : getCss(title);
	var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;

	mysheet.crossdelete = mysheet.deleteRule ? mysheet.deleteRule : mysheet.removeRule
	for (i=0; i<myrules.length; i++){
		if(myrules[i].selectorText.toLowerCase().indexOf(item)!=-1){
			mysheet.crossdelete(i);
		}
	}
}
function addCssRule(title, name, styles) {
	var mysheet = getCss(title);

	if(mysheet.addRule){
		mysheet.addRule(name, null, 0);
	}else{
		mysheet.insertRule(name+' {}', 0); 
	}
	for(i in styles){
		changeCssRule(title, name, i, styles[i]);
	}
}
// CSSRULES ***


// 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(elemName) == "string" && elemName != ""){
		//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;
}
// FORM ***
