var debug = true;
var wait = false;
var currentInput;
//When the DOM tree is loaded
$(document).ready(function() {

  $('.po_number').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillPONumber(currentInput.val(), doAutoFillPONumber, onFailed);
    }
  });
  $('.po_number').blur( function() {
    removeAutoFillBox();
  });
  $('.po_number').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillPONumber(currentInput.val(), doAutoFillPONumber, onFailed);
    }
  });
  
  $('.pickup_company').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillCompany(currentInput.val(), doAutoFillPickupCompany, onFailed);
    }
  });
  $('.pickup_company').blur( function() {
    removeAutoFillBox();
  });
  $('.pickup_company').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillCompany(currentInput.val(), doAutoFillPickupCompany, onFailed);
    }
  }); 
  $('.pickup_street').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillStreet(currentInput.val(), doAutoFillPickupStreet, onFailed);
    }
  });
  $('.pickup_street').blur( function() {
    removeAutoFillBox();
  });
  $('.pickup_street').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillStreet(currentInput.val(), doAutoFillPickupStreet, onFailed);
    }
  }); 
  $('.pickup_suburb').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillSuburb(currentInput.val(), doAutoFillPickupSuburb, onFailed);
    }
  });
  $('.pickup_suburb').blur( function() {
    removeAutoFillBox();
  });
  $('.pickup_suburb').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillSuburb(currentInput.val(), doAutoFillPickupSuburb, onFailed);
    }
  });
  $('.pickup_postcode').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillPostCode(currentInput.val(), doAutoFillPickupPostCode, onFailed);
    }
  });
  $('.pickup_postcode').blur( function() {
    removeAutoFillBox();
  });
  $('.pickup_postcode').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillPostCode(currentInput.val(), doAutoFillPickupPostCode, onFailed);
    }
  });
  $('.pickup_contact').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillContact(currentInput.val(), doAutoFillPickupContact, onFailed);
    }
  });
  $('.pickup_contact').blur( function() {
    removeAutoFillBox();
  });
  $('.pickup_contact').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillContact(currentInput.val(), doAutoFillPickupContact, onFailed);
    }
  });

  $('.delivery_company').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillCompany(currentInput.val(), doAutoFillDeliveryCompany, onFailed);
    }
  });
  $('.delivery_company').blur( function() {
    removeAutoFillBox();
  });
  $('.delivery_company').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillCompany(currentInput.val(), doAutoFillDeliveryCompany, onFailed);
    }
  }); 
  $('.delivery_street').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillStreet(currentInput.val(), doAutoFillDeliveryStreet, onFailed);
    }
  });
  $('.delivery_street').blur( function() {
    removeAutoFillBox();
  });
  $('.delivery_street').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillStreet(currentInput.val(), doAutoFillDeliveryStreet, onFailed);
    }
  }); 
  $('.delivery_suburb').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillSuburb(currentInput.val(), doAutoFillDeliverySuburb, onFailed);
    }
  });
  $('.delivery_suburb').blur( function() {
    removeAutoFillBox();
  });
  $('.delivery_suburb').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillSuburb(currentInput.val(), doAutoFillDeliverySuburb, onFailed);
    }
  });
  $('.delivery_postcode').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillPostCode(currentInput.val(), doAutoFillDeliveryPostCode, onFailed);
    }
  });
  $('.delivery_postcode').blur( function() {
    removeAutoFillBox();
  });
  $('.delivery_postcode').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillPostCode(currentInput.val(), doAutoFillDeliveryPostCode, onFailed);
    }
  });
  $('.delivery_contact').keyup( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillContact(currentInput.val(), doAutoFillDeliveryContact, onFailed);
    }
  });
  $('.delivery_contact').blur( function() {
    removeAutoFillBox();
  });
  $('.delivery_contact').click( function() {
    if (wait == false) {
      wait = true;
      currentInput = $(this);
      GoldStar.AutoFill.AutoFillContact(currentInput.val(), doAutoFillDeliveryContact, onFailed);
    }
  });
});

