/**
 * @author Daryl,Robert
 */
var errColor = "#FF8888";
var normColor = "#F6F6F6";

function filterlist(selectobj) {
    
    // VARIABLES
    
    // HTML SELECT object
    this.selectobj = selectobj;
    
    // Flags for regexp matching.
    // "i" = ignore case; "" = do not ignore case
    this.flags = "i";
    
    // Make a copy of the options array
    this.optionscopy = new Array();
    for (var i=0; i < selectobj.options.length; i++) {
        this.optionscopy[i] = new Option();
        this.optionscopy[i].text = selectobj.options[i].text;
        this.optionscopy[i].value = selectobj.options[i].value;
    }
    
    //==================================================
    // METHODS
    //==================================================
    
    //--------------------------------------------------
    this.reset = function() {
    // This method resets the select list to the original state.
    // It also unselects all of the options.
    
        this.set("");
    }
    
    //--------------------------------------------------
    this.set = function(pattern) {
    // This method removes all of the options from the select list,
    // then adds only the options that match the pattern regexp.
    // It also unselects all of the options.
    // In case of a regexp error, returns false
    
        var loop=0, index=0, regexp, e;
    
        // Clear the select list so nothing is displayed
        this.selectobj.options.length = 0;
    
        // Set up the regular expression
        try {
            regexp = new RegExp(pattern, this.flags);
        } catch(e) {
            return;
        }
    
        // Loop through the entire select list
        for (loop=0; loop < this.optionscopy.length; loop++) {
    
            // Check if we have a match
            if (regexp.test(this.optionscopy[loop].text)) {
        
                // We have a match, so add this option to the select list
                this.selectobj.options.length = index + 1;
                this.selectobj.options[index].text = this.optionscopy[loop].text;
                this.selectobj.options[index].value = this.optionscopy[loop].value;
                this.selectobj.options[index].selected = false;
        
                // Increment the index
                index++;
            }
        }
    }
    
    //--------------------------------------------------
    this.set_ignore_case = function(value) {
    // This method sets the regexp flags.
    // If value is true, sets the flags to "i".
    // If value is false, sets the flags to "".
    
        if (value) {
            this.flags = "i";
        } else {
            this.flags = "";
        }
    }
}

function hideResults(){
    for (var i=0;i<productList.length;i++){
    	if (productList[i].calculate)
    		document.getElementById("system_result_"+productList[i].sid).style.display = "none";
    }
    document.getElementById('calculate_notes').style.display = "none";
    document.getElementById('result_header0').style.display = "none";
    document.getElementById("underwriting").style.display = "none";
}

//Disable element set disabled and set correct colours 
function disableElement(element)
{
		element.disabled = true;
		element.style.backgroundColor = "#cccccc";
		element.style.color = "#808080";
}

//Enable element set disabled and set correct colours 
function enableElement(element)
{
		element.disabled = false;
		element.style.backgroundColor = "#F6F6F6";  
		element.style.color = "#000000"; 
}

 //Toggle disabled element ie if elment is disabled
 //enable it else disable element
 function toggle(id) {
  
   var obj = document.getElementById(id);
   //alert(obj.id);
   if (obj.disabled) {
   	  enableElement(obj);
   } else {
   	  disableElement(obj);
   }
}

function toggleDisplay(checker,element) {
	if(checker.checked == true) {
        element.style.display = "block";
    } else {
        element.style.display = "none";
    }
}

function toggleTrDisplay(checker,element) {
	if(checker.checked == true && navigator.appName == "Microsoft Internet Explorer") {
        element.style.display = "block";
    } else if(checker.checked == true) {
        element.style.display = "table-row";
    } else {
        element.style.display = "none";
    }
}


