var WebOrder = new Object();

WebOrder.initilized = false;

WebOrder.init = function(args) {
    this.required = args.required;
    this.email = args.email;
    //this.job = args.job;
    this.state = args.state;
    this.province = args.province;
    //this.format = args.format;
    //this.formats = args.formats;
    //this.setStandard(args.standard);
    //this.ntsc = args.ntsc;
    //this.pal = args.pal;
    this.label = $("stateTitle");
    this.initilized = true;
    this.download = "169";
    this.sendByMail = "170";

    this.email2 = args.email2;
    this.country = args.country;
    this.country2 = args.country2;
    this.invoiceCheck = args.invoiceCheck;
}

WebOrder.setStandard = function(id) {
    id = $(id);
    if (id) {
        var radio = id.select("INPUT[type='radio']");
        this.ntsc = radio[1];
        this.pal = radio[0];
    }
}

WebOrder.validate = function(field, args) {
    if (!this.initilized) {
        alert("WebOrder object is not initilized. Operation is canceled!");
        return false;
    }

    if (field) {
        if (args) {
            var job = parseInt($F(this.job));
            for (var i = 0; i < args.length; i++) {
                if (args[i] == job) {
                    if (field.tagName == "SELECT")
                        new AP.Validation(field).required("missing!", "-1");
                    else
                        new AP.Validation(field).required("missing!");
                    return;
                }
            }
            new AP.Validation(field).setError(false);
        }
        else {
            if (field.tagName == "SELECT")
                new AP.Validation(field).required("missing!", "-1");
            else
                new AP.Validation(field).required("missing!");
        }
    }
};

WebOrder.validateEmail = function() {
    if (!this.initilized) {
        alert("WebOrder object is not initilized. Operation is canceled!");
        return false;
    }
    new AP.Validation(this.email).email();
}

WebOrder.validateOrder = function(orderType, clientValidate) {
    if (orderType == 'dubb') {
        var input = $("digParent").down("input");
        input.value = this.getChecks("digParent");
        return true;
    }

    $("errorParent").setStyle({ display: "none" });

    var valid = true;
    clientValidate = clientValidate || false;

    if (clientValidate) {
        if (!this.initilized) {
            alert("WebOrder object is not initilized. Operation is canceled!");
            return false;
        }

        for (var i = 0; i < this.required.length; i++) {
            this.validate(this.required[i].field, this.required[i].args);
        }
        this.validateEmail();

        var valid = AP.Validation.isValid();
        if (!valid) {
            var fld = $(AP.Validation.fields[0]);
            var div = fld.up("table").up("div");
            if (!div.visible())
                div.show();
            div.scrollTo();
            fld.focus();
        }
    }

    if (valid)
        valid = this.getItems(orderType);
    return valid;
};

WebOrder.getItems = function(orderType) {
    var valid = true;

    if (orderType == "screener") {
        valid = this.getCheckedItems();
        if (!valid)
            alert("No items selected for this order. Please select at least one item to proceed with submission.");
    }
    else if (orderType == "master") {
        valid = this.getPlaylist();
        if (!valid)
            alert("You have no stories in your playlist. Please select at least one story to proceed with submission.");
    }
    else if (orderType == "accept" || orderType == "decline") {
        var input = $("gridParent").down("input");
        input.value = this.getChecks("gridParent");
        if (orderType == "accept" && $F(input).length == 0) {
            alert("Request cannot be authorised with all items declined!");
            return false;
        }
    }
    else if (orderType == "dubb") {
        this.getDubbingChecks();
    }

    if (valid && !this.isPopover) {
        valid = this.pageClientValidate();
    }
    return valid;
}

WebOrder.getDubbingChecks = function() {
    var input = $("digParent").down("input");
    input.value = this.getChecks("digParent");
}

WebOrder.setCountry = function(list) {
    if (!this.initilized) {
        alert("WebOrder object is not initilized. Operation is canceled!");
        return false;
    }
    var country = $F(list.id);
    if (country == "1") {
        this.label.update("State:");
        this.label.setAttribute("for", this.state.id);
        this.state.show();
        this.province.hide();
    }
    else {
        this.label.update("Province:");
        this.label.setAttribute("for", this.province.id);
        this.state.hide();
        this.province.show();
    }

    if (this.ntsc && this.pal) {
        this.ntsc.checked = country == "1" || country == "2" || country == "109";
        this.pal.checked = !this.ntsc.checked;
    }
};

WebOrder.setOther = function(list, param) {
    list = $(list);
    var value = $F(list);
    param = param || "-2";
    var other = list.next("input");
    if (value == "-2" || list.options[list.selectedIndex].text.indexOf(param) >= 0) {
        other.show();
        other.focus();
    }
    else {
        other.hide();
        //new AP.Validation(other).setError(false); 
    }
};

WebOrder.setFormat = function(list) {
    list = $(list) || this.formats;
    if (!list) return;

    this.setOther(list);

    var tr = $("deliveryRow");
    if (!tr) return;

    var delivery = tr.down("select");
    var delivery_other = delivery.next("input");

    var text = list.options[list.selectedIndex].text;
    if (text == "Satellite Feed" || text == "Line Feed") {
        tr.hide();
        delivery.selectedIndex = delivery.options.length - 1;
        delivery_other.value = "N/A";
    }
    else {
        if (!tr.visible()) {
            tr.show();
            delivery.selectedIndex = 0;
        }
        if ($F(delivery_other) == "N/A")
            delivery_other.value = "";
        this.setOther(delivery, "specify)");
    }

    if (!this.isPopover)
        this.pageClientValidate();
};

