var calendarWindow;
var today = new Date();
var startYear = today.getFullYear() - 10;
var endYear = today.getFullYear() + 10;
var dateField;
var checkedDate = new Date();
var curMonth; 
var curYear; 
var calframe;
var decimalPointDelimiter = '.';
var dateSyntax = "dd.mm.yyyy";
var dateExample = "17.05.2001";
var sep1 = ".";
var sep2 = ".";
var dayIndex = 0;
var monthIndex = 1;
var yearIndex = 2;

function MM_ghostValidateForm() { //v1.0 by BV
	//alert("MM_ghostValidateForm()");
	var i,p,q,nm,test,num,min,max,commaPos,n;
  	var errors='';
  	var args=MM_ghostValidateForm.arguments;
  	for (i=0; i<(args.length-2); i+=3) { 
    		test=args[i+2]; 
    		commaPos = test.indexOf(",");
    		var name = '';
    		if (commaPos != -1) {
      			name = test.substring(commaPos+1,test.length);
      			test = test.substring(0,commaPos);
    		}    		
    		val=MM_findObj(args[i]);			
    		if (val) { 
    			if (name=='') name=val.name; 			
      		if ((val=val.value)!="") {
        			if (test.indexOf('isEmail')!=-1) { 
          			p=val.indexOf('@');
          			if (p<1 || p==(val.length-1)) errors+='- '+name+' must contain an email address.\n';
        			} 
        			else if (test.indexOf('isDate')!=-1) { 
        				if (!checkDate(val, false)) errors+='- '+name+' dateformat, ie. '+ dateExample +'.\n';
        			}         			
        			else if (test!='R') {        				
        				if (test.indexOf('inRangeF') != -1 || test.indexOf('isFloat') != -1) {
							var regexp = /\,/g;	   	  
	   						val = val.replace(regexp, ".");
	        				if (!isSignedFloat(val)) errors+='- '+name+' must contain a number.\n';
	        				else if (test.indexOf('inRangeF') != -1) { 
	        					p=test.indexOf(':');
	          				min=test.substring(9,p); max=test.substring(p+1);
	          				if (val<min || max<val) errors+='- '+name+' must be a number  '+min+' and '+max+'.\n';
	    					} 
	    				}
	    				else { //Integer	    							
	    					if (!isSignedInteger(val)) errors+='- '+name+' må inneholde et heltall.\n';
	        				else if (test.indexOf('inRange') != -1) { 
	        					p=test.indexOf(':');
	          				min=test.substring(8,p); max=test.substring(p+1);
	          				if (val<min || max<val) errors+='- '+name+' må inneholde et heltall mellom '+min+' og '+max+'.\n';
	    					} 	    					
	    				}
    				} 
    			} 
    			else if (test.charAt(0) == 'R') errors += '- '+name+' is required.\n'; 
    		}
  	} 
  	if (errors) alert('The following error :\n'+errors);
  	document.MM_returnValue = (errors == '');
}
function isSignedInteger (s){
	var startPos = 0;
    if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
    	startPos = 1;    
    return (isInteger(s.substring(startPos, s.length)))
}
function isInteger (s){   
	var i;
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    } return true;
}
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}
function isSignedFloat (s){
	var startPos = 0;
    if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
    	startPos = 1;    
        return (isFloat(s.substring(startPos, s.length)))
}
function isFloat (s)
{   var i;
    var seenDecimalPoint = false;
    if (s == decimalPointDelimiter) return false;
	
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }    
    return true;
}
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}



//
// 	CheckDate works on many date formats:
//
//	dd.mm.yyyy is default format. If you want to use other
//      formats, use setDateSyntax() method for setting the syntax.
//
//	The syntax string must contain dd, mm, yyyy and two seperators.
//	
//	F.ex	mm/dd/yyyy
//		dd/mm-yyyy
//		yyyy,mm,dd
// 	
/////////////////////////////////////////////////////////////////////////////

function openCalendar(aDateField, start,end, left, top, rootPath) 
{		
	if (!rootPath)
	{
		rootPath = "";
	}
	useIFrame = false;
				
	var version = navigator.appVersion;
	if (navigator.appName.indexOf("Explorer") != -1)
  	{ 
  		var msieIndex = version.indexOf("MSIE");
  		if (version.charAt(msieIndex + 5) >= "5")
  		{
  			useIFrame = true;
  		}
  	}
  	else if (navigator.appName.indexOf("Netscape") != -1)
  	{
  		if (version.charAt(0) >= "5")
  		{
  			useIFrame = true;
  		}		
  	}

	checkDate(aDateField.value, false);
	//checkedDate = new Date();
	curMonth = checkedDate.getMonth() + 1;
	curYear = checkedDate.getFullYear();
	
	if (!useIFrame)
	{
		if (!calendarWindow || calendarWindow.closed)
		{
			startYear = start;
			endYear = end;
			dateField = aDateField;		
			calendarWindow = window.open(rootPath + '/util/calendar/calendar.html','calendar',"HEIGHT=180,WIDTH=154,titlebar=no,resizable=yes,dependent=yes");			
			calendarWindow.moveTo(left,top);
			calendarWindow.focus();					
			
		}
		else
		{
			alert("There is already a calendar window open.\nYou must close that window before opening a new.");	
			calendarWindow.focus();
		}
	}
	else
	{
		var found = false;	
		var iFrameCollection = document.getElementsByTagName("IFRAME");
		for (i=0; (i < iFrameCollection.length) && (!found); i++)
		{
			var iFrame = iFrameCollection.item(i);		
			if (iFrame.id == "CALFRAME")
			{
				calframe = iFrame;
				found = true;
			}
		}
		if (calframe)
		{
			if (calframe.style.display == "none")
			{
				startYear = start;
				endYear = end;
				dateField = aDateField;			
				calframe.src = rootPath + "/util/calendar/calendar.html";
				calframe.style.top=top;
				calframe.style.left=left;
				calframe.style.display="block";
			}
			else
			{
				alert("There is already a calendar open.\nYou must close this calendar before opening a new.");
			}				
		}
		else
		{
			alert("IFRAME with id like CALFRAME not found");
		}
	}
}

