
window.onerror = null;
window.onerror = BC_doNothing;

var BC_isLoaded = false;
var BC_dialogIsOpen = 0;
var bc_timeout;
var bc_timeout_counter;
var bc_countdown_is_running;
var bc_timeout_respawn_time;
var sess_TIMEOUT = 1200 < 120 ? 120: 1200;
var sess_SEC = 60;
var sess_MIN = parseInt(sess_TIMEOUT / 60) - 1;
var sess_STD = 0;

function newImage(arg) {
	if(document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}

function changeImages() {
	if(document.images && (preloadFlag == true)) {
		for(var i = 0; i < changeImages.arguments.length; i += 2) {
			$(changeImages.arguments[i]).src = changeImages.arguments[i + 1];
		}
	}
}

var preloadFlag = false;
function preloadImages() {
	if(document.images) {
		id1_over = newImage('system/pix/copy_white.PNG');
		id2_over = newImage('system/pix/copy_blue.PNG');
		preloadFlag = true;
	}
}

function show_error(E_error) {
  alert(E_error);
}

function BC_doNothing(Nachricht, Datei, Zeile) {
//	E_error = "Fehlermeldung:\n" + Nachricht + "\n" + Datei + "\n" + Zeile;
// 	show_error(E_error);
	return true;
}

BCAddLoadEvent(BCInitOnLoad);

var scrollfix = {
'select' : function (el){
   if ( typeof(document.media)=='string'){// dom check for IE
     // grab the real functions
     el.scrollonchange = el.onchange ? el.onchange : function(){return true;};
     el.scrollonclick = el.onclick ? el.onclick : function(){return true;};
     el.scrollonblur = el.onblur ? el.onblur : function(){return true;};
     el.scrollonfocus = el.onfocus ? el.onfocus : function(){return true;};

     // make a new onchange which will switch if it's fired twice in a row before onclick or onblur
     el.onchange = function(){
        debug("new onchange");
        if (this.scrolling && this.scrollingfix){switchfunctions(this);return false;}
        if (this.scrollingfix){this.scrolling=true;}
        el.scrollonchange();
     }

     // now set the flag so we know this happened between onchange()'s
     el.onfocus = function(){
        this.scrolling = false; // set flag
        this.scrollingfix = true;
        this.scrollonfocus();
     }

     // now set the flag so we know this happened between onchange()'s
     el.onclick = function(){
        this.scrolling = false; // set flag
        this.scrollingfix = true;
        this.scrollonclick();
     }

     // set flag so we know this happened between scrolling && re-set the onchange if needed
     el.onblur = function(){
        if (this._scrolling){
           this.scrolling = false; // set flag so orignal onchange is happy
           this.onchange = this._scrolling; // unswitch functions
           this.onchange();
           this._scrolling = false;
        }
        this.scrolling = false; // set flag
        this.scrollingfix = false;
        this.scrollonblur(); // run original funciton
     }
   }
}
};
Behaviour.register(scrollfix);

function addEvent(xobject, eventType, functionPointer){
	if (xobject.addEventListener){
		xobject.addEventListener(eventType, functionPointer, false);
		return true;
	} else if (xobject.attachEvent) {
		var result = xobject.attachEvent("on" + eventType, functionPointer);
		return result;
	} else {
		return false;
	}
}

function BCList_showSearchBar() {
	$('BCToolbox').style.display = 'block';
}

function BCList_hideSearchBar() {
	$('BCToolbox').style.display = 'none';
}

function BCList_highlightRow(bcObj) {
	if($(bcObj).className != 'selected') {
		$(bcObj).className = 'hover';
	}
}

function BCList_dehighlightRow(bcObj, bcStyle) {
	if($(bcObj).className != 'selected') {
		$(bcObj).className = bcStyle;
	}
}

function trim(str) {
    return str.replace(/^(\s+)?(\S*)(\s+)?$/, '$2');
}

function ltrim(str) {
    return str.replace(/^\s*/, '');
}

function rtrim(str) {
    return str.replace(/\s*$/, '');
}

function BCDelay(ms, condition) {
	var start = (new Date).getTime();
	while (start + ms > (new Date).getTime() && eval(condition)){ };
}

var marked_row = new Array;
/**
 * Sets/unsets the pointer and marker in browse mode
 *
 * @param   object    the table row
 * @param   interger  the row number
 * @param   string    the action calling this script (over, out or click)
 * @param   string    the default background color
 * @param   string    the color to use for mouseover
 * @param   string    the color to use for marking a row
 *
 * @return  boolean  whether pointer is set or not
 */
function setPointer(theRow, theRowNum, theAction, theDefaultColor, thePointerColor, theMarkColor, tdTextStyle) {
    var theCells = null;

    // 1. Pointer and mark feature are disabled or the browser can't get the
    //    row -> exits
    if ((thePointerColor == '' && theMarkColor == '')
        || typeof(theRow.style) == 'undefined') {
        return false;
    }

    // 2. Gets the current row and exits if the browser can't get it
    if (typeof(document.getElementsByTagName) != 'undefined') {
        theCells = theRow.getElementsByTagName('td');
    }
    else if (typeof(theRow.cells) != 'undefined') {
        theCells = theRow.cells;
    }
    else {
        return false;
    }

    // 3. Gets the current color...
    var rowCellsCnt  = theCells.length;
    var domDetect    = null;
    var currentColor = null;
    var newColor     = null;
    // 3.1 ... with DOM compatible browsers except Opera that does not return
    //         valid values with "getAttribute"
    if (typeof(window.opera) == 'undefined'
        && typeof(theCells[0].getAttribute) != 'undefined') {
        currentColor = theCells[0].getAttribute('bgcolor');
        domDetect    = true;
		if(currentColor == null) {
			currentColor = theCells[0].style.backgroundColor;
		}
    }
    // 3.2 ... with other browsers
    else {
        currentColor = theCells[0].style.backgroundColor;
        domDetect    = false;
    } // end 3

    // 4. Defines the new color
    // 4.1 Current color is the default one
    if (currentColor == ''
        || currentColor.toLowerCase() == theDefaultColor.toLowerCase()) {
        if (theAction == 'over' && thePointerColor != '') {
            newColor              = thePointerColor;
        }
        else if (theAction == 'click' && theMarkColor != '') {
            newColor              = theMarkColor;
            marked_row[theRowNum] = true;
        }
    }
    // 4.1.2 Current color is the pointer one
    else if (currentColor.toLowerCase() == thePointerColor.toLowerCase()
             && (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])) {
        if (theAction == 'out') {
            newColor              = theDefaultColor;
        }
        else if (theAction == 'click' && theMarkColor != '') {
            newColor              = theMarkColor;
            marked_row[theRowNum] = true;
        }
    }
    // 4.1.3 Current color is the marker one
    else if (currentColor.toLowerCase() == theMarkColor.toLowerCase()) {
        if (theAction == 'click') {
            newColor              = (thePointerColor != '')
                                  ? thePointerColor
                                  : theDefaultColor;
            marked_row[theRowNum] = (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])
                                  ? true
                                  : null;
        }
    } // end 4

    // 5. Sets the new color...

    if (newColor) {
        var c = null;
        // 5.1 ... with DOM compatible browsers except Opera
        if (domDetect) {
            for (c = 0; c < rowCellsCnt; c++) {
				if(typeof(theCells[c].nohover) == 'undefined') {
	                theCells[c].setAttribute('bgcolor', newColor, 0);
	                theCells[c].setAttribute('color', '#FFFFFF', 0);
//    	            theCells[c].setAttribute('classname', 'col' + tdTextStyle + c, 0);
				}
            } // end for
        }
        // 5.2 ... with other browsers
        else {
            for (c = 0; c < rowCellsCnt; c++) {
				if(typeof(theCells[c].nohover) == 'undefined') {
    	            theCells[c].style.backgroundColor = newColor;
//	                theCells[c].style.className = 'col' + tdTextStyle + c;
	                theCells[c].style.color = '#FFFFFF';
				}
            }
        }
    } // end 5

    return true;
} // end of the 'setPointer()' function

