﻿$(document).ready(function() {
    //$("#email_prev").modal();
    $('#confirm').jqm({ overlay: 30, modal: true, trigger: false, toTop: true })/*.jqDrag('.jqDrag')*/;
    $('#confirm2').jqm({ overlay: 30, modal: true, trigger: false, toTop: true })/*.jqDrag('.jqDrag')*/;
    // trigger a confirm whenever links of class alert are pressed.
    $('a.confirm').click(function() {
        confirm('Are you sure you want to delete this item?', this.href);
        return false;
    });
    $('a.confirm2').click(function() {
        confirm2('Are you sure you want to delete this item?', this.href);
        return false;
    });

    $('#tips *').tooltip();

    $("#UsersTable").tablesorter({
        headers: {
            4: { sorter: false }
        }
    });
    $("#LockTable").tablesorter({
        headers: {
            2: { sorter: false }
        }
    });
    $("#PropertyTable").tablesorter({
        headers: {
            3: { sorter: false }
        }
    });
    //$("#tabs").tabs();
    //$("#propManagement").validate();
    $("#propManagement").validate({
        rules: {
            PropertyList: { required: true },
            submittype: { required: true },
            propertyname: { required: true },
            modpropertyname: { required: true }
        }
    });
    $("#CreateUser").validate({
        rules: {
            username: { required: true },
            email: { required: true, email: true },
            FirstName: { required: true },
            LastName: { required: true },
            password1: { required: true, minlength: 6 },
            password2: { required: true, equalTo: "#password1" }
        }
    });
    $("#RemoteCodeGenerate").validate({
        rules: {
            PropList: { required: true },
            Locks: { required: true },
            clientname: { required: true },
            /*address1: { required: true },
            email: { required: true, email: true },
            phone: {
            required: true
            },*/
            START_DATE: { required: true, date: true },
            END_DATE: { required: true, date: true, laterDate: "#START_DATE", chkDuration: "#START_DATE" },
            START_TIME: { required: true },
            END_TIME: { required: true }
        }
    });
    $("#EmailConfirm").validate({
        rules: {
            mailto: { required: true, email: true }
        }
    });
    $("#BigCalendar").validate({
        rules: {
            PropList: { required: true },
            blockname: { required: true },
            submittype: { required: true },
            rangedate1: { required: true },
            rangedate2: { required: true }
        }
    });
    //    $("#LockManagement").validate({
    //        rules: {
    //            PropertyList: {required: true },
    //            lockname: { required: true },
    //            lockserial: { required: true }
    //        }
    //    });
    $(document).ready(function() {
        //        $('select').focusin(function(ev) {
        //var on = ev.target.value;
        //            var elm = document.getElementById("PropList");
        //            if (on == "PropList") {
        //                alert(elm.value);
        //           }
        //        });
        //
        $(':radio').click(function(ev) {
            var on = ev.target.value;

            var elmAdd = document.getElementById("lockname");
            var elmAddSerial = document.getElementById("lockserial");
            var elmMod = document.getElementById("modlockname");
            var elmModSerial = document.getElementById("modlockserial");
            var elmProp = document.getElementById("propertyname");
            var elmModProp = document.getElementById("modpropertyname");
            var elmPropList = document.getElementById("PropertyList");
            if (on == "addlock") {
                elmAdd.removeAttribute("disabled");
                elmAddSerial.removeAttribute("disabled");
                elmMod.setAttribute("disabled", "disabled");
                elmModSerial.setAttribute("disabled", "disabled");
            } else if (on == "modlock") {
                //document.write(on);
                elmAdd.setAttribute("disabled", "disabled");
                elmAddSerial.setAttribute("disabled", "disabled");
                elmMod.removeAttribute("disabled");
                elmModSerial.removeAttribute("disabled");
            } else if (on == "dellock") {
                elmAdd.setAttribute("disabled", "disabled");
                elmAddSerial.setAttribute("disabled", "disabled");
                elmMod.setAttribute("disabled", "disabled");
                elmModSerial.setAttribute("disabled", "disabled");
            } else if (on == "addproperty") {
                elmProp.removeAttribute("disabled");
                elmModProp.setAttribute("disabled", "disabled");
                elmPropList.setAttribute("disabled", "disabled");
            } else if (on == "modproperty") {
                elmProp.setAttribute("disabled", "disabled");
                elmModProp.removeAttribute("disabled");
                elmPropList.removeAttribute("disabled");
            } else if (on == "delproperty") {
                elmProp.setAttribute("disabled", "disabled");
                elmModProp.setAttribute("disabled", "disabled");
                elmPropList.removeAttribute("disabled");
            }
        });
    });

    $("#EditLockProperty").validate({
        rules: {
            property: { required: true },
            lockname: { required: true, filtervalue: true },
            lockserial: { required: true },
            lockinfo: { maxlength: 1000 },
            propname: { required: true },
            street1: { required: true },
            city: { required: true },
            country: { required: true },
            zip: { required: true }
        }
    });
    $("#LockManagement").validate({
        rules: {
            PropertyList: { required: true },
            //Locks: { required: true },
            submittype: { required: true },
            modlockname: { required: true },
            modlockserial: { required: true },
            lockname: { required: true },
            lockserial: { required: true }
        }
    });
    $("#SendFeedback").validate({
        rules: {
            username: { required: true },
            subject: { required: true },
            message: { required: true }
        }
    });

    jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
        phone_number = phone_number.replace(/\s+/g, "");
        return this.optional(element) || phone_number.length > 9 &&
		    phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
    }, "<br/>Please specify a valid phone number");

    jQuery.validator.addMethod("laterDate", function(value, element, param) {
        var endtime = Date.parse(value);
        var starttime = Date.parse($(param).val());
        return endtime >= starttime;
    }, "<br/>Please select a valid date");
    jQuery.validator.addMethod("chkDuration", function(value, element, param) {
        var endtime = Date.parse(value);
        var starttime = Date.parse($(param).val());
        var dr = endtime - starttime;
        return dr <= 86400000 * 364;
    }, "<br/>MaxDuration is 365 days");

    $("#EditUser").validate({
        rules: {
            username: { required: true },
            /*email: { required: true, email: true },*/
            FirstName: { required: true },
            LastName: { required: true },
            password1: { required: true, minlength: 6 },
            password2: { required: true, equalTo: "#password1"}/*,
            phone: {
                required: true
            }*/
        }
    });
    $("#EditProfile").validate({
        rules: {
            username: { required: true },
            /*email: { required: true, email: true },*/
            FirstName: { required: true },
            LastName: { required: true },
            password1: { required: true, minlength: 6 },
            password2: { required: true, equalTo: "#password1"}/*,
            phone: {
                required: true
            }*/
        }

    });

    $("#BIG_CAL").datepicker({
        firstDay: 0,
        changeFirstDay: false,
        inline: true,
        showStatus: true,
        numberOfMonths: 1,
        changeMonth: false,
        changeYear: false,
        rangeSelect: true,
        onSelect: function(dateText) {
            var selectedDateArray = dateText.split(" - ");
            $('#rangedate1').val(selectedDateArray[0]);
            $('#rangedate2').val(selectedDateArray[1]);
        },
        beforeShowDay: alreadyBooked3
    });

    $("#RANGE_DATE").datepicker({
        firstDay: 0,
        changeFirstDay: false,
        /*beforeShowDay: $.datepicker.noWeekends, */
        showStatus: true,
        statusForDate: highlightToday,

        inline: true,
        rangeSelect: true,
        onSelect: function(dateText) {
            var selectedDateArray = dateText.split(" - ");
            $('#rangedate1').val(selectedDateArray[0]);
            $('#rangedate2').val(selectedDateArray[1]);
        },
        numberOfMonths: 2
    }).children("div").css("width", "370px");

    $("#time1").timeEntry({
        spinnerImage: '../../Scripts/timeentry/timeEntry2.png',
        show24Hours: false,
        timeSteps: [1, 15, 0]
    });
    $("#time2").timeEntry({
        spinnerImage: '../../Scripts/timeentry/timeEntry2.png',
        show24Hours: false,
        timeSteps: [1, 15, 0]
    });

    //    $('#div-datepicker').css('margin-top', '150px');
    //    $('#date').datepicker();
    //    $('#basics').datepicker();
    //    $('#div_date').datepicker();
    ////    $("#START_DATE").datepicker({
    //        firstDay: 0, 
    //        changeFirstDay: false, 
    //        /*beforeShowDay: $.datepicker.noWeekends, */
    //        showStatus: true, 
    //        statusForDate: highlightToday, 
    //    
    //        inline: true,
    //        rangeSelect: true,
    //        onSelect: function(dateText) {
    //            var selectedDateArray = dateText.split(" - "); 
    //            $('#rangedate1').val(selectedDateArray[0]);
    //            $('#rangedate2').val(selectedDateArray[1]);
    //        },
    //        numberOfMonths: 2
    //    }).children("div").css("width", "370px");

    $("#START_DATE").datepicker({
        firstDay: 0,
        changeFirstDay: false,
        rangeSelect: false,
        inline: false,
        showStatus: true,
        numberOfMonths: 2,
        changeMonth: false,
        changeYear: false,
        showOn: 'both',
        buttonImage: '../../Styles/images/calendar.gif',
        buttonImageOnly: true,
        /*beforeShow: customRange,*/
        beforeShowDay: alreadyBooked2
    });
    $("#END_DATE").datepicker({
        firstDay: 0,
        changeFirstDay: false,
        rangeSelect: false,
        showStatus: true,
        numberOfMonths: 2,
        changeMonth: false,
        changeYear: false,
        showOn: 'both',
        buttonImage: '../../Styles/images/calendar.gif',
        buttonImageOnly: true,
        beforeShow: customRange,
        beforeShowDay: alreadyBooked2
    });
    //    $("#inline").datepicker({
    //        rangeSelect: true,
    //        numberOfMonths: 2
    //    }).children("div").css("width", "670px");


    //    $("#time1").timeEntry({
    //        spinnerImage: '../../Scripts/timeentry/timeEntry2.png',
    //        show24Hours: false,
    //        timeSteps: [1, 15, 0]
    //    });
    //    $("#time2").timeEntry({
    //        spinnerImage: '../../Scripts/timeentry/timeEntry2.png',
    //        show24Hours: false,
    //        timeSteps: [1, 15, 0]
    //    });
    // toggle optional billing address
    var subTableDiv0 = $("div.subTableDiv0");
    var toggleCheck0 = $("input.toggleCheck0");
    toggleCheck0.is(":checked")
    ? subTableDiv0.show()
    : subTableDiv0.hide();
    $("input.toggleCheck0").click(function() {
        if (this.checked == true) {
            subTableDiv0.slideDown("medium");
        } else {
            subTableDiv0.slideUp("medium");
            $("form").valid();
        }
    });
    var subTableDiv = $("div.subTableDiv");
    var toggleCheck = $("input.toggleCheck");
    toggleCheck.is(":checked")
    ? subTableDiv.hide()
    : subTableDiv.show();
    $("input.toggleCheck").click(function() {
        if (this.checked == true) {
            subTableDiv.slideUp("medium");
            $("form").valid();
        } else {
            subTableDiv.slideDown("medium");
        }
    });





    /*Add Porperty/Lock */
    //    var template = $("#template") ? jQuery.format($("#template").val()) : null;
    //    function addRow() {
    //        $(template(i++)).appendTo("#AddPropLock");
    //    }
    //    function delRow() {
    //        if (i > 2) {
    //            var str = "#addRow" + parseInt(i - 1);
    //            $(str).remove();
    //            i--;
    //        }
    //    }

    //    var i = 1;
    //    // start with one row
    //    addRow();
    //    // add more rows on click
    //    $("#add").click(addRow);
    //    $("#del").click(delRow);

}
);


