/*
 *  name: global.js
 *  description: JS function list for estudentloan.com
 *  author: bstripling
 *  date: 02/26/2007
 *
 *------------------------------------------------------------*/

/**********************************************************************************************
  better way to load JS functions than window.onload
**********************************************************************************************/

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  }
  else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


/**********************************************************************************************
  getElementsByClass function
**********************************************************************************************/

/*
	the getElementsByClassName is a useful function that'll return any/all tags with a specific css class.
	Written by Jonathan Snook, http://www.snook.ca/jonathan
	Add-ons by Robert Nyman, http://www.robertnyman.com
*/
function getElementsByClassName(oElm, strTagName, strClassName) {
	// first it gets all of the specified tags
    var arrElements = (strTagName == "*" && document.all) ? document.all : oElm.getElementsByTagName(strTagName);
    
	// then it sets up an array that'll hold the results
	var arrReturnElements = new Array();

	// some regex stuff you don't need to worry about
    strClassName = strClassName.replace(/\-/g, "\\-");

    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;

	// now it iterates through the elements it grabbed above
    for(var i=0; i<arrElements.length; i++)
	{
        oElement = arrElements[i];

		// if the class matches what we're looking for it ads to the results array
        if(oRegExp.test(oElement.className))
		{
            arrReturnElements.push(oElement);
        }   
    }

	// then it kicks the results back to us
    return (arrReturnElements)
}


/**********************************************************************************************
  unobtrusive popups
**********************************************************************************************/

function preparePopupLinks() {
  var popupLinkConfig = new Array;
  // popupLinkConfig["classname"] = new Array ( "targetname", "width=550,height=350,scrollbars=yes,resizable=yes,status=yes,toolbar=yes,location=yes,menubar=yes");
  popupLinkConfig["popup"] = new Array ( "popup", "scrollbars=yes,resizable=yes,status=yes,toolbar=yes,location=yes,menubar=yes");

  if (!document.getElementsByTagName) return true;
  var pageLinks = document.getElementsByTagName("a");
  for (var i = 0; i < pageLinks.length; i++) 
  {
    if (((pageLinks[i].className != null) && 
         (pageLinks[i].className != "")) ||
        ((pageLinks[i].parentNode.className != null) && 
         (pageLinks[i].parentNode.className != "")))
    {
      var linkClass = " " + pageLinks[i].className + " ";
      if ((linkClass == "  ") && (pageLinks[i].parentNode.className != ""))
      {
        linkClass = " " + pageLinks[i].parentNode.className + " ";
      }
      for (var theKey in popupLinkConfig) 
      {
        if (linkClass.indexOf(" " + theKey + " ") > -1)
        {
          if ((pageLinks[i].target == "") || (pageLinks[i].target == null))
          {
            pageLinks[i].target = (popupLinkConfig[theKey][0] != "") ? popupLinkConfig[theKey][0] : theKey;
          }
          pageLinks[i].settings = popupLinkConfig[theKey][1];
          pageLinks[i].onclick = popUp;
        }
      }
    }
  }
  return true;
}

function popUp()
{
  newWin = window.open(this.href, this.target, this.settings);
  newWin.focus();
  return false;
}

addLoadEvent(preparePopupLinks);

/**********************************************************************************************
  set year in school options on loanfinder app form
**********************************************************************************************/