WebOrder.pageClientValidate = function() {
    if (typeof (Page_ClientValidate) == "function")
        return Page_ClientValidate();
    return true;
};

WebOrder.setAddress = function(element, index) {
    var address1, address2, address3;
    var value1, value2, value3;

    element = $(element);
    var tr = element.up("tr");

    if (index == 1) {
        address1 = element;
        address2 = tr.next(0).down("input");
        address3 = tr.next(1).down("input");
    }
    else if (index == 2) {
        address1 = tr.previous().down("input");
        address2 = element;
        address3 = tr.next().down("input");
    }
    else if (index == 3) {
        address1 = tr.previous(1).down("input");
        address2 = tr.previous().down("input");
        address3 = element;
    }

    value1 = $F(address1).strip();
    value2 = $F(address2).strip();
    value3 = $F(address3).strip();

    if (value1.length == 0) {
        if (value2.length == 0) {
            address1.value = value3;
        }
        else {
            address1.value = value2;
            address2.value = value3;
        }
        address3.value = "";
    }
    else {
        if (value2.length == 0) {
            address2.value = value3;
            address3.value = "";
        }
    }

    this.validate(address1);
};

WebOrder.print = function() {
    $("gridPanel").show();
    $("requestPanel").show();
    $("contactPanel").show();
    $("companyPanel").show();
    $("orderPanel").show();
    window.print();
}

WebOrder.toggle = function(element, panelId, pullCovers, saveState) {
    var className, display;

    element = $(element);
    var span = element.down("span", 1);

    if (element.hasClassName("expanded")) {
        element.removeClassName("expanded");
        element.addClassName("collapsed");
        display = "none";

        if (span) {
            var grid = element.up("table").next("div").down("table", 1);
            var total = grid ? "(" + (grid.rows.length - 1) + ")" : "(0)";
            span.update(total);
        }
    }
    else if (element.hasClassName("collapsed")) {
        element.removeClassName("collapsed");
        element.addClassName("expanded");
        display = "block";
        if (span)
            span.update("");
    }
    className = element.className;

    var div = $(panelId);
    if (pullCovers)
        Effect.toggle(div, 'blind', { duration: 0.3, afterUpdate: PopOver_PullUpCovers, afterFinish: PopOver_PullUpCovers });
    else
        Effect.toggle(div, 'blind', { duration: 0.3 });

    if (saveState) {
        element.down("input").value = className;
        element.down("input", 1).value = display;
    }
}

WebOrder.addToOrder = function(itemId, orderType) {
    this.blur();
    if (this.disabled)
        return false;

    var animateObj = this;
    if (animateObj) {
        var img = $(animateObj).cloneNode(true);
        img.id = null; //prevents weird problems when placed in the page
        //img.style.position = "absolute";
        animateObj.hide();
        animateObj.parentNode.insertBefore(img, animateObj);
        new Effect.Parallel([
			new Effect.Move(img, { sync: true, y: -1000 }),
			new Effect.Fade(img, { sync: true })
		], {
		    duration: 1,
		    afterFinish: function() { img.hide(); animateObj.style.opacity = null; animateObj.show(); }
		}
		);
    }

    orderType = orderType.toLowerCase();
    var onSuccess = orderType == "master" ? WebOrder.refreshMaster : WebOrder.refreshScreener;

    var args = $H({ "a": "add2" + orderType.toLowerCase(), "itemId": itemId });
    var opts = {
        method: "post",
        showError: true,
        postBody: args.toQueryString(),
        onSuccess: onSuccess,
        onComplete: function() { this.disabled = false; } .bind(this)
    };

    Request(opts, "Adding item to " + orderType + "...", null, "/secured/Lightbox.ashx");
    this.disabled = true;
    return false;
}

WebOrder.refreshOrder = function(orderType) {
    var args = $H({ "a": "getspecial", "spec": orderType });
    var opts = {
        method: "post",
        showError: true,
        postBody: args.toQueryString()
    };

    orderType = orderType.toLowerCase();
    var target = orderType == "master" ? "masterRoot" : "cartRoot";
    Request(opts, "Refreshing " + orderType + "...", target, "/secured/Lightbox.ashx");
    return false;
}

WebOrder.refreshOrders = function() {
    var opts = {
        method: "get",
        showError: true
    };
    Request(opts, "Refreshing Screener...", "cartRoot", "/secured/Lightbox.ashx?a=getspecial&spec=Screener");
    Request(opts, "Refreshing Master...", "masterRoot", "/secured/Lightbox.ashx?a=getspecial&spec=Master");
    return false;
}

WebOrder.deleteItem = function(itemId, folderId, target) {
    if (this.blur)
        this.blur();
    if (this.disabled)
        return false;

    if (!confirm("This item will be deleted. Do you want to proceed?"))
        return false;
    
    var onSuccess = WebOrder.refreshCallback;
    if (typeof (onSuccess) == "undefined") {
        if (target == "cart" || target == "screener")
            onSuccess = window.RefreshScreenerWidget;
        else if (target == "master")
            onSuccess = window.RefreshMasterWidget;
        else if (target == "reload")
            onSuccess = window.location.refresh;
        else if (target == "folder" && AP.Folders && AP.Folders[folderId])
            onSuccess = function() { AP.Folders[folderId].refresh(); };
        else
            onSuccess = window.RefreshLightboxWidget;
    }

    var args = $H({ "a": "r", "id": itemId, "lbxid": folderId });
    var opts = {
        method: "post",
        showError: true,
        postBody: args.toQueryString(),
        onSuccess: onSuccess,
        onComplete: function() { this.disabled = false; } .bind(this)
    };

    Request(opts, "Deleting item ...", null, "/secured/Lightbox.ashx");
    this.disabled = true;
    return false;
}

