var errorCount = 0;


// returns the first "sibling" of the element 'node' with the given class name
function getSiblingNodeByClassName(node, siblingClassName) {
	var p = node.parentNode;
	for (i=0; i<p.childNodes.length; i++) {
		var c = p.childNodes[i];
		if (c.className == siblingClassName) {
			return c;
		}
	}
	return false;
}

function getChildNodeByClassName(node, childClassName) {
	for (i=0; i<node.childNodes.length; i++) {
		var c = node.childNodes[i];
		if (c.className == childClassName) {
			return c;
		}
	}
	return false;
}

// check if an array contains an element
Array.prototype.contains = function(value) {
	for (var i=0; i<this.length; i++) {
		if (this[i] == value) {
			return true;
		}
	}
	return false;
}

function addEvents() {
	fields = getAllFields();
	for (var i=0; i<fields.length; i++) {
		fields[i].onfocus = function() { showTooltip(this) };
		fields[i].onblur = function() { hideTooltip(this); validateEntry(this);validateRenewalDateEntry(this); };
		if((fields[i].id == "txtFirstName")||(fields[i].id == "txtLastName")||(fields[i].id == "txtSurname"))
		{		
			fields[i].onblur = function() { hideTooltip(this); validateEntry(this);validateRenewalDateEntry(this);upperCase(this); };
		}
	}
	addTooltipsAndErrors();
	
}

function addTooltipsAndErrors() {
	fieldwrappers = getElementsByClassName('fieldwrapper', 'div', '');
	for (var i=0; i<fieldwrappers.length; i++) {
		errorspan = document.createElement('span');
		errorspan.className = 'errornumber';
		errorspan.style.background = 'none';
		error = document.createElement('div');
		error.className = 'error';
		error.innerHTML = '<div class="bot"><div class="top">&nbsp;</div></div>';
		tooltip = getChildNodeByClassName(fieldwrappers[i], 'tooltip');
		
		if(tooltip != false)
		{
			fieldwrappers[i].insertBefore(error, tooltip);
		fieldwrappers[i].insertBefore(errorspan, error);
		}
	}
	
	fieldwrappers = getElementsByClassName('fieldwrapperBigger', 'div', '');
	
	for (var i=0; i<fieldwrappers.length; i++) {
		errorspan = document.createElement('span');
		errorspan.className = 'errornumber';
		errorspan.style.background = 'none';
		error = document.createElement('div');
		error.className = 'error';
		error.innerHTML = '<div class="bot"><div class="top">&nbsp;</div></div>';
		
		tooltip = getChildNodeByClassName(fieldwrappers[i], 'tooltip');
		
		if(tooltip != false)
		{
			fieldwrappers[i].insertBefore(error, tooltip);
		fieldwrappers[i].insertBefore(errorspan, error);
		}
	}
	
	
	fieldwrappers = getElementsByClassName('fieldwrapperBigger1', 'div', '');
	for (var i=0; i<fieldwrappers.length; i++) {
		errorspan = document.createElement('span');
		errorspan.className = 'errornumber';
		errorspan.style.background = 'none';
		error = document.createElement('div');
		error.className = 'error';
		error.innerHTML = '<div class="bot"><div class="top">&nbsp;</div></div>';
		tooltip = getChildNodeByClassName(fieldwrappers[i], 'tooltip');
		
		if(tooltip != false)
		{
			fieldwrappers[i].insertBefore(error, tooltip);
		fieldwrappers[i].insertBefore(errorspan, error);
		}
	}
	
	fieldwrappers = getElementsByClassName('fieldwrapperBigger2', 'div', '');
	for (var i=0; i<fieldwrappers.length; i++) {
		errorspan = document.createElement('span');
		errorspan.className = 'errornumber';
		errorspan.style.background = 'none';
		error = document.createElement('div');
		error.className = 'error';
		error.innerHTML = '<div class="bot"><div class="top">&nbsp;</div></div>';
		tooltip = getChildNodeByClassName(fieldwrappers[i], 'tooltip');
		
		if(tooltip != false)
		{
			fieldwrappers[i].insertBefore(error, tooltip);
		fieldwrappers[i].insertBefore(errorspan, error);
		}
	}
	
}

function showTooltip(field) {

	hideError(field);
	if (tooltip = getSiblingNodeByClassName(field, 'tooltip')) {
		tooltip.style.display = 'block';
	}
}

function hideTooltip(field) {
	if (tooltip = getSiblingNodeByClassName(field, 'tooltip')) {
		tooltip.style.display = 'none';
	}
}

