/* $id: clientscript.js - 29.05.2008 */

browser = navigator.userAgent.toLowerCase();
var OO = ( browser.indexOf('opera') > -1 );
var OP = ( browser.indexOf('opera/7') > -1 );
var MO = ( (browser.indexOf('gecko') > -1) && !(OO) );
var IE = ( (browser.indexOf('msie') > -1) && !(OO) && !(MO) );
browser = ( (IE) ? 'msie' : (MO) ? 'gecko' : (OP) ? 'opera' : false ) ;
var BR = browser;

function show_time_bar(server_time,difference,lang)
{
	switch (lang)
	{
		case "de" : var weekDay = new Array("Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam");
					var weekName = "Woche";
					var serverTimeName = "Serverzeit";
					break;
		case "en" : var weekDay = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
					var weekName = "Week";
					var serverTimeName = "Servertime";
					break;
		default   : var weekDay = new Array("Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam");
					var weekName = "Woche";
					var serverTimeName = "Serverzeit";
					break;
	}
	clientTime = new Date();
	serverTime = new Date();
	serverTime.setTime(server_time);
	if (server_time!=0)
		var difference = serverTime.getTime() - clientTime.getTime();
	clientTime.setTime(clientTime.getTime()+difference);
	day = weekDay[clientTime.getDay()];
	date = clientTime.getDate();
	month = clientTime.getMonth() + 1;
	year = clientTime.getFullYear()
	hours = clientTime.getHours();
	minutes = clientTime.getMinutes();
	seconds = clientTime.getSeconds();
	weeks = (clientTime.getTime() - Date.UTC(year,0,0,0,0,0))/(1000*60*60*24*7);
	weeks = Math.ceil(weeks);
	//if (clientTime.getDay()==1 && Math.round(weeks)>Math.floor(weeks)) { weeks = Math.round(weeks); }
	//else { weeks = Math.floor(weeks); }
	if (date < 10) { date = "0" + date; }
	if (month < 10) { month = "0" + month; }
	if (hours < 10) { hours = "0" + hours; }
	if (minutes < 10) { minutes = "0" + minutes; }
	if (seconds < 10) { seconds = "0" + seconds; }
	if (weeks < 10) { weeks = "0" + weeks ; }
	if (weeks > 52) { weeks = "01"; }
	timeString = serverTimeName + ":<br />\n";
	timeString = timeString + day + ", " + date + "." + month + "." + year + " " + hours + ":" + minutes + ":" + seconds;
	timeString = timeString + "<br />\n" + weekName + " <strong>" + weeks + "</strong>\n";
	document.getElementById('time_bar').innerHTML=timeString;
	window.setTimeout("show_time_bar(0," + difference + ",'" + lang + "');", 1000);
}

function MM_jumpMenu(targ,selObj,restore)
{
	eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
	if (restore) selObj.selectedIndex=0;
}

function change_row(style,count,row)
{
	for (var i = 1; i <= count; i++) {
	
		if (style == 1) {
			bg = '#D7EAFF';
		} else if (style==2) {
			
			if (row%2 != 0) {
				bg = '#FFFFFF';
			} else {
				bg = '#FFFFE1';
			} 
		}
	
		element=document.getElementById('r' + i + '_' + row);
		element.style.backgroundColor=bg;
	}
}
function change_form_row(style,count,row)
{
	for (var i=1; i<=count; i++)
	{
		if (style==1) { bg='#FFFFE1'; }
		if (style==2)
		{
			if (row%2!=0) { bg='#FFFFFF'; }
			else { bg='#EEEEEE'; } 
		}
	
		element=document.getElementById('r' + i + '_' + row);
		element.style.backgroundColor=bg;
	}
}
function changeHRowStyle(style,color1,color2,color3,count,row,rn)
{
	if (color1.length != 7)
		color1 = '#FFFFE1';
	if (color2.length != 7)
		color2 = '#FFFFFF';
	if (color3.length != 7)
		color3 = '#EEEEEE';
	for (var i = 1; i <= count; i++)
	{
		if (style == 1)
			bg = color1;
		if (style == 2)
		{
			if (row%2 != 0)
				bg = color2;
			else
				bg = color3; 
		}
	
		element = document.getElementById(rn + i + '_' + row);
		element.style.backgroundColor = bg;
	}
}
function check_all(form_name)
{
	this_form = document.getElementById(form_name);
  	for (var i=0; i<this_form.elements.length; i++)
  	{
		if(this_form.elements[i].type == 'checkbox')
      		this_form.elements[i].checked = !(this_form.elements[i].checked);
    }
}

