var isIE = navigator.userAgent.toLowerCase().indexOf('ie') != -1 ? true : false;
var isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1 ? true : false;
var isIE8 = navigator.userAgent.toLowerCase().indexOf('msie 8') != -1 ? true : false;
var offsetX = null;
var offsetY = null;
var dragFunction = null;
var releaseFunction = null;

function SetMenuBackground(tableCell) {
    tableCell.style.backgroundImage = tableCell.style.backgroundImage.indexOf('bg-menu.gif') != -1 ? tableCell.style.backgroundImage = 'url(/ImagesPTA/bg-menu-hover.jpg)' : tableCell.style.backgroundImage = 'url(/ImagesPTA/bg-menu.gif)';
}
function SetRightMenuBackground(tableCell, imageName) {
    var image = imageName + '.gif';
    var imageHover = imageName + '-hover.gif';
    /*tableCell.style.backgroundImage = tableCell.style.backgroundImage.indexOf(image) ==-1 ? tableCell.style.backgroundImage='url(/ImagesPTA/' + imageHover + ')' : tableCell.style.backgroundImage='url(/ImagesPTA/' + image + ')';*/
    tableCell.src = tableCell.src.indexOf(image) != -1 ? tableCell.src = '/ImagesPTA/' + imageHover : tableCell.src = '/ImagesPTA/' + image;
    /*alert(tableCell.src); */
}
function $(id) {
    return document.getElementById(id);
}
function ConfirmMakeDelete()
{
    var result = false;
    result = window.confirm("Do you want to confirm deleting this Make. Note: this will delete all Models associated to this Make.\n\nClick OK to delete");
    return result; 
}
function ConfirmModelDelete()
{
    var result = false;
    result = window.confirm("Do you want to confirm deleting this Model. \n\nClick OK to delete");
    return result; 
}
//function validateModelSelected(control)
//{
//    var dieselUpliftFlag = eval(control.options[control.selectedIndex].getAttribute("DieselUpliftFlag"));
//    if(dieselUpliftFlag)
//    {
//        $(fuelTypeDiv).style.display = 'block';
//        $(fuelTypeShown).value = "true";
//    }
//    else
//    {
//        $(fuelTypeDiv).style.display = 'none';
//        $(fuelTypeShown).value = "false";
//    }  
//    //return true;
//    return !dieselUpliftFlag;
//}

/*function CheckValues()
{
var retValue = true;
   
//var vals = new Array("width", "ratio", "rim", "speed");
   
for (i=0; i < vals.length; i++)
{
if (document.getElementById(vals[i]).selectedIndex == 0)
{
retValue = false;
document.getElementById("message").innerHTML = "Please select a " + vals[i] + ".";
break;
         
}
}
RaiseChange();
return retValue;
}*/

function CheckCustomerDetails() {
    var retValue = true;
    var validation = $('validation');
    validation.innerHTML = '';
    var controls = new Array("firstName", "lastName", "contactNumber", "emailAddress", "confirmEmail");

    for (var i = 0,el; el = controls[i]; i++) {
        // eval converts the strings to variable names
        if ($(eval(el)).value == '') {
            retValue = false;
            validation.innerHTML = "First Name, Last Name, Contact Number, Email Address and Confirm Email are required fields.";
            break;
        }
    }

    if (retValue) {
        if($(selDate).value==''){
            retValue = false;
            validation.innerHTML = 'please select a date';
        }
    }
    
    // *Workshop Diary* JB 01-Mar-2010 - removed serviceType=='MOT' until later release
    /* if(retValue){
        if(typeof serviceType != 'undefined' && serviceType=='MOT' && $(bookedTimeSlot).value==''){
            retValue = false;
            validation.innerHTML = 'please select a time slot';    
        }
    } */

    if (retValue) {
        CheckMail($(confirmEmail));
        CheckMailFormat($(emailAddress));
        if (validation.innerHTML != '')
            retValue = false;
    }

    RaiseChange();
    return retValue;
}