WebOrder.deleteItems = function(folderId, target) {
    var ids = "";
    
    var checks = WebOrder.getAllItems(target);
    if (checks && checks.each) {
        checks.each(function(chk) {
            if (chk.checked) {
                if (ids.length > 0)
                    ids += ","
                ids += chk.readAttribute("value");
            }
        });
    }

    if (ids.length == 0)
        alert("No items are selected. Please select at least one item to proceed.");
    else
        WebOrder.deleteItem(ids, folderId, target.toLowerCase());

    return false;
}

WebOrder.getAllItems = function(target) {
    var root;

    if (target == "Screener")
        root = $("cartContent");
    else if (target == "Master")
        root = $("masterContent");
    else
        root = $("lightboxContent");

    if (root)
        return root.select("input[name=ids]");

    return null;
}

WebOrder.selectItems = function(target, selected) {
    var checks = WebOrder.getAllItems(target);
    if (checks && checks.each)
        checks.each(function(chk) { chk.checked = !selected; chk.click(); });
}

WebOrder.orderToFolder = function(action) {
    action = action.toLowerCase();
    var onSuccess = window.location.href.toLowerCase().indexOf(action.split("2")[0] + ".aspx") > 0 ? function() { window.location.href = "/secured/lightbox/Checkout.aspx"; } : window.location.refresh;
    var args = $H({ "a": action });
    var opts = {
        method: "post",
        showError: true,
        postBody: args.toQueryString(),
        onSuccess: onSuccess
    };

    Request(opts, "Saving as folder...", null, "/secured/lightbox/Checkout.aspx");
    return false;
}

WebOrder.clearOrder = function(orderType) {
    if (confirm("All items from this request will be deleted. Do you want to proceed?")) {
        orderType = orderType.toLowerCase();
        var onSuccess = window.location.href.toLowerCase().indexOf(orderType + ".aspx") > 0 ? function() { window.location.href = "/secured/lightbox/Checkout.aspx"; } : Prototype.emptyFunction;

        var args = $H({ "a": "clear" + orderType.toLowerCase() });
        var opts = {
            method: "post",
            showError: true,
            postBody: args.toQueryString(),
            onSuccess: onSuccess
        };

        var target = orderType == "master" ? "masterRoot" : "cartRoot";
        Request(opts, "Clearing " + orderType + "...", target, "/secured/Lightbox.ashx");
    }
    return false;
}

WebOrder.puffImage = function(itemId) {
    var img = $('img_' + itemId);
    if (img) {
        var clone = img.cloneNode(true);
        clone.id = "";
        clone.style.position = "absolute";
        img.parentNode.insertBefore(clone, img);
        Effect.Puff(clone);
    }
}

WebOrder.checkFolderAll = function(chk) {
    chk.blur();
    var checks = $$("#" + this.getGridDiv(chk).id + " input[rel=checkbox]");
    for (var i = 0; i < checks.length; i++) {
        checks[i].checked = chk.checked;
    }
}

WebOrder.checkAll = function(checked, chk) {
    if (chk)
        chk.blur();
    var inputs = $$("#foldersParent input[rel]");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].type == "checkbox")
            inputs[i].checked = checked;
    }
    return false;
}

WebOrder.checkOne = function(chk, addEvents) {
    chk.blur();

    var checked = false;
    var div = this.getGridDiv(chk);

    var checks = $$("#" + div.id + " input[rel=checkbox]");
    var all = true;
    for (var i = 0; i < checks.length; i++) {
        if (checks[i].checked) {
            checked = true;
        }
        else {
            all = false;
            if (checked)
                break;
        }
    }
    checks = $$("#" + div.id + " input[rel=checkbox_all]");
    checks[0].checked = all;
    addEvents = addEvents || false;
    if (addEvents) {
        this.gridId = $(chk).up("table").id;
        Event.stopObserving(div.up("body"), "keydown", this.reorderListener);
        if (checked)
            Event.observe(div.up("body"), "keydown", this.reorderListener);
    }
}

WebOrder.checkOrderItem = function(chk) {
    chk.blur();

    var tr = $(chk).up("tr");
    if (chk.checked)
        tr.removeClassName("disabled");
    else
        tr.addClassName("disabled");
}

WebOrder.doChecked = function(list, action) {
    var value = this.getChecks("foldersParent", "checkbox");
    this.checkedItems.value = value;

    if (value.length == 0) {
        if (action == "copy")
            action = "copy to another folder";
        else if (action == "move")
            action = "move to another folder";
        else if (action == "shopping cart")
            action = "add to a shopping cart";
        alert("No itecms selected. Please, check item(s) that you want to " + action + ".");
        list.selectedIndex = 0;
        return false;
    }
    else {
        if (action == "delete") {
            var ret = confirm("All selected item will be deleted. Do you want to proceed?");
            if (!ret)
                this.checkAll(false);
            return ret;
        }
    }
    return true;
}

WebOrder.getGridDiv = function(element) {
    return $(element).up("div", 1);
}

