  function MM_findObj(n, d)
  { //v4.01
   var p,i,x;
   if(!d) d=document;
   if((p=n.indexOf("?"))>0&&parent.frames.length)
   {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
   }
   if(!(x=d[n])&&d.all) x=d.all[n];
   for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
   for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
   if(!x && d.getElementById) x=d.getElementById(n);
   return x;
  }

  function MM_setTextOfTextfield(objName,x,newText)
  { //v3.0
   var obj = MM_findObj(objName); if (obj) obj.value = newText;
  }

  function MM_openBrWindow(theURL,winName,features)
  { //v2.0
   window.open(theURL,winName,features);
  }

  function MM_swapImage()
  { //v3.0
   var i,j=0,x,a=MM_swapImage.arguments;
   document.MM_sr=new Array;
   for(i=0;i<(a.length-2);i+=3)
    if ((x=MM_findObj(a[i]))!=null)
    {
    	document.MM_sr[j++]=x;
     if(!x.oSrc) x.oSrc=x.src;
     x.src=a[i+2];
    }
  }

  function MM_timelinePlay(tmLnName, myID)
  { //v1.2
   var i,j,tmLn,props,keyFrm,sprite,numKeyFr,firstKeyFr,propNum,theObj,firstTime=false;
   if (document.MM_Time == null) MM_initTimelines(); //if *very* 1st time
   tmLn = document.MM_Time[tmLnName];
   if (myID == null)
   {
    myID = ++tmLn.ID;
    firstTime=true;
   }//if new call, incr ID
   if (myID == tmLn.ID)
   { //if Im newest
    setTimeout('MM_timelinePlay("'+tmLnName+'",'+myID+')',tmLn.delay);
    fNew = ++tmLn.curFrame;
    for (i=0; i<tmLn.length; i++)
    {
     sprite = tmLn[i];
     if (sprite.charAt(0) == 's')
     {
      if (sprite.obj)
      {
       numKeyFr = sprite.keyFrames.length; firstKeyFr = sprite.keyFrames[0];
       if (fNew >= firstKeyFr && fNew <= sprite.keyFrames[numKeyFr-1])
       { //in range
        keyFrm=1;
        for (j=0; j<sprite.values.length; j++)
        {
         props = sprite.values[j];
         if (numKeyFr != props.length)
         {
          if (props.prop2 == null) sprite.obj[props.prop] = props[fNew-firstKeyFr];
          else        sprite.obj[props.prop2][props.prop] = props[fNew-firstKeyFr];
         }
         else
         {
          while (keyFrm<numKeyFr && fNew>=sprite.keyFrames[keyFrm]) keyFrm++;
          if (firstTime || fNew==sprite.keyFrames[keyFrm-1])
          {
           if (props.prop2 == null) sprite.obj[props.prop] = props[keyFrm-1];
           else sprite.obj[props.prop2][props.prop] = props[keyFrm-1];
          }
         }
        }
       }
      }
     }
     else if (sprite.charAt(0)=='b' && fNew == sprite.frame) eval(sprite.value);
     if (fNew > tmLn.lastFrame) tmLn.ID = 0;
    }
   }
  }

  function MM_timelineStop(tmLnName)
  { //v1.2
   if (document.MM_Time == null) MM_initTimelines(); //if *very* 1st time
   if (tmLnName == null)  //stop all
   for (var i=0; i<document.MM_Time.length; i++) document.MM_Time[i].ID = null;
   else document.MM_Time[tmLnName].ID = null; //stop one
  }

  function MM_swapImgRestore()
  { //v3.0
   var i,x,a=document.MM_sr;
   for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
  }
     
function popupwin(url,width,height)
{
 //alert('Popup ' + url );
 window.open(url,'popup',
 'resizable=no,location=no,menubar=no,scrollbars=no,status=no,toolbar=no,fullscreen=no,dependent=no,width='+width+',height='+height);
 //alert('Popup again ' + url );
}