//Used for IE combo boxes so that when you start
//typing an occupation for example it start selecting it
function selectAsYouType(e)
{

    var keyChar; var keyNum;
    var comboBox;
    if (window.event) // IE
    {
        keyNum = e.keyCode;            
    }
    else
    {
        return true; // browser doesn't support DOM, do default processing.
    }
    
    keyChar = String.fromCharCode(keyNum);
    comboBox = e.srcElement;
    
    if (!comboBox)
    {
        return true; // if DOM didn't work, do default processing
    }
    if (keyNum == 27) // Esc key
    {
        clearKeysPressed(comboBox);
    }
    else
    {
        return selectElement(comboBox, keyChar);
    }
    return true;
}

function clearKeysPressed(e)
{
    if (e.srcElement)
        keysPressed[e.srcElement]="";
}

//Ensure only integers are entered into this text field
function intFormat(fld,e) 
{
	var key = (e.which) ? e.which : e.keyCode;
	if ( (key >47 && key < 58) || (key > 95 && key < 106)) 
		return true;
	if ( key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27 || key == 46 )
		return true;
	return false;
}
function posIntFilter(event){
	var keyCode = (document.all)? event.keyCode : event.which;
	
	if ( (keyCode >= 32 && keyCode <= 47) || (keyCode >= 58 && keyCode <= 126) ){
		return false;
	} else {
		return true;
	}
}
// use to automatically select the specified field (id) when the maximum length of the current field is reached.
function autoTab(e, id){
	var next_field = document.getElementById(id);
    var key = (e.which) ? e.which : e.keyCode;
    
    // If TAB or ENTER then move to the next field;
    // Allow escape, delete & backspace;
    // Dis-allow any other non-digit
	if (key == 9 || key == 13){
	    next_field.focus();
	    return false;
    } else if ( key == null || key == 0 || key == 8 || key == 27 || key == 46 ){ 
		return true;
	} else if ( ! ((key > 47 && key < 58) || (key > 95 && key < 106)) ){
    	return false;
    }
    // transform the codes of numbers from the number keypad so they convert properly.
	if (key > 95 && key < 106){
		key -= 48;
	}
	var field = (e.srcElement) ? e.srcElement : e.target;
	if (field.value.length == field.getAttribute("maxlength")-1){
		field.value = field.value + '' + String.fromCharCode(key);
		next_field.focus();
		return false;
	}
	return true;
}
//Used by select as you type combos	
function selectElement(comboBox, keyChar)
{
    var i = 0;
    var keysPressedSoFar =     keysPressed[comboBox] || "";
    keysPressedSoFar += keyChar;
    keysPressed[comboBox] = keysPressedSoFar;
    var options = comboBox.options;
    for (i = 0; i<options.length; ++i)
    {
        if (options[i].text.toUpperCase().indexOf(keysPressedSoFar.toUpperCase(), 0) == 0)
        {
            comboBox.selectedIndex = i;
            return false; // don't do default processing
        }
    }
    keysPressed[comboBox] = String(keyChar); // didn't match start of any option, so reset keysPressed to just this key
    return true;        
}

//Check if a fieldset has all the details filled out
//Note examins text and radio right now
function isCompletedDetails(id)
{
	
	var testFrameset = document.getElementById(id);
	for(var i = 0; i < testFrameset.childNodes.length; i++)
	{
		
		//alert(testFrameset.childNodes[i].nodeName);
		if(testFrameset.childNodes[i].nodeName == 'INPUT')
		{
			if(testFrameset.childNodes[i].type =='text')
			{
				if(testFrameset.childNodes[i].value == "" || testFrameset.childNodes[i].value == "0")
				{
					
					return false;
					//alert('got to false id is ' + testFrameset.childNodes[i].id);
				}
			}
			else if(testFrameset.childNodes[i].type =='radio')
			{
				//alert('group name ' + testFrameset.childNodes[i].name);	
				var grpName = testFrameset.childNodes[i].name;
				var grpElements = document.getElementsByName(grpName);
				var radioChecked = false;
				//alert('group name ' + grpName);	
				//alert('len ' + grpElements.length);
				for(var x = 0 ; x < grpElements.length; x++)
				{
					if(grpElements[x].checked)
						radioChecked = true;
				}
				if(!radioChecked)
					return false;
			}
		}
	}	
	return true;	
}



