// ======================
// Utils.js
// ======================
var Utils = {

	// trim
	// ======================
	trim: function(pStr) {
		return pStr.replace(/^\s+/g,'').replace(/\s+$/g,'');
	} ,

	// isValidEmail
	// ======================
	isValidEmail: function(pEmail) {
		var oRegExp = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
		return (oRegExp.test(pEmail)); 
	} ,

	// isNumeric
	// ======================
	isNumeric: function(pStr) {
		var oRegExp = /^[-+]?[0-9]+(?:[.,]?[0-9]+)?$/;
		return (oRegExp.test(pStr)); 
	} ,

	// isEmpty
	// ======================
	isEmpty: function(pStr) {
		return (Utils.trim(pStr) == ""); 
	} ,

	// checkForm_Error (add the error css class to a form element)
	// ======================
	checkForm_Error: function(pControlId) {
		$(pControlId).removeClassName("ControlChecked");
		$(pControlId).addClassName("ControlError");
	} ,

	// checkForm_Valid (add the ok css class to a form element)
	// ======================
	checkForm_Valid: function(pControlId) {
		$(pControlId).removeClassName("ControlError");
		$(pControlId).addClassName("ControlChecked");
	} ,

	// getAjaxContent: fill pDiv with the html returned by pUrl
	// ======================
	getAjaxContent: function (pDiv, pUrl) {
		new Ajax.Updater(
			{ success: $(pDiv)},
			pUrl,
			{
				method: 'post',
				evalScripts: 'true'
			}
		)
	} ,

	ToggleDivByIcon: function(pObj, pDiv, pReduceIcon, pExpandIcon) {
		if (Object.isUndefined(pObj.reduced)) pObj.reduced = false;
		pObj.firstChild.src = (pObj.reduced ? pReduceIcon : pExpandIcon);
		Effect.toggle($(pDiv),'blind', {duration: .2});
		pObj.reduced = !pObj.reduced;
		return (false);
	},

	hackGetTopLeft: function(pObj) {	// IE6 offsetTop is buggy
		var nTop = 0; var nLeft = 0;
		nTop = pObj.offsetTop; nLeft = pObj.offsetLeft;
	    pObj = pObj.offsetParent;
	    while (pObj != null) {
	        nTop = parseInt(nTop) + parseInt(pObj.offsetTop);
			nLeft = parseInt(nLeft) + parseInt(pObj.offsetLeft);
	        pObj = pObj.offsetParent;
		}
	    return {Top:nTop, Left: nLeft};
	},

	rollOver: function(pObj, pValue) { 
		if (!pObj.Checked) {
			pObj.NoRoll = (pObj.src.indexOf("_over") > 0);
			pObj.Checked = true;
		}
		if (!pObj.NoRoll) pObj.src = pValue; 
		return true;
	}

}

// ======================
// Header.js
// ======================

var FxB = {
	closeLanguage: function(e) {
		var elt = Event.element(e);  
		if (elt.ancestors()[0].id != "zHeaderLngChoice" && elt.id != "zHeaderLngChoice" && elt.id != Header.sClickEltId ) {
			Event.stopObserving(document.body, "click", FxB.bfx); 
			Effect.toggle('zHeaderLngChoice','blind', {duration: .1});
			Header.bLngOpen = false;
		}
	} , 

	closeTipi: function(e) {
		var elt = Event.element(e);  
		if (elt.ancestors()[0].id != "zAHeaderTC" && elt.id != "zAHeaderTC" && elt.id != Header.sClickEltId ) {
			Event.stopObserving(document.body, "click", FxB.bfx); 
			Effect.toggle('zAHeaderTC','blind', {duration: .1});
			Header.bTipiOpen = false;
		}
	}
}