function newwin(url,target)
{
 //alert('newwin=' + url + ' ,    target=' + target );
 window.open(url,target,'');
 //alert('newwin again ' + url );
}

// ----------------------------------------------------------------
// This is very cool.  It is the basis of AJAX type asynchronous code.
// In other words you supply this function with the id of a div or
// other element and a url - which could include parameters.
// This javascript code will then fetch whatever  html is associated
// with the URL and embed it into the supplied elementid.
// ----------------------------------------------------------------
function clientSideInclude(id, url) {
  var req = false;
  // For Safari, Firefox, and other non-MS browsers
  if (window.XMLHttpRequest) {
    try {
      req = new XMLHttpRequest();
    } catch (e) {
      req = false;
    }
  } else if (window.ActiveXObject) {
    // For Internet Explorer on Windows
    try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        req = false;
      }
    }
  }
 var element = document.getElementById(id);
 if (!element) {
  alert("Bad id " + id +
   "passed to clientSideInclude." +
   "You need a div or span element " +
   "with this id in your page.");
  return;
 }
  if (req) {
    // Synchronous request, wait till we have it all
    req.open('GET', url, false);
    req.send(null);
    element.innerHTML = req.responseText;
  } else {
    element.innerHTML =
   "Sorry, your browser does not support " +
      "XMLHTTPRequest objects. This page requires " +
      "Internet Explorer 5 or better for Windows, " +
      "or Firefox for any system, or Safari. Other " +
      "compatible browsers may also exist.";
  }
}

function refreshSecurityImage(id, url) {
  var req = false;
  // alert('here - ' + id + '==' + url);
  // For Safari, Firefox, and other non-MS browsers
  if (window.XMLHttpRequest) {
    try {
      req = new XMLHttpRequest();
    } catch (e) {
      req = false;
    }
  } else if (window.ActiveXObject) {
    // For Internet Explorer on Windows
    try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        req = false;
      }
    }
  }
 var element = document.getElementById(id);
 if (!element) {
  alert("Bad id " + id +
   "passed to clientSideInclude." +
   "You need a div or span element " +
   "with this id in your page.");
  return;
 }
  if (req) {
    // Synchronous request, wait till we have it all
    req.open('GET', url, false);
    req.send(null);
    element.innerHTML = req.responseText;
  } else {
    element.innerHTML =
   "Sorry, your browser does not support " +
      "XMLHTTPRequest objects. This page requires " +
      "Internet Explorer 5 or better for Windows, " +
      "or Firefox for any system, or Safari. Other " +
      "compatible browsers may also exist.";
  }
}
// ----------------------------------------------------------------
// call this as an onclick from your form submit button.
// it will convert your baseurl to a baseurl?name1=val1&name2=val2
// type address and use that to call clientSideInclude
// ----------------------------------------------------------------
function formClientSideInclude(id,frm,baseurl) {

  first = true;
  targeturl = baseurl;

  for(ind=0;ind<frm.elements.length;ind++) {
      if(frm.elements[ind].type.substring(0,6) != "submit")
      {
      
        if(first)
        {
          targeturl = targeturl + '?' + frm.elements[ind].name + '=' + frm.elements[ind].value;
          first = false;
        }
        else
        {
          targeturl = targeturl + '&' + frm.elements[ind].name + '=' + frm.elements[ind].value;
         first = false;
         }
      }
  }
 // alert(targeturl);
  clientSideInclude(id,targeturl);
}

// ----------------------------------------------------------------

function validateEmailv2(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
    if(email.length <= 0)
	{
	  return true;
	}
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}

