/*
 * jQuery Order Form Plugin
 * Requires jQuery 1.6.2
 * Created by Oleg Chesnokov, oleg.chesnokov(at)gmail.com
 */
jQuery.fn.orderform = function(options){
    var options = jQuery.extend({
        folder : "OrderForm",
        order_id : null
    },options);
    return this.each(function() {
        switch (options.folder){
            case "OrderForm" :$.fn.orderform.init({});break;
            case "OrderForm-orders" :$.fn.orderform.initfolder('orders');break;
            case "OrderForm-messages" :$.fn.orderform.initfolder('messages');break;
            case "OrderForm-settings" :$.fn.orderform.initfolder('settings');break;
            case "OrderForm-checkout" :$.fn.orderform.checkout();break;
            case "OrderForm-quote" :$.fn.orderform.init({type:'quote', caption: 'Get a quote'});break;
            case "OrderForm-quote-c1" :$.fn.orderform.init({type:'quote', caption: 'Check writer availability online'});break;
            case "OrderForm-quote-c2" :$.fn.orderform.init({type:'quote', caption: 'Check essay writer availability'});break;
            case "OrderForm-quote-c3" :$.fn.orderform.init({type:'quote', caption: 'Check term paper writer availability'});break;
            case "OrderForm-quote-c4" :$.fn.orderform.init({type:'quote', caption: 'Check research paper writer availability'});break;
            case "OrderForm-quote-c5" :$.fn.orderform.init({type:'quote', caption: 'Check report writer availability'});break;
        }
    });
};
$.extend($.fn.orderform,{
    orderform:null,
    
    input_orderindex:null,
    input_title:null,
    input_type:null,
    input_details:null,
    input_sources:null,
    input_level:null,
    input_pages:null,
    input_deadline:null,
    input_time:null,
    input_subject:null,
    output_price:null,
    output_totalprice:null,
    
    orders:null,
    
    formprice:null,
    formdeadline:null,
    formtotalprice:null,

    
    init: function(settings){
        $.getJSON("/orderform/orderform.php?settings", function(orderform){
                $.fn.orderform.orderform = orderform;
                $.get('/js/of_templates/custom.html',function(template){
                    $('#OrderForm').html('');
                    $.template( "template", template );
                    $.tmpl("template", orderform).appendTo('#OrderForm');
                    if(settings.order_id){
                        $('#OrderForm #saves_create_new').parent("div").remove();
                        $('#OrderForm .orders-top').remove();
                        $('#OrderForm .orders-bottom').remove();
                    }
                    if(settings.type == 'quote'){
                            $('#OrderForm').find(".b-orderform-detalis, .b-orderform-personal-detalis, .b-orderform-total, .orderform, .orders-top, .orders-bottom").hide();
                            if(settings.caption) $('.b-orderform-confirm .title3').text(settings.caption);
                    }
                    $.fn.orderform.input_orderindex = $('input[name="orderindex"]');
                    $.fn.orderform.input_title = $('input[name="title"]');
                    $.fn.orderform.input_type = $('select[name="type"]');
                    $.fn.orderform.input_details = $('textarea[name="details"]');
                    $.fn.orderform.input_level = $('select[name="level"]'); 
                    $.fn.orderform.input_sources = $('select[name="sources"]'); 
                    $.fn.orderform.input_format = $('select[name="format"]'); 
                    $.fn.orderform.input_pages = $('select[name="pages"]');
                    $.fn.orderform.input_deadline = $('input[name="deadline"]');
                    $.fn.orderform.input_discount = $('input[name="discount"]');
                    $.fn.orderform.input_time = $('select[name="time"]');
                    $.fn.orderform.input_subject = $('select[name="subject"]');
                    $.fn.orderform.output_price = $('#OrderForm .price');
                    $.fn.orderform.output_totalprice = $('#OrderForm .total');
                    $.getScript('/js/of_templates/custom.js',function(){
                        if(settings.order_id){
                            $.getJSON('/orderform/orderform.php?account=order&order_id='+settings.order_id,function(order){
                                $('#OrderForm form[name="orderform"]').append('<input type="hidden" name="order_id" value="'+order[0].order_id+'">');
                                $.fn.orderform.input_orderindex.val(0);
                                $.fn.orderform.input_title.val(order[0].title);
                                $.fn.orderform.input_type.val(order[0].type);
                                $.fn.orderform.input_pages.val(order[0].pages);
                                $.fn.orderform.input_details.val(order[0].details);
                                $.fn.orderform.input_level.val(order[0].levelID);
                                $.fn.orderform.input_sources.val(order[0].sources);
                                $.fn.orderform.input_format.val(order[0].format);
                                $.fn.orderform.input_subject.val(order[0].subject);
                                save_orders(false);
                            });
                        }
                    });
                    
                });
            });
    },
    show_price : function(d){
        this.formprice = null;
        this.formdeadline = null;
        p = this.input_pages.val();
        l = this.input_level.val();
        d = this.input_deadline.val();
        t = this.input_time.val();
        orderindex = this.input_orderindex.val();
        
        if(d){
            var date_split = d.split('/');
            var deadline = new Date(parseInt(date_split[2]),parseInt(date_split[1])-1,parseInt(date_split[0]),parseInt(t),0,0,0);
            Month = deadline.getMonth() + 1;
            this.formdeadline = deadline.getDate()+'/'+Month+'/'+deadline.getFullYear()+'/'+deadline.getHours();
        }
        if(p&&l&&d){
            var now = new Date();
            delta = Math.ceil((deadline.getTime()-now.getTime())/3600000);
            if(delta < this.orderform.Language.MinHoursOrder){
                alert(this.orderform.Language.MinHoursOrderMsg);
            }else{
                this.output_price.text('');
                i=this.orderform.Deadlines.length-1;
                dd_ind = -1;
                for(i=this.orderform.Deadlines.length-1;i!=0;i--)if(delta < this.orderform.Deadlines[i].value)dd_ind = this.orderform.Deadlines[i].ind;
                if(dd_ind == -1) dd_ind = this.orderform.BaseDeadlineIndex;
                price = this.orderform.Prices[l][dd_ind]*p;
                this.output_price.text(this.orderform.Language.currency + price);
                if(this.orders!=null){
                    this.orders[orderindex].price = price;
                }
                this.formprice = price;
                this.show_total();
            }
        }else{
            this.output_price.text(this.orderform.Language.ErrorPriceMsg);
        }
    },
    show_total : function(){
        total = 0;
        if(this.orders!=null)
            for(i=0; i < this.orders.length; i++)
                if(this.orders[i].price) total += this.orders[i].price;
        if(!total&&this.formprice) total = this.formprice;
        this.formtotalprice = total;
        if(total){
            this.output_totalprice.text(this.orderform.Language.currency + total);
        }else{
            this.output_totalprice.text(this.orderform.Language.ErrorTotalPriceMsg);
        }
        return total;
    },
    save_order : function(){
        if(this.orders)orders=this.orders;
        else orders = new Array();
        if(this.input_orderindex.val()==''){
            orderindex = orders.length;
        }else {
            orderindex = this.input_orderindex.val();
        }
        order = {
            orderindex :orderindex,
            orderstatus : 0,
            title: this.input_title.val(),
            type: this.input_type.val(),
            format: this.input_format.val(),
            details: this.input_details.val(),
            sources: this.input_sources.val(),
            level: this.input_level.val(),
            pages: this.input_pages.val(),
            deadline : this.formdeadline,
            discount : this.input_discount.val(),
            subject: this.input_subject.val(),
            price : this.formprice
        };
        if( order.title 
            && order.type
            && order.format
            && order.details
            && order.sources
            && order.pages
            && order.deadline
            && order.subject
            && order.price
        ){
            order.orderstatus = 1;
        }
        //this.formprice = null;
        //this.formdeadline = null;
        if(orders[orderindex])orders[orderindex]=order;
        else orders.push(order);
        this.orders = orders;
        this.indexing();
        this.show_total();
    },
    del_order : function(orderindex){
        this.orders.splice(orderindex, 1);
        this.indexing();
        this.show_total();
    },
    indexing : function(){
        for(i=0; i < this.orders.length; i++)this.orders[i].orderindex = i;
    },
    load_order : function(orderindex){
        if(!this.orders[orderindex])return;
        order=this.orders[orderindex];
        this.input_orderindex.val(order.orderindex);
        this.input_title.val(order.title);
        this.input_type.val(order.type);
        this.input_format.val(order.format);
        this.input_details.val(order.details);
        this.input_sources.val(order.sources);
        this.input_level.val(order.level);
        this.input_pages.val(order.pages);
        this.input_subject.val(order.subject);
        this.input_discount.val(order.discount);
        this.formprice = order.price;
        if(order.deadline){
            this.formdeadline = order.deadline;
            d_split = order.deadline.split('/');
            this.input_deadline.val(d_split[0]+'/'+d_split[1]+'/'+d_split[2]);
            this.input_time.val(d_split[3]);
        }
    },
    orders_load_order : function(order_id){
            $.getJSON('/orderform/orderform.php?account=order&order_id='+order_id,function(order){
            $.template( "template_order", order_template );
            result = $.tmpl("template_order", order);
            modal_show_html(result);
            $("table.b-personal-account-order tr:odd").css('background-color', '#f1f1f1');
        });
    },
    
    get_index_orderform: function(){
        if(this.orders){
            return this.orders.length;
        }else{
            return 0;
        }
    },
    checkout: function(){
        $("#OrderForm").load('/orderform/orderform.php?checkout');
    },
    initfolder : function(folder){
        $.getJSON("/orderform/orderform.php?account="+folder, function(objects){
            $.getScript('/js/of_templates/'+folder+'.js',function(){
                $.get('/js/of_templates/'+folder+'.html',function(template){
                    $('#OrderForm').html('');
                    $.template( "template", template );
                    $.tmpl("template", objects).appendTo('#OrderForm');
                    folder_init();
                });    
            });
        });
    }
});
var order_template = "";
var files_template = "";
var messages_order_template = "";
var messages_new_message = "";
var messages_new_revision = "";
var messages_new_refund = "";
var loader = '<div class="loader"><img src="/images/loader.gif"/>';

