HJ.PublishMyList = Class.create();

HJ.PublishMyList.prototype = Object.extend(new HJ.Dialog(), {

	initialize: function(handler, isUpdate) {
		this.HJ_Dialog_initialize("Publish Template", null, null);
		this.handler = handler;
		this.data = handler.data;
		this.categoriesCount = 0;
		this.categoryIds = new Array();
		if (isUpdate != null && isUpdate == true) {
			this.isUpdate = true;
		} else {
			this.isUpdate = false;
		}
	},
   
	loadTemplate: function() {
		this.showHTMLTemplate(basePageURL + "PublishMyList.html", "MainArea", "loadPublishTemplate");
	},

	templateLoaded: function() {
		// element collection class limits the look up by id within the scope of the given element (in this case this.element).
		// In case there are other elements with the same id in the "document" scope, this avoids id collision
		
		var ec = new Af.ElementCollection(this.element);
		var title = ec.getFirstElementById("newTitle");
		title.value = this.data["name"];
		this.okButton = ec.getFirstElementById("okButton");
		this.okButton.onclick = this.publish.bind(this);
		

		if (this.data["galleryDescription"] != null) {
			var descElement = document.getElementById("newDescription");
			descElement.value = this.data["galleryDescription"];
		}
		
		this.fetchCategories("Categories", "newCategories");
		
		var left = 0;
		var top = 0;
		//var elem = ec.getFirstElementById("blueround");
		var elem = document.getElementById("blueround");
		if (elem.offsetParent) {
			do {
				left += elem.offsetLeft;
				top += elem.offsetTop;
			} while (elem = elem.offsetParent)
		}
		
		this.setLocation(left, top);
	},
   
    fetchCategories: function(parentCategoryName, targetElem) {
        var req = new Af.DataRequest(svcURL,
                  this.requestFetchCategoriesCompletedCommon.bind(this, targetElem),
                  requestFailedCommon, null,
                  requestTimedoutCommon);
        //do this as a get request since we are only passing a couple of parameters
      	req.addService("WorkspaceService", "getCategories");
		req.addParameter("categoryName", parentCategoryName);
      	ajaxEngine.processRequest(req);
    },

//the call to this function has response and targetElem switched, but for some reason it always comes through
//the other way.  If they are switched to match in the calling function, it fails
   requestFetchCategoriesCompletedCommon: function(targetElem, response) {
   		this.categories = null;
        var xds = new Af.XMLToDataSet(response.responseXML);
        this.categories = xds.data.category;
		var ec = new Af.ElementCollection(this.element);
		var categoriesElem = ec.getFirstElementById(targetElem);
			var tempHTML = "<table>";
		for(i = 0; i < this.categories.length; i++) {
			tempHTML += "<tr><td><input type=checkbox name=\"";
			tempHTML +=  this.categories[i].categoryId;
			tempHTML += "\" id=\"";
			tempHTML += this.categories[i].categoryId;
			tempHTML += "\" value=\"yes\">";
			tempHTML +=  this.categories[i].name;
			tempHTML += "</td><td>";
			tempHTML += "<input type=checkbox name=\"feature_";
			tempHTML += this.categories[i].categoryId;
			tempHTML += "\" id=\"feature_";
			tempHTML += this.categories[i].categoryId;
			tempHTML += "\" value=\"yes\">";
			tempHTML += "Feature this template</td></tr>"
			this.categoryIds.push(this.categories[i].categoryId);
		}
			tempHTML += "</table>";
			categoriesElem.innerHTML += tempHTML;
			this.categoriesCount += this.categories.length;
        //this.mylist = xds.data.MyList[0];
       	//this.signups.showMyList(this.mylist, false);
   },

	close: function(ev) {
 	    if (this.handler != null && this.handler.closePublishMyListDialog != null) {
			this.handler.closePublishMyListDialog(this);
		}
		this.hide();
		return false;
	},
  
	publish: function(ev) {
		var errorElement = document.getElementById("errorText");
		errorElement.innerHTML = "";
		var titleElement = document.getElementById("newTitle");
		var title = titleElement.value;
		var descElement = document.getElementById("newDescription");
		var description  = descElement.value;
		
		var metaDescription = document.getElementById("metaDescription").value;
		var metaKeywords = document.getElementById("metaKeywords").value;
		var metaTitle = document.getElementById("metaTitle").value;
		
		var uuid = this.data["UUID"];
		var categories = "";
		var categoryCount = 0;
		for(var i = 0; i < this.categoryIds.length; i++) {
			var categoriesCheckElem = document.getElementById(this.categoryIds[i]);
			if(categoriesCheckElem.checked) {
				categoryCount++;
				categories += "<category><id>" + this.categoryIds[i] + "</id>";
				var featureElem = document.getElementById("feature_" + this.categoryIds[i]);
				if(featureElem.checked) {
					categories += "<featured>yes</featured>";
				} else {
					categories += "<featured>no</featured>";
				}
				categories += "</category>";
				
			}
		}
		
		//may want to check some things at a later date
		var passedValidation = true;
		if(title == "") {
			passedValidation = false;
			errorElement.innerHTML += "Title is required.<br/>";
		}
		if(description == "") {
			passedValidation = false;
			errorElement.innerHTML += "Description is required.<br/>";
		}
		if(categoryCount == 0) {
			passedValidation = false;
			errorElement.innerHTML += "At least one category is required.<br/>";
		}
		
		
		
		if (passedValidation) {
			if (this.handler != null && this.handler.publishTemplate != null) {
				this.handler.publishTemplate(ev, title, description, uuid, categories, metaTitle, metaDescription, metaKeywords);
			} else {
				this.savePublishedTemplate(ev, title, description, uuid, categories, metaTitle, metaDescription, metaKeywords);
			}
			this.close(ev);
		}
		
		return false;
	},
	
	selectionDone: function(dialog) {
		/*
		var selectedPerson = dialog.selectedPeopleList[0];
		this.choiceMyContact.value = selectedPerson["UUID"];
		this.contactDisplayText.innerHTML = selectedPerson["name"];
		*/
	},

	eraseTextFieldValue: function(event) {
		Event.extend(event);
		this.choiceNewContact.checked = true;
		if (Event.element(event).value == 'type first name' || Event.element(event).value=='type last name') {
			Event.element(event).value = '';
		}
	},
	
	selectChoiceMyContact: function(event) {
		/*
		Event.extend(event);
		this.choiceMyContact.checked = true;
		*/
	},
	
	savePublishedTemplate: function (ev, title, description, UUID, categories, metaTitle, metaDescription, metaKeywords) {
		//alert(helper + " " + helperId + " " + UUID);
		showModalMessageDialog("Processing ... please wait", 300, 40);
        req = new Af.DataRequest(svcURL,
                  this.requestPublishMyListCompletedCommon.bind(this),
                  requestFailedCommon.bind(this), null,
                  requestTimedoutCommon.bind(this));
        //do this as a get request since we are only passing a couple of parameters
      	req.addService("WorkspaceService", "publishMyList");
		req.addParameter("UUID", UUID);
		req.addParameter("isUpdate", this.isUpdate);

		var message = "<message>";
		message += "<title>" + xmlEncode(title) + "</title>";
		message += "<metaTitle>" + xmlEncode(metaTitle) + "</metaTitle>";
		message += "<metaDescription>" + xmlEncode(metaDescription) + "</metaDescription>";
		message += "<metaKeywords>" + xmlEncode(metaKeywords) + "</metaKeywords>";
		message += "<description>" + xmlEncode(description) + "</description>";
		message += "<isUpdate>" + xmlEncode(this.isUpdate) + "</isUpdate>";
  	 	message += categories;
	  	message += "</message>";
	  	req.xmlDoc = message;



      	ajaxEngine.processRequest(req);
	},

	requestPublishMyListCompletedCommon: function(response) {
		hideModalMessageDialog();
		return false;
	}

});