function validateForm(frm)
{
 /* alert('validateForm('+frm+')');*/
  formvalid = 1;
  msg = '';
  name = '';
  elemvalue = '';
  elemclass = '';
  maxlen = '';
  datatype = '';
  strError='';
  for(ind=0;ind<frm.elements.length;ind++)
  {
      if ( (frm.elements[ind].type.substring(0,6) != "submit") &&
        (frm.elements[ind].type.substring(0,6) != "button") &&
         (frm.elements[ind].type.substring(0,6) != "hidden") )
      {
       elem = frm.elements[ind];
       type = elem.type;
       name = frm.elements[ind].name;
       elemvalue = frm.elements[ind].value;
       elemclass = frm.elements[ind].className;
       datatype = frm.elements[ind].alt;
       maxlen = frm.elements[ind].maxlength;
       msg = msg + 'Name:[' + name +
                '] Type:[' + type +
                '] Value:[' + elemvalue +
                '] Class:[' + elemclass +
                '] Datatype:[' + datatype +
                '] MaxLen:[' + maxlen + ']\r\n';

       isrequired = false;
       if( (elemclass=='required') ||
           (elemclass=='reqvalid') ||
           (elemclass=='reqinvalid') )
       {
        isrequired=true;
        if (elemvalue=='')
        {
         elemclass = 'reqinvalid';
         formvalid = 0;
        }
        else
        {
         elemclass = 'reqvalid';
        } 
       }
       else { elemclass='valid'; }
       
      if( (elemclass!='reqinvalid') && (elemclass!='invalid') ) //&& (type!='textarea') )
      {
        command = datatype;
        objValue = elem;
        switch(command)
        {
          case "alnum":
          case "password":
          case "alphanumeric":
             {
                var charpos = objValue.value.search("[^A-Za-z0-9]");
                if(objValue.value.length > 0 &&  charpos >= 0)
                {
                 if(!strError || strError.length ==0)
                  {
                    strError = objValue.name+": Only alpha-numeric characters allowed ";
                  }//if
                  alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                  formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                }//if
                break;
             }//case alphanumeric
          case "integer":
             {
                var charpos = objValue.value.search("[^0-9\-+]");
                if(objValue.value.length > 0 &&  charpos >= 0)
                {
                  if(!strError || strError.length ==0)
                  {
                    strError = objValue.name+": Integer value required ";
                  }//if
                  alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                  formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                }//if
                break;
             }//numeric
          case "phone":
             {
                var charpos = objValue.value.search("[^0-9\-+()x]");
                if(objValue.value.length > 0 &&  charpos >= 0)
                {
                  if(!strError || strError.length ==0)
                  {
                    strError = objValue.name+": Use format +1-604-555-5555 or (604)555-5555x444 ";
                  }//if
                  alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                  formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                }//if
                break;
             }//numeric
          case "real":
             {
                var charpos = objValue.value.search("[^0-9\-+.]");
                if(objValue.value.length > 0 &&  charpos >= 0)
                {
                  if(!strError || strError.length ==0)
                  {
                    strError = objValue.name+": Real number required (eg -9.81) ";
                  }//if
                  alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                  formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                }//if
                break;
             }//integer
          case "numeric":
             {
                var charpos = objValue.value.search("[^0-9]");
                if(objValue.value.length > 0 &&  charpos >= 0)
                {
                  if(!strError || strError.length ==0)
                  {
                    strError = objValue.name+": Only digits 0-9 allowed ";
                  }//if
                  alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                  formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                }//if
                break;
             }//numeric
          case "alphabetic":
          case "alpha":
             {
                var charpos = objValue.value.search("[^A-Za-z]");
                if(objValue.value.length > 0 &&  charpos >= 0)
                {
                    if(!strError || strError.length ==0)
                  {
                    strError = objValue.name+": Only alphabetic characters allowed ";
                  }//if
                  alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                  formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                }//if
                break;
             }//alpha
  		case "alnumhyphen":
  			{
                var charpos = objValue.value.search("[^A-Za-z0-9\-_]");
                if(objValue.value.length > 0 &&  charpos >= 0)
                {
                    if(!strError || strError.length ==0)
                  {
                    strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _";
                  }//if
                  alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                  formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                }//if
  			break;
  			}
          case "email":
            {
                 if(!validateEmailv2(objValue.value))
                 {
                   if(!strError || strError.length ==0)
                   {
                      strError = objValue.name+": Enter a valid Email address ";
                   }//if
                   alert(strError);
                   formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
                 }//if
             break;
            }//case email
          case "lt":
          case "lessthan":
           {
              if(isNaN(objValue.value))
              {
                alert(objValue.name+": Should be a number ");
                return false;
              }//if
              if(eval(objValue.value) >=  eval(cmdvalue))
              {
                if(!strError || strError.length ==0)
                {
                  strError = objValue.name + " : value should be less than "+ cmdvalue;
                }//if
                alert(strError);
                formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
               }//if
              break;
           }//case lessthan
          case "gt":
          case "greaterthan":
           {
              if(isNaN(objValue.value))
              {
                alert(objValue.name+": Should be a number ");
                return false;
              }//if
               if(eval(objValue.value) <=  eval(cmdvalue))
               {
                 if(!strError || strError.length ==0)
                 {
                   strError = objValue.name + " : value should be greater than "+ cmdvalue;
                 }//if
                 formvalid=0;
                 alert(strError);
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                 //return false;
               }//if
              break;
           }//case greaterthan
          case "regexp":
           {
  		 	if(objValue.value.length > 0)
  			{
  	            if(!objValue.value.match(cmdvalue))
  	            {
  	              if(!strError || strError.length ==0)
  	              {
  	                strError = objValue.name+": Invalid characters found ";
  	              }//if
  	              alert(strError);
  	              formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                  //return false;
  	            }//if
  			}
             break;
           }//case regexp
          case "dontselect":
           {
              if(objValue.selectedIndex == null)
              {
                alert("BUG: dontselect command for non-select Item");
                return false;
              }
              if(objValue.selectedIndex == eval(cmdvalue))
              {
               if(!strError || strError.length ==0)
                {
                strError = objValue.name+": Please Select one option ";
                }//if
                alert(strError);
                formvalid=0;
                  if(isrequired) { elemclass = 'reqinvalid'; } else { elemclass = 'invalid'; }
                //return false;
               }
               break;
           }//case dontselect
        }//switch

       }// if ( (!=reqinvalid) && (!=invalid) && (type!='textarea') )
       //if (type!='textarea')
       frm.elements[ind].className = elemclass;
    } // if (! submit, button or hidden )
  } // for(ind=0;ind<frm.elements.length;ind++)
//  if (formvalid==1) {alert('Valid form!'); } else { alert('Invalid form');}
//   alert(msg);

   if (formvalid==0) return false;

}