//var natDays = [[1, 26, 'au'], [2, 6, 'nz'], [3, 17, 'ie'], [4, 27, 'za'], [5, 25, 'ar'], [6, 6, 'se'],  
//    [7, 4, 'us'], [8, 17, 'id'], [9, 7, 'br'], [10, 1, 'cn'], [11, 22, 'lb'], [12, 12, 'ke']];  
//  
//function nationalDays(date) {  
//    for (i = 0; i < natDays.length; i++) {  
//        if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {  
//            return [false, natDays[i][2] + '_day'];  
//        }  
//    }  
//    return [true, ''];  
//} 
// 
//function highlightToday(date, inst) {  
//    var today = new Date();  
//    today = new Date(today.getFullYear(), today.getMonth(), today.getDate());  
//    return $.datepicker.dateStatus(date, inst) +  
//        (today.getTime() == date.getTime() ? ' (today)' : '');  
//}  
// 
//function showDayOfYear(date) { 
//    var lastYearEnd = new Date(date.getFullYear() - 1, 12 - 1, 31, 0, 0, 0, 0); 
//    return [true, '', 'Day ' + ((date.getTime() - lastYearEnd.getTime()) / 86400000) + ' of  the year']; 
//}
function customRange(input) {
    return {
        minDate: (input.id == 'END_DATE' ? new Date(Date.parse($('#START_DATE').val())) : null),
//        maxDate: (input.id == 'START_DATE' ? new Date(Date.parse($('#END_DATE').val())) : null)
        maxDate: (input.id == 'START_DATE' ? new Date(Date.parse($('#END_DATE').val())) : new Date(Date.parse($('#START_DATE').val()) + 86400000*364))
    };
}
function alreadyBooked2(date) {
    var fmstart = document.getElementById('START_DATE').value;
    var fmend   = document.getElementById('END_DATE').value;

    var startdate = new Date();
    var enddate = new Date();
    startdate.setTime(Date.parse(fmstart));
    enddate.setTime(Date.parse(fmend));

    var bBooked = 0;
    if (date.getTime() >= startdate.getTime() && date.getTime() <= enddate.getTime()) {
        bBooked = 1;
    } else {
        bBooked = 0;
    }

	return [bBooked, '', '', fmstart];
}
//function alreadyBooked4(date, document) {
//    var inputdata1;
//    inputdata1 = new Date();
//    var inputdata2;
//    inputdata2 = new Date(2009, 1-1, 2);
//    var strtxt = "";
//    var bBooked = 1;
//    if(date.getTime() > inputdata2.getTime()) {
//        bBooked = 1;
//        strtxt = "tt";
//    } else {
//        bBooked = 0;
//    }