WebOrder.initDraggables = function() {
    Sortable.create("playlistParent", {
        tag: 'div',
        overlap: 'vertical',
        constraint: false,
        revert: false,
        dropOnEmpty: true
    });
}

WebOrder.warnAboutExtendedDeliveryTimes = function(storyNumber, isDigitized) {
    if (isDigitized == "ConfirmedDigital" || parseInt(isDigitized) == 4)
        return true;

    var temp = storyNumber.toUpperCase();
    if (temp.indexOf("A0") != 0 && temp.indexOf("C0") != 0 && temp.indexOf("F0") != 0)
        return true;
    return confirm("The original source of this story is on film and the delivery time of your master copy will be extended\nwhile the film is transferred to video tape and digitised. Do you want to proceed?");
}

WebOrder.addToPlaylist = function(element, duration, from, to) {
    element = $(element);
    element.blur();

    duration = parseInt(duration);
    //    if (isNaN(duration)){
    //        alert("Invalid duration! This item cannot be added to the playlist.  ");
    //        return false;
    //    }
    if (isNaN(duration))
        duration = 0;

    if (element.id.indexOf("drag_") == 0) {
        var id = element.id.split("_")[1];
        var i = 0;
        var test = $("drop_" + id + "_" + i);
        while (test != null) {
            i += 1;
            test = $("drop_" + id + "_" + i);
        }

        var idSuffix = "_" + +id + "_" + i;
        var div = $("_playlistItemId").cloneNode(true);

        var fields = this.getDurationFields(div);
        fields.id.value = id;
        fields.duration.value = duration;

        from = from || 0;
        to = to || duration;

        this.setDurationValues(from, fields.from);
        this.setDurationValues(to, fields.to);
        fields.total.update(this.durationString(to - from));

        var sliderParentId = "slider" + idSuffix;
        var sliderFromId = "slider_from" + idSuffix;
        var sliderToId = "slider_to" + idSuffix;
        var sliderIntervalId = "slider_interval" + idSuffix;

        div.id = "drop" + idSuffix;
        div.down("span").update(element.innerHTML);

        var slider = div.down("div");
        slider.id = sliderParentId;
        slider.down("div").id = sliderFromId;
        slider.down("div", 1).id = sliderToId;
        slider.down("div", 2).id = sliderIntervalId;

        var img = $(element.id.replace("drag_", "img_"));
        var clone = img.cloneNode(true);

        clone.id = "";
        img.parentNode.insertBefore(clone, img);
        clone.style.position = "absolute";
        new Effect.Puff(clone, { duration: 0.5 });

        $("playlistParent").appendChild(div);
        new Draggable(div, { revert: true, handle: "handle", endeffect: function() { div.hide(); div.show(); } });

        if (duration == 0) {
            var tbl = slider.up("table");
            tbl.hide();
            var span = document.createElement("SPAN");
            span.className = "disabled";
            span.innerHTML = "No duration available for this story";
            tbl.parentNode.appendChild(span);
        }
        else {
            if (!this.sliders)
                this.sliders = new Array();
            var s = new Control.Slider(
                [sliderFromId, sliderToId],
                sliderParentId,
                {
                    sliderValue: [from, to],
                    range: $R(0, duration),
                    restricted: true,
                    spans: [sliderIntervalId],
                    onSlide: function(v) { WebOrder.onSliderChange(v, fields, duration); },
                    onChange: function(v) { WebOrder.onSliderChange(v, fields, duration); }
                });
            this.sliders.push(s);
        }
        this.getPlaylistTotal();
    }
    return false;
}

WebOrder.initPlaylist = function() {
    var items = this.getPlaylistItems();
    if (!items) return;

    for (var i = 0; i < items.length; i++) {
        var item = items[i];
        var element = $("drag_" + item.id);
        if (element) {
            this.addToPlaylist(element, item.duration, item.from, item.to);
        }
    }
}

WebOrder.getDurationFields = function(parent) {
    var fields = {};
    fields.from = {};
    fields.to = {};

    var tbl = $(parent).down("table", 1);
    var tr = $(tbl.rows[0]);
    var td = $(tr.cells[1]);
    var inputs = td.select("INPUT");

    fields.from.h = inputs[0];
    fields.from.m = inputs[1];
    fields.from.s = inputs[2];
    fields.from.f = inputs[3];
    fields.from.value = inputs[4];

    td = $(tr.cells[3]);
    inputs = td.select("INPUT");

    fields.to.h = inputs[0];
    fields.to.m = inputs[1];
    fields.to.s = inputs[2];
    fields.to.f = inputs[3];
    fields.to.value = inputs[4];

    fields.total = $(tr.cells[4]);

    inputs = tbl.nextSiblings();
    fields.id = inputs[0];
    fields.duration = inputs[1];

    return fields;
}

WebOrder.setDurationValues = function(value, fields) {
    var ss = value / 1000;
    var h = parseInt((ss / 3600).toString());
    value -= h * 3600;
    var m = parseInt((ss / 60).toString());
    var s = parseInt(ss - m * 60);

    h = h > 9 ? h : "0" + h;
    m = m > 9 ? m : "0" + m;
    s = s > 9 ? s : "0" + s;

    if (fields) {
        fields.h.value = h;
        fields.m.value = m;
        fields.s.value = s;
        fields.f.value = "00";
        fields.value.value = value;
    }

    return h + ":" + m + ":" + s;
}

