//*** AJAX variables ************
var httpGeneric;
var ajaxDelimiter = '||';
//*******************************

// ***************************************************************************************************************
// ***** AJAX CODE ***********************************************************************************************
// ***************************************************************************************************************
function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else if(window.XMLHttpRequest) {
        ro = new XMLHttpRequest();
    }else{
    	ro = new ActiveXObject("Microsoft.XMLHTTP");
    }

    return ro;
}
//***************************************************************************************************************

function ajaxWithLoad(html_post) {
    var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
    if(html_post=="") return; 	//ensure that no update takes place if the link is incomplete
    httpGeneric = createRequestObject();
    httpGeneric.onreadystatechange = handleResponseGeneric;
	
	//Google Analytics Register
//	urchinTracker(html_post);
    if(typeof(pageTracker) == "object"){
	    pageTracker._trackPageview(html_post);
	}

    httpGeneric.open("post", 'ajax.php', true);
    httpGeneric.setRequestHeader("Content-Type", contentType);
    httpGeneric.send(html_post);
}

// This function is identical to the above, except that no load layer is shown 
function ajax(html_post) {
    var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
    if(html_post=="") return; 	//ensure that no update takes place if the link is incomplete
    httpGeneric = createRequestObject();
    httpGeneric.onreadystatechange = handleResponseGenericNoLoad;

	//Google Analytics Register
//	urchinTracker(html_post);
    if(typeof(pageTracker) == "object"){
	    pageTracker._trackPageview(html_post);
	}
	
    httpGeneric.open("post", 'ajax.php', true);
    httpGeneric.setRequestHeader("Content-Type", contentType);
    httpGeneric.send(html_post);
}

//***************************************************************************************************************

function handleResponseGeneric() {
	//alert(httpGeneric.readyState);
	if(httpGeneric.readyState == 4){

  	elem = document.getElementById('load_container').style;
		elem.visibility = 'hidden'; //added to get rid of load div box blocking for underlying elementsw //AKM 020906

		var response = httpGeneric.responseText;
		var update = new Array();
	
		
		//alert(response);
		if(response.indexOf(ajaxDelimiter) != -1) {
			update = response.split(ajaxDelimiter); //the id of the element is stored before the '||' (returned from ajax.php)
			
			//NOTE: start at i=1 since there are escape characters at i=0
			for(i=1;i<update.length;i++){
				//change the content of the div
				//alert(update[i] + " i=" + i + " (length="+update.length+")");
				
				//*** TAKE CARE OF ERRORS IN THE SUBMITTED DATA								
				if(update[i] == "") {
					i = update.length;
				//*** RUN NESTED SCRIPTS (CONTROLLED BY AJAX.PHP) ***/
				}else if(update[i] == "run_nested_script") {
					//NOTE: This is a generic way to run additional scripts during the ajax handling.
					//		When used, the script should be put after the string "||run_nested_script||"
					eval(update[i+1]);
				}else{
				//*** OR UPDATE THE DIV WITH THE CONTENT (NORMAL USE) ***/
					document.getElementById(update[i]).innerHTML = update[i+1];
				}
				i++;
			}
		}
    }
    else {
    	showLoad(httpGeneric.readyState);
    }
}

// this is the same as above, except that no load is shown
function handleResponseGenericNoLoad() {

//alert(httpGeneric.readyState);
	if(httpGeneric.readyState == 4){

//  		elem = document.getElementById('load_container').style;
//		elem.visibility = 'hidden'; //added to get rid of load div box blocking for underlying elementsw //AKM 020906

		var response = httpGeneric.responseText;
		var update = new Array();
	
		
//alert(response);
		if(response.indexOf(ajaxDelimiter) != -1) {
			update = response.split(ajaxDelimiter); //the id of the element is stored before the '||' (returned from ajax.php)
		
			//NOTE: start at i=1 since there are escape characters at i=0
			for(i=1;i<update.length;i++){
				//change the content of the div
//				alert(update[i] + " i=" + i + " (length="+update.length+")");
				
				//*** TAKE CARE OF ERRORS IN THE SUBMITTED DATA								
				if(update[i] == "") {
					i = update.length;
				//*** RUN NESTED SCRIPTS (CONTROLLED BY AJAX.PHP) ***/
				}else if(update[i] == "run_nested_script") {
					//NOTE: This is a generic way to run additional scripts during the ajax handling.
					//		When used, the script should be put after the string "||run_nested_script||"
					eval(update[i+1]);
				}else{
				//*** OR UPDATE THE DIV WITH THE CONTENT (NORMAL USE) ***/
					document.getElementById(update[i]).innerHTML = update[i+1];
				}
				i++;
			}
		}
	}
}



