/******************************
doPriceSync:
window_openWH:
validateEmail:
nonWS:
jsTrim:
validateNoQuotes:
validateNonZero:
validatePresence:
validateCheckBox:
validatePresenceAlphaNumeric:
validatePresenceNonNegNumber:
validateLimit:
validateCurrency:
validatePresenceBound:
validatePresenceAtLeast:
isStringAlphaNumeric:
isCharAlphaNumeric:
jsLen:
jsRight:
jsMid:
existFile:
getValueFromString:
jsInStr:

ValidatePhoneNumber: validate phone numbers, it cannot be empty, must a number, must 10 digits
noWhiteSpace: replace white space with empty

*******************************/
function doPriceSync(gp, bShowWithGST, obj)
{
 // Note: Keep tenths of cents...
 var p1 = obj.value;

 if (bShowWithGST)
 {
  obj.value = Math.round(p1 * (1.0 + gp / 100.0) * 1000) / 1000.0;
 }
 else
 {
  obj.value = Math.round(p1 / (1.0 + gp / 100.0) * 1000) / 1000.0;
 }
}


function window_openWH(url, w, h)
{
 window.open(url, '_blank', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=' + w + ',height=' + h);
}


function validateEmail(obj, msg, bAllowBlank)
{
 var str = obj.value;
 if (jsTrim(str) == "")
 {
  if (bAllowBlank)
  {
   return true;
  }
  else
  {
   alert(msg);
   obj.focus();
   return false;
  }
 }

 var at = "@";
 var dot = ".";
 var lat = str.indexOf(at);
 var lstr = str.length;
 var ldot = str.indexOf(dot);

 if ( (str.indexOf(at) == -1)
   || (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr)
   || (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr)
   || (str.indexOf(at, (lat + 1)) != -1)
   || (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot)
   || (str.indexOf(dot, (lat + 2)) == -1)
   || (str.indexOf(" ") != -1) )
 {
  alert(msg);
  obj.focus();
  return false;
 }
 return true;
}

 
function nonWS(s)
{
 if (s == " ") return false;
 if (s == "\t") return false;
 return true;
}


function jsTrim(s)
{
 var nLen = s.length;
 var nStart = 0;
 var nEnd = nLen - 1;
 var i;

 for (nStart = 0; nStart <= nEnd; nStart++)
  if (nonWS(s.charAt(nStart))) break;

 for (nEnd = nLen - 1; nEnd >= nStart; nEnd--)
  if (nonWS(s.charAt(nEnd))) break;

 return s.substr(nStart, nEnd - nStart + 1);
}


function validateNoQuotes (obj, msg)
{
 var s = new String(obj.value);
 var i;
 for (i = 0; i < s.length; i++)
 {
  switch (s.charAt(i))
  {
   case "'":
   case '"':
    alert(msg);
    obj.focus();
    return false;
  }
 }
 return true;
}


function validateNonZero(obj, msg)
{
 if (obj == null)
 {
  return true;
 }
 if (obj.value == '0')
 {
  alert(msg);
  obj.focus();
  return false;
 }
 return true;
}


function validatePresence(obj, msg)
{
 if (obj == null)
 {
  return true;
 }
 if (jsTrim(obj.value) == '')
 {
  alert(msg);
  obj.focus();
  return false;
 }
 return true;
}

function validateCheckBox(obj, msg)
{
 if (obj.checked != true)
 {
  alert(msg);
  obj.focus();
  return false;
 }
 return true;
}

function validatePresenceAlphaNumeric(obj, msg, msgAlpha)
{
 if (jsTrim(obj.value) == '')
 {
  alert(msg);
  obj.focus();
  return false;
 }
 if (!isStringAlphaNumeric(obj.value))
 {
  alert(msgAlpha);
  obj.focus();
  return false;
 }
 return true;
}


function validatePresenceNonNegNumber(obj, msg)
{
 if (jsTrim(obj.value) == '')
 {
  alert(msg);
  obj.focus();
  return false;
 }
 if (!isFinite(obj.value) || obj.value < 0)
 {
  alert(msg);
  obj.focus();
  return false;
 }
 return true;
}


function validatePresenceNonNegNumberAndBiggerThanZero(obj, msg)
{
 if (jsTrim(obj.value) == '')
 {
  alert(msg);
  obj.focus();
  return false;
 }
 if (!isFinite(obj.value) || obj.value <= 0)
 {
  alert(msg);
  obj.focus();
  return false;
 }
 return true;
}



function validateLimit(obj, nLimit, sLimitMsg)
{
 if (obj.value.length > nLimit)
 {
  alert(sLimitMsg);
  obj.focus();
  return false;
 }
 return true;
}


function validatePresenceLimit(obj, sMsg, nLimit, sLimitMsg)
{
 if (jsTrim(obj.value) == "")
 {
  alert(sMsg);
  obj.focus();
  return false;
 }
 if (obj.value.length > nLimit)
 {
  alert(sLimitMsg);
  obj.focus();
  return false;
 }
 return true;
}


function validateCurrency(sName, sDesc)
{
 var ta;
 ta = document.getElementById(sName);
 if (ta)
 {
  if (!isFinite(ta.value))
  {
   alert('Please enter a number for ' + sDesc + '.');
   ta.focus();
   return false;
  }
 }
 return true;
}


function validatePresenceBound(obj, sMsg, nLow, nHigh, sBoundMsg)
{
 if (!isFinite(obj.value))
 {
  alert(sMsg);
  obj.focus();
  return false;
 }
 if (obj.value < nLow || obj.value > nHigh)
 {
  alert(sBoundMsg);
  obj.focus();
  return false;
 }
 return true;
}


function validatePresenceAtLeast(obj, sMsg, nLow)
{
 if (jsTrim(obj.value) == "")
 {
  alert(sMsg);
  obj.focus();
  return false;
 }
 if (!isFinite(obj.value))
 {
  alert(sMsg);
  obj.focus();
  return false;
 }
 if (obj.value < nLow)
 {
  alert(sMsg);
  obj.focus();
  return false;
 }
 return true;
}


function isStringAlphaNumeric(s)
{
 var i;
 for (i = s.length - 1; i >= 0; i--)
  if (!isCharAlphaNumeric(s.charAt(i))) return false;

 return true;
}


function isCharAlphaNumeric(c)
{
 return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || (c == '_'));
}