var createFillinBox = function(data, type) { 
  // type = 1:street, 2:suburb, 3:postcode, 4:contact
  $('.autofill_box').unbind();
  $('.autofill_box p').unbind();
  $('.autofill_box').removeClass('ponumber');
  var autofill = $('.autofill_box');
  var fillin = "";
  for (var i = 0; i < data.length; i++)
  {
    fillin += "<p autofill_id='" + data[i].Id + "' ><span class='fillin'>";
    if (type == 0)
      fillin += "<strong>" + data[i].Company + ",</strong>";
    else
      fillin += data[i].Company + ",";
    if (type == 1)
      fillin += "<strong>" + data[i].Street + ",</strong> ";
    else
      fillin += data[i].Street + ", ";
    if (type == 2)
      fillin += "<strong>" + data[i].Suburb + "</strong> ";
    else
      fillin += data[i].Suburb + " ";
    fillin += data[i].State + " ";
    if (type == 3)
      fillin += "<strong>" + data[i].PostCode + "</strong>, Contact: ";
    else
      fillin += data[i].PostCode + ", Contact: ";
    if (type == 4)
      fillin += "<strong>" + data[i].Contact + "</strong>";
    else
      fillin += data[i].Contact + "</span>";
    fillin += "<span class='delete'>X</span></p>";
  }
  if (autofill.length > 0) {
    autofill.html(fillin);
    currentInput.after(autofill);
  } else
    currentInput.after("<div class='autofill_box'>" + fillin + "</div>");
  $('.autofill_box p').hover(function() {
    $(this).addClass("hover");
  },function() {
    $(this).removeClass("hover");
  });
  $('span.delete').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.DeleteAutoFill(id);
    removeAutoFillBox();
  });
}

var createFillinBoxOfPONumber = function(data) { 
  // type = 1:street, 2:suburb, 3:postcode, 4:contact
  $('.autofill_box').unbind();
  $('.autofill_box p').unbind();
  $('.autofill_box').addClass('ponumber');
  var autofill = $('.autofill_box');
  var fillin = "";
  for (var i = 0; i < data.length; i++)
  {
    fillin += "<p autofill_id='" + data[i].afp.Id + "' ><span class='fillin'>";
    fillin += "<strong>" + data[i].afp.PONumber + "</strong>";
    fillin += " Project: " + data[i].afp.Project + "</span>";
    /*fillin += "; Pickup - ";
    fillin += data[i].paf.Street + ", ";
    fillin += data[i].paf.Suburb + " ";
    fillin += data[i].paf.State + " ";
    fillin += data[i].paf.PostCode + ", Contact: ";
    fillin += data[i].paf.Contact + "; Delivery - ";
    fillin += data[i].daf.Street + ", ";
    fillin += data[i].daf.Suburb + " ";
    fillin += data[i].daf.State + " ";
    fillin += data[i].daf.PostCode + ", Contact: ";
    fillin += data[i].daf.Contact + ";</span>";*/
    fillin += "<span class='delete'>X</span></p>";
  }
  if (autofill.length > 0) {
    autofill.html(fillin);
    currentInput.after(autofill);
  } else
    currentInput.after("<div class='autofill_box'>" + fillin + "</div>");
  $('.autofill_box p').hover(function() {
    $(this).addClass("hover");
  },function() {
    $(this).removeClass("hover");
  });
  $('span.delete').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.DeleteAutoFillPO(id);
    removeAutoFillBox();
  });
}
    
