﻿function OnError(error) {
    alert(error.get_message());
}

function SendEmail(userId) {
    var container = document.getElementById("container");

    var html = '<div id="email_form" class="form-container"><div><label for="from">Nafn *</label><input id="from" maxlength="40" class="validate"/></div>';
    html += '<div><label for="email">Netfang *</label><input id="email" maxlength="120" class="validate email" /></div>';
    html += '<div><label for="msg">Skilaboð *</label><textarea id="msg" rows="5" cols="40" class="validate"/></textarea></div>';
    html += '<div><input type="hidden" id="userid" name="userid" value="' + userId + '"/></div>';
    html += '<button onclick="DoSendEmail()" id="send_email_button">Senda</button><button onclick="CancelForm()">Hætta við</button></div>';
    
    container.innerHTML = html;
    container.className = "";
}

function CancelForm() {
    var container = document.getElementById("container");
    container.innerHTML = "";
    container.className = "hide";
}

function DoSendEmail() {
    var user = document.getElementById("userid").value;
    var name = document.getElementById("from").value;
    var msg = document.getElementById("msg").value;
    var email = document.getElementById("email").value;

    if(validateForm("email_form", "vantar", "", "er ekki rétt")) {
        document.getElementById("send_email_button").disabled = true;
        Farthegi.SOAP.farthegi.SendEmail(user, email, msg, name, OnEmailSent, OnError);
    }
}

function OnEmailSent(results) {
    alert("Pósturinn var sendur");
    
    var container = document.getElementById("container");
    
    if(container) {
        container.innerHTML = "";
        container.className = "hide";
    }
}

function GetMyRides() {
    var userId = document.getElementById("loggedinuser").value;
    
    GetRides(userId);
}

function GetRides(userId) {
    document.getElementById("rides_container").innerHTML = "Uppfæri lista...";
    
    if(userId == undefined) {
        Farthegi.SOAP.farthegi.GetRides(OnRidesUpdated);    
    } else {
        Farthegi.SOAP.farthegi.GetMyRides(userId, OnRidesUpdated);  
    }
}

function OnRidesUpdated(results) {
    if(results != null) {
        document.getElementById("rides_container").innerHTML = results;
    }
}

function ViewRide(id) {
    var ride = document.getElementById(id);
    
    if(ride.className == "hide") {
        ride.className = "";
    } else {
        ride.className = "hide";
    }
}

function DeleteRide(entryId) {
    Farthegi.SOAP.farthegi.DeleteRide(entryId, OnRideDeleted, OnError);
}

function OnRideDeleted() {
    GetMyRides();
}

function ShowRecurrance(obj) {
    if(obj != null) {
        if(obj.value == '1') {
            document.getElementById("single_ride").style.display = '';
            document.getElementById("recurring_ride").style.display = 'none';
            
            makeOptional("ride_recurrancestart");
            makeOptional("ride_recurranceto");
            makeMandatory("ride_date", "validate");
        } else {
            document.getElementById("single_ride").style.display = 'none';
            document.getElementById("recurring_ride").style.display = '';
            
            makeMandatory("ride_recurrancestart", "validate");
            makeMandatory("ride_recurranceto", "validate");
            makeOptional("ride_date");
        }
    }
}

