var expectedHash = "";

list_jobs = function () {
    openjobs.list(function(data) {
        show_panel(data);
            
        $("#openjobs ul li .c_posicao a").each(function(){
            link = $(this).attr("href");
                
            link = link.replace(url,"");
                
            idx = link.indexOf("/") + 1;
                    
            _link = "#id/" + link.substr(idx);
                
            jsession_idx = _link.indexOf(";jsessionid");
            _link = _link.substr(0,jsession_idx);
                
            $(this).attr("href",_link);
                
        });
    });
}
    
view_job = function(queryString) {
    openjobs.show(queryString, function (data){
        show_panel(data);
        window.scrollTo(0,0);
        add_footer();
    });
}
    
add_job_form = function() { 
    validate = function(){
        $("#openjobs form").validate({
            submitHandler: function() {
                bind_review_button_listener();
            }
        })
    }
        
    openjobs.add(function(data){
        show_panel(data);
            
        $("#openjobs #form_cadastro #company").focus();
            
        $("#openjobs .openjobs_form").attr("action","");

        validate();
            
    }); 

    bind_review_button_listener = function() {
           
        var params = $("#openjobs .openjobs_form").serialize();
                
        openjobs.review(params, function(data){
            show_panel(data);
            
            window.scrollTo(0,0); 
                
            $("#openjobs #submit").focus();
                    
            $("#openjobs #change").click(function(){
                openjobs.edit(params, function(data){
                    show_panel(data);
                        
                    validate();
                });
                         
            });
                    
            //save to db and go to paypal
            $("#openjobs #submit").click(function(){
                $("#openjobs #submit").attr("disabled","true");
                //$("#openjobs #change").attr("disabled","true");
                $("#openjobs #change").css("display","none");
                $("#openjobs #submit").attr("value","Saving...");
                    
                openjobs.save(params, function(data) {
                    $("#openjobs #submit").attr("value","Redirecting to PayPal...");
                    
                    var json = eval('(' + data + ')');
                        
                    $("#openjobs #paypal_form #item_name").attr("value",json.name + " - " + json.job);
                        
                    $("#openjobs #paypal_form #item_number").attr("value",json.id);
                    $("#openjobs #paypal_form #amount").attr("value",json.price);
                    $("#openjobs #paypal_form #custom").attr("value",json.affiliate);
                    //$("#openjobs #paypal_form #cancel_return").attr("value",json.url);
                    //$("#openjobs #paypal_form #return").attr("value",json.url);
                        
                    $("#openjobs #paypal_form").submit();

                });
            });
        })
                
        return false;
            
    }
}
    
start = function(){
    pathname = window.location.hash;
    querystring = window.location.search;
    
    if (pathname == "" && querystring != "") {
        pathname = querystring;
    }
    
    idx = pathname.indexOf("/");

    if (idx >0) {
        pathname = pathname.substr(0,idx);
    }
        
    switch(pathname)
    {
        case "#add":
            add_job_form();
            break;    
        case "#id":
            view_job(window.location.hash);
            break;
        case "?id":
            view_job(window.location.search);
            break;    
        default:
            list_jobs();
            break;
    }

}

add_footer = function(){
    url = window.location.href;
    url = url.replace(window.location.hash,"");
    $("#openjobs #footer_link").attr("href",url);
}
    
make_history = function(newHash) {
    window.location.hash = newHash;
    expectedHash = window.location.hash;
}
    
handle_history = function() {
    if ( window.location.hash != expectedHash ) {
        expectedHash = window.location.hash;
        start();
    }
}

poll_hash = function() {
    handle_history();
    window.setInterval("handle_history()", 1000);
}
    
show_panel = function(data) {
    $("#openjobs").html(data);
    add_footer();
    remember_inputs(".openjobs_form .remember", function(){});
        
    $("#postjob_button").click(function(){
        make_history("#add");
        add_job_form(); 
        return false;
    });
}
   
load_modules = function() {
    $("script").each(function () {
        js_file = "services.js";

        if (this.src.match(js_file)) {
            url = this.src;
            url = url.replace(js_file,"");
                
            js_location = $(this).get();

            var dwr_engine = url +"dwr/engine.js";
            var dwr_services = url + "dwr/interface/openjobs.js";
            var validator_plugin = url + "jquery.validate.pack.js";
            var cookie_plugin = url + "jquery.cookie.js";
            var utils = url + "utils.js";
            
            $.getScript(dwr_engine, function(){
                $.getScript(dwr_services, function() {
                    $.getScript(validator_plugin, function(){
                        $.getScript(cookie_plugin, function(){
                            $.getScript(utils, function(){
                                
                                dwr.engine.setRpcType(dwr.engine.ScriptTag);
                
                                openjobs._path = url + "dwr";
                        
                                $(js_location).after("<div id='openjobs'></div>");
                
                                start();
                            
                            });                            
                        })
                    })
                });
            });

            return;
        }
    });                
            
}
    
load_modules();   
    
poll_hash();
    