WebOrder.onSliderChange = function(v, fields, duration) {
    var t1 = v[0].toFixed();
    var t2 = v[1].toFixed();

    this.setDurationValues(t1, fields.from);
    this.setDurationValues(t2, fields.to);
    fields.total.update(this.durationString(t2 - t1, duration));
    this.getPlaylistTotal();
}

WebOrder.getPlaylistTotal = function() {
    var total = 0;
    var empty = $("playlistSummary").down("div");
    var msg = empty.next("div");

    var inputs = $$("#playlistParent input[rel=to]");
    if (inputs.length == 0) {
        msg.update("");
        msg.hide();
        empty.show();
        return;
    }

    empty.hide();
    msg.show();

    for (var i = 0; i < inputs.length; i++) {
        total += parseInt(inputs[i].value);
    }

    inputs = $$("#playlistParent input[rel=from]");
    for (var i = 0; i < inputs.length; i++) {
        total -= parseInt(inputs[i].value);
    }

    var note = "";
    inputs = $$("#playlistParent input[rel=duration]");
    for (var i = 0; i < inputs.length; i++) {
        if (parseInt(inputs[i].value) == 0) {
            note = "<span class='disabled'> * Estimated number due to unavailability of duration for some stories on the playlist</span>";
            break;
        }
    }

    msg.update("<span class='larger highlight margin'>Total " + this.durationString(total) + "</span>" + note);

    return total;
}

WebOrder.durationString = function(duration, total) {
    if (!total || total == duration)
        return " duration: <strong>" + this.setDurationValues(duration) + "</strong>";
    else
        return " duration: <strong>" + this.setDurationValues(duration) + "</strong> of <strong>" + this.setDurationValues(total) + "</strong>";
}

WebOrder.digitsOnly = function(e) {
    if (!e) e = window.event;

    var KeyCode = (e.keyCode) ? e.keyCode : e.which;

    return ((KeyCode == 8) // backspace
      || (KeyCode == 9) // tab
      || (KeyCode == 37) // left arrow
      || (KeyCode == 39) // right arrow
      || (KeyCode == 46) // delete
      || ((KeyCode > 47) && (KeyCode < 58)) // 0 - 9 
  );
}

WebOrder.setDuration = function(input, type) {
    var div = $(input).up("div");
    var fields = this.getDurationFields(div);

    var h = type == "from" ? parseInt(fields.from.h.value) : parseInt(fields.to.h.value);
    var m = type == "from" ? parseInt(fields.from.m.value) : parseInt(fields.to.m.value);
    var s = type == "from" ? parseInt(fields.from.s.value) : parseInt(fields.to.s.value);

    if (s > 59) {
        var extra = parseInt((s / 60).toString());
        s -= extra * 60;
        m += extra;
    }

    if (m > 59) {
        var extra = parseInt((m / 60).toString());
        m -= extra * 60;
        h += extra;
    }

    var value = (h * 3600 + m * 60 + s) * 1000;
    var duration = parseInt($F(fields.duration));
    if (value > duration)
        value = duration;

    if (type == "from") {
        var to = parseInt($F(fields.to.value));
        if (value > to)
            value = to;
        this.setDurationValues(value, fields.from);
    }
    else {
        var from = parseInt($F(fields.from.value));
        if (value < from)
            value = from;
        this.setDurationValues(value, fields.to);
    }

    var id = div.id.replace("drop", "slider_from");
    for (var i = 0; i < this.sliders.length; i++) {
        var slider = this.sliders[i];
        if (slider.handles[0].id == id) {
            id = type == "from" ? 0 : 1;
            slider.setValue(parseInt(value), id);
            this.getPlaylistTotal();
            return;
        }
    }
}

WebOrder.adjustScreener = function(list) {
    list = $(list);
    if (!list)
        return;

    var value = list.options[list.selectedIndex].value;

    var div = list.up("div");
    var rows = $$("#" + div.id + " tr[rel=mail]");
    for (var i = 0; i < rows.length; i++) {
        var tr = rows[i];
        if (value == this.sendByMail)
            tr.show();
        else
            tr.hide();
    }

    var rows = $$("#" + div.id + " tr[rel=download]");
    for (var i = 0; i < rows.length; i++) {
        var tr = rows[i];
        if (value == this.download)
            tr.show();
        else
            tr.hide();
    }

    if (!this.isPopover)
        this.pageClientValidate();
}


WebOrder.adjustMaster = function(list, format, standard, delivery) {
    list = $(list);
    if (!list)
        return;

    var value = list.options[list.selectedIndex].value;

    // IF THE DELIVERY METHOD FOR THE MASTER REQUEST IS -1, THEN THIS IS A CLEARANCE REQUEST.
    if (value == -1) {
        // DISABLE FORMAT, STANDARD AND DELIVERY FIELDS.
        $(format).disabled = true;
        $(format).up('tr').hide();

        $(standard + "_0").disabled = true;

        $(standard + "_1").disabled = true;
        $(standard + "_1").up('tr').hide();

        $(delivery).disabled = true;
        $(delivery).up('tr').hide();
    }
    else {
        $(format).disabled = false;
        $(format).up('tr').show();

        $(standard + "_0").disabled = false;
        $(standard + "_0").show();

        $(standard + "_1").disabled = false;
        $(standard + "_1").up('tr').show();

        $(delivery).disabled = false;
        $(delivery).up('tr').show();
    }

    if (!this.isPopover)
        this.pageClientValidate();
}

