/**
 * Some common JS-functions for the digitalworkroom
 * @version $Revison$
 */
/*********************************
	dc_HTTPrequest		
	dc_PrepareQuery
	dc_ExecuteHttpRequest
	dc_PrepareResult
	dc_ReplaceResult
	dc_ReturnResult
	dc_DWXrequest
	
	switchVisible
	switchHidden
	resetHidden
	dc_ConvertSpecialChars
********************************/
var tmp1 = false;
var tmp2 = false;

function dc_HTTPrequest(page,params,fm,fmAll,requestMode,targetObj,fmod)
{
	this.http_request = false;
	this.r_query = '';
	this.r_page = (page != '' ? page : 'parse.php');
	this.r_params = params;
	this.r_form = (fm != '' ? document.forms[fm] : false);
	this.r_form_send = fmAll;
	this.r_mode = requestMode;
	this.r_object = (targetObj != '' ? targetObj : false);
	this.r_objectMulti = new Array();
	this.r_result = false;
	this.r_resultMulti = new Array();
	this.r_fmod = false;
	if(fmod && document.getElementById('if-ajax')) this.r_fmod = true;
	this.prepareQuery = dc_PrepareQuery;
	this.executeRequest = dc_ExecuteHttpRequest;
	this.prepareResult = dc_PrepareResult;
	this.replaceResult = dc_ReplaceResult;
	this.returnResult = dc_ReturnResult;
	
	if(this.r_form_send == '') this.r_form_send = false;
	if(this.r_mode != 'GET' && this.r_mode != 'POST') this.r_mode = 'GET';
	if(this.r_object)
	{
		if(this.r_object != '')
		{
			this.r_params = (this.r_params != '' ? this.r_params+'&AJAX_TMPL='+this.r_object : 'AJAX_TMPL='+this.r_object);
		}
	}
	if(this.r_fmod)
	{
		this.r_params = (this.r_params != '' ? this.r_params+'&AJAX_FRAME=1' : 'AJAX_FRAME=1');
	}
}

function dc_PrepareQuery()
{
	var a,aa,el,elType,elName,retFirst,retLast,fLength;
	
	if(this.r_form && this.r_form_send)
	{
		fLength = this.r_form.elements.length;
		for(a=0; a<fLength; a++)
		{
			el = this.r_form.elements[a];
			if(el.type)
			{
				elType = el.type.toLowerCase();
				elName = el.nodeName.toLowerCase();
				switch(elType)
				{
					case 'select':
					case 'select-one':
						for(aa=0; aa<el.length; aa++)
						{
							if(el.options[aa].selected)
							{
								if(this.r_query != '') this.r_query += '&';
								this.r_query += el.name+'='+escape(el.options[aa].value);
							}
						}
					break;
					
					case 'radio':
					case 'checkbox':
						if(el.length > 0)
						{
							for(aa=0; aa<el.length; aa++)
							{
								if(el[aa].checked)
								{
									if(this.r_query != '') this.r_query += '&';
									this.r_query += el.name+'='+escape(el[aa].value);
								}
							}
						}
						else
						{
							if(el.checked)
							{
								if(this.r_query != '') this.r_query += '&';
								this.r_query += el.name+'='+escape(el.value);
							}
						}
					break;
					
					case 'text':
					case 'hidden':
						if(this.r_query != '') this.r_query += '&';
						this.r_query += el.name+'='+escape(el.value);
					break;
				}
			}
			if(elName == 'textarea')
			{
				if(this.r_query != '') this.r_query += '&';
				this.r_query += el.name+'='+escape(el.value);
			}
		}
		if(this.r_form.action != '')
		{
			var fa = this.r_form.action.split('?');
			if(fa[1])
			{
				if(this.r_query != '') this.r_query += '&';
				this.r_query += fa[1];
			}
		}
	}
	
	if(this.r_params != '')
	{
		var splitParams = this.r_params.split('&');
		var splitParamsSub;
		for(a=0; a<splitParams.length; a++)
		{
			splitParamsSub = splitParams[a].split('=');
			if(this.r_query != '') this.r_query += '&';
			this.r_query += splitParamsSub[0]+'='+escape(splitParamsSub[1]);
		}
	}
}

