//declare the required objects

 var Time01;
 var Time01_Hrs ;
 var Time01_Min ;
 var Time01_Sec ;
 var Time01_Type ;
 var Time01_AreaCode;
 
 var FirstActiveAreaCode = 0;
 var LastActiveAreaCode = 3;

 //initialise the required objects
 function setObjects(Time)
 {
     Time01 =document.getElementById(Time);
     Time01_Hrs = document.getElementById(Time+'_Hrs'); 
     Time01_Min = document.getElementById(Time+'_Min');   
     Time01_Sec = document.getElementById(Time+'_Sec');
     Time01_Type = document.getElementById(Time+'_Type');
     Time01_AreaCode = document.getElementById(Time+'_AreaCode');
 }
  
 //set the initial values  
 function setInitialValues(CTime,Hours,Minutes,Seconds,Type)
 {
    //set Time Box
    Time01.value = CTime; 
    
    //set Time components to hidden fields
    Time01_Hrs.value = Hours;
    Time01_Min.value = Minutes;
    Time01_Sec.value = Seconds;
    Time01_Type.value = Type;
 }
 
//create and displays current time
function currentTime(Time)
{
    setObjects(Time);
   
    var mydate=new Date();
    var hours=mydate.getHours();
    var minutes=mydate.getMinutes();
    var seconds=mydate.getSeconds();
    var type="AM";
    if (hours>=12)
        type="PM";
    if (hours>12)
        hours=hours-12;
    if (hours==0)
        hours=12;

    var CTime=alignHrs(hours)+":"+alignMinSec(minutes)+":"+alignMinSec(seconds)+" "+type;

    setInitialValues(CTime,hours,minutes,seconds,type);

}


//sets focus bacword forword
   function setFocus(event,Time)
   {
        var timeid = document.getElementById(Time+'_TimeInterval');
        clearInterval(timeid.value);//stop displaying current system time
         
        var activeArea =document.getElementById(Time+'_AreaCode');
        var nextArea="";
       
        var key = event.keyCode;
        
        if(key >=96 && key<=105)// for numlock keys
            key =key-48; //converting keycode to numeric
        
        if(key == 37) //left 
        {
               if(activeArea.value == FirstActiveAreaCode)//0
                    nextArea = LastActiveAreaCode;//3
               else
                    nextArea =eval(activeArea.value)-1;
               activeArea.value=nextArea;
               moveFocus(Time,nextArea); 
        }
        else if(key == 39)//right
        {
            if(activeArea.value == LastActiveAreaCode)//3
                nextArea = FirstActiveAreaCode;//0
            else
                nextArea =eval(activeArea.value)+1;
            activeArea.value=nextArea;
            moveFocus(Time,nextArea); 
        }
        
        else if((key == 38)||(key == 40))// up and down
                changeTime(Time,event);
        else if((key>=48 && key <=57)||(key>=96 && key <=105)||(key == 80)||(key ==65))
                return handleTime(Time,key);
        return false;
   }




//changes time when user press up / down keys
function changeTime(Time,event)
{
   var key = event.keyCode;
     setObjects(Time);
//  var Time01 = document.getElementById('Time01');
//  var Time01_Hrs = document.getElementById('Time01_Hrs');
//  var Time01_Min = document.getElementById('Time01_Min');
//  var Time01_Sec = document.getElementById('Time01_Sec');
//  var Time01_Type = document.getElementById('Time01_Type');
 // Time01_AreaCode = document.getElementById(Time+'_AreaCode');
    areaCode = Time01_AreaCode.value;//getting area code value
    var hrsTemp ="", minTemp="",secTemp="", typeTemp ="";
  
    if(areaCode == 0)
    {
            hrsTemp = changeHrs(key,eval(Time01_Hrs.value));
            Time01_Hrs.value =hrsTemp;
            updateHrs(Time01,hrsTemp);
            moveFocus(Time,areaCode);
    }
    if(areaCode == 1)
    { 
            minTemp = changeMinSec(key,eval(Time01_Min.value));
            Time01_Min.value =minTemp;
            updateMin(Time01,minTemp); 
            moveFocus(Time,areaCode);
    }
    if(areaCode ==2)
    {
            secTemp = changeMinSec(key,eval(Time01_Sec.value));
            Time01_Sec.value = secTemp;
            updateSec(Time01,secTemp);
            moveFocus(Time,areaCode);
    }
     if(areaCode ==3)
    {
            typeTemp = changeType(key,Time01_Type.value);
            Time01_Type.value = typeTemp;
            updateType(Time01,typeTemp);
            moveFocus(Time,areaCode);
    }
}
//changes the hrs
function changeHrs(key,hrs)
{
    var newHrs ="";
    if(key == 38)//up
    {
        if(hrs == 12)   
            newHrs = 1;
        else
            newHrs = hrs+1;
    }
    if(key == 40)//down
    {
        if(hrs == 1)   
            newHrs = 12;
        else
            newHrs = hrs-1;
    }
   return alignHrs(newHrs);
}

//align the hours value with space
function alignHrs(hrs)
{
    if(hrs<10)
        return " "+hrs;
    else
        return hrs;
}

//align the value of min and Sec
function alignMinSec(time)
{
    if(time<10)
        return "0"+time;
    else
        return time;
}

//set the Hrs
function  updateHrs(timeObj,newhrs)
{
    var time = timeObj.value;
    var timeTemp =time.split(':');
    
    timeObj.value='';
    timeObj.value=timeObj.value.concat(newhrs,":"+timeTemp[1],":"+timeTemp[2]);
   
}

