// use an event listener to run init on page load, better than onLoad
addEvent(window, 'load', init, false);
// bad me, global variable stores the list of routes
var routes = new Array();

var MyDraggable = Class.create();
MyDraggable.prototype = (new Rico.Draggable()).extend( {

	initialize: function( type, htmlElement ) {
		var node = document.getElementById(htmlElement);
		this.htmlElementString = node.id;
		this.type        = type;
		this.htmlElement = $(htmlElement);
		this.selected    = false;
	},
	
	getSingleObjectDragGUI: function() {
		new Effect.FadeTo( this.htmlElement,.2,250,10 );
		var label = this.htmlElement.innerHTML;
		var div = document.createElement("div");
		div.id = "fakeitem";
		this.fakeElement = "fakeitem";
		div.className = 'item dragging';
		new Insertion.Top( div, label );
		return div;
	},
	
	cancelDrag: function() {
		new Effect.FadeTo( this.htmlElement,1,100,10 );
	},
	
	endDrag: function() {
		new Effect.FadeTo( this.htmlElement,1,100,10 );
	},
	
	select: function() {
	}

} );

var CustomDropzone = Class.create();
CustomDropzone.prototype = (new Rico.Dropzone()).extend( {
	initialize: function( htmlElement,action ) {
		var node = document.getElementById(htmlElement);
		this.htmlElementString = node.id;
		this.htmlElement  = $(htmlElement);
		this.absoluteRect = null;
		this.action = action;
		
	},
	
	accept: function(draggableObjects) {
		// now put code here to do what you need to when something is dropped
		// this.htmlElement is the name of the dropzone
		// draggableObjects[0].htmlElement is the name of the first draggable element
		dndMgr.interestedInMotionEvents = true;
			// if target is 'delete-drop' then remove the element from the array and hide the dragged element
		if(this.htmlElement.id == 'delete-drop') {
			routes.splice(draggableObjects[0].htmlElement.attributes.number.value,1)
			draggableObjects[0].htmlElement.style.display = "none";
			displayRoutes(document.getElementById('results'),routes);
		}
	}
} );

function init() {

    // register divs as drop zones for the routes
    dndMgr.registerDropZone( new CustomDropzone('delete-drop') );
    // Don't have to have the originating div be a drop target, also looks odd with the highlighting
    //dndMgr.registerDropZone( new CustomDropzone('results') );
	
	// loop through the page and find all forms with the class 'ajaxify' then add an event listener to the submit of that form
    var formElements = document.getElementsByTagName('form');
    for (var i = 0; i < formElements.length; i++) {
        if (formElements[i].className.match(/\bajaxify\b/)) {
            addEvent(formElements[i], 'submit', addRoute, false);
	    addEvent(formElements[i], 'finish', submitRoutes, false);
        }
    }
}

function addRoute(e) {
	//cancel the normal form submit event
	knackerEvent(e);
	//get the form element from the submit event
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
	
	// create a new route object, give it the values from the form and add it to the array of routes
	myRoute = new Object();
	myRoute.project = target.elements['project'].value;
	//myRoute.fullmiss = getRadioValue(target.elements['fullmiss']);
	myRoute.elecwat = getRadioValue(target.elements['elecwat']);
	//if (myRoute.fullmiss == 'missed') {
	//	myRoute.days = target.elements['days'].value;
	//} else {
	//	myRoute.days = 0;
	//}
	routes.push(myRoute);
	

	// call function to display routes in the results div
	displayRoutes(document.getElementById('results'),routes);
	
	// If last route then we need to post the form to the cgi script to build the route
	if(getRadioValue(target.elements['lastroute']) == 'Yes') {
		submitRoutes(e);
	}
}

// builds html to display routes to generate
function displayRoutes(target,arr) {
	var sHTML = "<div id='title'>Routes</div>";
	for (x = 0;x < arr.length; x++) {
		var entry = 'route-entry'+x;
		sHTML += "<div id='"+entry+"'number='"+x+"'><div id='route-entry-style'><table>";
		sHTML += "<tr><td>Project:</td><td>"+arr[x].project+"</td></tr>";
		//sHTML += "<tr><td>FullMiss:</td><td>"+arr[x].fullmiss+"</td></tr>";
		//if (arr[x].fullmiss == 'missed') 
		//	sHTML += "<tr><td>Days:</td><td>"+arr[x].days+"</td></tr>";
		sHTML += "<tr><td>ElecWat:</td><td>"+arr[x].elecwat+"</td></tr>";
		sHTML += "</table></div></div>";
	}
	target.innerHTML = sHTML;
	for (x = 0;x < arr.length; x++) {
		var entry = 'route-entry'+x;
		dndMgr.registerDraggable( new MyDraggable('test-rico-dnd',entry) );
	}
}

function submitRoutes(e) {
	//cancel the normal form submit event
	knackerEvent(e);
	//get the form element from the submit event
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
	
	var projects = new Array();
	var fullmiss = new Array();
	var elecwat = new Array();
	var days = new Array();

	for (var x = 0; x < routes.length; x++) {
		projects.push(routes[x].project);
		//fullmiss.push(routes[x].fullmiss);
		elecwat.push(routes[x].elecwat);
		//days.push(routes[x].days);
	}
	var postUrl = "routes='"+x+"'&project='"+projects.join(',')+"'&elecwat='"+elecwat.join(',')+"'";
	alert(postUrl);
}