function dc_ExecuteHttpRequest() 
{
	if(this.r_fmod)
	{
		document.getElementById('if-ajax').src = this.r_page+'?'+this.r_query;
	}
	else
	{
		if (window.XMLHttpRequest) 
		{ // Mozilla
			this.http_request = new XMLHttpRequest();
			if (this.http_request.overrideMimeType) 
			{
				this.http_request.overrideMimeType('text/xml');
			}
		}
		else if (window.ActiveXObject) 
		{ // IE
			try 
			{
				this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e) 
			{
				try 
				{
					this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch (e) 
				{}
			}
		}
		if (this.http_request) 
		{
			// m = 'GET';
			if(this.r_mode == 'POST')
			{
				// this.http_request.onreadystatechange = this.prepareResult;
				this.http_request.open("POST", this.r_page, false);
				this.http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				this.http_request.setRequestHeader("Content-Length", this.r_query.length);
				this.http_request.setRequestHeader("Connection", "close");
				this.http_request.send(this.r_query);
			}
			else if(this.r_mode == 'GET')
			{
				// this.http_request.onreadystatechange = this.prepareResult;
				this.http_request.open("GET", this.r_page+'?'+this.r_query, false);
				this.http_request.send(null);
			}
		}
	}
}

function dc_PrepareResult()
{
	var retIdStart,retIdEnd,retFirst,retLast;
	var a;

	if(this.http_request.readyState)
	{
	    if (this.http_request.readyState == 4)
	    {
	        if (this.http_request.status == 200)
	        {
	        	this.r_result = this.http_request.responseText;
	        }
	    }
	}
	
	if(this.r_result)
	{
		if(window.dc_ConvertSpecialChars)
		{
			this.r_result = dc_ConvertSpecialChars(this.r_result);
		}
		/* if(window.decode_utf8)
		{
			this.r_result = decode_utf8(this.r_result);
		} */
	}
	
	if(this.r_result && this.r_object)
	{
		this.r_objectMulti = this.r_object.split(',');
		for(a=0; a<this.r_objectMulti.length; a++)
		{
			retIdStart = '<!-- AJAX_TMPL:'+this.r_objectMulti[a]+':start -->';
			retIdEnd = '<!-- AJAX_TMPL:'+this.r_objectMulti[a]+':end -->';
			
			retFirst = this.r_result.indexOf(retIdStart);
			retLast = this.r_result.indexOf(retIdEnd,retFirst);
			
			if(retFirst >= 0 && retLast > retFirst)
			{
				this.r_resultMulti[a] = this.r_result.substring(retFirst+retIdStart.length,retLast-1);
			}
		}
	}
}

function dc_ReplaceResult()
{
	var a;
	if(this.r_objectMulti.length > 0)
	{
		for(a=0; a<this.r_objectMulti.length; a++)
		{
			if(this.r_resultMulti[a])
			{
				if(document.getElementById(this.r_objectMulti[a]))
				{
					tmp1 = this.r_objectMulti[a];
					tmp2 = this.r_resultMulti[a];
					setTimeout("document.getElementById(tmp1).innerHTML=tmp2;",100);
					// alert('replace multi '+this.r_objectMulti[a]);
				}
			}
		}
	}
	else if(this.r_result && this.r_object)
	{
		if(document.getElementById(this.r_object))
		{
			tmp1 = this.r_object;
			tmp2 = this.r_result;
			setTimeout("document.getElementById(tmp1).innerHTML=tmp2;",100);
			// alert('replace single '+this.r_object);
		}
	}
}

function dc_ReturnResult()
{
	if(this.r_result)
	{
		return this.r_result;
	}
}

function dc_DWXrequest(page,params,fm,fmAll,requestMode,targetObj,m,fmod)
{
	if(!m) var m = true;
	dc_DWX = new dc_HTTPrequest(page,params,fm,fmAll,requestMode,targetObj,fmod);
	dc_DWX.prepareQuery();
	dc_DWX.executeRequest();
	if(!dc_DWX.r_fmod)
	{
		dc_DWX.prepareResult();
		if(m != 'return_only') dc_DWX.replaceResult();
		return dc_DWX.r_result;
	}
}

function dcDWXframeResult(res)
{
	if(res)
	{
		if(window.dc_ConvertSpecialChars)
		{
			res = dc_ConvertSpecialChars(res);
		}
		alert(res);
		eval(res);
	}
}

/* Print */

function dw_print_mode(m)
{
	if(document.forms['fm_print_text_add'])
	{
		document.forms['fm_print_text_add'].elements['xmlval_PRINT_MODE[0]'].value = m;
		if(document.getElementById('printadd-content'))
		{
			document.getElementById('printadd-content').innerHTML = document.forms['fm_print_text_add'].elements['xmlval_PRINT_TEXT_ADD[0]'].value;
			window.print();
		}
		else if(window.dc_DWXrequest)
		{
			dc_DWXrequest('parse.php','','fm_print_text_add',true,'GET','content','return_only');
			window.print();
		}
		else
		{
			setTimeout("document.forms['fm_print_text_add'].submit()",100);
		}
	}
}

/* Mail */
function dw_sendmail(alertText,mlayId,fm,obj,q)
{
	if(!fm) fm = 'arcticleMailForm';
	if(!obj) obj = 'content';
	if(!q) q = '';
	var f = document.forms[fm];
	if(
		f.elements['xmlval_SENDER_MAIL[0]'].value.length <= 0  ||
		f.elements['xmlval_RECEPIENT_MAIL[0]'].value.length <= 0
	)
	{
		alert(dc_ConvertSpecialChars(alertText));
	}
	else
	{
		var retMsgId = '<!-- AJAX_MAIL_MESSAGE:';
		var retMsg = '';
		var retFirst = -1;
		var retLast = -1;
		
		f.elements['mlay_id'].value=mlayId;
		f.elements['send_email'].value='yes';
		if(window.dc_DWXrequest)
		{
			retMsg = dc_DWXrequest('parse.php',q,fm,true,'GET',obj,'return_only');
			retFirst = retMsg.indexOf(retMsgId);
			if(retFirst > -1)
			{
				retLast = retMsg.indexOf(' -->',retFirst);
				if(retLast > -1)
				{
					retMsg = retMsg.substring(retFirst+retMsgId.length,retLast);
					alert(retMsg);
				}
			}
		}
		else
		{
			setTimeout("document.getElementById('arcticleMailForm').submit();",100);
		}
	}
}

/* Swap visibility */
function dc_toggleVisibility(divID)
{
	var x = ( dc_divIsVisible(divID) ? dc_hideDiv( divID ) : dc_showDiv( divID ) );
}
/* Check if the DIV is visible or not  */
function dc_divIsVisible(divID){
	var e = document.getElementById(divID);
	if (!e) return false;
	return ( e.style.visibility == 'visible') ;
}
/* Show the DIV */
function dc_showDiv(divID)
{
	var e = document.getElementById(divID);
	if (!e) return false;
	e.style.visibility	='visible';
	e.style.display		='block';											
}
/* Hide the DIV */
function dc_hideDiv(divID)
{
	var e = document.getElementById(divID);
	if (!e) return false;
	e.style.visibility	='hidden';
	e.style.display		='none';											
}

function decode_utf8(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;
    }

	function sleep(ms)
	{ 
		var zeit=(new Date()).getTime(); 
		var stoppZeit=zeit+ms; 
		while((new Date()).getTime()<stoppZeit){}; 
	}

	var lastVisible = false;
	var makeHidden = false;
	
    function switchVisible(obj,reentry)
	{
		if(makeHidden)
		{
			clearTimeout(makeHidden);
			makeHidden = false;
		}
		
		if(lastVisible)
		{
			lastVisible.className = lastVisible.className.replace(' over', ' folder');
		}
		
        if (reentry && reentry == true )
        {
            if(lastVisible == obj)
            {
                obj.className = obj.className.replace(' over', ' folder');
                lastVisible = false;
                return;
            }

            if(obj.className.indexOf(' over') == -1)
            {
                obj.className = obj.className.replace(' folder', ' over');
                lastVisible = obj;
            }
            if(obj.className.indexOf(' over') == -1)
            {
                obj.className = obj.className+" over";
                lastVisible = obj;
            }
        }
        else
        {
            if(lastVisible && lastVisible == obj)
            {
                lastVisible = false;
            }
            else if(obj.className.indexOf(' over') == -1)
            {
                obj.className = obj.className.replace(' folder', ' over');
                lastVisible = obj;
            }
        }
    }
	
	function switchHidden(p)
	{
		if(p && lastVisible && !makeHidden)
		{
			makeHidden = setTimeout("switchVisible(lastVisible)",1000);
			
		}
	}
	
	function resetHidden(p)
	{
		if(p && makeHidden)
		{
			clearTimeout(makeHidden);
			makeHidden = false;
		}
	}

	/* Convert dezimal unicode */
	function dc_ConvertSpecialChars(theText)
	{
		dc_ConvertLoop = function(arg1,arg2)
		{
			var i = parseInt(arg2);
			return ( i && i > 0 ? String.fromCharCode(i): arg1 );
		}
		RegExp.lastIndex = 0;
		return theText.replace(/\&\#(\d+)\;/g, dc_ConvertLoop);
	}