function hideAllTooltips() {

	var divs = document.getElementsByTagName('div');
	
	for (var i=0; i<divs.length; i++) {
		if (divs[i].className == 'tooltip') {
		
			divs[i].style.display = 'none';
		}
	}
}

function hideAllErrors() {
	errorCount = 0;
	var divs = document.getElementsByTagName('div');
	for (var i=0; i<divs.length; i++) {
		if (divs[i].className == 'error' || divs[i].className == 'submitted_error') {
			divs[i].style.display = 'none';
			divs[i].className = 'error';
		}
	}
	
	var spans = getElementsByClassName('errornumber','span','');
	for (var i=0; i<spans.length; i++) {
		//spans[i].parentNode.removeChild(spans[i]);
		spans[i].style.background = 'none';
		spans[i].parentNode.id = '';
	}
	
}

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function showError(field, errortext, submitted, number) {
	hideTooltip(field);
	if (error = getSiblingNodeByClassName(field, 'error')) {
		error.childNodes[0].childNodes[0].innerHTML = errortext;
		if (submitted) {
			error.className = 'submitted_error';
			if (number > 0) {
				numberspan = getSiblingNodeByClassName(field, 'errornumber');
				numberspan.className = 'errornumber';
				numberspan.style.background = "url('../../Theme/MoreThan/Images/Quotes/errornumber_bg.png') no-repeat 5px 0";
				numberspan.innerHTML = number;
				field.parentNode.id = 'field_'+number;
				
			}
		}
		error.style.display = 'block';
	}
}

function hideError(field) {
	if (error = getSiblingNodeByClassName(field, 'error')) {
	
		error.style.display = 'none';
		return;
	}
	if (error = getSiblingNodeByClassName(field, 'submitted_error')) {
	
		error.style.display = 'none';
		error.className = 'error';
	}
	if (errorspan = getSiblingNodeByClassName(field, 'errornumber')) {
		errorspan.style.background = 'none';
	}
}

function validateEntry(field) {

	var errortext = '';
	var selectDayorMonth=null;
	/* DOB Tooltip display logic*/
	if (field.id =='ddlYear')
	{
	   selectDayorMonth =document.getElementById('ddlDays');
	   if (selectDayorMonth != null)
            errortext =getErrorText(selectDayorMonth);
      if (!errortext)
      {
        selectDayorMonth =document.getElementById('ddlMonth');
	      if (selectDayorMonth != null)
            errortext =getErrorText(selectDayorMonth);
      }
      if (errortext)
      showError(field, errortext);
  }
  else
  {
  	if (errortext = getErrorText(field)) {
   		showError(field, errortext);
   	}
 	}
}