function showLoad(){
		var vTop = screen.awailHeight/2;
		var vLeft = screen.width/2;
		
		elem = document.getElementById('load_container').style;
		
		/*************************************************/
		//NEW: Script ensures that the loading-div is always visible
/*
    	if (browser.isIE) {
    		//do nothing	
    	}else{
			var scrollTop = document.body.scrollTop;
			if (scrollTop == 0) {
				if (window.pageYOffset)
					scrollTop = window.pageYOffset;
				else
					scrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
			}
			var posy = scrollTop + 120; 
			elem.marginTop = posy+'px';
		}
*/




		/*************************************************/

		elem.height = '32px';
		elem.visibility = 'visible'; //ensures that load div is shown //AKM 020906
}

//***************************************************************************************************************
//***************************************************************************************************************
//***************************************************************************************************************

//somehow Safari wont react to the onkeyup event but only the onkeypress
function fakeKeyUp(field,event){
	if(getBrowser() == "Safari") {
		if(event.keyCode == 13) {
			//liveSearch(field,"","",true);
			liveSearchDelay(field,"","",true);
		}
	}
}

//somehow Safari wont react to the onkeyup event but only the onkeypress
// ... so below is a 
function fakeKeyUpForValidateForm(){
	if(getBrowser() == "Safari") {
   		validateForm('review_required_fields','review_submit');
	}
}

//*********************//

//*** LOGIN/USER ACCOUNT SCRIPTS ***//
var array_login_strings = Array();
array_login_strings['login_email_field'] = "BRUGERNAVN";
array_login_strings['login_password_field'] = "KODEORD";

array_login_strings['login_email_float'] = "BRUGERNAVN";
array_login_strings['login_password_float'] = "KODEORD";

var array_new_user_strings = Array();
array_new_user_strings['user_username_field'] = "V�lg et brugernavn";
array_new_user_strings['user_email_field'] = "Skriv din e-mailadresse";
array_new_user_strings['user_email2_field'] = "Skriv din e-mailadresse igen";
array_new_user_strings['user_password_field'] = "V�lg et kodeord";
array_new_user_strings['user_password2_field'] = "Gentag det valgte kodeord";
array_new_user_strings['user_old_password_field'] = "Skriv dit gamle kodeord";
array_new_user_strings['user_first_name_field'] = "Skriv dit fornavn";
array_new_user_strings['user_surname_field'] = "Skriv dit efternavn";
array_new_user_strings['user_zipcode_field'] = "Angiv dit postnummer";
array_new_user_strings['user_age_field'] = "dd-mm-����";

var array_lost_pass_strings = Array();
array_lost_pass_strings['lost_pass_username_field'] = "SKRIV DIT BRUGERNAVN";
array_lost_pass_strings['lost_pass_email_field'] = "SKRIV DIN E-MAILADRESSE";

function toggleText(obj,field_text,field_is_password) {
	
	//note: only firefox and safari supports field type change so far...
	browser = getBrowser(); 
	if(browser=="Firefox"||browser=="Safari") browser_ok = true;
	else browser_ok = false;
	
	if(obj.value=="") {
		if(field_is_password && browser_ok) {
			obj.type = "text";
		}
		obj.value = field_text;
	}else if(obj.value==field_text) {
		if(field_is_password && browser_ok) {
			obj.type = "password";
		}
		obj.value = "";
	}
}

function changePasswordFieldType(obj){
	//note: only firefox and safari supports field type change so far...
	browser = getBrowser(); 
	if(browser=="Firefox"||browser=="Safari") {
		obj.type = "text";
    }
}

function clearIfDefault(id,field_text){
	obj = document.getElementById(id);
	if(obj.value==field_text) {
		obj.value = "";
	}
}