function CreateRide() {
    var container = document.getElementById("container"); 

    var html = '<div id="ride_form" class="form-container"><div><label for="ride_type">Tegund fars *</label><select id="ride_type"><option value="1" selected="selected">Far í boði</option><option value="2">Far óskast</option></select></div>';
    html += '<div><label for="ride_numberofseats">Fjöldi sæta *</label><input id="ride_numberofseats" class="validate numbers" maxlength="3" /></div>';
    html += '<div><label for="ride_recurrance">Endurtekning ferðar *</label><select id="ride_recurrance" onchange="ShowRecurrance(this)"><option value="1" selected="selected">Stök ferð</option><option value="2">Regluleg</option></select></div>';
    html += '<div id="single_ride">';
    html += '<div><label for="ride_date">Dagsetning ferðar *</label><input id="ride_date" class="validate" maxlength="10" onfocus="PickADate(event, this, \'ride_date\')" /></div>';
    html += '<div class="clear"></div>';
    html += '</div>';
    html += '<div id="recurring_ride" style="display:none">';
    html += '<div><label for="ride_recurrancestart">Ferðir byrja</label><input id="ride_recurrancestart" maxlength="10" onfocus="PickADate(event, this, \'ride_recurrancestart\')"/></div>';
    html += '<div><label for="ride_recurranceto">Ferðir enda</label><input id="ride_recurranceto" maxlength="10"  onfocus="PickADate(event, this, \'ride_recurranceto\')"/></div>';
    html += '<div class="checkbox"><label for="ride_onmondays">Á mánudögum</label><input type="checkbox" id="ride_onmondays" /></div>';
    html += '<div class="checkbox"><label for="ride_ontuesdays">Á þriðjudögum</label><input type="checkbox" id="ride_ontuesdays" /></div>';
    html += '<div class="checkbox"><label for="ride_onwednesdays">Á miðvikudögum</label><input type="checkbox" id="ride_onwednesdays" /></div>';
    html += '<div class="checkbox"><label for="ride_onthursdays">Á fimmtudögum</label><input type="checkbox" id="ride_onthursdays" /></div>';
    html += '<div class="checkbox"><label for="ride_onfridays">Á föstudögum</label><input type="checkbox" id="ride_onfridays" /></div>';
    html += '<div class="checkbox"><label for="ride_onsaturdays">Á laugardögum</label><input type="checkbox" id="ride_onsaturdays" /></div>';
    html += '<div class="checkbox"><label for="ride_onsundays">Á sunnudögum</label><input type="checkbox" id="ride_onsundays" /></div>';
    html += '<div class="clear"></div>';
    html += '</div>';
    html += '<div><label for="ride_time">Tími ferðar *</label>';
    html += '<select id="ride_time">';
    html += '<option value="00:00">00:00</option>';
    html += '<option value="01:00">01:00</option>';
    html += '<option value="02:00">02:00</option>';
    html += '<option value="03:00">03:00</option>';
    html += '<option value="04:00">04:00</option>';
    html += '<option value="05:00">05:00</option>';
    html += '<option value="06:00">06:00</option>';
    html += '<option value="07:00">07:00</option>';
    html += '<option value="08:00">08:00</option>';
    html += '<option value="09:00" selected="selected">09:00</option>';
    html += '<option value="10:00">10:00</option>';
    html += '<option value="11:00">11:00</option>';
    html += '<option value="12:00">12:00</option>';
    html += '<option value="13:00">13:00</option>';
    html += '<option value="14:00">14:00</option>';
    html += '<option value="15:00">15:00</option>';
    html += '<option value="16:00">16:00</option>';
    html += '<option value="17:00">17:00</option>';
    html += '<option value="18:00">18:00</option>';
    html += '<option value="19:00">19:00</option>';
    html += '<option value="20:00">20:00</option>';
    html += '<option value="21:00">21:00</option>';
    html += '<option value="22:00">22:00</option>';
    html += '<option value="23:00">23:00</option>';    
    html += '</select>';
    html += '</div>';
    html += '<div><label for="ride_postcodefrom">Frá póstnúmeri *</label><select id="ride_postcodefrom"><option>Sæki póstnúmer...</option></select></div>';
    html += '<div><label for="ride_postcodeto">Til póstnúmers *</label><select id="ride_postcodeto"><option>Sæki póstnúmer...</option></select></div>';
    html += '<div><label for="ride_streetfrom">Frá götu</label><input id="ride_streetfrom" maxlength="50" /></div>';
    html += '<div><label for="ride_streetto">Til götu</label><input id="ride_streetto" maxlength="50" /></div>';
    html += '<div><label for="ride_comments">Athugasemdir</label><textarea id="ride_comments" rows="5" cols="30"></textarea></div>';
    html += '<button onclick="DoCreateRide()" id="create_ride_button">Vista</button><button onclick="CancelForm()">Hætta við</button></div>';
    
    GetPostCodes("ride_postcodefrom", 0); 
    GetPostCodes("ride_postcodeto", 0);
       
    container.innerHTML = html;
    container.className = "";
    
    return false;
}

function GetPostCodes(obj, selected, select) {
    if(select == undefined) {
        select = false;
    }
    
    Farthegi.SOAP.farthegi.FillPostCodeMenu(obj, selected, select, OnFillMenu, OnError);
}

function OnFillMenu(results) {
    if(results != null) {
        //For IE
        if(document.all) {
            var container = document.getElementById(results[0]);
            var onChangeFunction = container.getAttribute("onchange");
            var onBlurFunction = container.getAttribute("onblur");
            
            var className = container.className;
            container.outerHTML = '<select id="' + results[0] + '" class="' + className + '">' + results[1] + '</select>';
            
            var containerBox = $(results[0]);
            
            if(onBlurFunction != null && onBlurFunction != undefined) {
                containerBox.addEvent(
                    'blur', onBlurFunction                    
                );                
            }
            
            if(onChangeFunction != null && onChangeFunction != undefined) {
                containerBox.addEvent(
                    'change', onChangeFunction
                );
            }            
        } else {
            document.getElementById(results[0]).innerHTML = results[1];
        }
    }
}

function DoCreateRide() {    
    var user = document.getElementById("loggedinuser").value;
    var numberofseats = document.getElementById("ride_numberofseats").value;
    var type = document.getElementById("ride_type").value;
    var recurrance = document.getElementById("ride_recurrance").value;
    var isregular = (recurrance == '1') ? false : true;
    var date = document.getElementById("ride_date").value;
    var start = document.getElementById("ride_recurrancestart").value;
    var end = document.getElementById("ride_recurranceto").value;
    var onmondays = document.getElementById("ride_onmondays").checked;
    var ontuesdays = document.getElementById("ride_ontuesdays").checked;
    var onwednesdays = document.getElementById("ride_onwednesdays").checked;
    var onthursdays = document.getElementById("ride_onthursdays").checked;
    var onfridays = document.getElementById("ride_onfridays").checked;
    var onsaturdays = document.getElementById("ride_onsaturdays").checked;
    var onsundays = document.getElementById("ride_onsundays").checked;
    var time = document.getElementById("ride_time").value;
    var postcodefrom = document.getElementById("ride_postcodefrom").value;
    var postcodeto = document.getElementById("ride_postcodeto").value;
    var streetfrom = document.getElementById("ride_streetfrom").value;
    var streetto = document.getElementById("ride_streetto").value;
    var comments = document.getElementById("ride_comments").value;
    var type = document.getElementById("ride_type").value;

    if(validateForm("ride_form", "vantar", "", "er ekki rétt")) {
        document.getElementById("create_ride_button").disabled = true;
        Farthegi.SOAP.farthegi.CreateRide(user, type, comments, time, date, isregular, onmondays, ontuesdays, onwednesdays, onthursdays, onfridays, onsaturdays, onsundays, start, end, postcodefrom, postcodeto, streetfrom, streetto, numberofseats, OnRideCreated, OnError);
    }
}

function OnRideCreated(results) {
    alert("Farið var sett inn");
    
    var  ridesContainer = document.getElementById("rides_container");
    
    if(ridesContainer) {
        ridesContainer.innerHTML = "Uppfæri lista...";
    }
    
    var container = document.getElementById("container");
    
    if(container) {
        container.innerHTML = "";
        container.className = "hide";
    }    
    
    GetRides();    
}