function setYearInSchoolOptions(school_year) {

  var school_year = document.getElementById("school_year");

  // get element type (text or select)
  var node_type = school_year.nodeName.toLowerCase();

  // only replace if the node type is a select - it may be a p if the info is just being displayed
  if (node_type == "select") {
    // remove existing optgroups and options (non JS users will see all available options from HTML form
    school_year.innerHTML = "";

    // get value from undergraduate/graduate student radio options to determine which year in school options to show
    var student_type_undergraduate = document.getElementById("student_type_undergraduate");
    var student_type_graduate = document.getElementById("student_type_graduate");

    //rewrite appropriate optgroups and options

    var optgroup_option_0 = document.createElement('option');
    optgroup_option_0.value = "";
    optgroup_option_0.innerHTML = "-- select a class level --";
    school_year.appendChild(optgroup_option_0);

    if (student_type_undergraduate.checked == true) {
      // undergrad optgroup
      var optgroup_undergrad = document.createElement("optgroup");

        // option 1
        var undergrad_option_1 = document.createElement('option');
        undergrad_option_1.value = "undergraduate_freshman";
        undergrad_option_1.innerHTML = "College Freshman";
        optgroup_undergrad.appendChild(undergrad_option_1);

        // option 2
        var undergrad_option_2 = document.createElement('option');
        undergrad_option_2.value = "undergraduate_sophmore";
        undergrad_option_2.innerHTML = "College Sophmore";
        optgroup_undergrad.appendChild(undergrad_option_2);

        // option 3
        var undergrad_option_3 = document.createElement('option');
        undergrad_option_3.value = "undergraduate_junior";
        undergrad_option_3.innerHTML = "College Junior";
        optgroup_undergrad.appendChild(undergrad_option_3);

        // option 4
        var undergrad_option_4 = document.createElement('option');
        undergrad_option_4.value = "undergraduate_senior";
        undergrad_option_4.innerHTML = "College Senior";
        optgroup_undergrad.appendChild(undergrad_option_4);

        // option 5
        var undergrad_option_5 = document.createElement('option');
        undergrad_option_5.value = "undergraduate_senior";
        undergrad_option_5.innerHTML = "Other";
        optgroup_undergrad.appendChild(undergrad_option_5);

        school_year.appendChild(optgroup_undergrad);
        optgroup_undergrad.label = "Undergraduate";
    }
    if (student_type_graduate.checked == true) {
      // graduate optgroup
      var optgroup_graduate = document.createElement("optgroup");

        // option 1
        var graduate_option_1 = document.createElement('option');
        graduate_option_1.value = "graduate_year_1";
        graduate_option_1.innerHTML = "1st Year Graduate";
        optgroup_graduate.appendChild(graduate_option_1);

        // option 2
        var graduate_option_2 = document.createElement('option');
        graduate_option_2.value = "graduate_year_2";
        graduate_option_2.innerHTML = "2nd Year Graduate";
        optgroup_graduate.appendChild(graduate_option_2);

        // option 3
        var graduate_option_3 = document.createElement('option');
        graduate_option_3.value = "graduate_year_3";
        graduate_option_3.innerHTML = "3rd Year Graduate";
        optgroup_graduate.appendChild(graduate_option_3);

        school_year.appendChild(optgroup_graduate);
        optgroup_graduate.label = "Graduate";

      // graduate:business optgroup
      var optgroup_graduate_business = document.createElement("optgroup");

        // option 1
        var graduate_business_option_1 = document.createElement('option');
        graduate_business_option_1.value = "graduate_business_year_1";
        graduate_business_option_1.innerHTML = "1st Year Business";
        optgroup_graduate_business.appendChild(graduate_business_option_1);

        // option 2
        var graduate_business_option_2 = document.createElement('option');
        graduate_business_option_2.value = "graduate_business_year_2";
        graduate_business_option_2.innerHTML = "2nd Year Business";
        optgroup_graduate_business.appendChild(graduate_business_option_2);

        school_year.appendChild(optgroup_graduate_business);
        optgroup_graduate_business.label = "Graduate: Business";

      // graduate:law optgroup
      var optgroup_graduate_law = document.createElement("optgroup");

        // option 1
        var graduate_law_option_1 = document.createElement('option');
        graduate_law_option_1.value = "graduate_law_year_1";
        graduate_law_option_1.innerHTML = "1st Year Law";
        optgroup_graduate_law.appendChild(graduate_law_option_1);

        // option 2
        var graduate_law_option_2 = document.createElement('option');
        graduate_law_option_2.value = "graduate_law_year_2";
        graduate_law_option_2.innerHTML = "2nd Year Law";
        optgroup_graduate_law.appendChild(graduate_law_option_2);

        // option 3
        var graduate_law_option_3 = document.createElement('option');
        graduate_law_option_3.value = "graduate_law_year_3";
        graduate_law_option_3.innerHTML = "3rd Year Law";
        optgroup_graduate_law.appendChild(graduate_law_option_3);

        school_year.appendChild(optgroup_graduate_law);
        optgroup_graduate_law.label = "Graduate: Law";

      // graduate:medical optgroup
      var optgroup_graduate_medical = document.createElement("optgroup");

        // option 1
        var graduate_medical_option_1 = document.createElement('option');
        graduate_medical_option_1.value = "graduate_medical_year_1";
        graduate_medical_option_1.innerHTML = "1st Year Medical";
        optgroup_graduate_medical.appendChild(graduate_medical_option_1);

        // option 2
        var graduate_medical_option_2 = document.createElement('option');
        graduate_medical_option_2.value = "graduate_medical_year_2";
        graduate_medical_option_2.innerHTML = "2nd Year Medical";
        optgroup_graduate_medical.appendChild(graduate_medical_option_2);

        // option 3
        var graduate_medical_option_3 = document.createElement('option');
        graduate_medical_option_3.value = "graduate_medical_year_3";
        graduate_medical_option_3.innerHTML = "3rd Year Medical";
        optgroup_graduate_medical.appendChild(graduate_medical_option_3);

        // option 4
        var graduate_medical_option_4 = document.createElement('option');
        graduate_medical_option_4.value = "graduate_medical_year_4";
        graduate_medical_option_4.innerHTML = "4th Year Medical";
        optgroup_graduate_medical.appendChild(graduate_medical_option_4);

        school_year.appendChild(optgroup_graduate_medical);
        optgroup_graduate_medical.label = "Graduate: Medical";

      // graduate:dental optgroup
      var optgroup_graduate_dental = document.createElement("optgroup");

        // option 1
        var graduate_dental_option_1 = document.createElement('option');
        graduate_dental_option_1.value = "graduate_dental_year_1";
        graduate_dental_option_1.innerHTML = "1st Year Dental";
        optgroup_graduate_dental.appendChild(graduate_dental_option_1);

        // option 2
        var graduate_dental_option_2 = document.createElement('option');
        graduate_dental_option_2.value = "graduate_dental_year_2";
        graduate_dental_option_2.innerHTML = "2nd Year Dental";
        optgroup_graduate_dental.appendChild(graduate_dental_option_2);

        // option 3
        var graduate_dental_option_3 = document.createElement('option');
        graduate_dental_option_3.value = "graduate_dental_year_3";
        graduate_dental_option_3.innerHTML = "3rd Year Dental";
        optgroup_graduate_dental.appendChild(graduate_dental_option_3);

        // option 4
        var graduate_dental_option_4 = document.createElement('option');
        graduate_dental_option_4.value = "graduate_dental_year_4";
        graduate_dental_option_4.innerHTML = "4th Year Dental";
        optgroup_graduate_dental.appendChild(graduate_dental_option_4);

        school_year.appendChild(optgroup_graduate_dental);
        optgroup_graduate_dental.label = "Graduate: Dental";
    
      // graduate:other optgroup
      var optgroup_graduate_other = document.createElement("optgroup");

        // option 1
        var graduate_other_option_1 = document.createElement('option');
        graduate_other_option_1.value = "graduate_other";
        graduate_other_option_1.innerHTML = "Grad Student - Other";
        optgroup_graduate_other.appendChild(graduate_other_option_1);

        // option 2
        var graduate_other_option_2 = document.createElement('option');
        graduate_other_option_2.value = "post_doctorate";
        graduate_other_option_2.innerHTML = "Post-Doctorate";
        optgroup_graduate_other.appendChild(graduate_other_option_2);

        school_year.appendChild(optgroup_graduate_other);
        optgroup_graduate_other.label = "Graduate: Other";
    }
  }
}