function BCSelectAll(fieldsname, name, action) {
	switch(action) {
		case 'selectall':
			for (i = 0; i < fieldsname.length; i++) {
				if(fieldsname[i].name == name) {
					fieldsname[i].checked = true;
				}
			}
			break
		case 'deselectall':
			for (i = 0; i < fieldsname.length; i++) {
				if(fieldsname[i].name == name) {
					fieldsname[i].checked = false;
				}
			}
			break
		default:
			break;
	}
	return 0;
}

function VM_InitOnBeforeUnload() {
	$('VMLoadPage').style.display = 'block';
}

function BCInitOnLoad() {
	preloadImages();

	BCStartCountdown();

	if (document.layers) { document.captureEvents(Event.KEYPRESS); }
	if (document.layers) { document.captureEvents(Event.MOUSEDOWN); }

	document.onkeypress = BCInitOnKeypress;
	document.onmousedown = BCInitOnMousedown;

	if(!Prototype.Browser.IE) {
		window.onbeforeunload = VM_InitOnBeforeUnload;
	}

	$('VMLoadPage').style.display = 'none';

	if(document.login) {
		$('BC_Username').focus();
	}

	BC_isLoaded = true;
}

function BCInitOnMousedown(e) {
	if (!e) var e = window.event;

	BCStopCounter();
}