function Refresh() {
    document.location.href = document.location.href;
}

/*** Form validations ***/

function trim(text) {
    return text.replace(/^\s*|\s*$/g, "");
}

function validateForm(formId, missingText, passwordText, incorrectText, expiredText) {

    if(!passwordText)
        passwordText = "";
        
    if(!incorrectText)
        incorrectText = "";
        
    if(!expiredText)
        expiredText = "";
        
    var form = document.getElementById(formId);
    var inputs = form.getElementsByTagName("input");    
    var textareas = form.getElementsByTagName("textarea");
    
    var validated = true;
    
    var validatedInputs = validateElements(inputs, missingText, passwordText, incorrectText, expiredText);
    var validatedTextareas = validateElements(textareas, missingText, passwordText, incorrectText, expiredText);
    
    return (validatedInputs && validatedTextareas);
}

function validateElements(inputs, missingText, passwordText, incorrectText, expiredText) {
    
    var validated = true;
    
    for(var i = 0; i < inputs.length; i++)
    {
        var currInput = inputs[i];
        var parent = currInput.parentNode;
        var label;
        var missing;
        var smallText;
        
        var checkEmail = (currInput.className.indexOf("email") > -1 && !validateEmail(currInput.value));
        var checkCVC = (currInput.className.indexOf("cvc") > -1 && !validateCVCNumber(currInput.value));
        var checkCCN = (currInput.className.indexOf("ccn") > -1 && !validateCreditCardNumber(currInput.value));
        var checkCEXP = (currInput.className.indexOf("cexp") > -1 && !validateCCExpires(currInput.value,currInput.className));
        var checkSSN = (currInput.className.indexOf("ssn") > -1 && !validateSSN(currInput.value));
        var checkEmailConfirm = (currInput.className.indexOf("cmail_") > -1 && !validateEmailConfirm(currInput.value, currInput.className));
        var checkPassword = (currInput.className.indexOf("password_") > -1 && !validatePassword(currInput.value, currInput.className));
        var checkAlphanumeric = (currInput.className.indexOf("alphanumeric") > -1 && !validateAlphaNumerics(currInput.value));
        var checkNumbers = (currInput.className.indexOf("numbers") > -1 && !validateNumerics(currInput.value));
        var checkAlphabet = (currInput.className.indexOf("alphabet") > -1 && !validateAlphabet(currInput.value));

        //Validate mandatory fields
        if(currInput.className.indexOf("validate") > -1 || currInput.className.indexOf("required") > -1) {
            
            currInput.className = currInput.className.replace("required","validate");
            
            label = parent.getElementsByTagName("label")[0];
            
            if(label != null) {
                var origLabel = (label.getAttribute("orig") != null && label.getAttribute("orig") != "") ? label.getAttribute("orig") : label.innerHTML;
                
                label.innerHTML = origLabel;
                label.className = "";
            }
                       
            if(trim(currInput.value) == "" || checkEmail || checkSSN || checkPassword || checkAlphabet || checkNumbers || checkAlphanumeric || checkEmailConfirm || checkCVC || checkCCN || checkCEXP)
            {
                validated = false;
                currInput.className = currInput.className.replace("validate","required");         
                
                label = parent.getElementsByTagName("label")[0];
                var origLabel = (label.getAttribute("orig") != null && label.getAttribute("orig") != "") ? label.getAttribute("orig") : label.innerHTML;                
                var errorLabel = "";
                
                label.setAttribute("orig", origLabel);
                
                if(trim(currInput.value) == "") {
                    errorLabel = origLabel.replace(" *","") + " " + missingText;
                } else if (checkPassword || checkEmailConfirm) {
                    errorLabel = passwordText;
                } else if(checkCCN || checkCVC || checkEmail || checkNumbers || checkAlphabet || checkAlphanumeric || checkSSN) {
                    errorLabel = origLabel.replace(" *","") + " " + incorrectText;
                } else if(checkCEXP) {
                    errorLabel = expiredText;
                }
                
                label.innerHTML = errorLabel;
                label.className = "red";
            }
        } //Validate optional fields if they are filled in
        else if((currInput.className.indexOf("optional") > -1 || currInput.className.indexOf("incorrect") > -1) && trim(currInput.value) != "") {
            
            currInput.className = currInput.className.replace("incorrect","optional");
            
            label = parent.getElementsByTagName("label")[0];
            var origLabel = (label.getAttribute("orig") != null && label.getAttribute("orig") != "") ? label.getAttribute("orig") : label.innerHTML;
            
            label.innerHTML = origLabel;
            label.className = "";
            
            if(checkEmail || checkSSN || checkPassword || checkEmailConfirm || checkAlphabet || checkNumbers || checkAlphanumeric || checkCVC || checkCCN || checkCEXP)
            {
                validated = false;
                currInput.className = currInput.className.replace("optional","incorrect");         
                
                label = parent.getElementsByTagName("label")[0];
                origLabel = (label.getAttribute("orig") != null && label.getAttribute("orig") != "") ? label.getAttribute("orig") : label.innerHTML;
                
                errorLabel = "";
                
                label.setAttribute("orig", origLabel);
                
                if(incorrectText == "")
                    incorrectText = missingText;

                if(checkSSN || checkCCN || checkNumbers || checkAlphanumeric || checkAlphabet || checkCVC ) {
                    errorLabel = origLabel.replace(" *","") + " " + incorrectText;
                } else if(checkCEXP) {
                    errorLabel = expiredText;
                } else if (checkPassword || checkEmailConfirm) {
                    errorLabel = passwordText;
                } else {
                    errorLabel = origLabel.replace(" *","") + " " + missingText;
                }                
                
                label.innerHTML = errorLabel;
                label.className = "red";
            }
        }
        else {            
            label = parent.getElementsByTagName("label")[0];
            
            if(label != null) {
                var origLabel = (label.getAttribute("orig") && label.getAttribute("orig") != "") ? label.getAttribute("orig") : label.innerHTML;
                
                label.innerHTML = origLabel;
                label.className = "";
            }
        }
    }
    return validated;
}

