
/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/glossary/TermsList.js
*/

var TermsList_class = function(){
}

TermsList_class.prototype.HREF_LOCATION = 'admin_termsTable.asp';
TermsList_class.prototype.KEY_CODE_ENTER = 13;

TermsList_class.prototype.init = function() {
	this.searchForm = Element.parseSelector('DIV.searchForm', Element.get('adminContainer'), 'first');
	var searchFormSubmit = Element.parseSelector('DIV.searchFormSubmitButton', this.searchForm, 'first');
	var currentSearch = Element.parseSelector('INPUT.searchFormInputBox', this.searchForm, 'first');
	
	var pagingLinks = Element.parseSelector(".pagingNavigation a");
	var loc			= location.href;
	var term 		= loc.match(/(termStatus\=\w+)\&?/);
	var letter 		= loc.match(/(letter\=\w+)\&?/);

	if (loc) {
		var hasQuerystring = loc.match(/\?/);
		var delimiter = (hasQuerystring) ? '&' : '?';
		var ref;

		term = (term) ? term[1] : false;
		letter = (letter) ? letter[1] : false;

		for (i = 0; i < pagingLinks.length; i++) {
			ref  = pagingLinks[i].href;

			if (term) {
				ref += delimiter + term;
			}
			else if (letter){
				ref += delimiter +letter;
			}
			else if (currentSearch && currentSearch.value) {
				ref += delimiter + 'searchField=' + currentSearch.value;
			}

			pagingLinks[i].href = ref;
		}
	}

	var termsListTable = Element.get('termsListTable');

	var deleteLinks = Element.parseSelector("div.deleteLinks", termsListTable);
	var updateLinks = Element.parseSelector("div.updateLinks", termsListTable);

	if (searchFormSubmit) {
		Events.add(searchFormSubmit, "click", this.searchTerms, this);
	}

	Events.add(currentSearch, "keyup", this.searchTerms, this);
	Events.add(deleteLinks, "click", this.deleteTerm, this);
	Events.add(updateLinks, "click", this.updateTerm, this);
	
	var aTermSearchInputs = Element.parseSelector("input.searchField", "wsod"),
		ref = this;
		
	for (var i = 0, oTermSearch; i < aTermSearchInputs.length; i++) {
		oTermSearch = new TermSearch_class();
		oTermSearch.submitForm = function() {
			ref.searchTerms();
		};
		oTermSearch.init(aTermSearchInputs[i]);
	}
}


TermsList_class.prototype.searchTerms = function(e){
	if (e) { e.cancel(); }
	
	if (!e || !e.nativeEvent.keyCode || this.KEY_CODE_ENTER == e.nativeEvent.keyCode) {
		var isValidSearch = false;
		var queryString = '';
		var currentSearch = Element.parseSelector('INPUT.searchFormInputBox', this.searchForm, 'first');

		if (currentSearch && currentSearch.value) {
			isValidSearch = true;
			queryString = '?searchField=' + encodeURIComponent(currentSearch.value);
		}

		
		location.href = [ this.HREF_LOCATION, queryString ].join('');
	}
}


TermsList_class.prototype.deleteTerm = function(e, el){
	e.cancel();
	
	var deleteConfirm = confirm("Are you sure you want to delete this term?")
	if (deleteConfirm ){
		var cb = new ContentBuffer();
	
		var conn = cb.load({
			debug: true,
			url: "/ft/resources/buffer/glossaryDeleteTerm.asp",
			method: "post",
			contentType: "text/javascript",
			preventEval: false,
			data: {
				id: el.getAttribute("termID")
			},
			onload: function() {
				alert("Term has been deleted.");
				location.href = location.href;
			}
		});
	
	}else {
		alert("Term was not deleted.")
	}

		

}

TermsList_class.prototype.updateTerm = function(e, el){
	e.cancel();
	var term = el.getAttribute("termID")
	location.href = "/ft/internals/glossary/admin_addEditTerm.asp?termID="+term
}
/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/glossary/DragAndDrop.js
*/
var DragDrop = function(){}