function getAllFields() {
	var fields = new Array();
	var fieldwrappers = getElementsByClassName('fieldwrapper', 'div', '');
	for (var i=0; i<fieldwrappers.length; i++) {
	
		var fieldwrapper = fieldwrappers[i];
		
		for (var j=0; j<fieldwrapper.childNodes.length; j++) {
			if (fieldwrapper.childNodes[j].tagName == 'INPUT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
			if (fieldwrapper.childNodes[j].tagName == 'SELECT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
		}
		
	}
	
	
	fieldwrappers = getElementsByClassName('fieldwrapperBigger', 'div', '');
	for (var i=0; i<fieldwrappers.length; i++) {
	
		var fieldwrapper = fieldwrappers[i];
		
		for (var j=0; j<fieldwrapper.childNodes.length; j++) {
			if (fieldwrapper.childNodes[j].tagName == 'INPUT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
			if (fieldwrapper.childNodes[j].tagName == 'SELECT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
		}
		
	}
	
	fieldwrappers = getElementsByClassName('fieldwrapperBigger1', 'div', '');
	for (var i=0; i<fieldwrappers.length; i++) {
	
		var fieldwrapper = fieldwrappers[i];
		
		for (var j=0; j<fieldwrapper.childNodes.length; j++) {
			if (fieldwrapper.childNodes[j].tagName == 'INPUT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
			if (fieldwrapper.childNodes[j].tagName == 'SELECT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
		}
		
	}
	
	fieldwrappers = getElementsByClassName('fieldwrapperBigger2', 'div', '');
	for (var i=0; i<fieldwrappers.length; i++) {
	
		var fieldwrapper = fieldwrappers[i];
		
		for (var j=0; j<fieldwrapper.childNodes.length; j++) {
			if (fieldwrapper.childNodes[j].tagName == 'INPUT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
			if (fieldwrapper.childNodes[j].tagName == 'SELECT') {
				fields.push(fieldwrapper.childNodes[j]);
			}
		}
		
	}
	
	
	return fields;
}

function validateForm() {

	var errorLablelbl = document.getElementById('errorLable');
	if (errorLablelbl !=null)
		errorLablelbl.innerHTML = "";
	errortexts = new Array();
	validated = true;


	hideAllTooltips();
	hideAllErrors();
	
	fields = getAllFields();
	
	errorNum = 0;
	
	for (var i=0; i<fields.length; i++) {
		if (errortext = getErrorText(fields[i])) {
			if (!errortexts.contains(errortext)) {
				showError(fields[i], errortext, true, ++errorCount);
				errortexts.push(errortext);
			}
			validated = false
		}
	}
	
	if (!validated) {
		window.scroll(0,0);
	}
	

	if (!validated) {
		showErrorList(errortexts);
	}

	return validated;
}

function showErrorList(errortexts) {
	var lcol = document.getElementById('lcol');
	errorlist = document.getElementById('errorlist');
	if (!errorlist) {
		errorlist = document.createElement('div');
		errorlist.id = 'errorlist';
	}
	errorlist.innerHTML = '<div class="top"><div class="bot"></div></div>';
	if (errortexts.length ==1)
	{
  	txt = document.createTextNode('There is '+errortexts.length+' field that has not been filled out correctly:');
	}
	else
	{
    txt = document.createTextNode('There are '+errortexts.length+' fields that have not been filled out correctly:');
  }
	errorlist.childNodes[0].childNodes[0].appendChild(txt);
	errorul = document.createElement('ol');
	for (var i=0; i<errortexts.length; i++) {
		var j = i+1;
		errorli = document.createElement('li');
		errorli.innerHTML = '<a href="#field_'+j+'" id="fieldName_'+j+'">'+errortexts[i]+'</a>';
		errorul.appendChild(errorli);
	}
	errorlist.childNodes[0].childNodes[0].appendChild(errorul);
	lcol.insertBefore(errorlist,lcol.firstChild);
	
	var focusElement = document.getElementById('fieldName_1');
	
	if(focusElement != null)
	{
	focusElement.focus();
	}
}
function validateRenewalDateEntry(field) {
//renewal date orange tool tip logic
	var errortext = '';
	var selectDayorMonth=null;
	 
	if (field.id =='ddlYearRenewalDate')
	{
	   selectDayorMonth =document.getElementById('ddlDaysRenewalDate');
	   if (selectDayorMonth != null)
            errortext =getErrorText(selectDayorMonth);
      if (!errortext)
      {
        selectDayorMonth =document.getElementById('ddlMonthRenewalDate');
	      if (selectDayorMonth != null)
            errortext =getErrorText(selectDayorMonth);
      }
      if (errortext)
      showError(field, errortext);
  }
  else
  {
  	if (errortext = getErrorText(field)) {
   		showError(field, errortext);
   	}
 	}
}



//Converting letters after space and '-' to uppercase:
function upperCase(ctrl)
{

	var name = ctrl.value;
	var namefirst = new Array();
	var indexofspace = name.indexOf(' ');
	var indexofhyfen = name.indexOf('-');

	if(indexofhyfen >= 0)
	{
		namefirst = name.split('-');
		var numberofhyfen = namefirst.length;
		var firstnameh;
		var firctcharh;
		var newnameh = "";
		
		for(j=0; j<numberofhyfen; j++)
		{
			firstnameh = namefirst[j].toString();
			firstcharh = ((firstnameh.substring(0,1)).toUpperCase())+ firstnameh.substring(1);
			newnameh = newnameh + firstcharh + "-";
		}
		var indexoflasthyfen = newnameh.lastIndexOf('-');
		
		name = newnameh.substring(0,indexoflasthyfen);
	}
	if(indexofspace >= 0)
	{
		namefirst = name.split(' ');
		var numberofspace = namefirst.length;
		var firstname;
		var firctchar;
		var newname = "";

		for(i=0; i<numberofspace; i++)
		{
			firstname = namefirst[i].toString();
			firstchar = ((firstname.substring(0,1)).toUpperCase())+ firstname.substring(1);
			newname = newname + firstchar + " ";
		}
		name = newname;
	}

	if((indexofspace < 0) &&(indexofhyfen < 0))
	{
		name = ((name.substring(0,1)).toUpperCase())+ name.substring(1);
	}

	ctrl.value = name;
	
}
