window.addEvent('domready', function() { 
	//setupEditList();
	setupTagHandler();
});

// GLOBAL VARIABLE
// setupEditList and add new Item functions use this
// By default I have it set to true. However, you can set this to false by default
// Just make sure to set it to true before setupEditList is called
var canUserEdit = true;
function setupEditList(){
	
	if(canUserEdit){
		// Go through LI tags and set up rollover
		$$('#primaryList li').each(function(item, index){
			new ListItem(item);
		});
		
		$$('.listTitle').each(function(item, index){
			new ListItem(item);
		});
		
		setupDragDrop();
	}
}

function setupAddItem(){
	if($('addListItem')){
		setupAddNewListItemForm();
	}
}

/****************************************
	TAG MANAGEMENT
****************************************/
function setupTagHandler(){
	if($('btnaddTag')){
		$('btnaddTag').addEvent('click', function(){
			if($('newTag').get('value') != 'Add new tag(s)...'){
				var updateJSON = JSON.encode({tags: ($('newTag').get('value')), listID: $('newTagsListID').get('value')});
				$('newTag').set('value','Add new tag(s)...');
				myRequest = new Request({method: 'get', url: '/addTags.php', onSuccess: newTagsFeedback}).send('values='+updateJSON);
			}
		});
	}
	
	$$('.tagDelete').each(function(item, index){
		setupTagDeleteEl(item);
	});
}

function setupTagDeleteEl(item){
	item.addEvent('click',function(e){
		var updateJSON = JSON.encode({tagID: this.get('id'), listID: $('newTagsListID').get('value')});
		myRequest = new Request({method: 'get', url: '/deleteTag.php', onSuccess: deleteTagFeedback}).send('values='+updateJSON);
	});
}

function newTagsFeedback(responseText, responseXML){

	var object = JSON.decode(responseText);
	
	if(object){
		if(object.responseCode == 1){
			var myHash = new Hash(object.newTags);
			myHash.each(function(tag,id){
				var li = new Element('li', {
											'id': 'tag_' + id
										});
										
				var bullet = new Element('a', {
											'href': 'tags.php?q='+tag+'&s=3&userID='+$('userID').get('value'),
											'html' : '<img class="imgover" src="/images/bullet-globe.gif" alt="Globe" />'
											});
											
				var link = new Element('a', {
											'href': 'tags.php?q='+tag,
											'html' : tag
											});
											
				var deleteA = new Element('a', {
											'href': 'javascript:;',
											'class' : 'tagDelete',
											'id' : id,
											'html' : '[x]'
											});
											
				var span = new Element('span',{'html': ' '});
				
				bullet.inject(li);
				link.inject(li);
				span.inject(li);
				deleteA.inject(li);
				li.inject($('tagsUL'));
				
				setupTagDeleteEl(deleteA);
			});

		}
		
		ajaxNotice(responseText);
	}
}

function deleteTagFeedback(responseText, responseXML){
	/***************
	* Create new form li tag
	*/
	var object = JSON.decode(responseText);
	
	if(object){
		if(object.responseCode == 1){
			if($('tag_' + object.tagID)){
				new Fx.Morph($('tag_' + object.tagID), 
								{duration: 300, 
								onComplete: function(el) {
														$(el).dispose();
														}
								}).start({'opacity': 0});
			}	
		}		
		ajaxNotice(responseText);
	}
}

function encodeCharacters(inputString) {
    var myReplacements = new Array();
    var myCode, intReplacement;
    myReplacements[8216] = 39;
    myReplacements[8217] = 39;
    myReplacements[8220] = 34;
    myReplacements[8221] = 34;
    myReplacements[8212] = 45;
    for(c=0; c<str.length; c++) {
        var myCode = str.charCodeAt(c);
        if(myReplacements[myCode] != undefined) {
            intReplacement = myReplacements[myCode];
            str = str.substr(0,c) + String.fromCharCode(intReplacement) + str.substr(c+1);
        }
    }
    return str;

}

