/**
 * @author Igor
 */
/*
 *     if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
    var __method = this, args = $A(arguments), object = args.shift();
    return function() {
      return __method.apply(object, args.concat($A(arguments)));
    }
 * */

Function.prototype.bind = function() {
    if (arguments.length < 1 && typeof arguments[0] != "undefined") return this;
    var __method = this, args = [];
	for(var i=0;i<arguments.length;i++){ args.push(arguments[i]);}
	
	var object = args.shift();
    return function() {
	  var args_to_apply = []
	  
	  for(var i=0;i<args.length;i++){ args_to_apply.push(args[i]);}
	  for(var i=0;i<arguments.length;i++){ args_to_apply.push(arguments[i]);}
      return __method.apply(object, args_to_apply);
    }
  };

var MashUtil = {
	
	/*
	 * /path/path2/file.exe => file.exe
	 */
	getNameFromPath: function(s)
	{
		var arr = s.split("/");
		return arr[arr.length-1];		
	},
	
	validateRename:function(name)
	{
		return name.match(/^[a-zA-Z0-9-_.]*$/);
	},
	/*
	 *  /path/path2/file.exe, file2.exe => /path/path2/file2.exe
	 */
	rename: function(path, new_value)
	{
		var arr = path.split("/");
		arr[arr.length-1] = this.getNameFromPath(new_value);
		return arr.join("/");
	},
	
	/*
	 * // path/path2, path/path1 => path/path2/path1
	 * 
	 */
	renamePath: function(pathTo, path)
	{
		return this.rename(pathTo+"/", path);
	},
	
	getExtension: function(path)
	{
		var arr = path.split(".");
		return arr[arr.length-1];		
	},
	generateId:function ()
    {
         var dateObject = new Date();
         var uniqueId =
              dateObject.getFullYear() + '' +
              dateObject.getMonth() + '' +
              dateObject.getDate() + '' +
              dateObject.getTime();

         return uniqueId;
    },
     S4: function() {
     return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
    },
    guid: function () {
		var S4 = this.S4;
        return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
    },

	
	transformLinearCoords: function(coords)
    {
        //transform [x1, y1, x2, y2] to [[x1, y1], [x2, y2]]
        var result =  [];
        
        for(var i=0;i<coords.length;i++)
        {
            result.push([coords[i], coords[i+1]]);
            i++;
        }
        return result;
    },
	 polyBetween:function(a, b , c)
    {
    // делать полигон в зависимости от ориентации в горизонтальном положении хуже всего
     var xp = [];
     var yp = [];
     var koef = 6   ;
     xp.push(a.x, a.x+koef, b.x, b.x+koef, b.x+koef, b.x, a.x+koef, a.x);
     yp.push(a.y, a.y, b.y, b.y, b.y+koef, b.y+koef, a.y+koef, a.y+koef);
     return this.pnpoly(xp, yp, c.x, c.y);
        
    
    },

     pnpoly:function(xp, yp, x, y) 
     { 
         var i, j, c = 0, npol = xp.length; 
         for (i = 0, j = npol-1; i < npol; j = i++) { 
          if ((((yp[i] <= y) && (y < yp[j])) ||
        ((yp[j] <= y) && (y < yp[i]))) && 
        (x < (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i])) { 
           c =!c; 
          } 
         } 
         return c; 
     },
	 parseAjaxUrl: function()
	 {
	 	var segments = document.location.href.split("#")	
		var sharp = segments.length==1?"":segments[1];
	 	var result = {path: segments[0], sharp: sharp};
		return result;
	 }
	
	
}