addLoadEvent(function() {
  var school_year = document.getElementById("school_year");
  if(school_year) {
    setYearInSchoolOptions(school_year);
  }
});


/**********************************************************************************************
  add anchor to each table row and update detail pane with appropriate results data
**********************************************************************************************/

function showLoanDetails(container, row_number, programGK, programUrl) {
  //document.location.href = "#results"; // set document location - bring table to top of page

  var all_details = getElementsByClassName(document, "div", "details"); // set all detail divs to var so they can be set to hidden
  for(i=0; i<all_details.length; i++) {
    all_details[i].style.display="none"; // hide any detail containers that aren't already hidden
  }

  var original_row = container.replace(/[^0-9]+/g,''); // original row number of loan program in results table
  var active_row = document.getElementById(row_number).rowIndex; // current row number; accounts for resorting of results

  //alert("original_row: " + original_row + "\n active_row: " + active_row);

  // set current tabs
  var current_tabs = "loan_range_tabs_" + active_row;
  initializetabcontent(current_tabs); // function resides in tab_content.js

  // clear any existing instances of class="active_row"
  var table = document.getElementById("results");
  var rows = table.getElementsByTagName("tr");
  for(i=0; i<rows.length; i++) {
    rows[i].className="";
  }

  // highlight active table row
  var highlight_row = (active_row - -1); // minus negative one because for some reason plus one only concatenates the values
  rows[highlight_row].className="active_row";

  // show appropriate detail container
  var container = document.getElementById(container);
  container.style.display="block";  // show appropriate detail container

  // set pointer position
  var pointer = document.getElementById("pointer_" + original_row);
  if (active_row != "") { // if active_row is null then let default css positioning stay in place
    var pointer_top = 50 + (47 * (active_row - 1)); // distance from top of page to render pointer - start with 50px and then add 47 for each row
    pointer.style.top = pointer_top + "px";
  }

  // write apply link to detail pane
  var apply_wrapper = document.getElementById("apply_wrapper_" + original_row);
  while (apply_wrapper.firstChild) { // first remove any existing child nodes
    apply_wrapper.removeChild(apply_wrapper.firstChild);
  }
  var new_span = document.createElement("span");
  var apply_link = '<input type="image" src="/LoanFinder/images/buttons/apply_large.gif" width="148" height="40" alt="apply now" onclick="window.open(\'' + programUrl + '\');doApply(\'lead\',2,' +programGK + ',\'' + row_number +'\');"/>';
  new_span.innerHTML = apply_link;
  apply_wrapper.appendChild(new_span);
  preparePopupLinks(); // re-prepare popuplinks since this link was create after page loan, which is when preparePopupLinks is otherwise called

}