//	return [bBooked, '', strtxt];
//}
function alreadyBooked3(date) {
    var c = document.getElementById('bookdate').value;
    var spanDateArray = c.split("-"); // yyyy/mm/dd HH:MM-yyyy/mm/dd HH:MM-"string"
    //document.write(c.value);

    var starttime = Date.parse(spanDateArray[0]);
    var endtime = Date.parse(spanDateArray[1]);

    var tmp1 = new Date(starttime);
    var tmp2 = new Date(endtime);
    var startdate   = new Date(tmp1.getFullYear(), tmp1.getMonth(), tmp1.getDate());
    var enddate     = new Date(tmp2.getFullYear(), tmp2.getMonth(), tmp2.getDate());
    //document.write(date.getFullYear() + "-" + (startdate.getMonth() + 1) + "-" + startdate.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "<br />\r\n");


    var fchkIn = document.getElementById('chkIn');
    var fchkOut = document.getElementById('chkOut');
    var fRenterName = document.getElementById('RenterName');
    var fblockList = document.getElementById('blocklist').value;
    //document.write(fchkIn[0].text);

    //var chkInDate = new Date();
    //var chkOutDate = new Date();

    var blockArray = fblockList.split(",");

    var strtxt = "<span style='margin-bottom:0; font-size:x-small;'>";
    var strTooltip = "";
    //var strtxt = "";
    var strCss = "";
    var bBooked = 0;
    var bBlock = false;
    var day = new Date(date.getFullYear(), date.getMonth(), date.getDate());
//    if (date.getTime() >= startdate.getTime() && date.getTime() <= enddate.getTime()) {
    if (day.getTime() >= startdate.getTime() && day.getTime() <= enddate.getTime()) {
        for (i = fchkIn.length - 1; i >= 0; i--) {
            starttime = new Date(Date.parse(fchkIn[i].text));
            endtime   = new Date(Date.parse(fchkOut[i].text));
            var chkInDate  = new Date(starttime.getFullYear(), starttime.getMonth(), starttime.getDate());
            var chkOutDate = new Date(endtime.getFullYear(), endtime.getMonth(),endtime.getDate());

            if (day.getTime() >= chkInDate.getTime() && day.getTime() <= chkOutDate.getTime()) {
                bBooked = 1;
                strtxt += '<br/>';
                strtxt += fRenterName[i].text;
                //strCss = "ui-datepicker-rentername";
                strTooltip += fRenterName[i].text + " [" + fchkIn[i].text + "] - [" + fchkOut[i].text + "]<br>";
                // block flag
                if (blockArray[i] == "1") bBlock = true;
            }
        }

    } else {
        bBooked = 0;
        strCss = "";
        strTooltip = "";
    }
    strtxt += "</span>";
    if (bBlock) strCss = "ui-datepicker-blocked-day";
    return [bBooked, strCss, strtxt, strTooltip];
}
function inputListContent(a, b, val) {
    var f = document.forms[0];
    f[a].options[f[a].length] = new Option(b, val);
    f[a].size = f[a].length;
}
function highlightToday(date, inst) {
    var today = new Date();
    today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
    return $.datepicker.dateStatus(date, inst) +
        (today.getTime() == date.getTime() ? ' (today)' : '');
}  



