var SelectedLanguage = 0; 		// 0 - english (by default), 1- french
var EnteredDay, EnteredMonth, EnteredYear;
var DateD = new Array();
var DateEvent = new Array();
var DateObject = new Array();
var EventArray = new Array(); 
var EventNameArray = new Array(); 

var today = new Date();
var currentDay, currentMonth, currentYear;
currentDay = today.getDate();
currentMonth = today.getMonth()+1;
currentYear = today.getYear();
	if(currentYear<1000) currentYear+=1900
	 


				  
				  
				  
// Function used in index.html to set browser to the planner page with date parameters
function LoadWeddingDate(){
var TD = document.WeddingPlan.weddingDate.value
	if(ValidateDate(TD)) {
		if(SelectedLanguage)
			window.location.href = "planner-fr.html?day="+EnteredDay+"&month="+EnteredMonth+"&year="+EnteredYear;
		else
			window.location.href = "planner.html?day="+EnteredDay+"&month="+EnteredMonth+"&year="+EnteredYear;
	}
}
function ResetPlanner() {
	if(SelectedLanguage)
		window.location.href = "planner-fr.html";
	else
		window.location.href = "planner.html";
}


function ReadLocation() {
var Location = window.location.href.split("?"); 
	if(Location[1]) {
		var TempData = Location[1].split("&")
		var Tar = new Array()
			for(i=0; i<TempData.length; i++) {
				var T = TempData[i].split("=");
				Tar[i] = T[1]
			}
		EnteredDay = Tar[0]
		EnteredMonth = Tar[1]
		EnteredYear = Tar[2]
			
		document.WeddingPlanning.EnteredName.value = EnteredDay+"."+EnteredMonth+"."+EnteredYear
		ConvertDates();				//accually replaces default dates with new ones
	}
}


// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

function GetEnteredDate() {
EnteredDay = "";
EnteredMonth = "";
EnteredYear = "";

var TString = document.WeddingPlanning.EnteredName.value;
	if (ValidateDate(TString)) {
			ConvertDates();		//accually replaces default dates with new ones
	}		
}


var PlannerAlerts = new Array();
	PlannerAlerts[0] = new Array("Please enter a date!","Please enter a date in proper format!","is not valid!","Entered Year","Entered month","Entered day")
	PlannerAlerts[1] = new Array("Veuillez entrer une date!","Veuillez entrer une date bien formatée!","est mal inscrit!","L'année","Le mois","Le jour")

function ValidateDate(Tstring) {
var Tarray = new Array();

	if(!Tstring) {
		alert(PlannerAlerts[SelectedLanguage][0])
		//alert("Please enter a date!")
		return false;
	}
	else if(isWhitespace(Tstring)) {
		alert(PlannerAlerts[SelectedLanguage][0])
		return false;
	}
	else if(!isDigitFormat(Tstring)) {
		alert(PlannerAlerts[SelectedLanguage][1])
		//alert("Please enter a date in proper format!")
		return false;
	}
	else {
		Tarray = Tstring.split('.')
		if ((Tarray[2].length != 4) || ((Tarray[2] < 2000) || (Tarray[2] > 2100))) {
			//"Entered Year "" not valid
			alert(PlannerAlerts[SelectedLanguage][3] + " " + Tarray[2] + " " + PlannerAlerts[SelectedLanguage][2])
			return false;
		}
		else if ((Tarray[1] > 12) || (Tarray[1] < 1)) {
			//"Entered month " not valid
			alert(PlannerAlerts[SelectedLanguage][4] + " " + Tarray[1] + " " + PlannerAlerts[SelectedLanguage][2])
			return false;
		}
		else if ((Tarray[0] > 31) || (Tarray[0] < 1)) {
			//"Entered day " not valid
			alert(PlannerAlerts[SelectedLanguage][5] + " " + Tarray[0] + " " + PlannerAlerts[SelectedLanguage][2])
			return false;
		}
		else {
			//alert(document.WeddingPlanning.EnteredName.value + " - VALID!")
			EnteredDay = Tarray[0];
			EnteredMonth = Tarray[1];
			EnteredYear = Tarray[2];
			return true;
		}	
	}	
}


// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

var reWhiteSpace = /^\s+$/
function isWhitespace (s){   
       return reWhiteSpace.test(s)
}

/*
Regular expressions are a notation for describing sequences of characters. For example, the sequence of characters for a real number can be described in English as "zero or more digits, followed by a period, followed by one or more digits." The same sequence of characters can be described in regular expression notation as /\d*\.\d+/. The regular expression starts and ends with a forward slash; \d means "digit between zero and nine"; \. means "period"; * means "zero or more"; and + means "one or more." 
*/

var reDigitFormat = /\d+\.\d+.\d\d\d\d/
function isDigitFormat (s){   
	//alert("reg:" +reDigitFormat.test(s))
       return reDigitFormat.test(s)
}


// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 

function CreateOneDateObject (i,n) {
	DateObject[DateObject.length] = new OneDate(i,n)
	//alert(i + "\nn= " + n)
}

function OneDate (idd,nm) {
	this.id = idd
	this.name = name
	this.date = ""
	this.listOfEvents = new Array()
	this.addChild = function (nn) {
		this.listOfEvents[this.listOfEvents.length] = nn
	}
	
	this.listOfEventText = new Array()
	this.addChildText = function (tt) {
		this.listOfEventText[this.listOfEventText.length] = tt
	}
}

var ArrayOfDatesCreated = false;
var InitialData = new Array();
//this function creates two arrays:
// DateEvent[]
// DateObject[]
function GetDates() {
var AllDivsArray = document.getElementsByTagName("td") 
        for(i=0; i<AllDivsArray.length; i++) { 
        
                if (AllDivsArray[i].className == "DateCell") { 
                    AllDivsArray[i].id =  DateD.length + "|DateCell"; 
                    DateD[DateD.length] = AllDivsArray[i].id; 
					if(!ArrayOfDatesCreated) {
						InitialData[InitialData.length] = AllDivsArray[i].innerHTML
						CreateOneDateObject(AllDivsArray[i].id,AllDivsArray[i].innerHTML)
					}
                }         

                else if (AllDivsArray[i].className == "EventCell") { 
                        AllDivsArray[i].id =  DateEvent.length + "|EventCell"; 
                        DateEvent[DateEvent.length] = AllDivsArray[i].id; 
                }         
        } 
ArrayOfDatesCreated = true;
	//alert(DateEvent)
} 




function GetDateEvents() {
    for(i=0; i<DateEvent.length; i++) { 
		CreateArrayOfInputChildren(i,document.getElementById(DateEvent[i])) 
		for(j=0; j<EventArray.length; j++) {
			// DateObject gets array of checkbox inputs 
			DateObject[i].addChild(EventArray[j])
		}
		//EventNameArray.reverse()
		for(j=0; j<EventNameArray.length; j++) {
			// DateObject gets array of text associated with checkboxes 
			DateObject[i].addChildText(EventNameArray[j])
		}
				
		EventArray = new Array()
		EventArray.length = null
		
		EventNameArray = new Array()
		EventNameArray.length = null
    } 

}



function CreateArrayOfInputChildren(parentIndex, n) {       
    if (n.nodeType == 3 ) {    // Reverse Text nodes 
		// It is a leaf - do nothing 
    } 
    else if (n.nodeName == "INPUT" || n.nodeName == "input" ) { 
		n.id = parentIndex + "|" + EventArray.length + "|" + n.className;
		EventArray[EventArray.length] = n.id  
		//alert(n.nodeName)
    } 
	else if ((n.nodeName == "SPAN" || n.nodeName == "span" ) && (n.className == "eventName") ) { 
		n.id = parentIndex + "|" + EventNameArray.length + "|" + n.className;
		EventNameArray[EventNameArray.length] = n.id  
	
	}
    else {  // For non-Text nodes, recursively reverse the order of the children 
        var kids = n.childNodes; 
        var numkids = kids.length; 
        for(var ch = 0; ch <numkids; ch++) {       // Loop through kids 
            CreateArrayOfInputChildren(parentIndex,kids[ch]);         
        } 
    } 

	
} 
var CrossedElements = new Array();
function ActCheckBox(calledId) {
	var TArr = calledId.split('|')
	var ChildTextId = TArr[0] +"|"+ TArr[1] + "|eventName"
	var Caller = document.getElementById(calledId) 
	var Tobj = document.getElementById(ChildTextId) 
		if (Caller.checked){ 
			Tobj.style.color = "#999999"
			Tobj.style.textDecoration = "line-through"
			CrossedElements[CrossedElements.length] = Tobj.id
			HideAndShow('PlannerFilterHideDisabled','PlannerFilterHide')
		}	
		else {
			Tobj.style.color = "#000000"
			Tobj.style.textDecoration = "none"
			UnCrossElement(Tobj.id) 
			if((CrossedElements.length == null)||(CrossedElements.length == 0)) {
				HideAndShow('PlannerFilterShow','PlannerFilterShowDisabled')
				HideAndShow('PlannerFilterHide','PlannerFilterHideDisabled')
			}
		}	
}

function UnCrossElement(SomeName) {
	//alert(CrossedElements)
	var TempArr = new Array()
		for (s=0; s<CrossedElements.length; s++) {
			if(SomeName!=CrossedElements[s]) {
				TempArr[TempArr.length] = CrossedElements[s]
			}
		}
		CrossedElements = new Array()
		CrossedElements.length = null
		
		for (s=0; s<TempArr.length; s++) {
			CrossedElements[s] = TempArr[s];
		}
	//alert(CrossedElements)
}

