var daypicked = false;
var currently_open = null;
var run = 0;
//window.onresize = resize_curtain;

function AJAXInteraction(url, objectName, callback) {
    var req = init();
    if (req) req.onreadystatechange = processRequest;
    else {
    	alert("Error! It seems your browser does not support AJAX extensions. Use Firefox or IE5.5+");
    	return false;
    }
        
    function init() {
		if (window.XMLHttpRequest) return new XMLHttpRequest();
		else if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
		else return false;
    }
    
    function processRequest () {
		if (req.readyState == 4) {
			if (req.status == 200) {
				if (objectName) document.getElementById(objectName).innerHTML = req.responseText;
				if (callback) callback(req.responseText);
			}
			else alert("Error getting "+url+"! The server returned: " + req.status);
		}
	}

    this.doGet = function() {
		req.open("GET", url, true);
		req.send(null);
	}
    
	this.doPost = function() {
		if (postString.length) {
			req.open("POST", url, true);
			req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			req.setRequestHeader("Content-length", postString.length);
			req.setRequestHeader("Connection", "close");
			req.send(postString);
		} else alert("Error: You must define your parameters one by one using addPostVal(key,value)!");
	}
}




// Quick interface for the function above:
function elmGetHTML(url, element) {
	var ai = new AJAXInteraction(url, element, "");
	ai.doGet();
}



// This function adds a properly formatted variable to the post-queue.
function addPostVal(key,value) {
	if (postString.length) postString = postString + "&";
	postString = postString + key + "=" + encodeURI(value);
}


function bigcalendar(week, day, base_link) {
    var id = 'ajbigcalendar';
    var daypicker = document.getElementById('ajdaypicker');
    var element = document.getElementById(id);
    
    newmode = true;
    preloader(element);
    element.className = 'faded';
    
    var url = '/ajax/ajax_bigcalendar.php?week='+week+'&day='+day;
    if (base_link) url = url+"&base_link="+encodeURIComponent(base_link);
    if (newmode) url = url+"&new=true";
    //alert(url);
    if (daypicker) daypicker.style.display = 'none';
    
    var ai = new AJAXInteraction(url, "", function (retval)
        {
	        if (newmode) {
	            bcalendar = new WeekCalendar(id, retval);
	            bcalendar.draw();
            } else {
                element.innerHTML = retval;
	        }
	        
            element.className = '';
            restore(element);
        }
    );
    ai.doGet();
	
}

function calendar(month) {
    var id = 'ajcalendar';
    var element = document.getElementById(id);
	var calendar = new Calendar(month);
	var node = calendar.getNode();
	element.innerHTML = node.innerHTML;
}

function daypicker(vars) {
    var id = 'ajdaypicker';
    var element = document.getElementById(id);
    
    if (vars || !daypicked) {
        preloader(element);
        set_curtain_height(element);
	    var ai = new AJAXInteraction('/ajax/ajax_daypicker.php?'+vars, "", function (retval)
    		{
    		    
			    fade_from_retval(element, retval);
			    daypicked = true;
			    restore(element);
		    }
	    );
	    ai.doGet();
	} else {
        set_curtain_height(element);
        element.style.display = 'block';
        //element.innerHTML = 
        fade_from_retval(element, element.innerHTML);
	}
	
}

function createdaypickervars() {
	var time = '';
	var endtime = '';
	var dayvars = '';
	var monthvars = '';
	var form = document.getElementById('ajdaypicker');
	var tags = form.getElementsByTagName('input');
	for (tag in tags) {
		var element = tags[tag];
		if (element.name == 'day' && element.checked) {
			dayvars += element.value + ',';
		} else if (element.name == 'month' && element.checked) {
		    monthvars = element.value;
		}
	}
	var tags = form.getElementsByTagName('select');
	for (tag in tags) {
	    var element = tags[tag];
	    if (element.name == 'time') {
	        time = element.value;
	    } else if (element.name == 'endtime') {
	        endtime = element.value;
	    }
	}
	return 'month='+monthvars+'&day='+dayvars+'&time='+time+'&endtime='+endtime;
}

function product(pid) {
    var id = 'curtain';
    var element = document.getElementById(id);
    preloader(element);
    
	var ai = new AJAXInteraction('/ajax/ajax_product.php?product_id='+pid, "", function (retval)
		{
		    //element.innerHTML = retval;
		    set_curtain_height(element);
			fade_from_retval(element, retval);
			restore(element);
		}
	);
	ai.doGet();
}




function fade_from_retval(container, retval) {
    container.innerHTML = '';
    var outside = document.createElement('div');
    outside.style.display = 'none';
    container.appendChild(outside);
    outside.innerHTML = retval;
    var proxy = outside.getElementsByTagName('table')[0];
    
	if (proxy.id) {
	    setOpacity(proxy.id, 0);
	    outside.style.display = 'block';
	    fade(proxy.id, 0, 'up', 0.02);
	} else {
	    setOpacity(container.id, 0);
	    fade(container.id, 0, 'up', 0.02);
	}
}

function hide_curtain() {
    var curtain = document.getElementById('curtain');
    if (curtain) curtain.style.display = 'none';
    else {
        var curtain = document.getElementById('ajdaypicker');
        if (curtain) curtain.style.display = 'none';
    }
}

function resize_curtain() {
    if (currently_open) {
        set_curtain_height(currently_open);
    } else {
        //alert('kunne ikke resize curtain');
    }
}

function set_curtain_height(element) {
    var height = document.getElementsByTagName('html')[0].clientHeight;
	var padding = f_scrollTop()+50;
	currently_open = element;
	height = height-padding;
	winheight = get_window_height();
	if (winheight > height) height = winheight;
	element.style.height = height+'px';
	element.style.paddingTop = padding+'px';
	element.style.display = 'block';
}

function restore(element) {
    if (element) {
        document.documentElement.style.cursor = 'default';
    }
}

function preloader(element) {
    if (element) {
        document.documentElement.style.cursor = 'wait';
        if (element.style) element.style.display = '';
        else alert('no element style stub!');
        element.innerHTML = "<p>&nbsp;</p><img src='/grafik/preloader.gif' alt='loading...'/>";
    }

}

function trackflash() {
    var win = window.open('/fullscreentrack.htm', 'trackflash', "width="+screen.width+",height="+screen.width);
}












function get_window_height() {
    var winH = 0;
    if (parseInt(navigator.appVersion)>3) {
        if (navigator.appName=="Netscape") {
            winH = window.innerHeight;
        }
    } else if (navigator.appName.indexOf("Microsoft")!=-1) {
        winH = document.body.offsetHeight;
    }
    return winH;
}

function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}