function validatePassword(value, compareValueObj) {
    var validation = (compareValueObj.indexOf("validate") > -1) ? "validate " : "optional ";

    var tmp1 = compareValueObj.replace(validation,"");
    var tmp2 = tmp1.replace("required ","");
    var tmp3 = tmp2.replace("incorrect ","");
    var compareValue = document.getElementById(tmp3.replace("password_","")).value;
    
    if(value != compareValue)
        return false;
    else
        return true;
}

function validateSSN(src)
{
    var regex = /[0-9]/g;
    
    if(src.length != 10) {
        return false;
    } else {
        if(regex.test(src))
        {
            return true;
        }
        else {
            return false;
        }
    }
}

function validateEmail(src)
{
    var regex=/([a-zA-Z0-9_-])+(\.{0,1})+([a-zA-Z0-9_-])+([\.][a-zA-Z0-9_-]+){0,1}@{1}([a-zA-Z0-9_-])+(\.{1})+([a-zA-Z0-9]{0,4})+(\.{0,1})+[a-zA-Z]{2,4}$/;

    if(regex.test(src)) {
         return true;
    } else {
        return false;
    }
}

function validateEmailConfirm(value, compareValueObj) {
    var tmp1 = compareValueObj.replace("validate ","");
    var tmp2 = tmp1.replace("required ","");
    var compareValue = document.getElementById(tmp2.replace("cmail_","")).value;
    
    if(value != compareValue)
        return false;
    else
        return true;
}

function validateNumerics(src) {
    var allowed = /^-{0,1}\d+$/;
    
    if(allowed.test(src)) {
        return true;
    }else {
        return false;
    }
}

function validateAlphaNumerics(src) {
    var allowed = /[^a-z0-9_]/;
    
    if(allowed.test(src)) {
        return false;
    }else {
        return true;
    }
}

function validateAlphabet(src) {
    var allowed = /[^a-z]/;
    
    if(allowed.test(src)) {
        return false;
    }else {
        return true;
    }
}

function validateNumber(obj) {
    var allowed = /[^0-9]/g;
    
    var value = obj.value;
    
    obj.value = value.replace(allowed,'');
}

function validateCreditCardNumber(CCN)
{
    var Valid_Numbers = "0123456789";
    var CreditCard_Numbers = "";
    
    for (var i=0; i < CCN.length; i++)
    {
        Temp = CCN.charAt(i);
        if (Valid_Numbers.indexOf(Temp,0) != -1) { CreditCard_Numbers += Temp; }
    }
    
    var Sum_CreditCard = CreditCard_Numbers.length / 2;
    
    if (Sum_CreditCard < 6.5 || Sum_CreditCard > 8 || Sum_CreditCard == 7)
        return false;
    
    var CreditCard_Even = Math.floor(Sum_CreditCard);
    var CreditCard_Odd = Math.ceil(Sum_CreditCard) - CreditCard_Even;
    var Temp2 = 0;

    for (var i=0; i<CreditCard_Even; i++)
    {
        a = CreditCard_Numbers.charAt(i*2+CreditCard_Odd) * 2;
        Temp2 += a > 9 ? Math.floor(a/10 + a%10) : a;
    }

    for (var i=0; i<CreditCard_Even+CreditCard_Odd; i++) {
        Temp2 += CreditCard_Numbers.charAt(i*2+1-CreditCard_Odd) * 1;
    }

    return (Temp2%10 == 0);
    return false;
}

function validateCVCNumber(src) {
    var cv=/^\d{3}$/;
    
    if (src.length > 3)
    {
        return false;
    }    
    else if (src.length < 3)
    {
        return false;
    }
    else if (src.search(cv)==-1)
    {
        return false;
    }
    else {
        return true;
    }
}

//Checks if the credit card has expired or not
function validateCCExpires(month, yearObj) {
    var yearId = yearObj.replace("validate ","").replace("required ","").replace("cexp_","");
    var year = document.getElementById(yearId).value;

    var today = new Date();
    var currentMonth = (today.getMonth() + 1);
    var currentYear = today.getFullYear();
    
    if(month.substring(0,1) == 0) {
        month = month.substring(1,2);
    }
    
    if(currentYear < year) {
        return true;
    } else if (currentYear == year && currentMonth <= month) {
        return true;
    }
    else {
        return false;
    }
}

//Converts an optional field to a mandatory field
function makeMandatory(fieldToChangeId, nameOfClass) {
    var fieldToChange = document.getElementById(fieldToChangeId);
    fieldToChange.className = nameOfClass;
    
    var label = fieldToChange.parentNode.getElementsByTagName("label")[0];
    
    if(label != null) {        
        if(label.innerHTML.indexOf("*") < 0) {
            label.innerHTML = label.innerHTML + " *";
        }
    }
}

//Converts a mandatory field to an optional field
function makeOptional(fieldToChangeId) {
    var fieldToChange = document.getElementById(fieldToChangeId);
    var parent = fieldToChange.parentNode;
    
    fieldToChange.className = "";
    var label = parent.getElementsByTagName("label")[0];
    
    if(label != null) {        
        label.innerHTML = label.innerHTML.replace(" *","");
    }
}

