468,747 Members | 1,664 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,747 developers. It's quick & easy.

Missing ) after argument list

I am getting a "Missing ) after argument list" on two different sets of commands in the same script - they are part of Dreamweaver MX's files, so i am not sure how they got altered - thanks for the help!

function canAcceptCommand()
{
// Make sure the focus is in the BODY of the document.
var retVal = false;
if (dw.getFocus() == 'document' && dw.getDocumentDOM().getFocus() == 'body') {
retVal = true;
}
if (dw.getFocus(true) == 'html' || dw.getFocus() == 'textView') {
// var fontFamily = arguments[0];
// if (fontFamily != "0Font")
retVal = true;
}
if (dw.getDocumentDOM() && dw.getDocumentDOM().getParseMode() != 'html') {
retVal = false;
}

return retVal;
}

function isCommandChecked()
{
// if (dw.getFocus(true) == 'html' || dw.getFocus() == 'textView')
// return false;

var bChecked = false;
var fontFamily = arguments[0];

if (dw.getDocumentDOM() == null)
return false;

if (fontFamily == "0Font")
{
return dw.getDocumentDOM().getFontMarkup('face') == '';
}
else
{
return dw.getDocumentDOM().getFontMarkup('face') == fontFamily;
}

return bChecked;
}
May 25 '07 #1
9 3476
JosAH
11,448 Expert 8TB
I moved this over from the Java forum.

kind regards,

Jos
May 25 '07 #2
acoder
16,027 Expert Mod 8TB
On which lines are you getting this error?
May 25 '07 #3
the error messages simply say:

"While executing isCommandChecked in Text_FontFamilies.htm, the following JavaScript error(s) occurred:

missing ) after argument list"

and another which says:

"While executing canAcceptCommand in Text_FontFamilies.htm, the following JavaScript error(s) occurred:

missing ) after argument list"

- does this help?
May 25 '07 #4
acoder
16,027 Expert Mod 8TB
Which browser are you using?

Can you give the rest of the code.
May 26 '07 #5
i use Safari and Firefox, but the errors come when i am working with Dreamweaver - here is the entire file's code:

<!-- MENU-LOCATION=NONE -->
<HTML>
<HEAD>
<!-- Copyright 2000 Macromedia, Inc. All rights reserved. -->
<TITLE>Font Families</TITLE>
<SCRIPT LANGUAGE="javascript" SRC="../../Shared/MM/Scripts/CMN/string.js"></SCRIPT>
<SCRIPT LANGUAGE="javascript">
<!--
//--------------- LOCALIZEABLE GLOBALS ---------------

var MENU_Default = "_Default";

//--------------- END LOCALIZEABLE ---------------

function isDOMRequired()
{
return false;
}

function receiveArguments()
{
var fontFamily = arguments[0];

if (dw.getFocus(true) == 'document') {
if (fontFamily == "0Font")
dw.getDocumentDOM('document').applyFontMarkup('fac e','');
else
dw.getDocumentDOM('document').applyFontMarkup('fac e',fontFamily);
} else {
dw.getDocumentDOM().source.wrapSelection('<font face="' + fontFamily + '">', '</font>')
}
}

function canAcceptCommand()
{
// Make sure the focus is in the BODY of the document.
var retVal = false;
if (dw.getFocus() == 'document' && dw.getDocumentDOM().getFocus() == 'body') {
retVal = true;
}
if (dw.getFocus(true) == 'html' || dw.getFocus() == 'textView') {
// var fontFamily = arguments[0];
// if (fontFamily != "0Font")
retVal = true;
}
if (dw.getDocumentDOM() && dw.getDocumentDOM().getParseMode() != 'html') {
retVal = false;
}

return retVal;
}

function isCommandChecked()
{
// if (dw.getFocus(true) == 'html' || dw.getFocus() == 'textView')
// return false;

var bChecked = false;
var fontFamily = arguments[0];

if (dw.getDocumentDOM() == null)
return false;

if (fontFamily == "0Font")
{
return dw.getDocumentDOM().getFontMarkup('face') == '';
}
else
{
return dw.getDocumentDOM().getFontMarkup('face') == fontFamily;
}

return bChecked;
}