function validateImageSelection(sSel, sImgBrowse, sMsg)
{
 var imgSel = document.getElementById(sSel);
 if (imgSel.value == '/upload')
 {
  var imgUp = document.getElementById(sImgBrowse);
  if (jsTrim(imgUp.value) == '')
  {
   alert(sMsg);
   imgUp.focus();
   return false;
  }
 }
 return true;
}

function jsLen(str)
/***
        IN: str - the string whose length we are interested in

        RETVAL: The number of characters in the string
***/
{  return String(str).length;  }

function jsRight(str, n)
{
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else 
    {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function jsMid(str, start, len)
/***
        IN: str - the string we are LEFTing
            start - our string's starting position (0 based!!)
            len - how many characters from start we want to get

        RETVAL: The substring from start to start+len
***/
{
        // Make sure start and len are within proper bounds
        if (start < 0 || len < 0) return "";

        var iEnd, iLen = jsLen(str);
        if (start + len > iLen)
                iEnd = iLen;
        else
                iEnd = start + len;

        return String(str).substring(start,iEnd);
}


// BEWARE - WEIRD FUNCTION!!!
function existFile(sFilenames, sFilenameToCompare, vsSeparator)
{
//	var bFound = false;
//	var nCount = 1;
//	var sValue = " ";

//	if (jsTrim(sFilenameToCompare) == "")
//		return false;
//	else
//	{
//		while ((sValue != "") && (!bFound))
//		{
//			sValue = getValueFromString(sFilenames, nCount, vsSeparator);
//			if (sValue.toUpperCase() == sFilenameToCompare.toUpperCase())
//				bFound = true;	
//			else
//				nCount++;
//		}
//		if (bFound)
//			return true;
//		else
//			return false;
//	}
	
	var s = sFilenameToCompare;
	sFilenameToCompare = s.replace("(", "<"); 
	s = sFilenameToCompare;
	sFilenameToCompare = s.replace(")", ">"); 
	var re = new RegExp(vsSeparator + sFilenameToCompare + vsSeparator, "gi");
	var m = re.exec(sFilenames);
	if (m == null) 
		return false;
	else
		return true;
}

function getValueFromString(vsString, vnFieldNumber, vsSeparator) 
{
	var bFound = false;
	var nCharCount1;
	var nCharCount2;
	var nFieldCount;
	var sFieldName = "";
	nFieldCount = 1;
	nCharCount1 = 0;
	nCharCount2 = jsInStr(nCharCount1, vsString, vsSeparator);
	while ((nCharCount2 > 0) && (!bFound)) 
	{
		if (nFieldCount == vnFieldNumber) 
		{
			sFieldName = jsMid(vsString, nCharCount1, nCharCount2 - nCharCount1);
			bFound = true;
		}
		else
		{
			nCharCount2 = jsInStr(nCharCount1, vsString, vsSeparator);
			if (nCharCount2 > 0) 
			{
				nFieldCount++;
				nCharCount1 = nCharCount2 + 2;
				nCharCount2 = jsInStr(nCharCount1, vsString, vsSeparator);
				if (nCharCount2 == 0)
					nCharCount2 = jsLen(vsString);
			}
		}
	}
	return sFieldName;
}

// InStr function written by: Steve Bamelis - steve.bamelis@pandora.be

function jsInStr(nStartCharPos, strSearch1, strSearchFor)
/*
InStr(strSearch, charSearchFor) : Returns the first location a substring (SearchForStr)
was found in the string str. (If the character is not
found, -1 is returned.)

Requires use of:
Mid function
Len function
*/
{
	if (strSearch1.indexOf(strSearchFor) < 0)
		return 0;
	else
	{
		if ((jsLen(strSearch1) - nStartCharPos) > 0)
		{
			if (strSearch1.lastIndexOf(strSearchFor) >= nStartCharPos)
			{
				var strSearch2 = jsMid(strSearch1, nStartCharPos, jsLen(strSearch1) - nStartCharPos);
				return strSearch2.indexOf(strSearchFor) + nStartCharPos;
			} 
			else
				return 0;
		}
		else
			return 0;
	}
}


function ValidatePhoneNumber(obj)
{
	 if (obj == null)
	 {
	  return true;
	 }
	//alert('obj.value'+obj.value); 
	//alert('trim(obj.value)='+noWhiteSpace(obj.value)); 
	
	//if phone number is empty 
	/*if (trim(obj.value) == '')
	 {
	  alert('Phone number cannot be empty');
	  obj.focus();
	  return false;
	 }*/	 
	 
	//check if the phone number is a number 
	if (isNaN(noWhiteSpace(obj.value)))
	 {
	  alert('Phoner number must a number');
	  obj.focus();
	  return false;
	 }
	//check if the phone number is 10 digits
 
	if (((noWhiteSpace(obj.value)).length !=10) && (noWhiteSpace(obj.value) != ''))
	{
	  alert('Phone number must 10 digits');
	  obj.focus();
	  return false;
	} 	 
	return true;
}


function trim(s)
{	
	if((s==null)||(typeof(s)!='string')||!s.length)
	return'';
	return s.replace(/^\s+/,'').replace(/\s+$/,'')
} 

function removeAllSpaces(s)
{	
	if ((s == null) || (typeof(s) != 'string') || !s.length)
	{
		return '';
	}
	return s.replace(/\s+/g, '');
} 

function noWhiteSpace(s)
{	
	if((s==null)||(typeof(s)!='string')||!s.length)
		return'';
	return s.replace(/\s+/g,'')
}