DragDrop.prototype.init = function(){

	Events.draggable({
		selector:".draggable", 
		parent: ".adminCatHolder",
		context: this, 
		over: this.mouseOver, 
		down: this.mouseDown, 
		up: this.drop, 
		move : this.drag,
		dynamicEvent:{
			type:"mouseout"
			,handler: this.mouseOut
			,context: window
		}
	})

}

DragDrop.prototype.mouseOver = function(e, el){
	e.cancel();
	if(Element.hasClass(el, "draggable")){
		Element.addClass(el, 'hover');
	}
}

DragDrop.prototype.mouseOut = function(e, el){
	e.cancel();
	Element.removeClass(el, 'hover');
}

DragDrop.prototype.mouseDown = function(e, el){
	e.cancel();
	this.target = el;
	if(Element.hasClass(this.target, "draggable")){
		this.width = Element.getSize(this.target).width;				
		this.height = Element.getSize(this.target).height;	
		this.startX = Element.getXY(this.target).x;
		this.startY = Element.getXY(this.target).y;
	
		var ev = e.nativeEvent,
		   y = ev.clientY,
		   x = ev.clientX;
				
		Element.removeClass(this.target, "draggable");				
		Element.addClass(this.target, "selected");
		Element.setWidth(this.target, this.width);
	
		this.container = Element.getParentBySelector(this.target, "div.adminCatHolder");
		this.scrollY = Element.getViewport().top;
		this.offsetX = 20;
		this.offsetY = 108.5 - this.scrollY;
		var containerSize = Element.getSize(this.container)
		var containerXY = Element.getXY(this.container)
		this.containerPos = {
			left: containerXY.x
			,right: containerXY.x + containerSize.width
			,top: containerXY.y
			,bottom: containerXY.y + containerSize.height
		}

		this.x = this.startX-this.offsetX
		this.y = (y-(this.height/2)) - this.offsetY
		
		Element.setXY(this.target, this.x, this.y);
	}
}

DragDrop.prototype.drag = function(e, el){
	e.cancel();
	this.children = Element.parseSelector("div.draggable", this.container)
	this.aPositions = this.getPositions();
	
	var ev = e.nativeEvent,
		   y = ev.clientY,
		   x = ev.clientX;
		
	this.x = this.startX-this.offsetX
	this.y = (y-(this.height/2))-this.offsetY
	
	Element.setXY(this.target, this.x, this.y);

	(y < this.containerPos.top || y > this.containerPos.bottom) ? Element.addClass(this.target, "noDrop") : Element.removeClass(this.target, "noDrop");
}

DragDrop.prototype.drop = function(e, el){
	e.cancel();
	var currEl = this.target;
	if(Element.hasClass(currEl, "selected")){
	
		var ev = e.nativeEvent,
			   x = ev.clientX,
			   y = ev.clientY+ this.scrollY

		for (var i=0; i<this.aPositions.length; i++){
		
			if(0 == i && y < this.aPositions[i] && y > this.containerPos.top){
				Element.insertBefore(currEl, this.children[i]);
				
			}else if (y > this.aPositions[i] && y < this.aPositions[i+1]){
				Element.insertAfter(currEl, this.children[i]);
				
			}else if (y > this.aPositions[i] && y < this.containerPos.bottom){
				Element.insertAfter(currEl, this.children[i]);
				
			}else if( y > this.containerPos.bottom){
				Element.insertAfter(currEl, this.children.length-1)
				
			}else if(y < this.containerPos.top){
				Element.insertBefore(currEl, this.children[0])
				
			}
		}
		
		Element.removeClass(currEl, "selected");
		Element.removeClass(currEl, "hover");
		Element.removeClass(currEl, "noDrop");
		Element.addClass(currEl, "draggable");
	}

}

DragDrop.prototype.getPositions = function(){
	var aPositions = [];
	
	for (i=0; i<this.children.length; i++){
		var location = Element.getXY(this.children[i]).y + (Element.getSize(this.children[i]).height/2)
		aPositions.push(location);
	}
	
	return aPositions;
}

DragDrop.prototype.getOrder = function(){
	var aList = Element.parseSelector("div.draggable", this.container)
	var aOrder = [];
	
	for (var i=0; i<aList.length; i++){
		aOrder.push(aList[i].getAttribute("order"))
	}
	
	return aOrder;
}

var dragDrop = new DragDrop();