//this function is used solely when editing/changing user account details
function clearUserFieldsIfDefault(all_or_some){
	if(all_or_some=="some") {
		fields_to_be_cleared = new Array('user_first_name_field','user_surname_field','user_zipcode_field','user_country_field','user_age_field');
	}else{
		fields_to_be_cleared = new Array('user_first_name_field','user_surname_field','user_zipcode_field','user_country_field','user_age_field','user_email_field','user_email2_field');
	}
	for(i=0;i<fields_to_be_cleared.length;i++) {
		obj = document.getElementById(fields_to_be_cleared[i]); //get the object
		if(obj.value==array_new_user_strings[fields_to_be_cleared[i]]) { //look up the text value from the array array_new_user_strings
			obj.value = "";
		}
	}
}

function setCookie(value) {  
	    var date = new Date();  
    	date.setTime(date.getTime() + (60*60*24*30*1000));
	    var expires = date.toGMTString();  
		document.cookie = "spredrygtet_logon="+value+"; expires="+expires+"; path=/; domain=.spredrygtet.dk";
}

function deleteCookie(value) {
	    var date = new Date();  
    	date.setTime(date.getTime() - 3600);
	    var expires = date.toGMTString();  
		document.cookie = "spredrygtet_logon="+value+"; expires="+expires+"; path=/; domain=.spredrygtet.dk";
}



//***************************************************************************************************************
//***** OTHER SCRIPTS *******************************************************************************************
//***************************************************************************************************************

// ### OVERLAY SCRIPTS ### //

//script that fades a overlay in or out (used to control the user's focus)

var overlay_displayed = false;			//tells other functions if the transparent layer is displayed or not
var overlay_content_displayed = false;  //tells other functions if something is displayed on top of the transparent layer or not

function toggleOverlay(show_or_hide) {	
	var speed = 5; 	//sets the speed of the fading
	var low = 0; 	//0 = fade completely out
	var high = 60; 	//60 = semi-transparent
	var i = 0;
	var timer = 0;



	//resize the overlay div to accomodate for changed windows size etc.
    var overlay = document.getElementById("overlay").style;
	var docHeight; var docWidth;
	if (typeof document.height != 'undefined') {
		docHeight = document.height;
		docWidth = document.width;
	}else if (document.compatMode && document.compatMode != 'BackCompat') {
		docHeight = document.documentElement.scrollHeight;
		docWidth = document.documentElement.scrollWidth;
	}
	else if (document.body && typeof document.body.scrollHeight !='undefined') {
		docHeight = document.body.scrollHeight;
		docWidth = document.body.scrollWidth;
	}
	//set minimum height
	if(docHeight<600) docHeight = 600;
	
    overlay.height = docHeight+"px";
    overlay.width = docWidth+"px";
				
	if(show_or_hide == 1) {
		//the overlay is hidden as default, so start by showing it (although transparent), if the purpose is to fade in
		toggleLayer('overlay',1);
		for(i=low; i<=high;){
			setTimeout("toogleOverlayChangeOpacity(" + i + ")",(timer * speed));
			timer++;
			i = i+2;
		}
		overlay_displayed = true;
	}else {
		for(i=high; i>=low;){
			setTimeout("toogleOverlayChangeOpacity(" + i + ")",(timer * speed));
			timer++;
			i = i-2;
		}
		//if fading out, then end by hiding the overlay so it doesn't block for other divs
		setTimeout("toggleLayer('overlay',2)",(timer*speed));
		overlay_displayed = false;
	} 
}	

//function is used in the toggleOverlay function above
function toogleOverlayChangeOpacity(opacity) {
    var object = document.getElementById("overlay").style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
} 	