// getDynamicContent returns the contents of a dynamically generated menu.
// returns an array of strings to be placed in the menu, with a unique
// identifier for each item separated from the menu string by a semicolon.
//
// return null from this routine to indicate that you are not adding any
// items to the menu
function getDynamicContent(itemID)
{
var fonts = null;
var i;
fonts = new Array();
fonts[0] = new String(MENU_Default + ";id='0Font'"); // start with the base "Default" font
var dwFnt = dw.getFontList();
if (dwFnt.length > 0)
{
for (i=1; i<=dwFnt.length; i++)
{
fonts[i] = new String(dwFnt[i-1]);
fonts[i] += ";id='"+escQuotes(dwFnt[i-1])+"'"; // each item needs an ID
}
}
return fonts;
}
// -->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
May 28 '07 #6
acoder
16,027 Expert Mod 8TB
There's still code missing. Where's this "dw" object and its methods getFocus an getDocumentDOM?

What are you trying to do here? I'm sure there's a better way than this.
May 29 '07 #7
i am not quit as saavy as you might think - so not sure how to answer you - bottom line - this is the ENTIRE code in an .html document that is part of my Dreamweaver MX program - i didn't write this code - it literally came with the software - i am not sure if i did something wrong, because i didn't always get this warning - it started awhile back -

so, best i can tell - there is no other code to this particular file - does that help make sense?

i am not intending to do anything except figure out how to NOT get the error message -
May 31 '07 #8
acoder
16,027 Expert Mod 8TB
Ok, there is a script included, string.js. Perhaps you could post some of that code.

Perhaps a file has been changed that wasn't supposed to be.
Jun 1 '07 #9
i am pretty sure i might have inadvertenly messed something up - here is the string.js code - thanks SO much for your continued help!


//SHARE-IN-MEMORY=true
//
// Copyright 2000,2001 Macromedia, Inc. All rights reserved.
//
//string.js
//
//Generic set of functions for manipulating and parsing text strings
//
//------------------------------------------------------------------
//
//
//extractArgs(behFnCallStr){
//escQuotes(theStr){
//unescQuotes(theStr){
//quoteMeta(theStr){
//errMsg() {
//badChars(theStr){
//getParam(tagStr,param){
//quote(textStr,quoteType){
//stripSpaces(theStr) {
//StripChars(theFilter,theString) //Strips all chars in theFilter out of theString and returns the result
//AllInRange(x,y,theString) //Returns true if all of the chars in theString are in the range x,y (inclusive)
//reformat (s) //tricky: see desc below
//Trim(theString) //returns theString with white space trimmed of the front and back

//createDisplayString(theStr, maxLen) //limits string size and appends ellipsis: fn("foo bar zoo",6) => "foo..."
//entityNameEncode(origStr) //Given a string, returns the string with high-ASCII chars entity encoded.
//entityNameDecode(origStr) //Given a string, returns the string with high-ASCII chars entity decoded.

//stripAcceralator(theStr) // Strips Acceralator characters (_E) for Japanese

//SPrintF(pattern, strings); //SPrintF routine. accepts %s or %s1, etc...

//Given a function call, extracts the args and returns them in array

//Respects ', skips over stuff between quotes, and returns them dequoted.
//IMPORTANT: argArray[0] is the function call!! Actual args start at argArray[1].

function extractArgs(behFnCallStr){
var i, theStr, lastPos, argArray;
argArray = getTokens(behFnCallStr,"(),");
for (i=0; i<argArray.length; i++) {
theStr = stripSpaces(unescQuotes(argArray[i]));
lastPos = theStr.length-1;
if (theStr.charAt(0) == "'" && lastPos > 0 && theStr.charAt(lastPos) == "'")
argArray[i] = theStr.substring(1,lastPos);
}
return argArray
}



//Passed a string, finds special chars '"\ and escapes them with \

function escQuotes(theStr){
var i, theChar, escStr = "";
for(var i=0; i<theStr.length; i++) {
theChar = theStr.charAt(i);
escStr += (theChar=='"' || theChar=="'" || theChar=="\\")?("\\"+theChar):theChar;
}
return escStr;
}


//Passed a string, finds any escape chars \ and removes them

function unescQuotes(theStr){
var strLen, i, theChar, unescStr = "";
strLen = theStr.length;
for(i=0; i<strLen; i++) {
theChar = theStr.charAt(i);
if (theChar == "\\" && i < strLen - 1) //if escape char and not end
theChar = theStr.charAt(++i); //append next char and skip over
unescStr += theChar;
}
return unescStr;
}