WebOrder.getChecks = function(parentId, rel) {
    rel = rel || "item";
    var value = "";
    var checks = $$("#" + parentId + " input[rel=" + rel + "]");
    for (var i = 0; i < checks.length; i++) {
        var chk = checks[i];
        if (chk.checked) {
            if (value.length > 0)
                value += "|";
            value += chk.id;
        }
    }
    return value;
}

WebOrder.getCheckedItems = function() {
    var value = this.getChecks("itemsParent");

    var container = $("checkedItemsContainer");
    if (!container) {
        container = $("playlistContainer");
        if (container)
            this.getPlayList();
        else
            return false;
    }
    container.down("input").value = value;

    return value.length == 0 ? false : true;
}

WebOrder.getPlaylist = function() {
    var value = "";

    var drops = $$("#playlistParent div[rel=drop]");
    for (var i = 0; i < drops.length; i++) {
        var drop = drops[i];
        var fields = this.getDurationFields(drops[i]);

        if (value.length > 0)
            value += "|";

        value += $F(fields.id);
        value += "_" + $F(fields.from.value);
        value += "_" + $F(fields.to.value);
        value += "_" + $F(fields.duration);
    }

    $("playlistContainer").down("input").value = value;

    return value == "" ? false : true;
}

WebOrder.getPlaylistItems = function() {
    var value = $("playlistContainer").down("input").value;
    var tokens = value.split("|");
    if (tokens[0].length == 0)
        return null;

    var items = new Array();

    for (var i = 0; i < tokens.length; i++) {
        var values = tokens[i].split("_");
        if (values.length > 0) {
            items.push({ id: values[0], from: parseInt(values[1]), to: parseInt(values[2]), duration: parseInt(values[3]) });
        }
    }
    return items;
}


WebOrder.updateItemStatus = function(element) {
    element = $(element);

    if (!confirm("This action will change the item's status. Do you want to proceed?"))
        return false;

    var orderId = element.next("input").value;
    var storyNumber = element.next("input", 1).value;
    var status = element.options ? $F(element) : element.next("input", 2).value;

    var h = $H({ "a": "status", "orderId": orderId, "storyNumber": storyNumber, "status": status });
    var opts = {
        method: "post",
        postBody: h.toQueryString(),
        onComplete: this.refreshOrderItemStatuses
    };
    Request(opts, "Changing request item status...", null, "/secured_salesperson/Order.ashx");
    return false;
}
WebOrder.unauthorizeItem = function(element) {
    element = $(element);

    if (!confirm("This action will unauthorise this story in all orders it appears. Do you want to proceed?"))
        return false;

    var storyNumber = element.next("input", 1).value;

    var h = $H({ "a": "unauth", "storyNumber": storyNumber });
    var opts = {
        method: "post",
        postBody: h.toQueryString(),
        onComplete: this.refreshOrderItemStatuses
    };
    Request(opts, "Changing item status...", null, "/secured_salesperson/Order.ashx");
    return false;
}

WebOrder.refreshOrderItemStatuses = function() {
    (_digitizingRefresh || Prototype.emptyFunction)();
    (_dubbingRefresh || Prototype.emptyFunction)();
}

WebOrder.searchDigRequests = function(element) {
    element = $(element);
    element.blur();

    var type = 0;
    var span = element.previous("span");
    var chk = span.down("input");
    if (chk.checked)
        type += 1; //parseInt($F(chk));
    chk = chk.next("input");
    if (chk.checked)
        type += 2; //parseInt($F(chk));  

    var input = $("orderTypeParent").down("input");
    input.value = type;

    var opts = {
        method: "post",
        postBody: "a=search&" + input.serialize(),
        onComplete: refreshGrid
    };
    Request(opts, "Searching digitalization requests...", null, "Dashboard.aspx");
}

WebOrder.initSortableFolders = function() {
    Sortable.create("foldersParent", {
        tag: 'div',
        only: 'sortable',
        overlap: 'vertical',
        constraint: 'vertical',
        handle: "handle",
        revert: false,
        dropOnEmpty: true,
        endeffect: function(div) { div.hide(); div.show(); }
    });

    var divs = $$("div.sortable");
    for (var i = 0; i < divs.length; i++) {
        new Draggable(divs[i], { revert: true, handle: "handle" });
    }
}

WebOrder.accept = function(target) {
    target = target || "accept";

    var ret = this.getItems(target);
    if (!ret) return false;

    if ((target == "accept" || target == "decline") && !this.pageClientValidate())
        return false;
    return true;
    __doPostBack(target, "");
}

WebOrder.updateOrder = function(orderId) {
    this.blur();
    Request.call(this, { intercept: true }, 'Preparing request...', 'popover', '/secured_salesperson/ManageOrder.aspx?oid=' + orderId);
    return false;
}

WebOrder.trackOrder = function() {
    this.blur();
    Request.call(this, { onFailure: function(t) { alert(t.responseText || t.statusText); } }, 'Retrieving tracking info...');
    return false;
}

WebOrder.highlightDenied = function() {
    var spans = $$("#digParent span[rel=status]");
    for (var i = 0; i < spans.length; i++) {
        var span = spans[i];
        if (span.innerHTML == "Denied")
            span.up("tr").className = "denied";
    }
}

