// 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 validString2(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 = /[^0-9]/ ;

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

      return true ;
  }
}

function validPassword(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 validStudioIdOrEmpty(value)
{
   if (String(trimlr(value)).length==0) { return true ; }
   var re_Number = /^([a-zA-Z]{2})\d{3}$/ ;
   return re_Number.test(value)  ;
}

function validMonetaryNumberOrEmpty(value)
{
   if (String(trimlr(value)).length==0) { return true ; }
   var re_Number = /^(\d+)\.(\d{2}$)/ ;
   return re_Number.test(value)  ;
}

function validMonetaryNumber(value)
{
   var re_Number = /^(\d+)\.(\d{2}$)/ ;
   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 validZip(value)
{
   var re_zip = /^\d{5}$|^\d{5}-\d{4}$/;
   return re_zip.test(value) ;
}

function validZipIntl(value)
{
    var re_NoQuotes;

    re_NoQuotes = /[^a-z|\d|\-|\s]/i ;
    return !re_NoQuotes.test(value);
}

function validPhoneNumberNotEmpty(value)
{
   var re_phone = /[^\d|\(|\)|\-|\.]/i;

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

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

   return true ;
}

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 validCreditCardSecurityCode(value, cctype)
{
   //if the cc is AMEX the card security code (CSC) must be 4 digits
   //for other cc types (VISA, MASTER, etc) CSC must be 3 digits
   var re = /^[0-9]{3,3}$/;
   var re_AMEX = /^[0-9]{4,4}$/;
   if(cctype=='AMEX')
	   return value.match(re_AMEX);
   else
	   return value.match(re);
}

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);
}

function popupCCSCWin()
        {
            loadingWindow = window.open('about:blank', 'newWin', 'toolbar=no,directories=no,width=400,height=130, top=200, left=400');
                var output = '<table>' +
             '<tr valign="top">' +
               '<td>' +
                 '<img src="/images/v4/cid_icon_generic.gif" width="36" height="24" alt="">' +
               '</td>' +
               '<td>' +
                 '<div>Visa, MasterCard, Discover Cards:</div>' +
                 '<div>Last 3 digits on back of card.</div>' +
               '</td>' +
             '</tr>' +
             '<tr>' +
               '<td>' +
                 '<img src="/images/v4/cid_icon_amex.gif" width="36" height="24" alt="">' +
               '</td>' +
               '<td>' +
                 '<div>American Express:</div>' +
                 '<div>Last 4 digits in small print on front of card.</div>' +
               '</td>' +
             '</tr>' +
           '</table>';
                doc = loadingWindow.document;
                doc.open('text/html');
        doc.write('<HTML><HEAD><TITLE>Pictage - Credit Card Security Code</TITLE></HEAD><BODY bgcolor="white">');
        doc.write(output);
                doc.write('<\/BODY><\/HTML>');
                doc.close();
        }

function formatCurrency( num )
{
   num = num.toString().replace(/\$|\,/g,'');
   if( isNaN( num ) )
   {
     return num;
   }
   sign = ( num == ( num = Math.abs( num ) ) );
   num = Math.floor( num * 100 + 0.50000000001 );
   cents = num % 100;
   num = Math.floor( num / 100 ).toString();
   if ( cents < 10 )
   {
     cents = "0" + cents;
   }
   return ( ( ( sign ) ? '' : '-' ) + num + '.' + cents );
}

function getCookieValue(key)
{
    currentcookie = document.cookie;
    if (currentcookie.length > 0)
    {
        firstidx = currentcookie.indexOf(key + "=");
        if (firstidx != -1 )
        {
            firstidx = firstidx + key.length + 1;
            lastidx = currentcookie.indexOf(";",firstidx);
            if (lastidx == - 1)
            {
                lastidx = currentcookie.length;
            }
            return unescape(currentcookie.substring(firstidx, lastidx));
        }
    }
    return "";  
}

function setAdminStudioCookie(studioid)
{
    if (getCookieValue('adminStudio') != studioid)
    {
        setCookie('adminStudio',studioid,'');
    }
}

function select_innerHTML(objeto,innerHTML){
    objeto.innerHTML = ""
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1"
    document.body.appendChild(selTemp)
    selTemp = document.getElementById("micoxselect1")
    selTemp.style.display="none"
    if(innerHTML.indexOf("<option")<0){
        innerHTML = "<option>" + innerHTML + "</option>"
    }
    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
    selTemp.innerHTML = innerHTML
      
    
    for(var i=0;i<selTemp.childNodes.length;i++){
  var spantemp = selTemp.childNodes[i];
  
        if(spantemp.tagName){     
            opt = document.createElement("OPTION")
    
   if(document.all){ //IE
    objeto.add(opt)
   }else{
    objeto.appendChild(opt)
   }       
    
   //getting attributes
   for(var j=0; j<spantemp.attributes.length ; j++){
    var attrName = spantemp.attributes[j].nodeName;
    var attrVal = spantemp.attributes[j].nodeValue;
    if(attrVal){
     try{
      opt.setAttribute(attrName,attrVal);
      opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
     }catch(e){}
    }
   }
   //getting styles
   if(spantemp.style){
    for(var y in spantemp.style){
     try{opt.style[y] = spantemp.style[y];}catch(e){}
    }
   }
   //value and text
   opt.value = spantemp.getAttribute("value")
   opt.text = spantemp.innerHTML
   //IE
   opt.selected = spantemp.getAttribute('selected');
   opt.className = spantemp.className;
  } 
 }    
 document.body.removeChild(selTemp)
 selTemp = null
}

function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}