// This function toggles the display property of the div id
// function_var:   0=toggle layer on/off (default)   1=show layer   2=hide layer
// overlay_function: false=don't toggle transparent layer (default)   true=toggle transparent layer
function toggleLayer(layer_id,function_var,overlay_function){
	function_var = (typeof function_var == "undefined") ? 0 : function_var; //if the function_var is undefined, assign 0 as default value
	overlay_function = (typeof overlay_function == "undefined") ? false : overlay_function; //if the overlay_function variable is undefined, assign false as default value
	
	var obj; var displayed_a_layer = false;
	
	if (document.getElementById){
		obj = document.getElementById(layer_id).style;
	}else if (document.all){
		obj = document.all[layer_id].style;
	}else if (document.layers){
		obj = document.layers[layer_id].style;
	}
	if (obj){
		if(function_var==0){ //toggle on/off
			if(obj.display){
				obj.display = "";
				displayed_a_layer = false;
			}else{
				obj.display = "block";
				displayed_a_layer = true;
			}
		}else if(function_var==1){ //show layer
			obj.display = "block";
			displayed_a_layer = true;
		}else if(function_var==2){ //hide layer
			obj.display = "";
			displayed_a_layer = false;
		}


		if(displayed_a_layer){
			if(overlay_function){ //if set to true, the overlay should be toggled (on/off) 
				toggleOverlay(1);
				overlay_content_displayed = true;
			 }
			return 1;
		}else{
			if(overlay_function){ //if set to true, the overlay should be toggled (on/off) 
				toggleOverlay(0);
				overlay_content_displayed = false;
			 }
			return 0;
		}

/*			
		if(overlay_function){ //if set to true, the overlay should be toggled (on/off) 
			if(displayed_a_layer) {
				toggleOverlay(1);
				overlay_content_displayed = true
				return 1;
			}else{
				toggleOverlay(0);
				overlay_content_displayed = false;
				return 0;
			}
		}
*/
	}
}

//function to ensure that the user want to close the 'new review' window
function confirm_review_close(layer_id) {
    if(confirm("Du er ved at lukke vinduet! Hvis du trykker OK, mister du den anmeldelse, du er ved at indtaste.")){
        toggleLayer(layer_id,2,true);
    }else{
        return false;
    }
}


// ### KEY LISTENING SCRIPTS ### //

var help_toggle = ""; //this variable is used for accomodating the different browsers behave differently and that both the keydown and keypress function need to be listened for
document.onkeypress = keyListener;
//document.onkeydown = keyListener; //12-03-2008 AKM: Removed to prevent double-calls. tested in FF+Safari (Mac) and FF/IE7/IE6 (Win)

function keyListener(e) {
	
		
	var characterCode;
	browser = getBrowser(); 
	if(browser == "Internet Explorer") {
		e = window.event;   
		char_code = e.keyCode;
	}else if(browser == "Firefox") {
		char_code = e.keyCode;
	}else if(browser == "Safari") {
		char_code = e.keyCode;
	}	
	
		
	//ESC-key closes overlay 'windows' 
	//  below is an event listener, listening for the ESC-button to be pressed, and if the overlay is displayed it out-fades the overlay 
	//  and hides the layer that is displayed on top of the overlay (NOTE: THIS HAS TO BE HARD-CODED IN THE ARRAY)
	if(char_code == 27 && overlay_displayed){ //if generated character code is the ESC-key AND the overlay layer is shown

		//*** 1) first create array with layers to be checked for existense (and then hide the one that is displayed)
		var layers_to_be_checked = new Array();
		var count = 0;
		layers_to_be_checked[count++] = "user_show_info_box";
		layers_to_be_checked[count++] = "user_change_password_box";
		layers_to_be_checked[count++] = "help_box";
		layers_to_be_checked[count++] = "main_new_review_box";
		layers_to_be_checked[count++] = "main_login_new_user_box";
		layers_to_be_checked[count++] = "float_container";
		layers_to_be_checked[count++] = "about_box";
		layers_to_be_checked[count++] = "law_box";
		layers_to_be_checked[count++] = "edit_user_box";
		layers_to_be_checked[count++] = "floating_login_box";
		layers_to_be_checked[count++] = "feedback";
		layers_to_be_checked[count++] = "show_review_permalink";
		layers_to_be_checked[count++] = "show_comment_permalink";
		layers_to_be_checked[count++] = "feeds_box";
		layers_to_be_checked[count++] = "speedy_rating_box";

	
		//check to see if the layer is existing
		for(i=0;i<layers_to_be_checked.length;i++){
			layer_id = layers_to_be_checked[i];				
			if (document.getElementById){
				obj = document.getElementById(layer_id);
			}else if (document.all){
				obj = document.all[layer_id];
			}else if (document.layers){
				obj = document.layers[layer_id];
			}
			
			//*** 2) hide the layer that exists
			if(obj){
			    //if the user is creating a new review, he/she should be warned before closing the window
			    if(document.getElementById("main_new_review_box").style.display!=""){
			        if(layer_id=="main_new_review_box"){
    			        if(confirm("Du er ved at lukke vinduet! Hvis du trykker OK, mister du den anmeldelse, du er ved at indtaste.")){
            			    toggleLayer(layer_id,2,true);
                    		//*** 2.1) and hide/fade-out the overlay
                        }else{
                            return false;
                        }
                    }
			    }else{
            		//*** 2.1) hide the layer that exists and hide/fade-out the overlay
    			    toggleLayer(layer_id,2,true);

    			}
			}
			
			//*** 2.2) if the user was using the type-ahead function, then also hide that
            if(theTextBox)  document.getElementById(theTextBox.obj.spanId).style.display = "none";
			
		}
	}else if(char_code==112){ //if generated character code is the F1-key show/hide HELP-box 

		//check to see if the help_toggle has been set. Since this function (keyListener) is fired at both keydown og keypress events, 
		//the toggle variable is necessary to prevent that the help layer is displayed and then immidiately hidden again.
		if(help_toggle==1){
			help_toggle="";
			return false;
		}

		//here's a possibility to have different functionality for different browsers
		if(browser == "Internet Explorer" || browser == "Safari" || browser == "iPhone") {
			//NOTE: In Internet Explorer the character 'p' has charcode 112 for keypress event
			if(browser == "iPhone"){
			    if(e.type=="keydown") return true;
			}else{
    			if(e.type=="keypress") return true;
    	    }
			
			//in Internet Explorer/Safari the keydown-event is not fired, so the help_toggle variable should not be set 
		}else if(browser == "Firefox") {
			if(help_toggle!=1) 	help_toggle = 1;
		}else if(browser == "Safari") {
			if(help_toggle!=1) 	help_toggle = 1;
		}	

		var help_displayed;
		
		//check to see if the overlay is displayed (else ignore)
		if (document.getElementById){
			obj_help = document.getElementById("help_box").style;
		}else if (document.all){
			obj_help = document.all["help_box"].style;
		}else if (document.layers){
			obj_help = document.layers["help_box"].style;
		}

		
		if (obj_help && obj_help.display!=""){
			help_displayed = true;
		}else{
			help_displayed = false;
		}

		if(help_displayed){
			//only hide the overlay layer if there is not something else (another function) displayed on top of the overlay
			if(overlay_displayed && !overlay_content_displayed){
				toggleOverlay(0);
			}
			toggleLayer("help_box",2);
		}else{
			//only display the overlay layer if it is not already visible
			if(!overlay_displayed){
				toggleOverlay(1);
			}
			toggleLayer("help_box",1);
		}
		
				
		//this should prevent the windows users from activating the browser help function
		return false;
	}
}