function changeMarks(inputName)
{
	var elements = document.getElementsByName(inputName + '[]');
 	for (var i = 0; i < elements.length; i++)
    	elements[i].checked = !(elements[i].checked);
}

function MM_setValOfLine(form,x,id,artist,title,label)
{
	opener.document.forms[form].elements['song_id_' + x].value = id;
	opener.document.forms[form].elements['artist_name_' + x].value = unescape(artist);
	opener.document.forms[form].elements['song_title_' + x].value = unescape(title);
	opener.document.forms[form].elements['label_name_' + x].value = unescape(label);
}

function copyFilename(form, source, target)
{
	var form = document.forms[form];
	form.elements[target].value = form.elements[source].value;
}

function refresh_me(URL)
{
   if(opener && opener.closed!=1)
   {
      opener.location.href=URL;
	  return;
   }
}
function add_placeholder(text) {
	var txtarea = document.post.message;
	if (txtarea.createTextRange && txtarea.caretPos)
	{
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == '' ? caretPos.text + '{' + text + '}' + '' : caretPos.text + text;
		txtarea.focus();
	} else {
		txtarea.value  += '{' + text + '}';
		txtarea.focus();
	}
}

function ClipBoard(title, posX, posY)
{
    this.title = title;   
	movable = false;
	minimized = false;
	maximized = false;

	winWidth = ( (IE) ? document.body.offsetWidth : window.innerWidth );
	winHeight = ( (IE) ? document.body.offsetHeight : window.innerHeight );
	deltaWidth = ( (IE) ? 24 : 26 );
	deltaHeight = ( (IE) ? 5 : 10 );
	deltaDisplayHeight = ( (IE) ? 34 : 44 );
	
	containerPosY = posY + 'px';
	//containerPosY = parent.window.innerHeight - 600 - posY + 'px';
	if (IE)
		posX = document.body.offsetWidth - 400 - posX;
	else
		posX = parent.window.innerWidth - 400 - posX;
	containerPosX = posX + 'px';

	deltaX  = 0;
	deltaY  = 0;
	eventX  = 0;
	eventY  = 0;

	XHTML = '  <div id="clipboard">';  
	XHTML +='    <div id="clipboardtitle">';
	XHTML +='      <div id="innerclipboardtitle">';
	XHTML +='        <img id="closer" style="margin:1px;" src="templates/images/close.gif" alt="Cl" />';
	XHTML +='        <img id="maximizer" style="margin: 1px;" src="templates/images/maximize.gif" alt="Ma" />';
	XHTML +='        <img id="minimizer" style="margin: 1px;" src="templates/images/minimize.gif" alt="Mi" />';
	XHTML +='        %TITLE%';
	XHTML +='      </div>';
	XHTML +='    </div>';
	XHTML +='    <div id="clipboardcontent">';
	XHTML +='      %CONTENT%';
	XHTML +='    </div>';
	XHTML +='  </div>';


	// INITIALIZE PUBLIC METHODS
	this.pop = pop;

	// METHODS
	function pop()
	{
		if (!BR)
		{
			POPwin = window.open('', 'popper', '');
			POPwin.document.open();
			POPwin.document.write(XHTML.replace(/%TITLE%/, this.title).replace(/%CONTENT%/, this.content));
			POPwin.document.close();
		}
		else
		{
			document.writeln(XHTML.replace(/%TITLE%/, this.title).replace(/%CONTENT%/, this.content));

			  dragger = document.getElementById('clipboardtitle');
			  container = document.getElementById('clipboard');
			  innerDisplay = document.getElementById('clipboardcontent');
			  theCloser = document.getElementById('closer');
			  theMaximizer = document.getElementById('maximizer');
			  theMinimizer = document.getElementById('minimizer');

			  containerWidth = container.style.width;
			  containerHeight = container.style.height;
			  setContainerPos(containerPosX, containerPosY, true);
			  addEvent(dragger, dragStart, 'mousedown');
			  addEvent(window, dragStop, 'mouseup');
			  addEvent(window, dragIt, 'mousemove');
			  addEvent(theMinimizer, minimize, 'click');
			  addEvent(theMaximizer, maximize, 'click');
			  addEvent(theCloser, closeWin, 'click');
		}
	}

	function addEvent(element, func, event)
	{
		switch (BR)
		{
  			case 'gecko':
				element.addEventListener(event, func, false);
				break;
  			case 'opera':
  			case 'msie':
				if (element == window)
	  				document.body.attachEvent('on' + event, func);
				else
	  				element.attachEvent('on' + event, func);
  				break;
		}
	}

	function minimize(e)
	{
		if (maximized)
		{
  			maximized = false;
  			setInnerDisplayHeight('');
  			setContainerDim(containerWidth, containerHeight);
  			setContainerPos(containerPosX, containerPosY, true);
		}
		else
		{
  			minimized = true;
  			displayInnerDisplay(false);
		}
	}
	function maximize(e)
	{
		if (minimized)
		{
  			minimized = false;
  			displayInnerDisplay(true);
		}
		else
		{
  			maximized = true;
  			setContainerDim( (winWidth-deltaWidth + 'px'), (winHeight-deltaHeight + 'px') );
  			setContainerPos('0px', '0px', false);
  			setInnerDisplayHeight( winHeight-deltaDisplayHeight );
		}
	}
	function closeWin(e)
	{
		container.style.display = 'none';
	}
	function dragStart(e)
	{
		movable = true;
	}
	function dragStop(e)
	{
		movable = false;
		eventX = 0;
		eventY = 0;
	}
	function dragIt(e)
	{
		if (movable)
		{
			if ((eventX > 0) || (eventY > 0))
			{
				deltaX = e.clientX - eventX + parseInt(getContainerPosX());
				deltaY = e.clientY - eventY + parseInt(getContainerPosY());
				setContainerPos(deltaX + 'px', deltaY + 'px', true);
			}
			eventX = e.clientX;
			eventY = e.clientY;
		}
	}
	function getContainerPosX()
	{
		return container.style.left.replace(/px/, '');
	}
	function getContainerPosY()
	{
		return container.style.top.replace(/px/, '');
	}
	function setContainerPos(cX, cY, persistent)
	{
		container.style.top   = cY;
		container.style.left  = cX;
		if (persistent)
		{
			containerPosY = cY;
			containerPosX = cX;
		}
	}
	function setContainerDim(cWidth, cHeight)
	{
		container.style.width   = cWidth;
		container.style.height  = cHeight;
	}
	function displayInnerDisplay(bool)
	{
		innerDisplay.style.display = ( bool ? 'block' : 'none' );
	}
	function setInnerDisplayHeight(height)
	{
		innerDisplay.style.height = height ? height + 'px' : '';
	}
}