//Limit the number of characters in a text area 
function limitCharacters(obj,limit) {
    var text = obj.value;
    
    if(text.length > limit) {
        obj.value = text.substring(0,limit);
    }
}

//Clear a form on cancel
function clearForm(form) {
    var formContainer = document.getElementById(form);
    var formValues = formContainer.getElementsByTagName("input");
        
    for(var i = 0; i < formValues.length; i++) {
        var input = formValues[i];
        
        if(input.type == "text" || input.type == "hidden" || input.type == "password") {
            input.value = "";
        } else if(input.type == "checkbox") {
            input.checked = false;
        }
    }
}


/**** Author: Tinna Karen @ 21. Nov 2006 *****

Last modified on: 17. Mars 2008 by Tinna Karen

Usage: 

in the html code place a div with id = cal_container 
and then call the createCalendar function

Example:

For big calendar: 

<div id="cal_container_6"></div> (where 6 is the position of the news module)
<script>createCalendar('2','2006','is','0','6')</script>

For small calendar:

<div id="overlay_container_6"></div>
<div id="cal_container_6"></div> (where 6 is the position of the news module)
<script>createCalendar('2','2006','is','0','6')</script>

*****/


/*** function: createCalendar 

This is the initital function to call
It takes 5 parameters:
1. month - month to display in the calendar (format: d (1-12))
2. year - year to display in the calendar (format: yyyy);
3. lang - language to use for calendar headers
	is - for icelandic
	en - for english
	se - for swedish
4. border - value for the table border [0,1]
5. position - value of the news module position

Use CSS for other attributes

Example:

.cal_container table {}
.cal_container table td {}
.cal_container table th {}

****/

// Detect if the browser is IE or not.
// If it is not IE, we assume that the browser is NS.
var ie	= document.all;
var ns6	= document.getElementById&&!document.all;
var lang = "en";
var pos = "0";
var obj = "cal_container";
var _months = new Array("","January","February","March","April","May","June","July","August","September","October","November","December");
var allowOldDatePick = false;

if (!document.all) document.captureEvents(Event.MOUSEMOVE)
document.onmousemove = getMouseXY;

var tempX = 0;
var tempY = 0;

function createCalendar(month,year,language,border,position,objname)
{
	var selDate = new Date();
	var selMonth = selDate.getMonth() + 1;
	var selYear = selDate.getFullYear();
	lang = language;
	pos = position;
	obj = objname;
	
	if(!(selMonth == month && selYear == year))
	{
		selMonth = month;
		selYear = year;
	}
	
	var firstDate = new Date()
	firstDate.setFullYear(selYear,selMonth-1,1);
	
	buildCalendar(firstDate.getDay(),lang,border,month,year,obj);
}

function buildCalendar(weekday,lang,border,month,year,obj)
{
	var container = document.getElementById(obj + "_" + pos);
	
	//Clear the calendar container
	container.innerHTML = "";
	
	var tbl_cal = document.createElement("table");
	tbl_cal.setAttribute("border",border);
	tbl_cal.setAttribute("cellSpacing","0");
	tbl_cal.setAttribute("cellPadding","0");
			
	var tbl_header = document.createElement("thead");
	var tbl_body = document.createElement("tbody");

	var dayCount = 1;
	var cellCount = 0;
	
	//fill in the headers
	if(lang == "is")
		var weekArray = new Array("Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau");
	else if(lang == "se")
		var weekArray = new Array("S", "M", "T", "O", "T", "F", "L");
	else 
		var weekArray = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); 
		
	var weekClasses = new Array("weekend","weekday","weekday","weekday","weekday","weekday","weekend");
	
	var tbl_row_1 = document.createElement("tr");
	tbl_row_1.setAttribute("id","row_1");
	
	for(i = 0; i < 7; i++)
	{
		var th_elm = document.createElement("th");
		th_elm.className = weekClasses[i];
		th_elm.innerHTML = weekArray[i];
		tbl_row_1.appendChild(th_elm);
	}
	
	tbl_header.appendChild(tbl_row_1);
	tbl_cal.appendChild(tbl_header);
	
	var tbl_row_2 = document.createElement("tr");
	tbl_row_2.setAttribute("id","row_2");	
	
	//put fillers in the first date row
	for(i = 0; i < weekday; i++)
	{
		var td_elm = document.createElement("td");
		td_elm.innerHTML = "&nbsp";
		td_elm.className = "top";
		
		if(i == 0)
		    td_elm.className += " first";
		    
		tbl_row_2.appendChild(td_elm);
		cellCount++;
	}
	
	//fill in the dates in the first date row
	for(i = weekday; i < 7; i++)
	{
		var td_elm = document.createElement("td");
		td_elm.setAttribute("id","date_" + pos + "_" + dayCount);
		td_elm.innerHTML = dayCount;
		td_elm.setAttribute("daypicker", year + "-" + month + "-" + dayCount);
		td_elm.className = "caldate top";
		
        if(isToday(dayCount,month,year))
			td_elm.className += " today";
			
		if(i == 6)
		    td_elm.className += " last";
		
		if(i == 0)
		    td_elm.className += " first";
		
		if(isPast(dayCount,month,year))
			td_elm.className += " past";
			
		tbl_row_2.appendChild(td_elm);
		dayCount++;
		cellCount++;
	}
	
	tbl_body.appendChild(tbl_row_2);
	
	
	//fill the rest of the rows up to the last day of the month
	
	var breakpoint = false;
	var lastDayOfMonth = 31;
	
	var isLeapYear = (year%4==0)^(year%100==0)^(year%400==0);
	
	if(month == 2)
	{
		if(isLeapYear)
			lastDayOfMonth = 29;
		else
			lastDayOfMonth = 28;
	}
	else if(month == 4 || month == 6 || month == 9 || month == 11)
	{
		lastDayOfMonth = 30;
	}	
	
	for(i = dayCount; i < lastDayOfMonth; i++)
	{
		var tr_elm = document.createElement("tr");
		
		for(j = 0; j < 7; j++)
		{
			if(dayCount > lastDayOfMonth)
				breakpoint = true;
			else
			{
				var td_elm = document.createElement("td");
				td_elm.setAttribute("id","date_" + pos + "_" + dayCount);
				td_elm.innerHTML = dayCount;
				td_elm.className = "caldate";
				td_elm.setAttribute("daypicker", year + "-" + month + "-" + dayCount);
				
				if(isToday(dayCount,month,year))
					td_elm.className += " today";
					
				if(j == 6)
				    td_elm.className += " last";
				
				if(j == 0)
				    td_elm.className += " first";
				    
				if(isPast(dayCount,month,year))
					td_elm.className += " past";
			
				tr_elm.appendChild(td_elm);
				cellCount++;
				dayCount++;
			}
		}
		
		if(breakpoint)
		{
			//fill up table before stopping
			var fill = 7-(cellCount % 7);
			
			if(fill != 7)
			{
				for(i = 0; i < fill; i++)
				{
					var td_elm = document.createElement("td");
					td_elm.innerHTML = "&nbsp";
					tr_elm.appendChild(td_elm);
					
					if(i == fill-1)
				        td_elm.className = "last";
				}	
				tbl_body.appendChild(tr_elm);
			}
			break;
		}
		else {	
			tbl_body.appendChild(tr_elm);
		}
	}	
		
	tbl_cal.appendChild(tbl_body);
	container.appendChild(tbl_cal);
}

