﻿$(document).ready(function () {
    $.updnValidatorCallout.attachAll();
    monkeyAc();
});

function ComboSearch(seltab) {
    $('.ComboSearch').show()
    var $ttabs = $('#TravelTabs').tabs({ ajaxOptions: { async: false }, select: function (event, ui) {
        var url = $.data(ui.tab, 'load.tabs');
        if (url) { window.open(url, 'extwin'); return false; } return true;
    } 
    }); $('#TravelTabs').tabs('select', seltab);
}

function monkeyAc() {
    $.ui.autocomplete.prototype._renderItem = function (ul, item) {
        return $("<li></li>")
                  .data("item.autocomplete", item)
                  .append("<a>" + item.label + "</a>")
                  .appendTo(ul);
    };
}


function ac(id) {
    return $(id).autocomplete({
        source: "/handlers/airport.ashx",
        minLength: 3,
        delay: 200
    });
}

function dp(id, vg, ct, tm, other, lohi) { return $(id).datepicker({ onSelect: function () { fixdp(id, other, lohi); }, showOn: 'both', buttonImageOnly: true, buttonImage: '/themes/' + tm + '/images/cal.gif', minDate: 1, maxDate: 365 }); }
function fixdp(id, other, lohi) {
    if (lohi != "") {
        var pickedDate = $(id).datepicker("getDate");
        var otherDate = $(other).datepicker("getDate");
        if (lohi == "l") {
            if (pickedDate > otherDate) {
                $(other).datepicker("setDate", pickedDate);
            }
        } else {
            if (pickedDate < otherDate) {
                $(other).datepicker("setDate", pickedDate);
            }
        }
    }
}

function val(vg, ct, np) {
    var pop = false;
    if (vg == 'Flights') {
        pop = true
        try {
            var radios = document.getElementById(ct).getElementsByTagName('input');
            if (radios[0].checked) {
                vg = 'RoundTrip'
            } else if (radios[1].checked) {
                vg = 'OneWay'
            } else if (radios[2].checked) {
                vg = 'MultiCity'
                np == true
            }
        } catch (Error) { vg = 'RoundTrip' }

    }
    var res = Page_ClientValidate(vg);
    if (res) {
        if (!np) { if (pop) { Pops(); } }
        return true;
    } else {
        return false;
    }
}
function encodeHTML() {
    $('.HTMLEditor').each(function (index) {
        var ehtml = $(this).val()
        $(this).val($('<div/>').text(ehtml).html());
    });
}

function editpop(popid, h, w, t, n, trig, hov, title, a) {
    $('#' + trig).attr("title", title);
    $('#' + popid).attr("title", title);
    if (n) {
        $('#' + popid).dialog({
            bgiframe: true,
            autoOpen: false,
            height: h,
            width: w,
            modal: false,
            buttons: {
                'Save': function () {
                    __doPostBack(popid, 'SaveEdit');
                },
                Cancel: function () {
                    $(this).dialog('close');
                },
                'Add New Page': function () {
                    __doPostBack(popid, 'NewEdit');
                },
                'Delete Page': function () {

                    $("#PageDelete").dialog({
                        resizable: false,
                        height: 'auto',
                        modal: true,
                        buttons: {
                            "Delete Page": function () {
                                __doPostBack(popid, 'DeleteEdit');
                            },
                            Cancel: function () {
                                $(this).dialog("close");
                            }
                        }
                    });
                    
                }
            }
        });
    } else {
        $('#' + popid).dialog({
            bgiframe: true,
            autoOpen: false,
            height: h,
            width: w,
            modal: false,
            buttons: {
                'Save': function () {
                    __doPostBack(popid, 'SaveEdit');
                },
                Cancel: function () {
                    $(this).dialog('close');
                }
            }
        });
    }

    $('form').append('<div id="h' + popid + '"></div>');
    $('#' + popid).parent().appendTo('#h' + popid);
    if (t != '') { $('#' + t).tabs(); }


    $('#' + trig).click(function () { $('#' + popid).dialog('open') });
    if (a) {
        var node = $('#' + hov).parent().parent();
    } else {
        var node = $('#' + hov);
    }

    $('#' + trig).hover(
        function () {
            $(node).width($(node).width() - 4);
            $(node).height($(node).height() - 4);
            $(node).addClass("Hover");
        },
        function () {
            $(node).removeClass("Hover");
            $(node).width($(node).width() + 4);
            $(node).height($(node).height() + 4);
        });

}