WebOrder.validateList = function(source, args) {
    source = $(source);
    if (!source.up("tr").visible()) {
        args.IsValid = true;
        return;
    }

    //Firefox doesn't like [readAttribute]
    var control = source.controltovalidate ? $(source.controltovalidate) : $(source.readAttribute("controltovalidate"));

    // IF CONTROL IS DISABLED, IGNORE.
    if (control.disabled == true) {
        args.IsValid = true;
        return;
    }

    if (control.options) {
        args.IsValid = control.selectedIndex > 0;
    }
    else {
        var list = control.previous("SELECT");
        args.IsValid = list.options[list.selectedIndex].text.indexOf("specify)") < 0 || $F(control).trim().length > 0;
    }
}

WebOrder.validateDueDate = function(source, args) {
    var input = args.Value.strip();
    if (input.length == 0) {
        args.IsValid = true;
    }
    else {
        var dt = new Date(input);
        args.IsValid = dt > new Date();
    }
}

WebOrder.setError = function(div) {
    div = div || "validationErrorPanel";
    div = $(div);

    var body = $("body");
    if (body) {
        var offset = body.cumulativeOffset();
        div.setStyle({ top: (offset.top + 8) + "px", left: (offset.left + body.getWidth() - div.getWidth() - 32) + "px" });
        Event.observe(window, "resize", function() { div.setStyle({ left: (offset.left + body.getWidth() - div.getWidth() - 32) + "px" }); });
    }

    new Draggable(div);
    $(div).setStyle({ "opacity": "0.9" });
}

//WebOrder.reorderItems = function(gridId, direction) {
//    MoveRow(gridId, direction, null, false);

//    var ids = "";
//    var folderId = "";
//    var reorder = false;

//    var checks = $$("#" + gridId + " input[rel=checkbox]");
//    for (var i = 0; i < checks.length; i++) {
//        var chk = checks[i];
//        if (!reorder && chk.checked)
//            reorder = true;
//        var tokens = chk.id.split("_");
//        if (folderId.length == 0)
//            folderId = tokens[0];
//        if (ids.length > 0)
//            ids += ",";
//        ids += tokens[2];
//    }

//    if (reorder) {
//        var opts = {
//            method: "post",
//            postBody: "a=reorder&folderId=" + folderId + "&ids=" + ids
//        };
//        Request(opts, null, null, "Checkout.aspx");
//    }
//}

WebOrder.reorderItems = function(list, folderId, recordId) {
    var opts = {
        method: "post",
        postBody: "a=reorder&folderId=" + folderId + "&recordId=" + recordId + "&sequence=" + $F(list),
        onComplete: function() { if (AP.Folders[folderId]) AP.Folders[folderId].refresh(); }
    };
    Request(opts, null, null, "Checkout.aspx");
}

WebOrder.reorderItemsByKey = function(event) {
    if (event.keyCode == Event.KEY_UP) {
        this.reorderItems(this.gridId, 1);
        return false;
    }
    else if (event.keyCode == Event.KEY_DOWN) {
        this.reorderItems(this.gridId, -1);
        return false;
    }
}

WebOrder.cancelReturnKey = function(event) {
    if (event.keyCode == Event.KEY_RETURN && Event.element(event).tagName != "TEXTAREA")
        return false;
}



WebOrder.reorderListener = WebOrder.reorderItemsByKey.bindAsEventListener(WebOrder);

WebOrder.showDueDate = function(clicker, textBoxId, culture) {
    clicker.blur();
    var date = AP.CalendarControl.ParseDate($F(textBoxId), culture);
    var onClick = function(cal) { cal.ShowHide(); WebOrder.pageClientValidate(); };
    var cal = AP.CalendarControl.GetCalendar(clicker, textBoxId, date, false, onClick, culture);
    cal.ChangeDate(date);
    cal.ShowHide();
}

WebOrder.setCountry = function(list) {
    var countryList = $(list);
    var prefix = list.id.substr(0, list.id.indexOf("_countryList"));

    if (countryList == null || countryList.options == null)
        return;

    var countryId = Number(countryList.options[countryList.selectedIndex].value);
    if (isNaN(countryId))
        return;

    var state = $(list.id.replace("_countryList", "_stateList"));
    if (state) {
        if (countryId == "1")
            state.show();
        else
            state.hide();

        var stateLabel = $(list.id.replace("_countryList", "_regionLabel"));
        if (stateLabel) {
            var tmp = stateLabel.innerHTML;
            if (countryId == "1")
                stateLabel.innerHTML = "State";
            else if (countryId == "225")
                stateLabel.innerHTML = "County";
            else
                stateLabel.innerHTML = "Province";

            if (tmp.indexOf(":") > 0)
                stateLabel.innerHTML += ":";

            var provinceText = $(list.id.replace("_countryList", "_provinceText"));
            if (provinceText) {
                if (countryId == "1")
                    provinceText.hide();
                else
                    provinceText.show();
            }

            var zipLabel = $(list.id.replace("_countryList", "_zipCodeLabel"));
            if (zipLabel) {
                var tmp = zipLabel.innerHTML;
                zipLabel.innerHTML = countryId == "1" ? "Zip" : "Postcode";
                if (tmp.indexOf(":") > 0)
                    zipLabel.innerHTML += ":";
            }
        }
    }
}

WebOrder.setCountries = function() {
    if (WebOrder.country)
        WebOrder.setCountry(WebOrder.country);
    if (WebOrder.country2)
        WebOrder.setCountry(WebOrder.country2);
}

