function getObjPosition(obj) {

    var curleft = curtop = 0;

    if (obj.offsetParent) {

        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    return [curleft, curtop];
}

function getObjRelPosition(obj, relObjId) {

    var curleft = curtop = 0;

    if (obj.offsetParent) {

        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
            obj = obj.offsetParent
        } while (obj.id != relObjId);
        
    }
    return [curleft, curtop];
}

function HTTPRequest() {
    var request;
    if (window.XMLHttpRequest) {
        //Mozilla based browser
        request = new XMLHttpRequest();
        //request.overrideMimeType('text/xml');
    } else if (window.ActiveXObject) {
        //ActiveX compatible browser
        request = new ActiveXObject("Msxml2.XMLHTTP");
        if (!request) {
            request = new ActiveXObject("Microsoft.XMLHTTP")
        }
    }

    return request;
}

function reloadPage() {

    location.href = location.href;
}


function objectify(s) 
{
    return encodeURIComponent(s);
}

function deObjectify(s) 
{
    return decodeURIComponent(s);
    
}

String.prototype.reverse = function ()
{
    splittext = this.split("");
    reversetext = splittext.reverse();
    reversed = splittext.join("");
    return reversed;
}


DPC = function() { }
DPC.yearName = "__year";
DPC.monthName = "__month";
DPC.dayName = "__day";
DPC.hiddenName = "__hidden";
DPC.startYear = 1960;
DPC.monthNames = new Array("Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December");
DPC.renderOrder = 0;   // 0: yyyy mm dd; 1: mm dd yyyy; dd mm yyyy; NOT IMPLEMENTED
DPC.delimiter = "-";
DPC.monthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
DPC.monthLeapYearDays = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

DPC.render = function(uniquePrefix, hiddenId)
{
    
    var now = new Date();
    var sY = now.getFullYear();
    var sM = now.getMonth() + 1;
    var sD = now.getDate();
    
    var sHtml = "";
    sHtml += "<input type=\"hidden\" name=\"" + uniquePrefix + DPC.hiddenName + "\" value=\"" + DPC.mountDate(sY, sM, sD) + "\" id=\"" + hiddenId + "\" onchange=\"DPC.onchangeHidden('" + uniquePrefix + "');\">";


    sHtml += "<select name=\"" + uniquePrefix + DPC.yearName + "\" onchange=\"DPC.onchangeCombo('" + uniquePrefix + "', 'y')\">";

    for (var i = sY; i >= DPC.startYear; i--)
    {
        sHtml += ((i == sY) ? "<option value=\"" + i + "\" selected>" + i : "<option value=\"" + i + "\">" + i);
    }
    sHtml += "</select>";


    sHtml += "<select name=\"" + uniquePrefix + DPC.monthName + "\" onchange=\"DPC.onchangeCombo('" + uniquePrefix + "', 'm')\">";

    for (var i = 1; i <= 12; i++)
    {
        sHtml += ((i == sM) ? "<option value=\"" + i + "\" selected>" + DPC.monthNames[i - 1] : "<option value=\"" + i + "\">" + DPC.monthNames[i - 1]);
    }
    sHtml += "</select>";

    var days = ((DPC.isLeapYear(sY)) ? DPC.monthDays[parseInt(sM)-1] : DPC.monthLeapYearDays[parseInt(sM)-1]);


    sHtml += "<select name=\"" + uniquePrefix + DPC.dayName + "\" onchange=\"DPC.onchangeCombo('" + uniquePrefix + "', 'd')\">";

    for (var i = 1; i <= days; i++)
    {
        sHtml += ((i == sD) ? "<option value=\"" + i + "\" selected>" + i : "<option value=\"" + i + "\">" + i);
    }
    sHtml += "</select>";

    return sHtml;
}
DPC.mountDate = function(y,m,d)
{
    return y + DPC.delimiter + DPC.fixLength(m) + DPC.delimiter + DPC.fixLength(d);
}

DPC.fixLength = function(val)
{
    val += "";

    if (val.length == 1)
    {
        val = "0" + val;
    }
    return val;
}

DPC.isLeapYear = function (year)
{
    return new Date(year, 1, 29).getDate() == 29    
}

DPC.onchangeCombo = function(uniquePrefix, sender)
{
    var oY = document.getElementsByName(uniquePrefix + DPC.yearName)[0];
    var oM = document.getElementsByName(uniquePrefix + DPC.monthName)[0];
    var oD = document.getElementsByName(uniquePrefix + DPC.dayName)[0];
    var oH = document.getElementsByName(uniquePrefix + DPC.hiddenName)[0];

    var y = oY[oY.selectedIndex].value;
    var m = oM[oM.selectedIndex].value;
    var d = oD[oD.selectedIndex].value;

    var newDate = DPC.mountDate(oY[oY.selectedIndex].value, oM[oM.selectedIndex].value, oD[oD.selectedIndex].value);
    oH.value = newDate;

    var days = ((DPC.isLeapYear(y)) ? DPC.monthDays[parseInt(m) - 1] : DPC.monthLeapYearDays[parseInt(m) - 1]);

    switch (sender)
    {
        case "y":
            // Kolla om det är skottår, if so, kolla om februari är valt, if so, render days
            if (DPC.isLeapYear(y))
            {
                if (m == 2)
                {
                    oD.options.length = 0;
                    oD.options.length = days;
                    for (var i = 1; i <= days; i++)
                    {
                        oD.options[i - 1].text = i;
                        oD.options[i - 1].value = i;

                        if (i == d)
                        {
                            oD.options[i - 1].selected = true;
                        }
                    }
                }
            }

            break;
        case "m":

            oD.options.length = 0;
            oD.options.length = days;
            for (var i = 1; i <= days; i++)
            {
                oD.options[i - 1].text = i;
                oD.options[i - 1].value = i;

                if (i == d)
                {
                    oD.options[i - 1].selected = true;
                }
            }
            break;

    }

}

