var Handlers = Handlers || {};

 

var SIV = function() {

      // private SIV functions

      var useResponse = function(json, status, handler) {

            if(handler) {

                  handler.apply(this, [(json.success == 'true' ? true : false), json.data]);

            }

      }

 

      // return the public interface

      return {

            idSeed : 0,

            

          id : function(el, prefix){

                  var el = el ? $(el).get(0) : false;

              prefix = prefix || "infused-gen";

              var id = prefix + (++this.idSeed);

              return el ? (el.id ? el.id : (el.id = id)) : id;

          },

            

            addHandlers : function(methods) {

                  $.extend(Handlers, methods);

            },

            

            decode : function(json) {

                  

                  return eval("(" + json + ")");

            },

            

            ajaxCall : function(options) {

                  if(!options || !(options.module || options.url))

                        return false;

                  

                  if(typeof options.params == 'string') {                     

                        var params = options.params;

                  } else if(options.params && options.params.length > 0) {

                        var params = options.params.join('/');

                  }

 

                  var url  = options.url || '/' + options.module + '/'

                              + (options.controller ? options.controller + '/' : 'index/')

                              + (options.action ? options.action + '/' : 'index/')

                              + (params ? params : '');

 

                  if(options.form) {

                        if(typeof(options.form) == 'string') {

                              var formData = $('#' + options.form).serialize();

                        } else if($(options.form).length == 1) {

                              var formData = $(options.form).serialize();

                        } else {

                              var formData = [];

                              $.each(options.form, function() {

                                    formData.push($('#' + this).serialize());

                              })

                              formData = formData.join('&');                              

                        }                 

                  }

                  

                  var postData = options.postData ? jQuery.param(options.postData) : '';        

                  var data = (formData ? (formData + '&') : '') + postData;

                  

                  if(options.postQuery) {

                        data = data + '&' + options.postQuery;

                  }

 

                  var handlerFn = (typeof options.handler == 'string')

                        ? Handlers[options.handler]

                        : (

                              (typeof options.handler == 'function')

                                    ? options.handler

                                    : false

                        );

                  

                  $.ajax({

                        url: url,

                        success: function(data, statusText, XMLHttpRequest){

                              useResponse(data, statusText, handlerFn)

                        },

                        dataType: 'json',

                        data: data || null,

                        type: data ? 'POST' : 'GET'

                  });

            }

      }

}();

$.extend(Function.prototype, {

      createCallback : function(/*args...*/){

            // make args available, in function below

            var args = arguments;

            var method = this;

            return function() {

                  return method.apply(window, args);

            };

    },

      

    createDelegate : function(obj, args, appendArgs){

        var method = this;

      

        return function() {

                  

            var callArgs = args || arguments;

                  console.log(callArgs);

            if(appendArgs === true){

                callArgs = Array.prototype.slice.call(arguments, 0);

                callArgs = callArgs.concat(args);

            }else if(typeof appendArgs == "number"){

                callArgs = Array.prototype.slice.call(arguments, 0); // copy arguments first

                var applyArgs = [appendArgs, 0].concat(args); // create method call params

                Array.prototype.splice.apply(callArgs, applyArgs); // splice them in

            }

            return method.apply(obj || window, callArgs);

        };

    }

});

 

$.fn.extend({

      

      getId : function(sep) {

            sep = sep || '-';

            return this[0].id.substr(this[0].id.lastIndexOf('-')+1);

      },

      getLead: function(sep) {

            sep = sep || '-';

            return this[0].id.substr(0,this[0].id.indexOf('-'));

      },

      

      findParent : function(expr, maxDepth, returnEl) {

        var p = this[0], b = document.body, depth = 0;

        maxDepth = maxDepth || 50;

        while(p && p.nodeType == 1 && depth < maxDepth && p != b) {

            if($(p).is(expr)){

                return returnEl ? p : $(p);

            }

            depth++;

            p = p.parentNode;

        }

        return null;          

      },

 

      

      center: function(){return this.each(function(){$(this).css({position:'absolute'});var leftPos=($(window).width()-$(this).outerWidth())/2+$(window).scrollLeft();var topPos=($(window).height()-$(this).outerHeight())/2+$(window).scrollTop();if(topPos<0)topPos=0;if(leftPos<0)leftPos=0;$(this).css({left:leftPos+'px',top:topPos+'px',zIndex:'1000'});});},

        exists: function(){

            return jQuery(this).length > 0

        }

        

});

 

 

 

 


