function confirmDelete(title, trigger)
{	
	// give confirmation alert
	var yes=confirm("Er du sikker på at du vil slette «" + title + "»?");
	if(yes){		
		// set value in form before executing
		switchTrigger( trigger );
		
        return true;
	}
	else{
        return false;
	}
}

// switch the boolean value of an input field
function switchTrigger( trigger )
{
	trigger = document.getElementById(trigger);
	
	value = trigger.value;
	
	if (value == 'true') {
		trigger.value = 'false';
	} else if (value == 'false') {
		trigger.value = 'true';
	}
}

/**
 * Pop a variety of windows
 */
function winPop ( url, width, height, xpos, ypos, toolbar, scrollbar, resizable, name )
{
    var wspec = "width="  + width  + ",";
    var hspec = "height=" + height + ",";
    var xspec = "screenX=" + xpos + ",left=" + xpos + ",";
    var yspec = "screenY=" + ypos + ",top="  + ypos + ",";

    var toolspec   = (toolbar)   ? "toolbar=yes,"    : "toolbar=no,";
    var scrollspec = (scrollbar) ? "scrollbars=yes," : "scrollbars=no,";
    var resizspec  = (resizable) ? "resizable=yes,"  : "resizable=no,";

    var specs  = wspec + hspec + xspec + yspec;
    specs += toolspec + scrollspec + resizspec;
    specs += "status=no,titlebar=no,directories=no";

    var popper = window.open(url,name,specs);
    if (window.focus) popper.focus();
}


function popInputWindow ( url )
{
	winPop(url, 400, 500, 32, 32, false, true, false, 'inputwindow');
}

function insertRow ( tableid, cell0, cell1, cell2, cell3, cell4 )
{
	var num_rows = 1; // :TODO: do this automagically

    var x=document.getElementById(tableid).insertRow( num_rows );
    if ( cell0 ) { var y=x.insertCell(0); y.innerHTML=cell0; }
    if ( cell1 ) { var z=x.insertCell(1); z.innerHTML=cell1; }
    if ( cell2 ) { var a=x.insertCell(2); a.innerHTML=cell2; }
    if ( cell3 ) { var b=x.insertCell(3); b.innerHTML=cell3; }
    if ( cell4 ) { var c=x.insertCell(4); c.innerHTML=cell4; }
}

function insertArtistRow ( slug, lastname, firstname, groupname, artist_id, field, field_id ) 
{
	
	var cell0 = '<a href="javascript:popInputWindow(\'/admin/kunstner/rediger/' + slug + '/\');" title="' + firstname + ' ' + lastname + '">' + firstname + ' ' + lastname + '</a>';
	var cell1 = '<a href="javascript:popInputWindow(\'/admin/kunstner/rediger/' + slug + '/\');" title="' + groupname + '">' + groupname + '</a>';
	var cell2 = '<a href="javascript:popInputWindow(\'/admin/kunstner/rediger/' + slug + '/\');" title="' + firstname + ' ' + lastname + '">X</a>';
	var cell3 = '<form name="deleteartistreference' + artist_id + '" action="" method="post"><input type="hidden" id="artistreferencedeletetrigger' + artist_id + '" name="delete_artistreference" value="false" ><input type="hidden" name="delete_artistreference_artist_id" value="' + artist_id + '" ><input type="hidden" name="delete_artistreference_field" value="' + field + '" ><input type="hidden" name="delete_artistreference_field_id" value="' + field_id + '" ><a href="javascript:document.deleteartistreference' + artist_id + '.submit();" id="delete-artistreference-' + artist_id + '" onClick="return confirmDelete(\'' + (lastname ? firstname + ' ' + lastname : groupname) + '\');">X</a></form>';
	
	insertRow ( 'artist-list', cell0, cell1, cell2, cell3, false);
}

function addtag ( tag, textfield )
{
	var textfield = document.getElementById(textfield);
	
	textfield.value += tag + ' ';
}

var TF = window.TF || {};

/* -------------------------------------------------------------------------- */
/*  Functions to initialize and perform the scrolling anchor links.           */
/* -------------------------------------------------------------------------- */