jQuery(document).ready(function(){
    form = jQuery('#OrderForm');
    form.html(loader);
    folder = form.attr("class");
    $.get('/js/of_templates/order.html',function(template){order_template=template;});
    $.get('/js/of_templates/messages_order.html',function(template){messages_order_template=template;});
    $.get('/js/of_templates/messages_new_message.html',function(template){messages_new_message=template;});
    $.get('/js/of_templates/messages_new_revision.html',function(template){messages_new_revision=template;});
    $.get('/js/of_templates/messages_new_refund.html',function(template){messages_new_refund=template;});
    form.orderform({folder:folder});
});
var messages_obj = {
    current_order : null
};
function messages_show_message(){
    $.template( "template_messages_new_message", messages_new_message );
    result = $.tmpl("template_messages_new_message", messages_obj);
    modal_show_html(result,500,420);
}
function messages_show_revision(){
    messages_obj.pending = 'revision';
    $.template( "template_messages_new_revision", messages_new_revision );
    result = $.tmpl("template_messages_new_revision", messages_obj);
    modal_show_html(result,500,470);
    $('#revision_deadline').dateinput({firstDay : 1,format: 'dd/mm/yyyy',min: 0});
}
function messages_show_refund(){
    messages_obj.pending = 'pending';
    $.template( "template_messages_new_refund", messages_new_refund );
    result = $.tmpl("template_messages_new_refund", messages_obj);
    modal_show_html(result,500,500);
}
function orders_requests_buttons(){
    buttons = '';
    sent_time = new Date(this.data.jssent_time);
    now = new Date(this.data.nowjs);
    if(now - sent_time > 14*1000*60*60*24) return '';
    buttons += this.data.status == 8 ? '&nbsp;|&nbsp;<a href="#" onclick="messages_show_revision();return false;" class="orders_requests_buttons">Revision</a>' : '';
    buttons += this.data.status == 8 ? '&nbsp;|&nbsp;<a href="#" onclick="messages_show_refund();return false;"   class="orders_requests_buttons">Refund</a>' : '';
    return buttons;
}
function timediff(date1,date2){
    day = 1000*60*60*24;
    hours = 1000*60*60;
    diff = date1-date2;
    dir = '';
    if (diff < 0) dir = "-";
    diff = Math.abs(diff);
    diff_d = Math.floor(diff/day);
    diff_h = Math.round((diff-diff_d*day)/hours);
    return dir + diff_d + "d"+ " " + diff_h + "h";
}
