/**
 * global
 */
var formToArray = function(form){
  var x = form.serializeArray();
  var params = {};
  $.each(x, function(i, val){
//           if(val.value != ""){
             params[val.name] = val.value;
//           }
         });
  return params;
};

var parseParams = function(input, key){
  var params = {};
  $.each(key, function(i, val){
    if(jQuery.inArray(val, input) && input[val]){
      params[val] = input[val];
    }
  });
  return params;
};

/**
 * Dimio
 */
var Dimio={
  baseURL:null,
  commonURL:{},
  error: function(data){
    alert(data);
  },
  log: function(msg){
//    console.info(msg);
  },
  trace: function(msg){
    Dimio.log("=== " + msg + "============");
  },
  toggle: function(target, cls){
    var n = $(target).children().length;
    if(cls){
      $(cls).hide("slow");
    }

    if($(target).css("display") == "none"){
      $(target).show("slow");
    }else{
      $(target).hide("slow");
    }
  },
  loading: {
    start: function(target){
      var l = $("#loading").clone();
      l.show();
      $(target).html(l);
    },
    stop: function(target){
//      $(target)
    }
  },
  length: function(elm, target){
     $(target).html($(elm).children().length);
  },
  hlite: function(elm, level){
    level = (level == undefined)?2:level;
    if(level == 1 || level == 3){
      $(".lv"+level+"-item").removeClass("selectedItem");
    }else{
      $(".lv"+level+"-item li ul").removeClass("selectedItem");
    }
    $(elm).parent().parent().addClass("selectedItem");
  },
  genURL: function(p){
    var params = {};
    var x = Dimio.commonURL;
    for(var y in x){
      params[y] = x[y];
    }
    for(var i in p){
      params[i] = p[i];
    }
    return params;
  },
  getURL: function(params){
    if(typeof params == 'string'){
      this.log("[PATH]" + r);
      return params;
    }

    var r = "";
    r += (params.controller)?params.controller+"/":"";
    r += (params.action)?params.action+"/":"";

    for(var i in params){
      if(i != "controller" && i != "action"){
        r += i+"/"+params[i]+"/";
      }
    }
    this.log("[PATH]" + r);
    return r;
  }
};

Dimio.Elements={
  td: function(value){
    var item = document.createElement("td");
    item.appendChild(document.createTextNode(value));
    return item;
  },
  tr: function(){
    var item = document.createElement("tr");
    return item;
  },
  a: function(href, name){
    var link = document.createElement("a");
    link.href = href;
    link.innerHTML = name;
    return link;
  }
};

/**
 * Server loader class
 */
Dimio.Loader={
  loadHtmlContent: function(url, _success, _fail){
    var xurl = Dimio.baseURL + url;
    if(typeof _success == 'function'){
      $.ajax({type: "GET", url: Dimio.baseURL + url + Dimio.getURL(), dataType: "html", success: _success, fail: _fail});
    }else{
      $.ajax({type: "GET", url: Dimio.baseURL + url + Dimio.getURL(), dataType: "html",
              success: function(result){
                $(_success).html(result);
              },
              fail: function(result){
                $(_success).html(result);
              }
          });
    }
  },

  loadToPanel: function(url, target, method, callback){
    var xurl = Dimio.baseURL + Dimio.getURL(url);
    Dimio.loading.start(target);

    $.ajax({type: "GET", url: xurl, dataType: "html",
            success: function(result){
              if(method == 'append'){
                $(target).append(result);
              }else{
                $(target).html(result);
              }
              if(callback){
                callback();
              }
            },
            fail: function(result){
              $(target).html(result);
            }});
  },
  loadForm: function(url, target, callback){
    var xurl = Dimio.baseURL + Dimio.getURL(url);
    Dimio.loading.start(target);
    Dimio.log(xurl);
    $.ajax({type: "GET", url: xurl, dataType: "html",
            success: function(result){
              $(target).html(result);
              var form = $(target).find("form");
              form.removeAttr("action");
              form.submit(function(){
                            var params = formToArray($(this));
                            callback(params, target, url);
                            return false;});
            },
            fail: function(result){
              $(target).html(result);
            }});
  },
  loadToSelect: function(url, target, tmp){
    var xurl = Dimio.baseURL + Dimio.getURL(url);
    $(target).empty();
    $.ajax({type: "GET", url: xurl, dataType: "json",
            success:function(result){
              var r = (result.result)?result.result:result;
              var container = $(target)[0];
              if(container == undefined){
                  Dimio.log("container is undefined for " + target);
                return;
              }
              for(var i=0; i<r.length; i++){
                container.options[i] = new Option(r[i].name, r[i].id);
              }
            }, fail: Dimio.error});
  }
};