function getStartYear()
{
	return startYear;	
}

function getEndYear()
{
	return endYear;	
}

function getDateField()
{
	return dateField;
}

function getCheckedDate()
{
	return checkedDate;
}

function getCurMonth()
{
	return curMonth;
}

function getCurYear()
{
	return curYear;
}
function setCurMonth(iCurMonth)
{
	curMonth = iCurMonth;
}

function setCurYear(iCurYear)
{
	curYear = iCurYear;
}


function checkDate(inDate, sendMessage)
{
	//alert("check date" + inDate);	     	
     	
	if (!inDate)
	{
		return true;	
	}
	var sep1Index = inDate.indexOf(sep1);
	var sep2Index = inDate.lastIndexOf(sep2);
	if (sep1Index == -1 || sep2Index == -1)
	{
		if (sendMessage)
    		{
    			alert("Error in date");
    		}		
		return false;	
	}	
	var datefields = new Array();
	datefields[0] = inDate.substring(0,sep1Index);
	datefields[1] = inDate.substring(sep1Index + 1, sep2Index);
	datefields[2] = inDate.substring(sep2Index + 1);
	
	var day = datefields[dayIndex];
	var month = datefields[monthIndex];
	var year = datefields[yearIndex];
	

    	if (isNaN(day) || isNaN(month) || isNaN(year))
    	{
    		if (sendMessage)
    		{
			alert("One of the datefields are not a number");
		}
		return false;
    	}
    	if (month < 1 || month > 12)
    	{
    		if (sendMessage)
    		{
			alert("Month must be entered between 01 and 12");
		}
		return false;
    	}
	
   
	if (year < 100)
	{
		if (sendMessage)
    		{
			alert('Year must be spesified with 4 digits, f.ex 1998 or 2001');
		}
		return false;
	}
	if (!(checkDay(day, month, year)))
	{
		if (sendMessage)
    		{
    			alert("Error in date");
    		}
		return false;
	}			
	checkedDate.setDate(day);
	checkedDate.setMonth(month -1);
	checkedDate.setFullYear(year);
	//curMonth = checkedDate.getMonth() + 1;
	//curYear = checkedDate.getFullYear();
	//alert("date checked" + inDate);	
	return true;
}

function checkDay(day, month, year)
{
    	var maxDay = 31;
	if (day < 1)
	{
		return false;
	}
	if(month == 4 || month == 6 || month == 9 || month == 11)
	{
		maxDay = 30;
	}
	else if(month == 02) 
	{
		if(year % 4 == 0)
		{
			maxDay = 29;
		}
		else
		{
			maxDay = 28;
		}
	}
	if (day > maxDay)
	{
		return false;
	}
  	return true;
}


function makeDateString(aDate)
{
	var datefields = new Array();	
	datefields[dayIndex] = aDate.getDate();
	datefields[monthIndex] = aDate.getMonth();
	datefields[yearIndex] = aDate.getFullYear();	
	var dateString = "" + datefields[0] + sep1 + datefields[1] + sep2 + datefields[2];
	return dateString;
}
function buildDateString(yr, mo, da)
{
	var datefields = new Array();	
	datefields[dayIndex] = da;
	datefields[monthIndex] = mo;
	datefields[yearIndex] = yr;
	var dateString = "" + datefields[0] + sep1 + datefields[1] + sep2 + datefields[2];
	return dateString;	
}

function getDateSyntax()
{
	return dateSyntax;
}

function setDateSyntax(syntax)
{
	dateSyntax = syntax;
	var sep1Index;
	var sep2Index;
	
	sep1 = "";
	sep2 = "";
	dayIndex = "";
	monthIndex = "";
	yearIndex = "";
		
	for (i=0; i < syntax.length; i++)
	{
		var c = syntax.charAt(i);
		if ( (c == ".") || (c == "/") || (c == "-") )
		{
			if (!sep1)
			{
				sep1Index = i;
				sep1 = c;
			}
			else if (!sep2)
			{
				sep2Index = i;
				sep2 = c;
			}
			else
			{
				alert("error in datesyntax");
				return;
			}				
		}
	}
	if (sep1 && sep2)
	{
		var datefields = new Array();
		datefields[0] = syntax.substring(0,sep1Index);
		datefields[1] = syntax.substring(sep1Index + 1, sep2Index);
		datefields[2] = syntax.substring(sep2Index + 1);		
		for (i=0; i < datefields.length; i++)
		{
			if (datefields[i] == "dd")
			{
				dayIndex = i;
			}
			else if (datefields[i] == "mm")
			{
				monthIndex = i;
			}
			else if (datefields[i] == "yyyy")
			{
				yearIndex = i;	
			}
			else
			{
				alert("error in datesyntax");
				return;
			}
		}
	}
	else
	{
		alert("error in datesyntax");
		return;
	}
	
	//Make Example date
	var examplefields = new Array();
	examplefields[dayIndex] = '17';
	examplefields[monthIndex] = '05';
	examplefields[yearIndex] = '2001';
	dateExample = examplefields[0] + sep1 + examplefields[1] + sep2 + examplefields[2];
}




