/*
 *   File: multiforms.js
 *
 */

RE_NAME     = new RegExp(/^[a-zA-Z ]+$/);
RE_EMAIL    = new RegExp(/^[A-Za-z0-9](([_|\.|\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([_|\.|\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/);
RE_USERNAME = new RegExp(/^[a-z0-9\_]+$/);
RE_DECIMAL  = new RegExp(/^[0-9]{1,8}([\.]{1}[0-9]{1,2})?$/);
RE_NUMBER   = new RegExp(/^[0-9]+$/);
RE_PHONE    = new RegExp(/^((\d\d\d)|(\(\d\d\d\)))?\s*[\.-]?\s*(\d\d\d)\s*[\.-]?\s*(\d\d\d\d)$/);
RE_ZIP      = new RegExp(/^[0-9]{5}(([\-\ ])?[0-9]{4})?$/);
RE_URL      = new RegExp(/^(((http(s?))|(ftp))\:\/\/)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk|au)(\:[0-9]+)*(\/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$/i);
RE_STATE    = new RegExp(/^[A-Z]{2}$/);
  
ERROR_NAME       = "Please enter alphabetic characters only";
ERROR_EMAIL      = "Please enter a valid E-mail address";
ERROR_USERNAME   = "Please enter a valid username";
ERROR_DECIMAL    = "Please enter a valid decimal number";
ERROR_NUMBER     = "Please enter a valid number";
ERROR_PHONE      = "Please enter a valid phone number";
ERROR_ZIP        = "Please enter a valid zip code";
ERROR_URL        = "Please enter a valid URL";
ERROR_STATE      = "Please enter a valid State";
ERROR_BLANK      = "Please enter a value"; 

var messageFieldName;
var forFieldConstant = ' for ';

//Function to set required field of the form
 function setupMultiForm(mode)
 {
  var frm = document.multiForm;
  
  with (frm)
   {                   
     
     setRequiredField(name, 'textbox','name');
     setRequiredField(table_layout_id, 'dropdown','table_layout_id');
     setRequiredField(skin_layout_id, 'dropdown','skin_layout_id');
   }
 }
  
//Function to check out the for the required field  

function doMultiFormSubmit(switchTab)
{ 
  var errCnt = 0;
  var frm = document.multiformForm;
  requiredFields.length = 0;
  
  //Setup required fields
  //setupMultiForm(mode);
//  if (frm.elements['commonField[c_first_name]'])
  //Validate form for required fields
  errCnt = validateForm(frm);
  if (frm.radio0 && frm.radio0[1].checked)
     return true;
     //If no errors, submit the form
     if (!errCnt)
     {     
        //if(frm.fieldType.value != 'unique')
        //{   
           for (i=parseInt(frm.startCount.value)-1; i<parseInt(frm.endCount.value); i++)
           {  
              if (frm.elements['FieldName['+i+']'])
              {
                  fieldName        = frm.elements['FieldName['+i+']'].value;
                  fieldLabel       = frm.elements['FieldLabel['+i+']'].value;
                  
                  if (frm[fieldName])
                  {  
                      fieldValue       = frm[fieldName].value;
                      messageFieldName = fieldLabel.replace("<", "");
                      messageFieldName = messageFieldName.replace(">", "");
                      if (frm.elements['ValidationFunctionName['+i+'][0]'])
                      {
                          ruleLength   = frm.elements['FunctionLength['+i+']'].value;
                          for (var j=0; j<parseInt(ruleLength); j++)
                          {
                              ruleType     = frm.elements['ValidationFunctionType['+i+']['+j+']'].value;
                              functionName = frm.elements['ValidationFunctionName['+i+']['+j+']'].value;
                              if (ruleType == 'Frontend-Javascript')
                              {     
                                  //Checks if the current field falls in the unique field range and if the corresponding 
                                  //unique field div is On/Off
                                  
                                  if( validationRequired(frm , i) )
                                  {
                                    //document.getElementsByName(fieldValue)[0].value 
                                    if (!this[functionName](fieldValue))
                                    {
                                       colorItRed(frm , fieldName);
                                       frm[fieldName].focus();
                                       return false;
                                    }
                                    else
                                    {
                                       colorItBlack(frm , fieldName);
                                    }
                                  }
                                  else
                                  {
                                     frm[fieldName].parentNode.style.cssText = "color: #000000;";
                                  }
                              }
                              else frm[fieldName].parentNode.style.cssText = "color: #000000;";

                          }
                          //frm.elements['validationFields[field_value]['+i+']'].value = frm.elements['validationFields[field_name]['+i+']'].value;
                      }
                      else 
                      {
                         if (frm[fieldName].parentNode)
                            frm[fieldName].parentNode.style.cssText = "color: #000000;";
                      }
                  }
              }
           }

        return true;
     }
     else
     {
      alert(INPUT_ERROR_ALERT_MSG);
      return false;
     }
}
  
 var hasRed = new Array();
 /**
  * make the label  and the border of the particular field red
  *
  * @param object frm the from object
  * @param string fieldName the form field name
  * @return true
  */ 
 function colorItRed(frm , fieldName)
 {
     myDiv = frm[fieldName].parentNode.parentNode; 
        
     if(myDiv.tagName == 'TD')
     {
         myDiv = myDiv.parentNode; 
         tdNo  = frm[fieldName].parentNode.parentNode.cellIndex;
     }
     else
     {     
        tdNo  = frm[fieldName].parentNode.cellIndex;
     }
    
     myDiv.cells[tdNo-1].style.color   = 'red';
     frm[fieldName].style.borderColor  = 'red';
      
     hasRed[fieldName] = true;
     
     return true;
 }

 /**
  * make the label  and the border of the particular field red
  *
  * @param object frm the from object
  * @param string fieldName the form field name
  * @return true
  */ 
 function colorItBlack(frm , fieldName)
 {   
     if(hasRed[fieldName])
     {  
        myDiv = frm[fieldName].parentNode.parentNode; 
     
         if(myDiv.tagName == 'TD')
         {
             myDiv = myDiv.parentNode; 
             tdNo  = frm[fieldName].parentNode.parentNode.cellIndex;
         }
         else
         {     
            tdNo  = frm[fieldName].parentNode.cellIndex;
         }
        
        myDiv.cells[tdNo-1].style.color        = 'black';
        frm[fieldName].style.borderColor       = 'black';
        
        hasRed[fieldName] = false;
     }
    
     return true;
 }
 
 /**
  * Checks if a field is required to validate or not
  *
  * @param frm -- the form where the field located
  * @param number i -- the form field number
  * @return true if validation required
  */
 
 function  validationRequired(frm , i) 
 {   
     radioId = parseInt(frm.elements['uniqueCampaignID['+i+']'].value);

     if(radioId>=0)
     {
         //see if the radio button is on or off
         radioId = 'radio'+radioId;
         if(frm[radioId][0].checked)
         {
         	return true;
         }
         else
         {
         	return false;
         }
     }
               
     return true;
 }

function validateUserName(uname)
{
      if (!RE_USERNAME.exec(uname))
      {
         //highlightTableColumn('username');
         alert(ERROR_USERNAME + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}


function validateName(name)
{
      if (!RE_NAME.exec(name))
      {
         //highlightTableColumn('username');
         alert(ERROR_NAME + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function validateEmail(email)
{
      
      if (!RE_EMAIL.exec(email))
      {
         //highlightTableColumn('username');
         alert(ERROR_EMAIL + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function validatePhone(phone)
{
      if (!RE_PHONE.exec(phone))
      {
         //highlightTableColumn('username');
         alert(ERROR_PHONE + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function validateZip(zip)
{
      if (!RE_ZIP.exec(zip))
      {
         //highlightTableColumn('username');
         alert(ERROR_ZIP + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function validateNumber(number)
{
      if (!RE_NUMBER.exec(number))
      {
         //highlightTableColumn('username');
         alert(ERROR_NUMBER + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function validateDecimal(dnumber)
{
      if (!RE_DECIMAL.exec(dnumber))
      {
         //highlightTableColumn('username');
         alert(ERROR_DECIMAL + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function validateUrl(URL)
{
      if (!RE_URL.exec(URL))
      {
         //highlightTableColumn('username');
         alert(ERROR_URL + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function validateState(state)
{
      if (!RE_STATE.exec(state))
      {
         //highlightTableColumn('username');
         alert(ERROR_STATE + forFieldConstant + messageFieldName);
         return false;
      }
      return true;
}

function checkRequiredField(fieldValue)
{
    if (fieldValue == '')
    {
        alert(ERROR_BLANK + forFieldConstant + messageFieldName);
        return false;
    }
    return true;
}

function loadFieldValues()
{
   var frm = document.multiformForm;    
   for (i=parseInt(frm.startCount.value)-1; i<frm.endCount.value; i++)
   {
       //field_name = frm.elements['validationFields[field_name]['+i+']'].value;

       if (frm.elements['FieldValue['+i+']'])
       {
          document.getElementsByName(field_name)[0].value = frm.elements['validationFields[field_value]['+i+']'].value;
       }
      }
   return true;
}

/**
 * Checks if the user had selected any campaign of the current ot in page
 *
 * @param none
 * @return true if found any campaign selected else return false
 */

function submitFrm()
{
    totalCamp = parseInt(document.multiformForm.totalCampaign.value);
    
    doesAnyCampaignSelected = false;
    
    for(i=0; i<totalCamp; ++i)
    {
       if(document.multiformForm.elements['optCampaignName['+i+']'].checked)
       {
          doesAnyCampaignSelected = true;
          break;
       }
    }
    
    if( ! doesAnyCampaignSelected)
    {
       alert('Please select one or more campaign.');
       return false;
    }
    
    return doesAnyCampaignSelected;
}

function submitFilterFrm(totalFilters)
{
    doesAnyFilterSelected = false;
    j=0;

    for(i=0; i<totalFilters; ++i)
    {
       filterNo = document.frmEditor.elements['total_values['+i+']'].value;
       filterId = document.frmEditor.elements['filterIds['+i+']'].value;

       for (j=0; j<filterNo; j++)
       {
           if(document.frmEditor.elements['filter_id['+filterId+']['+j+']'].checked)
           {
              doesAnyFilterSelected = true;
              document.frmEditor.submit();
           }
       }
    }

    if( ! doesAnyFilterSelected)
    {
       alert('Please select one or more filter(s).');
       return false;
    }
}

function showDiv(divID)
{

   element = document.getElementById(divID);
   element.style.display = 'inline';
   
}
function hideDiv(divID)
{
	 element = document.getElementById(divID);
   element.style.display = 'none';
}

function populateCommonFields()
{
  var frm = document.multiformForm;

  commonLength = frm.commonFieldCount.value;

  var i = 0;
  for (i = 0; i<commonLength; i++)
  {
      if (frm.elements['commonFieldNameArray['+i+']'])
         fieldName                 = frm.elements['commonFieldNameArray['+i+']'].value;

     if (frm.elements['commonField['+fieldName+']'])
     {
        //frm.eval(fieldName).value = frm.elements['commonField['+fieldName+']'].value;
         if (frm[fieldName])
         {

           frm[fieldName].value = frm.elements['commonField['+fieldName+']'].value;
           if (frm.hidePrepopulatedFields. value == 'Yes' && frm.elements['commonField['+fieldName+']'] && frm.elements['commonField['+fieldName+']'].value)
           {
            	frm[fieldName].parentNode.parentNode.style.display            = 'none';
//            	frm[fieldName].parentNode.parentNode.parentNode.style.display = 'none';
           }

         }
     }
  }
}