// JavaScript Document

var requiredElements = new Array();
var requiredElementsR = new Array();

function mainFormLoad(){ 
	var alldivs = document.getElementsByTagName('form');
	
	var text = '';
	var fname = '';
	var type = '';
	var pos = 0;
	for(i=0;i<alldivs.length;i++){
		if(alldivs[i].id.indexOf('mainFrm') != -1){
			var div = document.getElementById(alldivs[i].id);	
			var elem  = div.elements;      
      for(j=0;j<elem.length;j++){
				fname = elem[j].id;
				pos = fname.indexOf("_r");
				if(pos > -1){
					// field is required
					requiredElements.push(fname);
										
					propname = fname;
          type = fname.substring((pos+3));
					fname = fname.substring(0,pos);
					
					trdiv = document.getElementById(fname);	
					trdiv = trdiv.getElementsByTagName("td");
					lastcol = (trdiv.length-2);
          
          if(document.getElementById(propname).value != ''){
						trdiv[lastcol].innerHTML = '<img src="/images/tick.gif" />';
						requiredElementsR.push(elem[j].id);
					}else{ 
						trdiv[lastcol].innerHTML = '<img src="/images/img_r.gif" />';
					}
					 					
					if(type == 'email'){
						YAHOO.util.Event.addListener(elem[j].id, "keyup", fnCallbackEmail, elem[j]); 
						//YAHOO.util.Event.addListener(elem[j].id, "propertychange", fnCallbackEmail, elem[j]); 
					}
					else if(type == 'pass'){
						YAHOO.util.Event.addListener(elem[j].id, "keyup", fnCallbackPass, elem[j]);
					}	
					else{
						if(elem[j].type == 'select-one'){
              YAHOO.util.Event.addListener(elem[j].id, "change", fnCallbackR, elem[j]);
            }
            else{
              YAHOO.util.Event.addListener(elem[j].id, "keyup", fnCallbackR, elem[j]);
            }
					}
				}
			}
		}	
	}
}

function fnCallbackEmail(e,obj) { 
	var str;
	str = obj.value;
	
	fname = obj.id;
	pos = fname.indexOf("_r");
	if(pos > -1){
		fname = fname.substring(0,pos);
	}
						
	trdiv = document.getElementById(fname);	
	trdiv = trdiv.getElementsByTagName("td");
	lastcol = (trdiv.length-1);
	
	if((str.indexOf(".") > 2) && (str.indexOf("@") > 0)){
		trdiv[lastcol-1].innerHTML = '<img src="/images/tick.gif" />';
		trdiv[lastcol].innerHTML = '';
		obj.className = 'defaultInput'; 
		
		requiredElementsR.push(obj.id);
	}
	else{
		trdiv[lastcol-1].innerHTML = '<img src="/images/img_r.gif" />';
		trdiv[lastcol].innerHTML = 'Email is invalid';
		obj.className = 'defaultInputRed';
		
		requiredElementsR = removeArray(requiredElementsR,obj.id);
	}
}

