var AJAXSuggest = {
 ContainerPrefix: "AJS_",
 XHR_Lookup: new Array(),
 SuggestBox: new Array(),

 Lookup: function(Input, FieldID, FilePath, Parameters)
 {
  if(!AJAXSuggest.SuggestBox[FieldID])
  {
   AJAXSuggest.SuggestBox[FieldID] = Input;
  }

  var InputField = $(AJAXSuggest.SuggestBox[FieldID]);
  var SuggestContainer = $("#"+AJAXSuggest.ContainerPrefix+FieldID);

  $("#"+FieldID).val('');

  if(AJAXSuggest.XHR_Lookup[FieldID])
  {
   AJAXSuggest.XHR_Lookup[FieldID].abort();
  }

  if(InputField.val().length == 0)
  {
   if(AJAXSuggest.XHR_Lookup[FieldID])
   {
    AJAXSuggest.XHR_Lookup[FieldID].abort();
   }

   if(SuggestContainer.length != 0)
   {
    SuggestContainer.remove();
   }

   /* For CMS Only */
   $("#Main_Content").unbind("scroll");
  }
  else
  {
   if(SuggestContainer.length == 0)
   {
    $("body").append("<div id='"+AJAXSuggest.ContainerPrefix+FieldID+"' class='AJAXSuggest_SuggestContainer'></div>");
    SuggestContainer = $("#"+AJAXSuggest.ContainerPrefix+FieldID);
   }

   AJAXSuggest.Position(FieldID, AJAXSuggest.ContainerPrefix+FieldID);

   /* For CMS Only */
   $("#Main_Content").scroll(function (){
     AJAXSuggest.Position(FieldID, AJAXSuggest.ContainerPrefix+FieldID);
   });

   SuggestContainer.html("<p class='AJAXSuggest_Loading'>Loading...</p>");

   var AdParameters = "";

   if(Parameters != "")
   {
    $.each(Parameters.split("#"), function(Key, Value){
     var PValue = Value.split("=");
     AdParameters += "&"+PValue[0]+"="+escape($("#"+PValue[1]).val());
    });
   }

   AJAXSuggest.XHR_Lookup[FieldID] = $.ajax({
    type: "POST",
    cache: false,
    url: FilePath,
    data: "Query="+escape(InputField.val())+AdParameters,
    success: function(Data, TextStatus)
    {
     var List = "";

     if(InputField.attr("rel") == "CourseSelect")
     {
      $("select[rel="+FieldID+"]").html('');
      Content_Records_PARAdd.CheckPeriod();
     }

     for(var I=0; I<Data.length; I++)
     {
      var Optionals = "";
      if(InputField.attr("rel") == "CourseSelect")
      {
       Optionals = 'AJAXSuggest.CourseDates(\''+FieldID+'\', \''+Data[I].OptionValue+'\');';
      }

      List += '<a href="" onclick="AJAXSuggest.Fill(\''+escape(Data[I].OptionText)+'\', \''+FieldID+'\', \''+Data[I].OptionValue+'\'); '+Optionals+' return false;" class="AJAXSuggest_List">'+Data[I].OptionText+'</a>';
     }

     SuggestContainer.html(List);
    },
    error: function(XHR, TextStatus, ErrorThrown){
  			if(XHR.status==0)
     {
      SuggestContainer.html("<p class='AJAXSuggest_Error'>You are offline!! Please Check Your Network.</p>");
  			}
     else if(XHR.status==404)
     {
      SuggestContainer.html("<p class='AJAXSuggest_Error'>Requested URL not found.</p>");
  			}
     else if(XHR.status==500)
     {
      SuggestContainer.html("<p class='AJAXSuggest_Error'>Internel Server Error.</p>");
  			}
     else if(TextStatus=='parsererror')
     {
      SuggestContainer.html("<p class='AJAXSuggest_Error'>Error. Parsing JSON Request failed.</p>");
  			}
     else if(TextStatus=='timeout')
     {
      SuggestContainer.html("<p class='AJAXSuggest_Error'>Request Time out.</p>");
  			}
     else
     {
      SuggestContainer.html("<p class='AJAXSuggest_Error'>Unknown Error. "+XHR.responseText+"</p>");
  			}
  		},
    dataType: "json"
   });
  }
 },

 Position: function(FieldID, ContainerID)
 {
  var InputField = $(AJAXSuggest.SuggestBox[FieldID]);
  var SuggestContainer = $("#"+ContainerID);

  var W = InputField.width();
  var PL = parseFloat(InputField.css("padding-left"));
  var PR = parseFloat(InputField.css("padding-right"));
  var H = InputField.height();
  var PT = parseFloat(InputField.css("padding-top"));
  var PB = parseFloat(InputField.css("padding-bottom"));
  var X = InputField.offset().left;
  var Y = InputField.offset().top + H + PT + PB + 3;

  SuggestContainer.css("left", X);
  SuggestContainer.css("top", Y);
  SuggestContainer.css("width", (W + PL + PR - 2));
 },

 Fill: function(InputValue, FieldID, FieldValue)
 {
  $(AJAXSuggest.SuggestBox[FieldID]).val(html_entity_decode(unescape(InputValue)));
  $("#"+FieldID).val(FieldValue);

  $("#"+AJAXSuggest.ContainerPrefix+FieldID).remove();
 },

 CourseDates: function(FieldID, FieldValue)
 {
  var Serie = $("select[rel="+FieldID+"]");

  Serie.html('<option value="">Loading...</option>');

  $.post(Cfg['Environment']['BaseURL']+"CMS/AJAX/Content/CourseDates.php", {ID: FieldValue}, function(J){
   var Options = "";

   for(var I=0; I<J.length; I++)
   {
    Options += '<option value="'+J[I].OptionValue+'">'+J[I].OptionText+'</option>';
   }

   Serie.html(Options);
   Content_Records_PARAdd.CheckPeriod();
  }, "json")
 }
                  }