/**
 * Server Request Class
 */
Dimio.Request={
  appendRequest:function(url, request, callback){
    var j = $.toJSON(request);
    Dimio.log(j);
    var params = {input: j};
    this.sendAction(url, params, callback);
  },

  sendAction: function(url, params, callback){
    var xurl = Dimio.baseURL;
    if(typeof url == 'object'){
      xurl += Dimio.getURL(url);
    }else{
      xurl += url;
    }
//    Dimio.log(xurl);

    $.post(xurl, params,
      function(r){
        var ret = r.result;
        Dimio.log("result=" + ret.result);
        if(ret.result == 1){
          callback(ret);
        }else{
          Dimio.error(ret.message);
        }
      }, "json");
  },
  deleteAction: function(url, target, callback){
    var answer = confirm("Are you sure to delete this item?");

    if(answer){
      var xurl = Dimio.baseURL;
      if(typeof url == 'object'){
        xurl += Dimio.getURL(url);
      }else{
        xurl += url;
      }
//      Dimio.log(xurl);

      $.ajax({type: "GET", url: xurl, dataType: "json",
              success: function(r){
                var ret = r.result;
                Dimio.log("result=" + ret.result);
                if(ret.result == 1){
                  callback(ret.output, target);
                }else{
                  Dimio.error(ret.message);
                }
                return false;
              }, fail: Dimio.error});
    }else{
      return false;
    }
  }
};

Dimio.Validator={
  check:function(params, vldata){
    for(var i in vldata){
      switch(vldata[i].type){
      case "empty":
        if(params[vldata[i].field] == ""){
         Dimio.error(vldata[i].error);
         return false;
        }
        break;
      }
    }
    return true;
  }
};

Dimio.Uploader={
  swf:null,
  initUploader: function(url, oncomplete){
    var settings =
      {
        debug: config.upload.debug,
        flash_url : Dimio.baseURL + config.upload.swf,
        upload_url: url,
        post_params: {"PHPSESSID": "<?php echo session_id(); ?>"},

        // File Upload Settings
        file_size_limit : config.upload.limit,
        file_types : "*.jpg; *.gif;",
        file_types_description : "JPG Images",
        file_upload_limit : "0",

        custom_settings : {
          upload_target : "upload-progress"
        },

        button_image_url : Dimio.baseURL + config.upload.button,
        button_placeholder_id : 'upload-button',
        button_width: 84,
        button_height: 22,
        button_text : '<span class="button">Upload</span>',
        button_text_style : '.button { font-family: Arial, sans-serif; font-size: 12pt; font-weight:bold; color:#FFF; } .buttonSmall { font-size: 10pt; }',
        button_text_top_padding: 0,
        button_text_left_padding: 18,
        button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
        button_cursor: SWFUpload.CURSOR.HAND,

        file_queue_error_handler : fileQueueError,
        file_dialog_complete_handler : fileDialogComplete,
        upload_progress_handler : uploadProgress,
        upload_error_handler : uploadError,
        upload_success_handler : uploadSuccess,
//        upload_complete_handler : uploadComplete
        upload_complete_handler : oncomplete
      };

    Dimio.Uploader.swf = new SWFUpload(settings);
  }
};

Dimio.Panel={
  init: function(_elm){
    $(_elm).draggable();
    $(_elm).hide();
  },
  open: function(_elm, args){
    $(_elm).show();
    $(_elm).css("position", "absolute");
  },
  close: function(_elm){
    $(_elm).hide();
  }
};