//changes the minuts
function changeMinSec(key,min)
{
    var newMin ="";
    if(key == 38)//up
    {
        if(min == 59)   
            newMin = 0;
        else
            newMin = min+1;
    }
    if(key == 40)//down
    {
        if(min == 0)   
            newMin = 59;
        else
            newMin = min-1;
    }
    return alignMinSec(newMin);
}

//set the minuts
function  updateMin(timeObj,newMin)
{
    var time = timeObj.value;
    var timeTemp =time.split(':');
    
    timeObj.value= '';
    timeObj.value=timeObj.value.concat(timeTemp[0]+":",newMin,":"+timeTemp[2])
}

//set the seconds
function  updateSec(timeObj,newSec)
{
    var time = timeObj.value;
      var timeTemp = time.split(':');
      timeObj.value ='';
      timeObj.value =timeObj.value.concat(timeTemp[0]+":",timeTemp[1]+":",timeTemp[2].replace(timeTemp[2].substring(0,2),newSec));  

}

function changeType(key,type)
{
    var newType ='';
    if((key == 38) ||(key == 40) )//up and down
    {
        if(type == 'PM')   
            newType = 'AM';
        else
            newType = 'PM';
    }
    return newType;
}

//set the type PM/AM
function  updateType(timeObj,newType)
{
        var time = timeObj.value;
        timeObj.value= time.replace(time.substring(14,9),newType);
}

//when mouse clicks in the textbox
  function slectWord(event,Time)
  {
        var timeid = document.getElementById(Time+'_TimeInterval');
        clearInterval(timeid.value);// stop displaying current date
        
        var activeArea =document.getElementById(Time+'_AreaCode');
        var x = event.offsetX;//mouse positions
        var y = event.offsetY;


        if(x>=-1 && x<=16)//Hrs.
            activeArea.value =0;
        if(x>=17 && x<=33)//Mins.
            activeArea.value =1;
        if(x>=37 && x<=51)//Sec
            activeArea.value =2;
        if(x>=52 && x<=76)//Type
            activeArea.value =3;

        moveFocus(Time,activeArea.value);//to set active area focused
  }


//sets focus according to the area code
    function moveFocus(Time,activeArea)
    {
        var rng = document.getElementById(Time).createTextRange();
     
        if(activeArea == 0)//hour area
        {
            rng.moveStart('character',0);
            rng.moveEnd('character',-9);
            rng.select();
            
        }
        if(activeArea == 1)//minut area
        {
            rng.moveStart('character',3);
            rng.moveEnd('character',-6);
            rng.select();
        }
        if(activeArea == 2)//second area
        {
            rng.moveStart('character',6);
            rng.moveEnd('character',-3);
            rng.select();
        }
        if(activeArea == 3)//Pm/Am area
        {
            rng.moveStart('character',9);
            rng.moveEnd('character',-0);
            rng.select();
        }
    }     
//allows user to edit the time
function handleTime(Time,key)
{
    var timeObj = document.getElementById(Time);
    var activeArea =document.getElementById(Time+'_AreaCode');
    var newDigit = String.fromCharCode(key).toUpperCase();
    
    if((key>=48 && key <=57)||(key>=96 && key <=105))
    {
        var digitPlaced;//digit that already in textbox
        switch(activeArea.value)
        {
            case '0': 
                    var newhrs;
                    digitPlaced = document.getElementById('Time01_Hrs');
                    if(digitPlaced.value.length >= 2)
                        digitPlaced.value ='0';
                    newhrs = editHrs(digitPlaced.value, newDigit)
                    updateHrs(timeObj,alignHrs(newhrs));
                    digitPlaced.value = newhrs;
                    break;
            case '1':
                    var newMin;
                    digitPlaced = document.getElementById('Time01_Min');
                    if(digitPlaced.value.length >= 2)
                        digitPlaced.value ='0';
                    newMin = eitMinSec(digitPlaced.value, newDigit)
                    updateMin(timeObj,alignMinSec(newMin));
                    digitPlaced.value = newMin;
                    break;
            case '2':
                    var newSec;
                    digitPlaced = document.getElementById('Time01_Sec');
                    if(digitPlaced.value.length >= 2)
                        digitPlaced.value ='0';
                    newSec = eitMinSec(digitPlaced.value, newDigit)
                    updateSec(timeObj,alignMinSec(newSec));
                    digitPlaced.value = newSec;
                    break;
        }
    }
    else
    {
          if(activeArea.value == 3)
          {
               var newType = editType(key);
               updateType(timeObj,newType);
               document.getElementById('Time01_Type').value = newType;
          }
    }
   moveFocus(Time,activeArea.value);
    return false;
}

//edit the hrs 
function editHrs(digitPlaced, newDigit)
{
    var tempTime ='';
    if((digitPlaced > 1)||(digitPlaced == 0))
                tempTime= newDigit;
    else
    {
        if(newDigit < 3)
                tempTime = digitPlaced + newDigit;
        else
                tempTime = newDigit;
    }
    return tempTime;
}

//edit minuts and seconds
function eitMinSec(digitPlaced, newDigit)
{
    var tempTime ='';
    if((digitPlaced > 5)||(digitPlaced == 0))
        tempTime= newDigit;
    else
        tempTime = digitPlaced + newDigit;
    return tempTime;
}

//edit the type
function editType(key)
{
    var type='';
     if(key == 80)//p
        type = 'PM';
     if(key == 65)//a
        type = 'AM';
     return type;
}