// Sel Pages //

function FilterQuotes(Value, Column) {
    FlightKeys = [];
    ResultsTable.fnFilter(Value, Column, false);
}

function BuildSlider(sliderid, min, max, displayid, filterid, format) {
    if (min < max) {
        $(displayid).text(displayFormat(min, format) + " to " + displayFormat(max, format));
        $(sliderid).slider({
            min: min,
            max: max,
            values: [min, max],
            range: true,
            slide: function (e, ui) {
                $(displayid).text(displayFormat(ui.values[0], format) + ' to ' + displayFormat(ui.values[1], format));
            },
            stop: function (e, ui) {
                if (!ClearingFilters) {
                    FilterQuotes(ui.values[0] + "|" + ui.values[1], filterid, false);
                }
            },
            change: function (e, ui) {
                if (ClearingFilters) {
                    $(displayid).text(displayFormat(min, format) + " to " + displayFormat(max, format));
                }
            }
        });
    } else {
        $(displayid).text(displayFormat(min, format));
    }

}


function Checks(name) {
    $("input[name=" + name + "]").each(function () {
        this.checked = true;
    });
}
function ChecksNot(name, sel) {
    $("input[name=" + name + "]").each(function () {
        if (sel == '') {
            this.checked = false;
        } else if ($(this).val() == sel) {
            this.checked = true;
        } else {
            this.checked = false;
        }
    });
}

function FilterString(string, column) {
    $("#ProgressDiv").dialog("open");
    var sfilter = "";
    $("input[name=" + string + "]").each(function () {
        if (this.checked) {
            sfilter = sfilter + this.value + "|";
        }
    });
    if (sfilter == "") {
        sfilter = "--";
    } else {
        sfilter = sfilter.substring(0, sfilter.length - 1);
    }
    FilterQuotes(sfilter, column);
    setTimeout('$("#ProgressDiv").dialog("close")', 30);
}

function displayFormat(num, format) {
    if (format == "") {
        return num;
    } else if (format == "curr") {
        return formatCurrency(num);
    } else if (format == "dura") {
        return formatDuration(num)
    } else if (format == "time") {
        return formatTime(num);
    }
}

function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g, '');
    if (isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num * 100 + 0.50000000001);
    cents = num % 100;
    num = Math.floor(num / 100).toString();
    if (cents < 10)
        cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
        num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
    return (((sign) ? '' : '-') + '$' + num + '.' + cents);
}
function formatDuration(num) {
    if (num == 0)
        return '--';
    else {
        var Hours = Math.floor(num / 60);
        var Minutes = Math.round(num % 60);
        var Time;
        if (Hours > 0) {
            Time = Hours + 'h ';
            if (Minutes > 0) {
                Time += Minutes + 'm';
            }
        } else {
            Time = Minutes + 'm';
        }

        return Time;
    }
}
function formatTime(num) {
    var M;
    var Hours = Math.floor(num / 60);
    if (Hours >= 12) {
        if (Hours > 12)
            Hours = Hours - 12;
        M = ' pm'
    } else {
        if (Hours == 0)
            Hours = 12
        M = ' am'
    }
    var Minutes = Math.round(num % 60);
    if (Minutes < 10) {
        Minutes = '0' + Minutes;
    }

    var Time = Hours + ':' + Minutes + M;
    return Time;
}
function formatDate(num) {
    var thedate = new Date(num)
    var weekdays = new Array("Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat");
    var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec");
    var weekday = thedate.getDay();
    var date = thedate.getDate();
    var month = thedate.getMonth();
    //var year = thedate.getFullYear();
    return weekdays[weekday] + ", " + months[month] + " " + date
}



