// COMMON UTILITIES

// Checks if sFieldValue is a date (range: 1900-2078)
// E.g.: 01/01/0, 1/1/00, 1/1/2000 etc.
function isDate(sFieldValue)
{
  var ar = new Array(3), at;
  sFieldValue  = saTrim(sFieldValue);

  if (sFieldValue.length != 0) {
    ar = sFieldValue.split('/');

    if(ar.length != 3) return(false);

    if(isNumeric(ar[0]) != true) return(false);
    if(isNumeric(ar[1]) != true) return(false);
    if(isNumeric(ar[2]) != true) return(false);

    ar[0] = saLTrimZ(ar[0]);
    ar[1] = saLTrimZ(ar[1]);
    ar[2] = saLTrimZ(ar[2]);

    if(ar[0].length == 1) ar[0] = '0'+ar[0];
    if(ar[1].length == 1) ar[1] = '0'+ar[1];

    if(parseInt(ar[2]) < 60) {
      at = parseInt(ar[2])+2000;
      ar[2] = at.toString();
    } else if(parseInt(ar[2]) < 100) {
      at = parseInt(ar[2])+1999;
      ar[2] = at.toString();
    }
    sFieldValue = ar.join('/'); 
  }

  if (sFieldValue.length != 10) {
    if (sFieldValue.length != 0) {
      return(false);
    } else {
      return(true);
    }
  }

  var dDate  = new Date(sFieldValue);
  var nMonth, nDay, nYear;

  if (sFieldValue.length != 0) {  
    if((sFieldValue.charAt(2) == "/") && (sFieldValue.charAt(5)=="/")){

      nDay = sFieldValue.slice(3,5);
      nMonth = sFieldValue.slice(0,2);  
      nYear = sFieldValue.slice(6);

      if(isNaN(nMonth)) return(false);
      if((nMonth < 1) || (nMonth > 12)) {
        return(false);
      }

      if(isNaN(nDay)) return(false);
      if((nDay < 1) || (nDay > 31)) {
	return(false);
      }
      if((nMonth == 2 || nMonth == 4 || nMonth == 6 || nMonth == 9 || nMonth == 11) && nDay == 31) {
	return(false);
      }

      if(isNaN(nYear)) return(false);
      if(nYear < 1900) return(false);
      if(nYear > 2078) return(false);

      if(nMonth == 02) {
	if(nDay >= 30) return(false);
	else if(nDay == 29) {
          if((nYear % 4) != 0) return(false);
	}											
      }
      return(true);
    } else return(false); 
  } 
	
}
function saTrim(str){
  return saRTrim(saLTrim(str))
} 
// Left Trim
function saLTrim(str){
  while(str.substring(0,1)==' ') str = str.substring(1);
  return str;
}

// Right Trim
function saRTrim(str){
  while(str.substring(str.length-1,str.length)==' ') str = str.substring(0,str.length-1);
  return str;
}

// Left Trim Zeroes
function saLTrimZ(str){
  while(str.substring(0,1)=='0' && str.length > 1) str = str.substring(1);
  return str;
}

// Checks if str is Integer (no sign)
// E.g.: 123 
function isNumeric(str){
  str = saTrim(str);

  for(var i=0; i < str.length; i++){
    if(str.substring(i,i+1) == '0' || str.substring(i,i+1) == '1' || str.substring(i,i+1) == '2' || str.substring(i,i+1) == '3' || str.substring(i,i+1) == '4' || str.substring(i,i+1) == '5' || str.substring(i,i+1) == '6' || str.substring(i,i+1) == '7' || str.substring(i,i+1) == '8' || str.substring(i,i+1) == '9') {
    } else {
      return(false);
    }
  }
  return(true);
}

function isEmail(email) {
	var invalidChars, badChar, atPos, periodPos;

	invalidChars = " /:,;";

	if (email == "") {            // cannot be empty
		return false;
	}
	for (i=0; i<invalidChars.length; i++) {  // does it contain any invalid characters?
		badChar = invalidChars.charAt(i);
		if (email.indexOf(badChar,0) > -1) {
			return false;
		}
	}
	atPos = email.indexOf("@",1)      // there must be one "@" symbol
	if (atPos == -1) {
		return false;
	}
	if (email.indexOf("@",atPos+1) != -1) {  // and only one "@" symbol
		return false;
	}
	periodPos = email.indexOf(".",atPos)
	if (periodPos == -1) {          // and at least one "." after the "@"
		return false;
	}
	if (periodPos+3 > email.length)  {    // must be at least 2 characters after the "."
		return false;
	}
	return true;
}

function msUpdateValue(fm, ps, se)
{
	var optionsL = document.forms[fm].elements[ps].options;
	var optionsR = document.forms["fSignUp"].elements[se].options;

	for(var i = 0; i < optionsL.length; i++){
		var cuOption = optionsL[i];
		if(cuOption.selected){
			var inS = false;
			for(var ir = 0; ir < optionsR.length; ir++){
				if(cuOption.value == optionsR[ir].value){
					inS = true; 
					break;
				}
			}
			if(!inS){
				var newItem = new Option();
				newItem.value = cuOption.value;
				newItem.text = cuOption.text;
				newItem.selected = true;
				optionsR.add(newItem);
			}
		}
	}
}

function msClearSelectedValue(fm, ps, se)
{
	var optionsL = document.forms[fm].elements[ps].options;
	var optionsR = document.forms["fSignUp"].elements[se].options;

	for(var ir = optionsR.length - 1; ir >= 0; ir--){
		if(optionsR[ir].selected)
			optionsR[ir] = null;
	}
}

// <div class="formselect" onmouseover="resizeField('min', document.getElementById('category'));"><b>category: </b> 
// <select name="ycatfilt" id="category" class="fields" width="145" onmouseover="resizeField('max', this);this.focus();" onblur="resizeField('min', this);" onfocus="resizeField('max', this);"">
function resizeField(dir, theField){
	if (theField != null) {
		if (dir == 'max') {
			var charLen = 6.5;
			var wLen = 0;
			for(var i=0; i<theField.options.length; i++) {
				if (theField.options[i].text.length > wLen) {
					wLen = theField.options[i].text.length
				}
			}
			theField.style.position = 'relative';
			var newwidth = wLen*charLen;
			if(theField.getAttribute("width") < newwidth){
       			if (newwidth < 286){
       				theField.style.width = newwidth;
       			}
       			else{
       				theField.style.width = 286;
       			}
			}
		} else {
			theField.style.position = 'relative';
			theField.style.width  = theField.getAttribute("width");
		}
    }
}

