function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

function isEmpty( mixed_var ) {
    var key;
    
    if (mixed_var === ""
        || mixed_var === 0
        || mixed_var === "0"
        || mixed_var === null
        || mixed_var === false
        || mixed_var === undefined
    ){
        return true;
    }
    
    if (typeof mixed_var == 'object') {
        for (key in mixed_var) {
            if (typeof mixed_var[key] !== 'function' ) {
              return false;
            }
        }
        return true;
    }
    return false;
}

function noCache(
  uri  
  // uri string to open
 ){

 return uri.concat( 
  // concat String prototype,
  // the fastest way to produce
  // a complete string using multiple values

  /\?/.test(uri) ?
  // if uri has a query string

   "&"
  // add last value using & separator char
   :

  // else
   "?",
  // add a query string to this url

  "noCache=",
  // this should be a "cool name" for generated key

  (new Date).getTime(),
  // the noCache value will be milliseconds
  // from 1970/01/01

  ".",
  // plus a dot ...

  Math.random()*1234567
  // ... and a random value using
  // a "big" integer as generator
 );

 // then this is a return example using uri: http://host.com/mypage.html
 // http://host.com/mypage.html?noCache=1166301156233.332083.6663326991

 // while this is an example using uri: http://host.com/mypage.html?v0=1&v2=a
 // http://host.com/mypage.html?v0=1&v2=a&noCache=1166301168420.631416.7190624559
};


//suitable changes have been made to work in this website


/******************************************************************************/
/***************************  AJAX for AREA BEGINS  ***************************/
/******************************************************************************/
var reqLabel,reqField;
var content,flag=0;

function requestContent(dropBox,url,data,field,key,flag) {
  
  /*
   * dropBox = name of element where data will be dumped (state)
   * url     = remote url to call (0)
   * data    = data to be passed to remote url (0)
   * field   = area/state (0)
   * key     = country id (222)      
   */
   //alert(":"+dropBox+":");
   field = dropBox;
   content = dropBox;

  var url = "getAreaState.php?country="+key+"&field="+field;
  
  getObject(dropBox+"Field").innerHTML = '&nbsp;<img style="vertical-align:middle" src="loading.gif">Please wait...';
  
  reqLabel = getXMLHTTPObject();
  reqField = getXMLHTTPObject();
  
  if ((reqLabel != null) && (reqField != null)) {
    //alert("Calling with: "+url+"&data=label");
    reqLabel.onreadystatechange = processLChange;
    reqLabel.open("GET", url+"&data=label", true); 
    reqLabel.send(null);
    //alert("Calling with: "+url+"&data=box");
    reqField.onreadystatechange = processFChange; 
    reqField.open("GET", url+"&data=box", true); 
    reqField.send(null);

    if((key == "222") && (flag == 1)) {
      setTimeout('requestContent(\'area\',0,0,0,\'222\',flag);',2000);
      flag=0;
    }
    else {
      getObject('areaLabel').innerHTML = '';
      getObject('areaField').innerHTML = '';
    }
  }
}

function processLChange() {
  //alert("Label:"+reqLabel.readyState+":"+reqLabel.status);

  if(reqLabel.readyState == 4 && reqLabel.status == 200) {
    //alert("insideb4label="+reqLabel.responseText+":"+"b4label"+content+"Label");
    getObject(content+"Label").innerHTML = reqLabel.responseText;
    //alert("insideafterlabel"+content+"Label");
  }
}

function processFChange() {
  //alert("Field:"+reqField.readyState+":"+reqField.status);

  if(reqField.readyState == 4 && reqField.status == 200) {
    //alert("insideb4field="+reqField.responseText+":"+"b4field"+content+"Field");
    getObject(content+"Field").innerHTML = reqField.responseText;
    //alert("insideafterfield"+content+"Field");
  }  
}
/******************************************************************************/
/****************************  AJAX for AREA ENDS  ****************************/
/******************************************************************************/

/******************************************************************************/
/*********************  AJAX for REDEEM_COUPON BEGINS  ************************/
/******************************************************************************/

function processCoupon(dropBox,url,data,action) {
  
  /*
   * dropBox = name of element where data will be dumped (div block)
   * url     = remote url to call (0)
   * data    = data to be passed to remote url (redeem code)
   * action  = Verify & Get Information (vgi), Apply (a), Cancel (c)   
   */
  
  if(isEmpty(data)) {
    alert("Please enter your coupon redeem code in the box provided");
    document.checkout_payment.gv_redeem_code.focus();
    exit(0);
  }
  
  content = dropBox;
  var url = url + "?coupon_code="+data+"&action="+action;
  getObject(content).innerHTML = '<img style="vertical-align:middle" src="loading.gif">Please wait...';
  req = getXMLHTTPObject();

  if (req != null) {
    req.onreadystatechange = processChange;
    req.open("GET", noCache(url), true); 
    req.send(null);
  }
}

function processChange() {
  //alert("State:Status"+req.readyState+":"+req.status);

  if(req.readyState == 4 && req.status == 200) {
    //alert(req.getAllResponseHeaders());
    //alert(("insideb4="+req.responseText).substring(400));
    //alert("b4:"+getObject(content).innerHTML);
    //alert(getObject(content).innerHTML);
    getObject(content).innerHTML = req.responseText;
    //alert("insideafter"+getObject(content).innerHTML);
  }
}

/******************************************************************************/
/**********************  AJAX for REDEEM_COUPON ENDS  *************************/
/******************************************************************************/

function getXMLHTTPObject() {
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } 
  catch(e) { 
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    catch(oc) {
      xmlhttp = null;
    } 
  } 
  if (!xmlhttp && typeof XMLHttpRequest != "undefined") {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

function getObject(name) { 
   var ns4 = (document.layers) ? true : false; 
   var w3c = (document.getElementById) ? true : false; 
   var ie4 = (document.all) ? true : false; 

   if (ns4) return eval('document.' + name); 
   if (w3c) return document.getElementById(name); 
   if (ie4) return eval('document.all.' + name); 
   return false; 
}
