
/**
 *	Interface:
 *	
 *	class scmsDOMestos{
 *		boolean			checkOut();
 *		boolean			checkClient();
 *		XMLHttpRequest	getHttpRequest();
 *		String 			elementAsVar(name, element);
 *		void			addPostVar(String name, Object element);
 *		void			setPostVars(String post);
 *		void			setGetVars(String get); 
 *		void			addGetVar(name, element);  
 *		String			getPostVars();
 *		String			getGetVars(); 
 *		boolean			addFormVars(Object form, String method); 
 *		Integer			getTopPos(element);	  
 *		Integer			getLeftPos(element); 
 *	}
 */
 
/**
 *
 * 
 */
function scmsDOMestos(){
	// if false DOM may not work
	this._status		= this.checkOut();
	// read the client data
	this._client		= this.checkClient();
	
	/*
		ie = internet explorer
		ns = netscape
		ff = firefox
		kq = konquerror
		op = opera
		sf = safari
	*/
	this._browser 		= Array();
	// full name of browser
	this._browser_name	= '';
	// major number of browser
	this._browser_major = 0;
	
	// os 
	
	
	this._http_postvars = '';
	this._http_getvars = '';
	this._http_content = '';
	
	this.http = this.getHttpRequest();
};

/**
 *
 * 
 */
scmsDOMestos.prototype.checkOut = function(){
	var dom_ok = (document.getElementById) ? true : false;
	var is_opera = false;
	if(navigator.userAgent.indexOf("Opera")!=-1){
		dom_ok = false;
		is_opera = true;
		agent = navigator.userAgent.substr(navigator.userAgent.indexOf("Opera"),navigator.userAgent.length);
		var reg = /[0-9]*\./;
		d = reg.exec(agent);
		if(d.length>=1){
			majorVersion = parseInt(d[0].replace(/\./,''));
			if(majorVersion>=7)
					dom_ok = true;
		}	
	}
	return dom_ok;
};

/**
 *
 *
 */  
scmsDOMestos.prototype.checkClient = function(){
	
};

/**
 *
 * 
 */
scmsDOMestos.prototype.getHttpRequest = function(){
	var xmlHttp = false;
	// 	Mozilla, Opera, Safari and IE above 7
	if (typeof XMLHttpRequest != "undefined") { 
		xmlHttp = new XMLHttpRequest();
		/*if(!xmlHttp || !xmlHttp.setRequestHeader || (xmlHttp.setRequestHeader=="undefined")){
			xmlHttp = false;
		}*/
	}
	// try IE 6 and elders
	if (!xmlHttp) {
	    try {
	        xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
	    }catch(e){
	        try{ 
				xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
	        }catch(e){ xmlHttp  = false; }
		}
	}
	// last chance
	if (!xmlHttp && window.createRequest) {
		try {
			xmlHttp = window.createRequest();
		} catch (e) { xmlHttp=false; }
	}
	return xmlHttp;
};

scmsDOMestos.prototype.setHttpRequest = function(){
	this.http = this.getHttpRequest();
}

/**
 *
 * 
 */
scmsDOMestos.prototype.elementAsVar = function(name, element){
	var wert 	= "";
	var type 	= "";
	var ret		= "";
	if(!name || (name=='') || (name=='undefined')){ return ''; }
	/*
	alert('Name/Element: ' + name + '/' + element);
	alert('TypeOf: ' + typeof element);
	alert('Element.Type: ' + element.type);
	*/
	switch(typeof element){
		case "object":
			type = "object";
			if(element && element.type){
				type = element.type;
			}else if(element && element.length){
				// it seems to be an array
				type = "array";
			}
			break;
		case 'function':
			return;
	}
	
	// alert('Type: ' + type + '#'+name);
	
	switch(type){
		case "array":
		case "object":
			for(var key in element){
				wert += (wert!='') ? '&' : '';
				wert += this.elementAsVar(name+'['+key+']', element[key]);
			}
			name = '';
			break;
		case "select-one":
			wert = escape(element[element.selectedIndex].value);
			break;
		case "select-multi":
		case "select-multiple":
			for(var eli=0; eli<element.length; eli++){
				if(element[eli].selected){
					wert += (wert!='') ? '&' : '';
					wert += this.elementAsVar(name, element[eli].value);
				}
			}
			name = '';
			break;
		case "option":
			break;
		case "radio":
			if(element.checked){
				wert = escape(element.value);
			}else{
				return "";
			}
			break;
		case "checkbox":
			if(element.checked){
				wert = escape(element.value);
			}
			break;
		case "hidden":
		case "password":
		case "text":
		case "textarea":
			wert = escape(element.value);
			break;
		default:
			wert = escape(element);
			break;
	}
	if(name!=""){ 
		ret = name + "=" + wert; 
	}else{
		ret = wert;
	}
	return ret;
};

/**
 *
 */ 
scmsDOMestos.prototype.setPostVars = function(post){
	this._http_postvars = post;
};

/**
 * adds a key value pair from a variable or a form field to post vars
 * the key will ever be 'name' 
 */
scmsDOMestos.prototype.addPostVar = function(name, element){
	var tmp = this.elementAsVar(name, element);
	if(tmp && tmp.match(/=/)){
		this._http_postvars += (this._http_postvars=='') ? '' : '&';
		this._http_postvars += tmp;
	}
};

/**
 * delivers the post variables as string
 */
scmsDOMestos.prototype.getPostVars = function(){
	return this._http_postvars;
};

/**
 *
 */ 
scmsDOMestos.prototype.setGetVars = function(get){
	this._http_getvars = get;
};

/**
 * adds a key value pair from a variable or a form field to get vars
 * the key will ever be 'name' 
 */
scmsDOMestos.prototype.addGetVar = function(name, element){
	var tmp = this.elementAsVar(name, element);
	this._http_getvars += (this._http_getvars=='') ? '?' : '&';
	this._http_getvars += tmp;
};

/**
 *
 * delivers get get variables as string
 */
scmsDOMestos.prototype.getGetVars = function(){
	return this._http_getvars;
};

/**
 *
 */ 
scmsDOMestos.prototype.addFormVars = function(form, method){
	if(!form || (form=='undefined')){ return false; }
	if((typeof form)!='object'){ return false; }
	if(!method || (method=='undefined')){ method = form.method; }
	if((method!='post') && (method!='POST')){ method = 'get'; }
	method = method.toLowerCase();
	var el = form.elements;
    for(var fiel=0; fiel<el.length; fiel++){
		switch(method){
    		case 'get':
				this.addGetVar(el[fiel].name, el[fiel]);
			default:
				this.addPostVar(el[fiel].name, el[fiel]);
    	}
    }	
    return true;
};

/**
 * delivers the absolute top position of element
 */
scmsDOMestos.prototype.getTopPos = function(element){
	var p = element.offsetTop;
	var pElement = element.offsetParent; 
	while (pElement != null){
    	p += pElement.offsetTop;
   		pElement = pElement.offsetParent;
	}
	return p;
};

/**
 * delivers the absolute left position of element
 */
scmsDOMestos.prototype.getLeftPos = function(element){
  var p = element.offsetLeft;
  var pElement = element.offsetParent; 
  while (pElement != null){
    p += pElement.offsetLeft;
	pElement = pElement.offsetParent;
  }
  return p;
};