TF.Scroller = function () {

	var stepIncrement = 50;	// The number of pixels that each step moves the window.
	var stepDelay = 10;	// The number of milliseconds between steps.
	var limit = 6 * 1000;	// After 6 seconds the scroll is killed.
	
	var running = false;
	
	/* Recursive scrolling method. Steps through the complete scroll. */

	function scrollStep(to, dest, down) {

		if(!running || (down && to >= dest) || (!down && to <= dest)) {
			TF.Scroller.killScroll();
			return;
		}

		if((down && to >= (dest - (2 * stepIncrement))) ||
		   (!down && to <= (dest - (2 * stepIncrement)))) {
			stepIncrement = stepIncrement * .55;
		}

		window.scrollTo(0, to);

		// Assign the returned function to a public method.
		TF.Scroller.nextStep = callNext(+to + stepIncrement, dest, down);
		window.setTimeout(TF.Scroller.nextStep, stepDelay);
	}

	/* Create a closure so that scrollStep can be accessed by window.setTimeout(). */

	function callNext(to, dest, down) {

		return function() { scrollStep(to, dest, down); };
	}

	return {
	
		nextStep: null,
		killTimeout: null,
	
		/* Sets up and calls scrollStep. */
	
		/* Sets up and calls scrollStep. */

		anchorScroll: function(e, obj) {

			var clickedLink = YAHOO.util.Event.getTarget(e);
			var anchorId = clickedLink.href.replace(/^.*#/, '');
			var target = YAHOO.util.Dom.get(anchorId);

			if(target) {	
				YAHOO.util.Event.stopEvent(e);
				running = true;

				var yCoord = ((YAHOO.util.Dom.getY(target) - 6) < 0) ? 0 : YAHOO.util.Dom.getY(target) - 6;
				var currentYPosition = (document.all) ? document.body.scrollTop : window.pageYOffset;
				var down = true;

				if(currentYPosition > yCoord) {
					stepIncrement *= -1;	// Reverse the direction if we are scrolling up.
					down = false;
				}

				// Stop the scroll once the time limit is reached.
				TF.Scroller.killTimeout = window.setTimeout(TF.Scroller.killScroll, limit);

				// Start the scroll by calling scrollStep().
				scrollStep(currentYPosition + stepIncrement, yCoord, down);	
			}
		},
		
		/* Kill the scroll after a timeout, to prevent an endless loop. */
		
		killScroll: function() {
			window.clearTimeout(TF.Scroller.killTimeout);
			running = false;
			stepIncrement = 50;			
		},
	
		/* Attach the scrolling method to the links with the class 'scrolling-link'. */

		init: function() {

			var links = YAHOO.util.Dom.getElementsByClassName('scrolling-link', 'a');
			YAHOO.util.Event.addListener(links, 'click', TF.Scroller.anchorScroll, TF.Scroller, true);
		}
	}

} ();

YAHOO.util.Event.onAvailable('doc', TF.Scroller.init, TF.Scroller, true);



	function showUploadForm()
	{
		startAnim('uploadForm', 500, 250, '');

		var button = document.getElementById('addbutton');
		button.style.display = 'none';

	}

	function startAnim(element, newwidth, newheight, content)
	{
		var myAnim = new YAHOO.util.Anim(element, { 
		width: { to: newwidth },
		height: { to: newheight }  
		}, 1, YAHOO.util.Easing.easeOut); 

		if (content != ''){
			var my_element = document.getElementById(element);
			my_element.innerHTML = my_element.innerHTML + content;
		}

		myAnim.animate(); 
		YAHOO.util.Event.onAvailable('container', YAHOO.example.init, YAHOO.example, true);
	}

	YAHOO.example = function() {
		var $D = YAHOO.util.Dom;
		var $E = YAHOO.util.Event;
		var $ = $D.get;
		return {
			init : function() {
				var overlay = document.createElement('div');
				overlay.id = 'overlay';
				var lightbox = document.createElement('div');
				lightbox.id = 'lightbox';
				overlay.style.width = $D.getViewportWidth()+'px';
				overlay.style.height = $D.getViewportHeight()+'px';
				document.getElementsByTagName('body')[0].appendChild(overlay);
				document.getElementsByTagName('body')[0].appendChild(lightbox);
				var lightboxes = $D.getElementsByClassName('lightbox','a','container');
				$E.on(lightboxes, 'click', this.lightbox);
				$E.on(lightbox, 'click', this.close);
			},
			lightbox : function(e) {
				var target = $E.getTarget(e, true);
				if ( target.tagName.toLowerCase() == 'img' ) {
					var img = target.parentNode.getAttribute('rel');
					$('overlay').style.display = 'block';
					$('lightbox').innerHTML = '<img src="'+img+'" alt="" />';
					$('lightbox').style.display = 'block';
				}
				$E.stopEvent(e);
			},
			close : function() {
				$('overlay').style.display = '';
				$('lightbox').style.display = '';
			}
		};
	}();

	var QUHandler = {};

	QUHandler.call = function(formName)
	{
		this.handleSuccess = function(o)
		{
			if(o.responseText !== undefined)
			{
				var result = o.responseText;
				this.processResult(result);
			}
		}

		this.processResult = function(json_data)
		{	
			// create object with results
			eval("var results = "+json_data);
			// get container element
			var element = document.getElementById('container');

			if (results.error) {
				alert(results.error);
				startAnim('loader', 500, 0, '');
				startAnim('uploadForm', 500, 128, '');
			} else {
				var old_height = YAHOO.util.Dom.getStyle(element, 'height')
				var new_height = (old_height ? parseInt(old_height.substr(0,old_height.length-2)) : 0) + 81;

				startAnim('loader', 500, 0, '');

				startAnim('container', 500, new_height, '');


				var button = document.getElementById('addbutton');
				button.style.display = 'block';
			}
		}

		var callback =
		{
			upload: this.handleSuccess ,
			argument: [],
			scope: this
		}

		var formObject = document.getElementById(formName);

		YAHOO.util.Connect.setForm(formObject, true);
		var cObj = YAHOO.util.Connect.asyncRequest('POST', '/services/internal/json/', callback);

		startAnim('uploadForm', 500, 0, '');
		startAnim('loader', 500, 16, '');
	};
	
	var YF = window.YF || {};
	
	var carousel_laptime = 4;
	
	YF.carousel = function() {   
		// get elements to rot
		var elements = YAHOO.util.Dom.getElementsByClassName('rotate_me');

		// stack elements on top of each other
		var pos = YAHOO.util.Dom.getXY('carousel'); 
		YAHOO.util.Dom.setXY(elements, pos);
		
		// set all elements invisible
		YAHOO.util.Dom.setStyle(elements, 'opacity', 0); 
		
		// set height of container element to match height of one element
		var height = YAHOO.util.Dom.getStyle(elements[0], 'height');
		YAHOO.util.Dom.setStyle('carousel', 'height' , height);
		
		// set the first element visible
		var current_visible = 0;
		YF.fade(elements[current_visible], true);
		
		// code to be repeated
		var carousel = function() {
			// get the number in array of in and out element
			var in_element 	= (current_visible == (elements.length -1) ? 0 : current_visible +1);
			var out_element = current_visible;
			// call the fading
			YF.fade(elements[in_element], true);
			YF.fade(elements[out_element], false);
			// update the variable that carries the current element
			current_visible = in_element;
		};
		setInterval(carousel, (carousel_laptime * 1000));
	};
	

	
	// the fader
	YF.fade = function(element, fade_in) {
		var fade_to;
		if (fade_in){
			fade_to = 1;
		} else {
			fade_to = 0;
		}
	   var fade = new YAHOO.util.Anim(element, { opacity: { to: fade_to } }, 2, YAHOO.util.Easing.easeOut);
	   fade.animate(true);
	};
	
	YF.printMedia = function(o) {
		if(o.responseText !== undefined)
		{
			var result = o.responseText;
			
			var el = YAHOO.util.Dom.get('artwork-container');
			el.innerHTML = result;
		}	
	};
	
	YF.showMedia = function(media_id) {
		var el = YAHOO.util.Dom.get('artwork-container');
		el.innerHTML = 'Laster inn...';
		
		var callback =
		{
			success: YF.printMedia,
			argument: [],
			scope: this
		}

		var connection = YAHOO.util.Connect.asyncRequest('GET', '/services/internal/html/?action=getmedia&id='+media_id, callback);
	};

	YAHOO.util.Event.onAvailable('carousel', YF.carousel);