function isToday(day, month, year)
{
	var today = new Date();
	var todayDate = today.getDate();
	var todayMonth = today.getMonth() + 1;
	var todayYear = today.getFullYear();
	
	if(todayDate == day && todayMonth == month && todayYear == year)
		return true;
	else
		return false;
}

function isPast(day, month, year)
{
	var today = new Date();
	today.setHours(0, 0, 0, 0);

	var selectedDate = new Date();	
	selectedDate.setFullYear(year, month-1, day);

	if(selectedDate < today)
		return true;
	else
		return false;
}

function fillDate(day,obj)
{
	//remove 0 from day if it's 01-09
	if(day.substring(0,1) == "0")
	{
		day = day.substring(1,day.length);
	}

	var cell = document.getElementById("date_" + pos + "_" + day);
	var div = document.createElement("div");
	div.className = "cell_data";

	div.innerHTML = document.getElementById(obj).innerHTML;
	cell.appendChild(div);
}

function getMouseXY(e) {
	
	if (!ns6) { // grab the x-y pos.s if browser is IE
		tempY = event.clientY + document.body.scrollTop
	} else {  // grab the x-y pos.s if browser is NS
		tempY = e.pageY
    }  

	// catch possible negative values in NS4
	if (tempY < 0){tempY = 0}
	if (tempX < 0){tempX = 0}
	
	if (!ns6) { // grab the x-y pos.s if browser is IE
		tempX = event.clientX + document.body.scrollLeft
	} else {  // grab the x-y pos.s if browser is NS
		tempX = e.pageX
    }
}

var cancelHideOverlay = false;

function showOverlay(day) {
    var overlay = document.getElementById("over_" + pos + "_" + day);
    var windowWidth = document.body.offsetWidth;
    var ySize = windowWidth-tempX-25;
    
    overlay.style.pixelTop = tempY;
    overlay.style.pixelRight = ySize;
    
    overlay.setAttribute("style","right:" + (ySize) + "px;top:" + tempY + "px;");
    
    overlay.className = "overlay";
    
    setTimeout("hideOverlay('" + day + "')",3000);
}

function overlayMouseOut() {
    cancelHideOverlay = false;
}

function overlayMouseOver() {
	cancelHideOverlay = true;
}

function hideOverlay(day) {
    if(!cancelHideOverlay) {
	    var overlay = document.getElementById("over_" + pos + "_" + day);
        overlay.className = "hide";
    } else {
        setTimeout("hideOverlay('" + day + "')",1000);
    }
}