//Disable a fieldset by traversing the dom tree, if is Toggle then toggle on off else enable
function traverseDomTree(id,isToggle,isEnable)
{
	//if(id == 'life1_ben1_number_of_children_details')
	//	alert('got to inner child stuff');
		
	var currentElement = document.getElementById(id);

	for(var i = 0; i < currentElement.childNodes.length; i++)
	{
		//alert(currentElement.childNodes[i].nodeType);
		if(currentElement.childNodes[i].nodeType == 1)
		{	
			//alert(currentElement.childNodes[i].nodeName);		
			if(currentElement.childNodes[i].nodeName == 'FIELDSET'
			 || currentElement.childNodes[i].nodeName == 'DIV')
			{
				traverseDomTree(currentElement.childNodes[i].id,isToggle,isEnable);
			}
			else if(currentElement.childNodes[i].id && currentElement.childNodes[i].nodeName != 'LABEL'
			&& currentElement.childNodes[i].nodeName != 'H3'
			&& currentElement.childNodes[i].nodeName != 'H4')
			{
				if(isToggle)
					toggle(currentElement.childNodes[i].id);
				else
				{					 
					 if(isEnable)
						enableElement(currentElement.childNodes[i]);
					 else
					 	disableElement(currentElement.childNodes[i]);
				}
			}
		}
	}
}



function check_dob_details(curr,dd,mm,yy,anb,dob) {
    var day = document.getElementById(dd).value;
    var month = document.getElementById(mm).value;
    var year = document.getElementById(yy).value;
	var age_next = document.getElementById(anb).value;
	var curr_yr = new Date().getFullYear();
	
    if (curr==dd) {
        if ((validate_int(dd,1,31))&&(month)&&(year)) {
            document.getElementById(anb).value = calc_age_next(day,month,year);
        }
    } else if (curr==mm) {
        if ((validate_int(mm,1,12))&&(day)&&(year)) {
            document.getElementById(anb).value = calc_age_next(day,month,year);
        }
    } else if (curr==yy) {
        if ( validate_int(yy,1900,curr_yr) && day && month ) {
            document.getElementById(anb).value = calc_age_next(day,month,year);
            validate_int(anb,1,99);
        }
    } else if (curr==anb){
        if ( validate_int(anb,0,99) ) {
            if (document.getElementById(dd).value=='')
            	document.getElementById(dd).value = 1;
            if (document.getElementById(mm).value=='')
            	document.getElementById(mm).value = 1;
            document.getElementById(yy).value = calc_age_next(day,month,age_next);
            validate_int(yy,1900,curr_yr);
        }
    }
    document.getElementById(dob).value = day+"/"+month+"/"+year;
}

function calc_age_next(day, month, year) {
    var d = new Date();
    var anb = d.getFullYear() - year + 1;
    if (month >= d.getMonth() + 1) {
        if (month == d.getMonth() + 1) {
            if (day >= d.getDate()) {
                anb -= 1;
            }
        } else {
            anb -= 1;
        }
    }
    return anb;
}

function enableDisableArray(elementArray,enable)
{
	for(var i =0 ; i < elementArray.length ; i++)
	{
		if(enable)
			enableElement(elementArray[i]);
		else
			disableElement(elementArray[i]);
	}
}
//validation functions
function checkBlankIntValue(fld)
{
	if(fld.value == "")
		fld.value = "0";
}

function testLinked(linkedToElement,element)
{
	var linkedToAmount = linkedToElement.value;
	var elementAmount = element.value;
	
	if(parseFloat(elementAmount) > parseFloat(linkedToAmount)) {
		element.value =linkedToAmount;
	}
}

function validate_int(fld,min,max) {
    var num = document.getElementById(fld).value;
    if ( isNaN(num) || num < min || num > max ) {
        document.getElementById(fld).style.background = errColor;
        return false;
    } else {
        document.getElementById(fld).style.background = normColor;
        return true;
    }
}