/**********************************************************************************************
  add anchor to each table row and update detail pane with appropriate results data
**********************************************************************************************/

function resetResults() {
  var all_details = getElementsByClassName(document, "div", "details"); // set all detail divs to var so they can be set to hidden
  for(i=0; i<all_details.length; i++) {
    all_details[i].style.display="none"; // hide any detail containers that aren't already hidden
  }

  var instructions = document.getElementById("instructions");
  instructions.style.display="block";

  // clear any existing instances of class="active_row"
  var table = document.getElementById("results");
  var rows = table.getElementsByTagName("tr");
  for(i=0; i<rows.length; i++) {
    rows[i].className="";
  }

}


/**********************************************************************************************
  update LoanFinder app options based on loan type
**********************************************************************************************/

function updateLoanOptions() {

  var loan_type_federal_plus = document.getElementById("loan_type_federal_plus");
  var loan_type_federal_stafford = document.getElementById("loan_type_federal_stafford");
  var loan_type_federal_grad_plus = document.getElementById("loan_type_federal_grad_plus");

  var rate_structure_select = document.getElementById("rateStructureTypeID");

  var repayment_term_wrapper = document.getElementById("repayment_term_wrapper");
  var repayment_term_wrapper_grad_plus = document.getElementById("repayment_term_wrapper_grad_plus");
  var repayment_term_wrapper_alt = document.getElementById("repayment_term_wrapper_alt");
  
  var help_repayment_plan = document.getElementById("help_repayment_plan");
  var help_repayment_plan_alt = document.getElementById("help_repayment_plan_alt");

  var credit_section_wrapper = document.getElementById("credit_section_wrapper");
  var cosigner_wrapper = document.getElementById("cosigner_wrapper");
  var credit_level_wrapper = document.getElementById("credit_level_wrapper");


  // cosigner
  if(((loan_type_federal_plus) && (loan_type_federal_plus.checked == true))
        || ((loan_type_federal_stafford) && (loan_type_federal_stafford.checked == true))
        || ((loan_type_federal_grad_plus) && (loan_type_federal_grad_plus.checked == true))) {
    // remove cosigner question
    //cosigner_wrapper.style.display = "none";
    
    // remove the credit question
    //credit_level_wrapper.style.display = "none";
    credit_section_wrapper.style.display = "none";
  }
  else {
    // replace cosigner question
    //cosigner_wrapper.style.display = "block";

    // replace credit questions
    //credit_level_wrapper.style.display = "block";
    credit_section_wrapper.style.display = "block";
    
  }

  // repayment term options
  
  //If loan type is plus loan
  if(loan_type_federal_plus && loan_type_federal_plus.checked == true) {
    // replace repayment term with plus repayment term
    repayment_term_wrapper.style.display = "none";
    repayment_term_wrapper_alt.style.display = "block";
    repayment_term_wrapper_grad_plus.style.display = "none";
    help_repayment_plan.style.display = "none";
    help_repayment_plan_alt.style.display = "block";

    //Update the loan cosigner to have no cosigner indicated for gov loan
    document.getElementById("cosigner_no").checked=true;
    
    //set the rate structure to 'Pay Principal and Interest' and disable
    for (var i = 0; i < rate_structure_select.length; i++) {
      
      //select the option with value 1 (which should have text == 'Pay Principal and Interest')
      if (rate_structure_select.options[i].value == '1') {
        rate_structure_select.options[i].selected = true;
        rate_structure_select.disabled = true;
        break;
      }
    }
  }
  //If loan type is grad plus
  else if(loan_type_federal_grad_plus && loan_type_federal_grad_plus.checked == true){
    // replace repayment term with plus repayment term
	repayment_term_wrapper.style.display = "none";
	repayment_term_wrapper_alt.style.display = "none";
	repayment_term_wrapper_grad_plus.style.display = "block";
	help_repayment_plan.style.display = "block";
    help_repayment_plan_alt.style.display = "none";

    //Update the loan cosigner to have no cosigner indicated for gov loan
    document.getElementById("cosigner_no").checked=true;
	
	//enable rate structure if disabled
    if(rate_structure_select.disabled == true){
      rate_structure_select.options[0].selected = true;
      rate_structure_select.disabled = false;
    }
  }
  //If loan type is other
  else {
    // replace plus and grad plus repayment terms with repayment term
    repayment_term_wrapper.style.display = "block";
    repayment_term_wrapper_alt.style.display = "none";
    repayment_term_wrapper_grad_plus.style.display = "none";
    help_repayment_plan.style.display = "block";
    help_repayment_plan_alt.style.display = "none";

    //enable rate structure if disabled
    if(rate_structure_select.disabled == true){
      rate_structure_select.options[0].selected = true;
      rate_structure_select.disabled = false;
    }
  }

}