function fillDateNumber(day,obj,eventdate,fulldate)
{
	//remove 0 from day if it's 01-09
	if(day.substring(0,1) == "0")
	{
		day = day.substring(1,day.length);
	}
	
	var ecevent = document.getElementById(obj);
	var cell = document.getElementById("date_" + pos + "_" + day);
	
	if(cell != null)
	{
		if(cell.innerHTML != day) {
			cell.innerHTML = "";
			var link = document.createElement("a");
			
			var event_hover = "Click here to see a list of deliveries for this day";
			
			if(lang == "is")
				event_hover = "Smelltu hér til að sjá lista af skilaverkefnum fyrir þennan dag";
			else if(lang == "se")
				event_hover = "Click here to see a list of deliveries for this day";
				
			link.title = event_hover;
			link.innerHTML = day;
			link.href = "javascript:showOverlay('" + day + "')";
			cell.appendChild(link);
			
			var overlay = document.getElementById("over_" + pos + "_" + day);
			
			if(overlay != null)
			{				
				var overlay_c = document.getElementById("over_content_" + pos + "_" + day);
				var overlay_text = document.createElement("p");
				var overlay_link = document.createElement("a");
				overlay_link.innerHTML = ecevent.title;
				overlay_link.href = ecevent.href;
				overlay_text.appendChild(overlay_link);
				overlay_c.appendChild(overlay_text);
			}
		}
		else {
			cell.innerHTML = "";
			var link = document.createElement("a");
			link.title = ecevent.title;
			link.href = ecevent.href;
			link.innerHTML = day;
			cell.appendChild(link);
			
			var overlay = document.createElement("div");
			overlay.setAttribute("id","over_" + pos + "_" + day);
			
			if(window.addEventListener) {
			    overlay.addEventListener('mouseover', overlayMouseOver, false);
			    overlay.addEventListener('mouseout', overlayMouseOut, false);

			} else {
    			overlay.attachEvent("onmouseover", overlayMouseOver);
    			overlay.attachEvent("onmouseout", overlayMouseOut);
			}
			
			//overlay.onmouseout = overlayMouseOut(day)		
			overlay.className = "hide";
			
			var overlay_heading = document.createElement("h4");
			overlay_heading.innerHTML = "Delivered on " + fulldate + ":";
			
			var overlay_content = document.createElement("div");
			overlay_content.setAttribute("id","over_content_" + pos + "_" + day);
			overlay_content.className = "content";
			
			var overlay_container = document.getElementById("overlay_container" + "_" + pos);
			
			var overlay_text = document.createElement("p");
			var overlay_link = document.createElement("a");
			overlay_link.innerHTML = ecevent.title;
			overlay_link.href = ecevent.href;
			overlay_text.appendChild(overlay_link);
			
			overlay_content.appendChild(overlay_heading);
			overlay_content.appendChild(overlay_text);
			overlay.appendChild(overlay_content);
			overlay_container.appendChild(overlay);
		}
	}
}

function getCalendar(month, year, obj, pos, ajax) {
    if(ajax == undefined)
        ajax = false;

    createCalendar(month,year,lang,'0',pos, obj);
    
    var heading = document.getElementById("heading_" + obj + "_" + pos);
    var prev_link = document.getElementById("prev_calendar_" + pos);
    var next_link = document.getElementById("next_calendar_" + pos);
    
    heading.innerHTML = '<span class="upper_case">' + _months[month] + ' ' + year + '</span>';
    
    var nextMonth = (month == 12) ? 1 : (month*1 + 1);
    var nextYear = (month == 12) ? (year*1 + 1) : year;
    var prevYear = (month == 1) ? (year*1 - 1) : year;
    var prevMonth = (month == 1) ? 12 : (month*1 - 1);
    
    prev_link.href = "javascript:getCalendar('" + prevMonth + "','" + prevYear + "', '" + obj + "', '" + pos + "', " + ajax + ")";
    next_link.href = "javascript:getCalendar('" + nextMonth + "','" + nextYear + "', '" + obj + "', '" + pos + "', " + ajax + ")";
    
    //Use ajax to get deliveries for this month
    if(ajax) {
        getCalendarProjects(month, year);
    }
}

function getCalendarProjects(month, year) {
    ecSoftware.ecTasks.Web.SOAP.FrontEnd.GetProjectsForCalendar(month, year, OnFillCalendar, OnError);
}

function OnFillCalendar(results) {
    if(results != null) {
        for(var i = 0; i < results.length; i++) {
            var deliveryDate = new Date(results[i].Delivered);
            var fullday = deliveryDate.toDateString();;
            var day = deliveryDate.getDate() + "";
            var project = document.createElement("a");
            project.setAttribute("id","pro_" + results[i].Id);
            project.setAttribute("title",results[i].Name);
            project.setAttribute("href","javascript:OpenProject(" + results[i].Id + ")");
            project.className = "hide";
            document.body.appendChild(project);
            
            fillDateNumber(day, "pro_" + results[i].Id, 6, fullday);
            
            document.body.removeChild(project);
        }
    }
}

function GetSelectedDay(value, type) {
    var year;
    var month;
    var day;
    var today = new Date();
    
    if(value == "") {        
        year = today.getFullYear();
        month = (today.getMonth() + 1);
        day = today.getDate();
    } else {
        var arr = value.split("-");
        
        if(arr.length == 3) {
            year = arr[0] * 1;
            month = arr[1] * 1;
            day = arr[2] * 1;
        }
        else {
            year = today.getFullYear();
            month = (today.getMonth() + 1);
            day = today.getDate();
        }
    }
    
    if(type == "year")
        return year;
    else if(type == "month")
        return month;
    else {
        return day;
    }
}

var _tmpFilterObject;
var _tmpFilterId;
var _tmpFilterNo;
var _tmpFocus;

//pos param must be unique per page
function PickADate(oEvent, obj, pos, type, nextfocus, returnobject, id, no) {
    var value = "";
    
    if(type == "project")
        value = obj.innerHTML;
    else 
        value = obj.value;

    var day = GetSelectedDay(value, "day");   
    var month = GetSelectedDay(value, "month");
    var year = GetSelectedDay(value, "year");
    
    if(type == undefined)
        type = "";
    
    if(nextfocus != undefined)
        _tmpFocus = nextfocus;
        
    if(returnobject != undefined)
        _tmpFilterObject = returnobject;
    
    if(id != undefined)
        _tmpFilterId = id;
    
    if(no != undefined)
        _tmpFilterNo = no;
        
    var inputBox = $(obj.getAttribute("id"));
    
    inputBox.addEvent(
        'keyup', function(e) { navigateCalendar(obj, pos, day, e); } 
    )
    
    var calendar;
    var check = document.getElementById("date_box_" + pos);

    if(check) {
        calendar = check;
    } else {
        calendar = document.createElement("div");
        calendar.setAttribute("id","date_box_" + pos);
        
        if(type == "project" || type == "filter") {
            document.body.insertBefore(calendar, document.body.firstChild);
        } else {
            obj.parentNode.insertBefore(calendar, obj);
        }
    }
    
    var top = tempY;
    var left = tempX;
    
    if(type == "project") {        
        if(left > 210) {
            left = left-180;        
        }
        
        if(top > 210 ) {
            top = top-180;
        }
        
        calendar.style.left = left + "px";
        calendar.style.top = top + "px";
    } else if(type == "filter") {
        calendar.style.left = left + "px";
        calendar.style.top = top + "px";
    } else {
        calendar.style.marginTop = "23px";
        calendar.style.marginLeft = "20px";
        calendar.style.position = "absolute";
    }
        
    calendar.className = "datepicker";
    
    PickADateNav(month, year, 'date_container', pos, obj.getAttribute("id"), type);
}