function submitPaymentForm(targetdiv,frm,baseurl)
{
 /* alert('validateForm('+frm+')');*/
  formvalid = 1;
  targeturl = baseurl;
  msg = 'TargetURL: ' + targeturl + '\r\nTargetDiv: ' + targetdiv + '\r\nForm: ' + frm + '\r\n';
  name = '';
  elemvalue = '';
  elemclass = '';
  maxlen = '';
  datatype = '';
  serviceurl = '';
  strError='';
  targeturl = targeturl + '?act=order';
  for(ind=0;ind<frm.elements.length;ind++)
  {
    if ( (frm.elements[ind].type.substring(0,6) == "hidden") )
    {
      elem = frm.elements[ind];
      name = frm.elements[ind].name;
      elemvalue = frm.elements[ind].value;
      if(name=='serviceurl')
      {
        serviceurl = elemvalue;
        msg = msg + '*** NAME: ' + name + '  ===  VALUE:' + elemvalue + ' ***\r\n';
      }
      else
      {
        msg = msg + 'Name: ' + name + '  ===  value:' + elemvalue + '\r\n';
        targeturl = targeturl + '&' + name + '=' + elemvalue;
      }
    } // if
  } // for
  msg = msg + 'TargetURL: ' + targeturl + '\r\n';
  //alert(msg);
  clientSideInclude(targetdiv,targeturl);
  if(serviceurl=='')
  {
    //alert('no serviceurl');
  }
  else
  {
    //alert(serviceurl);
    newwin(serviceurl,'buynow');
  }
} // function submitPaymentForm()