var doAutoFillPONumber = function(e) {
  createFillinBoxOfPONumber(e.list);
  $('.autofill_box').hover(function() {
    $('.po_number').unbind("blur");
  },function() {
    $('.po_number').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFillPO(id, doFillUpPONumber, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};

var doAutoFillPickupCompany = function(e) {
  createFillinBox(e.list,0);
  $('.autofill_box').hover(function() {
    $('.pickup_company').unbind("blur");
  },function() {
    $('.pickup_company').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpPickup, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillPickupStreet = function(e) {
  createFillinBox(e.list,1);
  $('.autofill_box').hover(function() {
    $('.pickup_street').unbind("blur");
  },function() {
    $('.pickup_street').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpPickup, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillPickupSuburb = function(e) {
  createFillinBox(e.list,2);

  $('.autofill_box').hover(function() {
    $('.pickup_suburb').unbind("blur");
  },function() {
    $('.pickup_suburb').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpPickup, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillPickupPostCode = function(e) {
  createFillinBox(e.list,3);
  
  $('.autofill_box').hover(function() {
    $('.pickup_postcode').unbind("blur");
  },function() {
    $('.pickup_postcode').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpPickup, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillPickupContact = function(e) {
  createFillinBox(e.list,4);
  $('.autofill_box').hover(function() {
    $('.pickup_contact').unbind("blur");
  },function() {
    $('.pickup_contact').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpPickup, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};

var doFillUpPONumber = function(e) {
  if (e.list.length == 1)
  {
    $('.po_number').val(e.list[0].afp.PONumber);
    $('.po_project').val(e.list[0].afp.Project);
    $('.pickup_company').val(e.list[0].paf.Company);
    $('.pickup_street').val(e.list[0].paf.Street);
    $('.pickup_suburb').val(e.list[0].paf.Suburb);
    $('.pickup_postcode').val(e.list[0].paf.PostCode);
    $('.pickup_contact').val(e.list[0].paf.Contact);
    $('.pickup_state').val(e.list[0].paf.State);
    $('.delivery_company').val(e.list[0].daf.Company);
    $('.delivery_street').val(e.list[0].daf.Street);
    $('.delivery_suburb').val(e.list[0].daf.Suburb);
    $('.delivery_postcode').val(e.list[0].daf.PostCode);
    $('.delivery_contact').val(e.list[0].daf.Contact);
    $('.delivery_state').val(e.list[0].daf.State);
  }
};

var doFillUpPickup = function(e) {
  if (e.list.length == 1)
  {
    $('.pickup_company').val(e.list[0].Company);
    $('.pickup_street').val(e.list[0].Street);
    $('.pickup_suburb').val(e.list[0].Suburb);
    $('.pickup_postcode').val(e.list[0].PostCode);
    $('.pickup_contact').val(e.list[0].Contact);
    $('.pickup_state').val(e.list[0].State);
  }
};

var onFailed = function(e) {
  if (debug) {
    alert(e._message + ": " + e._stackTrace);
  }
};

var doAutoFillDeliveryCompany = function(e) {
  createFillinBox(e.list,0);
  $('.autofill_box').hover(function() {
    $('.delivery_company').unbind("blur");
  },function() {
    $('.delivery_company').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpDelivery, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillDeliveryStreet = function(e) {
  createFillinBox(e.list,1);
  $('.autofill_box').hover(function() {
    $('.delivery_street').unbind("blur");
  },function() {
    $('.delivery_street').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpDelivery, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillDeliverySuburb = function(e) {
  createFillinBox(e.list,2);
  $('.autofill_box').hover(function() {
    $('.delivery_suburb').unbind("blur");
  },function() {
    $('.delivery_suburb').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpDelivery, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillDeliveryPostCode = function(e) {
  createFillinBox(e.list,3);
  $('.autofill_box').hover(function() {
    $('.delivery_postcode').unbind("blur");
  },function() {
    $('.delivery_postcode').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpDelivery, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};
var doAutoFillDeliveryContact = function(e) {
  createFillinBox(e.list,4);
  $('.autofill_box').hover(function() {
    $('.delivery_contact').unbind("blur");
  },function() {
    $('.delivery_contact').blur( function() {
      removeAutoFillBox();
    });
    removeAutoFillBox();
  });
  $('.autofill_box span.fillin').click(function() {
    var id = $(this).parent().attr('autofill_id');
    GoldStar.AutoFill.GetAutoFill(id, doFillUpDelivery, onFailed);
    removeAutoFillBox();
  });
  wait = false;
};

var doFillUpDelivery = function(e) {
  if (e.list.length == 1)
  {
    $('.delivery_company').val(e.list[0].Company);
    $('.delivery_street').val(e.list[0].Street);
    $('.delivery_suburb').val(e.list[0].Suburb);
    $('.delivery_postcode').val(e.list[0].PostCode);
    $('.delivery_contact').val(e.list[0].Contact);
    $('.delivery_state').val(e.list[0].State);
  }
};

var onFailed = function(e) {
  if (debug) {
    alert(e._message + ": " + e._stackTrace);
  }
};

var removeAutoFillBox = function(e) {
  $('.autofill_box').unbind();
  $('.autofill_box p').unbind();
  $('.autofill_box').remove();
};