function CheckMail(confirmMail) {
    //confirmMail.value = trim(confirmMail.value);

    if (confirmMail.value != '' && confirmMail.value.toLowerCase() != $(emailAddress).value.toLowerCase()) {
        $("validation").innerHTML = "The confirmed email is not the same as the original.";
    }
    else {
        var validation = $("validation");
        if (validation.innerHTML.indexOf("confirmed") != -1)
            validation.innerHTML = "";
    }
}

function CheckMailFormat(eMail) {
    eMail.value = trim(eMail.value);

    if (eMail.value != '') {
        var reg = new RegExp(/^\S+@\S+\.\S+$/);

        if (!(eMail.value.match(reg))) {
            $("validation").innerHTML = "Not a valid email format.<br>";
        }
        else {
            var validation = $("validation");
            if (validation.innerHTML.indexOf("valid") != -1)
                validation.innerHTML = "";
        }
    }
}

function trim(inputStringTrim) {
    fixedTrim = "";
    lastCh = " ";
    for (x = 0; x < inputStringTrim.length; x++) {
        ch = inputStringTrim.charAt(x);
        if ((ch != " ") || (lastCh != " ")) { fixedTrim += ch; }
        lastCh = ch;
    }
    if (fixedTrim.charAt(fixedTrim.length - 1) == " ")
    { fixedTrim = fixedTrim.substring(0, fixedTrim.length - 1); }
    return fixedTrim
}

function CheckSelection() {
    RaiseChange();
    var selectionMade = false;
    var sels = document.getElementsByTagName("Select");
    var selected = "";
    
    for (var i = 0; i < sels.length; i++) {
        if (sels[i].options[0].text == "Select" && sels[i].selectedIndex != 0) {
            selectionMade = true;
            //get the selected quantity and associated stockcodeid from the previous hidden input
            //there's a text node in between for some reason so it's 2 siblings back
            var stockCode = sels[i].previousSibling.previousSibling.value;
            var currentTable = sels[i].parentNode.parentNode.parentNode;
            selected = selected + stockCode + "^" + sels[i].options[sels[i].selectedIndex].text;
            selected = selected + "^" + currentTable.rows[6].cells[1].innerHTML + "^" + currentTable.rows[2].cells[1].innerHTML + ",";
        }
    }

    if (selected != '') {
        $(selectedTyres).value = selected.substr(0, selected.length - 1);
    }

    if (!selectionMade)
        alert('Please select a quantity');

    return selectionMade;
}

function showIntro() {
    $(introContent).style.display = 'block';
    $(displayContent).style.display = 'none';
}

function showIntro2() {
    $(introContent).style.display = 'block';
    $(depot).style.display = 'none';
}

function showDisplay() {
    $(displayContent).style.display = 'block';
    $(depot).style.display = 'none';
}

function showCustomerDetails() {
    $(displayCustomerDetails).style.display = 'block';
}

function showDepotDetails() {
    $(depot).style.display = 'block';
    $(displayCustomerDetails).style.display = 'none';
}

function CheckDepot() {
    var retVal = true;
    if ($(depotList).selectedIndex == 0) {
        alert('Please select a branch.');
        retVal = false;
    }
    RaiseChange();
    return retVal;
}

function closeContainer() {
    $('imageContainer').style.display = 'none';
}

function showFullImage(currentEl) {
    var currentImage = null;
    if (currentEl.tagName.toLowerCase() == 'img') // image click itself
        currentImage = currentEl;
    else  // click on div below image so traverse the hierachy up to the tbody element to get the current image
        currentImage = currentEl.parentNode.parentNode.parentNode.getElementsByTagName('img')[0];

    position = getElementPosition(currentImage);
    var left = 0;
    var top = 0;

    left = position.x + document.body.scrollLeft;
    top = position.y + document.body.scrollTop;

    var container = $('imageContainer');
    container.style.display = 'block';
    container.style.position = 'absolute';
    container.style.left = left + 'px';
    container.style.top = top + 'px';
    $('imageDisplay').src = currentImage.src;
}

function message(e) {
    // this is a function called by window form unload event  
    if ($('changeFlag').value != 'change'){
        // added eventHandled global variable as the event was getting raised twice
        if(!eventHandled){  // will get false and undefined
            eventHandled = true;
            return "The current page data will be lost if you do.";
        }
        else eventHandled = false;
    }
}

