Forums

This topic is locked

Extending HTML tags with extensions

Posted 12 May 2004 21:16:58
1
has voted
12 May 2004 21:16:58 Rod Thomas posted:
Hi,

I've been looking for assistance on this for a while and haven't received any help. I'm beginning to think it isn't possible!

I'm interested in extending basic html tags and depedant on the doc type loaded, add prefixs to the tags.

So for instance, if an .htm(l) file is loaded in Dreamweaver and the developer adds tags, the tags would appear as <form...></form>, <input.../>, <img.../>, etc. I would like to create new html tags that extend a set of basic tags that add a prefix to the opening and closing tags. So for instance if I load a document type of ".ppp" I'd like any html tags I specified to be displayed as <ppp:form...></ppp:form>, <ppp:input.../>, <ppp:img.../>, etc.

Please offer any advice you can on how I can get this implemented.

Thanks.

Replies

Replied 12 May 2004 21:30:22
12 May 2004 21:30:22 Vince Baker replied:
Not sure if I can give an answer but I am interested into why you are trying to do this...

Regards
Vince

DMX Talkzone Manager

Visit my home: www.chez-vince.com

VBScript | ASP | HTML | SQL | Oracle | Hosting
Replied 12 May 2004 23:09:37
12 May 2004 23:09:37 Rod Thomas replied:
Vince,

I'm in the process of implementing a template based engine for an app server. I wanted to leverage the usability teams tools so they would be able to continue to create the pages without having to learn anything new. i was hoping this is an option so I could avoid having to teach them new tags when designing the pages.

I think the only other option maybe to implement new tags and then train the team on how to use them -- i was trying to avoid having to do that...

<BLOCKQUOTE id=quote><font size=1 face="Verdana, Arial, Helvetica" id=quote>quote:<hr height=1 noshade id=quote>
Not sure if I can give an answer but I am interested into why you are trying to do this...

Regards
Vince

DMX Talkzone Manager

Visit my home: www.chez-vince.com

VBScript | ASP | HTML | SQL | Oracle | Hosting
<hr height=1 noshade id=quote></BLOCKQUOTE id=quote></font id=quote><font face="Verdana, Arial, Helvetica" size=2 id=quote>


Replied 14 May 2004 20:25:51
14 May 2004 20:25:51 Dave Thomas replied:
so what your looking to do is incorporate a system of using third-party tags??

if so then it is doable, don't know about prefixing an existing tag, but i know you can write your own tag, define that, then use say &lt;pod&gt;

ive got a book which explains all this, ill have a look through and see if i can give you any pointers

Regards,
Dave

[DWMX 2004]|[FlashMX 2004 Pro]|[Studio MX 2004]|[SQL]|[Access2000/2002]|[ASP/VBScript]|[XP-Pro]
If you like online gaming, please register @ www.nova-multigaming.com
Replied 05 Jun 2004 05:56:48
05 Jun 2004 05:56:48 Jonathan Mr replied:
I'm also interested too because there is a PHP form validation script that requires fs: to be prepended to all form elements like:

&lt;fs:input type=text\&gt;

I was able to pick up a translator which does this in Dreamweaver MX, but it doesn't parse it correctly if the input fields lie with a table. Outside of a table, it works fine.

Here's the code that I have which I've dropped into the Translators folder. Just save it as a .htm file:

<pre id=code><font face=courier size=2 id=code> &lt;html&gt;
&lt;head&gt;
&lt;title&gt;FormSess Tag Translator&lt;/title&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset="&gt;
&lt;script language="JavaScript"&gt;


/**
* constant definition part
*/

var PREFIX = "fs:";
var ATT_PREFIX = "%%";


function getTranslatorInfo(){
returnArray = new Array(7);

returnArray[0] = "MXPORTAL_COM"; // The translatorClass
returnArray[1] = "FormSess translation definition"; // The title
returnArray[2] = "1"; // The number of extensions
returnArray[3] = "%htm%"; // first extension
returnArray[4] = "1"; // The number of extensions
returnArray[5] = "&lt;*:"; // first extension
returnArray[6] = "byExpression" // run if the file contains &lt;*:
return returnArray;
}


/**
* this function generates the MM:BeginLock tag for the given html
*/
function generateMMBeginLock(orig){
return '&lt;MM:BeginLock translatorClass="' + getTranslatorInfo()[0] + '" type="taglibs" orig="' + escape(orig) + '"&gt;';
}

/**
* this function calculate the innerText of the given html
*/