function BCInitOnKeypress(e) {
	if (!e) var e = window.event;

	BCStopCounter();
	BCSuppressKey(e);
}

function BCSuppressKey(e) {
	if (!e) var e = window.event;

	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();

	var keyCode = (document.layers) ? e.which : e.keyCode;

	switch(keyCode) {
		case 13:
			if(document.login) {
				BC_Ajax_CheckLogin();
				return;
			} else {
				BCList_getContentSearch_Ajax(e);
			}
			e.preventDefault? e.preventDefault() : e.returnValue = false;
			break;
		case 27: // escape
			if(BC_dialogIsOpen > 0) {
				Dialog.cancelCallback();
			}
			break;
	}
}

function BCAddLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function BCList_hideValidateMessage() {
	$('BCListMessage').innerHTML = '';
}

function BCList_showValidateMessage(bcMessage) {
	$('BCListMessage').innerHTML = unescape(bcMessage);
}

function BCList_focus(bcId, bcClass) {
	if(bcClass != $(bcId).className) {
		$(bcId).className = bcClass;
	}
	$(bcId).focus();
}

function BCList_showRegisterValidateMessage(bcMessage) {
	$('BCLoginStatusMessage').className = 'BCLoginStatus error';
	$('BCLoginStatusMessage').innerHTML = unescape(bcMessage);
}

function BCList_focusRegister(bcId, bcClass) {
	if(bcClass != $(bcId).className) {
		$(bcId).className = bcClass;
	}
	$(bcId).focus();
}

function BCList_setDefaultClass(bcId, bcClass) {
	if(bcClass != $(bcId).className) {
		$(bcId).className = bcClass;
	}
}

function BCInputAllowed(field, allowedchars) {
	for(var Pos = 0; Pos < $(field).value.length; Pos++) {
		if(allowedchars.indexOf($(field).value.charAt(Pos)) == -1) {
			return false;
		}
	}
	return true;
}

function BCInputFirstChar(field, firstchar) {
	if($(field).value.substr(0, 1) != firstchar) {
		return false;
	}
	return true;
}