/*********************************************************
* Clear cosigner and credit values (and anything else)
* and updateLoanOptions
***********************************************************/
function switchLoanAndUpdateLoanOptions(){

    document.getElementById("cosigner_yes").checked=false;
    document.getElementById("cosigner_no").checked=false;
    document.getElementById("creditLevelID").value=-1;
    updateLoanOptions();
    if (document.getElementById("loan_type_federal_stafford").checked) {
        document.getElementById("cosigner_no").checked=true;
    }

}

/**********************************************************************************************
  display correct verbiage on Credit Question based on the user and cosigner option
**********************************************************************************************/

function displayCreditQuestion() {
	
	var lbl_cosigner = document.getElementById("lbl_cosigner");
	var lbl_credit_level = document.getElementById("lbl_credit_level");
	var cosigner_yes = document.getElementById("cosigner_yes");
	//var cosigner_no = document.getElementById("cosigner_no");
	var utypeID = document.getElementById("utypeID");
	
	if (utypeID.value == 1) { //PARENT
		lbl_cosigner.innerHTML = "Will you or a U.S. Citizen be co-signing for the student?";
		if (cosigner_yes.checked) {
			lbl_credit_level.innerHTML = "Please classify the co-signer's credit:";
		} else {
			lbl_credit_level.innerHTML = "Please classify the student's credit:";
		}
	}	
	if (utypeID.value == 2) { //STUDENT
		lbl_cosigner.innerHTML = "Will you have a U.S. Citizen co-signer?";
		if (cosigner_yes.checked) {
			lbl_credit_level.innerHTML = "Please classify the co-signer's credit:";
		} else {
			lbl_credit_level.innerHTML = "Please classify your credit:";
		}
	}	

}