function showHideHelp(){
		var help_displayed;
		
		//check to see if the overlay is displayed (else ignore)
		if (document.getElementById){
			obj_help = document.getElementById("help_box").style;
		}else if (document.all){
			obj_help = document.all["help_box"].style;
		}else if (document.layers){
			obj_help = document.layers["help_box"].style;
		}

		
		if (obj_help && obj_help.display){
			help_displayed = true;
		}else{
			help_displayed = false;
		}

		if(help_displayed){
			//only hide the overlay layer if there is not something else (another function) displayed on top of the overlay
			if(overlay_displayed && !overlay_content_displayed){
				toggleOverlay(0);
			}
			toggleLayer("help_box",2);
		}else{
			//only display the overlay layer if it is not already visible
			if(!overlay_displayed){
				toggleOverlay(1);
			}
			toggleLayer("help_box",1);
		}

}




function printing(){
	setTimeout("window.print()",1000);
}


// kindly borrowed from http://www.quirksmode.org/js/events_mouse.html
// The function checks if the mouse has left the top parent div
function checkMouseOut(e, html_post){
	
	var html_posting = html_post;
	if (!e) var e = window.event;
	var tg = (window.event) ? e.srcElement : e.target;
	if (tg.nodeName != 'DIV') return;
	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
	while (reltg != tg && reltg.nodeName != 'BODY')
		reltg= reltg.parentNode
	if (reltg== tg) return;
	
	showGenericNoLoad(html_post);
}

function numbersOnly(txtElement) {	//called on event onKeyUp; allows only numbers to be entered
	var allowedChars = '0123456789';
	var strLength = txtElement.value.length;
	var newChar = txtElement.value.charAt((strLength) - 1);
	if(allowedChars.indexOf(newChar) == "-1") {
		txtElement.value = txtElement.value.substring(0, (strLength) - 1);
   }
}