var Header = {
	bLngOpen: false ,
	bTipiOpen: false,
	sClickEltId: null ,
	
	toggleLanguage: function(pObj) {
		this.sClickEltId = pObj.id;
		var aPos = $(pObj.id).cumulativeOffset();
		$("zHeaderLngChoice").style.left = aPos.left + pObj.offsetWidth - 100 + "px";
		$("zHeaderLngChoice").style.top = (18 + aPos.top) + "px";		
		Effect.toggle("zHeaderLngChoice", "blind", {duration: .1 });
		if (!this.bLngOpen) {
			FxB.bfx = FxB.closeLanguage.bindAsEventListener(FxB); 
			Event.observe(document.body, "click", FxB.bfx); 
			this.bLngOpen = true;
		} else {
			Event.stopObserving(document.body, "click", FxB.bfx); 
			this.bLngOpen = false;
		}
		return (false);
	} , 

	setLng: function(pCulture) {
		new Ajax.Request(
			'../ajax/_setlng.aspx', 
			{
				method: 'post',
				parameters: {culture: pCulture} ,
				onSuccess: function(transport) {
					if (transport.responseText == "1") {
						var sLocation = self.location + ((self.location.href.indexOf("?") > -1) ? "&" : "?") + "123";
						if (pCulture == "fr-FR") {
							var oReg = new RegExp("(/tipi/)", "g");
							sLocation = sLocation.replace(oReg, "/tipi_fr/");
						} else {
							var oReg = new RegExp("(/tipi_fr/)", "g");
							sLocation = sLocation.replace(oReg, "/tipi/");
						}
						self.location = sLocation;
						return (true);
					}
				} ,
				onFailure: function() { alert("Ajax error"); }
			}
		);
		return (false);
	} ,

	toggleTipi: function(pObj) {
		this.sClickEltId = pObj.id;
		var aPos = $(pObj.id).cumulativeOffset();
		$("zAHeaderTC").style.left = aPos.left + "px";
		$("zAHeaderTC").style.top = (18 + aPos.top) + "px";		
		Effect.toggle("zAHeaderTC", "blind", {duration: .1 });
		if (!this.bTipiOpen) {
			FxB.bfx = FxB.closeTipi.bindAsEventListener(FxB); 
			Event.observe(document.body, "click", FxB.bfx); 
			this.bTipiOpen = true;
		} else {
			Event.stopObserving(document.body, "click", FxB.bfx); 
			this.bTipiOpen = false;
		}
		return (false);
	}
}

// ======================
// Menu.js
// ======================
var Menu = {
	displaySMenu: function(pObj, pSMnb, pAlign) {
		pObj = $(pObj.id);	 // ie6 is buggy...
		var nTop = 0; var nLeft = 0;
		var oSM = $("zTMenu2_" + pSMnb);
		var oMarker = $("zTMenu2_" + pSMnb + "Marker");
		if (pObj.offsetTop == 0) {
			var ieDim = Utils.hackGetTopLeft(pObj);
			nTop = ieDim.Top;
			nLeft = ieDim.Left;
			if ($("zTMenu2_" + pSMnb).style.width == 0) $("zTMenu2_" + pSMnb).style.width = (oSM.getWidth()) + "px" ;		// i hate ie6
		} else {
			nTop = pObj.offsetTop;
			nLeft = pObj.offsetLeft;
		}
		oSM.style.top = ((nTop + pObj.getHeight() + 1) + "px");
		if (pAlign == "left") oSM.style.left = (5 + nLeft) + "px";
		else {
			var nRight = nLeft + pObj.offsetWidth;
			var nWidth = oSM.getWidth();
			oSM.style.left = (-5 + nRight - nWidth) + "px";
			oMarker.style.left = (nWidth - 30) + "px"
		}
		for (var i=1; i <= 4; i++) {
			if (i != pSMnb) $("zTMenu2_" + i).hide();
		}
		oSM.show();
	} ,

	ResetSMenu: function(e, pObj, pSMnb) {
		if (!e) var e = window.event;
		var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
		while (reltg.tagName != 'BODY'){
			if (reltg.id == pObj.id){return;}
			reltg = reltg.parentNode;
		}
		switch (pSMnb) {
			case 1: Menu.displaySMenu($("aMenuProject"), 1, "left"); break;
			case 2: Menu.displaySMenu($("aMenuIdea"), 2, "left"); break;
			case 3: Menu.displaySMenu($("aMenuMessage"), 3, "right"); break;
			case 4: Menu.displaySMenu($("aMenuPeople"), 4, "right"); break;
		}		
	}

}

