/* ------------------------------------------------------------------
** Page 
** ------------------------------------------------------------------ */
var Page = Class.create();

// <NOTE>
// By BNA
// The following constants are REAL class names that will be used for object
// creation, that's why they are written as strings rather than numbers.
// </NOTE>

var PAGE_INFO = {
	
  VACANCIES		   : {
	ID 	       : "Vacancies",
	SEARCHABLE : true,
	LABEL      : "Vacancies"
  },
  
  FOLLOWUP_APPLICATIONS : {
	ID         : "FollowupApplications",
	SEARCHABLE : true,
	LABEL      : "Followup Applications"
  },
  
  NEW_USER  : {
	ID 	       : "NewUser",
	SEARCHABLE : true,
	LABEL      : "New User"
  },
  
  NEW_APPLICATION  : {
	ID 	       : "NewApplication",
	SEARCHABLE : true,
	LABEL      : "New Application"
  },
  
  GUEST_PAGE  : {
	ID 	       : "GuestPage",
	SEARCHABLE : true,
	LABEL      : "Guest Page"
  },
	
  USER_PROFILE :{
	 ID        : "UserProfile",
	 SEARCHABLE: true,
	 LABEL     : "User Profile"
  },
  
  EDUCATION :{
	 ID        : "Education",
	 SEARCHABLE: true,
	 LABEL     : "Education"
  },
  
  EXPERIENCE :{
	 ID        : "Experience",
	 SEARCHABLE: true,
	 LABEL     : "Experiece"
  },
  
  COURSES :{
	 ID        : "Courses",
	 SEARCHABLE: true,
	 LABEL     : "Courses"
  },
  
  RELATIVES :{
	 ID        : "Relatives",
	 SEARCHABLE: true,
	 LABEL     : "Relatives"
  },
  
  ATTACHMENTS :{
	 ID        : "Attachments",
	 SEARCHABLE: true,
	 LABEL     : "Attachments"
  },
  
  USER_MANUAL :{
	 ID        : "UserManual",
	 SEARCHABLE: true,
	 LABEL     : "User Manual"
  },
  
  CONTACT_US :{
	 ID        : "ContactUs",
	 SEARCHABLE: true,
	 LABEL     : "Contact Us"
  }
	
}

Page.PopulateHtmlLabels =  function() {
  
  var elementLabelsDiv = $("ers_item_labels");
  if(elementLabelsDiv) {
    var hshItemLabelsInfo = 
      window.eval("(" + elementLabelsDiv.innerHTML.strip() + ")");
    
    var arrElementLabelHashes = hshItemLabelsInfo.labels;  
    arrElementLabelHashes.each(
      function(hshLabel) {
	var label = hshLabel.label;
	var element = $(hshLabel.id);
	if(element) {
	  if(element.tagName.toLowerCase() != "input"){
	    element.innerHTML = label;
	  } else {
	    element.value = label;
	  }
	  if(hshItemLabelsInfo.remove_ids == 1){
	    element.removeAttribute("id");
	  }
	  
	}
      } 
    );
    elementLabelsDiv.parentNode.removeChild(elementLabelsDiv);
  }
}

Page.LookupPageInfoHashById = function(pageId) {
  
  return $H(PAGE_INFO).values().detect(
    function(pageInfoHash){
      return pageInfoHash.ID == pageId;
    }
  );
  
}

Page.LookupPageInfoHashByLabel = function(pageLabel) {
  
  return $H(PAGE_INFO).values().detect(
    function(pageInfoHash){
      return pageInfoHash.LABEL == pageLabel;
    }
  );
  
}

Page.SetProgressIconDisplay = function(isEnabled){
  
  $("progress").style.display = isEnabled ? "" : "none";
  
}

Page.prototype = Object.extend(
  
  new Object(),
  {
    initialize: function(){},
    
    //**--------------------Public--------------------**//
    GetId: function(){
      return this.id;
    },
    
    GetInternalId: function() {
      return this.internalId;
    },
    
    IsSearchable: function(){
      return Page.LookupPageInfoHashById(this.GetId()).SEARCHABLE;
    },
    
    GetLabel: function() {
      return Page.LookupPageInfoHashById(this.GetId()).LABEL;
    },
    
    Load: function(){},
    
    // <Output>
    // return a booleqan to either allow or prevent next page loading.
    // </Output>
    UnLoad: function() {
      return true;
    },
    
    //**--------------------Private--------------------**//
    
    
    _LoadHtml: function(hshOperationParams) {
      
      var pageContainerElementId = "content";
      
      var pageLoadOperation = 
	OperationFactory.Get().GetOperation(Operation.TYPE.LOAD_PAGE_HTML,
					    Operation.RESULT_TYPE.TEXT);
      
      pageLoadOperation.SetParam(
	Operation.TYPE.LOAD_PAGE_HTML.PARAMS["PAGE_ID"],
	this.GetId()
      );
      
      if(hshOperationParams) {
	for(operationParamName in hshOperationParams){
	  pageLoadOperation.SetParam(
	    operationParamName,
	    hshOperationParams[operationParamName]
	  )
	}
      }
      
      pageLoadOperation.Execute();
      
      $(pageContainerElementId).innerHTML = "";
      new Insertion.Bottom(pageContainerElementId, 
			   pageLoadOperation.GetResult());
      
      Page.PopulateHtmlLabels();
    },
    //**-------------------- Members --------------------**//
    id           : null,
    internalId   : null,
    xsltInstance : null,
    xmlDocument	 : null
  }
);