// ListBox Control
function moveListContent(a,b){
	var f=document.forms[0];
	if(f[a].length>0&&f[a].selectedIndex>-1&&f[a].options[f[a].selectedIndex].value.length>0){
		var s=f[a].options[f[a].selectedIndex];
		inputListContent(b,s.text,s.value);
		f[b].size=f[b].length;
		f[b].selectedIndex=0;
		for(var i=0,j=0;i<f[a].length;i++){
			s=f[a].options[i];
			if(i!=f[a].selectedIndex){
				f[a].options[j]=new Option(s.text,s.value);
				j++;
			}
		}
		f[a].length--;
		f[a].selectedIndex=0;
	}
}

function inputListContent(a,b,val){
	var f=document.forms[0];
	f[a].options[f[a].length]=new Option(b,val);
	f[a].size=f[a].length;
}

function moveItems(bAdd) {
    var leftBox = document.getElementById("allLocks");
    var rightBox = document.getElementById("authLocks");
    var fromBox, toBox;

    /*if (this.value == "Add Lock") {*/
    if (bAdd) {
      fromBox = leftBox; toBox = rightBox;
    }
    /*else if (this.value == "Remove Lock") {*/ 
    else if (bAdd == 0) { 
        fromBox = rightBox; toBox = leftBox;
    }

    if ((fromBox != null) && (toBox != null)) {
        if(fromBox.length < 1) {
            /*alert("No Items");*/
            return false;
        }
        if(fromBox.selectedIndex == -1) {
            /*alert("Select Items");*/
            return false;
        }
        while ( fromBox.selectedIndex >= 0 ) {
            var newOption = new Option();
            newOption.text = fromBox.options[fromBox.selectedIndex].text;
            newOption.value = fromBox.options[fromBox.selectedIndex].value;
            toBox.options[toBox.length] = newOption;
            fromBox.remove(fromBox.selectedIndex);
        }
    }
    return false;
}

