﻿$(document).ready(function() {
	var myResult = testjPWS();
	//debugger;
});
function testjPWS() {
	var diagdiv = "#WSTestDiv";
   	var diagtbl = "#WSTestTable";
   	var resultdiv = "#WSTestResultDiv";
	var result;

	var listName = "FeedbackExample"
	var userEmails = "demouser@sharejpoint.com"
	var siteUrl = "http://www.sharejpoint.com/examples";
	var userID = "JPOINT\\\\demouser"

	$("script[src*='jPWSInspector.js']").parent().append("<div id='"+diagdiv.substr(1)+"'></div>")

	$(diagdiv).append(setStyle());

	var tbl = "";
	tbl = "<table border=1 id='"+diagtbl.substr(1)+"' style='{font-family:verdana,arial,helvetica,sans-serif; font-size:8pt;}'>";
   	tbl += infoRow("<b></b>", "<b>TryIt</b>", "<b>jPoint Script</b>", "<b>Example</b>")
   	tbl += "</table>";
	$(diagdiv).append(tbl);

	addTryItAction("GetWebCollection", "jP.WebServices.GetWebCollection()");
	addTryItAction("GetWeb", "jP.WebServices.GetWeb()");
	addTryItAction("WebUrlFromPageUrl", "jP.WebServices.WebUrlFromPageUrl()");	 
	addTryItAction("GetAllSubWebCollection", "jP.WebServices.GetAllSubWebCollection()"); //permission issue
	addTryItAction("GetListCollection", "jP.WebServices.GetListCollection()");
	addTryItAction("GetList", "jP.WebServices.GetList({listName:'"+listName+"'})");

	addTryItAction("GetWebCollection with siteUrl", "jP.WebServices.GetWebCollection({siteUrl:'"+siteUrl+"'})");	
	addTryItAction("GetWeb with siteUrl", "jP.WebServices.GetWeb({siteUrl:'"+siteUrl+"'})");
	addTryItAction("WebUrlFromPageUrl with siteUrl", "jP.WebServices.WebUrlFromPageUrl({siteUrl:'"+siteUrl+"',webUrl:'"+siteUrl+"/dev/default.aspx'})");	 	
	addTryItAction("GetAllSubWebCollection with siteUrl", "jP.WebServices.GetAllSubWebCollection({siteUrl:'"+siteUrl+"'})"); //permission issue	
	addTryItAction("GetListCollection with siteUrl", "jP.WebServices.GetListCollection({siteUrl:'"+siteUrl+"'})");
	addTryItAction("GetList with siteUrl", "jP.WebServices.GetList({siteUrl:'"+siteUrl+"',listName:'"+listName+"'})");

	addTryItAction("GetUserLoginFromEmail", "jP.WebServices.GetUserLoginFromEmail({userEmails:'"+userEmails+"'})");
	addTryItAction("GetUserInfo", "jP.WebServices.GetUserInfo({userLoginName:'"+userID+"'})");
	addTryItAction("GetRoleCollectionFromWeb", "jP.WebServices.GetRoleCollectionFromWeb()");
	//addTryItAction("GetRoleCollection", "jP.WebServices.GetRoleCollection(\""+siteUrl+"\",\""+"Design"+"\")");
	addTryItAction("GetRoleInfo", "jP.WebServices.GetRoleInfo({roleName:'"+"Design"+"'})");
	addTryItAction("GetGroupCollectionFromWeb", "jP.WebServices.GetGroupCollectionFromWeb()");
	addTryItAction("GetGroupCollectionFromSite", "jP.WebServices.GetGroupCollectionFromSite()");
	addTryItAction("CallSPWebSvc", "jP.WebServices.CallSPWebSvc({siteUrl:'"+siteUrl+"', serviceName:'Webs', operationName:'GetWeb', soapBody:'&lt;webUrl&gt;"+siteUrl+"&lt;/webUrl\&gt;', returnNode:'Web'});");
	addTryItAction("SubSitePicklist", "" + "$('#SiteLU').html('&lt;option&gt;'+jP.WebServices.GetWebCollection().find('Web').Attrs('Title').join('&lt;/option&gt;&lt;option&gt;')+'&lt;/option&gt;');", 
		undefined,"<div id='SiteDiv'><select id='SiteLU'><option>select...<option></select></div>");
	addTryItAction("ListPicklist", "" + "$('#ListLU').html('&lt;option&gt;'+jP.WebServices.GetListCollection().find('List').Attrs('Title').join('&lt;/option&gt;&lt;option&gt;')+'&lt;/option&gt;');", 
		undefined,"<div id='ListDiv'><select id='ListLU'><option>select...<option></select></div>");
	addTryItAction("Use Example 1", "parseResultExample1()");
	addTryItAction("Use Example 2", "parseResultExample2()");

	$(diagdiv).append("<div id='"+resultdiv.substr(1)+"'></div>");
	
	function parseResultExample2() {
		var wsOpts = {
			siteUrl: siteUrl
			,listName: listName
			,filterNode: "Field[ID]"
			,filterAttr: "Name"
		};
		var result = jP.WebServices.GetList(wsOpts);
		var tbl = ""
		tbl += 'var wsOpts = {<br>';
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;siteUrl: siteUrl<br>';
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;,listName: ""+listName+""<br>';
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;,filterNode: "Field[ID]"<br>';
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;,filterAttr: "Name"<br>';
		tbl += '};<br>';
		tbl += 'var result = jP.WebServices.GetList(wsOpts);<br><br>';
		
		tbl += '<hr><b>Example 1:</b><br>//Get data from filtered result array and construct a dropdown picklist<br>';
		tbl += 'if (result.length &gt; 0) {<br>'
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;z = "&lt;select id=\'mySelect\'&gt;&lt;option&gt;" + result.join("&lt;/option&gt;&lt;option&gt;") + "&lt;/option&gt;&lt;/select&gt;";<br>'
		tbl += '}<br>'
		c = 0;
		var z = "";
		if (result.length > 0) {
			z = "<select id='mySelect'><option>" + result.join("</option><option>") + "</option></select>";
		}
		tbl += "<b>Result:</b><br> z = " + z + "<br>" + z.replace(/</g,"&lt;").replace(/>/g,"&gt;") + "<br><br>";

		tbl += '<hr><b>Example 2:</b><br>//Get data from jP.WebServices.Result.data object<br>';
		tbl += 'var fields = jP.WebServices.Result.data.List0.Fields0;<br>';
		tbl += 'for (var i=0;i&lt;fields.ChildrenCount;i++) {<br>'
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;x += (c++) + "-" + fields["Field"+i].NodeAttr.Name + ", ";<br>'
		tbl += '}<br>'
		var c = 0;
		var x = "";

		var fields = jP.WebServices.Result.data.List0.Fields0;
		for (var i=0;i<fields.ChildrenCount;i++) {
			x += (c++) + "-" + fields["Field"+i].NodeAttr.Name + ", ";
		}
		tbl += "<b>Result:</b><br> x = " + x + "<br><br>";

		tbl += '<hr><b>Example 3:</b><br>//Get data from jP.WebServices.Result.xmlDoc object<br>';
		tbl += '$.each($(jP.WebServices.Result.xmlDoc).find("Field[ID]"), function () {<br>'
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;y += (c++) + "-" + $(this).attr("Name")+"| ";<br>'
		tbl += '});<br>'
		c = 0;
		var y = ""; 
		$.each($(jP.WebServices.Result.xmlDoc).find("Field[ID]"), function () {
			y += (c++) + "-" + $(this).attr("Name")+"| ";
		});
		tbl += "<b>Result:</b><br> y = " + y + "<br><br>";
		
		$(resultdiv).html("<div id='ResultTableDiv'><hr><h2>"+jP.WebServices.Result.operation+" Result:</h2>"+tbl+"</div>");

	}
	function parseResultExample1() {
		var result = jP.WebServices.GetListCollection({
			siteUrl: siteUrl
			,filterNode: "List"
			,filterAttr: "Title"
			});

		var tbl = ""
		tbl += 'var res = jP.WebServices.GetListCollection(siteUrl, "List", "Title");<br><br>'
		tbl += '<hr>//Get data from jP.WebServices.Result.data object<br>';
		tbl += 'for (var i=0;i&lt;jP.WebServices.Result.count;i++) {<br>'
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;x += jP.WebServices.Result.data["List"+i].NodeAttr.Title + ",";<br>'
		tbl += '}<br>'

		var x = "";
		for (var i=0;i<jP.WebServices.Result.count;i++) {
			x += jP.WebServices.Result.data["List"+i].NodeAttr.Title + ",";
		}
		tbl += "<b>Result:</b> x = " + x + "<br><br>";

		tbl += '<hr>//Get data from jP.WebServices.Result.xmlDoc object<br>';
		tbl += '$.each($(jP.WebServices.Result.xmlDoc).find("List"), function () {<br>'
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;y += $(this).attr("Title")+"|";<br>'
		tbl += '});<br>'

		var y = ""; 
		$.each($(jP.WebServices.Result.xmlDoc).find("List"), function () {
			y += $(this).attr("Title")+"|";
		});
		tbl += "<b>Result:</b> y = " + y + "<br><br>";
		
		tbl += '<hr>//Get data from filtered result array<br>';
		tbl += '$.each(res, function () {<br>'
		tbl += '&nbsp;&nbsp;&nbsp;&nbsp;z += this + ";";<br>'
		tbl += '});<br>'
		var z = "";
		if (result.length > 0) {
			$.each(result, function () {
				z += this + ";" 
			});
		}
		tbl += "<b>Result:</b> z = " + z + "<br><br>";
		$(resultdiv).html("<div id='ResultTableDiv'><hr><h2>"+jP.WebServices.Result.operation+" Result:</h2>"+tbl+"</div>");		
	}
	function addTryItAction(title, code, input, div) {
		var button = "Run";
		var id = "jP"+title.replace(/ /g, "");
		if (input) {
			var inputid = id+"_Input";
			var textid = id+"_Input";
			
			var inputhtm = input.replace("~~~ReplaceMeInput~~~", inputid)
			var codehtm = code.replace("~~~ReplaceMeText~~~", inputhtm)
			
			var s = infoRow("", "<span id='"+id+"' class='BtnLink'>["+button+"]</span>", codehtm, title, "TryItRow", "TryItRow")
			
			$(diagtbl).append(s);
			  		
	    	$("#"+id).click(function(){ 
	    		alert("TBD");
	  			//var userinput = $("#"+inputid).val();
				//var codehtm = code.replace("~~~ReplaceMeText~~~", userinput)    	
	    		//setTryItStatus("" + codehtm); 
	    		//var result = eval(codehtm);
	    		//dispResult(result, ""); 
	    	});
		}
		else {
			var scr = div ? code+div : code 
			var s = infoRow("", "<span id='"+id+"' class='BtnLink'>["+button+"]</span>", scr, title, "TryItRow", "TryItRow")
	
			$(diagtbl).append(s);
	    	$("#"+id).click(function(){ 
	    		$(resultdiv).html("");
	    		//debugger;
	    		code = code.replace(/&lt;/g,"<").replace(/&gt;/g,">")
	    		var result = eval(code);
	    		//if (jP.WebServices.Result
	    		if (code.indexOf("jP.WebServices") >= 0)
	    			dispResult(jP.WebServices.Result, "");
	    	});
		}
		return s;
	}
	function dispResult(result, elem) {
		if (typeof result == "undefined") return;
		var tbl = "";
		var row1 = true;
		var data = result.data
		var f = ['jP.WebServices.Result.service','jP.WebServices.Result.operation','jP.WebServices.Result.siteurl','jP.WebServices.Result.resultnode'];
		var info = "";
		info += "<table>"
		for (var i=0; i<f.length; i++) {
			info += "<tr><td valign=top>"+f[i] + "</td><td valign=top>" + eval(f[i]) + "</td></tr>";	
		}
		if (!result.success) {
			var f = ['jP.WebServices.Result.success','jP.WebServices.Result.errorCode','jP.WebServices.Result.errorText','jP.WebServices.Result.responseText'];
			for (var i=0; i<f.length; i++) {
				info += "<tr><td valign=top>"+f[i] + "</td><td valign=top>" + eval(f[i]) + "</td></tr>";	
		}
		}

		var xmlString = xmlDoc2String(jP.WebServices.Result.xmlDoc);
		if (typeof xmlString != "undefined" && xmlString != "") {
			xmlString = xmlString.replace(/</g,"&lt;").replace(/>/g,"&gt;");
			info += "<tr><td valign=top>"+ "<span id='ResultXmlDocBtn' class='BtnLink'>+jP.WebServices.Result.xmlDoc</span>" + "</td><td><div id='ResultXmlDoc'>" + xmlString + "</div></td></tr>";
			info += "</table>"
		}
		if (result.success) {
			tbl = "<table border=0>"+ showObj(jP.WebServices.Result.data, "jP.WebServices.Result.data", jP.WebServices.Result.operation, 1) +"</table>"
		}
		$(resultdiv).html("<div id='ResultTableDiv'><hr><h2>"+result.operation+" Result:</h2>"+info+tbl+"</div>");

		$("#ResultXmlDoc").hide();
		$("#ResultXmlDocBtn").click(function(){
			$("#ResultXmlDoc").toggle();
			var ht = $("#ResultXmlDocBtn").html();
			if (ht.indexOf("+")>=0) {
				ht = ht.replace("+", "-");
			}
			else if (ht.indexOf("-")>=0) {
				ht = ht.replace("-", "+");
			}
			$("#ResultXmlDocBtn").html(ht);				
		});
		if (result.success) {
			makeResultTree(true);
		}		
	}
	function xmlDoc2String(xmlDoc) {
		var xmlString = "";
		if (window.ActiveXObject) {
			//for IE
			xmlString = xmlDoc.xml;
		}
		else if (document.implementation && document.implementation.createDocument) {
			//for Mozila
			if (xmlDoc.contentType == "text/xml")
				xmlString = (new XMLSerializer()).serializeToString(xmlDoc);
		}	
		return xmlString;
	}
	function infoRow(c1, c2, c3, c4, rowid, rowclass) {
		if (c3 == "string" || (c1=="val" && c3=="function")) { c2 = "\"" + c2 + "\"" };
		if (rowid)
			var s = "<tr id='"+rowid+"' class='"+rowclass+"'>";
		else	
			var s = "<tr>";
		s += "<td valign=top>" + c4 + "</td>";
		s += "<td valign=top>" + c2 + "</td>";
		s += "<td valign=top>" + c3 + "</td>";
		//s += "<td valign=top>" + c1 + "</td>";
		s += "</tr>"
		return s;
	}
	function showObj(obj, jPCode, uid, idx) {
		var s = "";
		var cnt = 0;
		var indent0 = "&nbsp;&nbsp;&nbsp;&nbsp;";
		var indent = "";
		for (var i=1; i<idx; i++) indent += indent0;
		var rowuid = "ObjRow"+"_"+idx+"_"+uid
		if (obj.length) {
			indent = indent.substr(0, indent.lastIndexOf("&"))
			s += infoRow(rowuid+indent.length, "object array length="+obj.length, typeof(obj), indent+"+"+jPCode, rowuid, "ObjHdr");
		}
		var r = "";
		$.each(obj, function(n, v) {
			var newidx = idx+1
			var rowuid = "ObjRow"+"_"+newidx+"_"+uid
			cnt++;
			//debugger;
			if (typeof(v) == "object") {
				r += showObj(v, jPCode+"."+n, n+uid, newidx)
			}
			else {
				var dat = v.toString().replace(/</g,"&lt;").replace(/>/g,"&gt;");
				r += infoRow(rowuid, dat, typeof(v), indent+indent0+jPCode+"."+n+"", rowuid, "ObjRow");
			}
		});
		if (obj.length == undefined) {
			if (cnt == 0)
				r = infoRow(rowuid, "(count="+cnt+")", typeof(obj), indent+""+jPCode, rowuid, "ObjRow") + r;
			else {
				indent = indent.substr(0, indent.lastIndexOf("&"))
				r = infoRow(rowuid+indent.length, "(count="+cnt+")", typeof(obj), indent+"+"+jPCode, rowuid, "ObjHdr") + r;
			}
		}
	
		s += r;
	
		return s;
	}
	function setStyle() {
		var stl = "<div id='jPWSStyle'><style>"
		stl += "tr.ObjHdr:hover {color:blue}"
		stl += "tr.ObjHdr {color:green; cursor:pointer;}"
    	stl += "span.BtnLink:hover {color:#000000; text-decoration:underline}"
    	stl += "span.BtnLink {color:#3966BF; cursor:pointer; font-weight:normal; font-size:8pt; }"
    	stl += "span.BtnSeparator {color:#3966BF; font-weight:normal; font-size:8pt;}"
    	stl += "tr.TryItRow {white-space:nowrap}"
    	stl += "tr.StatusRow {background:lightyellow}"		
		stl += "</style></div>"
		return stl;
	}
	function makeResultTree(collapseAll) {
		var re = /ObjRow_(\d+)_([A-Za-z0-9]*)$/;
		if (collapseAll) {
			//Hide subrows
			$("tr[id^='ObjRow'][class='ObjRow']").hide();
			var hdr = $("tr[id^='ObjRow_'][class='ObjHdr']");
			$.each(hdr, function(){
				var row = this;
				var m = row.id.toString().match(re);
				if (m[1] != "1")	
					$(row).hide();
			});
		}
		//Add toggle function
		$("tr[id^='ObjRow'][class='ObjHdr']").click(function() {
			var h = $(this).children(":first");
			var ht = h.html();
			var expand = true;
			if (ht.indexOf("+")>=0) {
				ht = ht.replace("+", "-");
			}
			else if (ht.indexOf("-")>=0) {
				ht = ht.replace("-", "+");
				expand = false;
			}
			h.html(ht);
	
			var m = this.id.toString().match(re);
			var xid = parseInt(m[1])+1;
			if (expand) {
				var hdr = $("tr[id^='ObjRow_"+xid+"'][id$='"+m[2]+"'][class='ObjHdr']")
				if (hdr.length > 0)	hdr.show();
				$("tr[id^='ObjRow_"+xid+"'][id$='"+m[2]+"'][class='ObjRow']").show();
			}
			else {
				$("tr[id^='ObjRow_"+xid+"'][id$='"+m[2]+"'][class='ObjRow']").hide();
				
				var row = $("tr[id^='ObjRow_'][id$='"+m[2]+"'][class='ObjRow']");
				$.each(row, function(){
					var row1 = this;
					var m = row1.id.toString().match(re);
					if (m[1] != (xid-1))	
						$(row1).hide();
				});
				
	
				var hdr = $("tr[id^='ObjRow_'][id$='"+m[2]+"'][class='ObjHdr']")
				$.each(hdr, function(){
					var h = $(this).children(":first");
					var ht = h.html();
					ht = ht.replace("-", "+");
					h.html(ht);
					var row1 = this;
					var m = row1.id.toString().match(re);
					if (m[1] != (xid-1))	
						$(row1).hide();
				});
	
			}
		});
	}
}
