var SmartyAjax = {
  update: function(update_id, url, method, params, callback) {
    var myAjax = new Ajax.Updater(
      update_id,
      url,
      {
        method: method,
        parameters: params,
        onComplete: callback
      });
  },

  call: function(url, method, params, callback, params_func) {
    if (params_func) {
      if (params.length != 0) params += "&";
      params += $H(params_func()).toQueryString();
    }
    var myAjax = new Ajax.Request(
      url,
      {
        method: method,
        parameters: params,
        onComplete: callback
      });
  },

  submit: function(form, params, callback) {
  	var myAjax = new Ajax.Request(
  		form.action,
  		{
  			method: form.method,
  			parameters: Form.serialize(form.id),
        onComplete: callback || this.onSubmit
  		});
  },

  onSubmit: function(originalRequest) {
    var results = originalRequest.responseText.split(";");
    SmartyAjax.Messages.setObjValue("company_id", results[1]);
    if (results[0] == "true") {
      SmartyAjax.Messages.set(results[2], SmartyAjax.Messages.MT_WARNING)
    } else {
      SmartyAjax.Messages.clear();
      SmartyAjax.Messages.setType(SmartyAjax.Messages.MT_ERROR);
      for (var i = 2; i < results.length; i++) {
        SmartyAjax.Messages.add(results[i]);
      }
    }
  }
}

SmartyAjax.GlobalHandlers = {
	onCreate: function() {
		SmartyAjax.Process.show();
	},

	onComplete: function() {
		if(Ajax.activeRequestCount == 0){
  		SmartyAjax.Process.hide();
		}
	}
};

Ajax.Responders.register(SmartyAjax.GlobalHandlers);

SmartyAjax.Messages = {
  MT_WARNING: 0,
  MT_ERROR: 1,

  S_MT_WARNING: "Please note:",
  S_MT_ERROR: "Please fix following errors:",

  initialize: function() {
    this.messages = $("messages");
    this.messagesTitle = $("messages-title");
  },

  clear: function() {
    if (!this.messagesList) {
      this.messagesList = $("messages-list");
    	if (!this.messagesList) return;
    }
  	this.messagesList.innerHTML = "";
  	this.messagesList.style.display = "none";
  },

  add: function(message) {
    if (!this.messagesList) {
      this.messagesList = $("messages-list");
    	if (!this.messagesList) return;
    }
  	var messageLI = document.createElement("LI");
  	messageLI.innerHTML = message;
  	this.messagesList.appendChild(messageLI);
  	this.messagesList.style.display = "block";
  	Element.scrollTo("messages");
  },

  set: function(message, type) {
    this.clear();
    this.setType(type);
    this.add(message);
  },

  setObjValue: function(object, value) {
  	this.objectForm = $(object);
  	this.objectForm.value = value;
  },

  setType: function(type) {
    if (!this.messages) this.messages = $("messages");
  	if (!this.messagesTitle) this.messagesTitle = $("messages-title");
  	switch (type) {
  	  case this.MT_ERROR:
  	    if (this.messages) this.messages.className = "data-error";
  	    if (this.messagesTitle) this.messagesTitle = this.S_MT_ERROR;
  	    break;
  	  case this.MT_WARNING:
  	  default:
  	    if (this.messages) this.messages.className = "data-warning";
  	    if (this.messagesTitle) this.messagesTitle = this.S_MT_WARNING;
  	}
  }
}

SmartyAjax.Process = {
  S_PROCESS: "processing request...",

  show: function() {
    if (!this.process) {
      this.process = $("ajax-process");
      if (!this.process) return;
    }
    var top = window.pageYOffset ? window.pageYOffset : document.documentElement ? document.documentElement.scrollTop : document.body.scrollTop;
    this.process.style.top = top + "px";
    this.process.innerHTML = this.S_PROCESS;
    this.process.style.display = "inline";
  },

  hide: function() {
    if (!this.process) {
      this.process = $("ajax-process");
      if (!this.process) return;
    }
    this.process.style.display = "none";
  }
}

SmartyAjax.PopulateCategories = {
	params: function(){
		return {
			idSelectedGuiders: $F('idSelectedGuiders')
		}
	},
	loadResponse: function(originalRequest) {
		var results = originalRequest.responseText.split(";");
		this.categoryList = $("category_list[]");
	    while (this.categoryList.options.length) {
	        this.categoryList.remove(0);
	    }

		for (var i = 0; i < results.length-1; i++) {
			var items = results[i].split(":");
			var categoryOPTION = document.createElement("OPTION");
			categoryOPTION.value = items[0];
			categoryOPTION.text = items[1];
			try {
				this.categoryList.add(categoryOPTION, null); // standards compliant; doesn't work in IE
			} catch(ex) {
				this.categoryList.add(categoryOPTION); // IE only
			}
		}
		showAnswer('companyCategory');
	}
}


/** global functions **/

function loopGuidersSelected() {
	var txtSelectedValuesObj = document.getElementById('idSelectedGuiders');
	var selObj = document.getElementById('guiders_list[]');
	var selectedArray = new Array();
	var i;
  	var count = 0;
  	for (i=0; i<selObj.options.length; i++) {
    	if (selObj.options[i].selected) {
      		selectedArray[count] = selObj.options[i].value;
      		count++;
    	}
  	}
  	txtSelectedValuesObj.value = selectedArray;
}

function getElementValue(sourceObj, targetObj, checkObj) {
	if (document.getElementById(checkObj).checked==true) {
		document.getElementById(targetObj).value = document.getElementById(sourceObj).value;
	} else {
		document.getElementById(targetObj).value = '';
	}

}

function getElementsByClass( searchClass, domNode, tagName) {
	if (domNode == null) domNode = document;
	if (tagName == null) tagName = '*';
	var el = new Array();
	var tags = domNode.getElementsByTagName(tagName);
	var tcl = " "+searchClass+" ";
	for(i=0,j=0; i<tags.length; i++) {
		var test = " " + tags[i].className + " ";
		if (test.indexOf(tcl) != -1)
			el[j++] = tags[i];
	}
	return el;
}

function showAnswer(objName) {
	var answers = null;
	var valLength = document.getElementById('company_id').value;

	if ((valLength != 0) || (objName == 'companyFormInfo')) {
		answers = getElementsByClass('companyFormSection');
		for(i=0; i<answers.length; i++)
			answers[i].style.display = 'none';
		// hide every element with class 'companyFormSection'

		document.getElementById(objName).style.display='block';
		// show element with given objName
	} else {
		alert ('Complete and save the [Contact information section]');
		showAnswer('companyFormInfo');
	}
}