// ======================
// Login.js
// ======================
var Login = {
	
	loginWithOpenId: function() {
		$("zLogin_Default").hide();
		$("zLogin_OpenId").show();
		$("tOpenIdAddress_cCtrl").focus();
	} , 

	loginWithUsername: function() {
		$("zLogin_OpenId").hide();
		$("zLogin_Default").show();
		$("tEmail_cCtrl").focus();
	}  ,

	checkForm: function() {
		var bNoError = true;
		bNoError = Login.checkForm_Password()  && bNoError;
		bNoError = Login.checkForm_Email() && bNoError;
		if (bNoError) {
			$("tHashed").value =  hex_md5($("tChallenge").value + hex_md5($("tEmail_cCtrl").value.toLowerCase() + $("tPassword_cCtrl").value));
			$("tPassword_cCtrl").value = "";
		}
		return (bNoError);
	} ,

	checkForm_Email: function() {
		var bError = false;
		if (!Utils.isValidEmail($("tEmail_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tEmail_cCtrl");
		} else Utils.checkForm_Valid("tEmail_cCtrl");
		return (!bError);
	} , 

	checkForm_Password: function() {
		var bError = false;
		if (Utils.isEmpty($("tPassword_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tPassword_cCtrl");
		} else Utils.checkForm_Valid("tPassword_cCtrl");
		return (!bError);
	} 

}

// ======================
// ResetPassword.js
// ======================
var ResetPassword = {

	checkForm: function() {
		var bNoError = true;
		bNoError = ResetPassword.checkForm_Email() && bNoError;
		return (bNoError);
	} ,

	checkForm_Email: function() {
		var bError = false;
		if (!Utils.isValidEmail($("tEmail_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tEmail_cCtrl");
		} else Utils.checkForm_Valid("tEmail_cCtrl");
		return (!bError);
	} ,

	checkForm_Password: function() {
		var bError = false;
		if ($("tPassword_cCtrl").value.length < 6) {
			bError = true;
			Utils.checkForm_Error("tPassword_cCtrl");
		} else Utils.checkForm_Valid("tPassword_cCtrl");
		return (!bError);
	},

	checkForm_PasswordCheck: function() {
		var bError = false;
		if ($("tPasswordCheck_cCtrl").value != $("tPassword_cCtrl").value ) {
			bError = true;
			Utils.checkForm_Error("tPasswordCheck_cCtrl");
		} else Utils.checkForm_Valid("tPasswordCheck_cCtrl");
		return (!bError);
	},

	checkForm2: function() {
		var bNoError = true;
		bNoError = ResetPassword.checkForm_Password()  && bNoError;
		bNoError = ResetPassword.checkForm_PasswordCheck()  && bNoError;
		return (bNoError);
	}

}

// ======================
// Invitation.js
// ======================
var Invitation = {
	
	checkForm: function() {
		var bNoError = true;
		bNoError = Invitation.checkForm_Key()  && bNoError;
		bNoError = Invitation.checkForm_Email() && bNoError;
		return (bNoError);
	} ,

	checkForm_Email: function() {
		var bError = false;
		if (!Utils.isValidEmail($("tEmail_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tEmail_cCtrl");
		} else Utils.checkForm_Valid("tEmail_cCtrl");
		return (!bError);
	} , 

	checkForm_Key: function() {
		var bError = false;
		if (Utils.isEmpty($("tKey_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tKey_cCtrl");
		} else Utils.checkForm_Valid("tKey_cCtrl");
		return (!bError);
	} 

}

// ======================
// Register.js
// ======================
var Register = {
	checkForm: function() {
		var bNoError = true;
		bNoError = Register.checkForm_LastName()  && bNoError;
		bNoError = Register.checkForm_FirstName()  && bNoError;
		bNoError = Register.checkForm_Password()  && bNoError;
		bNoError = Register.checkForm_Email_simple() && bNoError;
		if (bNoError) {
			$("tHashed").value =  hex_md5($("tEmail_cCtrl").value.toLowerCase() + $("tPassword_cCtrl").value);
			$("tPassword_cCtrl").value = "";
		}
		return (bNoError);
	} , 

	checkForm_Email: function() {
		var bError = false;
		if (!Register.checkForm_Email_simple()) {
			bError = true;
			$("zRegister_EmailExists").hide();
		}
		else {
			new Ajax.Request(
				'_checkemail.aspx', 
				{
					method: 'post',
					parameters: {email: $("tEmail_cCtrl").value} ,
					onSuccess: function(transport) {
						if (transport.responseText == "1") {
							Utils.checkForm_Valid("tEmail_cCtrl");
							$("zRegister_EmailExists").hide();
						} else {
							Utils.checkForm_Error("tEmail_cCtrl");
							$("zRegister_EmailExists").show();
						}
					} ,
					onFailure: function() { alert("Ajax error"); }
				}
			)
		}
		return (!bError);
	} , 

	checkForm_Email_simple: function() {
		var bError = false;
		if (!Utils.isValidEmail($("tEmail_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tEmail_cCtrl");
		} else Utils.checkForm_Valid("tEmail_cCtrl");
		return (!bError);
	} ,

	checkForm_Password: function() {
		var bError = false;
		if ($("tPassword_cCtrl").value.length < 6) {
			bError = true;
			Utils.checkForm_Error("tPassword_cCtrl");
		} else Utils.checkForm_Valid("tPassword_cCtrl");
		return (!bError);
	} ,

	checkForm_FirstName: function() {
		var bError = false;
		if (Utils.isEmpty($("tFirstName_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tFirstName_cCtrl");
		} else Utils.checkForm_Valid("tFirstName_cCtrl");
		return (!bError);
	} , 

	checkForm_LastName: function() {
		var bError = false;
		if (Utils.isEmpty($("tLastName_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tLastName_cCtrl");
		} else Utils.checkForm_Valid("tLastName_cCtrl");
		return (!bError);
	} 

}

// ======================
// Wizard.js
// ======================
var Wizard = {

	checkForm: function() {
		var bNoError = true;
		bNoError = Wizard.checkForm_Title()  && bNoError;
		return (bNoError);
	} ,
	
	checkForm_Title: function() {
		var bError = false;
		if (Utils.isEmpty($("tTitle_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tTitle_cCtrl");
		} else Utils.checkForm_Valid("tTitle_cCtrl");
		return (!bError);
	} 
}

// ======================
// Dashboard.js
// ======================
var Dashboard = {
	sM: Array("mostactive", "mostviewed", "mostrecent", "lastactive"),

	DisplayIdeas: function(pMethod) {
		$("zIdeaList").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zIdeaList")},
			"../widgets/ideas.aspx?s=" + pMethod,
			{
				method: 'post',
				parameters: {},
				evalScripts: 'true'
			}
		)
		Dashboard.sCurrent = pMethod;
		return (false);
	} ,

	ChangeIdeas: function(pObj, pMethod) {
		Dashboard.DisplayIdeas(Dashboard.sM[pMethod]);
		var sH = $("zSelIdea").textContent;
		var sC = pObj.textContent;
		$("zSelIdea").textContent = sC;
		pObj.textContent = sH;
		var sTmp = Dashboard.sM[pMethod]
		Dashboard.sM[pMethod] = Dashboard.sM[0];
		Dashboard.sM[0] = sTmp;
		return (false);
	}
}

// ======================
// EditPrj.js
// ======================
var EditPrj = {
	checkForm: function() {
		var bNoError = true;
		bNoError = EditPrj.checkForm_Title()  && bNoError;
		return (bNoError);
	} ,
	
	checkForm_Title: function() {
		var bError = false;
		if (Utils.isEmpty($("tTitle_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tTitle_cCtrl");
		} else Utils.checkForm_Valid("tTitle_cCtrl");
		$("tSerial").value = Sortable.serialize("mList");
		return (!bError);
	}
}

// ======================
// Newidea.js
// ======================
var NewIdea = {

	checkForm: function(pUid) {
//		if (window.filesuploaded) return true;
		var bNoError = true;
		bNoError = NewIdea.checkForm_Title()  && bNoError;
//		if (bNoError) NewIdea.checkForm_Upload(pUid);
//		return false;
		return (bNoError);
	} ,
	
	checkForm_Title: function() {
		var bError = false;
		if (Utils.isEmpty($("tTitle_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tTitle_cCtrl");
		} else Utils.checkForm_Valid("tTitle_cCtrl");
		return (!bError);
	} ,

	checkForm_Upload: function(pUid) {
		var uo = $(pUid);
		if (!window.filesuploaded && uo.getqueuecount() > 0) uo.startupload();
		window.filesuploaded=false;
		return true;
	} 
}

// ======================
// EditIdea.js
// ======================
var EditIdea = {

	checkForm: function(pUid) {
		var bNoError = true;
		bNoError = EditIdea.checkForm_Title()  && bNoError;
		return (bNoError);
	} ,
	
	checkForm_Title: function() {
		var bError = false;
		if (Utils.isEmpty($("tTitle_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tTitle_cCtrl");
		} else Utils.checkForm_Valid("tTitle_cCtrl");
		return (!bError);
	} ,

	RemoveTag: function (pTagId, pIdeaId) {
		if (confirm("Do you really want to remove this tag?")) {
			new Ajax.Request(
				'_remtag.aspx', 
				{
					method: 'post',
					parameters: { t: pTagId, i: pIdeaId } ,
					onSuccess: function(transport) {
						if (transport.responseText == "1") {
							$("TagLi" + pTagId).hide();
						} 
					} ,
					onFailure: function() { alert("Ajax error"); }
				}
			)
		}
	} ,

	DeleteDoc: function (pDocId, pIdeaId) {
		if (confirm("Do you really want to delete this document?")) {
			new Ajax.Request(
				'_deldoc.aspx', 
				{
					method: 'post',
					parameters: { d: pDocId, i: pIdeaId } ,
					onSuccess: function(transport) {
						if (transport.responseText == "1") {
							$("DocLi" + pDocId).hide();
						} 
					} ,
					onFailure: function() { alert("Ajax error"); }
				}
			)
		}
	}

}

// ======================
// Messagedetails.js
// ======================
var MessageDetails = {
	DeleteMessage: function (pMessId) {
		if (confirm("Do you really want to delete this message?")) {
			new Ajax.Request(
				'_delmess.aspx', 
				{
					method: 'post',
					parameters: { m: pMessId } ,
					onSuccess: function(transport) {
						if (transport.responseText == "1") {
							document.location = "default.aspx";
						} 
					} ,
					onFailure: function() { alert("Ajax error"); }
				}
			);
		}
	} 

}

// ======================
// NewMessage.js
// ======================
var NewMessage = {

	checkForm: function(pUid) {
//		if (window.filesuploaded) return true;
		var bNoError = true;
		bNoError = NewMessage.checkForm_Title()  && bNoError;
//		if (bNoError) NewIdea.checkForm_Upload(pUid);
//		return false;
		return (bNoError);
	} ,
	
	checkForm_Title: function() {
		var bError = false;
		if (Utils.isEmpty($("tTitle_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tTitle_cCtrl");
		} else Utils.checkForm_Valid("tTitle_cCtrl");
		return (!bError);
	} ,

	checkForm_Upload: function(pUid) {
		var uo = $(pUid);
		if (!window.filesuploaded && uo.getqueuecount() > 0) uo.startupload();
		window.filesuploaded=false;
		return true;
	} 
}

// ======================
// EditMessage.js
// ======================
var EditMessage = {

	checkForm: function(pUid) {
		var bNoError = true;
		bNoError = EditMessage.checkForm_Title()  && bNoError;
		return (bNoError);
	} ,
	
	checkForm_Title: function() {
		var bError = false;
		if (Utils.isEmpty($("tTitle_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tTitle_cCtrl");
		} else Utils.checkForm_Valid("tTitle_cCtrl");
		return (!bError);
	} ,

	DeleteDoc: function (pDocId, pMessId) {
		if (confirm("Do you really want to delete this document?")) {
			new Ajax.Request(
				'_deldoc.aspx', 
				{
					method: 'post',
					parameters: { d: pDocId, m: pMessId } ,
					onSuccess: function(transport) {
						if (transport.responseText == "1") {
							$("DocLi" + pDocId).hide();
						} 
					} ,
					onFailure: function() { alert("Ajax error"); }
				}
			)
		}
	}

}

// ======================
// Ideadetails.js
// ======================
var IdeaDetails = {
	
	ToggleHistory: function() {
		Effect.toggle('zHistoryList','blind', {duration: .2});
	} ,

	ToggleDup: function() {
		Effect.toggle('zDupList','blind', {duration: .2});
	} ,

	ToggleCommentForm: function() {
		Effect.toggle('zIdeaAddComment_Form','blind', {duration: .2});
	} ,

	MarkIdea: function(pIdeaId) {
		new Ajax.Updater(
			{ success: $("zIdeaDetails_Mark")},
			"_markidea.aspx",
			{
				method: 'post',
				parameters: {i: pIdeaId},
				evalScripts: 'true'
			}
		)
	} ,

	AddVote: function(pIdeaId, pVote) {
		new Ajax.Updater(
			{ success: $("zIdeaDetails_Vote")},
			"_addvote.aspx",
			{
				method: 'post',
				parameters: {i: pIdeaId, v: pVote},
				evalScripts: 'true'
			}
		)
	} ,

	DeleteCom: function (pComId) {
		if (confirm("Do you really want to delete this comment?")) {
			$("cli_" + pComId).remove();
			new Ajax.Request(
						"_delcom.aspx", 
						{
							method: "post",
							parameters: { c: pComId }
						}
					);
		}
	} ,

	DeleteIdea: function (pIdeaId) {
		if (confirm("Do you really want to delete this idea?")) {

			new Ajax.Request(
				'_delidea.aspx', 
				{
					method: 'post',
					parameters: { i: pIdeaId } ,
					onSuccess: function(transport) {
						if (transport.responseText == "1") {
							document.location = "default.aspx";
						} 
					} ,
					onFailure: function() { alert("Ajax error"); }
				}
			)

		}
	} 
}

// ======================
// Search.js
// ======================
var SearchIdeas = {
	sKeywords: "",
	Send: function(pKeywords) {
		document.location = "../idea/?k=" + pKeywords;
	}, 
	Search: function() {
		$("zIdea_content").innerHTML = "loading...";
		SearchIdeas.sKeywords = $("tKeywords_cCtrl").value;
		new Ajax.Updater(
			{ success: $("zIdea_content")},
			"../widgets/ideas.aspx?s=search",
			{
				method: 'post',
				parameters: {
					q: SearchIdeas.sKeywords
				},
				evalScripts: 'true'
			}
		)
		return (false);
	}
}

// ======================
// BrowseIdeas.js
// ======================
var BrowseIdeas = {
	bRelTagUTD: false ,
	bRelTagOpen: false,
	aTags: new Array(),
	aTagIds: new Array(),
	nAuthorId: 0,
	bFav: false,
	sStatus: "",
	sRemoveIconSrc: "",
	sKeywords: "",

	RelatedTags: function() {
		BrowseIdeas.bRelTagOpen = !BrowseIdeas.bRelTagOpen;
		Effect.toggle('zAvailableTags_List','blind', {duration: .2});
		if (!BrowseIdeas.bRelTagUTD)	{		
			$("zAvailableTags_List").innerHTML = "loading...";
			new Ajax.Updater(
				{ success: $("zAvailableTags_List")},
				"_reltag.aspx",
				{
					method: 'post',
					parameters: { l: BrowseIdeas.aTagIds.join(",") },
					evalScripts: 'true'
				}
			)
			BrowseIdeas.bRelTagUTD = true;
		}
		return (false);
	},

	SelectTag: function(pTagLabel) {
		$("tRelatedTag_cCtrl").value = pTagLabel;
		BrowseIdeas.Filter();
	},

	Filter: function() {
		$("zIdea_content").innerHTML = "loading...";
		BrowseIdeas.bRelTagUTD = false;
		var sTag = Utils.trim($("tRelatedTag_cCtrl").value);
		if (sTag != "") {
			BrowseIdeas.aTags.push(sTag);
			$("zMoreOptions_Form").show();
//			BrowseIdeas.UpdateUsedTags(sTag);
		}
		$("tRelatedTag_cCtrl").value = "";
		BrowseIdeas.nAuthorId = $("tAuthor_cCtrl").value;
		BrowseIdeas.sStatus = $("tStatus_cCtrl").value;
		BrowseIdeas.bFav = $("cFavorites_cCtrl").checked;
		BrowseIdeas.sKeywords = $("tKeywords_cCtrl").value;
		new Ajax.Updater(
			{ success: $("zIdea_content")},
			"../widgets/ideas.aspx?s=browse",
			{
				method: 'post',
				parameters: {
					t: sTag, 
					q: BrowseIdeas.sKeywords,
					l: BrowseIdeas.aTagIds.join(","),
					a: BrowseIdeas.nAuthorId,
					s: BrowseIdeas.sStatus,
					f: (BrowseIdeas.bFav ? "1":"0")
				},
				evalScripts: 'true'
			}
		)
		return (false);
	},

	UpdateUsedTags: function(pTagId, pTag) {
		if ($("zUsedTags").innerHTML == "&nbsp;") $("zUsedTags").innerHTML = BrowseIdeas.GetUsedTagHtml(pTagId, pTag);
		else	$("zUsedTags").innerHTML += BrowseIdeas.GetUsedTagHtml(pTagId, pTag);
	},

	GetUsedTagHtml: function(pTagId, pTag) {
		return (pTag + " <a href=\"#\" onclick=\"BrowseIdeas.RemoveTag(" + pTagId + "); return false;\" title=\"Remove this tag from the filter\">"
			+ ((BrowseIdeas.sRemoveIconSrc == "") ? "( x )" : "<img src='" + BrowseIdeas.sRemoveIconSrc + "' alt=\"\" \>" ) + "</a><br />");
	},

	RemoveTag: function(pTagId) {
		var nP = BrowseIdeas.aTagIds.indexOf(pTagId);
		if (nP >= 0) { 
			var sTag = BrowseIdeas.aTags[nP];
			BrowseIdeas.aTagIds = BrowseIdeas.aTagIds.without(pTagId);
			BrowseIdeas.aTags = BrowseIdeas.aTags.without(sTag);
			var nL = BrowseIdeas.aTagIds.length;
			var sHtml = "";
			for (var i=0; i < nL; i++)
				sHtml += BrowseIdeas.GetUsedTagHtml(BrowseIdeas.aTagIds[i], BrowseIdeas.aTags[i]);
			$("zUsedTags").innerHTML = (sHtml == "" ? "&nbsp;" : sHtml);
			$("tRelatedTag_cCtrl").value = "";
			BrowseIdeas.Filter();
		}
	},

	ToggleMoreOptions: function() {
		Effect.toggle('zMoreOptions_Form','blind', {duration: .2});
	} ,

	pn: function(pPage) {
		$("zIdea_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zIdea_content")},
			"../widgets/ideas.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					p: pPage
				},
				evalScripts: 'true'
			}
		)
	} ,

	ps: function(pPageSize) {
		$("zIdea_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zIdea_content")},
			"../widgets/ideas.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					ps: pPageSize
				},
				evalScripts: 'true'
			}
		)
	} ,

	s: function(pSort, pElt) {
		$("zIdea_content").innerHTML = "loading...";
		$$('#zH2SortChoice a').each(function(elt) { elt.removeClassName("selected"); });
		pElt.addClassName("selected");
		new Ajax.Updater(
			{ success: $("zIdea_content")},
			"../widgets/ideas.aspx?s=sort",
			{
				method: 'post',
				parameters: {
					s: pSort
				},
				evalScripts: 'true'
			}
		)
	}

}

// ======================
// Invite.js
// ======================
var Invite = {

	checkForm: function() {
		var bNoError = true;
		bNoError = Invite.checkForm_Email() && bNoError;
		return (bNoError);
	} ,

	checkForm_Email: function() {
		var bError = false;
		var aEmails = [];
		if (Utils.isEmpty($("tEmails_cCtrl").value)) bError = true;
		$("tEmails_cCtrl").value.scan(/([-.@\w]*[0-9a-zA-Z])+/, function(match){ aEmails.push(match[0])});
		aEmails.inspect();
		var sEmails = ""; var sError = "";
		for (i=0; i < aEmails.length; i++) {
			sEmails += aEmails[i] + "\n";
			if (!Utils.isValidEmail(	aEmails[i])) {
				bError = true;
				sError += "  + " + aEmails[i] + "\n";
			}
		}
		$("tEmails_cCtrl").value = sEmails;
		if (bError) {
			Utils.checkForm_Error("tEmails_cCtrl");
			if (sError != "") alert("Invalid email address:\n" + sError);
		} else Utils.checkForm_Valid("tEmails_cCtrl")
		return (!bError);
	} 
}

// ======================
// Permission.js
// ======================
var Permission = {
	setPerm: function(pCB, pObj, pAction) {
		new Ajax.Request(
			"_setperm.aspx", 
			{
				method: "post",
				parameters: {
					m: $("tMember_cCtrl").value,
					o: pObj,
					a: pAction,
					p: (pCB.checked ? "1" : "0")
				}
			}
		)
		return (true);
	}
}

// ======================
// BrowseMembers.js
// ======================
var BrowseMembers = {
	Init: function() {
		$("zMembers_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zMembers_content")},
			"../people/_members.aspx?s=browse",
			{
				method: 'post',
				parameters: {},
				evalScripts: 'true'
			}
		);
		return (false);
	} , 

	pn: function(pPage) {
		$("zMembers_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zMembers_content")},
			"../people/_members.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					p: pPage
				},
				evalScripts: 'true'
			}
		)
	} ,

	ps: function(pPageSize) {
		$("zMembers_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zMembers_content")},
			"../people/_members.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					ps: pPageSize
				},
				evalScripts: 'true'
			}
		)
	}

}