//HideAndShow('PlannerFilterHide','PlannerFilterShow');
//HideAndShow('PlannerFilterShow','PlannerFilterHide');

function HideCrossedEvents() {
	HideAndShow('PlannerFilterShowDisabled','PlannerFilterShow')
	for(h=0; h<CrossedElements.length; h++) {
		var TO = document.getElementById(CrossedElements[h])
		TO.parentNode.style.display = "none" //TO.parentNode.style.display = "none"
	}
}
function ShowCrossedEvents() {
	for(h=0; h<CrossedElements.length; h++) {
		var TO = document.getElementById(CrossedElements[h])
		TO.parentNode.style.display = "block"
	}
	HideAndShow('PlannerFilterShow','PlannerFilterShowDisabled');
}

// ========================================================================================================================= 

var Month = new Array()
	Month[0] = new Array ("","January","February","March","April","May","June","July","August","September","October","November","December");
	Month[1] = new Array ("","Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet","Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre");
var MonthDays = new Array ("","31","28","31","30","31","30","31","31","30","31","30","31");
var PreviousFebruaryDays;
var PreviousYear;
var PastDueMessage = new Array ("(past due!)", "(en retard!)")


// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
function ConvertDates() {
PreviousYear = EnteredYear - 1;
var pastDue = 0;	
var notDday = true;
	for(i=0; i<InitialData.length; i++) {
		var Tob = document.getElementById(DateD[i])
		var TAR = InitialData[i].split(' ')
		
		
			if(TAR[0].indexOf("-")!=-1) {
				var TAAR = TAR[0].split("-")
				TAR[0] = TAAR[0];
				//if(TAAR[0]<TAAR[1])
				//	TAR[0] = TAAR[1];
			}
				
		var TempYear = EnteredYear;
		var TempMonth = Month[SelectedLanguage][(EnteredMonth*1)];
		var TempMonthIndex = 0;
		var TempDay = EnteredDay;	
		
		var TempPreviousMonthIndex = (EnteredMonth*1) - 1;
			if (TempPreviousMonthIndex==0) TempPreviousMonthIndex = 12;
			
		
		if ((TAR[1]=="day") || (TAR[1]=="days") || (TAR[1]=="jour") || (TAR[1]=="jours")) {
			
			//alert(TAR[0] + " -" +TempPreviousMonthIndex)
			TempDay = EnteredDay - TAR[0]
			if (TAR[0]>=31) {
				var AlertWeeks = new Array();
					AlertWeeks[0] = new Array("Please change this date to \"# weeks or month/s before\"!","")
					AlertWeeks[1] = new Array("Veuillez changer la date pour # semaines ou mois  précédents!","")
					alert(AlertWeeks[SelectedLanguage][0])
				
				
				TempDay ="<span class='error'>"+AlertWeeks[SelectedLanguage][0]+"</span>";
				TempMonth = "";
				TempYear = "";
			}
			else if (TempDay<=0) {
				TempDay = MonthDays[TempPreviousMonthIndex]	
				TempMonth = Month[SelectedLanguage][TempPreviousMonthIndex]
				TempMonthIndex = TempPreviousMonthIndex;
				//alert(" days : TempDay = " + TempDay + "\n" + TempMonth)
				if (EnteredMonth==1) 
					TempYear = PreviousYear;
			}	
			else {
				// one day before
				//alert("!TempDay " + TempDay)
				TempMonthIndex = EnteredMonth;
			}

		}
		else if ((TAR[1]=="week") || (TAR[1]=="weeks") || (TAR[1]=="semaine") || (TAR[1]=="semaines")) {
			// 5 weeks - 35 days - can span on three months
			if(TAR[0]>=5)	{
				//alert("Please change this date to \"1 month before\"!")
				var Alertmonth = new Array();
					Alertmonth[0] = new Array("Please change it to \"1 month before\"!","")
					Alertmonth[1] = new Array("Veuillez changer la date pour UN mois précédent!","")
				alert(Alertmonth[SelectedLanguage][0])
				
				TempDay ="<span class='error'>"+Alertmonth[SelectedLanguage][0]+"</span>";
				TempMonth = "";
				TempYear = "";
			}
			else {
				TempDay = (EnteredDay*1) - TAR[0]*7;	
							
				//alert("Weeks to days - " + TempDay + " : " +TempMonth + "\nTempPreviousMonthIndex = " + TempPreviousMonthIndex)	
				
				if (TempDay==0) {
					TempDay = MonthDays[TempPreviousMonthIndex];
					TempMonth = Month[SelectedLanguage][TempPreviousMonthIndex];
					TempMonthIndex = TempPreviousMonthIndex;
				}
				else if  (TempDay<0) {
					TempDay = MonthDays[TempPreviousMonthIndex]*1 + TempDay;	
					TempMonth = Month[SelectedLanguage][TempPreviousMonthIndex]
					TempMonthIndex = TempPreviousMonthIndex;
					if (EnteredMonth==1)	
							TempYear = PreviousYear;
				}
				else {
					TempMonthIndex = EnteredMonth*1
					//alert("TempDay >0 = " +TempDay + "\nTempMonthIndex = " + TempMonthIndex)
				}
			}
		}	
		else if ((TAR[1]=="month") || (TAR[1]=="months")  || (TAR[1]=="months")  || (TAR[1]=="mois") ){
			TempDay = "";
			
			if ((TAR[1]=="months") || ((TAR[1]=="mois") && (TAR[0]!="1")) ){
				if (TAR[0]==12) {
				
					TempMonth = Month[SelectedLanguage][EnteredMonth*1];
					TempMonthIndex = EnteredMonth*1;
					TempYear = PreviousYear;
					
					//alert(EnteredMonth + " " +TempMonth)
				}
				else { 
					TempPreviousMonthIndex = EnteredMonth*1 - (TAR[0]*1)
					if (TempPreviousMonthIndex==0) {
						TempMonth = Month[SelectedLanguage][12];
						TempMonthIndex = 12;
						TempYear = PreviousYear;
					}
					else if	(TempPreviousMonthIndex<0) {
						//alert("EnteredMonth = " + EnteredMonth + " TAR[0] = " + TAR[0] + " TempPreviousMonthIndex = " + TempPreviousMonthIndex)
						TempPreviousMonthIndex = 12  + (TempPreviousMonthIndex*1)
						//alert(TempPreviousMonthIndex)
						TempMonth = Month[SelectedLanguage][TempPreviousMonthIndex];
						TempMonthIndex = TempPreviousMonthIndex;
						TempYear = PreviousYear;
					}	
					else {
						TempMonth = Month[SelectedLanguage][TempPreviousMonthIndex];
						TempMonthIndex = TempPreviousMonthIndex;
					}
				}		
				
			}	
			else {
			//TAR[1]=="month"
				TempDay = (EnteredDay*1)
				TempDay = TempDay + (MonthDays[TempPreviousMonthIndex]*1)
				TempDay = TempDay - (MonthDays[EnteredMonth*1])
				
				TempMonth = Month[SelectedLanguage][TempPreviousMonthIndex];
				TempMonthIndex = TempPreviousMonthIndex;
				//alert("One month before " + TempPreviousMonthIndex)
				if (EnteredMonth==1)	
					TempYear = PreviousYear;
			}		
			
		}	
		else {	
			notDday = false;
			TempMonthIndex = EnteredMonth;
		}
var NewDateString = ""		
var StringBefore = "";
var StringAfter = "";
var PastDue = "";
var PastDueFlag = false;
		
		if (currentYear>TempYear) {
			pastDue++;	
			PastDueFlag = true;
		}
		else if (currentYear==TempYear) {
			//alert("currentYear==TempYear :"+TempYear+"\nTempDay : "+TempDay+"\nTempMonth : " +TempMonth + " TempMonthIndex = " +TempMonthIndex)
			if (currentMonth>TempMonthIndex) {
				pastDue++;	
				PastDueFlag = true;
			}	
			else if(currentMonth==TempMonthIndex) {
			//alert("TempMonthIndex = " +TempMonthIndex+ "\ncurrentDay "+currentDay+"\nTempDay = "+TempDay +"\n" + MonthDays[TempMonthIndex])
					
					if((currentDay>TempDay)&&(TempDay!="")) {
						pastDue++;	
						PastDueFlag = true;
						//alert("TempDay - " + TempDay + "\n"+TempMonthIndex)
					}
			}	
			
		}
		//alert(currentMonth+ " : " + TempPreviousMonthIndex+" - " + pastDue)
		
		if (PastDueFlag) {
			StringBefore = "<div class='pastDue'>";
			StringAfter = "</div>";
			PastDue = PastDueMessage[SelectedLanguage]
		}	
			
		if (notDday) {
			NewDateString = TempDay + " " + TempMonth + ", " + TempYear + "<div class='OriginalData'>" + InitialData[i] +"</div>";
			Tob.innerHTML =  NewDateString + StringBefore + PastDue + StringAfter ;
		}	
			
	}
}

function DisplayEventNumbers() {
var SecuenceCount = 1
var AllDivsArray = document.getElementsByTagName("div") 
        for(i=0; i<AllDivsArray.length; i++) { 
			if (AllDivsArray[i].className == "DateSequenceNumber") 
					AllDivsArray[i].innerHTML = SecuenceCount ++;
		}
		


}