function PrintDocument() {
    $('changeFlag').value = 'change';
    window.print();
}

function selectDepot(depot, depotId) {
    //document.getElementById('selDepot').innerHTML = depot; 
    $(depotSelected).value = depot + "^" + depotId;
    var sel = $(depotList);
    for (var i = 0; i < sel.options.length; i++) {
        if (sel.options[i].value == depotId) {
            sel.options[i].selected = true;
            break;
        }
    }
}

function RadioOptionSelected() {
    
    var result = false;
    var radioList = $(selectService);
    
    if(radioList != null)
    {
        var elements = GetFilteredElements(radioList, 'input', 'radio')

        for (var i = 0, element; element = elements[i]; i++) 
            {
            if (element.checked) 
            {
                result = true;
                break;
            }
        }
    }
    if (!result)
        alert("Please select a service option.");
    
    return result;
}

// adjust the prices using the original prices in the prices Array
// and the list box id property which persists the increase amount for the given list item 
function AdjustPrices() {
    var priceListTable = $('priceTable');
    var engineSizeList = $(engineSize);
    var increase = parseFloat(engineSizeList.options[engineSizeList.selectedIndex].value.split('_')[1]);

    for (var i = 1; i < priceListTable.rows.length; i++) {
        var amount = priceListTable.rows[i].cells[0].innerHTML;
        priceListTable.rows[i].cells[0].innerHTML = amount.charAt(0) + (prices[i] + increase);
    }
}

var prices = null;
// persist the original prices in an Array for later use
function PersistOriginalPrices() {
    prices = new Array();
    var priceListTable = $('priceTable');
    if(priceListTable != null)
    {
        for (var i = 0; i < priceListTable.rows.length; i++) {
            var amount = priceListTable.rows[i].cells[0].innerHTML;
            prices.push(parseFloat(amount.substr(1, amount.length - 1)));
        }
    }
}

function selectDepotFromList(sel) {
    for (var i = 0; i < sel.options.length; i++) {
        if (sel.options[i].selected == true) {
            //document.getElementById('selDepot').innerHTML = sel.options[i].text; 
            $(depotSelected).value = sel.options[i].text + "^" + sel.options[i].value;
            break;
        }
    }
}

function RaiseChange(sel) {
    $('changeFlag').value = 'change';
}

function getElementPosition(element) {
    var x = 0, y = 0;
    if (navigator.userAgent.toLowerCase().indexOf('mac') != -1) {
        while (element != null) {
            try {
                x += element.offsetLeft;
                y += element.offsetTop;
                element = element.offsetParent;
            }
            catch (exception) {
                return { x: 0, y: 0 };
            }
        }
    }
    else {
        while (element != null) {
            try {
                x += element.offsetLeft - element.scrollLeft;
                y += element.offsetTop - element.scrollTop;
                element = element.offsetParent;
            }
            catch (exception) {
                return { x: 0, y: 0 };
            }
        }
    }
    return { x: x, y: y };
}
function GetFilteredElements(element, tagName, type) {
    var filteredElements = new Array();
    var elements = element.getElementsByTagName(tagName);
    for (i = 0; i < elements.length; i++) {
        if (elements[i].type == type) filteredElements.push(elements[i]);
    }
    return filteredElements;
}

function EventSubscribe(eventName, element, functionCall, capturePhase) {
    if (isIE) {
        if (!capturePhase) element.attachEvent('on' + eventName, functionCall);
    }
    else element.addEventListener(eventName, functionCall, capturePhase ? capturePhase : false);
}

function EventUnSubscribe(eventName, element, functionCall, capturePhase) {
    if (isIE) {
        if (!capturePhase) element.detachEvent('on' + eventName, functionCall);
    }
    else element.removeEventListener(eventName, functionCall, capturePhase ? capturePhase : false);
}