/**********************************************************************************************
  display cosigner message on LoanFinder app if no option is chosen
**********************************************************************************************/

function displayCosignerMessage() {


  var cosigner_message = document.getElementById("cosigner_message");
  var utypeID = document.getElementById("utypeID");
  
  if (utypeID.value == 1) { //PARENT
  	cosigner_message.firstChild.nodeValue="A Student's chances of being approved are much greater and they may qualify for better terms on their loan if they apply with a credit worthy co-signer.";
  }
  else if (utypeID.value == 2) { //STUDENT
  	cosigner_message.firstChild.nodeValue="Your chances of approval are much greater and you may qualify for better terms on your loan if you apply with a credit-worthy co-signer.";
  }
  cosigner_message.style.display="block";
  
  new Effect.Highlight(cosigner_message, {startcolor:'#ffff99', endcolor:'#ffffff', duration: 3.0}); // script.aculo.us effect on message

}

addLoadEvent(function() {
  var cosigner_no = document.getElementById("cosigner_no");
  if((cosigner_no) && (cosigner_no.checked == true)) {
    displayCosignerMessage();
  }
});


/**********************************************************************************************
  highlight errors
**********************************************************************************************/

function highlightErrors() {

  var validation_errors = getElementsByClassName(document, "div", "error");
  for(i=0; i<validation_errors.length; i++) {
    new Effect.Highlight(validation_errors[i], {startcolor:'#ffffff', endcolor:'#ff3300', duration: 2.0}); // script.aculo.us effect on message
  }
}

addLoadEvent(function() {
  var validation_errors = getElementsByClassName(document, "div", "error");
  if(validation_errors) {
    highlightErrors();
  }
});


/**********************************************************************************************
  add dollar sign before instances of id loan_amount
**********************************************************************************************/

function dollarSigns(loan_amount) {
  
  var new_span = document.createElement("span");
  var new_text = document.createTextNode("$");
  new_span.appendChild(new_text);
  
  var container = loan_amount.parentNode;
  container.insertBefore(new_span,loan_amount);
  
}

addLoadEvent(function() {
  var loan_amount = document.getElementById("loan_amount");
  if(loan_amount) {
    dollarSigns(loan_amount);
  }
});

/**********************************************************************************************
  JS method to retrieve url string parameters
**********************************************************************************************/

function getURLParams() {
  var params=window.document.location.search.substring(1).split('&');
  if (params != "") {
  	for (t=0;t<params.length;t++) {
  		newvar=params[t].split('=')
  		eval(newvar[0]+'="'+newvar[1]+'"') }
  }

  if (window.partnerGK) {
    var student_link = document.getElementById("student_link");
    var parent_link = document.getElementById("parent_link");
    student_link.href+="&partnerGK="+partnerGK;
    parent_link.href+="&partnerGK="+partnerGK;
    s.campaign=partnerGK;
  }
}


addLoadEvent(function() {
  if(document.getElementById("homepage")) {
    getURLParams();
  }
});