//Passed a string, finds meta chars and escapes them with \

function quoteMeta(theStr){

theStr = theStr.replace(/\\/g, "\\\\")
theStr = theStr.replace(/\[/g, "\\[")
theStr = theStr.replace(/\^/g, "\\^")
theStr = theStr.replace(/\{/g, "\\{")

return theStr;
}

//Emulates printf("blah blah %s blah %s",str1,str2)
//Used for concatenating error message for easier localization.
//Returns assembled string.

function errMsg() {
var i,numArgs,errStr="",argNum=0,startPos;

numArgs = errMsg.arguments.length;
if (numArgs) {
theStr = errMsg.arguments[argNum++];
startPos = 0; endPos = theStr.indexOf("%s",startPos);
if (endPos == -1) endPos = theStr.length;
while (startPos < theStr.length) {
errStr += theStr.substring(startPos,endPos);
if (argNum < numArgs) errStr += errMsg.arguments[argNum++];
startPos = endPos+2; endPos = theStr.indexOf("%s",startPos);
if (endPos == -1) endPos = theStr.length;
}
if (!errStr) errStr = errMsg.arguments[0];
}
return errStr;
}


//Passed a string, finds removes special chars '"! and space

function badChars(theStr){
var i,theChar,isBad=false;
var someBadChars = " ~!@#$%^&*()_+|`-=\\{}[]:\";'<>,./?";
for (i=0; i<theStr.length; i++) {
theChar = theStr.charAt(i);
if (someBadChars.indexOf(theChar) != -1) isBad = true;
}
return isBad;
}


//Accepts a pattern string and some substrings (or numbers). Inserts the strings into the pattern.
//The pattern string can use %s or %s0, etc for the strings. You can mix them if you like - the %s
//pattern will ignore the %s0 pattern as far as count.
//That is:
//SprintF("%s%s2%s", "a", "b", "c") will return "acb"
//
//Note that you can only have 10 indexed strings.
function SPrintF()
{
var argc = SPrintF.arguments.length;
if (argc == 0)
return "";

if (argc == 1)
return SPrintF.arguments[0];

var resultString = "";
var nextIndString = 1;
var splits = SPrintF.arguments[0].split("%s");

for (i=0; i<splits.length; i++)
{
//write out the split itself.
var splitToWrite = splits[i];
if (splitToWrite.length > 0 && !isNaN(splitToWrite.charAt(0)))
resultString += splitToWrite.substring(1,splitToWrite.length-1);
else
resultString += splitToWrite;

//Now write out the next string in the list. See if the next string was part of
//an %s0 pattern, or was normal.
if (i < splits.length-1)
{
if (splits[i+1].length > 0 && !isNaN(splits[i+1].charAt(0)))
{
//use the indexed strng.
var stringIndex = parseInt(splits[i+1].charAt(0));
resultString += SPrintF.arguments[stringIndex];
}
else
{
//Pick the next string out of the array.
resultString += SPrintF.arguments[nextIndString++];
}
}
}

return resultString;
} //SPrintF


//Custom non-Javascript code to extract tags and get object names.
//Passed HTML tag (ie IMG), gets the current doc source
//HTML and returns an array of names (empty if unnamed).
//This argument is not case sensitive (can be LAYER, Layer, or layer).
//For Example, given <IMG NAME="myPhoto"> <IMG><IMG name="bobsPhoto">
//returns array: myPhoto,,bobsPhoto

function getParam(tagStr,param){
var j,tokenString;
var theName = "";
var tokenArray = new Array;
tokenArray = getTokens(tagStr," =<>");
for (j=0; j<(tokenArray.length - 1); j++) {
tokenString = tokenArray[j].toUpperCase(); //force UPPER CASE
if (tokenString.indexOf(param.toUpperCase()) == 0) { //found name
theName = tokenArray[j+1]; //should return single quoted element in array
firstChar = theName.charAt(0);
lastChar = theName.charAt(theName.length - 1);
if ((firstChar == lastChar) && (firstChar == "'" || firstChar == "\""))
theName = theName.substring(1,theName.length - 1);
break;
} }
return theName;
}

//function: quote
//description: wraps text string in single or double quotes
//argument - textStr
// quote type - use 1 for single quotes and 2 for double quotes

function quote(textStr,quoteType){
var quote = (quoteType == 1)?"'":'"';
return quote + textStr + quote;
}


//Removes any spaces at the beginning or end of the string

function stripSpaces(theStr) {
if (!theStr) theStr = ""; //ensure its not null
theStr = theStr.replace(/^\s*/,""); //strip leading
theStr = theStr.replace(/\s+$/,""); //strip trailing
return theStr;
}


//Given an object reference string, returns the object name. For ex:
// objName = getNameFromRef("document.image1"); //returns "image1"
// objName = getNameFromRef("document.layers['image1']"); //returns "image1"
//
//If given an object in a frame, returns the objName?frameNameOrNum:
// objName = getNameFromRef("parent.frames['main'].document.image1"); //returns "image1?main"
//This is an expected value for MM_findObj().

function getNameFromRef(objRefStr) {
var c, startPos, objName=objRefStr, frameSearch;
var lastDot = objRefStr.lastIndexOf(".");
var lastBracket = objRefStr.lastIndexOf("]");

if (lastDot != -1 || lastBracket != -1) {
if (lastDot > lastBracket) { //name after a dot
objName = objRefStr.substring(lastDot+1);
} else { //name in brackets
while (lastBracket > 0 && ((c=objRefStr.charAt(lastBracket-1))=="'" || c=='"' || c=="\\"))
lastBracket--; //skip ',",\
startPos = lastBracket-1; //start at end of name
while (startPos > 0 && ((c=objRefStr.charAt(startPos))!="'" && c!='"' && c!="\\" && c!="["))
startPos--; //seek ',",\,[
objName = objRefStr.substring(startPos+1,lastBracket);
}
frameSearch = objRefStr.match(/\.frames\[\\?['"]?([^'"\\]+)\\?['"]?\]/); //find .frames['foo'] or .frames[3]
if (frameSearch && frameSearch[1]) { //if framename, add after a question mark
objName += "?"+frameSearch[1];
}
}
return objName;
}



function StripChars(theFilter,theString)
{

if (!theString)
theString = "";
/*
Returns theString with all occurrences of every char in theFilter
deleted:

Example:
var x = StripChars("lo!", "Hello World!")
alert(x) // x is now "He Wrd"
*/

var strOut,i,curChar

strOut = ""
for (i=0;i < theString.length; i++)
{
curChar = theString.charAt(i)
if (theFilter.indexOf(curChar) < 0) // if it's not in the filter, send it thru
strOut += curChar
}
return strOut
}

function AllInRange(x,y,theString)
{
/*
Returns true if all characters in theString
fall in the range x,y (inclusive)

Example:
AllInRange("0", "9", "848393874") is true
AllInRange("0", "9", "22Hello33") is false
*/

var i, curChar

for (i=0; i < theString.length; i++)
{
curChar = theString.charAt(i)
if (curChar < x || curChar > y) //the char is not in range
return false
}
return true
}


function reformat (s)
{
/*
reformat()
params:
s - the string to be reformatted
Then alternating numbers and strings

Example:
var x = reformat("7604346267", 0, "(", 3, ")", 3, "-")
alert(x) // x is now (760)434-6267
*/

var arg;
var sPos = 0;
var resultString = "";

for (var i = 1; i < reformat.arguments.length; i++) {
arg = reformat.arguments[i];
if (i % 2 == 1)
resultString += arg;
else
{
resultString += s.substring(sPos, sPos + arg);
sPos += arg;
}
}
return resultString;
}


function Trim(theString)
{
/*
Returns theString with white space trimmed off the front and back
*/
var i,firstNonWhite

if (StripChars(" \n\r\t",theString).length == 0 ) return ""

i = -1
while (1)
{
i++
if (theString.charAt(i) != " ")
break
}
firstNonWhite = i
//Count the spaces at the end
i = theString.length
while (1)
{
i--
if (theString.charAt(i) != " ")
break
}

return theString.substring(firstNonWhite,i + 1)

}


function IsValidVarName(theName)
{
if (!MM.allowDotInName)
{
if (StripChars("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijk lmnopqrstuvwxyz0123456789_",theName).length > 0)
return false;
}
else
{
if (StripChars("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijk lmnopqrstuvwxyz0123456789_.",theName).length > 0)
return false;
}
if (theName.charAt(0) == "_" || theName.charAt(theName.length - 1) == "_")
return false;
if (MM.allowDotInName)
{
if (theName.charAt(0) == "." || theName.charAt(theName.length - 1) == ".")
return false;
}

if (AllInRange("0", "9", theName.substring(0,1)))
return false;

return true;
}



//Returns a single-line string with entities replaced.
//If optional maxLen param is passed, returns string
//no longer than maxLen chars. If it exceeds that length, it is
//shortened and ... is appendend.

function createDisplayString(theStr, maxLen) {
theStr = stripSpaces(theStr);
theStr = theStr.replace(/\s+/," "); //replace all newlines and whitespace with a single space
theStr = entityNameDecode(theStr);
if (maxLen && maxLen>3 && theStr.length>maxLen) theStr = theStr.substring(0,maxLen-3) + "...";
return theStr;
}


var ENTITY_MAP = new Array(
"\x20", "&nbsp;",
"\x22", "&quot;", //Low-ASCII chars that should use entities
"\x26", "&amp;",
"\x3C", "&lt;",
"\x3E", "&gt;",

"\x80", "&euro;", //Hi-ASCII chars
"\xA1", "&iexcl;",
"\xA2", "&cent;",
"\xA3", "&pound;",
"\xA4", "&curren;",
"\xA5", "&yen;",
"\xA6", "&brvbar;",
"\xA7", "&sect;",
"\xA8", "&uml;",
"\xA9", "&copy;",
"\xAA", "&ordf;",
"\xAB", "&laquo;",
"\xAC", "&not;",
"\xAD", "­",
"\xAE", "&reg;",
"\xAF", "&macr;",
"\xB0", "&deg;",
"\xB1", "&plusmn;",
"\xB2", "&sup2;",
"\xB3", "&sup3;",
"\xB4", "&acute;",
"\xB5", "&micro;",
"\xB6", "&para;",
"\xB7", "&middot;",
"\xB8", "&cedil;",
"\xB9", "&sup1;",
"\xBA", "&ordm;",
"\xBB", "&raquo;",
"\xBC", "&frac14;",
"\xBD", "&frac12;",
"\xBE", "&frac34;",
"\xBF", "&iquest;",
"\xD7", "&times;",
"\xF7", "&divide;",
"\xC6", "&AElig;",
"\xC1", "&Aacute;",
"\xC2", "&Acirc;",
"\xC0", "&Agrave;",
"\xC5", "&Aring;",
"\xC3", "&Atilde;",
"\xC4", "&Auml;",
"\xC7", "&Ccedil;",
"\xD0", "&ETH;",
"\xC9", "&Eacute;",
"\xCA", "&Ecirc;",
"\xC8", "&Egrave;",
"\xCB", "&Euml;",
"\xCD", "&Iacute;",
"\xCE", "&Icirc;",
"\xCC", "&Igrave;",
"\xCF", "&Iuml;",
"\xD1", "&Ntilde;",
"\xD3", "&Oacute;",
"\xD4", "&Ocirc;",
"\xD2", "&Ograve;",
"\xD8", "&Oslash;",
"\xD5", "&Otilde;",
"\xD6", "&Ouml;",
"\xDE", "&THORN;",
"\xDA", "&Uacute;",
"\xDB", "&Ucirc;",
"\xD9", "&Ugrave;",
"\xDC", "&Uuml;",
"\xDD", "&Yacute;",
"\xE1", "&aacute;",
"\xE2", "&acirc;",
"\xE6", "&aelig;",
"\xE0", "&agrave;",
"\xE5", "&aring;",
"\xE3", "&atilde;",
"\xE4", "&auml;",
"\xE7", "&ccedil;",
"\xE9", "&eacute;",
"\xEA", "&ecirc;",
"\xE8", "&egrave;",
"\xF0", "&eth;",
"\xEB", "&euml;",
"\xED", "&iacute;",
"\xEE", "&icirc;",
"\xEC", "&igrave;",
"\xEF", "&iuml;",
"\xF1", "&ntilde;",
"\xF3", "&oacute;",
"\xF4", "&ocirc;",
"\xF2", "&ograve;",
"\xF8", "&oslash;",
"\xF5", "&otilde;",
"\xF6", "&ouml;",
"\xDF", "&szlig;",
"\xFE", "&thorn;",
"\xFA", "&uacute;",
"\xFB", "&ucirc;",
"\xF9", "&ugrave;",
"\xFC", "&uuml;",
"\xFD", "&yacute;",
"\xFF", "&yuml;");


//If a string has high-ASCII characters or low-ASCII that should be encoded, those characters
//are converted to entities. For example, and accented "e" will become &egrave;.
//Note that this does not affect low ascii chars that should be encoded like <>".
//Uses the entity map above (ENTITY_MAP). If a high-ASCII char is not found in
//the map, sets the char to &#nnn;, where nnn is the charCode.
//Returns the encoded string.

function entityNameEncode(origStr) {

var i,j, retStr;

retStr = origStr;

var charCode, hasEntity = false;

for (i=0; i<retStr.length && !hasEntity; i++) {
charCode = retStr.charCodeAt(i);
// if high-ASCII, ", &, <, or >
hasEntity = (charCode > 127 || charCode == "\x22" || charCode == "\x26" || charCode == "\x3C" || charCode == "\x3E");
//DEBUG: for Japanese, don't encode if high-ASCII. Need to modify the previous line for the J release.
}

if (hasEntity) { // iff entity found, entity-encode string
oldStr = retStr; //copy string
retStr = ""; //and build new one
for (i=0; i<oldStr.length; i++) {
charCode = oldStr.charCodeAt(i);
theChar = oldStr.charAt(i);
if (charCode > 127 || charCode == "\x22" || charCode == "\x26" || charCode == "\x3C" || charCode == "\x3E") {
for (j=0; j<ENTITY_MAP.length-1; j+=2) { //search map
if (ENTITY_MAP[j] == theChar) { //if found
theChar = ENTITY_MAP[j+1]; //set theChar to matching entity
break;
}
}
if (j >= ENTITY_MAP.length) { //if not found in map
theChar = '&#' + parseInt(charCode) + ';'; //set to integer
}
}
retStr += theChar; //append char to string
}
}

return retStr;
}



//If a string contains encoded strings like &quot; or &egrave;, they will be converted
//to their character equivalents for proper display. Returns the decoded string.

function entityNameDecode(origStr) {
var i, theEntity, retStr = origStr;
var entityPattern = /&\w+;/g;

while ((theEntity = entityPattern.exec(origStr)) != null) { //with each entity found
for (i=1; i<ENTITY_MAP.length; i+=2) { //look up entity in map
if (ENTITY_MAP[i] == theEntity) { //when found
retStr = retStr.replace(RegExp(ENTITY_MAP[i]),(ENTITY_MAP[i-1])); //replace entity with value
break;
}
}
}
var charSet = dw.getDocumentDOM().getCharSet();
if (charSet == "iso-8859-1")
{
//return dreamweaver.latin1ToNative(retStr);
return retStr;
} else {
return retStr;
}
}

function stripAcceralator(theStr){
if (dreamweaver.appVersion && dreamweaver.appVersion.indexOf('Mac') != -1)
{
theStr = theStr.replace(/\(_\w+\)/,"");
}
return theStr;
}

function httpError(statusCode)
{
var statusMessage = "";

switch (statusCode)
{
case 200:
{
statusMessage = MM.MSG_HTTP200;
break;
}
case 400:
{
statusMessage = MM.MSG_HTTP400;
break;
}
case 404:
{
statusMessage = MM.MSG_HTTP404;
break;
}
case 405:
{
statusMessage = MM.MSG_HTTP405;
break;
}
case 500:
{
statusMessage = MM.MSG_HTTP500;
break;
}
case 503:
{
statusMessage = MM.MSG_HTTP503;
break;
}
}
return statusMessage;
}
Jun 2 '07 #10

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

4 posts views Thread by Conrad Weyns | last post: by
1 post views Thread by soup_or_power | last post: by
77 posts views Thread by Ville Vainio | last post: by
5 posts views Thread by Vv_vV | last post: by
4 posts views Thread by Pasquale | last post: by
8 posts views Thread by A. Anderson | last post: by
1 post views Thread by CARIGAR | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.