function pageLoaded(target)
{
	try {
		if (!target)
			target = this;
		target.document.getElementById("loadbar").style.display = "none";
	} catch (e) {
		return false;
	}
	return true;
}

function calcPeriod()
{
	var pElem = document.getElementById('period');
	var startDay = document.getElementById('start_day').value;
	var startMonth = document.getElementById('start_month').value;
	var startYear = document.getElementById('start_year').value;
	var endDay = document.getElementById('end_day').value;
	var endMonth = document.getElementById('end_month').value;
	var endYear = document.getElementById('end_year').value;
	var startDate = new Date(startYear, startMonth - 1, startDay); // Month begins with 0
  	var startTime = startDate.getTime() / 1000;
  	var endDate = new Date(endYear, endMonth - 1, endDay); // Month begins with 0
  	var endTime = (endDate.getTime()) / 1000;
  	var period = endTime - startTime;
	period = period / (60 * 60 * 24);
	period = Math.floor(period);
	if (period < 0 || isNaN(period))
		period = '-';
	pElem.innerHTML = period;
}

function refreshWindow(w, url)
{
	switch (w)
	{
		case 'opener'	: opener.location.href = url; break;
		default			: opener.location.href = url; break;
	}
}

function getElementsByClass(searchClass,node,tag)
{
  var classElements = new Array();
  if (node == null)
    node = document;
  if (tag == null)
    tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
    if (pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

function popDeleteBox(elemName,boxElements)
{
	var elements = getElementsByClass('pop_box');
	var elem = document.getElementById(elemName);
	var linkElem = document.getElementById('a_' + elemName);
	var callerPos = RicoUtil.toDocumentPosition(linkElem);
	var html;
	for (i = 0; i < elements.length; i++)
		elements[i].innerHTML = '';
	if (elem.innerHTML)
	{
		elem.innerHTML = '';
		elem.style.display = 'none';
	}
	else
	{
		if (boxElements)
		{
			html = '<span class="pop_box" style="left: ' + callerPos.x + 'px; top: ' + callerPos.y + 'px;">'
			for (i = 0; i < boxElements.length; i++)
				html += '<a href="' + boxElements[i][1] + '" onclick="' +  boxElements[i][2] +'" class="pop_box_link">' + boxElements[i][0] + '</a>'
			html += '</span>';
			elem.innerHTML = html;
			elem.style.display = 'block';
		}
	}
}

function change_visibility(id)
{
	element=document.getElementById('change_vis_charts_' + id);
	if (element.style.display=='none') 
 	{
		element.style.display='';
		document['change_img_' + id].src = "templates/images/collapse.gif";
	}	
 	else
	{	
		element.style.display='none';
		document['change_img_' + id].src = "templates/images/expand.gif"; 
	}
}

/* ----- check if enter button pressed ----- */

var keyEnterDown = false;
document.onkeydown = catchKeyDown;
document.onkeyup = catchKeyUp;

function catchKeyDown(e)
{
	var keycode = document.all ? event.keyCode : e.which;
	if ((""+keycode) == "13")
   		keyEnterDown = true;
}

function catchKeyUp(e)
{
	var keycode = document.all ? event.keyCode : e.which;
	if ((""+keycode) == "13")
   		keyEnterDown = false;
}

/* // ----- check if enter button pressed ----- */

/* ----- simulate form submit ----- */

function simulateSubmit(form,id)
{
	var elem = document.getElementById('simulate_submit');
	elem.setAttribute('name',id);
	if (keyEnterDown == false)
	{
		document.forms[form].setAttribute('onSubmit','return true;');
		document.forms[form].submit();
	}
	document.forms[form].setAttribute('onSubmit','return false;');
}

/* // ----- simulate form submit ----- */

/* ----- update file structure form ----- */

function updateFSF(id)
{
	var i = 7;
	curElem = document.getElementById('col_' + id);
	
	for (i = 1; i <= 7; i++)
	{
		elem = document.getElementById('col_' + i);
		if (i != id && elem.selectedIndex == curElem.selectedIndex)
			elem.selectedIndex = 0;
	}
}

/* // ----- check file structure form ----- */

/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */

var _WINDOWS = new Array();

/**
 * Trim string.
 */
function trim(_str)
{
	return _str.replace(/^\s+/, '').replace(/\s+$/, '');
}

/**
 * Open popup window.
 */
function openPopup(_url, _width, _height)
{
	var params = 'toolbar=no,location=no,directories=no,status=no,copyhistory=no,scrollbars=yes,resizable=no,width='
	           + (_width ? _width : 700) + ',height=' + (_height ? _height : 500) + ',screenX=10,screenY=10';
	_WINDOWS[_WINDOWS.length] = window.open(_url, 'wnd' + _WINDOWS.length, params);
	if (_WINDOWS[_WINDOWS.length - 1].opener == null) {
		_WINDOWS[_WINDOWS.length - 1].opener = window;
	}
	_WINDOWS[_WINDOWS.length - 1].focus();
}

function AjaxRequest(_url, _method)
{
	this.READY_STATE_UNINITIALIZED = 0;
	this.READY_STATE_LOADING = 1;
	this.READY_STATE_LOADED = 2;
	this.READY_STATE_INTERACTIVE = 3;
	this.READY_STATE_COMPLETE = 4;

	if (_method == null)
		_method = 'GET';
	
	this.url = _url;
	this.method = _method;
	this.HTTP = null;
	this.timeout = null;
	this.readyStateInitFunc = null;
	this.readyStateInitParams = null;
	this.readyStateLoadedParams = null;
	this.readyStateLoadedFunc = null;
	
	// Create HTTP object
	if (window.XMLHttpRequest) {
		this.HTTP = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		this.HTTP = new ActiveXObject('Microsoft.XMLHTTP');
	}
}

AjaxRequest.prototype.setReadyStateInitFunc = function(_func, _params)
{
	this.readyStateInitFunc = _func;
	_params = _params != null ? _params : '';
	this.readyStateInitParams = _params;
}

AjaxRequest.prototype.setReadyStateLoadedFunc = function(_func, _params)
{
	this.readyStateLoadedFunc = _func;
	_params = _params != null ? _params + ', ' : '';
	this.readyStateLoadedParams = _params;
}

AjaxRequest.prototype.send = function(_params)
{
	var loader = this;
	
	// Call init function
	if (loader.readyStateInitFunc)
		eval(loader.readyStateInitFunc + '(' + loader.readyStateInitParams + ')');
		
	// Try to open connection
	this.HTTP.open(this.method, this.url, true);
	this.HTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	this.HTTP.onreadystatechange = function() {
		// Call function if loaded succesfully
		var readyState = loader.HTTP.readyState;
		if (readyState == loader.READY_STATE_COMPLETE) {
			window.clearTimeout(loader.timeout);
			var data = loader.HTTP.responseText;
			if (loader.readyStateLoadedFunc)
				eval(loader.readyStateLoadedFunc + '(' + loader.readyStateLoadedParams + 'data)');
		}
	};
	
	// Send request
	this.HTTP.send('' + _params + '');
}