function carriageReturnSubmits(e,elementToBeClicked) {	//called on event onKeyPress; clicks the provided element
	var characterCode;
	
	if(e && e.which){ //if which property of event object is supported (NN4)
		characterCode = e.which; //character code is contained in which property
	}else{
		characterCode = e.keyCode; //character code is contained in keyCode property
	}
	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		elementToBeClicked.click();
	}
}

function getBrowser(){
	if (document.all)
		var version=/MSIE \d+.\d+/;	
	if (!document.all)
		browser_info = navigator.appName+navigator.userAgent;
	else
		browser_info = navigator.appName+navigator.appVersion.match(version);
	if(browser_info.indexOf('Firefox') > -1) return 'Firefox';		
	if(browser_info.indexOf('Explorer') > -1) return 'Internet Explorer';
	if(browser_info.indexOf('Opera') > -1) return 'Opera';
	if(browser_info.indexOf('iPhone') > -1) return 'iPhone';
	if(browser_info.indexOf('Safari') > -1) return 'Safari';		

}

function popUp(url) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(url, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=1020,height=700,left = 80,top = 80');");
}

/*
//open in new window-script 
function externalLinks() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
			anchor.target = "_blank";
	}
}
window.onload(externalLinks());
*/



function submitFunction(hidden_field, submit_post){
	
	var all_fields;
	
	if (document.getElementById){
		all_fields = document.getElementById(hidden_field).value;
	}
	else if (document.all){
		all_fields = document.all[hidden_field].value;
	}
	else if (document.layers){
		all_fields =  document.layers[hidden_field].value;
	}
	
	if(all_fields){
		var fields = new Array();
		fields = all_fields.split(';');
		
		var return_var;
		return_var = submit_post;
		
		for(i=0;i<fields.length;i++){
			if (document.getElementById){
				return_var += '&'+fields[i]+'='+document.getElementById(fields[i]).value;
			}
			else if (document.all){
				return_var += '&'+fields[i]+'='+document.all[fields[i]].value;
			}
			else if (document.layers){
				return_var += '&'+fields[i]+'='+document.layers[fields[i]].value;
			}
		}
		ajaxNoLoad(return_var);
	}
}



/****  MOVE SCRIPT BELOW  ****/
// Global object to hold drag information.

var browser_move = new Browser();

var dragObj = new Object();
dragObj.zIndex = 100;