function selectIndex() {
    var rightBox = document.getElementById("authLocks");
    for(i=0; i<rightBox.length; i++)
    {
        //alert("AuthLock");
        //rightBox.selectedIndex = i;
        rightBox[i].selected = true;
    }
}

function confirm(msg, callback) {
    hideSelect(1); // for IE6, hide SELECT elements
    $('#confirm')
    .jqmShow()
    .find('p.jqmConfirmMsg')
      .html(msg)
    .end()
    .find(':submit:visible')
      .click(function() {
          if (this.value == 'Send E-mail') {
              var mailaddr = document.getElementById('mailto').value;
              if (mailaddr == "" || mailaddr.indexOf("@") == -1) {
                  alert("Please input correct e-mail address.");
                  return;
              }
              if (typeof callback == 'string') {
                  window.location.href = callback;
              } else {
                  callback();
              }

          }

          $('#confirm').jqmHide();
          hideSelect(0);
      });
}
function confirm2(msg, callback) {
    $('#confirm2')
    .jqmShow()
    .find('p.jqmConfirmMsg')
      .html(msg)
    .end()
    .find(':submit:visible')
      .click(function() {
          if (this.value == 'delete') {
              (typeof callback == 'string') ?
              window.location.href = callback :
              callback();
          }
          $('#confirm2').jqmHide();
      });
}

function hideSelect(bhide) {
    var param = (bhide == 1 ? "hidden" : "visible");
    var elems = document.getElementsByTagName("select");
    for (i = 0; i < elems.length; i++) {
        elems[i].style.visibility = param;
    }
}
