You cannot interact javascript and ASP.NET like that. ASP.NET will always execute before the code is being sent to the client, where the javascript executes. You can use .NET to generate javascript.
In your case, this will execute before anything else:
<%=pnlProperty" + num.toString() + ".ClientID%>
It will not execute in a loop, because it is executed as ASP.NET code before the loop is generated and sent to the client. Nor will the value of the javascript variable num be used to create a panel, because javascript hasn't started executed. Everything within <%, ... %> will be interpreted as .NET code. So .NET will simply throw an error, because the above is not an accurate line of code.
You need to write your .NET code so that it generates meaningful javascript.
You could do something like this:
var panels = [
"<%= pnlProperty0.ClientID %>",
"<%= pnlProperty1.ClientID %>",
"<%= pnlProperty2.ClientID %>"
];
... which might generate javascript that looks something like
var panels = [
"ctl00_main_pnlProperty0",
"ctl00_main_pnlProperty1",
"ctl00_main_pnlProperty2"
];
... which is an entirely accurate way of creating an array of strings that you can then use in your javascript
document.getElementById(panels[num]).style.display="inline";
If you want a dynamic loop, you may have to do something like
var panels = "<%
String.Join(
",",
Page.Controls.OfType<Panel>()
.Where(panel => panel.ID.StartsWith("pnlProperty"))
.Select(panel => panel.ClientID).ToArray());
%>";
... which might create something like
var panels = "ctl00_main_pnlProperty0,ctl00_main_pnlProperty1,ctl00_main_pnlProperty2";
upon which you could then do:
var panelNames = panels.split(',');
document.getElementById(panelNames[num]).style.display="inline";