function setUpCalendar(calendarDivID, mode, selDateID) {
    if (typeof startDate != 'undefined') {
        var calendarDiv = $(calendarDivID);
        // clear the content as calendar may already exist in the div
        calendarDiv.innerHTML = '';
        calendar = new Calendar(1, null, function(calendar, date) { onSelect(calendar, date, mode, selDateID); });
        calendar.setDateFormat("%d-%b-%Y");
        calendar.setRange(startDate.getFullYear(), endDate.getFullYear());
        calendar.isPopup = false;
        calendar.create(calendarDiv);

        if (typeof freeDates != 'undefined')
            calendar.setDateStatusHandler(dateStatusHandler);

        calendar.refresh();
        var selectedDate = $(selDateID).value;
        if (selectedDate != '') calendar.parseDate(selectedDate);
        calendar.show();
    }
}

function onSelect(calendar, date, mode, selDateID) {
    if (calendar.dateClicked) {
        $(selDateID).value = ' ' + date;
        if (mode == 'edit') {
            var updatePanelID = '';
            var bookingMode = $(bookingModeID).value;

            switch (bookingMode) {
                case 'Scheduled':
                    updatePanelID = 'BookingAdmin1_bookingPanel';
                    break;

                case 'NonScheduled':
                    updatePanelID = 'BookingAdmin2_bookingPanel';
                    break;

                case 'Service':
                    updatePanelID = 'BookingAdmin3_bookingPanel';
                    break;
            }
            FireAjaxPostBack('calendarBookingEdit', 'customerBooking', updatePanelID, date);
        }
        else if (mode == 'Navigate') {
            FireAjaxPostBack('calendarNavigate', 'customerBooking', 'bookingPanel1', date);
        }
        else {
            FireBookingPostBack('booking', 'booking');
        }
    }
}

function dateStatusHandler(date, y, m, d) {
    // return string for css class name for special formatting
    // date parameter has the current time so set a new Date variable below with no time value
    var dateNoTime = new Date(y, m, d);
    var noSelect = true;
    var cssClass = '';
    for (var i = 0, freeDate; freeDate = freeDates[i]; i++) {
        // Date is a reference type object so need to compare the values with getTime
        // as testing equivalence on the different objects will fail even when their values are the same
        if (freeDate.date.getTime() == dateNoTime.getTime()) {
            if (freeDate.areBookings != 'undefined' && freeDate.areBookings)
                cssClass = 'areBookings';
            else
                noSelect = false;
            break;
        }
    }
    return cssClass != '' ? cssClass : noSelect;
}

function FireAjaxPostBack(source, command, panelID, additional) {
    var args = source + '$' + command + '$' + panelID + '$' + (typeof additional != 'undefined' ? additional : '');
    __doPostBack(panelID, args);
}

// drag drop support
function Engage(evt, element) {
    var source = evt.srcElement ? evt.srcElement : evt.target;
    if (source.className == 'controlBar') { // control bar only to initiate drag
        offsetX = evt.clientX - ((element.offsetLeft) ? element.offsetLeft : 0);
        offsetY = evt.clientY - ((element.offsetTop) ? element.offsetTop : 0);
        // element.style.cursor = 'move';
        dragFunction = function(evt) { DragIt(evt, element) };
        EventSubscribe('mousemove', document, dragFunction, false);
        releaseFunction = function() { Release(element) };
        EventSubscribe('mouseup', document, releaseFunction, false);
        if (evt.preventDefault) {
            evt.preventDefault(); // need to prevent default mousedown for FF which was causing drag to be not allowed
        }
    }
}

function DragIt(evt, element) {
    if (offsetX != null && offsetX >= 0 && offsetY != null) {
        element.style.left = (evt.clientX - offsetX) + 'px';
        element.style.top = (evt.clientY - offsetY) + 'px';
    }
    if (evt.preventDefault) {
        evt.preventDefault(); 
    }
    else { // the following line prevents IE from not allowing drag for whatever reason
        evt.returnValue = false;
    }
}

function Release(element) {
    offsetX = null;
    offsetY = null;
    // element.style.cursor = 'default';
    EventUnSubscribe('mousemove', document, dragFunction, false);
    EventUnSubscribe('mouseup', document, releaseFunction, false);
}

function ScrollSelectInoView(){
    // some other code was setting scrollTop so set this on a delay
    window.setTimeout(ScrollAfterDelay, 200);
}

function SetScrollTop(){
    scrollTop = document.documentElement.scrollTop;
}

function ScrollAfterDelay(){
    document.documentElement.scrollTop = scrollTop;  
}