/****************************************
	NEW ITEM FORM FUNCTIONS
****************************************/
function setupAddNewListItemForm(){

	// Setup listener on click of add item
	$('addListItemBtn').addEvent('click', function(){
			// Check if item is filled out
			if($('itemName').get('value')){
				
				/***************
				* Send new item to DB
				*/		
				n_formID = $('formID').get('value');
				n_title = $('itemName').get('value').stripScripts();
				n_url = $('txbURL').get('value').stripScripts();
				n_desc = $('txbDesc').get('value').stripScripts().replace(/\n/g, "<br/>").replace(/\"/g, '\"');
				n_nextItemOrder = $('txbNextItemOrder').get('value');
				
				$('addListItemBtnContainer').addClass('waiting');
				var updateJSON = JSON.encode({listID: n_formID, title: escapeStringForURL(n_title), url: escapeStringForURL(n_url), desc: escapeStringForURL(n_desc), nextItemOrder: escapeStringForURL(n_nextItemOrder)});
				myRequest = new Request({method: 'get', url: '/addListItem.php', onSuccess: newItemFeedback}).send('values='+updateJSON);
			}
			
		return false;
	});
}

function createNewListItem(itemID, _title, _url, _desc){
	count = $$('#primaryList li').length;
	
	if (count % 2){
		newClass = 'evenRow';
	}else{
		newClass = 'oddRow';
	}

	var newItem = new Element('li', {
									'id': 'item_' + itemID,
									'class': newClass
								});
	
	var divInput;
	
	switch($('listType').get('value')){
		case "numeric":
				// number Handle
				divInput = new Element('div', {
												'html': '<p>0</p>',
												'class': 'inputContainer'
											});	
			break;
		case "checklist":
				if(canUserEdit){
					divInput = new Element('div', {
												'html': "<input type='checkbox' />",
												'class': 'inputContainer'
											});	
				}else{
					divInput = new Element('div', {
												'html': "<input type='checkbox' disabled />",
												'class': 'inputContainer'
											});	
				}
			break;
		case "bullet":
		default:
				// Bullet Handle
				divInput = new Element('div', {
												'html': "<img src='/images/background-blue-bullet-small.gif'>",
												'class': 'inputContainer'
											});	
			break;
	}

	divInput.inject(newItem);
	
	// Edit Tool tips
	var divTips = new Element('div', {
									'html': "<a href='listedit.php?listID="+$('formID').get('value')+"' class='edit'><img src='/images/button-edit.gif' alt='Edit' class='imgover'/></a><a class='delete' href='javascript: deleteItem("+itemID+","+$('formID').get('value')+")'><img src='/images/button-delete.gif ' alt='Delete' class='imgover'/></a>",
									'class': 'editDeleteListItem'
								});
	
	divTips.inject(newItem);
	
	// Item Properties
	var divItem = new Element('div', {'class': 'itemContainer'});

	// Title Container
	var pTitle;
	
	if(_url != ""){
		pTitle = new Element('p', {'class': 'title'});
		var aTitle = new Element('a', {'taget': '_blank', 'html': _title, 'href': _url});
		aTitle.inject(pTitle);
	}else{
		pTitle = new Element('p', {'class': 'title', 'html': _title});
	}
	
	_desc = _desc.replace(/\n/g, "<br/>");
	var pDesc = new Element('p', {'class': 'description', 'html': _desc});

	pTitle.inject(divItem);
	pDesc.inject(divItem);
	divItem.inject(newItem);	
	newItem.inject($('primaryList'));

	if(canUserEdit){
		new ListItem(newItem);
		initRollovers();
		addItemToResortList(newItem);
		dashboardListSerialized(dashboardListSort.serialize(),true,true);
	}
}

function newItemFeedback(responseText, responseXML){
	// Must somehow get new item ID out of here
	
	/***************
	* Create new form li tag
	*/
	var object = JSON.decode(responseText);

	if(object){
		if(object.responseCode == 1){
			newListItem = createNewListItem(object.listItemID, object.listItemTitle, object.link, object.listItemNote);
			$('txbNextItemOrder').set('value',$('txbNextItemOrder').get('value').toInt() + 1);
		}
		
		/***************
		* Clear Form
		*/
		$('addListItemBtnContainer').removeClass('waiting');
		if(object.responseCode == 1){
			$('itemName').set('value','');
			$('txbURL').set('value','');
			$('txbDesc').set('value','');
		}
			
		//tim removed this ajax notice - 11/12/09 given that an added item is clearly seen to take place - no alert needed
		//ajaxNotice(responseText);
	}
}

/****************************************
	DRAG & DROP RE-ORDER / SORTING
****************************************/
var dashboardListSort;
var dashboardListSortOrder;

function setupDragDrop(){
	dashboardListSort = new Sortables('#primaryList', {
		clone: true,
		opacity: 0,
		revert: true,
		onComplete: function(){				
			dashboardListSerialized(this.serialize());
		},
		onStart: function(el,ghost){
			ghost.removeClass('hover');
			ghost.setStyle('background-color','#fff');
			ghost.setStyle('border','4px solid #f2f6f9');
			ghost.setStyle('z-index','99999');

			$$('#primaryList li').each(function(item, index){
				item.removeClass('oddRow');
				item.removeClass('evenRow');
				item.addClass('onDrag');
			});
		}
	});
	
	dashboardListSortOrder = dashboardListSort.serialize();
}

function addItemToResortList(el){
	dashboardListSort.addItems(el);
}

function dashboardListSerialized(list,keepQuiet,holdAjax){
	var new_order = list;
	var old_order = dashboardListSortOrder;
	
	if(new_order.join('') != old_order.join('')){
		
		n_formID = $('formID').get('value');  //hidden field with listID
		
		dashboardListSortOrder = list;
		
		var row = 'even';
		
		for(var i = 0; i < list.length; i++){
			$(list[i]).removeClass('oddRow');
			$(list[i]).removeClass('evenRow');
			$(list[i]).removeClass('onDrag');
			
			if(row == 'odd'){
				row = 'even';
			}else{
				row = 'odd';
			}
			
			if($('listType').get('value') == "numeric"){
				$(list[i]).getChildren('.inputContainer').each(function(item, index){
					var newIndex = i + 1;
					item.set('html',"<p>"+newIndex+"</p>");
				});
			}
			
			$(list[i]).addClass(row + 'Row');
		}
				
		var updateJSON = JSON.encode({listID: n_formID, itemIDs: list});
		
		if(!holdAjax){
			if(keepQuiet){
				myRequest = new Request({method: 'get', url: '/reorderList.php'}).send('values='+updateJSON);
			}else{
				myRequest = new Request({method: 'get', url: '/reorderList.php', onSuccess: resortFeedback}).send('values='+updateJSON);
			}
		}
	}
}

function resortFeedback(responseText, responseXML){
	ajaxNotice(responseText);
}