/* deals with password fields */
function fnCallbackPass(e,obj) {
	var str;
	str = obj.value;
	
	fname = obj.id;
	pos = fname.indexOf("_r");
	if(pos > -1){
		fname = fname.substring(0,pos);
	}
						
	trdiv = document.getElementById(fname);	
	trdiv = trdiv.getElementsByTagName("td");
	lastcol = (trdiv.length-1);
	
	if(fname.indexOf("confirm") > -1){
		var name = obj.id.replace("confirm","");
		var pdiv = document.getElementById(name);

		if(pdiv.value == obj.value){ 
			trdiv[lastcol-1].innerHTML = '<img src="/images/tick.gif" />';
			trdiv[lastcol].innerHTML = '';
			obj.className = 'defaultInput';	

			requiredElementsR.push(obj.id);
		}
		else{
			trdiv[lastcol-1].innerHTML = '<img src="/images/img_r.gif" />';
			trdiv[lastcol].innerHTML = 'Passwords don\'t match';
			obj.className = 'defaultInputRed';
			
			requiredElementsR = removeArray(requiredElementsR,obj.id);
		}
	}
	else{
		
		xpos = obj.value;
		xpos = (xpos.length * 15);

		//use of numbers in the password
		var pw = obj.value;
	    var numnumeric = pw.replace (/[0-9]/g, "");
	    var numeric=(pw.length - numnumeric.length)*20;

	    //use of symbols in the password
	    var symbols = pw.replace (/\W/g, "");
	    var numsymbols=(pw.length - symbols.length)*20;

	    //use of uppercase in the password
	    var numupper = pw.replace (/[A-Z]/g, "");
	    var upper=(pw.length - numupper.length)*5;
		
		//use of uppercase in the password
	    var numlower = pw.replace (/[a-z]/g, "");
	    var lower=(pw.length - numupper.length)*5;
		
		var multipler = 0.75;
		
		if(numeric>0) multipler+=0.25;
		if(numsymbols>0) multipler+=0.25;
		if(upper>0) multipler+=0.25;
		if(lower>0) multipler+=0.25;
		
		xpos = (xpos + numeric + numsymbols + upper + lower) * multipler;
		
		if(xpos > 400) xpos = 400;		
		xpos = "-" + xpos;		
		
		if(obj.value.length > 5) {
			trdiv[lastcol-1].innerHTML = '<img src="/images/tick.gif" />';
			obj.className = 'defaultInput';		
			
			requiredElementsR.push(obj.id);			
		}	
		else {
			trdiv[lastcol-1].innerHTML = '<img src="/images/img_r.gif" />';
			obj.className = 'defaultInputRed';
			
			requiredElementsR = removeArray(requiredElementsR,obj.id);
		}		
		trdiv[lastcol].innerHTML = '<div align="center">Password Strength<div style="height: 5px; width: 100px; background: url(/images/password_strength.gif) no-repeat ' + xpos + 'px 0px; border: 1px solid #182021; margin-top: 1px;"></div></div>';
	}
}

function fnCallbackR(e,obj) {
	fname = obj.id;
	pos = fname.indexOf("_r");
	if(pos > -1){
		fname = fname.substring(0,pos);
	}
						
	trdiv = document.getElementById(fname);	
	trdiv = trdiv.getElementsByTagName("td");
	lastcol = (trdiv.length-2);
					
	if(obj.value == ''){
		trdiv[lastcol].innerHTML = '<img src="/images/img_r.gif" />';
		requiredElementsR = removeArray(requiredElementsR,obj.id);
	}
	else{
		trdiv[lastcol].innerHTML = '<img src="/images/tick.gif" />';
		requiredElementsR.push(obj.id);
	}
}

/* removes element from array because javascript doesnt have any function to do this. Oh dear*/
function removeArray(arr,str){
	var newArr = new Array();
	for(var i = 0; arr.length > i; i++){
		if(arr[i] != str){
			newArr.push(arr[i]);
		}
	}
	return newArr;
}

var handleSuccessSave = function(o){
	if(o.responseText !== undefined){
		var ret = o.responseText;
    
    var currentTime = new Date()
    var month = currentTime.getMonth() + 1
    var day = currentTime.getDate()
    var year = currentTime.getFullYear()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()
    var timestamp = hours+":"+minutes+":"+seconds+" "+day+"/"+month+"/"+year;

    var type = trim(o.getResponseHeader['Content-Type']);

    // is xml response
    if(type == 'text/xml'){
      var root = o.responseXML.documentElement;
      
      var xml = root.getElementsByTagName('var');
      
      for(i=0;i<xml.length;i++){
  		  var val = xml[i].firstChild.data;
  		  var fieldid = xml[i].getAttribute('name');
  		  document.getElementsByName(fieldid)[0].value = val;
      } 
      
      YAHOO.example.container.panel.hide();
      
      var xml = root.getElementsByTagName('reply');
  		var txt = xml[0].getAttribute('text');
      
      var div = document.getElementById("frmReplyText");
			div.style.display='block';
			var div = document.getElementById("frmReplyTextIn");
			div.innerHTML = timestamp+' '+txt;
      
      return;
    }
    				
		if(ret.indexOf('ok:') > -1){
		  YAHOO.example.container.panel.hide();
    
      var txt = ret.substring(3);
      
      if(ret.indexOf('function.location') > -1){
        var pos = ret.indexOf('function.location');
        var loc = txt.substring(pos+16);
        pos = loc.indexOf('"');
        loc = loc.substring(0,pos);
        
        document.location = loc;
      }
    
    	var div = document.getElementById("frmReplyText");
			div.style.display='block';
			var div = document.getElementById("frmReplyTextIn");
			div.innerHTML = '';
			div.innerHTML = timestamp+' '+txt;
		}
		else{
			YAHOO.example.container.panel.hide();
			
			var div = document.getElementById("frmReplyText");
			div.style.display='block';
			var div = document.getElementById("frmReplyTextIn");
			div.innerHTML = '';
			div.innerHTML = ret+"<br />"+timestamp+ ' failed to save, please try again';
		}		 
	}
}