DPC.updateHiddenDate = function(newDate, uniquePrefix)
{  
    if (uniquePrefix == "Suspension" || uniquePrefix == "BreakType" || uniquePrefix == "Tires")
    {
        return;
    }

    try
    {
        newDate = DPC.handleDateFormat(newDate);
        document.getElementsByName(uniquePrefix + DPC.hiddenName)[0].value = newDate;
        DPC.onchangeHidden(uniquePrefix);
    }
    catch (e)
    {
        //Void
    }
}

DPC.handleDateFormat = function(inDate)
{
    // We want to return yyyy-mm-dd

    var sOut = inDate + "";

    if (sOut.indexOf("/") > 0)
    {
        var arr = sOut.split("/");

        if (arr)
        {

            if (arr[0].length == 4)
            {
                sOut = arr[0] + "-" + DPC.fixLength(arr[1]) + "-" + DPC.fixLength(arr[2]);
            }
            else
            {
                sOut = arr[2] + "-" + DPC.fixLength(arr[0]) + "-" + DPC.fixLength(arr[1]);
            }
        }
    }

    return sOut;
}



DPC.onchangeHidden = function(uniquePrefix)
{
    var newDate = document.getElementsByName(uniquePrefix + DPC.hiddenName)[0].value;
    var vals = new Array();
    vals = newDate.split("-");
    
    DPC.rewriteCombos(uniquePrefix, vals[0], DPC.parseNumeric(vals[1]), DPC.parseNumeric(vals[2]));
}

DPC.parseNumeric = function(valIn)
{
    var sOut = valIn;

    if (!sOut)
    {
        return "1";
    }

    if (sOut.substr(0, 1) == "0")
    {
        sOut = sOut.substr(1, 1);
    }

    return sOut;
}

DPC.rewriteCombos = function(uniquePrefix, y, m, d)
{
    var oY = document.getElementsByName(uniquePrefix + DPC.yearName)[0];
    var oM = document.getElementsByName(uniquePrefix + DPC.monthName)[0];
    var oD = document.getElementsByName(uniquePrefix + DPC.dayName)[0];

    for (var i = 0; i < oY.options.length; i++)
    {
        if (oY.options[i].value == y)
        {
            oY.options[i].selected = true;
            break;
        }
    }

    var days = ((DPC.isLeapYear(y)) ? DPC.monthDays[parseInt(m) - 1] : DPC.monthLeapYearDays[parseInt(m) - 1]);

    for (var i = 0; i < oM.options.length; i++)
    {
        if (oM.options[i].value == m)
        {
            oM.options[i].selected = true;
            break;
        }
    }

    oD.options.length = 0;
    oD.options.length = days;

    for (var i = 1; i <= days; i++)
    {
        oD.options[i - 1].text = i;
        oD.options[i - 1].value = i;

        if (i == d)
        {
            oD.options[i - 1].selected = true;
        }
    }

}

DPC.disable = function(uniquePrefix)
{
    var oY = document.getElementsByName(uniquePrefix + DPC.yearName)[0];
    var oM = document.getElementsByName(uniquePrefix + DPC.monthName)[0];
    var oD = document.getElementsByName(uniquePrefix + DPC.dayName)[0];
    var oH = document.getElementsByName(uniquePrefix + DPC.hiddenName)[0];

    oY.disabled = true;
    oM.disabled = true;
    oD.disabled = true;
    oH.value = "";
}

DPC.enable = function(uniquePrefix, isEdit)
{
    
    if (isEdit) return;
    var oY = document.getElementsByName(uniquePrefix + DPC.yearName)[0];
    var oM = document.getElementsByName(uniquePrefix + DPC.monthName)[0];
    var oD = document.getElementsByName(uniquePrefix + DPC.dayName)[0];
    var oH = document.getElementsByName(uniquePrefix + DPC.hiddenName)[0];

    oY.disabled = false;
    oM.disabled = false;
    oD.disabled = false;
    oH.value = "";
    var now = new Date();

    var sY = now.getFullYear();
    var sM = now.getMonth() + 1;
    var sD = now.getDate();

    var sIn = sY + "-" + DPC.fixLength(sM) + "-" + DPC.fixLength(sD);

    DPC.updateHiddenDate(sIn, uniquePrefix);
}



function URLEncode(sIn)
{
    // The Javascript escape and unescape functions do not correspond
    // with what browsers actually do...
    var SAFECHARS = "0123456789" + 				// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()"; 				// RFC2396 Mark characters
    var HEX = "0123456789ABCDEF";

    var plaintext = sIn;
    var encoded = "";
    for (var i = 0; i < plaintext.length; i++)
    {
        var ch = plaintext.charAt(i);
        if (ch == " ")
        {
            encoded += "+"; 			// x-www-urlencoded, rather than %20
        } else if (SAFECHARS.indexOf(ch) != -1)
        {
            encoded += ch;
        } else
        {
            var charCode = ch.charCodeAt(0);
            if (charCode > 255)
            {
                alert("Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted.");
                encoded += "+";
            } else
            {
                encoded += "%";
                encoded += HEX.charAt((charCode >> 4) & 0xF);
                encoded += HEX.charAt(charCode & 0xF);
            }
        }
    } // for

    return encoded;
};