function BCInputEmail(BCField) {
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray=$(BCField).value.match(emailPat)
	if (matchArray==null) {
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	if (user.match(userPat)==null) {
    	return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
	    	if (IPArray[i]>255) {
				return false;
		    }
	    }
	    return true;
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
	    return false;
	}

	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length < 2 || domArr[domArr.length-1].length > 3) {
		return false;
	}

	if (len < 2) {
	   return false;
	}

	return BCInputAllowed(BCField, '0123456789abcdefghijklmnopqrstuvwxyz@-.');
}

function BCInputRegisterEmail(BCField, BCDomain) {
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray=$(BCField).value.match(emailPat)
	if (matchArray==null) {
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	if (user.match(userPat)==null) {
    	return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
	    	if (IPArray[i]>255) {
				return false;
		    }
	    }
	    return true;
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
	    return false;
	}

	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length < 2 || domArr[domArr.length-1].length > 3) {
		return false;
	}

	if (len < 2) {
	   return false;
	}

	if(domArr[domArr.length-2] + '.' + domArr[domArr.length-1] != BCDomain) {
		return false;
	}

	return BCInputAllowed(BCField, '0123456789abcdefghijklmnopqrstuvwxyz@-.');
}

function BCCountdown() {
	if(sess_MIN >= 10 && (sess_SEC - 1) >= 10) {
	  sess_SEC = sess_SEC - 1;
	  window.status = "BusinessCards -> Session noch " + sess_MIN + ":" + sess_SEC +" aktiv";
	} else if(sess_MIN >= 10 && (sess_SEC - 1) < 10 && (sess_SEC - 1) >= 0) {
	  sess_SEC = sess_SEC - 1;
	  window.status = "BusinessCards -> Session noch " + sess_MIN + ":0" + sess_SEC + " aktiv";
	} else if( sess_MIN < 10 && sess_MIN >= 0 && (sess_SEC - 1) < 10 && (sess_SEC - 1) >= 0) {
	  sess_SEC = sess_SEC - 1;
	  window.status = "BusinessCards -> Session noch " + sess_MIN + ":0" + sess_SEC + " aktiv";
	} else if(sess_MIN < 10 && sess_MIN >= 0 && (sess_SEC - 1) >= 10) {
	  sess_SEC = sess_SEC - 1;
	  window.status = "BusinessCards -> Session noch " + sess_MIN + ":" + sess_SEC + " aktiv";
	} else if((sess_MIN - 1) >= 10 && sess_SEC == 0) {
	  sess_SEC = 59;  sess_MIN = sess_MIN - 1;
	  window.status = "BusinessCards -> Session noch " + sess_MIN + ":" + sess_SEC + " aktiv";
	} else if((sess_MIN - 1) < 10 && (sess_MIN - 1) >= 0 && sess_SEC == 0) {
	  sess_SEC = 59;  sess_MIN = sess_MIN - 1;  "BusinessCards -> Session noch " + sess_MIN + ":" + sess_SEC + " aktiv";
	} else if(sess_MIN == 0 && sess_SEC == 0) {
	  window.status = 'BusinessCards -> Session Timeout';
	  clearInterval(bc_timeout);
	  location.replace('http://rdmd.das-studio.de');
	}
}

function BCStartCountdown() {
	sess_SEC = 60;
	sess_MIN = (1200 / 60) - 1;
	sess_STD = 0;
	bc_timeout = setInterval('BCCountdown()', 1000);
	bc_countdown_is_running = 1;
}

function BCStopCounter() {
	if(bc_countdown_is_running == 1) {
		clearInterval(bc_timeout);
		bc_countdown_is_running = 0;
		bc_timeout_respawn_time = 10;
		bc_timeout_counter = setInterval('BCountStoptime()', 1000);
	}
	window.status = 'Businesscards -> Session Timeout f�r 10 Sekunden gestoppt';
}

function BCountStoptime() {
	bc_timeout_respawn_time--;
	if(bc_timeout_respawn_time == 0) {
		clearInterval(bc_timeout_counter);
		BCStartCountdown();
	}
}