function simpleInnerText(html){
var re = /&lt;[^&lt;&gt;]*&gt;/gi;
return html.replace(re, "".replace(/\r?\n/gi, "".replace(/[ \t]{2,}/gi, " ";
}

/**
* this function constructs the tag from the give tag name and set of name/value pairs
*/
function generateTag(tagName, att, val){
var html = "&lt;" + tagName;
for(var i = 0; i &lt; att.length; i ++){
html += " " + att[i];
if(val[i] != null) html += '="' + val[i] + '"';
}
html += "&gt;";
return html;
}

/**
* this function merges the given set of name/value pairs into the given html
*/
function mergeAttribute(inStr, att, val){
var outStr = inStr;
for(var i = 0; i &lt; att.length; i ++){
var re = new RegExp(ATT_PREFIX + att[i] + ATT_PREFIX, "g";
outStr = outStr.replace(re, val[i]);
}
return outStr;
}

/**
* this function adds the attribute named "name" with value "value" into the given set of name/value pairs
*/
function addAttribute(att, val, name, value, overwrite){
var i = 0;
for(i = 0; i &lt; att.length; i ++){
if(att[i] == name) break;
}
if(i &lt; att.length && ! overwrite) return;
if(value == "" return;
att[i] = name;
val[i] = value;
}
/**
* this function returns the translated html for the given tag
*/
function handleTag(beginTag, bodyHTML, endTag){
/**
* now try to parse the tag for name and atributes
* the parsing process assumes that every tag attribute value is enclosed within a pair of qoutes
*/

var tagName = "";
var tagSubName = "";
var attributes = new Array();
var values = new Array();


var remaining = beginTag;
var attValRegExp = new RegExp("([ \t]([a-zA-Z0-9]+)(=\"([^\"]*)\"?)[ \r\n\t/&gt;]", "gi";
var pos = 0;
var total = 0;
while((pos = remaining.search(attValRegExp)) &gt;= 0){
var attVal = RegExp.$1;
var name = RegExp.$2;
var value = RegExp.$4;
remaining = remaining.substring(pos + attVal.length);
attributes[total] = name;
if(attVal.indexOf("=" &gt; 0) values[total] = value; else values[total] = null;
total ++;
}
beginTag.search(new RegExp("&lt;([a-zA-Z0-9]+<img src=../images/flzone/forum/icon_smile_sad.gif border=0 align=middle>[a-zA-Z0-9]+))[ \r\n\t/&gt;]", "gi");
tagName = RegExp.$1;
tagSubName = RegExp.$2;

/**
* constructing variables
*/
var MM_BEGIN_LOCK_ALL = generateMMBeginLock(beginTag + bodyHTML + endTag);
var MM_END_LOCK_ALL = "&lt;MM:EndLock&gt;";

var MM_BEGIN_LOCK_BEGIN_TAG = generateMMBeginLock(beginTag);
var MM_END_LOCK_BEGIN_TAG = "&lt;MM:EndLock&gt;";

var MM_BEGIN_LOCK_END_TAG = generateMMBeginLock(endTag);
var MM_END_LOCK_END_TAG = "&lt;MM:EndLock&gt;";

var BODY_TRANSLATED_HTML = translateHTML(bodyHTML);
var BODY_TRANSLATED_TEXT = simpleInnerText(BODY_TRANSLATED_HTML);

var re = new RegExp("&lt;([a-zA-Z0-9]+)[ &gt;]", "g";



if(tagSubName == "input"{

var TYPE = mergeAttribute("%%type%%", attributes, values);

tagName = "input";

if (TYPE == "button"
{

addAttribute(attributes, values, "type", "button", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
addAttribute(attributes, values, "value", "Button", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "checkbox"
{

addAttribute(attributes, values, "type", "checkbox", true);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "cancel"
{

addAttribute(attributes, values, "type", "button", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
addAttribute(attributes, values, "value", "Cancel", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "file"
{

addAttribute(attributes, values, "type", "file", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "hidden"
{

addAttribute(attributes, values, "type", "hidden", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "image"
{

addAttribute(attributes, values, "type", "image", true);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "password"
{

addAttribute(attributes, values, "type", "password", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "radio"
{

addAttribute(attributes, values, "type", "radio", true);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "reset"
{

addAttribute(attributes, values, "type", "reset", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
addAttribute(attributes, values, "value", "Reset", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "submit"
{

addAttribute(attributes, values, "type", "submit", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
addAttribute(attributes, values, "value", "Submit", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "text"
{

addAttribute(attributes, values, "type", "text", true);
addAttribute(attributes, values, "value", "" + BODY_TRANSLATED_TEXT + "", false);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "multibox"
{

addAttribute(attributes, values, "type", "checkbox", true);
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;

}
else if (TYPE == "option"
{

var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;

}

return(html);
}


if(tagSubName == "option"{
tagName = "option";
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;
return(html);
}
if(tagSubName == "options"{
tagName = "option";
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;
return(html);
}

if(tagSubName == "select"{
tagName = "select";
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;
return(html);
}

/*
if(tagSubName == "html_select_date"{
tagName = "select";
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;
return(html);
}
if(tagSubName == "html_select_time"{
tagName = "select";
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;
return(html);
}

Notes Todo: &lt;fs:ifErrormessage /&gt;
*/

if(tagSubName == "textarea"{
tagName = "textarea";
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;
return(html);
}

if(tagSubName == "form"{
tagName = "form";
var BEGIN_TAG_DISPLAY_HTML = generateTag(tagName, attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_BEGIN_TAG;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_BEGIN_TAG;
html += BODY_TRANSLATED_HTML;
html += MM_BEGIN_LOCK_END_TAG;
html += END_TAG_DISPLAY_HTML;
html += MM_END_LOCK_END_TAG;
return(html);
}


if(tagSubName == "errormessage"{
var BEGIN_TAG_DISPLAY_HTML = mergeAttribute("%%field%%", attributes, values);

BEGIN_TAG_DISPLAY_HTML.search(re);
var END_TAG_DISPLAY_HTML = "&lt;/" + RegExp.$1 + "&gt;";

//generating output
var html = "";
html += MM_BEGIN_LOCK_ALL;
html += BEGIN_TAG_DISPLAY_HTML;
html += MM_END_LOCK_ALL;
return(html);
}



return beginTag + translateHTML(bodyHTML) + endTag;
}


/**
* interface function
*/

function translateMarkup(docNameStr, siteRootStr, inStr){
var result = translateHTML(inStr);
return result;
}

/**
* this function do the translation on a portion of HTML and returns the translation result as HTML
*/
function translateHTML(inHTML){

var startTagPrefixRegExp = new RegExp("&lt;" + PREFIX);
//search for the start tag
var startTagPos = inHTML.search(startTagPrefixRegExp);
if(startTagPos &lt; 0) return inHTML;

//seach for the start tag close point (&gt<img src=../images/flzone/forum/icon_smile_wink.gif border=0 align=middle>
var startTagClosePos = inHTML.indexOf("&gt;", startTagPos);
if(startTagClosePos &lt; 0) return inHTML;

//pickup the startTag
var startTag = inHTML.substring(startTagPos, startTagClosePos + 1);
var endTag = "";
var bodyHTML = "";
var endTagStartPos = startTagClosePos + 1;
//there should be an end tag ?
if(startTag.substring(startTag.length - 2) != "/&gt;"{
//try searching for the corresspondent end tag for this start tag

//pickup this tag name
var delimRegExp = new RegExp("[^a-zA-Z:&lt;]", "g";
var delimPos = startTag.search(delimRegExp);//this will be found, for sure <img src=../images/flzone/forum/icon_smile_wink.gif border=0 align=middle>
var tagName = startTag.substring(0, delimPos);//as &lt;html:cancel
endTag = tagName.replace(/&lt;/, "&lt;/" + "&gt;"; //as &lt;/html:cancel&gt;

//search for the end tag
var stack = 0;
var startPointToSearch = startTagClosePos + 1;
while(true){
var m = inHTML.indexOf(tagName, startPointToSearch);
var n = inHTML.indexOf(endTag, startPointToSearch);
if(n &lt; 0) return inHTML; //this is an error
if(n &lt; m || m &lt; 0){ //we found an end tag
if(stack == 0){
endTagStartPos = n;
break;
}else{
stack --;
startPointToSearch = n + 1;
}
}else{
stack ++;
startPointToSearch = m + 1;
}
}//end of searching
bodyHTML = inHTML.substring(startTagClosePos + 1, endTagStartPos);
}
//the HTML before the processing tag
var leadingHTML = inHTML.substring(0, startTagPos);
//the HTML after the processing tag
var remainingHTML = inHTML.substring(endTagStartPos + endTag.length);

return leadingHTML + handleTag(startTag, bodyHTML, endTag) + translateHTML(remainingHTML);
}


&lt;/script&gt;


&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</font id=code></pre id=code>

Replied 05 Jun 2004 05:57:47
05 Jun 2004 05:57:47 Jonathan Mr replied:
<BLOCKQUOTE id=quote><font size=1 face="Verdana, Arial, Helvetica" id=quote>quote:<hr height=1 noshade id=quote>
so what your looking to do is incorporate a system of using third-party tags??

if so then it is doable, don't know about prefixing an existing tag, but i know you can write your own tag, define that, then use say &lt;pod&gt;

ive got a book which explains all this, ill have a look through and see if i can give you any pointers

Regards,
Dave

[DWMX 2004]|[FlashMX 2004 Pro]|[Studio MX 2004]|[SQL]|[Access2000/2002]|[ASP/VBScript]|[XP-Pro]
If you like online gaming, please register @ www.nova-multigaming.com
<hr height=1 noshade id=quote></BLOCKQUOTE id=quote></font id=quote><font face="Verdana, Arial, Helvetica" size=2 id=quote>

Reply to this topic