var handleSuccessNewUser = function(o){
	if(o.responseText !== undefined){
		var ret = o.responseText;					
		if(ret.indexOf('ok:') > -1){
			var div = document.getElementById("mainContainerPad");
			div.innerHTML = '';
			div.innerHTML = '<p>Your account has been created, please check your inbox for the activation email to complete your registration</p>';
			
			YAHOO.example.container.panel.hide();
		}
		else{
			YAHOO.example.container.panel.hide();
		}
		 
	}
}
var callbackNewUser =
{
  success:handleSuccessNewUser,
  failure: handleFailure,
  argument: ['foo','bar']
};

var callbackSave =
{
  success:handleSuccessSave,
  failure: handleFailure,
  argument: ['foo','bar']
};

function formRegister(){
	sendForm("Please wait while we create your user account",'<div align="center"><img src="/images/loading_large.gif" /></div>',false);
}

function formProfileEdit(){ 
	sendForm("Please wait while we save your changes",'<div align="center"><img src="/images/loading_large.gif" /></div>',false);
}

function formSave(){ 
	sendForm("Please wait while we save your changes",'<div align="center"><img src="/images/loading_large.gif" /></div>',true);
}

function sendForm(header,body,generic){
	var items =  requiredElements.length;
	var itemsR = requiredElementsR.length;
	var okcount = 0;
	for(var i = 0; items > i; i++){
		for(var j = 0; itemsR > j; j++){
			if(requiredElements[i] == requiredElementsR[j]){
				okcount+=1;
				break;
			}
		}
	}
	
	YAHOO.namespace("example.container");
	
	YAHOO.example.container.panel = new YAHOO.widget.Panel("stdPanel", {  width:"450px", 
																		modal:true,
																		visible:true, 
																		draggable:false,
																		/*fixedcenter:true, */
																		iframe:true,
																		constraintoviewport:true,
																		close:true} );																
	if(items != okcount){																	
		YAHOO.example.container.panel.setHeader("Warning");
		YAHOO.example.container.panel.setBody("Please check the form and fill out all of the required fields");
		YAHOO.example.container.panel.render("popupContainer"); 
	}
	else{
		var postVars = '';	
		var postVarsA = new Array();
		var div = document.getElementById("mainFrm");		
		var elem = div.elements;
		for(j=0;j<elem.length;j++){
			postVarsA.push(elem[j].name + '=' + encodeURIComponent(elem[j].value))
		}
		
		postVars = postVarsA.join("&");
	 
		YAHOO.example.container.panel.setHeader(header);
		YAHOO.example.container.panel.setBody(body);
		YAHOO.example.container.panel.render("popupContainer"); 
		
		var action = document.getElementById("mainFrm").action;
			
		if(generic == false){
      YAHOO.util.Connect.asyncRequest('POST', action, callbackNewUser, postVars);
    }
    else{
      YAHOO.util.Connect.asyncRequest('POST', action, callbackSave, postVars);
    }  
	}
}

// make textareas grow when needed
function autogrow_textarea(obj){
	if (obj.scrollHeight > obj.clientHeight && !window.opera) {
    while(obj.scrollHeight > obj.clientHeight){
      obj.rows += 1;
    }
  }  
}

// make textareas grow when needed, setup
function autogrow_textarea_init(){
  var alldivs = document.getElementsByTagName('textarea');
	for(i=0;i<alldivs.length;i++){   
    alldivs[i].onkeyup=function(){return autogrow_textarea(this);};	
    autogrow_textarea(alldivs[i]);
	}
}

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}


YAHOO.util.Event.onDOMReady(mainFormLoad);
YAHOO.util.Event.onDOMReady(autogrow_textarea_init);