// ======================
// Profile.js
// ======================
var EditProfile = {
	checkForm: function() {
		var bNoError = true;
		bNoError = EditProfile.checkForm_LastName()  && bNoError;
		bNoError = EditProfile.checkForm_FirstName()  && bNoError;
		bNoError = EditProfile.checkForm_Email_simple() && bNoError;
		return (bNoError);
	} ,

	checkForm_Email: function(pEmail) {
		var bError = false;
		if (pEmail.toLowerCase()  != $("tEmail_cCtrl").value.toLowerCase() ) {
			if (!Register.checkForm_Email_simple()) {
				bError = true;
				$("zProfile_EmailExists").hide();
			}
			else {
				new Ajax.Request(
					'../register/_checkemail.aspx', 
					{
						method: 'post',
						parameters: {email: $("tEmail_cCtrl").value} ,
						onSuccess: function(transport) {
							if (transport.responseText == "1") {
								Utils.checkForm_Valid("tEmail_cCtrl");
								$("zProfile_EmailExists").hide();
							} else {
								Utils.checkForm_Error("tEmail_cCtrl");
								$("zProfile_EmailExists").show();
							}
						} ,
						onFailure: function() { alert("Ajax error"); }
					}
				)
			}
		} else {
			Utils.checkForm_Valid("tEmail_cCtrl");
			$("zProfile_EmailExists").hide();
		}
		return (!bError);
	} , 

	checkForm_Email_simple: function() {
		var bError = false;
		if (!Utils.isValidEmail($("tEmail_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tEmail_cCtrl");
		} else Utils.checkForm_Valid("tEmail_cCtrl");
		return (!bError);
	} ,

	checkForm_FirstName: function() {
		var bError = false;
		if (Utils.isEmpty($("tFirstName_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tFirstName_cCtrl");
		} else Utils.checkForm_Valid("tFirstName_cCtrl");
		return (!bError);
	} , 

	checkForm_LastName: function() {
		var bError = false;
		if (Utils.isEmpty($("tLastName_cCtrl").value)) {
			bError = true;
			Utils.checkForm_Error("tLastName_cCtrl");
		} else Utils.checkForm_Valid("tLastName_cCtrl");
		return (!bError);
	} 
}

// ======================
// BrowseMessages.js
// ======================
var BrowseMessages = {
	Init: function() {
		$("zMessages_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zMessages_content")},
			"../message/_messages.aspx?s=browse",
			{
				method: 'post',
				parameters: {},
				evalScripts: 'true'
			}
		);
		return (false);
	} , 

	pn: function(pPage) {
		$("zMessages_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zMessages_content")},
			"../message/_messages.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					p: pPage
				},
				evalScripts: 'true'
			}
		)
	} ,

	ps: function(pPageSize) {
		$("zMessages_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zMessages_content")},
			"../message/_messages.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					ps: pPageSize
				},
				evalScripts: 'true'
			}
		)
	}

}

// ======================
// BrowseDocuments.js
// ======================
var BrowseDocuments = {
	Init: function() {
		$("zDocuments_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zDocuments_content")},
			"../document/_documents.aspx?s=browse",
			{
				method: 'post',
				parameters: {},
				evalScripts: 'true'
			}
		);
		return (false);
	} , 

	pn: function(pPage) {
		$("zDocuments_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zDocuments_content")},
			"../document/_documents.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					p: pPage
				},
				evalScripts: 'true'
			}
		)
	} ,

	ps: function(pPageSize) {
		$("zDocuments_content").innerHTML = "loading...";
		new Ajax.Updater(
			{ success: $("zDocuments_content")},
			"../document/_documents.aspx?s=nav",
			{
				method: 'post',
				parameters: {
					ps: pPageSize
				},
				evalScripts: 'true'
			}
		)
	}

}