﻿/*
* name: jPoint.userprofile.js
* purpose: get user profile info from /_layouts/userdisp.aspx
* input: none
* visibility: public
* return: jP.UserProfile (object)
*	jP.UserProfile.Name
*	jP.UserProfile.Account
*	jP.UserProfile.Title
*	jP.UserProfile.EMail
*	jP.UserProfile.Notes
*	jP.UserProfile.AboutMe
*	jP.UserProfile.Picture
*	jP.UserProfile.Department
*	jP.UserProfile.JobTitle
*	jP.UserProfile.SipAddress
*	jP.UserProfile.SIPAddress
*
*	jP.UserProfile.FieldCount 	//count of fields
*	jP.UserProfile.Fields		//array of field names
*	jP.UserProfile.Items[0].Name ... SipAddress
*
* use example: 
*	var usrprof = jP.getUserProfile(userID); //userID is optional 
*	var name = usrprof.Name; 
*	var email = usrprof.EMail;
*	var dept = usrprof.Department;
*/
(function(jP) {
	jP.getUserProfile = function (UserID) {
		var ProfileURL = jP.SiteURL+"/_layouts/userdisp.aspx";
		if(typeof UserID !== "undefined")
			ProfileURL = ProfileURL + "?ID=" + UserID;
		$.ajax( {
			type: "GET",	//jQuery ajax GET
			async: false,
			cache: false,
			url: ProfileURL, //userprofile url
			success: function(data){
				var tags = $(data).find("h3 > a");	//look for anchor in h3 tag
				if (tags.length > 0) {
					var profile = {};
					var fields = [];
					var item = {};
					$.each(tags, function(){
						var name = this.name;	//name attritbute
						var td = $(data).find("tr a[name='"+name+"']").parent().parent();  //get label td
						var labelname = jP.strip(td.text());  //get label text as field name
						if (labelname == "Picture") {
							//special handling for Picture field
							//concat attribute alt and src together
							var img = td.siblings().find("img");
							var val = img.attr("alt") + ";#" + img.attr("src");
						}
						else {
							//get text of next td cell
							var val = $.trim(td.siblings().text());
						}
						var intname = name.substr(name.indexOf("_")+1); //internal field name
						if ($.inArray(intname, fields)==-1) {  //save as internal fieldname
							fields.push(intname);
							item[intname] = profile[intname] = val;
						}
						if ($.inArray(labelname, fields)==-1) { //save as label fieldname
							fields.push(labelname);
							item[labelname] = profile[labelname] = val;
						}
					});
					//Set profile obj
					profile["Fields"] = fields;
					profile["FieldCount"] = fields.length;
					profile["Items"] = [item];
					//set UserProfile obj
					jP["UserProfile"] = profile;
				}	
			}
		});
		return (jP["UserProfile"])
	}
})(jPoint);