/*
* jQuery (ASP.NET) Validator Callout plugin
*   http://updatepanel.net/2009/04/19/jquery-aspnet-validator-callout-plugin/
*
* Copyright (c) 2009 Ting Zwei Kuei
*
* Dual licensed under the MIT and GPL licenses.
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.opensource.org/licenses/gpl-3.0.html
*/
(function ($) {
    $.fn.updnValidatorCallout = function (options) {
        // Prepare options.
        options = $.extend({}, $.fn.updnValidatorCallout.defaults, options);
        // Currently open callout.
        var _current = null;
        // Overrides ValidatorOnChange in WebUIValidation.js to ensure input and label styles are updated.
        if (window.ValidatorOnChange && !window._ValidatorOnChange) {
            window._ValidatorOnChange = window.ValidatorOnChange;
            window.ValidatorOnChange = function (ev) {
                window._ValidatorOnChange(ev);
                if (!ev) { ev = window.event; } // Fix IE8 with ASP.NET 4.0
                ev = $.event.fix(ev);   // Normalizes browser event object.
                
                var $input = $(ev.target);
                // Selects all labels associated with the input element.
                var $label = $("label[for='" + $input.attr("id") + "']");
                var $callout = $input.data("callout");
                var vals = $input.attr("Validators");
                if (window.AllValidatorsValid && window.AllValidatorsValid(vals)) {
                    if ($input.hasClass(options.errorInputCssClass)) {
                        $input.removeClass(options.errorInputCssClass);
                        $label.removeClass(options.errorLabelCssClass);
                    }
                    if ($callout) {
                        $callout.trigger("close");
                    }
                } else {
                    if (!$input.hasClass(options.errorInputCssClass)) {
                        $input.addClass(options.errorInputCssClass);
                        $label.addClass(options.errorLabelCssClass);
                    }
                    if ($callout) {
                        $callout.trigger("open");
                    }
                }
            };
        }
        // Plugin implementation.
        return this.each(function () {
            var val = this;
            // Only create callout if controltovalidate has a value.
            if (this.controltovalidate) {
                var $input = $(document.getElementById(this.controltovalidate));
                // Create a separate callout for each input element.
                var $callout = $input.data("callout");
                if (!$callout) {
                    $callout = $("<div/>")
                    .appendTo($input.parent())
                    .addClass(options.calloutCssClass)
                    .hide()
                    .bind("open", function (ev) {
                        if (_current) {
                            _current.trigger("close");
                        }
                        var pos = $input.position();
                        _current = $(this).css({
                            position: "absolute",
                            left: Math.floor(pos.left + $input.outerWidth() + options.offsetX),
                            top: Math.floor(pos.top + options.offsetY)
                        }).fadeIn("fast");
                    })
                    .bind("close", function (ev) {
                        $(this).hide();
                        _current = null;
                    });
                    // Add callout X Button (satri)
                    $xbutton = $("<span>x</span>");
                    $xbutton.appendTo($callout).addClass(options.xbuttonCssClass);
                    $xbutton.click(function () { $callout.trigger("close") });
                    // Add callout pointer
                    $("<span/>").appendTo($callout).addClass(options.pointerCssClass);
                }
                // Move validator inside of callout.
                $callout.append(this);
                // Force "SetFocusOnError" property of the validator to true.
                // This will display the callout for the first validator in error state.
                this.focusOnError = "t";
                // Open callout when input element gains focus.
                $input.focus(function (ev) {
                    if (!val.isvalid) {
                        $callout.trigger("open");
                    }
                });
                // Associate the callout element with the validator.
                $input.data("callout", $callout);
                // Helper function to open/close callout and add/remove error state styles.
                var updateDisplay = function (isValid) {
                    // For non-IE browsers, ValidatorUpdateDisplay sets visibility to
                    // show/hide validators, so I use jQuey toggle to set display as well.
                    $(val).toggle(!isValid);
                    // Selects all labels associated with the input element.
                    var $label = $("label[for='" + $input.attr("id") + "']");
                    if (!isValid) {
                        if (!$input.hasClass(options.errorInputCssClass)) {
                            $input.addClass(options.errorInputCssClass);
                            $label.addClass(options.errorLabelCssClass);
                        }
                        if (!_current) {
                            $callout.trigger("open");
                        }
                    } else {
                        var vals = $input.attr("Validators");
                        if (window.AllValidatorsValid && window.AllValidatorsValid(vals)) {
                            if ($input.hasClass(options.errorInputCssClass)) {
                                $input.removeClass(options.errorInputCssClass);
                                $label.removeClass(options.errorLabelCssClass);
                            }
                            $callout.trigger("close");
                        }
                    }
                };
                // Overrides evaluationfunction of each validator to update
                // input and label styles according to the validation result.
                if (this.evaluationfunction) {
                    var _evaluationfunction = this.evaluationfunction;
                    this.evaluationfunction = function (val) {
                        var isValid = _evaluationfunction(val);
                        updateDisplay(isValid);
                        return isValid;
                    };
                }
                // Set initial state.
                updateDisplay(val.isvalid);
            }
        });
    };
    $.fn.updnValidatorCallout.defaults = {
        calloutCssClass: "updnValidatorCallout",
        pointerCssClass: "updnValidatorCalloutPointer",
        xbuttonCssClass: "updnValidatorCalloutXButton", //CSS For X Button (satri)
        errorInputCssClass: "updnValidationErrorInput",
        errorLabelCssClass: "updnValidationErrorLabel",
        offsetX: 0,
        offsetY: 0
    };
    $.updnValidatorCallout = {
        attachAll: function (options) {
            if (window.Page_Validators) {
                $(window.Page_Validators).updnValidatorCallout(options);
            }
        }
    };
})(jQuery);

