// Emulates the ENTER style to navigate between fields

function sendTAB(nextControl,eventHandler)
{
   var keycode = 0 ;

   if (eventHandler.keyCode) { keycode = eventHandler.keyCode ; } // IE handling
   if (eventHandler.wich)    { keycode = eventHandler.wich ;    } // NE handling

   if ( keycode==13 ) { if (nextControl) { nextControl.focus() ; } }

}

function validName(value,minChars,maxChars)
{
   if ( minChars ) { if ( String(value).length < minChars ) { return false ; } }
   if ( maxChars ) { if ( String(value).length > maxChars ) { return false ; } }

   var re_NoQuotes = /"|<|>|_|\[|\]/ ;
   if ( re_NoQuotes.test(value)==true ) { return false ; }
   return true ;
}

function validUserName( value )
{

      if ( String(value).length < 1 ) { return false ; }

      var re_NoQuotes = /'|"|<|>/ ;

      if ( re_NoQuotes.test(value)==true )
      { return false ; }

      return true ;
}

function validFolderName( value )
{
	if ( String(value).length < 1 ) { return false ; }

	var re_NoQuotes = /[^a-z\d-_\s']/i ;

	if ( re_NoQuotes.test(value)==true )
	{
		return false ;
	}

	return true ;
}

function validString(value,minChars,maxChars,action)
{

  if ( minChars ) { if ( String(value).length < minChars ) { return false ; } }
  if ( maxChars ) { if ( String(value).length > maxChars ) { return false ; } }

  if ( action )
  {
      if ( action == 'validateFolderName' )  { return validFolderName(value) ; }
      if ( action == 'validateCatalogName' ) { return validCatalogName(value)        ; }
      return false;
  }
  else
  {
      var re_NoQuotes = /'|"|<|>|[_]/ ;

      if ( re_NoQuotes.test(value)==true )
      { return false ; }

      return true ;
  }
}

function validCatalogName(value)
{
   re_NumChar= /[^a-z\d-_ '\\]/i ;

   return !re_NumChar.test(value) ;
}

function validAlphaNumericString(value,withSpace)
{
    var re_NoQuotes;

    if ( withSpace )
    {
        re_NoQuotes = /[^a-z\d-_\s'\\]/i ;
        return !re_NoQuotes.test(value);
    }
    else
    {
        re_NoQuotes = /[^a-z\d-_]/i ;
    }

    if ( re_NoQuotes.test(value)==true )
       { return false ; }
   return true ;
}

function validAbsoluteString(value)
{
   var re_nochar = /\W|[_]/ ;
   return ( !re_nochar.test(value) ) ;
}

function validNaturalNumber(value)
{
   //if (String(trimlr(value)).length==0) { return false ; }
   var re_Number = /[^0-9]/ ;
   return !re_Number.test(value)  ;
}

function validAbsoluteNumber(value)
{
   //if (String(trimlr(value)).length==0) { return false ; }
   var re_Number = /[^0-9|\.]/ ;
   return !re_Number.test(value)  ;
}

function validNumberOrEmpty(value)
{
   if (String(trimlr(value)).length==0) { return true; }
   return validAbsoluteNumber(value);
}

function validNaturalNumberOrEmpty(value)
{
   if (String(trimlr(value)).length==0) { return true; }
   return validNaturalNumber(value);
}

function validNumber(value,minValue,maxValue)
{
   var re_Number = /\d|\.|\,/ ;

   if ( String(value).length==0 )
      { return false ; }

   if ( re_Number.test(value)==false )
      { return false ; }

   if ( Number(value) < minValue )
      { return false ; }

   if ( Number(value) > maxValue )
       { return false ; }

   return true ;
}

function validNumberMaxZero(value)
{
   var re_Number = /\d|\.|\,/ ;

   if ( String(value).length==0 )
      { return false ; }

   if ( re_Number.test(value)==false )
      { return false ; }

   if ( Number(value) == 0 )
       { return false ; }

   return true ;
}

function validPhoneNumber(value)
{
   var re_phone = /[^\d|\(|\)|\-|\.]/i;
   return !re_phone.test(value) ;
}

function validCreditCard(value)
{
   var re_creditCard = /\d|-/ ;
   return re_creditCard.test(value) ;
}

function validCreditCardNew(value)
{
   //var re_creditCard = /\d|-/ ;
   var re_creditCard = /[^0-9|-]/ ;
   return !re_creditCard.test(value) ;
}

function validateEmail(value)
{
  re     = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)|(\.[0-9]*$)/ ;
  re_two = /^([a-zA-Z0-9_\.\-])+\@(\[?)[a-zA-Z0-9\_\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/ ;
  re_three = /@.*\./g ;

  if ( !value.match(re) && value.match(re_two) && value.match(re_three) ) { return true ; }

  return false ;
}

function setcombo ( combo , valuex , type )
{
  if ( !combo )
  {
      return false;
  }

  for ( var i=0 ; i<combo.length ; i++)
  {
    if (type=='text')
      {
         if ( combo.options[i].text==valuex )
            {
               combo.options[i].selected =true ;
               return true ;
            }
      }
    else
      {
          if ( combo.options[i].value==valuex )
          {
               combo.options[i].selected =true ;
               return true ;
          }

      }
  }
}

function trim( value )
{
    var myRegExp = / |\s/gi;
    return String( value ).replace( myRegExp,'' );
}

function strim( value )
{
    var myRegExp = /\D/g ;
    return String( value ).replace( myRegExp,'' );
}

function isSystemKey(code)
{
   if ( (code==46)||(code==37)||(code==39)||(code==36)||(code==35)||(code==8)||(code==9) )
   {
   return true ;
   }

   return false ;
}

function setCountry( combo , country , defaultOption )
{
    var defValue = '' ;

    if (country=='') { defValue = defaultOption ; }
    else
                     { defValue = country ; }

    var comboCountries = getElement(combo) ;

    setcombo ( comboCountries , defValue , 'value' ) ;
}

function getElement(id)
{
    if (document.all)
    {
        return document.all[id];
    }
    else
    {
        return document.getElementById(id);
    }
}

function deleteCatalogOption(prefix)
{
    getElement( prefix + '_op' ).name = prefix + '_ERASED' ;
}

function recoverCatalogOption(prefix)
{
    getElement( prefix + '_op' ).name = prefix + '_option' ;
}

var i = 0 ;

function validatePriceItems(form)
{
    var checkObject = null ;
    var checkName   = null ;
    var checkPrice  = null ;
    var valPrefix   = ''   ;

    for ( var i=0 ; i< form.elements.length; i++ )
    {
       if ( form.elements[i].type=='checkbox' && form.elements[i].value != 'no_price' )
       {
          checkObject = form.elements[i]     ;
          valPrefix   = checkObject.value    ;
          checkName   = form.elements[valPrefix + '_name']  ;
          checkPrice  = form.elements[valPrefix + '_price'] ;

          if (checkPrice)
          {
              if ( ( ( !validAbsoluteNumber(checkPrice.value) ) || ( String(trim(checkPrice.value)).length==0)  ) && (checkObject.checked==true ) )
              {
		  alert ( ' Please do not use dollar signs, and verify you have included prices for all checked products. ' ) ;
                  checkPrice.focus() ;
                  return false ;
              }
          }

	  if(checkName)
	  {
		  if((trimlr(checkName.value) == '') && ( form.elements[i].type=='checkbox' && form.elements[i].checked==true ))
		  {
		  alert('Please enter the description for the Option.');
		  checkName.focus();
		  return false;
		  }
	  }
       }
    }
    return true ;
}

function trimlr(value)
{
    var myexpregI = /^ / ;
    var myexpregD = / $/ ;

    value = String(value).replace( myexpregD ,''  ) ;
    value = String(value).replace( myexpregI ,''  ) ;

    if ( ( myexpregD.test(value) ) || ( myexpregI.test(value) ) ) { value = trimlr(value) }
      return value ;
}

function setTextComboElement(combo)
{
    var comboOptionObject   = getElement( combo.id+'_combo_option_text' ) ;
    var comboOptionValue    = combo.options[combo.selectedIndex].text     ;
    comboOptionObject.value = String(comboOptionValue).split(', $')[0]    ;
}

function y2k(number)
{
   return (number < 1000) ? number + 1900 : number;
}

function validDate (myDate)
{
   month = Number(String(myDate).split('/')[0]) ;
   day   = Number(String(myDate).split('/')[1]) ;
   year  = Number(String(myDate).split('/')[2]) ;

   if (isNaN(month) || isNaN(day) || isNaN(year))
	   return false;

   var today = new Date() ;
       year  = ((!year)  ? y2k(today.getYear()):y2k(year)) ;
       month = ((!month) ? today.getMonth():month-1) ;

   if (!day) return false

   var newDate = new Date(year,month,day) ;

   if ( (y2k(newDate.getYear()) == year) &&
      ( month == newDate.getMonth()    ) &&
      ( day == newDate.getDate())      )
      return true ;
   else
      return false ;
}

function validDecimalNumber (amount, integerLenght, decimalLenght )
{
    var re_Point    = /\./ ;
    var re_negative = /-/  ;
    var re_Comma    = /\,/ ;
    var maxLenght   = decimalLenght + integerLenght + 1;

    if ( !validNumberMaxZero( amount) )         { return false ; }
    if ( String(amount).split('.').length > 2 ) { return false ; }
    if ( trimlr(amount) == '.' )                { return false ; }
    if ( !validAbsoluteNumber(amount) )         { return false ; }
    if ( re_negative.test(amount) )             { return false ; }

    if (  ( String(amount).length == maxLenght ) && ( re_Point.test(amount) == false  ) )
    {
         return false ;
    }

    if ( re_Point.test(amount) )
    {
        var dPart = String( amount ).split('.')[1] ;
        var nPart = String( amount ).split('.')[0] ;

        if ( String(dPart).length > decimalLenght ) { return false ; }
        if ( String(nPart).length > integerLenght ) { return false ; }
    }
    else
    {
        if  ( String(amount).length > integerLenght )
        {
            return false ;
        }
    }

    if ( re_Comma.test(amount) == true  ) { return false ; }

    return true;
}

function changeVisibility(object,state,clean)
{
    switch ( state)
    {
       case true:
            object.style.display = 'inline' ;
            break;

        case false:
             object.style.display = 'none' ;
             break;
    }
}

/*
This function receives a string parameter called website.
Returns true if the website is a valid url or false otherwise.
We consider a url to be valid only in case the format is the following:
TODO: Juan, please add the proper comment here.
*/
function validUrl(website)
{
     var expr = new RegExp("https?://([a-zA-Z0-9\-\.]+)+(:\d+)?(/[\w/_\.])*");
     result=expr.test(website);
     if (!result)
     {
             alert("The website field is not a valid url adress");
     }
     else
     {
             return true;
     }
}

/*
This function receives a string parameter called text.
It returns a string based on text, where the Line Feed characters are replaced by HTML tag <br/>
*/
function convert2HTML(text){
        re = /\n/g;
        str = text;
        newtext = str.replace(re, "<br />");
        //alert(newtext);
        return newtext;
}

function validstudioid(value)
{
    var expr = new RegExp("^[A-Z][A-Z][0-9][0-9][0-9]$");
    result=expr.test(value.toUpperCase());
    if (!result)
    {
	    return false;
    }
    else
    {
	    return true;
    }

}

function lookFrameBackward( frame, name )
{
	try
	{
		if ( frame.name == name )
			return frame;
		else if ( frame.parent )
		{
			if ( frame.parent.frames[name] )
				return frame.parent.frames[name];
			else
				return lookFrameBackward( frame.parent, name );
		}
		else
			return null;
	}
	catch (e) {alert(e); return null;}
}

function lookFrameForward( frame, name )
{
	try
	{
		if ( frame.frames )
		{
			var resultFrame = frame.frames[name];
			for ( var i = 0; i <  frame.frames.length && resultFrame == null; i++)
			{
				resultFrame = lookFrameForward( frame, name )
			}
		}
	}
	catch (e) {alert(e); return null;}
	return resultFrame
}

function copyObj(obj) {
	var i;
	var newObj = new Object();
	for (i in obj) {
		newObj[i] = obj[i];
        }
	return newObj;
}

function getIntValue(value)
{
    if( isNaN(value) || value.length == 0 )
        return 0;
    else
        return parseInt(value);
}