//for business rule checking, force setting value if incorrect
function validateAmount(fld,min,max) {
	var num = parseFloat(fld.value);
	if(num < min) {
		fld.value = min;
	} else if(num > max) {
		fld.value = max;
	}
}


// Functions for displaying help
function toggleHelp() {
	var oldclass = "";
	var newclass ="";
	var classElements;
	
	if(document.getElementById('helpdisplay').checked == true) {
		classElements = getElementsByClass('nonhelp');
		oldclass ="nonhelp";
		newclass="help";
	} else {
		classElements = getElementsByClass('help');
		oldclass ="help";
		newclass="nonhelp";
	}
	
	for(i=0;i < classElements.length; i++) {
		//classElements[i].className=newclass;
	}
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function showhelp(id){
	if(document.getElementById('helpdisplay').checked == true) {
		document.getElementById('help'+id).style.display = "block";
	}
}
function hidehelp(id){
	document.getElementById('help'+id).style.display = "none";
}


function checkMulitpleOfTen(element)
{
	var num = parseFloat(element.value);
	var rem = num % 10;
	
	if(rem != 0)
		return false;
	else
		return true;
}

function setDOB() {
    var dob = "";
    dob += document.getElementById("life1_dob_day").value + "/";
    dob += document.getElementById("life1_dob_month").value + "/";
    dob += document.getElementById("life1_dob_year").value;
    
    document.getElementById("life1_birthdate").value = dob;
}


function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}


function reset_form(){
    var form_fields = document.forms[0].elements;
    
	for (var i=0;i<form_fields.length;i++){
        if (form_fields[i].name != "reset" && form_fields[i].name != "submit" && form_fields[i].name != "stopcalc"){
        	form_fields[i].disabled = false;
        
	        //Return text fields to original appearance
			if (form_fields[i].type == "text" || form_fields[i].type == "select-one") {
				form_fields[i].style.borderColor = "#000000";
				form_fields[i].style.color = "#000000";
		    }
        }
	}
}

function disableform(){
    var form_fields = document.forms[0].elements;

	for (var i=0;i<form_fields.length;i++){
		if (form_fields[i].type == "text" || form_fields[i].type == "checkbox" || form_fields[i].type == "select-one") {
	        form_fields[i].disabled = true;
	        //Need to make text fields LOOK disabled
			if (form_fields[i].type == "text" || form_fields[i].type == "select-one") {
				form_fields[i].style.borderColor = "#CCCCCC";
				form_fields[i].style.color = "#BBBBBB";
		    }
		}
	}
	//Don't disable the stop calc button
	enabletextbox( document.getElementById("stopcalc"));
	enabletextbox( document.getElementById("reset"));
	document.getElementById("reset").value="Reset Form";
}
function disableCommissionBox(tb) {
	tb.value = "1.00";
	tb.disabled=true;
	tb.style.borderColor = "#CCCCCC";
	tb.style.color = "#BBBBBB";
}
function disableselectbox(tb) {
	//tb.selectedIndex = 0;
	tb.disabled=true;
	tb.style.borderColor = "#CCCCCC";
	tb.style.color = "#BBBBBB";
}
function disabletextbox(tb) {
	tb.value = "0";
	tb.disabled=true;
	tb.style.borderColor = "#CCCCCC";
	tb.style.color = "#BBBBBB";
}
function enabletextbox(tb) {
	//alert(tb.name);
	tb.disabled=false;
	tb.style.borderColor = "#000000";
	tb.style.color = "#000000";
}

//Disable element set disabled and set correct colours 
function disableCheckbox(element){
	element.checked = false;
	element.disabled = true;
}

//Enable element set disabled and set correct colours 
function enableCheckbox(element){
	element.disabled = false;
}

function field_tab(e,fld){
    var code = (e.which) ? e.which : e.keyCode;
	if (code == 9 || code == 13){
	    document.getElementById(fld).focus();
	    return false;
    }
    return true;
}