WebOrder.setInvoice = function(chk) {
    chk.blur();

    var emailRFV2 = $(WebOrder.email2.id.replace("emailText2", "emailRFV2"));
    var emailREV2 = $(WebOrder.email2.id.replace("emailText2", "emailREV2"));

    if (chk.checked) {
        emailRFV2.controltovalidate = emailREV2.controltovalidate = WebOrder.email2.id;
        $("invoicePH").show();
    }
    else {
        emailRFV2.controltovalidate = emailREV2.controltovalidate = $(WebOrder.email2.id.replace("emailText2", "emailText2Hack")).id;
        $("invoicePH").hide();
    }
    Event.observe(WebOrder.email2, "change", WebOrder.validateInvoiceEmail);
    WebOrder.pageClientValidate();
}

WebOrder.validateInvoiceEmail = function() {
    WebOrder.pageClientValidate();

    var emailRFV2 = $(WebOrder.email2.id.replace("emailText2", "emailRFV2"));
    var emailREV2 = $(WebOrder.email2.id.replace("emailText2", "emailREV2"));

    if (emailREV2.isvalid == true && emailRFV2.isvalid == true)
        WebOrder.email2.removeClassName("error");
    else
        WebOrder.email2.addClassName("error");
}

WebOrder.validateContactState = function(list, args) {
    args.IsValid = $F(WebOrder.country) != "1" || parseInt(args.Value) > 0;
}

WebOrder.validateInvoiceField = function(list, args) {
    args.IsValid = !WebOrder.invoiceCheck.checked || args.Value.length > 0;
}

WebOrder.validateInvoiceState = function(list, args) {
    args.IsValid = !WebOrder.invoiceCheck.checked || $F(WebOrder.country2) != "1" || parseInt(args.Value) > 0;
}

WebOrder.validateInvoiceCountry = function(list, args) {
    args.IsValid = !WebOrder.invoiceCheck.checked || parseInt(args.Value) > 0;
}

WebOrder.ffListKeyHack = function() {
    this.blur();
    this.focus();
}

WebOrder.fillContact = function(list) {
    list.disabled = true;

    var action = "/secured/Contact.ashx?a=contact&contactId=" + $F(list);

    new Ajax.Request(action, {
        onSuccess: function(transport) {
            WebOrder.fillContactName(list, "nameText", [transport.headerJSON._FirstName, transport.headerJSON._LastName, transport.headerJSON._MiddleName]);
            WebOrder.fillContactField(list, "emailText", transport.headerJSON._Email);
            WebOrder.fillContactField(list, "workPhoneText", transport.headerJSON._WorkPhone + " " + transport.headerJSON._WorkPhoneExt);
            WebOrder.fillContactField(list, "faxText", transport.headerJSON._Fax);
            WebOrder.fillContactField(list, "companyNameText", transport.headerJSON._Email);
            WebOrder.fillContactField(list, "address1Text", transport.headerJSON._Address1);
            WebOrder.fillContactField(list, "address2Text", transport.headerJSON._Address2);
            WebOrder.fillContactField(list, "address3Text", transport.headerJSON._Address3);
            WebOrder.fillContactField(list, "zipCodeText", transport.headerJSON._ZipCode);
            WebOrder.fillContactField(list, "cityText", transport.headerJSON._City);
            WebOrder.fillContactField(list, "stateList", transport.headerJSON._Region_ID);
            WebOrder.fillContactField(list, "provinceText", transport.headerJSON._RegionCode);
            WebOrder.fillContactField(list, "countryList", transport.headerJSON._Country_ID);
            WebOrder.pageClientValidate();
        },
        onComplete: function(transport) {
            list.disabled = false;
        }
    });

    return false;
}

WebOrder.fillContactField = function(list, id, value) {
    var fld = $(list.id.replace("contactList", id));
    if (fld) {
        fld.value = value;
        if (id == "countryList")
            WebOrder.setCountry(fld);
    }
}

WebOrder.fillContactName = function(list, id, names) {
    var fld = $(list.id.replace("contactList", id));
    if (fld) {
        var first = names[0];
        var last = names[1];
        var middle = names[2];

        var name = "";
        if (first.length > 0)
            name += first;
        if (middle.length > 0) {
            if (name.length > 0)
                name += " ";
            name += middle;
        }
        if (last.length > 0) {
            if (name.length > 0)
                name += " ";
            name += last;
        }
        fld.value = name;
    }
}

WebOrder.ready4download = function(chk) {
    chk = $(chk);
    var master, clearance;

    if (WebOrder.searchStoriesCriteria) {
        master = WebOrder.searchStoriesCriteria.master;
        clearance = WebOrder.searchStoriesCriteria.clearance;
    }
    else {
        var screener = $(chk.id.replace("orderItemStatusChecks", "orderTypes"));
        master = $(screener.id.replace("orderTypes_0", "orderTypes_1"));
        clearance = $(screener.id.replace("orderTypes_0", "orderTypes_2"));

        WebOrder.searchStoriesCriteria = {
            master: master,
            clearance: clearance,
            isMaster: master.checked,
            isClearance: clearance.checked
        };
    }

    if (chk.checked) {
        WebOrder.searchStoriesCriteria.isMaster = master.checked;
        WebOrder.searchStoriesCriteria.isClearance = clearance.checked;
        master.checked = false;
        clearance.checked = false;
        master.disabled = true;
        clearance.disabled = true;
    }
    else {
        master.checked = WebOrder.searchStoriesCriteria.isMaster;
        clearance.checked = WebOrder.searchStoriesCriteria.isClearance;
        master.disabled = false;
        clearance.disabled = false;
    }
}