function dragStart(event, id) {

  var el;
  var x, y;
  var drag; 

  // If an element id was given, find it. Otherwise use the element being clicked on.
	
	drag = true;
	if (browser_move.isIE){
		if(window.event.srcElement.type){
			var m = window.event.srcElement.type;
	  	if(m != 'select-one') drag = true; else drag=false;
  	}
  }
  if (browser_move.isNS){
    if(event.target.type){
			var m = event.target.type;
	  	if(m != 'select-one') drag = true; else drag=false;
  	}
  }

  if (id) {
    dragObj.elNode = document.getElementById(id);
  }else {
    if (browser_move.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser_move.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }

  // Get cursor position with respect to the page.

  if (browser_move.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser_move.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;


  // Capture mousemove and mouseup events on the page.

	if(drag){
	  if (browser_move.isIE) {
	    document.attachEvent("onmousemove", dragGo);
	    document.attachEvent("onmouseup",   dragStop);
	    window.event.cancelBubble = true;
	    window.event.returnValue = false;
	  }
	  if (browser_move.isNS) {
	    document.addEventListener("mousemove", dragGo,   true);
	    document.addEventListener("mouseup",   dragStop, true);
	    event.preventDefault();
	  }
	 }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser_move.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser_move.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";
  
  //alert('left:'+dragObj.elNode.style.left+' top: '+dragObj.elNode.style.top);

  if (browser_move.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser_move.isNS)
    event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.
  
  /*
  if (browser_move.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser_move.isNS)
      dragObj.elNode = event.target;*/

  if (browser_move.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser_move.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
//	alert('left:'+dragObj.elNode.style.left+' top: '+dragObj.elNode.style.top);
}

// Determine browser and version (part of move script)
function Browser() {

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Safari";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}


//Script to position floating boxes that need to appear where the user has clicked
//  -- e = the click event (gets the position of the mouse cursor)
//  -- id = the id of the DIV to be positioned
//  -- top_change = a positive number of pixels means that the window is moved up
function setBoxPosition(e,id,top_change) {
	top_change = (typeof top_change == "undefined") ? 0 : top_change; //if the top_change is undefined, assign 0 as default value

    e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + 
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + 
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    
    floating_box = document.getElementById(id);
    floating_box.style.left = (cursor.x+10)+"px";
    floating_box.style.top = (cursor.y-50-top_change)+"px";
}


//is used for various screens, e.g. "about" screen
function centerBoxPosition(e,id,box_width){
    
    //burrowed from http://www.howtocreate.co.uk/tutorials/javascript/browserwindow

    var my_width = 0, my_height = 0;
    if(typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        my_width = window.innerWidth;
        my_height = window.innerHeight;
    }else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        my_width = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    }else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        my_width = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }
    
    //center the box
    floating_box = document.getElementById(id);
    floating_box.style.left = (my_width/2-box_width/2+70)+"px";  

    //if using low resolution, don't center
    if(my_width<=1000){
        floating_box.style.left = "155px";  
    }

    
    //check screen height and set distance from top if necessary
    if(my_height<800){
        floating_box.style.top = "50px";  
    }
}

/************** NEW JAVASCRIPTS FOR MAIK *************************/

var fadein_elements = new Array();
var fadein_timer = new Array();
var fadein_location = new Array();

var counter=0;
var timer_is_on=0;

function teaserfader(){
    if(!timer_is_on && counter<fadein_elements.length){
        objId = fadein_elements[counter];
        obj = document.getElementById(objId);
        setOpacity(obj, 0);
        obj.style.visibility = 'visible';
        timer_is_on = 1;
        location.href="#"+fadein_location[counter];
        teaserfadein(fadein_elements[counter],0);
    }else{
        document.getElementById('name').focus();
    }
    
}

function teaserfadein(objId,opacity){
  if (document.getElementById) {
    obj = document.getElementById(objId);
    if (opacity <= 100) {
      setOpacity(obj, opacity);
      opacity += 2;
      window.setTimeout("teaserfadein('"+objId+"',"+opacity+")", 20);
    }else{         
        timer_is_on=0;
        counter++;
        t = setTimeout("teaserfader()",fadein_timer[counter]);
    }
  }
}



function xxxxinitElements(){
		objId = fadein_elements[i];
		obj = document.getElementById(objId);
		setOpacity(obj, 0);
		obj.style.visibility = 'visible';
        fadeIn(fadein_elements[i],0);


    timer_is_on=1;
    t = setTimeout("initElement()",fadein_timer[i]);
}

function initElements(){

/*
	if(!timer_is_on){
        i++;
        timer_is_on=1;

        t = setTimeout("initElement()",fadein_timer[i]);    

	}else{

		objId = fadein_elements[i];
		obj = document.getElementById(objId);
		setOpacity(obj, 0);
		obj.style.visibility = 'visible';
        fadeIn('bg_menu',0);
//		setTimeout("fadeIn('"+fadein_elements[i]+"',0)",fadein_timer[i]);

	    timer_is_on=0;
	}

*/
	for(i=0;i<fadein_elements.length;i++){
		objId = fadein_elements[i];
		obj = document.getElementById(objId);
		setOpacity(obj, 0);
		obj.style.visibility = 'visible';
		
		fadeIn(objId,0);
		
//		setTimeout("fadeIn('"+fadein_elements[i]+"',0)",fadein_timer[i]);
//		setTimeout("fadeIn('"bg_menu',0)",fadein_timer[i]);
	}
}	

function setOpacity(obj, opacity) {
  opacity = (opacity == 100)?99.999:opacity;  
  obj.style.filter = "alpha(opacity:"+opacity+")"; // IE/Win     <---- PROBLEMS WITH INTERNET EXPLORER......! (could be hasLayout has not been set...)
  obj.style.KHTMLOpacity = opacity/100;// Safari<1.2, Konqueror
  obj.style.MozOpacity = opacity/100;// Older Mozilla and Firefox  
  obj.style.opacity = opacity/100;// Safari 1.2, newer Firefox and Mozilla, CSS3
}

function fadeIn(objId,opacity) {
  if (document.getElementById) {
    obj = document.getElementById(objId);
    if (opacity <= 100) {
      setOpacity(obj, opacity);
      opacity += 2;
      window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 40);
    }
  }
}