function PickADateNav(month, year, container, pos, objId, type) {
    var obj = document.getElementById(objId);
    
    var calendar = document.getElementById("date_box_" + pos);
    
    var nextMonth = (month == 12) ? 1 : (month*1 + 1);
    var nextYear = (month == 12) ? (year*1 + 1) : year;
    var prevYear = (month == 1) ? (year*1 - 1) : year;
    var prevMonth = (month == 1) ? 12 : (month*1 - 1);
    
    var html = '<div class="heading"><h1 id="heading_date_container_' + pos + '"><span>' + _months[month] + ' ' + year + '</span></h1>';
    html += '<div class="close_calendar img_replace" title="Close calendar"><span>Close</span></div>';
    html += '<div class="navigation">';
    html += '    <span class="hide">[</span><a title="Previous month" id="prev_calendar_' + pos + '" href="javascript:PickADateNav(\'' + prevMonth + '\',\'' + prevYear + '\',\'date_container\',\'' + pos + '\', \'' + obj.getAttribute('id') + '\', \'' + type + '\')" class="img_replace left_arrow"><span>Previous</span></a><span class="hide">]</span>';
    html += '    <span class="hide">[</span><a title="Next month" id="next_calendar_' + pos + '" href="javascript:PickADateNav(\'' + nextMonth + '\',\'' + nextYear + '\',\'date_container\',\'' + pos + '\', \'' + obj.getAttribute('id') + '\', \'' + type + '\')" class="img_replace right_arrow"><span>Next</span></a><span class="hide">]</span>';
    html += '</div></div>';
    html += '<div class="calendar">';
    html += '    <div id="date_container_' + pos + '"></div>';
    html += '</div>';
    
    calendar.innerHTML = html;
    
    createCalendar(month,year,lang,'0',pos, container);
       
    $$('#date_container_' + pos + ' td.caldate').each(function(dateselect){
        if(dateselect.className.indexOf("old") < 0 && !allowOldDatePick) {
            dateselect.addEvents({
	            'click': function(){
                    obj.value = this.getAttribute('daypicker');
                    obj.setAttribute("value",obj.value);
	                if(_tmpFocus != null) document.getElementById(_tmpFocus).focus();
    	            	            
	                calendar.parentNode.removeChild(calendar);
	            }
            });
        } else {
            dateselect.className += " nocursor";
        }
    });
    
    $$('#date_box_' + pos + ' div.close_calendar').each(function(closecal){
        closecal.addEvents({
	        'click': function(){	            
	            calendar.parentNode.removeChild(calendar);
	        }
        });
    });
}

var _TodayNav;

function navigateCalendar(obj, pos, today, oEvent) {
    if(_TodayNav == null) {
        _TodayNav = today;
    }
    
    var todayCell = document.getElementById("date_" + pos + "_" + _TodayNav);
    
    if(todayCell == null) {
        todayCell = document.getElementById("date_" + pos + "_" + 1);
        todayCell.className += " today";
    } else if(todayCell.className.indexOf("today") < 0) {
        todayCell.className += " today";
    }
    
    var container = document.getElementById("date_box_" + pos);
    var keycode;
    
    if (window.event) {
        keycode = window.event.keyCode;
    } else if (oEvent) {
        keycode = oEvent.keyCode;
    }
    
    if(keycode == 27) { //Esc
        if(container != null) {
            container.parentNode.removeChild(container);
            _TodayNav = null;
        }
    } else if(keycode == 37) { //left arrow
        var prev = _TodayNav-1;
        var prevDayCell = document.getElementById("date_" + pos + "_" + prev);

        if(prevDayCell) {
            todayCell.className = todayCell.className.replace("today","");
            prevDayCell.className += " today";
            _TodayNav -= 1;        
        }
    } else if(keycode == 38) { //up arrow
        var prev = _TodayNav-7;
        var prevDayCell = document.getElementById("date_" + pos + "_" + prev);

        if(prevDayCell) {
            todayCell.className = todayCell.className.replace("today","");
            prevDayCell.className += " today";
            _TodayNav -= 7;        
        }
    } else if(keycode == 39) { //right arrow
        var next = _TodayNav+1;
        var nextDayCell = document.getElementById("date_" + pos + "_" + next);

        if(nextDayCell) {
            todayCell.className = todayCell.className.replace("today","");
            nextDayCell.className += " today";
            _TodayNav += 1;        
        }
    } else if(keycode == 40) { //down arrow
        var next = _TodayNav+7;
        var nextDayCell = document.getElementById("date_" + pos + "_" + next);

        if(nextDayCell) {
            todayCell.className = todayCell.className.replace("today","");
            nextDayCell.className += " today";
            _TodayNav += 7;        
        }
    } else if(keycode == 13) {
        obj.value = todayCell.getAttribute('daypicker');
        
        if(container != null) {
            container.parentNode.removeChild(container);
            _TodayNav = null;
        }
    }
}

function getPosition(e) {
    e = e || window.event;
    var cursor = {x:0, y:0};
    
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + 
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + 
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
        
    return cursor;
}