function is_int(value){ 
  if((parseFloat(value) == parseInt(value)) && !isNaN(value)){
      return true;
  } else { 
      return false;
  } 
}


/* jQueryString v2.0.4
By James Campbell
*/
(function ($) {
    $.jQueryString = { Version: "2.0.4", Defaults: {
        URL: location.href,
        Unescape: true,
        onStart: function (Option) {
        },
        onError: function (Option) {
        },
        onSuccess: function (Option, Result) {
        },
        callback: function (Option, Result) {
        }
    }, getDefaults: function () {
        return $.extend(this.Defaults, { URL: location.href });
    } 
    };
    $.unserialise = function (Data, Unescape) {
        var Data = Data.split("&");
        var Serialised = {};
        $.each(Data, function () {
            var Properties = this.split("=");
            Serialised[Properties[0]] = (Unescape) ? unescape(Properties[1]) : Properties[1];
        });
        return Serialised;
    };
    $.getAllQueryStrings = function (Option) {
        Option = $.extend($.jQueryString.getDefaults(), Option);
        var Result = {};
        try {
            var QS = Option.URL.split("?")[1].split("#")[0];
        }
        catch (e) {
            Option.callback(Option, Result);
            return Result;
        }
        Result = $.unserialise(QS, Option.Unescape);
        Option.callback(Option, Result);
        return Result;
    }
    $.QueryStringExist = function (Option) {
        Option = $.extend($.jQueryString.getDefaults(), Option);
        var Result = (typeof ($.getAllQueryStrings({
            URL: Option.URL
        })[Option.ID]) !=
        "undefined");
        Option.callback(Option, Result);
        return Result;
    }
    $.getQueryString = function (Option) {
        Option = $.extend($.jQueryString.getDefaults(), Option);
        var Result = Option.DefaultValue;
        Option.onStart(Option);
        if ($.QueryStringExist({
            ID: Option.ID,
            URL: Option.URL
        })) {
            Result = $.getAllQueryStrings({
                URL: Option.URL
            })[Option.ID];
            Option.onSuccess(Option, Result);
        }
        else {
            Option.onError(Option);
        };
        Option.callback(Option, Result);
        return Result;
    };
})(jQuery);


(function(a){a.fn.example=function(e,g){var d=a.isFunction(e),f=a.extend({},g,{example:e});return this.each(function(){var c=a(this),b=a.metadata?a.extend({},a.fn.example.defaults,c.metadata(),f):a.extend({},a.fn.example.defaults,f);if(!a.fn.example.boundClassNames[b.className]){a(window).unload(function(){a("."+b.className).val("")});a("form").submit(function(){a(this).find("."+b.className).val("")});a.fn.example.boundClassNames[b.className]=true}if(!c.attr("defaultValue")&&(d||c.val()==b.example))c.val("");
if(c.val()==""&&this!=document.activeElement){c.addClass(b.className);c.val(d?b.example.call(this):b.example)}c.focus(function(){if(a(this).is("."+b.className)){a(this).val("");a(this).removeClass(b.className)}});c.change(function(){a(this).is("."+b.className)&&a(this).removeClass(b.className)});c.blur(function(){if(a(this).val()==""){a(this).addClass(b.className);a(this).val(d?b.example.call(this):b.example)}})})};a.fn.example.defaults={className:"example"};a.fn.example.boundClassNames=[]})(jQuery);

