//$Header: page_utils.js 29-Aug-2011$ ITG118190
//
//Company : Colorcon
//Purpose: This file is a collection of objects that handle various utilities and functions that can be 
//reused across multiple pages.

//Clears the text in the Search field once a user clicks (onFocus) with their mouse.
function cleartext(x){
        document.search.search_term.value ='';
}

//Function that will dynamically position the left navigation.
function position_left_nav_height(){
        var ln_height = document.getElementById('nav_bg_img').offsetHeight;
        var obj = document.getElementById('nav-menu');
        obj.style.top = 0 - ln_height + 3;
}
//This determines if the page was navigated from the search results page and if so it will display the div related
//to the Back to Search Results link.
function display_back_button(){
        var url = document.location.href;
        var back_button = 'back_button=y';
        var url_back = url.substring((url.length - back_button.length ), url.length);
        var div = document.getElementById('back_to_results');

        if (url_back == back_button)
        div.style.visibility = "visible";
}

//This function handles navigating the user to the page selected in a drop down LOV.  Currently used for the 
//Product Finder LOV on the homepage.
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

//Drop Down Tabs Menu- Author: Dynamic Drive (http://www.dynamicdrive.com)
//Created: May 16th, 07'

var tabdropdown={
        disappeardelay: 200, //set delay in miliseconds before menu disappears onmouseout
        disablemenuclick: false, //when user clicks on a menu item with a drop down menu, disable menu item's link?
        enableiframeshim: 1, //1 or 0, for true or false


        //No need to edit beyond here////////////////////////
        dropmenuobj: null, ie: document.all, firefox: document.getElementById&&!document.all, previousmenuitem:null,
        currentpageurl: window.location.href.replace("http://"+window.location.hostname, "").replace(/^\//, ""), //get current page url (minus hostname, ie: http://www.dynamicdrive.com/)

        getposOffset:function(what, offsettype){
                var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
                var parentEl=what.offsetParent;
                        while (parentEl!=null){
                                totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
                                parentEl=parentEl.offsetParent;
                        }
                return totaloffset;
        },

        showhide:function(obj, e, obj2){ //obj refers to drop down menu, obj2 refers to tab menu item mouse is currently over
                if (this.ie || this.firefox)
                        this.dropmenuobj.style.left=this.dropmenuobj.style.top="-500px"
                if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover"){
                        if (obj2.parentNode.className.indexOf("default")==-1) //if tab isn't a default selected one
                                obj2.parentNode.className="selected"
                        obj.visibility="visible"
                        }
                else if (e.type=="click")
                        obj.visibility="hidden"
        },

        iecompattest:function(){
                return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
        },

        clearbrowseredge:function(obj, whichedge){
                var edgeoffset=0
                if (whichedge=="rightedge"){
                        var windowedge=this.ie && !window.opera? this.standardbody.scrollLeft+this.standardbody.clientWidth-15 : window.pageXOffset+window.innerWidth-15
                        this.dropmenuobj.contentmeasure=this.dropmenuobj.offsetWidth
                if (windowedge-this.dropmenuobj.x < this.dropmenuobj.contentmeasure)  //move menu to the left?
                        edgeoffset=this.dropmenuobj.contentmeasure-obj.offsetWidth
                }
                else{
                        var topedge=this.ie && !window.opera? this.standardbody.scrollTop : window.pageYOffset
                        var windowedge=this.ie && !window.opera? this.standardbody.scrollTop+this.standardbody.clientHeight-15 : window.pageYOffset+window.innerHeight-18
                        this.dropmenuobj.contentmeasure=this.dropmenuobj.offsetHeight
                        if (windowedge-this.dropmenuobj.y < this.dropmenuobj.contentmeasure){ //move up?
                                edgeoffset=this.dropmenuobj.contentmeasure+obj.offsetHeight
                                if ((this.dropmenuobj.y-topedge)<this.dropmenuobj.contentmeasure) //up no good either?
                                        edgeoffset=this.dropmenuobj.y+obj.offsetHeight-topedge
                        }
                        this.dropmenuobj.firstlink.style.borderTopWidth=(edgeoffset==0)? 0 : "1px" //Add 1px top border to menu if dropping up
                }
                return edgeoffset
        },

        dropit:function(obj, e, dropmenuID){
                if (this.dropmenuobj!=null){ //hide previous menu
                        this.dropmenuobj.style.visibility="hidden" //hide menu
                        if (this.previousmenuitem!=null && this.previousmenuitem!=obj){
                                if (this.previousmenuitem.parentNode.className.indexOf("default")==-1) //If the tab isn't a default selected one
                                        this.previousmenuitem.parentNode.className=""
                        }
                }
                this.clearhidemenu()
                if (this.ie||this.firefox){
                        obj.onmouseout=function(){tabdropdown.delayhidemenu(obj)}
                        obj.onclick=function(){return !tabdropdown.disablemenuclick} //disable main menu item link onclick?
                        this.dropmenuobj=document.getElementById(dropmenuID)
                        this.dropmenuobj.onmouseover=function(){tabdropdown.clearhidemenu()}
                        this.dropmenuobj.onmouseout=function(e){tabdropdown.dynamichide(e, obj)}
                        this.dropmenuobj.onclick=function(){tabdropdown.delayhidemenu(obj)}
                        this.showhide(this.dropmenuobj.style, e, obj)
                        this.dropmenuobj.x=this.getposOffset(obj, "left")
                        this.dropmenuobj.y=this.getposOffset(obj, "top")
                        this.dropmenuobj.style.left=this.dropmenuobj.x-this.clearbrowseredge(obj, "rightedge")+"px"
                        this.dropmenuobj.style.top=this.dropmenuobj.y-this.clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+1+"px"
                        this.previousmenuitem=obj //remember main menu item mouse moved out from (and into current menu item)
                        this.positionshim() //call iframe shim function
                }
        },

        contains_firefox:function(a, b) {
                while (b.parentNode)
                if ((b = b.parentNode) == a)
                        return true;
                return false;
        },

        dynamichide:function(e, obj2){ //obj2 refers to tab menu item mouse is currently over
                var evtobj=window.event? window.event : e
                if (this.ie&&!this.dropmenuobj.contains(evtobj.toElement))
                        this.delayhidemenu(obj2)
                else if (this.firefox&&e.currentTarget!= evtobj.relatedTarget&& !this.contains_firefox(evtobj.currentTarget, evtobj.relatedTarget))
                        this.delayhidemenu(obj2)
        },

        delayhidemenu:function(obj2){
                this.delayhide=setTimeout(function(){tabdropdown.dropmenuobj.style.visibility='hidden'; if (obj2.parentNode.className.indexOf('default')==-1) obj2.parentNode.className=''},this.disappeardelay) //hide menu
        },

        clearhidemenu:function(){
                if (this.delayhide!="undefined")
                        clearTimeout(this.delayhide)
        },

        positionshim:function(){ //display iframe shim function
                if (this.enableiframeshim && typeof this.shimobject!="undefined"){
                        if (this.dropmenuobj.style.visibility=="visible"){
                                this.shimobject.style.width=this.dropmenuobj.offsetWidth+"px"
                                this.shimobject.style.height=this.dropmenuobj.offsetHeight+"px"
                                this.shimobject.style.left=this.dropmenuobj.style.left
                                this.shimobject.style.top=this.dropmenuobj.style.top
                        }
                this.shimobject.style.display=(this.dropmenuobj.style.visibility=="visible")? "block" : "none"
                }
        },

        hideshim:function(){
                if (this.enableiframeshim && typeof this.shimobject!="undefined")
                        this.shimobject.style.display='none'
        },

isSelected:function(menuurl){
        var menuurl=menuurl.replace("http://"+menuurl.hostname, "").replace(/^\//, "")
        return (tabdropdown.currentpageurl==menuurl)
},

        init:function(menuid, dselected){
                this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body //create reference to common "body" across doctypes
                var menuitems=document.getElementById(menuid).getElementsByTagName("a")
                for (var i=0; i<menuitems.length; i++){
                        if (menuitems[i].getAttribute("rel")){
                                var relvalue=menuitems[i].getAttribute("rel")
                                document.getElementById(relvalue).firstlink=document.getElementById(relvalue).getElementsByTagName("a")[0]
                                menuitems[i].onmouseover=function(e){
                                        var event=typeof e!="undefined"? e : window.event
                                        tabdropdown.dropit(this, event, this.getAttribute("rel"))
                                }
                        }
                        if (dselected=="auto" && typeof setalready=="undefined" && this.isSelected(menuitems[i].href)){
                                menuitems[i].parentNode.className+=" selected_default"
                                var setalready=true
                        }
                        else if (parseInt(dselected)==i)
                                menuitems[i].parentNode.className+=" selected_default"
                }
        }

}





//------------------------- Form Related Functions --------------------------------------//


function MM_showHideLayers() { //v9.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) 
  with (document) if (getElementById && ((obj=getElementById(args[i]))!=null)) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

//Used to show additional selection options based on the lov selected.
function show_contact_lov(){  
var lov_option1="TDSN";
var lov_option2="PTAT";
var lov_option3="GENR";
var lov_option4="FDCF";
var lov_option5="ENEW";
var lov_option6="TRSG";
var sel_value=document.getElementById("contact_sub_type").value;
var sel_index=document.getElementById("contact_sub_type").selectedIndex;
var reg_direct=document.getElementById("contact_sub_type");
var enews_direct=document.getElementById("contact_sub_type");

   if (sel_value == lov_option1)
   document.getElementById(sel_value).style.display = "inline";
   else
   document.getElementById(lov_option1).style.display = "none";   

   if (sel_value == lov_option2)
   document.getElementById(sel_value).style.display = "inline";
   else
   document.getElementById(lov_option2).style.display = "none";    
   
   if (sel_value == lov_option4)
   document.getElementById(sel_value).style.display = "inline";
   else
   document.getElementById(lov_option4).style.display = "none";    
   
   if (sel_value == lov_option6)
   document.getElementById(sel_value).style.display = "inline";
   else
   document.getElementById(lov_option6).style.display = "none";  

   if (sel_value == lov_option3)
   {
       if(reg_direct.options[sel_index].text == 'Regulatoria')
       {
           window.location.href = "/spanish/services/reg/RequestInformation";
       }
       else {
           window.location.href = "/services/reg/RequestInformation";
       }
   }

   if (sel_value == lov_option5)
   {
       if(reg_direct.options[sel_index].text.substr(reg_direct.options[sel_index].text.length-14, 14) == 'The Solid Dose'){
           window.location.href = "/spanish/about/contact/eNews";
       }
       else{
	   window.location.href = "/about/contact/eNews";
       }
   }   
}

//Used on the Regulatory Form to copy values from the Product Code field across to included sub requests via the checkbox action.
function copyValue(inputValue){ 
  var prod_code = (inputValue.value);
  var name_pcode = (inputValue.name.slice(5));
  var hidField = document.getElementById(name_pcode).value;


  if (hidField == "") {  
     if (inputValue.value != hidField){
        document.getElementById(name_pcode).value = prod_code;  
        var p_array = document.getElementsByTagName("textarea");                
        for (var i=0;i<p_array.length;i++) {     
                 var p_array_name = p_array[i].name;
                 if ( p_array_name.slice(5) == name_pcode) { 
                p_array[i].value = prod_code;
                 }
            }
     }
  }
}



//Checkbox selector

function checkbox_validator(inputValue){
   var content_panel = inputValue.name+"_content";

  if (inputValue.checked == true){     
     enableInput(inputValue.name);
     document.getElementById(content_panel).style.display = "block";
   }
   else{
     deleteInput(inputValue.name);
   }
}

//Table Row Selector
function showHide_validator(inputValue){
   var content_panel = inputValue.className+"_content";
 
   if (document.getElementById(content_panel).style.display=="block") {
       document.getElementById(content_panel).style.display = "none";      
   }
   else {
       document.getElementById(content_panel).style.display = "block";
   }
}



//Used to disable and delete input fields on a request_type

function deleteInput(inputName){
   var inputtags = document.getElementsByTagName("input");
   var textareatags = document.getElementsByTagName("textarea");
   var selecttags = document.getElementsByTagName("select");

   for (var i=0; i < inputtags.length; i++) {
     var input = inputtags[i];
        if (input.name.substr(0,4) == inputName) {
          input.checked = false;
          if (input.name != inputName){  //All request fields minus the checkbox get disabled.
              input.disabled = true;              
               switch (input.type){
               	case "radio":
               	 null;
		 break;
		case "checkbox":
		 null;
		 break;
		default:
           	 input.value = '';
		}                 
          }       
        } 
   }

    

   for (var i=0; i < textareatags.length; i++) {
     var input = textareatags[i];
        if (input.name.substr(0,4) == inputName) {
           input.value = '';
           input.disabled = true;
        }
   }
   for (var i=0; i < selecttags.length; i++) {
     var input = selecttags[i];
        if (input.name.substr(0,4) == inputName) {
        document.getElementById(input.id).value = "";
        document.getElementById(input.id).disabled = true;
        }
   }
}



//Used to enable Input fields on a request type.

function enableInput(inputName){
  var inputtags = document.getElementsByTagName("input");
  var textareatags = document.getElementsByTagName("textarea");
  var selecttags = document.getElementsByTagName("select");
  for (var i=0; i < inputtags.length; i++) {
    var input = inputtags[i];
        if (input.name.substr(0,4) == inputName) {
      input.disabled = false;
    }
  }

  for (var i=0; i < textareatags.length; i++) {
    var input = textareatags[i];
        if (input.name.substr(0,4) == inputName) {
      input.disabled = false;
    }
  }

  for (var i=0; i < selecttags.length; i++) {

    var input = selecttags[i];

        if (input.name.substr(0,4) == inputName) {

      input.disabled = false;

        }

  }

}







function changeClass(inputValue){

  var current_class = inputValue.className;

  var content_panel = inputValue.id+"_content";

  var checkbox_name = inputValue.id;

  var inputtags = document.getElementsByTagName("input");

   

  if (document.getElementById(content_panel).style.display=="inline"){

    inputValue.className = "PanelOpen";

   }

   else {

    inputValue.className = "PanelTab";

   }

   

   //Any Selected Tabs remain highlighted

   for (var i=0; i < inputtags.length; i++) {

    var input = inputtags[i];

        if (input.name == checkbox_name && input.checked == true) {

          inputValue.className = "PanelOpen";

    }

  }



}


//Disable and Enable the Hidden Fields in the Form
function disable_hidden(field_array)
{ 
for (var i=0; i < field_array.length; i++) {
  var x = field_array[i];
  
  document.getElementById(x).disabled = true;     
 }
}

function enable_hidden(field_array)
{ 
for (var i=0; i < field_array.length; i++) {
  var x = field_array[i];
  
  document.getElementById(x).disabled = false;     
 }
}


//Character Limit Function used for textarea inputs that are tied to similar sized columns in the staging table
function CharLimit(inputValue, number) {
var textField = inputValue
var textlimit = number

if(textField.value.length > textlimit){ 

textField.value= textField.value.substring(0,textlimit) 
// set field's value equal to 150 characters. 

textField.blur() 
/* move cursor out of form element to keep it from placing itself at position zero, causing an overwrite of the first character */
  }
} 


//Form Validation - Main Call

function validate_form(inputValue){

  var form_id = document.getElementById(inputValue.name).id;

  var request_type = document.getElementById("request_type").value; 

  

  if (request_type == "Regulatory"){

          if (validRegForm()=="T"){               

         if (validContactForm()=="true"){
             document.getElementById(form_id).submit();  

                  }

      }

  }

  else {

     if (validContactForm()=="true"){

         document.getElementById(form_id).submit();  

     }  

  }

}


//Custom validation wrapper to handle Regulatory Form requirements.

function validRegForm(){
  var inputtags = document.getElementsByTagName("input");
  var textareatags = document.getElementsByTagName("textarea");
  var selecttags = document.getElementsByTagName("select");
  var checkbox_count = 0;
  var valid_fields = [];
  var radio_checkbox_array = [];
  var z = 0;
  var y = 0;
  var true_flag;

//Find the checked checkboxes.
for (var i=0; i < inputtags.length; i++) {
   var input = inputtags[i];       
     if (input.checked == true && input.name.length == 4) {
//Get input.name and find all inputs/selects/textareas related to the request sub type.Get Required fields and masks to check.  
    var checkbox_name = input.name;       

//Get fields only in related checkbox      
         var div_inputtags = (document.getElementById(input.name+"_content")).getElementsByTagName("input");
         var div_textareatags = (document.getElementById(input.name+"_content")).getElementsByTagName("textarea");
         var div_selecttags = (document.getElementById(input.name+"_content")).getElementsByTagName("select");        

         for (var q=0; q < div_inputtags.length; q++) {
         var request_inputs = div_inputtags[q];     
              
         if (request_inputs.className == "required") {     
             
        //Only add one radio button name to an array.  This is will used later to validate all radio buttons in that group.
             if (request_inputs.type == 'radio' || request_inputs.type == 'checkbox'){                                      
                                   
                                 if (radio_checkbox_array.toString().match(request_inputs.name)!=request_inputs.name){
                                     radio_checkbox_array[y] = request_inputs.name;
                                     y=y+1;
                                 }
                         }
                         else {
//Validate hidden cofa input fields if related radio buttons are selected
                           switch(request_inputs.name) {
                           case "cofa_lot":                    
                           if (document.getElementById("cofa_batch_1").checked==true){
                               valid_fields[z] = request_inputs.name;        
                               z=z+1;
                           }
                           break;
                           case "test_method_num": 
                           if (document.getElementById("test_method_1").checked==true){
                               valid_fields[z] = request_inputs.name;        
                               z=z+1;
                           }
                           break;
                           case "test_name_method": 
                           if (document.getElementById("test_method_1").checked==true){
                               valid_fields[z] = request_inputs.name;        
                               z=z+1;
                           }
                           break;
                           default:
                               valid_fields[z] = request_inputs.name;        
                               z=z+1;
                           }
                        }                       
//added            
            }
         
         }
                 
         for (var q=0; q < div_textareatags.length; q++) {
              var request_inputs = div_textareatags[q];
    
          if (request_inputs.className == "required") {    
//Validate hidden cofa text area fields if related radio buttons are selected
               switch(request_inputs.name) {
               case "cofa_prod_code":                    
               if (document.getElementById("cofa_batch_0").checked==true){
                           valid_fields[z] = request_inputs.name;        
                           z=z+1;
               }
               break;
               case "test_prod_code": 
               if (document.getElementById("test_method_0").checked==true){
                           valid_fields[z] = request_inputs.name;        
                           z=z+1;
               }
               break;
               default:
                            valid_fields[z] = request_inputs.name;        
                            z=z+1;
               }              
//added         
           }

         }

         for (var q=0; q < div_selecttags.length; q++) {
           var request_inputs = div_selecttags[q]; 
           if (request_inputs.className == "required") {     
              valid_fields[z] = request_inputs.name;    
              z=z+1; 
             }
             
           }
    checkbox_count = checkbox_count+1;
  }             
} 

  if (checkbox_count > 0){
   
     if (validate_required(valid_fields)=="T"){              
                 if (validate_radio_checkbox(radio_checkbox_array)=="T"){
              true_flag="T";
          return true_flag;
                 }
          }
  }
  else  {
        alert(alert_chkbox);
        return false;
  }
}



//This handles the field validation
function validate_required(field)
{    
 var counter = 0;
 var true_flag;
 for (var i=0; i < field.length; i++) {
    var x = field[i];

                   
       if (document.getElementById(x).value==null||document.getElementById(x).value==""||document.getElementById(x).value=="85F12345, 3003, ID12345"){  
                  var content_panel = x.substr(0,4)+"_content";                       
          //Open DropDown
          if (document.getElementById(content_panel).style.display=="none"){
          document.getElementById(content_panel).style.display = "block";        
           }
           document.getElementById(x).focus(); 
           document.getElementById(x).style.border='1px solid red';
           document.getElementById(x).style.background='#E9FEFF';   
                 
       counter = counter+1; 
       }
 }
  if (counter == 0){
          true_flag="T";
  return true_flag;
  }
  else {
       counter = 0;
       alert(alert_reg_fields);
  return false;
  }
}



//Validation for Contact Fields on the Form

function validContactForm(){
        var counter = 0;
        var true_flag;
        var err_field;
    var div_contact_inputtags = (document.getElementById("contact_us_fields")).getElementsByTagName("input");
    var div_contact_selecttags = (document.getElementById("contact_us_fields")).getElementsByTagName("select");    

for (var i=0; i < div_contact_inputtags.length; i++) {
  if (div_contact_inputtags[i].className == "required") {    
      if (validate_required_field(div_contact_inputtags[i])==false){
       counter = counter+1;
      }     
  }
}

for (var i=0; i < div_contact_selecttags.length; i++) {
  if (div_contact_selecttags[i].className == "required") {
      if (validate_required_field(div_contact_selecttags[i])==false){
       counter = counter+1;
      }
  }
} 

if (counter == 0){
         true_flag="true";
  return true_flag;
  }
  else {
  counter = 0;
  alert(alert_contact_fields);
  return false;
  }
}


function validate_radio_checkbox(radio_checkbox_array){

   var true_flag = "T";

// Loop from zero to the one minus the number of radio button selections

   for (i = 0; i < radio_checkbox_array.length; i++){

// If a radio button has been selected it will return true

// (If not it will return false)

     var validate_selection = document.getElementsByName(radio_checkbox_array[i]);  

// set var radio_choice to false

     var selected_choice = false;        

         for (q=0; q < validate_selection.length; q++){

        if (validate_selection[q].checked)

            selected_choice = true; 

         }



// If there were no selections made display an alert box 

     if (!selected_choice){

                 

//identify drop down panel where radio button is located.

        var content_panel = radio_checkbox_array[i].substr(0,4)+"_content";          

                  

//Open DropDown if it is closed.

          if (document.getElementById(content_panel).style.display=="none"){

          document.getElementById(content_panel).style.display = "block";        

           }

           

                alert(alert_radio); 

      return false;

      }

   }

   return true_flag;   

}


//This handles the field validation
function validate_required_field(field){    
 var x = field; 
 
     if (x.value==null||x.value==""){
           x.focus(); 
           x.style.border='1px solid red';
           x.style.background='#E9FEFF';
     return false;
     }
 //validate for an email value and highlight if it is not valid. 
    if (x.id == "email" && x.value!=""){
           apos=x.value.indexOf("@");
       dotpos=x.value.lastIndexOf(".");        
       if (apos<1||dotpos-apos<2){
           x.focus(); 
           x.style.border='1px solid red';
           x.style.background='#E9FEFF';
           return false;
       }
    } 
}

//This function is used to build the in page login links based on the site
function build_login_url(url, site) {
    switch(site)
    {
    case 'spanish':
    window.location.href = '/spanish/Authentication/redirect_url?p_requested_url='+escape(url);
    break;
    default:
    window.location.href = '/Authentication/redirect_url?p_requested_url='+escape(url);
    }    
}









