var form;

function init() {
  var email = document.getElementById('email');
  var res = document.getElementById('res');
  var loginbtn = document.getElementById('loginbtn');
  var i, j, _labels, labels;

  var can_close = document.getElementById('cancel_close');
  var can_expand = document.getElementById('cancel_expand');
  var k, l;

  var rateCode = document.getElementById('rateCode');
  
  form = [email, res];
  
  email.validators = [
		{
			validator: notBlankValidator
		},
		{
			validator: emailValidator
		}
	];
	
	res.validators = [
		{
			validator: notBlankValidator
		}
	];
	
	_labels = document.getElementsByTagName('label');
  labels = new Array();
	for (i = _labels.length - 1; i >= 0; i--) {
		labels[_labels[i].htmlFor] = _labels[i];
	}
	
  for (i = 0; i < form.length; i++) {
    // el.parent = this; // allow validator to locate errorMessages and Labels
    // el.setAttribute('autocomplete','off'); /* fix firefox exception: http://geekswithblogs.net/shahedul/archive/2006/08/14/87910.aspx */ 	  
    vals = form[i].validators;
    
    if (vals) {
      for (j = 0; j < vals.length; j++) {
       vals[j].reset = resetHighlights;
       vals[j].errorHandler = displayAlertAndHightlightError;
       // vals[k].errorMessage = ibe.GuestInformationModule.ERROR_MESSAGES[vals[k].errorKey];
       vals[j].labels = labels;
      }
    }  
  }

  document.forms[0].onsubmit = validate; 

	loginbtn.onclick = function () {
		var form = this.form;
		setTimeout(function () {
				if (form.onsubmit() !== false) {
					form.submit();
				}
			}, 0);
		return false;
	};


  if(can_close){
    if(can_expand) {
      var anchors = can_close.getElementsByTagName('a');
      for(k = 0; k < anchors.length; k++){
        anchors[k].onclick = function () {

          // copy the code underneath to reset highlighted labels
          for (i = 0; i < form.length; i++) {
            var el = form[i];
        		var vals = el.validators;
        		
        		if (vals) {
        			for (j = vals.length - 1; j >= 0; j--) {
        				vals[j].reset(el);
        			}
        		}
        	}
          jlib.ClassName.add(document.getElementById('warnmsg'), 'hidden');
        
          jlib.ClassName.remove(can_expand, 'hidden');
          jlib.ClassName.add(can_close, 'hidden');
          return false;                  
        }
      }    
    }
  }

  if(can_expand){
    if(can_close) {
      var anchors = can_expand.getElementsByTagName('a');
      for(l = 0; l < anchors.length; l++){
        anchors[l].onclick = function () {
          jlib.ClassName.remove(can_close, 'hidden');
          jlib.ClassName.add(can_expand, 'hidden');
          return false;                  
        }
      }    
    }
  }

  if(rateCode) {
    var rc_warnmsg = document.getElementById('rc_warnmsg');
    var rc_text = document.getElementById('rc_text');
    var rc_clear = document.getElementById('rc_clear');
    var rc_enter = document.getElementById('rc_enter');
    var inputs,input,rc_href;
    var radios = 0;
    var radio, selected;

    inputs = rateCode.getElementsByTagName('input');
    rc_href = rc_enter.href;
    
    for(var c = 0; c <inputs.length; c++){
      input = inputs[c];
      if(input.type == "radio"){
        if(input.checked == true) {
          selected = input.value;
          rc_enter.href = urlGenerator(rc_href,rc_text.value,selected);
        }
        input.onclick = function() {
          selected = this.value;
          rc_enter.href = urlGenerator(rc_href,rc_text.value,selected);           
        }
      }
    }
    
    rc_text.onkeyup = function() {
      rc_enter.href = urlGenerator(rc_href,rc_text.value,selected);      
    }
    
    rc_clear.onclick = function() {
      jlib.ClassName.add(rc_warnmsg, 'hidden');
      rc_text.value = "";
      rc_enter.href = urlGenerator(rc_href,rc_text.value,selected);      
      return false;
    }
    
    rc_enter.onclick = function() {
      jlib.ClassName.add(rc_warnmsg, 'hidden');

      if(notBlankValidator(rc_text.value)) {
        // using the default behaviour of anchor to send the data to IBE 
      } else {
        jlib.ClassName.remove(rc_warnmsg, 'hidden');
        return false;
      }      
    }
      
  }

}

function urlGenerator(href,text,radio) {
  var encodedText = encodeURIComponent(text);
  return (text.length > 0) ? href + "m=" + encodedText + "&n=" + radio : href + "n=" + radio;
}


function validate(e) {
  var result = true;
  var el, vals, i, j;
  var warnmsg = document.getElementById('warnmsg');
    
  for (i = 0; i < form.length; i++) {
    el = form[i];
		vals = el.validators;
		
		if (vals) {
			for (j = vals.length - 1; j >= 0; j--) {
				vals[j].reset(el);
			}
		}
		el.performValidation = true;		
	}
	
	for (i = 0; i < form.length; i++) {
	  el = form[i];
    vals = el.validators;
    
		if (vals) {
			for (j = 0; j < vals.length; j++) {			  
				if (el.performValidation && !vals[j].validator(el)) {
					vals[j].errorHandler(el);
          jlib.ClassName.add(warnmsg, 'hidden');     					
					result = false;
				}
			}
		} 
  }
  
	if (!result) {
		jlib.ClassName.remove(warnmsg, 'hidden');
		if (e && e.preventDefault) {
			e.preventDefault();
		}
	}
  
  return result;
}

jlib.contrib.Events.add(jlib.contrib.Onload, 'DOMContentLoaded', init);
